基于51单片机的无线遥控小车_第1页
基于51单片机的无线遥控小车_第2页
基于51单片机的无线遥控小车_第3页
基于51单片机的无线遥控小车_第4页
基于51单片机的无线遥控小车_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

1、智能小车摘要· 智能小车利用单片机STC10F08XE作为控制核心,使用红外线发射和接收器件、接近反射式光电感应器件、编码解码芯片和无线收发模块,实现智能小车的红外探测避障以及循迹功能,遥控小车的运动轨迹,用单片机输入/输出接口控制伺服电机方向、速度和运行时间,模块化结构保证了小车成为一个可靠整体,软件采用C语言编程,完成小车所要实现的功能。关键词:单片机 STC10F08XE 红外避障 循迹 遥控 伺服电机第一章:智能小车总体设计结构及硬件模块设计1.1 总体设计结构1.2 智能小车硬件模块第二章:智能小车各模块电路设计2.1 红外避障模块检测原理 红外检测原理图 测试红外发射探测

2、器 红外避障程序循迹模块循迹原理循迹原理图 小车的循迹程序红外避障及循迹程序流程图红外避障及循迹程序程序代码2.3 无线遥控模块 无线遥控原理 无线遥控发射原理2.3.3无线遥控发射原理图2.3.4无线遥控接收原理.5无线遥控接收原理图 无线遥控控制程序第一章:智能小车总体设计结构及硬件模块设计智能小车采用STC单片机集中控制和分散模块化设计。智能小车硬件由STC单片机开发板,红外检测模块组、轨迹检测模块以及无线遥控模块组成,智能小车采用左右两个伺服电机,高电平持续的时间控制电机运动转速。智能车前下端4组检测灯对黑线的反馈信号,通过单片机控制伺服电机的转动。前端的两组红外检测灯对障碍物进行检测

3、,通过单片机P2口的低四位对遥控信号进行检测。 小车的机械结构设计:为了保证小车能够进行循迹,同时避免外界光的干扰,我们将道路检测电路板放在小车底盘的前端,红外避障模块放在小车的前部,无线接收模块放在小车的尾部,单片机控制板放在小车的正上方保持小车的平衡性,小车的主动轮为前端两个,从动轮为后面一个,电池放在两个主动轮之间,这样的整体设计既可以保持重心尽量在一条竖直线上又方便电源的开关,使小车转弯时的转动惯量减小,增强其稳定性。 智能小车主要机构从侧面观察各板的排列。 各个模块附图如下: 红外避障模块红外循迹模块遥控发射端无线遥控接收端第二章:智能小车各模块电路设计电路的设计包括三个模块:红外避

4、障模块,红外循迹模块,无线遥控模块2.1 红外避障模块 检测原理红外线二极管发射红外光,如果机器人前面有障碍物,红外线从物体反射回来,相当于机器人眼睛的红外检测(接收)器,检测到反射回的红外光线,并发出信号来表明检测到从物体反射回红外线。51单片机基于这个传感器的输入控制伺服电机。红外线(IR)接收/检测器有内置的光滤波器,除了需要检测的980 nm波长的红外线外,它几乎不允许其它光通过。红外检测器还有一个电子滤波器,它只允许大约38.5 kHz 的电信号通过。换句话说,检测器只接收每秒闪烁38,500次的红外光。这就防止了普通光源象太阳光和室内光对IR的干涉。太阳光是直流干涉(0Hz)源,而

5、室内光依赖于所在区域的主电源,闪烁频率接近100或120 Hz。由于120 Hz在电子滤波器的38.5 kHz通带频率之外,它完全被IR探测器忽略。一组红外光电传感器包括有一个发射管和一个接收管。当发射管照射到障碍物时,大部分红外光都会返回给接收管,接收管输出为低电平;反之,当红外发射管前方无障碍物时,光线几乎没有被返回,那么接收管就不会接收到足够反射回来的光线,接收管输出高电平。输出的高低电平经IO口接入STC中,再通过程序的控制,使得小车作出相应的动作。 红外检测原理图元件清单:(1) 两个1938(红外探测器)(2) 两个EL-1L1(红外LED)(3) 四个470电阻(4) 两个901

6、3三极管说明:因为STC的IO驱动能力较弱,这里我们加入三极管使其工作在开关状态来增强驱动能力。本任务中用到的是NPN型三极管9013, 当单片机的IO口输出高电平时,三极管导通,IRLED可发出红外光;反之,当IO口输出低电平时,三极管截止,IRLED不能发射红外光。红外发射探测器应用应用说明让每个IR LED 探测器组工作的关键是发送1毫秒频率为38.5 kHz的红外信号,然后立刻将IR探测器的输出存储到一个变量中。可以给P1_3输出的信号高电平13微秒,低电平为13微秒,总周期为26微秒,即频率约为。当没有红外信号返回时,探测器的输出状态为高。当它探测到被物体反射的38500Hz红外信号

7、时,它的输出为低。因红外信号发送的持续时间为1毫秒,因此IR探测器的输出如果处于低,其持续状态也不会超过1毫秒,因此发送完信号后必须立即将IR探测器的输出存储到变量中。这些存储的值即可表示前方是否有障碍物。由此,可以实现智能小车的红外避障功能。电路测试程序如下:#include<uart.h>void delay_nus(unsigned int i) /延时,单片机为STC10F08XE i=i*10/12; while(-i); void Hardware_delay_1ms(void) TMOD &=0xF0; TMOD |=0x01; /T0-16位定时器器模 TH

8、0 = 0xFC; TL0 =0x18; /64536 TF0=0; /清除定时器溢出标志 TR0=1; /启动定时器 while(TF0=0);/等待计数完成 TR0=0; /停止定时器void delay_nms(int n) int j; for(j=n;j>0;j-) Hardware_delay_1ms(); int P3_5state(void)return (P3&0x20)?1:0; /返回P1_2的状态int main(void)int counter;int irDetectLeft;uart_Init(); /串口初始化printf("Progra

9、m Running!n");while(1)for(counter=0;counter<38;counter+) P2_3=1; /红外发射约38.5 kHz 的红外光delay_nus(13);P2_3=0;delay_nus(13);irDetectLeft=P3_5state(); /将返回的状态给irDetectLeftprintf("irDetectLeft=%dn",irDetectLeft);delay_nms(100);说明:l 保持机器人与串口线的连接; l 在红外检测电路前放一个物体,比如手或一张纸,距离左侧IR组大约2到3厘米;l 当放

10、一个物体在IR组前时,串口调试助手会显示“irDetecfLeft=0”,将物体移开时,它会显示“irDetectLeft=1”; l 调整红外检测器的角度,尽量使其与地面垂直;测试的结果如下图示:测试结果 红外避障程序#include<uart.h>#define LeftIR P1_2 /左边红外接收连接到P1_2#define RightIR P3_5 /右边红外接收连接到P3_5#define LeftLaunch P1_3 /左边红外发射连接到P1_3#define RightLaunch P3_6 /右边红外发射连接到P3_6void delay_nus(unsigne

11、d int i) i=i*10/12; while(-i); void Hardware_delay_1ms(void) TMOD &=0xF0; TMOD |=0x01; /T016位定时器器模 TH0 = 0xFC; TL0 =0x18; /64536 TF0=0; /清除定时器溢出标志 TR0=1; /启动定时器 while(TF0=0);/等待计数完成 TR0=0; /停止定时器void delay_nms(int n) /延时ms int j; for(j=n;j>0;j-) Hardware_delay_1ms(); void IRLaunch(unsigned ch

12、ar IR)int counter;if(IR='L') /左边发射for(counter=0;counter<38;counter+) LeftLaunch=1;delay_nus(13);LeftLaunch=0;delay_nus(13);if(IR='R') /右边发射for(counter=0;counter<38;counter+)RightLaunch=1;delay_nus(13);RightLaunch=0;delay_nus(13);void Forward(void) /向前行走子程序P1_1=1;delay_nus(1700)

13、;P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);void Left_Turn(void) /左转子程序int i;for( i=1;i<=23;i+)P1_1=1;delay_nus(1300);P1_1=0;P1_0=1;delay_nus(1300);P1_0=0;delay_nms(20);void Right_Turn(void) /右转子程序int i;for( i=1;i<=23;i+)P1_1=1;delay_nus(1700);P1_1=0;P1_0=1;delay_nus(1700);P1_0=0;delay

14、_nms(20);void Backward(void) /向后行走子程序int i;for( i=1;i<=65;i+)P1_1=1;delay_nus(1300);P1_1=0;P1_0=1;delay_nus(1700);P1_0=0;delay_nms(20);int main(void)int irDetectLeft,irDetectRight;uart_Init();printf("Program Running!n");while(1)IRLaunch('R'); /右边发射irDetectRight = RightIR; /右边接收I

15、RLaunch('L'); /左边发射irDetectLeft = LeftIR; /左边接收if(irDetectLeft=0)&&(irDetectRight=0)/同时接到红外线Backward();Left_Turn();Left_Turn();else if(irDetectLeft=0) /只有左边接收到红外线Backward();Right_Turn();else if(irDetectRight=0) /只有右边接收到红外线Backward();Left_Turn();elseForward();2.2 红外循迹模块循迹原理接近反射式光电感应器件

16、RPR220由一个红外线发射二极管和一个光电二极管组成,可以发射并检测到反射回的光线。由于不同颜色的物体对光的反射率不同,当RPR220对准黑色物体时,黑色对光线反射率低,光电二极管接收到的反射光很少,不能导通,输出高电平;反之,当RPR220对准白色物体时,输出低电平。故而可以利用RPR220区分出黑色跑道与白色跑道边缘,STC单片机可基于返回的信号控制伺服电机,从而控制小车的行进。循迹原理图元件清单(1) 四个RPR220 (2) 100、2K、10K 电阻各四个(3) 四个10K 滑动变阻器(4) LM339芯片说明:l 安装时需要注意将焊有RPR220的电路板安装到小车的底部,并将RP

17、R220对准地面,增强反射光的强度,同时可遮挡外界光;l 可将RPR220用纸壳或别的物体包起来,防止外界光的干扰;l 将ENTER与单片机的数据输入口相连,以将信息返回给单片机;l 接收管集电极输出接入比较器339正极,比较器负极则为滑动变阻器的输出,将滑动变阻器的电位调节到合适的大小,当正极高于负极时,比较器输出5V高电平,否则为0V低电平。比较器输出则接入STC,单片机通过返回的信息判断小车是否处于跑道区域内并做出相应的反应。 小车的循迹程序#include <uart.h>#define LD1 P1_2; /左左检测灯#define LD2 P1_3; /中左检测灯#de

18、fine RD1 P3_5; /中右检测灯#define RD2 P3_6; /右右检测灯void delay_nus(unsigned int i) i=i*10/12; while(-i); void Hardware_delay_1ms(void) TMOD &=0xF0; TMOD |=0x01; /T016位定时器器模 TH0 = 0xFC; TL0 =0x18; /64536 TF0=0; /清除定时器溢出标志 TR0=1; /启动定时器 while(TF0=0);/等待计数完成 TR0=0; /停止定时器void delay_nms(int n) int j; for(j

19、=n;j>0;j-) Hardware_delay_1ms(); void Forward(void) /向前行走子程序P1_1=1;delay_nus(1440);P1_1=0;P1_0=1; delay_nus(1400);P1_0=0;delay_nms(20);void Left_Turn(void) /左转子程序int i;for( i=1;i<=15;i+)P1_1=1;delay_nus(1420);P1_1=0;P1_0=1;delay_nus(1400);P1_0=0;delay_nms(20);void Right_Turn(void) /右转子程序int i;

20、for( i=1;i<=15;i+)P1_1=1; delay_nus(1440);P1_1=0;P1_0=1; delay_nus(1420);P1_0=0;delay_nms(20);void Backward(void) /向后行走子程序int i;for( i=1;i<=65;i+)P1_1=1; delay_nus(1400);P1_1=0;P1_0=1; delay_nus(1440);P1_0=0;delay_nms(20);int main () int L1,L2,R1,R2; uart_Init(); printf("Program Running!n

21、"); while(1) L1=LD1; L2=LD2; R1=RD1; R2=RD2; if(L1=1)&&(R2=0)/左灯检测到黑色右灯检测到白色左转Left_Turn();else if(L1=0)&&(R2=1)/左灯检测到白色右灯检测到黑色 右转 Right_Turn();else if(L1=0)&&(L2=0)&&(R1=0)&&(R2=0)/四个灯都检测到白色 后退Backward();else if(L1=1)&&(L2=1)&&(R1=1)&&

22、amp;(R2=1)/四个灯都检测到黑色 后退Backward();else /前进Forward(); 避障及循迹程序流程图将小红外避障模块和循迹模块结合起来,通过软件编程,可使智能小车实现以下功能:当红外检测器检测到障碍物时,小车停止行进;当小车前方没有障碍物时,小车按照指定的跑道轨迹行进。以下是程序流程图:开始串口初始化while(1)检测障碍与道路子程序2.2.5外避障及循迹程序程序代码#include <uart.h>sbit LD1=P12; /左左检测灯sbit LD2=P13; /中左检测灯sbit RD1=P14; /中右检测灯sbit RD2=P15; /右右检

23、测灯sbit LeftIR=P35; /左边红外接收连接到P3_5sbit RightIR=P36; /右边红外接收连接到P3_6sbit LeftLaunch=P23; /左边红外发射连接到P2_3sbit RightLaunch=P24; /右边红外发射连接到P2_4void delay12us(void) unsigned char a,b; for(b=9;b>0;b-) for(a=2;a>0;a-);void delay_nus(unsigned int i) /延时,单片机为STC10F08XE i=i*10/12; while(-i); void Hardware_

24、delay_1ms(void) TMOD &=0xF0; TMOD |=0x01; /T016位定时器器模 TH0 = 0xFC; TL0 =0x18; /64536 TF0=0; /清除定时器溢出标志 TR0=1; /启动定时器 while(TF0=0);/等待计数完成 TR0=0; /停止定时器void delay_nms(int n) int j; for(j=n;j>0;j-) Hardware_delay_1ms(); void IRLaunch(unsigned char IR)int counter;if(IR='L') /左边发射for(count

25、er=0;counter<38;counter+)LeftLaunch=1; delay12us();LeftLaunch=0;delay12us();if(IR='R') /右边发射for(counter=0;counter<38;counter+)RightLaunch=1; delay12us();RightLaunch=0;delay12us();void Forward(void) /向前行走子程序P1_1=1;delay_nus(1440);P1_1=0;P1_0=1;delay_nus(1400);P1_0=0;delay_nms(20);void L

26、eft_Turn(void) /左转子程序int i;for( i=1;i<=15;i+)P1_1=1;delay_nus(1420);P1_1=0;P1_0=1;delay_nus(1400);P1_0=0;delay_nms(20);void Right_Turn(void) /右转子程序int i;for( i=1;i<=15;i+)P1_1=1;delay_nus(1440);P1_1=0;P1_0=1;delay_nus(1420);P1_0=0;delay_nms(20);void Backward(void) /向后行走子程序int i;for( i=1;i<=

27、65;i+)P1_1=1;delay_nus(1400);P1_1=0;P1_0=1;delay_nus(1440);P1_0=0;delay_nms(20);void Stop(void) /停止子程序P1_1=0;P1_0=0;int main () int L1,L2,R1,R2; int irDetectLeft,irDetectRight; uart_Init(); printf("Program Running!n"); while(1) IRLaunch('R'); /右边发射irDetectRight = RightIR; /右边接收IRLa

28、unch('L'); /左边发射irDetectLeft = LeftIR; /左边接收 L1=LD1; L2=LD2; R1=RD1; R2=RD2; if(irDetectLeft=0)|(irDetectRight=0) /检测到障碍物停止Stop();else if(L1=1)&&(R2=0)/左左灯检测到黑色 右右灯检测到白色 左转Left_Turn();else if(L1=0)&&(R2=1)/左左灯检测到白色 右右灯检测到黑色 右转 Right_Turn();else if(L1=0)&&(L2=0)&&a

29、mp;(R1=0)&&(R2=0)/四个灯都检测到白色 后退Backward();else if(L1=1)&&(L2=1)&&(R1=1)&&(R2=1)/四个灯都检测到黑色 后退Backward();else /前进Forward(); 无线遥控模块 无线遥控原理一个完整的遥控电路由发射部分和接收部分组成。无线电发射部分,由一个能产生等幅振荡的高频载频振荡器和一个产生低频调制信号的低频振荡器组成。用来产生载频振荡的电路一般有多谐振荡器、互补振荡器和石英晶体振荡器等。由低频振荡器产生的低频调制波,一般为宽度一定的方法。如果是多路

30、控制可以采用每一路宽度不同的方波,或是频率不同的方法去调制高频载波,组成一组组的已调制波,作为控制信号向空中发射。接收电路从工作方式分,可以分成超外差接收方式和超再生接收方式。超外差原理利用本地产生的振荡波与输入信号混频,将输入信号频率变换为某个预定的频率的电路。其优点是:容易得到足够大而且比较稳定的放大量。具有较高的选择性和较好的频率特性。容易调整。缺点是电路比较复杂,同时也存在着一些特殊的干扰,如像频干扰、组合频率干扰和中频干扰等。超再生电路实际上是一个受控间歇振荡的高频振荡器,这个高频振荡器采用电容三点式振荡器,振荡频率和发射器的发射频率相一致。而间歇振荡又是在高频振荡过程中产生的,反过

31、来又控制着高频振荡器的振荡和间歇。间歇振荡的频率是由电路的参数决定的。这个频率选低了,电路的抗干扰性能较好,接收灵敏度降低;反之亦然。超再生式接收方式具有电路简单、性能适中、成本低廉的优点所以在实际应用中被广泛采用。 PT22622272编码解码集成电路PT2262/PT2272 是台湾普城公司生产的一种CMOS 工艺制造的低功耗低价位通用编解码电路,PT2262/PT2272 最多可有12 位(A0-A11)三态地址端管脚(悬空,接高电平,接低电平),任意组合可提供531441 地址码,PT2262 最多可有6 位(D0-D5)数据端管脚,设定的地址码和数据码从17 脚串行输出,可用于无线遥

32、控发射电路。pt 2262pt2272管脚如图1: 图1 PT2262/PT2272 管脚图表1 PT2262 管脚说明名称管脚说明A0-A111-8,10-13地址管脚,用于进行地址编码,可置为“0”,“1”,“f”(悬空);D0-D57-8,10-13数据输入端,有一个为“1”即有编码发出,内部下拉;Vcc18电源正端()GND9电源负端()TE14编码启动端,用于多数据的编码发射,低电平有效;OSC116振荡电阻输入端,与OSC2所接电阻决定振荡频率;OSC215振荡电阻振荡器输出端;DOUT17编码输出端(正常时为低电平)表2 PT2272 管脚说明名称管脚说明A0-A111-8,10

33、-13地址管脚,用于进行地址编码,可置为“0”,“1”,“f”(悬空),必须与2262一致,否则不解码D0-D57-8,10-13地址或数据管脚,当做为数据管脚时,只有在地址码与2262一致,数据管脚才能输出与2262数据端对应的高电平,否则输出为低电平,锁存型只有在接收到下一数据才能转换Vcc18电源正端()GND9电源负端()DIN14数据信号输入端,来自接收模块输出端OSC116振荡电阻输入端,与OSC2所接电阻决定振荡频率;OSC215振荡电阻振荡器输出端;VT17解码有效确认 输出端(常低)解码有效变成高电平(瞬态) T10A发射模块T10A发射模块采用SMD技术,在稳频处理上采用最

34、先进声表谐振器(SAW)元件,电路板(PCB)采用介质损耗最小的材料,体积小巧。 T10A发射模块如图2所示,T10A发射模块技术指标表3 图2 T10A发射模块表3 T10A发射模块技术指标参数工作电压3V-12V工作电流25mA(12V); 2mA(3V)谐振方式声表谐振(SAW)调制方式AM/ASK/OOK工作频率频率误差±150kHz(max)发射功率25mW(315MHz, 12V时) XY-R04A接收模块XY-R04A接收模块如图3所示,XY-R04A接收模块技术指标表4图3XY-R04A接收模块表4 XY-R04A接收模块技术指标工作电压工作电流4mA(5V)工作频率

35、315MHz/433MHz输出数据TTL电平最大速率1KHZ接收灵敏度-105dBm工作温度-10+60解码器类型固定码 无线遥控发射和接受原理图 无线发射模块无线接收模块2.3.4无线遥控接收原理编码芯片PT2262 发出的编码信号由:地址码、数据码、同步码组成一个完整的码字,解码芯片PT2272 接收到信号后,其地址码经过两次比较核对后,VT 脚才输出高电平,与此同时相应的数据脚也输出高电平,如果发送端一直按住按键,编码芯片也会连续发射。当发射机没有按键按下时,PT2262 不接通电源,其17 脚为低电平,所以315MHz 的高频发射电路不工作,当有按键按下时,PT2262 得电工作,其第

36、17 脚输出经调制的串行数据信号,当17 脚为高电平期间315MHz 的高频发射电路起振并发射等幅高频信号,当17 脚为低平期间315MHz 的高频发射电路停止振荡,所以高频发射电路完全收控于PT2262 的17 脚输出的数字信号,从而对高频电路完成幅度键控(ASK 调制)相当于调制度为100的调幅。PT2262和PT2272除地址编码必须完全一致外,振荡电阻还必须匹配,一般要求译码器振荡频率要高于编码器振荡频率的2.58倍,否则接收距离会变近甚至无法接收,随着技术的发展市场上出现一批兼容芯片,在实际使用中只要对振荡电阻稍做改动就能配套使用。在具体的应用中,外接振荡电阻可根据需要进行适当的调节

37、,阻值越大振荡频率越慢,编码的宽度越大,发码一帧的时间越长。市场上大部分产品都是用2262/2272/200K组合的,少量产品用2262/2272/820K。解码接收模块包括接收头和解码芯片PT2272两部分组成。接收头将收到的信号输入PT2272的14脚(DIN),PT2272再将收到的信号解码。 接收板工作电压为DC 5V,接收灵敏度: -103dBm ,尺寸(mm): 49*20*7 ,工作频率:315MHz,工作电流:5mA ,编码类型:固定码(板上焊盘跳接设置) 应用说明:与各类型遥控器配合使用,解码输出后进行相应控制,在通常使用中,我们一般采用8位地址码和4位数据码,这时编码芯片P

38、T2262和解码芯片PT2272的第18脚为地址设定脚,有三种状态可供选择:悬空、接正电源、接地三种状态,地址编码不重复度为38=6561组,只有发射端PT2262和接收端PT2272的地址编码完全相同,才能配对使用,遥控模块的生产厂家为了便于生产管理,出厂时遥控模块的PT2262和PT2272的八位地址编码端全部悬空,这样用户可以很方便选择各种编码状态,用户如果想改变地址编码,只要将PT2262和PT2272的18脚设置相同即可,例如将发射机的PT2262的第2脚接地,第3脚接正电源,其它引脚悬空,那么接收机的PT2272只要也第2脚接地,第3脚接正电源,其它引脚悬空就能实现配对接收。当两者地址编码完全一致时,接收机对应的D1D4端输出约4V互锁高电

温馨提示

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

评论

0/150

提交评论