单片机控制直流电机
1. 设计思路
1.1方案对比
1.1.1电机调速控制模块:
方案一:采用电阻网络或数字电位器调整电动机的分压,从而达到调速的目的。但是电阻网络只能实现有级调速,而数字电阻的元器件价格比较昂贵。更主要的问题在于一般电动机的电阻很小,但电流很大;分压不仅会降低效率,而且实现很困难。
方案二:采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整。这个方案的优点是电路较为简单,缺点是继电器的响应时间慢、机械结构易损坏、寿命较短、可靠性不高。 方案三:采用由达林顿管组成的H型PWM电路。用单片机控制达林顿管使之工作在占空比可调的开关状态,精确调整电动机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高;H型电路保证了可以简单地实现转速和方向的控制;电子开关的速度很快,稳定性也极佳,是一种广泛采用的PWM调速技术。
兼于方案三调速特性优良、调整平滑、调速范围广、过载能力大,因此本设计采用方案三。
1.2.1 PWM调速工作方式:
方案一:双极性工作制。双极性工作制是在一个脉冲周期内,单片机两控制口各输出一个控制信号,两信号高低电平相反,两信号的高电平时差决定电动机的转向和转速。
方案二:单极性工作制。单极性工作制是单片机控制口一端置低电平,另一端输出PWM信号,两口的输出切换和对PWM的占空比调节决定电动机的转向和转速。
由于单极性工作制电压波开中的交流成分比双极性工作制的小,其电流的最大波动也比双极性工作制的小,所以我们采用了单极性工作制。
1.2.2 PWM调脉宽方式:
调脉宽的方式有三种:定频调宽、定宽调频和调宽调频。我们采用了定频调宽方式,因为采用这种方式,电动机在运转时比较稳定;并且在采用单片机产生PWM脉冲的软件实现上比较方便。
1.2.3 PWM软件实现方式:
方案一:采用定时器做为脉宽控制的定时方式,这一方式产生的脉冲宽度极其精确,误差只在几个us。
方案二:采用软件延时方式,这一方式在精度上不及方案一,特别是在引入中断后,将有一定的误差。但是基于不占用定时器资源,且对于直流电机,采用软件延时所产生的定时误差在允许范围,故采用方案二。
2. 机控制直流电机部分的硬件设计
2.1直流电机组成原理
直流电动机结构由定子和转子两大部分组成。直流电机运行时静止不动的部分称为定子,定子的主要作用是产生磁场,由机座、主磁极、换向极、端盖、轴承和电刷装置等组成。运行时转动的部分称为转子,其主要作用是产生电磁转矩和感应电动势,是直流电机进行能量转换的枢纽,所以通常又称为电枢,由转轴、电枢铁心、电枢绕组、换向器和风扇等组成。直流电动机的结构是由直流电源、直流电机、控制开关和调速器组成。直流发电机的工作原理就是把电枢线圈中感应的交变电动势,靠换向器配合电刷的换向作用,使之从电刷端引出时变为直流电动势的原理。感应电动势的方向按右手定则确定其工作原理不外乎就是用直流电源作为能量来驱动电机旋转。通过对三极管的截止与导通进行控制,使其起到开、关和调速的作用。具体的操作为当直流电动机接上直流电源时,使用电位器旋转按钮控制三极管集极的电压。如直流电机控制原理图
2-3
图2-3直流电机控制原理
1、当三极管的集极电压小于死区电压时三极管截止,则电动机不转动;
2、当集极电压大于死区电压而小于饱和电压时三极管处于放大状态,随着集极电压改变,从而改变了直流电动机两端的压降也就改变了电机的转速。具体原理为集极的电压大小不一样,三极管的电压放大倍数也不一样从而起到调速作用改变直流电动机的旋转速度。
2.2直流电机调速方案的设计
直流电动机的转速控制方法可以分为2大类:对励磁磁通进行控制的励磁控
制法和对电枢电压进行控制的电枢电压法。其中励磁控制法在低速时受磁饱和的限制,在高速时受换向火花和换向器件结构强度的限制。并且励磁线圈电感较大,动态性能响应较差,所以这种控制方法用的很少,多使用电枢控制法。本设计将采用电枢控制方法对电动机的速度和转向进行控制。电机调速控制模块的方案假设:
直流电机转速调节:
某些场合往往要求直流电机的转速在一定范围内可调节,例如,电车、机床等,调节范围根据负载的要求而定。调速可以有三种方法:(1)改变电机两端电压;
(2)改变磁通;(3)在电枢回路中,串联调节电阻。采用第一种方法:通过改变施加于电机两端的电压大小达到调节直流电机转速的目的。
2.3直流电机测速方案的设计
测速电路由附在电机转子上的光电编码盘及施密特整形电路组成。电脉冲的频率与电机的转速成固定的比例关系,光码盘输出的电脉冲信号经放大整形为标准的TTL 电平, 输入到单片机的两个外部中断:INT0和INT1, 利用单片机内部定时器/计数器T0和T1,以及内部一个寄存器作软计数器,循环地捕捉相邻两次速度脉冲,并由这两次触发所记录的时间差算出其转速,再将这个转速与预置转速进行比较,得出差值,单片机通过对这个差值进行P I运算,得出控制增量,在
P010 ~P013引脚送出控制信号改变PWM波形发生电路的占空比,最终达到控制电机转速的目的。
2.4 PWM产生与控制部分方案的设计
1.PWM波形发生电路
由于测速中占用了两个定时器T0和T1,如果再将PWM波形产生交给AT89C51 则会加大软件的任务,并且影响整个系统的控制效果。因此这里考虑单独设计一个PWM波形发生电路,单片机对它只提供控制参数以改变其占空比。
2.5 LCD显示部分方案的设计
1.课设所用LCD模块概述
模块SMC1602B由一块点阵液晶屏和控制器HD44780及其辅助电路组成。本系统设计采用OCMJ中文模块系统LCD液晶作为下位机的显示模块。该模块内含GB2312 16×16点阵国标一级简体汉字和ASCII8×8(半高)及8×16(全高)点阵形英文字库,用户输入区位码或
ASCII码可实现文本显示。OCMJ中文液晶显示模块采用ASK/ANSWER握手方式。
3. 各硬件部分的连接与接口
3.1 单片机与直流电机接口部分
电机控制系统组成框图见图
3-1
图3-1电机控制系统组成原理图
图3-3触发电路原理
根据以上电机的各部分电路的构造原理,我们接下来再考虑电机与单片机接口的通信连接。在构思设计的同时也要考虑硬件的最大利用率,本次课设可以先在电脑上进行模拟仿真这样就能提高设计的效率以及电路的可行性。而且在仿真的过程中非常方便进行电路修改又可以达到很好的效果。因此通过使用Protues对硬件电路精心设计并对该电路进行仿真调试,用脉冲形式代替光电耦合管测取转速,再与单片机进行通信连接,可如下图3-4所示。
图3-4光电耦合器与电机连接
3.2各硬件部分的连接与接口
本次课程设计只用到了串行方式进行转速显示。但是在与单片机相连接线的时候依然把其他的数据引脚连接在单片机的P1端口,具体的接线法可以在P2端口体现如图3.5所示。仿真的接线法在仿真软件中能够很好的模拟出来,而课设所用的实验箱却是天皇教仪内部已经有固定的焊接点。对系统进行调试时只有接P1口就行具体接法为引脚CS连接 P1.0、引脚STD连接单片机的P 1.1、引脚SCLK连接P1.2、引脚PSB连接P1.3、引脚RES 连接P1.4。
图3-5显示器引脚与单片机连接
3.3各部分硬件结合原理及构造
各部分硬件连接按照以下原理图
3-6
图3-6硬件连接原理图
其实际的连接接口图如下图
3-7
图3-7各部分硬件结合电路图
设计过程中,只有知道现有的硬件连接才能进行软件设计与调试。没有硬件的程序是毫无意义的。因此为了达到课程设计所需的要求,又根据硬件的条件及接线法进行了如图4-6所示的编写程序步骤。
4. 软件程序设计
4.1主程序流程
图4-1主程序流程
图4-2中断程序
4-3中断程序 图4-4PI算法调用程序图 4-5中断程序
图
图4.1 软件总体设计流程图
4.2系统各部件软件
PWM软件实现方式:
方案一:采用定时器做为脉宽控制的定时方式,这一方式产生的脉冲宽度极其精确,误差只在几个us。
方案二:采用软件延时方式,这一方式在精度上不及方案一,特别是在引入中断后,将有一定的误差。但是基于不占用定时器资源,且对于直流电机,采用软件延时所产生的定时误差在允许范围,故采用方案二。
①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%占空比(即hlt++/--;llt--/++),其程序流程图如图五。
③显示子程序:利用数组方式定义显示缓存区,缓存区有8位,分别存放各个LED管要显示的值。显示子程序为一带参子程序,参数为显示缓存的数组名,通过for(i=0;i
该显示子程序只对各个LED管分别点亮一次,因此在运行过程中,每秒执行的次数不应低于每秒24次。
5. 课设总结
AT89C51单片机功能强大,方便今后的功能扩展。通过各种方案的讨论及尝试,再经过多次的整体软硬件结合调试,不断地对系统进行优化。同时对电动机控制不是一个简单的电子控制问题,它涉及很多方面的知识。相信单片机在今后的自动控制领域中将有更广阔的应用前景。相信该系统能成功运用于直流电机转速系统的实时监控,简化控制逻辑系统,而且成本低廉、功能完整、抗干扰性能好。能成功应用于直流电机转速调节、监控、保护场合,并且监控界面友好,使用方便。能够对直流电机实行实时监控,不仅大大改善了高速运行时的稳定性,而且还实现了保护功能。
通过实验总结出要自己去摸索实践掌握相关知识。这样知识才能掌握的牢固,才是真正的学到了。开始感觉这个课设很难,原因在于自己当初并没有仔细分析各个元器件的工作原理。比如电位器控制三极管的作用。刚开始只想到它的开关作用,后来再回去查了查资料才发现自己少想了它还有放大的作用,通过改变集极的电压就可以改变集电极与发射极电压的放大倍数进而改变直流电动机的旋转速度。对于LCD的相关知识,更是掌握的很差。我虚心的请教同学,去帮助解决。经历过程序的几次调试失败之后才明白什么地方出来问题。在调试过程中我还遇到BCD码的转换问题,刚开始只能显示十六进制,后来向同学请教之后才发现自己对汇编程序中的一个指令字没理解透ADDC。起初只考虑到加法没想到其还有带进位位相加的作用,又经过几个几番自己的推敲才知道怎么回事了。真是太大意啊!但能自己解决问题是最关键的。经历本次课程设计之后我有很多的收获:
我明白有好的理论不代表能高效的用在实践上,只有通过自己的理解并付诸实践才能掌握, 遇到困能时要虚心学习,更要靠自己去努力解决。因为以后可能没人像在学校老师帮助,只有独自完成。而且答案可能不只有一种,有了解决的方案时要考虑还有没有其他方案更简便,想得到好的结果,就要反复推敲和实践,想解决问题就必须要能专研,吃苦,有耐心、勤奋、与人团结合作等综合素质。
参考文献
[1] 冯文旭, 单片机原理及应用, 高等教育出版社, 2008-08-01
[2] 史步海,特种电动机调整控制技术及应用,华南理工,2010-03-01
[3] 谭浩强,C程序设计,清华大学出版社,2010年6月1日
[4] 胡幸鸣,电机及拖动基础,机械工业出版社,2010-3-1
[5] 郭天祥, Altium Designer6.9 PCB设计教程
附录Ⅰ
单片机程序如下:
LEN EQU 30H ;高电平比例初值存放单元
GAO DATA 31H ;高电平存放单元
DI DATA 32H ;低电平存放单元
GORD BIT 20H ;高电平或低电平位判断存放单元 ORG 0000H
AJMP MAIN
ORG 000BH
AJMP DVT0
ORG 0030H
MAIN:MOV LEN,#10
SETB P2.0
CLR P2.2
SETB GORD ;置高低电平判断位为1
MOV GAO,LEN ;置高电平初值
MOV A,#100 ;置周期总长值
SUBB A,GAO ;求低电平比例值
MOV DI,A ;存低电平比例值
MOV TMOD,#01H;置定时器0为定时工作方式1 MOV TH0,#0FEH;赋定时器初值
MOV TL0,#0CH
SETB ET0 ;开定时器0
SETB EA
SETB TR0
LOOP:AJMP LOOP ;等待
DVT0:PUSH PSW ;保护现场
PUSH A
MOV TH0,#0FEH;重新赋初值
MOV TL0,#0CH
MOV A,LEN
CJNE A,#0,PD1 ;判断高电平比例初值是否为0 CLR P2.1
AJMP DVT2
PD1: CJNE A,#100,PD2;判断高电平比例初值是否为100 SETB P2.1
AJMP DVT2
PD2: JNB GORD,DVT1;判断高低电平位是否为0,为0转 DJNZ GAO,DVT2;判断高电平是否已完
CLR P2.1 ;置P2.1为低电平
CLR GORD ;置高低电平位为0
MOV GAO,LEN ;
MOV A,#100
SUBB A,GAO
MOV DI,A ;求低电平比例值
AJMP DVT2
DVT1:DJNZ DI,DVT2 ;判断低电平是否已完
SETB P2.1 ;置P2.1为高电平
SETB GORD ;置高低电平位为1
MOV GAO,LEN
DVT2:POP A ;恢复现场
POP PSW
RETI ;返回中断
中断程序
JI_SHU1 DATA 42H ;中断计数值低位存放单元 JI_SHU2 DATA 43H ;中断计数值高位存放单元 TIMER DATA 44H ;定时循环次数存放单元 ORG 0000H
AJMP MAIN
ORG 0013H
AJMP INT1
ORG 001BH
AJMP TIMER1
ORG 0030H
MAIN: MOV SP,#60H
MOV JI_SHU1,#00H ;计数单元清零
MOV JI_SHU2,#00H
MOV TIMER,#20 ;置定时循环次数20次
MOV TMOD,#10H ;置定时器1为定时工作方式1 MOV TH1,#3CH ;置定时初值,定时时间为50ms MOV TL1,#0B0H
SETB IT1 ;置中断1为边沿触发方式 SETB ET1 ;开定时开中断
SETB EA
SETB EX1
SETB TR1
LOOP: AJMP LOOP ;等待中断
INT1: PUSH PSW
INC JI_SHU1 ;中断计数值低位加1
MOV A,JI_SHU1
CJNE A,#00,INT11 ;判断是否溢出
INC JI_SHU2 ;中断计数值高位加1
INT11:POP PSW ;中断返回
RETI
TIMER1:CLR TR1 ;关定时器1
MOV TH1,#3CH ;重新赋定时器1的初值 MOV TL1,#0B0H
DJNZ TIMER,TIMER11;判断定时时间1秒是否已到 CLR EX1 ;关中断1,停止计数 ;调用相关的子程序
MOV TIMER,#20 ;重赋定时循环次数 MOV JI_SHU1,#00H ;中断计数单元情零 MOV JI_SHU2,#00H
SETB EX1 ;重新开中断1
TIMER11:SETB TR1 ;重新开定时器1
RETI