智能小车实现分析
简介
导师制项目基于51单片机的智能循迹小车,包含黑线循迹、超声波避障、红外线遥控3大功能。
本文对该项目涉及外设以及具体的功能实现进行一个整合分析
硬件支持
主控芯片:STC89C52
小车车体:清翔电子的QX-A51两驱智能小车组件
电源:使用18650锂电池作为电源,负责提供电能给各个模块。LM7805三端稳压器提供稳定的5V直流电压,
电机驱动模块:使用L293D芯片作为电机驱动芯片,负责驱动两个TT减速电机,搭配两个车轮和一个定向轮,改变小车的速度和方向。
黑线循迹模块:使用两组RPR220一体化反射式光电传感器作为循迹传感器,使用LM324芯片用作电压比较模块芯片,负责检测地面上的黑线并输出高低电平信号。
超声波避障模块:使用HC-SR04超声波传感器作为避障传感器,负责检测前方是否有障碍物。
红外遥控模块:迷你红外遥控器发送红外光信号,使用HS0038红外接收探头接受红外光信号,并在单片机内部进行解码后输出指令或数据信号。
PWM(脉宽调制)实现小车变速
PWM(脉宽调制)
利用微处理器的数字输出,来形成想要的波形。
利用PWM实现小车变速,其实就是输出一段波形,高电平持续时间关闭电机,低电平时间开启电机,则占空比越大车速越慢。
占空比
脉冲信号中高电平持续时间与整个周期时间的比率
PWM信号频率
PWM的信号频率通常取决于应用需求和电机特性。对于智能小车的电机控制,100Hz是一个常见且合理的选择。因此波形的周期是
1/100Hz=10ms单片机晶振频率/时钟周期
该单片机的晶振频率为11.0592MHz,则其时钟周期为
1/11.0592MHz=0.0904us机器周期/计时器每变化一次所需时间
51系列单片机的机器周期等于12个时钟周期,于是
0.0904us*12=1.085us定时器初始值
我们希望占空比变化范围在
1/256~1之间,所以需要波形周期10ms分为256份,每份是39.0625us又知计时器每变化一次所需时间为1.085us,则39.0625us需要计数约36次
设置定时器为8位重装模式(每逢计数到256溢出后重新设置为初值),则定时器初值应该设置为
256-36=220实现小车变速
这样一来,定时器每一次触发中断,就说明时间走完256份周期中的一份。
设置一个计数标志位count,每一次中断count+1。
当count达到阈值X(阈值X/256=占空比)时启动小车电机,当count达到255时关闭小车电机并置0,由此实现变速
结果
阈值X的设定应该在0~170之间较为合理,阈值过高则会导致小车电机输出时间过短,扭矩不够
红外循迹模块
红外线在不同颜色的物体表面具有不同的反射性质,照射到黑线上时,会被黑线吸收,从而导致探测器接受红外光较弱;当红外线照射到白色地面上时,会被反射回来,探测器接受红外光较强
RPR220红外探照头以及LM324电压电路如下

智能小车一上电RPR220内部红外光发射,经由物体反射回光电三极管。当所接受到的红外光越强(即未接触黑线)则IN1与IN2两处电流越大。如图3所示,IN1与IN2将会接入LM324电压比较模块里与T1和T2处进行电压比较。如果T1>IN1则P3.2输出1,T2>IN2,则P3.3输出1;反之则都输出0。也就是说T1和T2的电压强度将会成为衡量是否接触黑线的标准,二者的电压强度可通过电位器RW3和RW4进行调节,调节到合适的强度使得小车可以准确识别黑线。
超声波避障
HC-SR04超声波测距模块是一种基于超声波反射原理的测距传感器,它由一个超声波发射器、一个超声波接收器和一个控制电路组成。

HC-SR04工作原理:当向TRIG引脚输入一个10us以上的高电平信号时,模块会自动发射8个40kHz的方波信号。当发射的超声波遇到障碍物时,会被反射回来,被接收器检测到。接收到反射回来的超声波时,模块会向ECHO引脚输出一个与超声波往返时间成正比的高电平信号。而通过测量ECHO引脚输出的高电平信号的持续时间,就可以根据声速计算出超声波从发射到返回的时间,进而得到距离障碍物的距离
红外遥控
NEC协议是一种常用的红外遥控通信协议,它采用脉冲位置调制(PPM),利用脉冲之间的时间间隔来区分“0”和“1”。

NEC协议的数据帧格式如图4所示,包括引导码、用户码、用户反码、数据码和数据反码。用户码和用户反码用来校验发送者的身份,数据码和数据反码用来传输按键信息。NEC协议的特点有以下几点:数据帧长度为32位,每个字节从最低位开始发送。引导码由9ms的低电平和4.5ms的高电平组成,用来标志数据帧的开始。逻辑“0”由560us的低电平和560us的高电平组成,逻辑“1”由560us的低电平和1680us的高电平组成。结束码由560us的低电平组成,用来标志数据帧的结束,因此在程序设计中可通过信号时间长短来解析数据帧。
外部中断0(INT0)被配置为下降沿触发模式,当HS0038接受到红外信号时会产生一个下降沿信号,从而触发外部中断0。
定时器0则设置为8位重装模式,初始值为0,也就是每256*1.085us=277.76us中断一次,并使IRtime++
使用外部中断(INT0)来捕获每一次红外信号下降沿、使用定时器0来记录每两次外部中断(INT0)之间的时间间隔IRtime、因此每一次外部中断(INT0)都可以通过访问IRtime来获取上一个红外信号方波持续时间(获取完数据后需给IRtime置0,保证下一次计数的正确性)