红外遥控步进机Word文档格式.docx
《红外遥控步进机Word文档格式.docx》由会员分享,可在线阅读,更多相关《红外遥控步进机Word文档格式.docx(31页珍藏版)》请在冰豆网上搜索。
2系统硬件及主要模块设计……………………………………...3
2.1红外遥控模块...……………………..........................................3
2.1.1红外遥控编解码原理...……………….…..........................................3
2.2步进脉冲模块…………………………………..…...................6
2.2.1步进电机的工作原理与控制…………………………........................6
2.2.2步进机的驱动电路……………………...............................................8
2.3主要接口电路……………………...………………….........9
2.3.1步进机的驱动电路与8051的接口电路……………….....................9
2.3.3模拟按键与8051的接口电路……………………...........................10
.2.4资源分配表和总图.…………………………………….............11
3源程序设计……………………………………………...............13
3.1实物源程序.……………………………………………….........13
3.2仿真源程序.……………………………………………............19
4仿真结果与分析……………………………………………......23
5心得体会……………………………………………………......28
6参考文献……………………………………………………......29
7本科生课程设计成绩评定表………………………………......30
1总体设计原理
利用红外遥控器控制步进电机其实和用键盘控制步进电机原理类似,只不过按键是用导线传递键是否按下的信号,而红外则是利用LED发射红外线传递按键信息。
由于红外采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;
以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,在解码时通过判断高低电平持续时间的长短来识别发送的键值。
控制步进电机正、反方向转动、单步、连续、快慢等动作,原理其实并不困难。
步进电机将电脉冲信号转换成角位移,即给一个脉冲,步进电机就转动一个角度,转动的角度大小与施加的脉冲数成正比,因此,单步和连续的动作区别只是单片机给步进电机脉冲个数不同而已。
每按一次单步键就是给电机一个脉冲,而连续则是不断的给电机脉冲,达到连续运转的目的。
单片机的晶振为12MHz,单周期指令执行时间为1MHz,由于机械动作需要一定时间来完成,如果以这么快的速度来给脉冲,电机是不会转动的,因此,在两个脉冲之间必须要有一定时间差,电机才有时间来执行动作。
电机转动的速度与脉冲频率成正比,控制脉冲间隔时间就相当于控制了步进电机的转动角频率即快慢。
步进电机的转动需要向电机以一定的顺序分配驱动脉冲。
如四相单四拍,其脉冲分配的方式和顺序为A-B-C-D-A,如此周而复始,即可转动。
转动方向与脉冲顺序有关,如果给相反脉冲,那么电机就会反转。
根据该系统设计要求,需要通过红外遥控器按下按键和显示器来改变步进电机的运动状态以及显示,只需要红外遥控器中6个按键就可满足需求,外加8位LED数码显示管即可。
由于实验箱上只有8个连体数码管,因此需要动态扫描。
通过从键盘上输入正、反转命令,按键数值显示在数码管上,CPU再读取正、反转命令,加减速后执行。
经键盘可完成启动、停止、正转、反转、速度设置控制功能。
按下红外遥控器上的相关按钮电机执行相关动作,同时数码管上显示按键的数值,系统大部分都是软件实现的,整个设计框图如下:
图1总体设计框图
2主要模块设计
2.1红外遥控模块
本模块应完成对红外遥控器有无键按下进行确认,当有键按下时,确定按键值,并根据所得键值进行处理(包括所按键是不是停止键还是执行键。
如是停止键,不断扫描键盘程序,等待执行键按下;
如是执行键就启动产生步进电机控制信号程序)。
显示模块主要是完成在进行键盘按下时,显示输入的数据值(转矩数、转动方向、转动速率及运行方式)。
2.1.1红外遥控编码原理:
通用型红外遥控系统由红外发射和红外接收两大部分组成。
现在常应用编/解码专用集成电路芯片来进行控制操作,如图2所示。
发射部分包括键盘、编码调制、LED红外发送器;
接收部分包括光、电转换放大器、解调、解码电路等。
图2红外线遥控系统框图
红外遥控器所产生的脉冲编码的格式一般为:
引导码(头)─地址码(用户码)─数据码─数据的反码。
其引导码为宽度是10ms左右的一个高脉冲和一个低脉冲的组合,用来标识指令码的开始。
地址码、数据码、数据码的反码均为数据编码脉冲,用二进制数表示。
“0”和“1”均由ms量级的高低脉冲的组合代表。
地址码(即用户码)是对每个遥控系统的标识。
通过对地址码的检验,每个遥控器就只能控制一个设备动作,有效地防止了多个设备之间的串扰。
当指令键按下时,指令信号产生电路便产生脉冲编码。
数据码后面一般还要有数据码的反码,用来检验数据码接收的正确性,以防止误动作,增强系统的可靠性。
这些指令信号由调制电路调制成32~40kHz的信号,经调制后输出,最后由驱动电路驱动红外发射器件(LED)发出红外遥控信号。
红外遥控发射接收器及其编解码
遥控发射器的专用芯片很多,根据编码格式可以分成两大类,即频分制与码分制。
频分制是按照载频的不同来进行频道划分的,即它用不同的频率信号来表示不同的控制信号;
码分制是用不同的脉冲数目或者宽度不同的脉冲组合来代表不同的控制指令的。
这里我们以运用比较广泛,解码比较容易的码分制来加以说明。
现以日本NEC的µ
PD6121G组成发射电路为例说明编码原理。
当发射器按键按下后,即有遥控码发出,所按的键不同则遥控编码也不同。
这种遥控码具有以下特征:
采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;
以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如图2-4所示。
解码的关键是如何识别“0”和“1”,从位的定义我们可以发现“0”、“1”均以0.56ms的低电平开始,不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms,所以必须根据高电平的宽度区别“0”和“1”。
如果从0.56ms低电平过后,开始延时,0.56ms以后,若读到的电平为低,说明该位为“0”,反之则为“1”,为了可靠起见,延时必须比0.56ms长些,但又不能超过1.12ms,否则如果该位为“0”,读到的已是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms最为可靠,一般取0.84ms左右均可。
但根据码的格式,应该等待9ms的起始码和4.5ms的结果码完成后才能读码。
红外线解码框图如下:
图4解码框图
本次设计我借用了实验室的试验箱,试验箱配备了标准的HT6121编码红外遥控器,这也就是红外发射部分,红外接收部分在试验箱上面。
这样就省略了对红外发射部分的电路设计。
2.2步进脉冲模块:
2.2.1步进电机工作原理与控制:
步进电机是一种将电脉冲转化为角位移的执行机构。
当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。
可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;
同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
步进电机可以作为一种控制用的特种电机,利用其没有积累误差(精度为100%)的特点,广泛应用于各种开环控制。
在图1的a图中B相被励磁,转子与B相对准。
在这个位置上,再对A相进行励磁,则转子在磁场作用下顺时针转过15°
,如图1的b图所示,这样步进电机就转过了一个步距角。
继续对C相进行励磁,转子在磁场的作用下进一步顺时针转过15°
,到达c图所示的位置,又转过了一个步距角。
再对D相进行励磁,又产生了一个新的磁场,在磁力的作用下转子又转过一个步距角15°
。
这样步进电机的四相完成一个通电循环,若要继续转动,就继续顺次励磁,即步进电机按照A→B→C→D→A……顺序顺次励磁,那么电机就不停地转动。
一般对步进电机采用半步驱动,即四相八拍工作方式,使步进电机每次励磁转过1/2的步距角,即每次改变励磁方式步进电机转过7.5°
,它的励磁方式是A→AB→B→BC→C→CD→D→DA→A……,若要反转也是只需改变励磁方式即可,即按照A→AD→D→DC→C→CB→B→BA→A……,采用八拍工作方式使得电机的转动更加稳定,也进一步增强了步进电机的控制精度。
实验箱中使用的是四相步进电动机,步进电机的控制有三个问题需要解决,下面分别阐述:
(1)控制其转动
按照一定的顺序向步进电动机的各相分配驱动脉冲。
就四相步进电机而言,如果采用但四拍方式,其脉冲分配的方式和顺序是A-B-C-D-A,如果采用单双八拍的方式,其脉冲分配的方式和顺序为:
A-AB-B-BC-C-CD-D-DA-A.四相步进电动机的励磁工作方式如下表所示:
编码结果(十六进制)
A
B
C
D
07
1
03
0B
09
0D
0C
0E
06
表1四相步进电动机励磁工作方式示例
(2)控制其转动方向
控制其转动方向,其实只需考虑在脉冲分配的过程中注意一定得顺序即可解决。
就四相步进电机而言,如果采用单四拍方式,其脉冲分配的方式和顺序是A-B-C-D-A,为正转;
则其反转的脉冲分配方式和顺序是D-C-B-A-D。
如果采用单双八拍方式,其反转的脉冲分配方式和顺序是D-DC-C-CB-B-BA-A-AD-D。
(3)控制其转动速度
在脉冲分配的过程中,控制在每两个相邻脉冲输出中的间隔时间即可解决速度问题。
图5单片机与步进电机的连接
步进电机的控制
步进电机的速度由单片机发送的脉冲频率决定,而脉冲频率可以通过软件延时和硬件定时两种方式实现。
通过调用标准延时子程序产生脉冲的方法称软件延时。
通过使用单片机的定时/计数器T0或T1,定时产生脉冲的方法称为硬件定时,该法首先根据定时的时间长短设定定时器的工作模式,然后输入定时器的定时常数,则定时器就会定时溢出,单片机就会每溢出一次就产生一个脉冲信号控制步进电机转动。
用定时中断方式来控制电动机变速时,实际上是不断改变定时器装载值的大小。
在程序中,每按一次加减速键,程序中speed都会加减1,最后通过查表的方法改变定时计数器初值,达到加减速的目的。
至于步进电机的正反转则是公用一个键,按下转动方向就相反,正反转的实现是通过判断20号单元的第2位即20H.1是0还是1,若是0则去查反转的表否则去查正转的表,实行起来比较方便。
2.2.2.步进机的驱动电路
本系统采用额定电压为5V,相数为4相的步进电机,驱动方式为4相8拍。
一共有5跟线连接,其中红色的为电源线。
采用单极性直流电源供电。
只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。
由于单片机P口输出的电流比较弱不能驱动步进电机,所以要加一个ULN2003芯片来放大电流使之能驱动步进电机工作。
步进电机驱动电路如下图
图6步进机驱动电电路
由于驱动芯片ULN2003A本身就具有反相器的作用,所以控制步进机的信号都经过了反相器反相处理再接入ULN2003A。
2.3主要接口电路
将设计的几个模块和8051单片机结合起来。
2.3.1步进机的驱动电路与8051的接口电路
图7步进机的驱动电路与8051的接口电路
2.3.2模拟按键与8051的接口电路
在proteus软件上对电路进行仿真,由于没有适合的作为红外发射和接收的芯片或元件,所以在仿真的时候将红外发射以及模块等效为模拟按键模块,其与8051芯片的接口电路如下:
图8模拟按键与8051的接口电路
2.4资源分配表和总图
1.P3.0-P3.7输出字形码到LED数码管,用于显示对应按下的键值。
2.P1.0-P1.4用于扫描模拟键盘所按下的按键。
3.:
P2.0-P2.3是步进机控制脉冲输出口,用于控制步进机的运动,实现正反转,加减速,单步,停止的目的。
4:
对仿真总图语言设计进行的标注:
1)步进机正转表:
07H,03h,0BH,09h,0DH,0ch,0EH,06h
2)步进机反转表:
06H,0Eh,0CH,0Dh,09H,0Bh,03H,07h
3)减速中断计数初值表:
TABLE1:
DB0C5H,8AH,3CH,15h
TABLE2:
DB68H,0D0H,0B0H,0A0H
4)加速中断计数初值表:
TABLE3:
DB15H,3CH,8AH,0C5H
TABLE4:
DB0A0H,0B0H,0D0H,68H
详细接线见下面的总体硬件系统连接图:
图9PROTEUS仿真总图
3源程序设计
由于实物和仿真由于条件限制造成了源程序不同,所以下面给出了两种源程序,仿真的源程序省略了红外发射与接收并处理的程序,改成了对模拟键盘的扫描。
3.1实物源程序
ORG0000H
AJMPSTART
ORG0003H
AJMPJIAN
ORG000BH
AJMPloop4
ORG001BH
AJMPloop5
START:
WAIT:
JBP3.7,$;
等待遥控信号出现
SB:
MOVR4,#8;
8毫秒为高电平错误
SBA:
MOVR5,#250
SBB:
JBP3.7,SXB1
DJNZR5,SBB
DJNZR4,SBA
MOVR4,#2
JMPQ1
SXB1:
MOVR5,#5
SXB2:
;
去掉20US的尖峰干扰信号
JNBP3.7,SBB
DJNZR5,SXB2
JMPSTART
SBC:
SB1:
JBP3.7,SB2;
2MS内不为高电平错误
DJNZR5,SB1
DJNZR4,SBC
JMPSTART
SB2:
MOVR5,#5
SB2_A:
JNBP3.7,SB1
DJNZR5,SB2_A
MOVR4,#3
SB2_1:
SB3:
监测4.5MS高电平,如3MS内出现低电平错误
JNBP3.7,SXC
DJNZR5,SB3
DJNZR4,SB2_1
JMPSB3_1
SXC:
SXC1:
JBP3.7,SB3
DJNZR5,SXC1
SB3_1:
监测4.5MS高电平,如5MS内不为低错误
MOVR5,#250
SB3_2:
JNBP3.7,SB4
DJNZR5,SB3_2
DJNZR4,SB3_1
SB4:
SB4_1:
JBP3.7,SB3_2
DJNZR5,SB4_1
MOVR1,#1AH;
设定1AH为起始RAM区
MOVR2,#4
PP:
MOVR3,#8
JJJJ:
JJJJ2:
1MS内不为低电平错误
JBP3.7,JJJJ3
DJNZR5,JJJJ2
JJJJ3:
LCALLYS1;
高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
MOVC,P3.7;
将P3.7状态0或1存入C中
JNCUUU;
如果为0就跳转到UUU
JJJJ4:
JNBP3.7,UUU
NOP
DJNZR5,JJJJ4
UUU:
MOVA,@R1;
将R1中地址的给A
RRCA;
将C中的值移入A中的最低位
MOV@R1,A;
将A中的数暂存在R1中
DJNZR3,JJJJ;
接收地址码的高8位
INCR1;
对R1加1,换成下一个RAM
DJNZR2,PP
;
以下对代码是否正确和定义进行识别
MOVA,1AH;
比较高8位地址码
XRLA,#00000000B;
判断1AH的值是否等于00000000,相等的话A为0
JNZEXIT;
如果不等解码失败退出
MOVA,1BH;
比较低8位地址
XRLA,#11111111B;
再判高8位地址是否正确
如果不相等说明解码失败退出
LCALLYS3
MOVA,1CH;
比较数据码和数据反码是否正确?
CPLA
XRLA,1DH;
将1CH的值取反后和1DH比较不同则无效丢弃,核对数据是否准确
CLRP2.6;
选中数码管
CLRP3.3;
解码成功喇叭响?
AJMPBIJIAO
判断在118毫秒内是否有连发码
AA:
MOVR1,#25
XX:
ACALLYS2
JNBP3.7,HH;
跳转到HH
DJNZR1,XX
EXIT:
对所有端口清零
AJMPSTART
连发码判断程序段-----------
HH:
MOVR6,#4
S:
ACALLYS1;
调用882微秒延时子程序
JBP3.7,EXIT;
延时882微秒后判断P3.7脚是否出现高电平如果有就退出解码程序
DJNZR6,S;
重复4次,目的是确认
JNBP3.7,$;
等待高电?
AJMPAA
BIJIAO:
红外键值
--------------------------------------------
Q1:
CJNEA,#10H,Q2
LOOP1:
movr3,#0ffh
main1:
incr3
mova,r3
movdptr,#tab1
movca,@a+dptr
movp2,a
lcalldelay
cjnea,#06h,main1
tab1:
db07H,03h,0BH,09h,0DH,0ch,0EH,06h
Q2:
CJNEA,#03H,Q3
ZHENGZHUAN:
LOOP2:
main2:
movdptr,#tab2
lcalldelay
cjnea,#06h,main2
ljmpLOOP2
tab2:
Q3:
CJNEA,#01H,Q4
FANZHUAN:
LOOP3:
main3:
movdptr,#tab3
cjnea,#06h,main3
ljmpLOOP3
ret
tab3:
Q4:
CJNEA,#06H,Q5
ZHONGSU1:
CLRA
MOVR7,#0
MAIN4:
MOVTMOD,#01H
MOVA,R7
MOVDPTR,#TABLE1
MOVCA,@A+DPTR
MOVR4,A
MOVDPTR,#TABLE2
MOVR5,A
MOVTH0,R4
MOVTL0,R5
SETBTR0
SETBEA
SETBET0
movr3,#0ffh
deng:
CJNER3,#08H,jiansu
jiansu:
sjmpdeng
loop4:
pushacc
main5:
movdptr,#tab4
popa
reti
tab4:
Q5:
CJNEA,#09H,Q6
ZHONGSU2:
MAIN6:
MOVTMOD,#10H
MOVDPTR,#TABLE3
MOVDPTR,#TABLE4
MOVR5,