直流小电机调速系统.docx
- 文档编号:2937278
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:11
- 大小:118.26KB
直流小电机调速系统.docx
《直流小电机调速系统.docx》由会员分享,可在线阅读,更多相关《直流小电机调速系统.docx(11页珍藏版)》请在冰豆网上搜索。
直流小电机调速系统
单片机课程设计实验报告
题目:
直流小电机调速系统
学院:
自动化学院
班级:
姓名:
摘要
设计一种直流电机调速系统,以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产生的下降沿,可算出转速,并送至数码管显示。
第三章硬件部分设计
系统硬件部分包含输入模块、显示模块、控制模块、测速模块等。
在硬件搭建前,先通过ProteusPro7.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
sbitP2_0=P2^0;//数码管选定位
sbitP2_1=P2^1;
sbitP2_2=P2^2;
sbitP2_3=P2^3;
sbitP2_4=P2^4;//电机控制位
sbitkeysp0=P1^0;//电机转速为0的控制键
sbitkeysp30=P1^1;//电机转速为30的控制键
sbitkeysp60=P1^2;//电机转速为60的控制键
sbitkeysp100=P1^3;//电机转速为100的控制键
unsignedcharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
unsignedintmotorspeed;//电机转速
unsignedcharGE,SHI,BAI,QIAN;//电机转速motorspeed的各个位
unsignedintcounter=0;//光电传感器脉冲数
unsignedintpwm;//pwm占空比
unsignedintmid;//占空比设置值
unsignedintcalsp;//设定多长时间计算一次速度
voiddisplay();//数码管显示电机速度
voiddelay();//延迟函数
voidcontrolpwm();//控制电机占空比
voidcalspeed();//计算电机速度,放于motorspeed变量中
voidkeyscan();//按键扫描
voidmain()
{
P2=P2&0x0f;
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
while
(1)
{
keyscan();
display();
controlpwm();
calspeed();
}
}
voidkeyscan()//键盘扫描
{
if(keysp0==0)
{
delay();//延迟防止抖动
if(keysp0==0)
mid=0;
}
if(keysp30==0)
{
delay();
if(keysp30==0)
mid=1;
}
if(keysp60==0)
{
delay();
if(keysp60==0)
mid=3;
}
if(keysp100==0)
{
delay();
if(keysp100==0)
mid=5;
}
}
voidcalspeed()
{
if(calsp>=100)//100*10ms=1s计算一次电机转速
{
motorspeed=counter/3;//转的圈数除以时间
counter=0;//清零脉冲数
calsp=0;//清零标志
}
}
voidcontrolpwm()
{
if(pwm>=0&&pwm { P2_4=1;//电机加速 } elseif(pwm>=mid&&pwm<10) { P2_4=0;//电机不加速 } elsepwm=0; } void_TIMER0()interrupt1 { TH0=(65536-10000)/256;//重新装入初值,计数时间为10ms TL0=(65536-10000)%256; pwm++; calsp++; } void_INT0()interrupt0 { counter++;//接受脉冲数 } voiddisplay()//数码管显示函数 { GE=motorspeed%10; SHI=motorspeed/10%10; BAI=motorspeed/100%10; QIAN=motorspeed/1000%10; P2_0=0; P0=table[QIAN]; delay(); P0=0xff; P2_0=1; P2_1=0; P0=table[BAI]; delay(); P0=0xff; P2_1=1; P2_2=0; P0=table[SHI]; delay(); P0=0xff; P2_2=1; P2_3=0; P0=table[GE]; delay(); P0=0xff; P2_3=1; } voiddelay()//延迟函数 { unsignedchari=10; while(i--) ; } 第五章系统测试 测试方案: 测试包含仿真测试和硬件测试两个部分。 仿真测试指使用ProteusPro7.5对系统进行仿真测试。 主要测试系统电路的设计和验证程序逻辑的正确性。 硬件测试指系统搭建后对硬件电气性能的测试。 主要测试各功能的完整性可靠性,以及系统电气性能的稳定性。 测试工具为示波器万用表等。 仿真测试结果: 真测试中,系统运行正常,程序逻辑正确。 按键输入正常、数码管显示正确。 P2.4管脚间输出PWM波正常。 硬件测试结果: 系统硬件搭建完毕后,进行硬件测试。 系统加电后,振荡电路正常起振,STC89C52在时钟源电路的驱动下运行正常。 系统可在复位电路的作用下正常复位。 系统按键输入正常,并能够正确消除抖动。 系统PWM波输出正常。 将示波器接STC89C52的P2.4管脚,可观察到峰峰值5V左右的方波,频率与调速要求一致。 ST151传感器测量正常。 数码管转速显示正常,数码管可正确显示并正确显示电机转速。 第六章实验总结
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 直流 电机 调速 系统