基于单片机的红外遥控步进电机电路实现_第1页
基于单片机的红外遥控步进电机电路实现_第2页
基于单片机的红外遥控步进电机电路实现_第3页
基于单片机的红外遥控步进电机电路实现_第4页
基于单片机的红外遥控步进电机电路实现_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 本科生实训总结报告(论文)( 2006 级)报告(论文)题目 基于单片机的红外遥控步进电机电路实现 作 者 徐汉扬 系、 专业 电气机械工程系电子信息工程 班 级 电子061 学 号 0665121036 联 系 方 式杭州师范大学钱江学院教学部制电子系统综合实训总结报告基于红外遥控步进电机的设计电子信息专业电子061班 徐汉扬 0665121036摘要:介绍了一种基于at89s52单片机的红外遥控步进电机的设计,系统分为红外遥控编解码、lcd显示和驱动步进电机三个模块,设计的系统能通过遥控器来控制步进电机,并且步进电机的状态能通过lcd液晶模块实时显示出来,使人们

2、直观的看出步进电机的运行状态。本报告对该系统的工作原理、硬件电路和软件进行了详细介绍。关键词:红外遥控 lcd显示 步进电机一、引言本系统是基于单片机控制的综合系统,单片机通过对红外信号的解码来实现步进电机的变速及lcd实时显示步进电机的转速。它综合了电子技术和单片机软硬件技术,本设计采用at89s52单片机为核心包含红外接收电路、lcd显示电路和步进电机驱动电路。通过红外遥控器发射不同的码值来控制步进电机的正转反转、加速减速以及启动停止并通过lcd显示出步进电机的状态。二、系统功能分析根据系统要求设计各个模块。本设计中控制芯片采用at89s52单片机,各个功能通过不同模块来得以实现,主要有:

3、红外接收模块、步进电机驱动和lcd显示模块。系统基本架构原理如图1所示图1 基本架构原理图各个模块具体实现方式如下:1. 红外发射模块:本设计采用的是通过遥控器发射不同的码值,红外接收电路将接收到得信号送给单片机的外部中断0,单片机接收到信号后通过解码程序对接收到得信号进行处理,使得这些信号成为相应的码值。经过处理后这些信号就可以去控制步进电机的正转反转、加速减速以及启动停止并在lcd上显示出来。遥控发射器采用士兰半导体的sc6121编码芯片进行红外遥控发射电路的搭建。sc6121是一块用于红外遥控系统中的专用发射集成电路,采用cmos工艺制造。它可外接32个按键,其中有三组双重按键。工作电压

4、在2。其编码方式采用一帧码中含有一个引导码,16位的用户码和8位的键数据码。键数据码的反码也同时被传送,数据反码的传送可以大大减小系统的误码率。引导码由一个9ms的载波波形和4.5ms的关断时间构成,编码采用脉冲位置调制方式(ppm)。利用脉冲之间的时间间隔来区分“0”和“1”。具体的遥控发射应用电路图如图2所示图2 遥控发射应用电路2. 红外接收模块:本系统采用的接收模块其核心是与sc6121相对应的hs0038红外接收头。hs0038是一颗集接收电路、调制解调电路、低通滤波、放大电路和控制电路为一体的集成接收头,一共有三个引脚输出其中一个是电源一个是接地另一个则是输出,这样就大大方便了我们

5、的使用。hs0038内部结构如图3所示图3 hs0038内部结构图由于hs0038内部集成了强大的信号处理功能,所以在本系统中使用这个hs0038的接收头的时候我们只需要在外部加上一个滤波电路就可以了,这个rc滤波电路是为了滤除电源端的干扰信号。具体应用电路图如图4所示图4 hs0038应用电路3. 液晶显示模块在本系统中我们采用1602字符型液晶显示模块来显示步进电机的转速、起停以及正反转等步进电机的状态。字符型液晶显示模块是专门用于显示字母、数字、符号等的点阵型液晶显示模块。分4位和8位数据传输方式。提供5*7点阵+光标和5*10点阵+光标的显示模式。可以显示两行每行8个字符。提供内部自动

6、上电复位电路,+5v工作电压。一共有16个引脚,其中一对电源引脚、一对led背光电源引脚、lcd驱动电压引脚、一个模式选择引脚、一个读写操作引脚、一个使能引脚以及7个数据引脚。其中lcd驱动电压v0可通过滑动变阻器进行调节,一般v0为零伏。具体应用电路图如图5所示图5 lcd显示模块应用电路4. 步进电机驱动模块本系统采用额定电压为5vdc,相数为4相的步进电机,驱动方式为4相8拍。一共有5跟线连接,其中红色的为电源线。采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。由于单片机p口输出的电流比较弱不能驱动步进电机,所以要加一个uln2003芯片来放大电

7、流使之能驱动步进电机工作。uln2003是高耐压、大电流达林顿陈列,由七个硅npn 达林顿管组成。uln2003 的每一对达林顿都串联一个2.7k 的基极电阻,在5v 的工作电压下它能与ttl 和cmos 电路。uln2003 工作电压高,工作电流大,灌电流可达500ma,并且能够在关态时承受50v 的电压,输出还可以在高负载电流并行运行。步进电机驱动电路如图6所示图6 步进电机驱动电路三、硬件电路设计本系统采用的核心器件是at89s52单片机,有4个p口,其中p1 p2 p3内部含有上拉电阻,p0口内部不含上拉电阻。在本系统中用p0口来控制lcd液晶显示模块,p1口来控制步进电机的驱动,外部

8、中断0(p3.2)来接3收红外控制信号。at89s52单片机引脚图如图7所示图7 at89s52单片机复位电路的设计。当at89s52单片机的复位引脚rst(全称reset)出现2个机器周期以上的高电平时,单片机就执行复位操作。如果rst持续为高电平,单片机就处于循环复位状态。89s52单片机提供了上电复位和按键复位两种方式,本系统中采用按键复位电路。具体复位电路如图8所示,其中c4是104陶瓷电容,c3是22uf/25v的电解电容,r1的阻值为10k欧。单片机时钟电路的设计。89s52提供了外部时钟电路和内部时钟电路两种方式,本系统采用11.0592mhz晶振的外部时钟电路方式,在晶振两端接

9、2个30pf的陶瓷电容。这两个电容成为晶振的负载电容,它会影响晶振的谐振频率和输出幅度。具体晶振电路如图9所示 图8 复位电路 图9 晶振电路该系统的硬件电路原理图见附录2四、系统软件设计本系统的软件设计分lcd显示子程序、红外解码判断子程序、步进电机控制程序和主程序组成。整个系统采用c语言进行编写。1. 主程序主程序包括系统的初始化、lcd子程序的调用以及定时器中断函数和步进电机控制函数组成。系统初始化包括对lcd显示模块数据位、命令位,红外解码标志位以及步进电机停止转速为的定义与初始化,lcd显示程序显示静态的“step motor speed”和动态的不同速度水平式步进电机的转速以及正反

10、转的标志,定时器中断函数主要设定定时器中断间隔和步进电机的转速,步进电机控制函数由步进电机索引函数和对索引值的加减函数组成。系统的主程序流程图如图10所示图10 主函数流程图2. lcd子程序lcd子程序主要实现的功能是显示步进电机的状态。显示动态字符函数是用来显示步进电机的转速计转向状态,显示静态字符函数是用来显示步进电机转速单位“rpm”和“step motor speed”。系统lcd显示子程序流程图如图11所示图11显示动态字符函数是用来显示步进电机的转速计转向状态,显示静态字符函数是用来显示步进电机转速单位“rpm”和“step motor speed”。3. 红外解码判断子程序红外

11、解码判断子程序包括对码值的判断程序和外部中断0程序,红外接收电路将接收到的信号送到外部中断0,然后红外解码程序对收到的信号进行解码,若解码失败则重新进行解码,若解码成功则判断器码值,然后调用步进电机控制和lcd显示程序实现步进电机的运转和显示。从而实现红外遥控对步进电机的控制及显示。系统红外解码判断子程序流程图如图12所示图12 红外解码判断子程序流程图五、总结通过该系统的制作我扩充了自己的理论知识也增加了我的实际动手能力,在制作与调试电路中也让我体会到了快乐与艰辛,制作的过程远比我们原先想象的那么简单,整个系统是在不断的调试中得到完善的,刚开始制作的整个系统不能工作,于是我们就开始用万用表查

12、电源查线路,但这些都没问题,我们就上网查资料学习一些调试系统的方法。最后我们用示波器查晶振电路是发现其没有工作,然后又查晶振电路的连接焊点是否完好,最后发现晶振的负载电容用了104,电容太大导致晶振的谐振都被绿除掉了,换了2个30pf的电容后电路就能正常工作了。还有在做步进电机驱动的时候发现上电复位后只能用收感觉到电机在抖而它的轴不能转动,于是我们考虑可能是驱动能里不足的原因,用示波器测输入输出的电压,最后发现步进电机的上拉能力不足,在p0口加上拉电阻之后,电机能正常工作。在调试系统的过程中我明白了学电子光光看书时不行的,最好的方法就是去实践自己动手去焊接连接电路在这个过程中去发现问题去解决问

13、题。该红外遥控步进电机的制作让我学会了怎样去设计一个系统,对一个系统的基本架构有了一定的认识,在通过对红外编解码电路的设计也让我对红外遥控的基本知识有了新的认识,知道了红外发码的原理掌握了红外解码程序的编写,对lcd现实模块的使用也让我对lcd有了新的认识,交接了要调节lcd的驱动电压使其达到0v左右才能让字符显示出来,通过对步进电机驱动电路的设计也让我认识到要在步进电机的p口加上拉电阻才能驱动步进电机。总之,这次实训让我收获了很多也为我以后的工作奠定了一定的基础。附录1:源代码void showchar(unsigned char pos,unsigned char c) /*显示动态字符函

14、数*/ unsigned char p; if (pos>=0x10) p=pos+0xb0; /是第二行则命令代码高4位为0xc else p=pos+0x80; /是第二行则命令代码高4位为0x8 writecommand (p);/write command writedata (c); /write data/*/void showstring (unsigned char line,char *ptr) /*显示静态字符函数*/ unsigned char l,i; l=line<<4; for (i=0;i<16;i+) showchar (l+,*(ptr

15、+i); /循环显示16个字符/*/void initlcd() /*lcd初始化*/ delayms(15); writecommand(0x38); /display mode writecommand(0x38); /display mode writecommand(0x38); /display mode writecommand(0x06); /显示光标移动位置 writecommand(0x0c); /显示开及光标设置 writecommand(0x01); /显示清屏void ir_decode() /*红外解码程序*/ uchar i,j; while(ir_re=0); d

16、elay2400(); if(ir_re=1) /延时2.4ms后如果是高电平则是新码 delay2400(); /延时4.8ms避开4.5ms的高电平 for(i=0;i<4;i+) for(j=0;j<8;j+) while(ir_re=0); /等待地址码第1位高电平到来 delay882(); /延时882ms判断此时引脚电平 /cy=ir_re; if(ir_re=0) datei>>=1; datei=datei&0x7f; else if(ir_re=1) delay1000(); datei>>=1; datei=datei|0x80

17、; /1位数据接收结束 /32位二进制码接收结束 if (date2=0x16)/停止tr0 = 0;else if(date2=0x33)/开始tr0 = 1;else if(date2=0x01)/加速if (speedlevel>1) speedlevel-; else speedlevel=1;else if(date2=0x05)/减速 if(speedlevel<5) speedlevel+; else speedlevel=5; else if(date2=0x11)/反向 turn=turn; void int0() interrupt 0 using 1 /*外部

18、中断0函数*/ uint i; for(i=0;i<4;i+) delay1000(); if(ir_re=1)k=k; /刚开始为4.5ms的引导码,如果4ms内出现高电平则退出解码程序 if(k=0) ex0=0; /检测到有效信号关中断,防止干扰 ir_decode(); /如果接收到的是有效信号,则调用解码程序 /解码成功,调用显示程序,显示该键值 ex0=1; /开外部中断,允许新的遥控按键void main(void) initlcd();/delayms(15);sprintf(test1,"step motor speed"); /*lcd第一行显示的

19、字符*/showstring(0,test1);showchar(0x19,'r');showchar(0x1a,'p');showchar(0x1b,'m');count = 0; step_index = 0; spcount = 0; stop_flag = 0; p1_0 = 0; p1_1 = 0; p1_2 = 0; p1_3 = 0; sp=0x60; ea = 1; /允许cpu中断 tmod = 0x11; /设定时器0和1为16位模式1 et0 = 1; /定时器0中断允许 ex0=1; th0 = 0xfe; tl0 = 0

20、x0c; /设定时每隔0.5ms中断一次 tr0 = 1; /开始计数turn=0;speedlevel=1; while(1)if(turn=0)showchar(0x14,'+');elseshowchar(0x14,'-');if(tr0 =0) showchar(0x15,'0');showchar(0x16,'0');showchar(0x17,'0');showchar(0x18,'0'); elseif(speedlevel=1) showchar(0x15,'3');

21、showchar(0x16,'0');showchar(0x17,'0');showchar(0x18,'0');else if(speedlevel=2) showchar(0x15,'1');showchar(0x16,'5');showchar(0x17,'0');showchar(0x18,'0'); else if(speedlevel=3) showchar(0x15,'1');showchar(0x16,'0');showchar(0x1

22、7,'0');showchar(0x18,'0'); else if(speedlevel=4) showchar(0x15,'0');showchar(0x16,'7');showchar(0x17,'5');showchar(0x18,'0'); else if(speedlevel=5) showchar(0x15,'0');showchar(0x16,'6');showchar(0x17,'0');showchar(0x18,'0'); /定时器0中断处理 void timeint(void) interrupt 1 using 0 th0=0xfe; tl0=0x0c; /设定时每隔0.5ms中断一次 count+; spcount-; if(spcount<=0) spcount = speedlevel; gorun(); void delay(unsigned int endcoun

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论