1、编号 单 片机 课程 设计( 级)题 目:基于单片机智能红外遥控小车的设计学 院: 物理与机电工程学院 专 业: 电子信息科学与技术 作者姓名: 指导教师: 职称: 副教授 完成日期: 20 年 1 月 6 日二 一 七 年 一 月1基于单片机智能红外遥控小车的设计摘 要本次设计的简易智能小车,采用 STC89C52RC 单片机作为小车的检测和控制核心;采用红外线遥控远程人为控制小车行驶状态;采用 SM4105W80U3 显示小车处于自动行驶还是遥控行驶;可以实现小车的前进、后退、左转、右转、停止运动。 关键词:STC89C52RC;红外遥控21 前 言 本设计能实现对小车的运动状态进行实时控
2、制,控制灵活、可靠,精度高,可满足对系统的各项要求。本设计采用 MCS-51 系列中的 STC89C52RC 单片机。以 STC89C52RC 为控制核心,使用红外遥控对小车的前进、后退、左转、右转、停止运动进行实时的控制。 本次设计主要内容是基于 STC89C52RC 设计一部智能小车,小车能够实现自动前进,和红外遥控的智能小车控制系统,包括了对驱动电路,红外通讯等的探索和研究。 2 方案设计与论证 2.1 遥控方案的选择 由于属于小范围内遥控,小车在小范围内行驶,为了减少设计成本,增加便利性,所以采用常用的家用电视红外遥控器作为红外遥控发射部分,只需在小车上加装红外接收装置即可。定义遥控器
3、的上一曲键为左转键,暂停键为右转键,下一曲键为停止键,CH 健为前进键,音量增大键为后退键,实现小车行3驶的基本控制。 红外遥控系统的组成如图 2.1 所示。发射部分包括键盘矩阵、编码调制、LED 红外发送器;接收部分包括光、电转换放大器、解调、解码电路。图 2.1 红外流程图 2.2 遥控对小车的控制 切换到红外遥控功能,对小车的前进、后退、左转、右转、停止运动实现实时控制,具体如下所述:(1)前进是左右两个电机同时顺时针旋转,实现小车的前进;(2)后退是左右两个电机同时逆时针旋转,实现小车的后退;(3)停止是左右两个电机同时停止旋转,实现小车的停止;(4)右转是右电机逆时针旋转和左电机顺时
4、针旋转同时工作,实现小车的右转;(5)左转是左电机逆时针旋转和右电机顺时针旋转同时工作,实现小车的左转; 实现不同的运动方式,是通过 PWM 信号对 L293D 芯片中的 H 桥进行控制。电桥一端接电源,另一端接了一个三极管。三极管导通时,电桥通过三极管接地,电机电枢中有电流通过;三极管截止时,电桥浮空,电机电枢中没有电流通过。系统通过电桥的输出端为转向电机供电。通过对继电器开闭的控制即可控制电机的开断和转速方向进而达到控制玩具车前行与倒车的目的。42.3 系统原理图系统原理图如图 2.2 所示:LED 显示模块接 P1.1-1.7 口;红外遥控接P3.2 口;看门狗定时器接 2.7 口:电机
5、控制接 P0.0-0.3 口;蜂鸣器接 P0.7 口;功能切换键接 P3.4 口。图 2.2 系统框图3 硬件设计 3.1 89C52 单片机硬件结构 89C52 单片机是把那些作为控制应用所必需的基本内容都集成在一个尺寸有限的集成电路芯片上。如果按功能划分,它由如下功能部件组成,即微处理器、数据存储器、程序存储器、并行 I/O 口、串行口、定时器/计数器、中断系统及特殊功能寄存器。它们都是通过片内单一总线连接而成,其基本结构依旧是 CPU 加上外围芯片的传统结构模式。但对各种功能部件的控制是采用特殊功能寄存器的集中控制方式。 STC89C52RCL293D 驱动LED 显示起停运动光电隔离
6、复位电路红外遥控53.2 最小应用系统设计 3.2.1 最小系统用 89C52 单片机进行构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,如图 3.1 所示。由于集成度的限制,最小系统只能用作一些最小的控制单元。但也拥有一些有点: (1) 有可供用户使用的大量 I/O 口线。 (2) 内部存储器容量有限。 (3) 应用系统开发具有特殊性。图 3.1 最小系统电路图63.2.2 烧写接口电路 RST 置高电平,然后向单片机串行发送编程命令。P1.7(SCK)输入移位脉冲,P1.6(MISO)串行输出,P1.5(MOSI)串行输入。被烧写的单片机一定是最小系统(单片机已经接好电源,晶振
7、,可以运行) 。如图 3.2 烧写接口电路。图 3.2 烧录程序电路图3.2.3 PWM 脉宽调速 本设计调速采用 PWM 控制,选用了常用的双极式 H 型变换器,它是由 4 个三极电力晶体管和四个续流二极管组成的桥式电路。图 3.3 为双极式 H 型可逆PWM 变换器的电路原理图。 4 个电力晶体管的基极驱动电压分为两组。VT1 和 VT4 同时导通和关断,其驱动电路中 Ub1=Ub4;VT2 和 VT3 同时动作,其驱动电压 Ub2=Ub3=-Ub1。 双极式 PWM 变换器的优点如下:(1)电流一定连续; 7(2)可使电动机在四象限中运行; (3)电机停止时有微振电流,能消除静摩擦死区;
8、 (4)低速时,每个晶体管的驱动脉冲仍较宽,有利于保证晶体管可靠导通;(5)低速平稳性好,调速范围可达 20000 左右。图 3.3 PWM 驱动电路图3.2.4 电源的设计 本设计的电源为车载电源。为保证电源工作可靠,单片机系统与动力伺服系统的电源采用了大功率、大容量的蓄电池;而传感器的工作电源则采用了小巧轻便的干电池。3.3 红外线遥控电路 方便起见,本设计直接采用电视遥控器作为红外遥控的发射器,只需在小车上加装红外接收装置即可 红外接收器的电路图如图 3.4 所示:8图 3.4 红外线遥控电路3.4 显示电路设计本设计中用一片 1 位七段数码管 SM4105W80U3 作显示器,显示数字
9、。 七段数码管 SM4105W80U3 中的 abcdefgdp 分别连接在单片机的P2.1P2.7,分别控制各段码,与单片机的连接如图 3.5 所示。9图 3.5 显示电路图4 软件设计 4.1 设计流程 一个智能化的系统,软件设计必不可少,软件设计是更具系统需求,通过编程语言控制单片机的行为,实现智能控制。 模块化的程序设计有以下有点:(1) 单个模块比起一个完整的程序易编写及调试; (2)模块可以共存,一个模块可以被多个任务在不同条件下调用;(3) 模块程序允许设计者分割任务和利用已有程序,为设计者提供方便。本系统软件采用模块化结构,由主程序中断子程序显示子程序算法子程序、遥控子程序构成
10、。 10本次设计采用的即是模块化的软件编程,各程序功能清晰、明确。软件流程图如图 4.1 所示:开始 开始结束功能选择自动行驶遥控行驶遥控 YN11图 4.1 流程图4.2 软件抗干扰技术提高小车智能控制的可靠性,仅靠硬件抗干扰是不够的,需要进一步借助于软件抗干扰技术来克服某些干扰。在单片机控制系统中,如能正确的采用软件抗干扰技术,与硬件干扰措施构成双道抗干扰防线,无疑为了将大大提高控制系统的可靠性。经常采用的软件抗干扰技术是数字滤波技术、指令冗余技术、软件陷阱技术等。4.3 程序设计 软件设计采用模块化设计,思路清晰,也便于查找问题。红外遥控键位对应子程序流程图如图 4.2 所示开始 开始采
11、集红外遥控数据YN延时等待12图 4.2 红外遥控流程图结束进行键位对应判地址码是否相同135 不足与展望本次设计的总体效果不是很好,控制灵敏性较差,寻迹和避障功能没有很好的实现。因此要设计具有优良的调速特性,调速平滑,方便使用,控制精确,转动灵敏,可实现频繁的无极快速起动、制动和转动,需要满足生产过程自动化系统各种不同的特殊要求。为此,设计制造高性能、高可靠性的智能小车控制系统有着十分重要的现实意义。6 设计心得经过这次课程设计我感受颇多,在正式进行设计之前,我参考了一些网上的资料,通过对这些设计方案来开拓自己的思路,最后终于有了自己的思路。此次课程设计不仅是对前面所学单片机技术和运动控制理
12、论的一种检验,更是对所学知识大融合,站在新的高度看待新的问题,而且也是对自己运用所学知识的能力的一种提高。通过这次课程设计使我明白了自己原来知识还比较欠缺,自己要学习的东西还太多。以前老是觉得自己什么东西都会,什么东西都懂,有点眼高手低。通过这次课程设计,我才明白学习是一个长期积累的过程。14参考文献1 张毅刚,喜元.原理与应用设计M. 北京:北京市海淀区四季青印刷厂,2010.2 张毅刚.新编 MCS-51 单片机运用设计M. 哈尔滨:哈尔滨工业大学出版社,2003.3 张义和,敏男,宏昌,长春.例说 51 单片机(c 语言版)M. 北京:人民邮电出版社,2009.4 马忠梅 籍顺心 张 凯
13、 马 岩.单片机的 C 语言应用程序设计M. 北京:北京航空航天大学,2010.5 Samsung Electronics. S3C44BOX Risc microcontroller ARM instruction sheet .2002.6 郭天祥.51 单片机 C 语言教程 M. 子工业出版社,2005 年 7 月.7 丁元杰.单片微机原理及应用M,械工业出版社,2005 年 7 月.8 楼然苗,光.单片机课程设计指导M.京: 北京航空航天大学出版社,2007.1516附 录1 实物图172 源程序清单#include #include sbit LeftLed=P20; sbit Ri
14、ghtLed=P07; sbit FontLled=P17;sbit LeftIR=P35; sbit RightIR=P36; sbit FontIR=P37; sbit M1A=P00; sbit M1B=P01; sbit M2A=P02; sbit M2B=P03; sbit B1=P04; sbit SB1=P06; sbit IRIN=P33; unsigned char code LedShowData=0x03,0x9F,0x25,0x0D,0x99, 0x49,0x41,0x1F,0x01,0x19;unsigned char code RecvData=0x19,0x46,
15、0x15,0x43,0x44,0x40,0x0D,0x0E,0x00,0x0F;unsigned char IRCOM7;static unsigned int LedFlash; bit EnableLight=0; #define ShowPort P2 unsigned char temp = 1;void tingzhi()M1A=0; M1B=0; M2A=0; 18M2B=0;void qianjin()M1A=1; M1B=0; M2A=1; M2B=0;void houtui()M1A=0; M1B=1; M2A=0; M2B=1;void zuozhuan()M1A=0; M
16、1B=1; M2A=1; M2B=0;void youzhuan()M1A=1; M1B=0; M2A=0; M2B=1;void Delay1ms(unsigned int i) unsigned char j,k; do j = 10; do 19k = 50; do _nop_(); while(-k); while(-j); while(-i); void delay_nus(unsigned int i) i=i/10;while(-i); void delay_nms(unsigned int n) n=n+1;while(-n) delay_nus(900); void dela
17、yms(unsigned char x) unsigned char i; while(x-) for (i = 0; i 3)temp = 1;switch(temp)case 1:ShowPort= LedShowData1;Robot_Traction();EX1 = 0;break;case 2: ShowPort= LedShowData2;Robot_Avoidance();EX1 = 0;break;case 3: ShowPort = LedShowData3;EX1 = 1;break;void IR_IN() interrupt 2 using 0 unsigned char j,k,N=0; EX1 = 0; delayms(15); if (IRIN=1) EX1 =1; return; 23 while (!IRIN) delayms(1); for (j=0;j=30) EX1=1; return; IRCOMj=IRCOMj 1; if (N=8) IRCOMj = IRCOMj | 0x80; N=0; if (IRCOM2!=IRCOM3) 24 EX1=1; return; for(j=0;j10;j+) if(IRCOM2=RecvDataj) ControlCar_yaokong(j); EX1 = 1;