基于单片机智能遥控小车的设计Word文档格式.docx
《基于单片机智能遥控小车的设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机智能遥控小车的设计Word文档格式.docx(24页珍藏版)》请在冰点文库上搜索。
![基于单片机智能遥控小车的设计Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/7/0dd177dc-7078-4a7d-91d3-964b64239b35/0dd177dc-7078-4a7d-91d3-964b64239b351.gif)
本次设计主要内容是基于STC89C52RC设计一部智能小车,小车能够实现自动前进,和红外遥控的智能小车控制系统,包括了对驱动电路,红外通讯等的探索和研究。
2
方案设计与论证
2.1
遥控方案的选择
由于属于小范围内遥控,小车在小范围内行驶,为了减少设计成本,增加便利性,所以采用常用的家用电视红外遥控器作为红外遥控发射部分,只需在小车上加装红外接收装置即可。
定义遥控器的上一曲键为左转键,暂停键为右转键,下一曲键为停止键,CH健为前进键,音量增大键为后退键,实现小车行驶的基本控制。
红外遥控系统的组成如图2.1所示。
发射部分包括键盘矩阵、编码调制、LED红外发送器;
接收部分包括光、电转换放大器、解调、解码电路。
图2.1红外流程图
2.2
遥控对小车的控制
切换到红外遥控功能,对小车的前进、后退、左转、右转、停止运动实现实时控制,具体如下所述:
(1)前进是左右两个电机同时顺时针旋转,实现小车的前进;
(2)后退是左右两个电机同时逆时针旋转,实现小车的后退;
(3)停止是左右两个电机同时停止旋转,实现小车的停止;
(4)右转是右电机逆时针旋转和左电机顺时针旋转同时工作,实现小车的右转;
(5)左转是左电机逆时针旋转和右电机顺时针旋转同时工作,实现小车的左转;
实现不同的运动方式,是通过PWM信号对L293D芯片中的H桥进行控制。
电桥一端接电源,另一端接了一个三极管。
三极管导通时,电桥通过三极管接地,电机电枢中有电流通过;
三极管截止时,电桥浮空,电机电枢中没有电流通过。
系统通过电桥的输出端为转向电机供电。
通过对继电器开闭的控制即可控制电机的开断和转速方向进而达到控制玩具车前行与倒车的目的。
2.3系统原理图
系统原理图如图2.2所示:
LED显示模块接P1.1-1.7口;
红外遥控接P3.2口;
看门狗定时器接2.7口:
电机控制接P0.0-0.3口;
蜂鸣器接P0.7口;
功能切换键接P3.4口。
图2.2系统框图
3
硬件设计
3.189C52单片机硬件结构
89C52单片机是把那些作为控制应用所必需的基本内容都集成在一个尺寸有限的集成电路芯片上。
如果按功能划分,它由如下功能部件组成,即微处理器、数据存储器、程序存储器、并行I/O口、串行口、定时器/计数器、中断系统及特殊功能寄存器。
它们都是通过片内单一总线连接而成,其基本结构依旧是CPU加上外围芯片的传统结构模式。
但对各种功能部件的控制是采用特殊功能寄存器的集中控制方式。
3.2
最小应用系统设计
3.2.1最小系统
用89C52单片机进行构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,如图3.1所示。
由于集成度的限制,最小系统只能用作一些最小的控制单元。
但也拥有一些有点:
(1)
有可供用户使用的大量I/O口线。
(2)
内部存储器容量有限。
(3)
应用系统开发具有特殊性。
图3.1最小系统电路图
3.2.2烧写接口电路
RST置高电平,然后向单片机串行发送编程命令。
P1.7(SCK)输入移位脉冲,P1.6(MISO)串行输出,P1.5(MOSI)串行输入。
被烧写的单片机一定是最小系统(单片机已经接好电源,晶振,可以运行)。
如图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)电流一定连续;
(2)可使电动机在四象限中运行;
(3)电机停止时有微振电流,能消除静摩擦死区;
(4)低速时,每个晶体管的驱动脉冲仍较宽,有利于保证晶体管可靠导通;
(5)低速平稳性好,调速范围可达20000左右。
图3.3PWM驱动电路图
3.2.4电源的设计
本设计的电源为车载电源。
为保证电源工作可靠,单片机系统与动力伺服系统的电源采用了大功率、大容量的蓄电池;
而传感器的工作电源则采用了小巧轻便的干电池。
3.3
红外线遥控电路
方便起见,本设计直接采用电视遥控器作为红外遥控的发射器,只需在小车上加装红外接收装置即可
红外接收器的电路图如图3.4所示:
图3.4红外线遥控电路
3.4
显示电路设计
本设计中用一片1位七段数码管SM4105W80U3作显示器,显示数字。
七段数码管SM4105W80U3中的a﹑b﹑c﹑d﹑e﹑f﹑g﹑dp分别连接在单片机的P2.1—P2.7,分别控制各段码,与单片机的连接如图3.5所示。
图3.5显示电路图
4
软件设计
4.1
设计流程
一个智能化的系统,软件设计必不可少,软件设计是更具系统需求,通过编程语言控制单片机的行为,实现智能控制。
模块化的程序设计有以下有点:
(1)单个模块比起一个完整的程序易编写及调试;
(2)模块可以共存,一个模块可以被多个任务在不同条件下调用;
(3)模块程序允许设计者分割任务和利用已有程序,为设计者提供方便。
本系统软件采用模块化结构,由主程序﹑中断子程序显示子程序﹑算法子程序、遥控子程序构成。
本次设计采用的即是模块化的软件编程,各程序功能清晰、明确。
软件流程图如图4.1所示:
图4.1流程图
4.2
软件抗干扰技术
提高小车智能控制的可靠性,仅靠硬件抗干扰是不够的,需要进一步借助于软件抗干扰技术来克服某些干扰。
在单片机控制系统中,如能正确的采用软件抗干扰技术,与硬件干扰措施构成双道抗干扰防线,无疑为了将大大提高控制系统的可靠性。
经常采用的软件抗干扰技术是数字滤波技术、指令冗余技术、软件陷阱技术等。
4.3
程序设计
软件设计采用模块化设计,思路清晰,也便于查找问题。
红外遥控键位对应子程序流程图如图4.2所示
图4.2红外遥控流程图
5不足与展望
本次设计的总体效果不是很好,控制灵敏性较差,寻迹和避障功能没有很好的实现。
因此要设计具有优良的调速特性,调速平滑,方便使用,控制精确,转动灵敏,可实现频繁的无极快速起动、制动和转动,需要满足生产过程自动化系统各种不同的特殊要求。
为此,设计制造高性能、高可靠性的智能小车控制系统有着十分重要的现实意义。
6设计心得
经过这次课程设计我感受颇多,在正式进行设计之前,我参考了一些网上的资料,通过对这些设计方案来开拓自己的思路,最后终于有了自己的思路。
此次课程设计不仅是对前面所学单片机技术和运动控制理论的一种检验,更是对所学知识大融合,站在新的高度看待新的问题,而且也是对自己运用所学知识的能力的一种提高。
通过这次课程设计使我明白了自己原来知识还比较欠缺,自己要学习的东西还太多。
以前老是觉得自己什么东西都会,什么东西都懂,有点眼高手低。
通过这次课程设计,我才明白学习是一个长期积累的过程。
参考文献
[1]张毅刚,喜元.原理与应用设计[M].北京:
北京市海淀区四季青印刷厂,2010.
[2]张毅刚.新编MCS-51单片机运用设计[M].哈尔滨:
哈尔滨工业大学出版社,2003.
[3]张义和,敏男,宏昌,长春.例说51单片机(c语言版)[M].北京:
人民邮电出版社,2009.
[4]马忠梅籍顺心张凯马岩.单片机的C语言应用程序设计[M].北京:
北京航空航天大学,2010.
[5]SamsungElectronics.S3C44BOXRiscmicrocontrollerARMinstructionsheet.2002.
[6]郭天祥.《51单片机C语言教程》[M].子工业出版社,2005年7月.
[7]丁元杰.《单片微机原理及应用》[M],械工业出版社,2005年7月.
[8]楼然苗,光.《单片机课程设计指导》[M].京:
北京航空航天大学出版社,2007.
附录
1实物图
2源程序清单
#include<
REGX52.H>
intrins.h>
sbitLeftLed=P2^0;
sbitRightLed=P0^7;
sbitFontLled=P1^7;
sbitLeftIR=P3^5;
sbitRightIR=P3^6;
sbitFontIR=P3^7;
sbitM1A=P0^0;
sbitM1B=P0^1;
sbitM2A=P0^2;
sbitM2B=P0^3;
sbitB1=P0^4;
sbitSB1=P0^6;
sbitIRIN=P3^3;
unsignedcharcodeLedShowData[]={
0x03,0x9F,0x25,0x0D,0x99,
0x49,0x41,0x1F,0x01,0x19
};
unsignedcharcodeRecvData[]={
0x19,0x46,0x15,0x43,0x44,
0x40,0x0D,0x0E,0x00,0x0F
};
unsignedcharIRCOM[7];
staticunsignedintLedFlash;
bitEnableLight=0;
#defineShowPortP2
unsignedchartemp=1;
voidtingzhi()
{
M1A=0;
M1B=0;
M2A=0;
M2B=0;
}
voidqianjin()
M1A=1;
M2A=1;
voidhoutui()
M1B=1;
M2B=1;
voidzuozhuan()
voidyouzhuan()
voidDelay1ms(unsignedinti)
{
unsignedcharj,k;
do{
j=10;
do{
k=50;
_nop_();
}while(--k);
}while(--j);
}while(--i);
}
voiddelay_nus(unsignedinti)
i=i/10;
while(--i);
voiddelay_nms(unsignedintn)
n=n+1;
while(--n)
delay_nus(900);
voiddelayms(unsignedcharx)
unsignedchari;
while(x--)
{
for(i=0;
i<
13;
i++){}
}
voidDelay()
unsignedintDelayTime=30000;
while(DelayTime--);
return;
voidControlCar(unsignedcharConType)
tingzhi();
switch(ConType)
case1:
//前进
{
LeftLed=0;
qianjin();
break;
case2:
//后退
{
LeftLed=1;
houtui();
case3:
//左转
zuozhuan();
case4:
//右转
youzhuan();
case8:
//停止
voidControlCar_yaokong(unsignedcharConType)
tingzhi();
Delay1ms(150);
Delay1ms(150);
voidmain()
bitRunFlag=0;
LedFlash=3000;
EX1=1;
IT1=1;
EA=1;
ControlCar(8);
while
(1)
if(P3_2==0)
delay_nms(10);
if(P3_2==0)
temp++;
while(!
P3_2);
if(temp>
3)
temp=1;
switch(temp)
case1:
ShowPort=LedShowData[1];
Robot_Traction();
EX1=0;
break;
case2:
ShowPort=LedShowData[2];
Robot_Avoidance();
case3:
ShowPort=LedShowData[3];
EX1=1;
voidIR_IN()interrupt2using0
unsignedcharj,k,N=0;
EX1=0;
delayms(15);
if(IRIN==1)
EX1=1;
}
while(!
IRIN)
delayms
(1);
}
for(j=0;
j<
4;
j++)
for(k=0;
k<
8;
k++)
while(IRIN)
IRIN)
N++;
if(N>
=30)
IRCOM[j]=IRCOM[j]>
>
1;
=8)
IRCOM[j]=IRCOM[j]|0x80;
N=0;
if(IRCOM[2]!
=~IRCOM[3])
for(j=0;
10;
if(IRCOM[2]==RecvData[j])
ControlCar_yaokong(j);
EX1=1;