目录

1.前言

1.1 直流电机介绍

1.2 PWM介绍

2.源码

2.1 main.c

2.2 key.c

2.3 key.h

2.4  Nixie.c

2.5 Nixie.h

2.6 Timer0.c

2.7 Timer0.h


1.前言

1.1 直流电机介绍

直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转
直流电机主要由永磁体(定子)、线圈(转子)和换向器组成
除直流电机外,常见的电机还有步进电机、舵机、无刷电机、空心杯电机等

1.2 PWM介绍

PWM(Pulse Width Modulation)即脉冲宽度调制(如电机:转5ms停1ms还是转5ms停2ms),在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速、开关电源等领域。LED没有电的时候也不是马上熄灭的,尽管很快(余晖);这里只做简单介绍,具体原理可以自己上网查找;

PWM重要参数:
     频率 = 1 / TS            占空比 = TON / TS           精度 = 占空比变化步距

频率低电机抖动明显,启动 停止 启动...频率越高越平缓

占空比1%—>2%—>3%...精度就为1%

2.源码

下面的代码基本都是前面几章写过的代码,模块化编程大大的节省了我们编程的时间,当我们要用的话,直接复制一下之前的代码就ok了;这里就不过多介绍了;

2.1 main.c

#include <REGX52.H>
#include "Delay.h"
#include "Key.h"
#include "Nixie.h"
#include "Timer0.h"sbit Motor=P1^0;unsigned char Counter,Compare;    //计数值和比较值,用于输出PWM
unsigned char KeyNum,Speed;void main()
{Timer0_Init();while(1){KeyNum=Key();if(KeyNum==1){Speed++;Speed%=4;if(Speed==0){Compare=0;}   //设置比较值,改变PWM占空比if(Speed==1){Compare=50;}if(Speed==2){Compare=75;}if(Speed==3){Compare=100;}}Nixie(1,Speed);}
}void Timer0_Routine() interrupt 1
{TL0 = 0x9C;       //设置定时初值TH0 = 0xFF;        //设置定时初值Counter++;Counter%=100;  //计数值变化范围限制在0~99if(Counter<Compare)  //计数值小于比较值{Motor=1;        //输出1}else              //计数值大于比较值{Motor=0;        //输出0}
}

2.2 key.c

#include <REGX52.H>
#include "Delay.h"/*** @brief  获取独立按键键码* @param  无* @retval 按下按键的键码,范围:0~4,无按键按下时返回值为0*/
unsigned char Key()
{unsigned char KeyNumber=0;if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);KeyNumber=1;}if(P3_0==0){Delay(20);while(P3_0==0);Delay(20);KeyNumber=2;}if(P3_2==0){Delay(20);while(P3_2==0);Delay(20);KeyNumber=3;}if(P3_3==0){Delay(20);while(P3_3==0);Delay(20);KeyNumber=4;}return KeyNumber;
}

2.3 key.h

#ifndef __KEY_H__
#define __KEY_H__unsigned char Key();#endif

2.4  Nixie.c

#include <REGX52.H>
#include "Delay.h"//数码管段码表
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};/*** @brief  数码管显示* @param  Location 要显示的位置,范围:1~8* @param  Number 要显示的数字,范围:段码表索引范围* @retval 无*/
void Nixie(unsigned char Location,Number)
{switch(Location)       //位码输出{case 1:P2_4=1;P2_3=1;P2_2=1;break;case 2:P2_4=1;P2_3=1;P2_2=0;break;case 3:P2_4=1;P2_3=0;P2_2=1;break;case 4:P2_4=1;P2_3=0;P2_2=0;break;case 5:P2_4=0;P2_3=1;P2_2=1;break;case 6:P2_4=0;P2_3=1;P2_2=0;break;case 7:P2_4=0;P2_3=0;P2_2=1;break;case 8:P2_4=0;P2_3=0;P2_2=0;break;}P0=NixieTable[Number]; //段码输出Delay(1);             //显示一段时间P0=0x00;               //段码清0,消影
}

2.5 Nixie.h

#ifndef __NIXIE_H__
#define __NIXIE_H__void Nixie(unsigned char Location,Number);#endif

2.6 Timer0.c

#include <REGX52.H>/*** @brief  定时器0初始化,100us@12.000MHz* @param  无* @retval 无*/
void Timer0_Init(void)
{TMOD &= 0xF0;     //设置定时器模式TMOD |= 0x01;     //设置定时器模式TL0 = 0x9C;       //设置定时初值TH0 = 0xFF;        //设置定时初值TF0 = 0;       //清除TF0标志TR0 = 1;      //定时器0开始计时ET0=1;EA=1;PT0=0;
}

2.7 Timer0.h

#ifndef __TIMER0_H__
#define __TIMER0_H__void Timer0_Init(void);#endif

51单片机——直流电机调速相关推荐

  1. 直流电机调速c语言程序,分享一个51单片机直流电机调速源程序

    /*******************************************************************/ /* 程序名:PWM直流电机调速 */ /* 晶振:11.0 ...

  2. 51单片机直流电机调速c语言,51单片机直流电机调速程序

    #includereg52.h>本文引用地址:http://www.eepw.com.cn/article/170917.htm sbit KEY1 = P3^1; //定义调速按键 sbit ...

  3. 51单片机PWM调速风扇转速显示转速设置

    实践制作DIY- GC0029-PWM调速风扇 一.功能说明: 基于51单片机设计-PWM调速风扇 二.功能介绍: STC89C52单片机(AT89C52)+5V4线PWM风扇+LCD1602显示器+ ...

  4. 51单片机-PWM调速(直流电机,智能小车的电机调速)

    文章目录 前言 一.PWM 二.产生PWM的方法 使用定时器产生一个恒定的周期 中断服务子程序里设置比较值 三.实验 使用PWM对直流电机调速 使用PWM对智能小车的电机调速 总结 前言 这次来对PW ...

  5. 51 单片机 PWM调速基本原理

    /******************************************************************************** * 标题: 恒速运行 ******* ...

  6. 基于51单片机直流电机PWM调速设计

    具体实现功能 系统由STC89C52单片机.LCD1602液晶显示屏.霍尔测速传感器.3V直流电机.按键模块构成. 具体功能: 1.采用霍尔传感器非接触式测电机转速: 2.LCD1602液晶显示当前的 ...

  7. 【Proteus仿真】51单片机+直流电机PWM调速实验

    [Proteus仿真]51单片机+直流电机PWM调速实验 Proteus仿真 采用L293驱动直流电机 -PWM是采用定时器中断实现 /******************************** ...

  8. 51单片机+直流电机PWM 10级调速控制

    51单片机+直流电机PWM 10级调速控制 Proteus仿真演示 示例程序代码 #include <STC89C5xRC.H> typedef unsigned char u8; typ ...

  9. 基于51单片机的L298N直流电机调速系统Proteus仿真程序

    基于51单片机的L298N直流电机调速系统Proteus仿真程序 本此设计选择STC89C52单片机作为主控芯片,选取带有光电编码器的直流电机作为被控对象,利用单片机的T0定时器产生PWM信号并送到直 ...

最新文章

  1. mybatis-plus AutoGenerator
  2. Faster R-CNN理解、讨论
  3. F1.4大光圈专业相机-海鸥CF100
  4. java数组的api_java程序员常用的11个API,赶紧收藏
  5. SQL Server where和having区别
  6. alter table *** add constraint *** 用法---约束
  7. eclipse 配色方案
  8. 马云:大部分失败企业都是因为不够专注
  9. Battle Zone 战争地带
  10. nginx 常用配置说明
  11. mysql8+maven+mybatis
  12. 详述 MySQL 中的行级锁、表级锁和页级锁
  13. 应用计算机测定伏安特性实验,实验25应用计算机测电阻伏安特性.doc
  14. IO、文件、NIO【草案三】
  15. python代码手机壁纸_70行python代码实现壁纸批量下载
  16. 06-jQuery的文档操作***
  17. 在PPT中显示时间以提醒演讲者控制时间
  18. windows下查看和关闭端口
  19. QQ,TIM 如何设置代理
  20. sas java_Sas java环境变量配置

热门文章

  1. 中心极限定理以及置信区间总结
  2. Cisco Firepower 下一代防火墙
  3. matlab模拟短波天波,天波传播.ppt
  4. 烧脑电影:彗星来的那一夜(Coherence)
  5. RTOS 系统篇-统计任务的 CPU 使用率
  6. hbase安装记录测试
  7. 上海市的某快递公司根据投送目的地距离公司的远近,将全国划分成5个区域,请编写程序从键盘输入邮件的目的区域编码和重量,按下列计费规则计算快递费用并输出运费,计算结果保留2位小数。
  8. 复变函数与积分变换期末试题带答案
  9. 岁月如白驹过隙,抓住了你就是黑马
  10. 基于asp.net的三层架构美食信息在线分享网站mvc