设计并实现红外遥控步进电机单片机程设计.docx
《设计并实现红外遥控步进电机单片机程设计.docx》由会员分享,可在线阅读,更多相关《设计并实现红外遥控步进电机单片机程设计.docx(26页珍藏版)》请在冰豆网上搜索。
设计并实现红外遥控步进电机单片机程设计
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
题目:
设计并实现红外遥控步进电机
初始条件:
(1)Proteus仿真软件或XL1000综合仿真试验仪一台;
(2)课程设计辅导书:
1.李群芳、张士军,单片微型计算机与接口技术,电子工业出版社,2008
2.张毅刚、彭喜元、董继成,单片机原理及应用,高等教育出版社,2004
3.赵晓安.,MCS-51单片机原理及应用,天津大学出版社,2001
(3)先修课程:
微机原理与接口技术、单片机原理。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
(1)课程设计时间:
1周;
(2)本课程设计统一技术要求:
按照要求对选定的设计题目进行分析,画出实现电路原理图,设计出各模块电路的功能,编写C51或汇编程序,上机调试、仿真,记录实验结果,对实验结果进行分析;(除了代码,运行结果可以打印,其他手写)
(3)课程设计说明书按学校“课程设计工作规范”中的“统一书写格式”撰写,并标明参考文献至少5篇;
(4)写出本次课程设计的心得体会(至少500字)。
时间安排:
课程设计时间为:
6月26日至7月1日,7月2日上午答辩。
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
目录
1.设计原理及方法1
1.1步进电机的工作原理1
1.2红外遥控器的原理1
1.3红外遥控步进电机的设计方法2
2.系统硬件线路设计2
2.1红外遥控及LED模块2
2.2步进脉冲产生模块:
6
2.3硬件线路设计图7
3.程序框图8
4.资源分配表:
9
5.源程序:
10
7.心得及体会:
22
8.参考文献:
23
9.本科生课程设计成绩评定表24
1.设计原理及方法
1.1步进电机的工作原理
步进电机是数字控制电机,它将电脉冲信号转化为角位移,实质上是一种数字/角度转换器。
当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。
可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的,因此,单步和连续的动作区别只是单片机给步进电机脉冲个数不同而已。
每按一次单步键就是给电机一个脉冲,而连续则是不断的给电机脉冲,达到连续运转的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
步进电机可以作为一种控制用的特种电机,利用其没有积累误差(精度为100%)的特点,广泛应用于各种开环控制。
步进电机可分为反应式步进电机(VR)、永磁式步进电机(PM)和混合式步进电机(HB)三种。
永磁式一般为两相,转矩和体积较小,步进角一般为7.5°或15°;反应是一般为三相,可实现大转矩输出,步进角一般为1.5°,但噪声和振动都很大,在欧美等发达国家在20世纪80年代已被淘汰;混合式应用最为广泛,它混合了永磁式和反应式的优点。
步进电机区别其他控制电机的最大特点是,它通过输入脉冲信号来进行控制的,即电机的总转到角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。
1.2红外遥控器的原理
红外线遥控系统就是指利用红外线来传递控制信号,实现对控制对象的远距离控制的目的。
由发射器发出红外线指令信号,由接收器接收信号并对信号进行处理,最后实现对对象的各种功能的远距离控制。
通用红外发射器由指令键、指令信号产生电路、调制电路、驱动电路及红外发射器组成。
红外遥控的发射电路是采用红外发光二极管来发出经过调制的红外光波;红外接收电路由红外接收二极管、三极管或硅光电池组成,它们将红外发射器发射雕红外光转换为相应的电信号,再送后置放大器。
接收电路将发射器发出的已调制的编码指令信号接收下来,并进行放大后送解调电路,解调电路将已调制的指令编码信号解调出来,即还原为编码信号。
指令译码器将编码指令信号进行译码,最后由驱动电路来驱动执行电路实现各种指令的操作控制(机构)。
红外遥控器的特点是不影响周边环境,不干扰其他电器设备,在室内近距离(小于10m)遥控中得到了广泛的应用。
例如在录音机、音响设备、空调机以及玩具等其他小型电器装置
上都纷纷采用红外线遥控。
1.3红外遥控步进电机的设计方法
红外遥控器控制步进电机是利用LED发射红外线传递按键信息。
由于红外采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,在解码时通过判断高低电平持续时间的长短来识别发送的键值。
单片机的晶振为12MHz,单周期指令执行时间为1MHz,由于机械动作需要一定时间来完成,如果以这么快的速度来给脉冲,电机是不会转动的,因此,在两个脉冲之间必须要有一定时间差,电机才有时间来执行动作。
电机转动的速度与脉冲频率成正比,控制脉冲间隔时间就相当于控制了步进电机的转动角频率即快慢。
根据该系统设计要求,需要通过红外遥控器按下按键和显示器来改变步进电机的运动状态以及显示,只需要红外遥控器中7个按键就可满足需求,外加8位LED数码显示管即可。
由于实验箱上只有8个连体数码管,因此需要动态扫描。
通过从键盘上输入正、反转命令,按键数值显示在数码管上,CPU再读取正、反转命令,加减速后执行。
经键盘可完成启动、停止、正转、反转、速度设置控制功能。
按下红外遥控器上的相关按钮电机执行相关动作,同时数码管上显示按键的数值。
2.系统硬件线路设计
2.1红外遥控及LED模块
本模块应完成对红外遥控器有无键按下进行确认,当有键按下时,确定按键值,并根据所得键值进行处理(包括所按键是不是停止键还是执行键。
如是停止键,不断扫描键盘程序,等待执行键按下;如是执行键就启动产生步进电机控制信号程序)。
显示模块主要是完成在进行键盘按下时,显示输入的数据值(转矩数、转动方向、转动速率及运行方式)。
2.1.1红外遥控编解码原理
红外遥控系统由发射和接收两大部份组成,应用编/解码专用集成电路芯片来进行控制操作。
发射部份包括键盘矩阵、编码调制、LED红外发送器;接收部份包括光、电转换放大器、解调、解码电路。
由于采用不同芯片其发送和接受的过程是不一样的,我们用的实验箱采用的是HT6221红外编码芯片,因此以HT6221为例来说明红外遥控器编码和解码原理,其管脚图如图1所示。
1.HT6221键码的形成
当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。
这种遥控码具有以下特征:
采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”。
当一个键按下超过36ms振荡器使芯片激活如果这个键按下且延迟大约108ms,这108ms发射代码由一个起始码9ms,一个结果码4.5ms,低8位地址码9ms~18ms,高8位地址码9ms~18ms,8位数据码9ms~18ms和这8位数据的反码9ms~18ms组成如果键按下超过108ms仍未松开接下来发射的代码连发代码将仅由起始码9ms和结束码2.5ms组成。
1.12ms为0,2.24ms为1,如下图:
图表2发送波形
每发送一个码,HT6221会先送出一个9ms的头码和4.5ms的间隙,然后依次送出16位的地址码(18ms~36ms)、8位数据码(9ms~18ms)和8位数据反码,如下图:
注:
代码宽度算法:
16位地址码的最短宽度:
1.12*16=18ms
16位地址码的最长宽度2.24ms*16=36ms
易知8位数据代码及其8位反代码的宽度和不变:
(1.12ms+2.24ms)*8=27ms
32位代码的宽度为18ms+27ms~(36ms+27ms)
2.代码格式(以接收代码为准,接收代码与发射代码反向)
位定义
单发代码格式
连发代码格式
3.解码方法
1.解码的关键是如何识别0和1从位的定义我们可以发现01均以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
2.根据码的格式应该等待9ms的起始码和4.5ms的结果码完成后才能读码左右均可
这样接收到的仅仅是普通的代码要得到标准的键值还必须进行代码识别和代码
转换。
2.1.2LED显示部分
共阳接法:
低电平亮,高电平灭
数码管部分JP5(控制数码管的8段)
JP8(输入高电平选中相应的数码管)
数码管实际上是由7个发光管组成的8字形构成的,加上小数点就是8个。
分别把它命名为ABCDEFGH,由于接法是共阳接法,所以低电平是亮,高电平是灭。
例如,要显示一个数字2则是C、F、H(小数点)不亮,P0.0-P0.7控制数码管的8段,0为亮,1为灭,从高往低排列,P0.0-P0.7写成二进制为10100010,把它转化为十六进制数为A2H,当然在此之前,还必须指定哪一个数码管亮。
CPU向字段输出口送出字形码,所有显示器接收到相同的字形码,由8个PNP的三极管,来控制这8位哪位工作如果要选中第一位,只需将该位清零即可。
所有数码管的8个笔划段a-h同名端连在一起,在这种接法中同一瞬间所有的数码管显示都是相同的,不能显示不同的数字。
在单片机里,首先显示一个数,然后关掉,然后显示第二个数,又关掉,那么将看到连续的数字显示,轮流点亮扫描过程中,每个显示器的点亮时间是极为短暂的(约1ms),由于人的视觉暂留现象及发光二极管的余晖效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会由闪烁感。
2.2步进脉冲产生模块:
2.2.1步进电机的控制
步进电机系统中有两个重要电路:
脉冲分配电路和驱动电路。
脉冲分配电路有两个输入信号:
步进脉冲和转向控制。
脉冲分配电路在步进脉冲和转向控制信号的共同作用下产生正确转向的4相激励信号。
此激励信号经过驱动电路送至步进电机,从而控制步进电机向正确的方向转动,此激励信号的频率决定了步进电机的转速。
脉冲分配可通过脉冲分配器实现,也可通过软件实现。
驱动电路的主要作用是实现功率放大。
一般脉冲分配器输出的驱动能力是有限的,它不可能直接驱动步进电机,而须要经过一级功率放大。
对于功率比较小的步进电机,厂家已经生产出了集成度较高、脉冲分配与驱动电路集成在一起的芯片,应用中只需将它的输出端与步进电机相连即可。
步进电机步进时是机械转动,因此存在惯性。
当从静止状态启动步进时相当于开始转动的速度为0,它不可能立即就达到最大转速(频率),因此需要一个逐渐加速的过程,否则可能由于惯性儿导致“失步”。
比如,开始应该走20步。
却只走了19步,丢失了一步。
步进电机的最高启动频率(又称突调频率)一般为0.1KHZ到3-4KHZ,以超过最高启动频率的频率直接启动,将会出现失步现象,甚至无法启动。
同理,当步进电机正以最高启动频率(可达几百千赫兹)步进时,他不可能立即停下来,很可能出现多走几步的情况,这当然也会造成错误,因此在停止之前应当有一个预先减速的过程,到该停止的位置时,速度已经很慢,惯性已经很小,可以立即停止。
步进电机在转换方向时,也一定要在电机降速停止或降到突跳频率范围之类再换向,以免产生较大的冲击儿损坏电机。
换向信号一定要在前一个方向的最后一个激励信号脉冲结束后以及下一个方向的第一个激励脉冲前发出。
步进电机在某一高速下运行时的正反向切换实质上包含了降速→换向→升速三个过程。
2.2.2步进电机的调速
如果给步进电机发送一个控制脉冲,它就转一步,再发送一个脉冲,它会再转一步。
如果两个脉冲的间隔越短,步进电机就转得越快。
调整步进电机发出的脉冲频率,就可以对步进电机进行调速,而脉冲频率可以通过软件延时和硬件定时两种方式实现。
通过调用标准延时子程序产生脉冲的方法称软件延时,该法首先设置两个字节作为延时程序的入口地址,再根据需要延时的时间长短给这两个字节赋值,则单片机就会按照设置的延时时间不断地产生脉冲信号控制步进电机转动。
软件延时的方法程序简单、思路清晰,而且不占用单片机的硬件资源。
通过使用单片机的定时/计数器T0或T1,定时产生脉冲的方法称为硬件定时,该法首先根据定时的时间长短设定定时器的工作模式,然后输入定时器的定时常数,则定时器就会定时溢出,单片机就会每溢出一次就产生一个脉冲信号控制步进电机转动。
硬件定时的方法既需要硬件(定时/计数器T0或T1),又需要软件来产生所需频率的脉冲信号,是一种软硬结合的方法,虽然占用了一个定时器,但是提高了CPU的利用率,CPU在定时器没产生溢出时运行其它程序。
用定时中断方式来控制电动机变速时,实际上是不断改变定时器装载值的大小。
在程序中,每按一次加减速键,程序中speed都会加减1,最后通过查表的方法改变定时计数器初值,达到加减速的目的。
至于步进电机的正反转则是公用一个键,按下转动方向就相反,正反转的实现是通过判断20号单元的第2位即20H.1是0还是1,若是0则去查反转的表否则去查正转的表,实行起来比较方便。
电机的加减速控制,只需控制好脉冲频率即可,可以采用中断计时的方法,内部定时器中断主要是利用单片机的内部定时器的方式1(16位计数方式)产生不同周期的定时信号,每次中断都给步进电机三个绕组一次脉冲,使得步进电机转动一个节拍。
因此步进电机的转速是由单片机内部定时器的中断频率决定的,不断改变定时器的装载初值就可改变电机的运转速度。
不论步进电机处于何种状态,只要按下复位键,马上跳转到主程序,停止给脉冲,电机停止运转。
2.3硬件线路设计图
原理图:
3.程序框图
程序流程图
4.资源分配表:
10H,单步正转03H单步逆转
01H连续正转06H连续逆转
09H加速1DH,减速
1FH停止
TH031H
TL030H
P1OUT
P2选通
P0送数
5.源程序:
ORG0000H
SJMPSTART0
ORG000BH
AJMPZHDUAN
ORG0030H
START0:
MOVSP,#60H
MOVP0,#0FFH
MOVP1,#0FFH
MOVP2,#0FFH
MOVP3,#0FFH
MOV35H,#00H
MOV31H,#3CH
MOV30H,#0B0H
MOV32H,#1
START:
HWAI:
JBP3.7,$;等待遥控信号出现
SB:
MOVR4,#8;8毫秒为高电平错误
SBA:
MOVR5,#250
SBB:
JBP3.7,SXB1
DJNZR5,SBB
DJNZR4,SBA
MOVR4,#2
JMPSBC
SXB1:
MOVR5,#5
SXB2:
;去掉20US的尖峰干扰信号
JNBP3.7,SBB
DJNZR5,SXB2
JMPSTART
SBC:
MOVR5,#250
SB1:
JBP3.7,SB2;2MS内不为高电平错误
DJNZR5,SB1
DJNZR4,SBC
JMPSTART
SB2:
;去掉20US的尖峰干扰信号
MOVR5,#5
SB2_A:
JNBP3.7,SB1
DJNZR5,SB2_A
MOVR4,#3
SB2_1:
MOVR5,#250
SB3:
;监测4.5MS高电平,如3MS内出现低电平错误
JNBP3.7,SXC
DJNZR5,SB3
DJNZR4,SB2_1
MOVR4,#2
JMPSB3_1
SXC:
;去掉20US的尖峰干扰信号
MOVR5,#5
SXC1:
JBP3.7,SB3
DJNZR5,SXC1
JMPSTART
SB3_1:
;监测4.5MS高电平,如5MS内不为低错误
MOVR5,#250
SB3_2:
JNBP3.7,SB4
DJNZR5,SB3_2
DJNZR4,SB3_1
JMPSTART
SB4:
;去掉20US的尖峰干扰信号
MOVR5,#5
SB4_1:
JBP3.7,SB3_2
DJNZR5,SB4_1
MOVR1,#1AH;设定1AH为起始RAM区
MOVR2,#4
PP:
MOVR3,#8
JJJJ:
MOVR5,#250
JJJJ2:
;1MS内不为低电平错误
JBP3.7,JJJJ3
DJNZR5,JJJJ2
JMPSTART
JJJJ3:
LCALLYS1;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态MOVC,P3.7;将P3.7状态0或1存入C中
JNCUUU;如果为0就跳转到UUU
MOVR5,#250
JJJJ4:
JNBP3.7,UUU
NOP
DJNZR5,JJJJ4
JMPSTART
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位地址是否正确
JNZEXIT;如果不相等说明解码失败退出
LCALLYS3
MOVA,1CH;比较数据码和数据反码是否正确?
CPLA
XRLA,1DH;将1CH的值取反后和1DH比较不同则无效丢弃,核对数据是否准确
JNZEXIT;如果不相等说明解码失败退出
LCALLYS3
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,$;等待高电平
LCALLYS3
AJMPAA
BIJIAO:
MOVA,1CH;红外键值
;--------------------------------------------
;显示按键
MOVP2,#01H
CJNEA,#10h,TT1
MOVP0,#7EH;数码管显示1
TT1:
CJNEA,#03h,T2
MOVP0,#0A2H;数码管显示2
T2:
CJNEA,#01h,T3
MOVP0,#62H;数码管显示3
T3:
CJNEA,#06h,T4
MOVP0,#74H;数码管显示4
T4:
CJNEA,#09h,T5
MOVP0,#61H;数码管显示5
T5:
CJNEA,#1dh,T6
MOVP0,#21H;数码管显示6
T6:
CJNEA,#1fh,NEXT
MOVP0,#7AH;数码管显示7
;--------------------------------------------
;单步正转
NEXT:
CJNEA,#10H,NZHUAN2
CLRET0
SJMPSZHUAN1
SZHUAN:
MOV35H,#00H
SZHUAN1:
MOVA,35H
MOVDPTR,#TABS
MOVCA,@A+DPTR
JZSZHUAN
MOVP1,A
INC35H
AJMPHWAI
;-------------------------------------------
;单步逆转
NZHUAN2:
CJNEA,#03H,LSZHUAN2
CLRET0
SJMPNZHUAN1
NZHUAN:
MOV35H,#00H
NZHUAN1:
MOVA,35H
MOVDPTR,#TABN
MOVCA,@A+DPTR
JZNZHUAN
MOVP1,A
INC35H
AJMPHWAI
;---------------------------------------------
;连续正转
LSZHUAN2:
CJNEA,#01H,LNZHUAN2
SETB20H.0;标志位为1,说明正转
MOVTMOD,#01H
MOVTH0,31H
MOVTL0,30H
SETBTR0
SETBEA
SETBET0
AJMPHWAI
;----------------------------------------------
;连续逆转
LNZHUAN2:
CJNEA,#06H,JIASU
CLR20H.0;标志位为0,说明反转
MOVTMOD,#01H
MOVTH0,31H
MOVTL0,30H
SETBTR0
SETBEA
SETBET0
AJMPHWAI
;----------------------------------------------
JIASU:
CJNEA,#09H,JIANSU
MOVA,32H
CJNEA,#5,JIA1
AJMPHWAI
JIA1:
INC32H
INCA
MOVDPTR,#TABLE
MOVCA,@A+DPTR
MOVP2,#03H
MOVP0,A
MOVA,32H
CJNEA,#1,JIA2
MOV31H,#3CH
MOV30H,#0B0H
AJMPHWAI
JIA2:
CJNEA,#2,JIA3
MOV31H,#63H
MOV30H,#0C0H
AJMPHWAI
JIA3:
CJNEA,#3,JIA4
MOV31H,#8AH
MOV30H,#0D0H
AJMPHWAI