课程基于单片机的直流电机pwm调速.docx
《课程基于单片机的直流电机pwm调速.docx》由会员分享,可在线阅读,更多相关《课程基于单片机的直流电机pwm调速.docx(21页珍藏版)》请在冰豆网上搜索。
课程基于单片机的直流电机pwm调速
课程基于单片机的直流电机pwm调速
1系统的方案设计1
1.1方案的分析1
1.2方案的制定2
2硬件的设计3
2.1单片机主电路的设计3
2.2数码管显示部分3
2.3L298N调制电动机电路5
2.4单片机驱动L298N模块6
3软件设计7
3.1操作键盘设计7
3.2转速显示设计8
3.3PMW调制9
4仿真截图10
4.1电机的正转工作状态10
4.2电机的反转工作状态11
5设计的体会12
参考文献资料13
附录14
仿真图14
原程序代码15
1系统的方案设计
1.1方案的分析
本课题以单片机为控制核心,用PMW控制技术实现对直流电机的速度及转向进行控制。
从而实现在数码管上显示当前转速,分别用按键进行加、减速及正反转控制。
单片机的选取:
按单片机机器字长可分为:
4位(很少用),8位,16位,32位。
按单片机内核可分为:
MCS51、AVR、PIC、MSP、HT、ARM等等。
按单片机厂家分就更多了,MCS51内核的厂家就有多种:
如SST、Atmel、STC、winbond等。
由于8位单片机的广泛应用场合及其不错的性性,一直受到小型电路解决方案的首选芯片,本方案采用ATMEL公司的AT89C51芯片做为驱动电机的核心电路模块,其性能足以扩展控制一个电机,而且该单片机支持在线编程并提供上千次的擦写功能。
并以低廉的价格普及于当今市场中。
数码管的选取,数码管分为单个数码管和多个数码管集成在一起。
由于考虑到电机转速能够达到很高,采用多个数码管集成在一起的比较省线,通过扫描动态显示数码管能够节省I./O接口,采用这种方式比较适合。
关于PMW波,PWM(PulseWidthModulation)——脉冲宽度调制,简称脉宽调制,是一种最初用语无线电通信的信号调制技术,后来在控制领域中(比如电机调速)也得到了很好的应用,于是形成了独特的PWM控制技术。
PWM控制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在功率控制与变换的许多领域中。
一般情况下,调节脉宽调制信号的脉宽有两种方法,一种方法是采用模拟电路中的调制方法,另一种方法是使用脉冲计数法。
对于一般电机控制,采用第一种方法在控制电压变化时需要DA转换器件。
AT89S51没有集成DA转换模块。
而通过脉冲计数法只需改变输出脉冲的占空比,而不需要额外的器件。
从成本上考虑选用第二种方法比较合适。
本设计采用由单片机控制实现的脉冲计数法。
通过对定时器设初值,并且通过不断改变初值实现对脉冲的电平切换。
由于本文使用的是PROTEUS进行仿真,直流电机的选择被定位在几种类型的电机中,其中有MOTOR、MOTOR-DC、MOTOR、MOTOR-ENCODER、MOTOR-STEPPER,通过比较参数,选取MOVTOR-ENCODER比较合适,其有转速脉冲输出端,通过单片机能够实现对转速脉冲的检测。
由于单片机的驱动能力有限,根据要求可以构建H桥驱动电路,使用晶闸与二极管组合,实现对电机的驱动能力,并实现对电机的正反转操作。
这是一种常规的思考方法,通过上网查资料,不难发现有更好的解决方案,有专门的驱动芯片,既然已有专门地为电机驱动而设计的芯片,就没必要再从新来设计;选用L298芯片来构成的电路结构基本上跟H桥驱动电路一样。
L298N是ST公司生产的一种高电压、大电流电机驱动芯片。
该芯片采用15脚封装。
主要特点是:
工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。
内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。
使用L298N芯片驱动电机,该芯片可以驱动一台两相步进电机或四相步进电机,也可以驱动两台直流电机。
1.2方案的制定
根据对设计的要求及相关资料的查询,最终确定了硬件使用方案,AT89S51单片机、L298N、四位数码管、MOVTOR-ENCODER作为主要的器件。
其余像一些二级管,电容,电阻在此不再详细介绍。
2硬件的设计
2.1单片机主电路的设计
在本次课题设计中我们选择了89C51芯片,其具有功能强、体积小、成本低、功耗小等特点,它可单独地完成现代工业控制所要求的智能化控制功能,能在软件的控制下准确、迅速、高效地完成程序设计者事先规定的任务。
组成最小单片机系统需要晶振,复位电路等。
只有这样最小工作系统才能运行,
其最小工作系统如图2-1所示。
图2-1单片机主电路图
2.2数码管显示部分
LED数码管显示器是由发光二极管显示字段的显示器件,也称为数码管。
其外形结构如图所示。
它由8个发光二极管构成,通过不同的组合可用来显示0-9、A-F及小数点“.”等字符。
数码管有共阴极和共阳极两种结构规格,如图2-3所示。
图中电阻为外接。
共阴极数码管的发光二极管阴极共地,当某发光二极管的阳极为高电平时,二极管点亮;共阳极数码管的发光二极管是阳极,并接高电平,对于需点亮的发光二极管将其阴极接低电平即可。
静态显示方式
直接利用并行口输出。
LED显示工作于静态显示方式时,各位的共阴极连接在一起接地;每位的段选线分别于一个8位的锁存输出相连。
一般称之为静态显示,是由于显示器中的各位相互独立。
而且各位的显示字符一经确定,相应锁存器的输出将维持不变,直到显示另一个字符为止。
利用通信号串行输出。
在实际应用中,多位LED显示时,为了简化电路,在系统不需要通信功能时,经常采用串行通信口工作方式0,外接移位寄存器74LS164、CD4094来实现静态显示。
对多位LED显示器的动态显示,通常都时采用动态扫描的方法进行显示,即逐个循环点亮各位显示器。
这样虽然在任一时刻只有一位显示器被点亮,但是由于间隔时间较短,且人眼具有视觉残留效应,看起来与全部显示器持续点亮一样。
为了实现LED显示器的动态扫描,除了要给显示器提供的输入之外,还要对显示器加位选择控制,这就是通常所说的段控和位控。
因此多位LED显示器接口电路需要有两个输出口,其中一个用于输出4位控信号;另一个用于输出段控信号,其连接图如下。
由于转速超过百转并有正负转的功能,选用4段数码管比较合适。
由于外转I/O扩展较多,选用串口通信或动态扫描都能达到满意的要求,由于串口通信需要额外的锁存器,增加了成本,选用动态扫描是不错的选择。
由外部电源及上拉电阻提供数码管的驱动能力。
由P1口作为数码管的片选端,P0口作为数码管的位选端。
其电路图如图2-2所示。
图2-2数码管驱动电路图
2.3L298N调制电动机电路
由L298N作为驱动电路通过脉宽调制控制电机的驱动。
当ENA与ENB控制使能端,IN1、IN2、IN3、IN4分别与OUT1、OUT2、OUT3、OUT4相对应输出相应的电平。
使用直流/步进两用驱动器可以驱动两台直流电机。
分别为M1和M2。
引脚A,B可用于输入PWM脉宽调制信号对电机进行调速控制。
(如果无须调速可将两引脚接5V,使电机工作在最高速状态,既将短接帽短接)实现电机正反转就更容易了,输入信号端IN1接高电平输入端IN2接低电平,电机M1正转(如果信号端IN1接低电平,IN2接高电平,电机M1反转)。
控制另一台电机是同样的方式,输入信号端IN3接高电平,输入端IN4接低电平,电机M2正转。
(反之则反转),PWM信号端A控制M1调速,PWM信号端B控制M2调速。
由此器件对电机进行控制,其结构图如图2-4所示:
图2-3L298N驱动电机
2.4单片机驱动L298N模块
L298N可以驱动两个直流电机,此设计只用了一个电机,通过P3.0与P3.1控制电动机的正反,通过P3.2给脉宽调制波实现电机的调速即可。
电路图如图2-5所示:
图2-4单片机驱动L298N电路图
3软件设计
3.1操作键盘设计
由于有起动、停止、加速、减速、停止按键,使用查询方式比较合适。
其设计流程图如图3-1所示:
图3-1键盘程序流程图
由于正转与反转之间不能由正转直接跳转到反转,应先停止后再反转。
应加一个判断程序禁止其操作。
其操作代码为
QIDONG:
JNBP2.0,QI
LJMPSTART1
QI:
JBP3.1,TK检测是否是在反转运行状态,如果是则不执行。
SETBP3.0
CLRP3.1
TK:
JNBP3.0,TM
SETBP3.0
CLRP3.1
TM:
LJMPSTART1
停止时不仅要停止,而且要进行原数据复位操作,其代码段如下
;停止
TINGZHI:
JNBP2.4,TING
LJMPSTART1
TING:
CLRP3.0
CLRP3.1
MOVR0,#80H;对寄存器中数据进行复位初使化
MOVR1,#80H
LJMPSTART1
3.2转速显示设计
转速是通过外部中断计数,然后通过定时器定时,定时时间到采集外部数据个数,进而转换成转速,再通过二进制调速十进制指令最后通过数码管显示。
其程序流程图如图3-2所示:
3.3PMW调制
PMW是电机调速的关键,通过定时器装添定时时间控制定时器的时间,进而控制脉宽的宽度,进行对电机进行调速。
通过两个寄存器R1与R0的值,将其装入定时器0中,通过对R0与R1进行INC与DEC的变化,进而调制脉宽。
其设计流程图如图3-3所示:
否
图3-3PMW脉宽调制
4仿真截图
4.1电机的正转工作状态
未启动的状态如图4-1所示:
图4-1未启动时状态
正常情况状态如图4-2所示:
图4-2正常情况状态
最大转速状态如图4-3所示:
图4-3最大转速状态
最小转速状态如图4-4所示:
图4-4最小转速状态
4.2电机的反转工作状态
反转正常状态如图4-5所示:
图4-5反转正常状态
最大转速状态如图4-6所示:
图4-6最大转速状态
最小转速状态如图4-7所示:
图4-7最小转速状态
停止时状态如图4-8所示:
图4-8停止时状态
5设计的体会
通过这次课程设计,使我学到了很多,首先,光看书是不管用的,尽使书看的再多,不实践到真正应用时才发现自己的知识是多么的的浅,这就如英文的26个字母,字母谁都认识,但组成很多单词就是不是所有人都认识了,单片机太灵活了,可以这样用,可以那样用。
很多方法,这就如一辆车,你想怎么驾驭它就怎么驾驭它,关键是需要好的技术与功底,通过这次课设,我初步了解了些,如果真要在单片机方面有所发展,编程,仿真,从小到大,是必须的。
经过大量的各种器件的使用与编程,才能掌握一门技术。
这次课设让我受益匪浅,无论从知识上还是其他的各个方面。
上课的时候的学习从来没有见过真正的单片机,只是从理论的角度去理解枯燥乏味。
但在实习中见过甚至使用了单片机及其系统,能够理论联系实际的学习,开阔了眼界,提高了单片机知识的理解和水平。
在这次课程设计中又让我体会到了合作与团结的力量,当遇到不会或是设计不出来的地方,同学之间相互帮助。
团结就是力量,无论在现在的学习中还是在以后的工作中,团结都是至关重要的,有了团结会有更多的理念、更多的思维、更多的情感。
单片机是很重要的一门课程,老师和一些工作的朋友都曾说过,如果学好一门单片机,就凭这个技术这门手艺找一个好工作也不成问题。
尽管我们在课堂学到的内容很有限,但在以后的学习中单片机还需要好好的深入研究和学习,学好了单片机也就多了一项生存的本钱。
最后感谢老师对我们的精心指导和帮助,感谢同学们对我的帮助。
参考文献资料
[1]肖看,李群芳.《单片机原理、接口及应用》.清华大学出版社.2010.9
[2]楼然苗.单片机课程设计指导.北京:
北京航空航天大学出版社.2002.
[3]滕志军.今日电子[J].基于超声波检测的倒车雷达设计.2006,(9):
15-17.
[4]徐科军.传感器与检测技术[M].北京:
电子工业出版社,2007:
110-113,160-161.
[5]潘新民.王燕芳.微型计算机控制技术实用教程[M].北京:
电子工业出版社,2007:
110-113,160-161.
[6]张立.电子世界[J].电动小车的循迹.2004,(6):
45.
附录
仿真图
原程序代码
ORG0000H
AJMPSTART
ORG000BH
AJMPIV0
ORG0013H
AJMPINT5
ORG001BH
AJMPIV1
;程序的初始化阶段
START:
MOVR6,#00H
MOVR2,#05H
MOVR0,#80H
MOVR1,#80H
MOVTMOD,#11H
MOVTH1,#80H
MOVTL1,#00H
MOVTH0,#3CH
MOVTL0,#0B0H
SETBTR0
SETBTR1
SETBEA
SETBET1
SETBET0
SETBIT1
SETBEX1
;主程序阶段
START1:
JBP3.0,NEX
JNBP3.1,NEX
MOVP0,#00000001B
MOVP1,#10111111B
ACALLDELAY
NEX:
MOVDPTR,#TAB
MOVA,32H
MOVCA,@A+DPTR
MOVP0,#00000010B
MOVP1,A
ACALLDELAY
MOVA,31H
MOVCA,@A+DPTR
MOVP0,#00000100B
MOVP1,A
ACALLDELAY
MOVA,30H
MOVCA,@A+DPTR
MOVP0,#00001000B
MOVP1,A
ACALLDELAY
MOVP2,#0FFH
JNBP2.4,TINGZHI
JNBP2.0,QIDONG
JNBP2.1,FANZHUAN
JNBP2.2,JIASU
JNBP2.3,JIANSU
LJMPSTART1
;正转
QIDONG:
JNBP2.0,QI
LJMPSTART1
QI:
JBP3.1,TK
SETBP3.0
CLRP3.1
TK:
JNBP3.0,TM
SETBP3.0
CLRP3.1
TM:
LJMPSTART1
;反转
FANZHUAN:
JNBP2.1,FAN
LJMPSTART1
FAN:
JBP3.0,TW
SETBP3.1
CLRP3.0
TW:
JNBP3.1,TN
SETBP3.1
CLRP3.0
TN:
LJMPSTART1
;停止
TINGZHI:
JNBP2.4,TING
LJMPSTART1
TING:
CLRP3.0
CLRP3.1
MOVR0,#80H
MOVR1,#80H
LJMPSTART1
;加速
JIASU:
LCALLDELAY
JNBP2.2,JIA
LJMPSTART1
JIA:
CJNER0,#01H,NEXT
LJMPSTART1
NEXT:
DECR0
INCR1
LJMPSTART1
;减速
JIANSU:
LCALLDELAY
JNBP2.3,JIAN
LJMPSTART1
JIAN:
CJNER0,#0FEH,NEXT1
LJMPSTART1
NEXT1:
INCR0
DECR1
LJMPSTART1
;定时器判断PMW
IV1:
JBP3.2,NX
MOVA,R0
MOVTH1,A
MOVTL1,#00H
CPLP3.2
AJMPNETX
NX:
MOVA,R1
MOVTH1,A
MOVTL1,#0FFH
CPLP3.2
NETX:
RETI
;中断每一个脉冲数加1
INT5:
INCR6
RETI
;定时器实现每100ms的记数,转换成转数
IV0:
DJNZR2,NEXT2
MOVR2,#25
CLRA;先清零
MOVR3,A
MOVR4,A
MOVR5,#16;共转换十六位数
MOVA,R6
MOVB,#1
MULAB
MOVR6,A
LOOP:
CLRC
MOVA,R6;从待转换数的高端移出一位到Cy
RLCA
MOVR6,A
MOVA,b
RLCA
MOVb,A
MOVA,R4;送到BCD码的低端
ADDCA,R4;带进位加。
自身相加,相当于左移一位
DAA;十进制调整,变成BCD码
MOVR4,A
MOVA,R3
ADDCA,R3
DAA
MOVR3,A
DJNZR5,LOOP;共转换十六位数
MOVA,R4
ANLA,#0FH
MOV30H,A
MOVA,R4
SWAPA
ANLA,#0FH
MOV31H,A
MOVA,R3
ANLA,#0FH
MOV32H,A
MOVR6,#00H
NEXT2:
MOVTH0,#3CH
MOVTL0,#0B0H
RETI
;数码管显示延时程序
DELAY:
MOV60h,#10
Y:
MOV70h,#00H
DJNZ70h,$
DJNZ60h,Y
RET
;数码管字库选择
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END