直流电机调速测速按键显示.docx
《直流电机调速测速按键显示.docx》由会员分享,可在线阅读,更多相关《直流电机调速测速按键显示.docx(23页珍藏版)》请在冰豆网上搜索。
直流电机调速测速按键显示
摘要
本设计基于单片机STC90C516RD+为核心,以小型直流电机为对象,以L9110芯片为驱动核心,通过4个按键,实现直流电机的启动,速度和方向的控制,并通过液晶LCD1602显示出来。
对直流电机进行速度测量的原理,采用了PWM技术对电机进行控制,通过对占空比的计算达到精确调速的目的。
实时测量电机的实际转速,并显示出来。
采取传统的调速系统主要有以下的缺陷:
模拟电路容易随时间飘移,会产生一些不必要的热损耗,以及对噪声敏感等。
而用PWM技术后,避免上述的缺点,实现了数字式控制模拟信号,可以大幅度减低成本和功耗。
并且PWM调速系统开关频率较高,仅靠电枢电感的滤波作用就可以获得平滑的直流电流,低速特性好;同时,开关频率高,快响应特性好,动态抗干扰能力强,可获很宽的频带;开关元件只需工作在开关状态,主电路损耗小,装置的效率高,具有节约空间、经济好等特点。
关键词:
单片机;PWM;直流电机;L9110;
一、设计任务
以单片机为控制核心的直流电机PWM调速控制系统,实现的功能主要包括:
直流电机的正、反转;直流电机的加速和减速;直流电机的启动和停止;以及直流电机的转速在LCD显示屏上显示。
二、设计方案
1、设计思路
直流电机PWM控制系统的主要功能包括:
直流电机的加速、減速以及电机的正转和反转,并且可以调整电机的转速,还可以方便的读出电机转速的大小,能够很方便的实现电机的智能控制,其间,还包括直流电机的直接清零、启动(置数)、暂停、连续等功能。
该直流电机控制系统由以下电路模块组成:
(1)振荡器和时钟电路:
这部分电路主要由80C51单片机和一些电容、晶振组成。
(2)设计输入部分:
这一模块主要是利用带中断的独立式键盘来实现。
(3)设计控制部分:
主要由AT89C51单片机的外部中断扩展电路组成。
(4)设计显示部分:
包括液晶显示部分和LED数码显示部分。
其中液晶显示部分由1602LCD液晶显示模块组成;LED数码显示部分由七段数码显示管组成。
(5)直流电机PWM控制实现部分:
主要由一些二极管、电机和L289直流电机驱动模块组成。
2、基本原理与总体设计框图
主体电路:
即直流电机PWM控制模块。
这部分电路主要由80C51单片机的I/O端口、定时/计数器、外部中断扩展等控制直流电机的加速、减速以及电机的正转和反转,并且可以调整电机的转速,还可以方便的读出电机转速的大小,能够很方便的实现电机的智能控制,其间,还包括直流电机的直接清零、启动(置数)、暂停、连续等功能。
直流电机PWM调速方案设计框图如图1所示。
图1直流电机PWM调速方案设计框图
方案说明:
直流电机PWM调速系统以AT89C51单片机为控制核心,由命令输入模块、LCD显示模块及电机驱动模块组成。
采用带中断的独立式键盘作为命令的输入,单片机在程序的控制下,定时不断的给直流电机驱动芯片发送PWM波形,H型驱动电路完成电机正、反转控制;同时单片机不停的将从键盘读取的数据送到LCD显示模块中去显示,从中不仅能读取其速度,而且能知晓其转向及一些温馨提示。
三、系统硬件设计
1、STC90C51最小系统
(1)STC90C516RD+芯片
STC90C516RD+的引脚如图2所示
图2STC90C516RD+引脚图
(2)系统时钟电路
本系统采用11.0592MKZ的外部石英晶振作为单片机的时钟脉冲输入。
电路图如图3所示。
图3时钟电路
(3)复位电路
本系统采用的是上电复位方式。
如图4所示。
图4复位电路
(4)最小系统原理图
最小系统包括系统时钟电路,复位电路、单片机芯片引脚借口,保证了单片机能够正常的工作。
如图5所示.
图5STC90C51最小系统
2、直流电机设计部分
(1)直流电机的基本机构
直流电机主要由定子、转子和结构件三部分组成。
定子包括机座、主磁极、换向磁极、前、后端盖和电刷装置等几个部分;转子是直流电动机实现能量转换的枢纽,有称为“电枢”,转子外圆有槽,槽内嵌有电枢绕组,绕组通过换向器和电刷引出。
直流电机的结构如图6所示。
图6直流电机结构
(2)直流电机的工作原理
直流电机电路模型如图7所示,磁极N、S间装着一个可以转动的铁磁圆柱体,圆柱体的表面上固定着一个线圈abcd。
当线圈中流过电流时,线圈受到电磁力作用,从而产生旋转。
根据左手定则可知,当流过线圈中电流改变方向时,线圈的受力方向也将改变,因此通过改变线圈电路的方向实现改变电机的方向。
图7直流电动机电路模型
(3)直流电机PWM调速原理
PWM(脉冲宽度调制)是通过控制固定电压的直流电源开关频率,改变负载两端的电压,从而达到控制要求的一种电压调整方法。
PWM可以应用在许多方面,比如:
电机调速、温度控制、压力控制等等。
在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并且根据需要改变一个周期内“接通”和“断开”时间的长短。
通过改变直流电机电枢上电压的“占空比”来达到改变平均电压大小的目的,从而来控制电动机的转速。
也正因为如此,PWM又被称为“开关驱动装置”。
如图8所示:
图8PWM方波
设电机始终接通电源时,电机转速最大为Vmax,设占空比为
D=
/T,则电机的平均速度为Va=Vmax*D,其中Va指的是电机的平均速度;Vmax是指电机在全通电时的最大速度;D=
/T是指占空比。
由上面的公式可见,当我们改变占空比D=
/T时,就可以得到不同的电机平均速度Vd,从而达到调速的目的。
严格来说,平均速度Vd与占空比D并非严格的线性关系,但是在一般的应用中,我们可以将其近似地看成是线性关系。
对于直流电机来说,如果加在电枢两端的电压为5所示的脉动电流压(要求脉动电压的周期远小于电机的惯性常数),可以看出,在T不变的情况下,改变T1和T2宽度,得到的电压将发生变化,下面对这一变化进一步推导。
图9施加在电枢两端的脉动电压
设电机接全电压U时,其转速最大为Vmax。
若施加到电枢两端的脉动电压占空比为D=
/T,则电枢的平均电压为:
U=U×D………………………………………………(1.4)
≈U×
=KD
在假设电枢内阻转小的情况下式中K
,K是常数。
图10为施加不同占空比时实测的数据绘制所得占空比与转速的关系图。
图10占空比与电机转速的关系
由图看出转速与占空比D并不是完全的线性关系(途中实线),原因是电枢本身有电阻,不过一般直流电机的内阻较小,可以近视为线性关系。
由此可见,改变施加在电枢两端电压就能改变电机的转速,这就是直流电机PWM调速原理。
3、电机驱动及测速模块
直流电机的驱动模块主要由一些二极管、电机和L9110直流电机驱动模块(内含CMOSS管、三态门等)组成。
如图11所示。
图11电机驱动及测速电路图
4、液晶显示部分
1602液晶显示共有16个引脚。
如图12所示。
图121602液晶显示电路图
5、独立按键模块
本系统设计了4个独立按键,低电平有效。
分别用作电机正转按键、电机反转按键、电机加减速按键、电机停止按键。
其电路原理图如图13所示。
图13独立按键电路图
四、系统软件设计
1、电机控制流程图
直流电机控制系统的设计流程图如图14所示
图14系统的设计流程图
2、显示程序流程图
图15显示程序流程图
3、定时中断流程图
图16定时中断服务流程图
七,调试与结果
启动单片机,此时直流电动机处于静止状态,LED灯微亮。
按下按键1启动并实现中速正转,LED灯全亮,按下按键2立即改变转动方向并且有1秒的缓冲,然后以相同的速度反转,LED灯全亮。
按下按键3,电机转速缓慢增加,LED灯亮度缓慢增加,按下按键4,电机转速缓慢减小,LED灯亮度缓慢减小;按下按键5,电机转速快速增加,LED灯亮度快速增加,按下按键6,电机转速快速减小,LED灯亮度快速减小。
当按下按键7,电机停止转动,LED灯微亮;按下按键8时,电机回到中速状态,LED灯微亮。
比例调速数据
设置转速:
1000R/MIN
时间/S
1
2
3
4
5
6
转速/R/MIN
1121
945
764
570
411
342
时间/S
7
8
9
10
11
12
转速/R/MIN
469
584
704
824
983
1096
六、心得体会
本次课程设计的直流电机速度控制系统是以低价位的单片微机AT90C51为核心的,而通过单片机来实现电机调整又有多种途径,相对于其他用硬件或者硬件与软件相结合的方法实现对电机进行调整,采用PWM软件方法来实现的调速过程具有更大的灵活性和更低的成本,它能够充分发挥单片机的效能,对于简易速度控制系统的实现提供了一种有效的途径。
通过这次设计使我掌握了基于单片机系统设计的基本方法,不仅巩固了自己所学的理论知识,还锻炼了自己的动手能力。
在设计中使我对具体程序的编写过程有了更好的把握,对相应指令的内涵有了更深入的理解。
在设计中遇到了很多问题,但是经过自己的不懈努力终于完成了设计,使我感到非常欣慰,也给了我更多的信心来面对今后的生活与工作。
设计中也存在许多不足之处。
主要体现在对所学知识不能灵活运用、举一反三,另外也缺乏系统设计的实际经验。
希望今后能多多练习,弥补自己的不足。
学习到理论知识与实践中的差距,理论在没有实践的进行,无法成为现实,实践在没有理论的支持也是不行的。
参考文献
[1]李庆亮.C语言程序设计实用教程.机械工业出版社
[2]王新颖.单片机原理及应用设计.北京大学出版社
[3]陈伯时.电力拖动自动控制系统——运动控制系统机械工业出版社
[4]王兆安.电力电子技术.机械工业出版社
[7]曾晓宏.数字电子技术.北京:
机械工业出版社
[8]江晓安模拟机电子技术.西安电子科技大学出版社
[9]江力.单片机原理与应用设计.北京:
清华大学出版社
[10]王新颖.电力电子技术.北京:
中国铁道出版社
附录一元器件清单
元件
数量(个)
LCD1602
1
1N4003
4
五输入与门
1
按钮
8
排阻
1
ATC90C516RD+单片机
1
12M晶振
1
直流电机
1
可变电阻器1K
1
电阻100Ω
3
L99110直流电机驱动
1
附录二程序清单
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitPW1=P1^0;
sbitPW2=P1^1;//控制电机的两个输入
sbitaccelerate=P0^2;//调速按键
sbitstop=P0^3;//停止按键
sbitleft=P0^4;//左转按键
sbitright=P0^5;//右转按键
sbitdetect=P3^2;//检测脉冲
sbitlcdrs=P0^0;
sbitlcden=P0^1;
#defineDaP2
uinttemp;//保存检测到的电平数据以便比较
uintcount;//用于计数
uintaa,bb;//用于计数
uintspeed;//用来计算转速
uinta=25000;
uintt0=25000,t1=25000;//初始时占空比为50%
ucharflag=1;//此标志用于选择不同的装载初值
uchardflag;//左右转标志
ucharsflag=1;//用来标志速度档位
#defineright_turnPW1=0;PW2=1//顺时针转动
#defineleft_turnPW1=1;PW2=0//逆向转动
#defineend_turnPW1=1;PW2=1//停转
voidkeyscan();//键盘扫描
voiddelay(ucharz);
voidtime_init();//定时器的初始化
voidwrite_com(ucharcom);//液晶写指令
voidwrite_data(uchardate);//液晶写数据
voidlcd_init();//液晶初始化
voiddisplay(uintrate);//显赫速度
voidint0_init();//定时器0初始化
voidkeyscan();//键盘扫描程序
voidjudge_derection();
voidmain()
{
time_init();//定时器的初始化
lcd_init();//液晶初始化
int0_init();//定时器0初始化
while
(1)
{
}
}
voidtime_init()//定时器的初始化
{
TMOD=0x11;//两个定时器都设定为工作方式1十六位定时计数器
EA=1;//开启总中断
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
TR0=1;
TH1=(65536-a)/256;
TL1=(65536-a)%256;
ET1=1;
TR1=0;
}
voidint0_init()//定时器0初始化
{
EX0=1;//外部中断源可以申请中断
IT0=1;//外部中断源下降沿触发
}
voidtimer0()interrupt1using0
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;//装载初值
keyscan();//键盘扫描程序
aa++;
if(aa==5)
{
aa=0;
temp=count*0.5*60*2*2*100/24;//计算转速,每分转多少圈
count=0;//重新开始计数脉冲数
display(temp);//把计算得的结果显示出来
}
}
voidtimer1()interrupt3using0
{
if(flag)
{
flag=0;
end_turn;
a=t0;//t0的大小决定着低电平延续时间
TH1=(65536-a)/256;
TL1=(65536-a)%256;//重装载初值
}
else
{
flag=1;//这个标志起到交替输出高低电平的作用
if(dflag==0)
{
right_turn;//右转
}
else
{
left_turn;//左转
}
a=t1;//t1的大小决定着高电平延续时间
TH1=(65536-a)/256;
TL1=(65536-a)%256;//重装载初值
}
}
/*******外部中断*******************/
voidservice_int0()interrupt0
{
count++;//来一个下降沿沿就计一个脉冲数
}
/*******显示函数***********/
voiddisplay(uintrate)
{
ucharwan,qian,bai,shi,ge;
wan=rate/10000;
qian=rate/1000%10;
bai=rate/100%10;
shi=rate/10%10;
ge=rate%10;
write_com(0x80);
write_data('0'+wan);
write_data('0'+qian);
write_data('0'+bai);
write_data('.');
write_data('0'+shi);
write_data('0'+ge);
}
/******延时函数********/
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/************写指令************/
voidwrite_com(ucharcom)
{
lcdrs=0;
Da=com;
delay
(1);
lcden=1;
delay
(1);
lcden=0;
}
/************写数据**********/
voidwrite_data(uchardate)
{
lcdrs=1;
Da=date;
delay
(1);
lcden=1;
delay
(1);
lcden=0;
}
/************液晶初始化**********/
voidlcd_init()
{
lcden=0;
write_com(0x38);//初始化
write_com(0x0c);//打开光标0x0c不显示光标0x0e光标不闪,0x0f光标闪
write_com(0x01);//清显示
write_com(0x80+0x40);
write_data('0');
write_data('');
write_data('G');
write_data('e');
write_data('a');
write_data('r');
}
/***********键盘扫描程序**********/
voidkeyscan()
{
if(stop==0)
{
TR1=0;//关闭定时器0即可停止转动
end_turn;//停止供电
write_com(0x80+0x40);
write_data('0');
}
if(left==0)
{
TR1=1;
dflag=1;//转向标志置位则左转
write_com(0x80+0x40);
write_data('0'+sflag);
}
if(right==0)
{
TR1=1;
dflag=0;//转向标志复位则右转
write_com(0x80+0x40);
write_data('0'+sflag);
}
if(accelerate==0)
{
delay(10);//延时消抖
if(accelerate==0)
{
while(accelerate==0);//等待松手
sflag++;
if(sflag==2)
{
t0=20000;
t1=30000;//占空比为百分之60
write_com(0x80+0x40);
write_data('2');
}
if(sflag==3)
{
t0=15000;
t1=35000;//占空比为百分之70
write_com(0x80+0x40);
write_data('3');
}
if(sflag==4)
{
t0=10000;
t1=40000;//占空比为百分之80
write_com(0x80+0x40);
write_data('4');
}
if(sflag==5)
{
t0=5000;
t1=45000;//占空比为百分之90
write_com(0x80+0x40);
write_data('5');
}
if(sflag>=6)
{
sflag=0;
t0=25000;
t1=25000;
write_com(0x80+0x40);
write_data('1');
}
}
}
}