基于单片机的直流电机控制系统设计

第 1页 基于单片机的直流电机控制系统设计 摘 要 以AT89C51单片机为核心应用PWM技术对直流电机的速度进行精确调节并测
量出电动机的转速通过模数转换系统使用LCD液晶显示器精确的显示电动机的转速。
本次课程设计的目的是更加熟练掌握单片机的工作原理及实际应用特别是单片机的编
程语言数模转换系统PWM调节脉冲及LCD液晶显示器的工作原理。 关键字 AT89C51单片机转速控制直流电机


















第 2页 目录 1引言 .................................................................................................................................... 2
2 设计思路 ........................................................................................................................... 2 3 硬件部分的设计 ............................................................................................................... 3 3.1硬件设计总体思路 .................................................................................................. 3
3.2单片机控制直流电机部分的硬件设计 .................................................................. 3
4 电机驱动模块的电路设计 ............................................................................................... 5
4.1 单片机与直流电机接口部分 ................................................................................. 5
4.2各部分硬件结合原理及构造 .................................................................................. 5
5 软件程序设计 ................................................................................................................... 6
5.1系统软件设计的总体概述 ....................................................................................... 6
5.2系统各部分软件设计的思路 ................................................................................... 6
6 系统的调试与现象分析 ................................................................................................... 9
7课设总结 .......................................................................................................................... 11
参考文献 ............................................................................................................................. 12
附录I ................................................................................................................................... 13
附录II ................................................................................................................................. 21












第 3页 1引言 本文讨论的单片机多功能定时器的核心是目前应用极为广泛的51系列单片机配
置了外围设备构成了一个可编程的计时定时系统具有体积小可靠性高功能强等
特点。不仅能满足所需要求而且还有很多功能可供开发有着广泛的应用领域。
20世纪80年代中期以后Intel公司以专利转让的形式把8051内核技术转让给许
多半导体芯片生产厂家如ATMEL、PHILIPS、ANALOG、DEVICES、DALLAS等。
这些厂家生产的芯片是MCS-51系列的兼容产品准确地说是与MCS-51指令系统兼容
的单片机。这些兼容机与8051的系统结构主要是指令系统相同采用CMOS工艺
因而常用80C51系列来称呼所有具有8051指令系统的单片机它们对8051单片机一
般都作了一些扩充更有特点。其功能和市场竞争力更强不该把它们直接称呼为
MCS-51系列单片机因为MCS只是Intel公司专用的单片机系列型号。MCS-51系列
及80C51单片机有多种品种。它们的引脚及指令系统相互兼容主要在内部结构上有些
区别。目前使用的MCS-51系列单片机及其兼容产品通常分成以下几类基本型、增强
型、低功耗型、专用型、超8位型、片内闪烁存储器型。













第 4页 2设计思路 直流电机PWM控制系统的主要功能包括直流电机的加速、减速以及电机的正转
和反转并且可以调整电机的转速还可以方便的读出电机转速的大小能够很方便的
实现电机的智能控制。其间还包括直流电机的直接清零、启动置数、暂停、连续
功能。该直流电机系统由以下电路模块组成振荡器和时钟电路这部分电路主要由
80C51单片机和一些电容、晶振组成。设计输入部分这一模块主要是利用带中断的独
立式键盘来实现。设计控制部分主要由80C51单片机的外部中断扩展电路组成。设计
显示部分包括液晶显示部分和LED数码显示部分。液晶显示部分由LCD液晶显示模
块组成;LED数码显示部分由七段数码显示管组成。直流电机PWM控制实现部分主
要由一些二极管、电机和L298直流电机驱动模块组成。














第 5页 3 硬件部分的设计 3.1硬件设计总体思路 根据本次课程设计的具体要求为使用LCD显示出直流电机的转速由题目可以分
析出这个题目实际是由多个部分组成的。
第一个部分用单片机控制直流电

机的转速并且应提供直流电机驱动、测速电路
使用单片机驱动直流电机测量直流电机的转速控制直流电机稳定运行在一个范围内。
第二个部分使用LCD显示系统显示出直流电机的具体转速并且单片机控制的电机
实际转速与液晶显示器显示出的转速应该时时对应。
其三本系统应该具有数模和模数转换的部分因为这个模数转换部分在这个系统
中是不可缺少的单片机控制的直流电机转速在实际中无论是对电机控制的信号还
是电机输出的信号都应该是数字信号因为只有数字信号才能被单片机所识别而最重
要的是单片机控制的直流电机输出的转速的信号只有是数字信号时才能被液晶显LCD
模块所识别并最终准确的显示出直流电机的转速。
调速系统的硬件设计原理方框图如下图3-1所示, 以AT89C51单片机为控制核心,包
括测速电路、PWM波形发生器和PWM功放电路以及LCD显示部分。
图3.1 硬件设计方框图 3.2单片机控制直流电机部分的硬件设计 直流电动机结构由定子和转子两大部分组成。转子主要作用是产生电磁转矩
和感应电动势是直流电机进行能量转换的枢纽所以通常又称为电枢由转轴、
电枢铁心、电枢绕组、换向器和风扇等组成。直流电动机的结构是由直流电源、直
流电机、控制开关和调速器组成。直流发电机的工作原理就是把电枢线圈中感应的交变 第 6页 电动势靠换向器配合电刷的换向作用使之从电刷端引出时变为直流电动势的原理。
感应电动势的方向按右手定则确定其工作原理不外乎就是用直流电源作为能量来驱动
电机旋转。通过对三极管的截止与导通进行控制使其起到开、关和调速的作用。具体
的操作为当直流电动机接上直流电源时使用电位器旋转按钮控制三极管集极的电压。
如下图直流电机控制原理。当三极管的集极电压小于死区电压时三极管截止则电动机
不转动当集极电压大于死区电压而小于饱和电压时三极管处于放大状态随着集极电
压改变从而改变了直流电动机两端的压降也就改变了电机的转速。具体原理为集极的
电压大小不一样三极管的电压放大倍数也不一样从而起到调速作用改变直流电动机的
旋转速度。
对于直流电机来说如果加在电枢两端的电压脉动电流压要求脉动电压的周期远
小于电机的惯性常数可以看出在T不变的情况下改变T1和T2宽度得到的
电压将发生变化。
图3.2为施加不同占空比时实测的数据绘制所得占空比与转速的关系图。






图3.2 占空比与电机转速的关系 由图看出转速与占空比D并不是完全速的线性关系图中实线原因是电枢本
身有电阻不过一般直流电机的内阻较小可以近视为线性关系。
由此可见改变施加在电枢两端电压就能改变电机的转速成这就是直流电机PWM调速原理。 第 7页 4电机驱动模块的电路设计 4.1 单片机与直流电机接口部分
由于本系统主要由主控开关,电机励磁电路、调速电路、测速电路、整流滤波电路、
平波电抗器、制动电路组成,系统采用闭环PI 调节器控制。当开关闭合后,交流电经晶
闸管调速电路控制后,又经过桥式整流、滤波、平波电抗器后,获得脉冲小、连续的直流
电提供给电机,同时,交流电通过励磁电路使电机获得励磁,开始工作。调节速度经过调
节变阻器进行,当变阻器阻值变化时,单片机输出的控制角也相应变化,晶闸管导通角随
之变化,进而由主电路输出电压调节电机转速,同时测速电路输出电压也相应变化,经PI
调节器作用后,电机在设定的速度范围内稳定运转。
本次课设可以先在电脑上进行模拟仿真这样就能提高设计的效率以及电路的可行
性。而且在仿真的过程中非常方便进行电路修改又可以达到很好的效果。因此通过使用
Protues对硬件电路精心设计并对该电路进行仿真调试用脉冲形式代替光电耦合管测取
转速再与单片机进行通信连接可如下图所示。 4.2各部分硬件结合原理及构造 其电路原理图如下
电路原理图 第 8页 5 软件程序设计 5.1系统软件设计的总体概述 软件部分可由1个主程序、3个中断子程序和1个P ID算法子程序组成。主程序是
一个循环程序,其主要思路是,先设定好速度初始值,这个初始值与测速电路送来的值相比
较得到一个误差值,然后用P ID 算法输出控制系数给PWM发生电路改变波形的占空比,
进而控制电机的转速。其程序流程图如图4-1所示。


图4.1 软件总体设计流程图 5.2系统各部分软件设计的思路 PWM软件实现方式
方案一采用定时器做为脉宽控制的定时方式这一方式产生的脉冲宽度极其精确 第 9页 误差只在几个us。
方案二采用软件延时方式这一方式在精度上不及方案一特别是在引入中断后
将有一定的误差。但是基于不占用定时器资源且对于直流电机采用软件延时所产生
的定时误差在允许范围故采用方案二。
键盘向单片机输入相应控制指

令由单片机通过P2.0与P2.1其中一口输出与转速
相应的PWM脉冲另一口输出低电平经过信号放大、光耦传递驱动H型桥式电动
机控制电路实现电动机转向与转速的控制。电动机的运转状态通过LED显示出来。
电动机所处速度级以速度档级数显示。正转时数字向右移动反转时数字向左移动。移
动速度分7档快慢与电动机所处速度级快慢一一对应。每次电动机启动后开始计时
停止时LED显示出本次运转所用时间时间精确到0.1s。在本次课设所用程序中需要
使用到速度测取和计算问题。因此为了能更加准确测得直流电动机的旋转速度特意运
用了我们所了解数字测速法来换算速度。在此对在这几种测速方法进行比较。这样就可
以得到此次课程设计所要选择的最佳方案。本系统编程部分工作采用汇编语言完成采
用模块化的设计方法与各子程序做为实现各部分功能和过程的入口完成键盘输入、
按键识别和功能、PWM脉宽控制和LCD显示等部分的设计。
①PWM脉宽控制本设计中采用软件延时方式对脉冲宽度进行控制延时程序函
数如下
void delay(unsigned char dlylevel){
int i=50*dlylevel;
while(--i);}
此函数为带参数DLYLEVEL约产生DLYLEVEL*400us的延时因此一个脉冲周
期可以由高电平持续时间系数hlt和低电平持续时间系数llt组成本设计中采用的脉冲
频率为25Hz可得hlt+llt=100占空比为hlt/(hlt+llt)因此要实现定频调宽的调速方式
只需通过程序改变全局变量hltllt的值该子程序流程图如图四。
②中断处理子程序采用中断方式按下键单片机P3.2脚产生一负跳沿响应
该中断处理程序完成延时去抖动、键码识别、按键功能执行。
调速档、持续加/减速调速档通过0-6共七档固定占空比即相应档位相应改
变hltllt的值以实现调速档位的实现。而要实现按住加/减速键不放时恒加或恒减速
直到放开停止就需在判断是否松开该按键时每进行一次增加/减少1%占空比即 第 10页 hlt++/--;llt--/++,其程序流程图如图五。
③显示子程序利用数组方式定义显示缓存区缓存区有8位分别存放各个LED
管要显示的值。显示子程序为一带参子程序参数为显示缓存的数组名通过
for(i=0;i<8;i++)方式对每位加上位选码送到P0口并进行一两毫秒延时。
该显示子程序只对各个LED管分别点亮一次因此在运行过程中每秒执行的次
数不应低于每秒24次。
④定时中断处理程序采用定时方式1因为单片机使用12M晶振可产生最高约

为65.5ms的延时。对定时器置初值3CB0H可定时50ms即系统时钟精度可达0.05s。
当50ms定时时间到定时器溢出则响应该定时中断处理程序完成对定时器的再次赋
值并对全局变量time加1这样通过变量time可计算出系统的运行时间。
对于一个数的显示先应转成BCD码即取出每一个位分别送入显示缓存区
对于转BCD的算法应对一个数循环除10取模直至为0程序如下
do{dispbuff[bcd_p]=bechange%10; //dispbuff为显示缓冲区数组
bcd_p++;}while(bechange/=10) //disp_p为数组指针
软件设计中的特点:
对于电机的启停在PWM控制上使用渐变的脉宽调整即开启后由停止匀加速到
默认速度停止则由于当前速度逐渐降至零。这样有利于保护电机如电机运用于小车
上在启动上采用此方式也可加大启动速度防止打滑。对于运行时间的计算、显示。
配合传感器技术可用于计算距离速度等重要的运行数据。采用中断方式不必使程序
对键盘反复扫描提高了程序的效率。







第 11页 6 系统的调试与现象分析 图5-1给出了该系统速度时间相应曲线,可以看出该系统启动较快,转速稳定,机械强
度较高。在t0 时刻系统突加扰动的情况下,可以在短时间内调整到初始速度,显示了良好
的抗干扰能力,体现出了PI 闭环调节的优越性。经实践证明,本系统可以满足。本系统采
用单片机和驱动芯片组合设计步进电机控制电路,实践表明,控制效果较好。
该控制系统硬件电路设计简单,结构紧凑、功耗低、运行可靠、设计方便;因使用专
用驱动芯片,编制软件比较简单。TA8435H为脉宽调制式斩波驱动方式的芯片,所以其具
有同频PWM驱动器的优点:运行频率高,输出转矩大,并能消除电磁噪声等。较好地解决
了高低频运行时的一些问题。本控制器可以与反馈检测环节连接,组成闭环控制系统用于
精度和稳定性要求较高的控制系统中。设计出的以51 单片机作为控制电路的调速系统
中,在中小型直流电机调速系统中具有结构简单,运行可靠,调节范围宽,电流连续性好,响
应快等特点,。

图5-1电机转速特性 一般的控制要求,在普通控制中得以广泛应用。本设计在硬件上采用了基于PWM技
术的H型桥式驱动电路解决了电机驱动的效率问题在软件上也采用较为合理的系统
结构及算法提高了单片机的使用效率且具有一定的防飞能力。LCD液晶屏能表达当
前的转速进行显示。而且本设计采用AT89C51单片机和双H桥驱动对直流电机调速进
行设计通过占空比的调节驱动口电

压的改变及显示控制从而实现电机的转速或方
向发生变化并在LCD上即时显示所调占空比(高低电平之比)的数值。经验证电机可
以从中速开始变慢直至停止再从高速逐渐变慢亦可转向运行稳定。对于PWM
调速方式如何在单片机控制系统中实现进行了着重分析,研究直流电机的控制和测量方
法提高控制精度和响应速度、节约能源等都具有重要意义为进一步研究和优化直流 第 12页 电机控制方法提供了基础。设计所涉及的基于单片机的电机控制系统的基本原理系统
以单片机为核心采用了多模块化协同控制电动机实现数据采集、数据存储、电机运
行状态控制和LCD显示等功能具有稳定的工作特性。PID控制的采用使电动机更稳
定地运行在正转加速和减速的运动状态提高了以电动机为动力源的机械装置的工作效
率。















第 13页 7总结 AT89C51单片机功能强大方便今后的功能扩展。通过各种方案的讨论及尝试
再经过多次的整体软硬件结合调试不断地对系统进行优化。同时对电动机控制不是一
个简单的电子控制问题它涉及很多方面的知识。相信单片机在今后的自动控制领域中
将有更广阔的应用前景。相信该系统能成功运用于直流电机转速系统的实时监控简化
控制逻辑系统而且成本低廉、功能完整、抗干扰性能好。能成功应用于直流电机转速
调节、监控、保护场合并且监控界面友好使用方便。能够对直流电机实行实时监控
不仅大大改善了高速运行时的稳定性而且还实现了保护功能。
通过实验总结出要自己去摸索实践掌握相关知识。这样知识才能掌握的牢固才
是真正的学到了。开始感觉这个课设很难原因在于自己当初并没有仔细分析各个元器
件的工作原理。比如电位器控制三极管的作用。刚开始只想到它的开关作用后来再回
去查了查资料才发现自己少想了它还有放大的作用通过改变集极的电压就可以改变集
电极与发射极电压的放大倍数进而改变直流电动机的旋转速度。能自己解决问题是最关
键的。经历本次课程设计之后我有很多的收获。
我明白有好的理论不代表能高效的用在实践上只有通过自己的理解并付诸实践才
能掌握 遇到困能时要虚心学习更要靠自己去努力解决。因为以后可能没人像在学
校老师帮助只有独自完成。而且答案可能不只有一种有了解决的方案时要考虑还有
没有其

他方案更简便想得到好的结果就要反复推敲和实践想解决问题就必须要能
专研吃苦有耐心、勤奋、与人团结合作等综合素质。



第 14页 参考文献 [1]王小明.电动机的单片机控制.北京航空航天大学出版社2002
[2]张毅刚新编MCS--51单片机应用设计哈尔滨工业大学出版社.2003
[3]邵正芬基于单片机的直流凋速系统设计东北大学出版社.2007
[4] 何立民. MCS-51系列单片机应用系统设计.北京航空航天大学出版社, 1995.

















第 15页 附录I 单片机程序如下
/********************************************************/
#include
#define uint unsigned int
#define uchar unsigned char
/********************************************************/
sbit k1=P3^4; //启动/停止按键
sbit k2=P3^5; //减速按键
sbit k3=P3^6; //加速按键
sbit k4=P3^7; //正反转按键
sbit k5=P3^2; //模式控制
sbit RS=P0^5;
sbit RW=P0^6;
sbit E=P0^7;
sbit ENA=P1^2; //IN1,IN2使能信号
sbit IN1=P1^0; //电机输入线
sbit IN2=P1^1;
bit model=1; //手动/自动默认手动
bit direc=1; //转向标志默认为正转
int rate=1; //高电平时间常数
int num=0; //1ms中断记录
int count=0; //1ms中断记录自动模式加速时间常数
uchar code tab1[]=" welcome";
uchar code tab2[]=" 2012/6/9";
uchar code tab3[]=" motor control";
uchar code tab4[]=" team:DXJ ZXM ZS";
uchar code tab5[]="Dire: Model:";
uchar code tab6[]="Rate: T:30"; 第 16页 /*****************延时子程序*********************************/
void delay_xus(uint x)
{
while(x--);
}
void delay(uint x)
{
uint y;
for(;x>0;x--)
for(y=110;y>0;y--) ;
}
/****************LCD********************************/
void w_com(uint com) //写命令
{
RS=RW=E=0;
P2=com;
E=1;
delay_xus(1);
E=0;
}
void w_data(uint dat) //写数据
{
RS=1;RW=E=0;
P2=dat;
E=1;
delay_xus(1);
E=0;
}
void w_shuzu(int addr,uchar code *p) //显示字符串 第 17页 {
int i;
w_com(0x80+addr);
delay_xus(1);
for(i=0;p[i]!='\0';i++)
{
w_data(p[i]);
delay_xus(1);
}
}
void disp() //显示速度、转向、模式
{
if(rate<10)
{
w_com(0x80+0x45);
delay_xus(1);
w_data(' ');
delay_xus(1);
w_com(0x80+0x46);
delay_xus(1);
w_data(rate%10+0x30); //数字转换成ASCII
delay_xus(1);


}
else
{
w_com(0x80+0x45);
delay_xus(1);
w_data(rate/10+0x30);
delay_xus(1); 第 18页 w_com(0x80+0x46);
delay_xus(1);
w_data(rate%10+0x30);
delay_xus(1);
}
if(direc==1)
{
w_shuzu(0x06,"F");
}
else {w_shuzu(0x06,"R");}
if(model==0) w_shuzu(0x0f,"H");
else w_shuzu(0x0f,"A");

}
/*************主程序初始化**************************************/
void init()
{
w_com(0x38);
delay_xus(1);
w_com(0x0c); //开显示
delay_xus(1);
w_shuzu(0x00,tab1); //显示字符串
w_shuzu(0x40,tab2);
delay(500);
w_com(0x01); //清屏
delay_xus(1);
delay(2); //忙碌
w_shuzu(0x00,tab3);
w_shuzu(0x40,tab4); 第 19页 delay(1000);
w_com(0x01); //清屏
delay_xus(1);
delay(2);
w_shuzu(0x00,tab5);
w_shuzu(0x40,tab6);
disp();
ENA=0;
TMOD=0X01;
TH0=0XFC; //(65536-1000)=FC181ms
TL0=0X18;
ET0=1;
TR0=0;
EX1=1;
IP=0X02; //定时器0为中断最高优先级
EA=1;
}
/****************按键处理程序*********************************/
void keyscan()
{
if(k1==0) //启停
{
delay(120);
if(k1==0)
{
TR0=~TR0;
ENA=~ENA;
rate=1;
} 第 20页 }
if(k2==0&&model==0) //减速
{
delay(120);
if(k2==0&&model==0)
{
rate-=2;
if(rate<=1) rate=1;
}
}
if(k3==0&&model==0) //加速
{
delay(120);
if(k3==0&&model==0)
{
rate+=2;
if(rate>=29) rate=29;
}
}
if(k4==0&&model==0) //转向
{
delay(120);
if(k4==0&&model==0)
{
direc=~direc;
}
}
if(k5==0&&ENA==0) //模式选择
{ 第 21页 delay(120);
if(k5==0&&ENA==0)
{
model=~model;
}
}
disp(); //状态改变及时更新数据
}
/***************主程序***********************************/
void main()
{
init();
while(1) ;
}
/**************中断服务程序***********************************/
void extern1() interrupt 2 //外部中断0
{
keyscan();
}
void timer0() interrupt 1 //定时器0
{
num++;
if(num>=31) num=0;
if(direc==1) //正转
{
if(num<=rate) //高电平持续时间
{
IN1=1;
IN2=0; 第 22页 }
else IN1=IN2=0; //低电平持续时间
}
else //反转
{
if(num<=rate)
{
IN1=0;
IN2=1;
}
else IN1=IN2=0;
}
if(model==1) //自动模式下执行加速时间常


{
count++;
if(count==1500) //1.5s后占空常数增加加速
{
rate+=2;
if(rate>=29) rate=29;
count=0;
disp();
}
}
TH0=0XFC; //65536-1000=FC18
TL0=0X18;
}


第 23页 附录II 电机正转

电机反转 第 24页

电机加速

电机减速

相关文档
最新文档