- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
直流电机测速
摘要
设计一种直流电机调速系统,以STC89C52为控制核心,通过ULN2003驱动电机,使用ST151测量转速,实现了按键输入、电机驱动、转速控制、转速显示等功能。
关键词:直流电机, 80C51, ULN2003, 转速控制
题目描述
直流小电机调速系统:
采用单片机、uln2003为主要器件,设计直流电机调速系统,实现电机速度开环可调。
要求:1、电机速度分30r/m、60r/m、100r/m共3档;
2、通过按选择速度;
3、检测并显示各档速度。
所需器件:
实验板(中号)、直流电机、STC89C52、电容(30pFⅹ2、10uFⅹ2)、数码管(共阳、四位一体)、晶振(12MHz)、小按键(4个)、ST151、电阻、发光二极管等。
方案论述
按照题给要求,我们最终设计了如下的解决方案:
用户通过键盘键入控制指令(开关),微控制器在收到指令后改变输出的PWM波,最终在ULN2003的驱动下电机转速发生改变。通过ST151传感器测量电机扇叶的旋转情况,将转速显示在数码管上。
在程序主循环中实现按键扫描与转速显示,将定时器0作为计数器,计数ST151产生的下降沿,可算出转速,并送至数码管显示。
硬件部分设计
系统硬件部分包含输入模块、显示模块、控制模块、测速模块等。在硬件搭建前,先通过Proteus Pro 7.5进行硬件仿真实现。
1.时钟电路
系统采用12M晶振与两个30pF电容组成震荡电路,接STC89C52的XTAL1与XTAL2引脚,为微控制器提供时钟源
2.按键电路
四个按键分别控制电机的不同转速,即控制PWM波高电平的占空比,以实现电机的速度控制,采用开环控制方法,不是十分精确,但控制简单,易实现,代码编写简单
3.显示部分
系统采用4位共阴极数码管实现转速显示。数码管的位选端1~4分别接STC89C52的P2.0~P2.3管脚,端选段A~G与DP分别接STC89C52的P0.0~P0.7管脚。
需要说明的是:实际焊接电路时,数码管的位选端需要焊接三极管,否则数码管显示亮度将会非常暗。
4.电机控制与驱动部分
电机的运行通过PWM波控制。PWM波通过STC89C52的P2.4口输出。
说明:测速部分用的是Motro-encode电机,实际用ST151实现测速,焊接电路如下图:
其中R1=510Ω,R2=4.7KΩ
ST内部电路:
5.其他电路
复位电路如下所示:
完整仿真电路图:
软件部分设计
1.开发环境
系统软件采用Keil集成开发环境开发
程序代码如下(带注释):
#include reg51.h
sbit P2_0=P2^0; //数码管选定位
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
sbit P2_4=P2^4; //电机控制位
sbit keysp0=P1^0; //电机转速为0的控制键
sbit keysp30=P1^1; //电机转速为30的控制键
sbit keysp60=P1^2; //电机转速为60的控制键
sbit keysp100=P1^3; //电机转速为100的控制键
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
unsigned int motorspeed; //电机转速
unsigned char GE,SHI,BAI,QIAN; //电机转速motorspeed的各个位
unsigned int counter=0; //光电传感器脉冲数
unsigned int pwm; //pwm占空比
unsigned int mid; //占空比设置值
unsigned int calsp; //设定多长时间计算一次速度
void display(); //数码管显示电机速度
void delay(); //延迟函数
void controlpwm(); //控制电机占空比
void calspeed(); //计算电机速度,放于motorspeed变量中
void keyscan(); //按键扫描
void main()
{
P2=P20x0f;
mid=0;
EA=1; //开启总中断
EX0=1; //开启外部中断0
IT0=1; //设置成下降沿触发方式
TMOD=0x01; //设置定时器0为模式1,即16位计数模式
TH0=(65536-10000)/256; //计数时间为10ms
TL0=(65536-10000)%256;
ET0=1; //开启定时器0中断
TR0=1;
文档评论(0)