张辉,樊亚妮
(广东第二师范学院 物理与信息工程系,广东广州 510303)
在我国历年的全国大学生电子设计竞赛中,智能小车控制类题目高频次出现。2001年第五届的C题——自动往返电动小汽车,2003年第六届的E题——简易智能电动车,2011年第十届的C题——智能小车,2017年第十三届的L题——自动泊车系统,都出现了玩具智能电动小车[1]。这些命题一类是控制一辆智能小车实现自动循迹避障往返,或自动倒车入库,或自动吹灭蜡烛。另一类题目要求两辆智能小车相互追逐,交替领先,兼顾循迹避障,这种题目难度颇大。
第二类题目要求甲、乙两辆小车在指定区域同时同向一前一后行进,并在规定区域实现超车。分析该要求,智能小车必须具备两种功能:一是智能循迹避障拐弯功能,使得小车在指定跑道行驶,不偏离轨道;二是在规定的超车道实现甲乙车位置互换,并且不得发生碰撞。全程不得人工干预,不得遥控,设计难度颇大。本文提出一种基于STC12C5A60S2微控制器的可行方案。
选用单片机STC12C5A60S2作为系统核心控制器;光电传感器ST188用于探测路面黑白线并通过反射红外线的变化判断是黑线还是白线;L298N控制电动机左右轮的转向;测距传感器E18-D80NK-N用于判断两车的相对位置,从而决定是否需要超车及交替领跑。
单片机是一款16位的Flash单片机,有非常好的易用性,兼容8051单片机,具有LQFP、PDIP、PLCC、QFN等多种封装结构。图1所示为PLCC架构的外部引脚图。通用输入输出I/O口复位后为准双向口/弱上拉,与普通8051传统I/O口兼容,可设置成四种模式:准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏,每个I/O口驱动能力均可达到20mA[2]。其内部60KB的FLASH程序存储器具有足够大的空间存放用户编写的程序,相比于传统的89系列,多了一个可自动重装载的定时计数器,多了一个全双工异步串行口UART,集成了3通道的PWM,集成了硬件看门狗,这些新增加的资源都为后面的设计提供了很好的硬件功能支持[3]。由于需要对小车的电动机进行PWM调速控制,这款单片机集成有PWM功能,可以省却外加一块PWM芯片,节省了成本和空间,降低了连线复杂度。系统采用大容量的12V/6800mAh锂电池给电动机供电,另外通过电源电路转换成5V给单片机供电。
2.2.1 循迹传感器
循迹采用ST188传感器来探测黑白线,其工作原理如图2所示。当没有物体反射红外线,引脚1和2之间截止,没有电流流过,4引脚输出高电平,也就是电源电压,LM324同相输入端为高电平。当有物体反射红外线时,引脚1和2之间导通有电流流过,引脚3和4之间的三极管CE引脚导通,相当于4引脚接地为低电平,LM324同相输入端为低电平。这样就能检测出地面有无反射物体了。鉴于引脚3和4之间有较大的死区电压,需要通过调节R3的阻值改变LM324的电压比较值,增加ST188的测量灵敏度。为保证ST188的发射管静态电流为典型值20mA,取典型发射二极管导通压降值为1.25V,则在5V供电电压下,与发射管串联的电阻阻值为(5~1.25)V/20mA=187.5Ω,取标称值 200Ω。
图2 一路ST188光电传感器模块原理图
五路ST188的光电传感器放置在小车的底盘,位置如图3所示。建议三角形排布,把一路传感器放置于小车的最前方,便于提前获取道路信息,及时做出姿态调整。另外的四路分别位于小车的两侧,成三角形形状。五个传感器获取的数据构成一个字节的高5位,经过施密特触发器放大后滤波,反相送入STC12C5A60S2的P0口。
图3 传感器模块安装位置示意图
2.2.2 测距传感器
E18-D80NK作为小车的测距传感器,本身具有发射和接收功能,并且只需要接三根线,接线简单,价格低廉,安装方便。其发射的红外线经调制器调制后发出;接收到的红外光通过放大器放大后,解调输出,可有效避免可见光的干扰。E18-D80NK测距传感器最远能检测到80cm的距离。由于两辆小车相互追逐距离不会相隔太远,适用于该传感器的检测范围。另外可以调节传感器尾部的电位器阻值,以校准精度。实际中,可以利用该传感器所测距离精确控制两辆小车保持车距在跑道上向前行驶,到了规定的超车道再执行超车动作。
红外通信发射电路由晶振,反相器,电容,电阻构成的455KHz的方波信号发生电路,经脉冲分频器74HC92六分频为75.83KHz的脉冲信号,再经过脉冲分频器74LS92,六分频成为75.83KHz的脉冲信号,再经过D触发器构成的2分频电路变成38KHz的防波信号。该信号与从单片机TX端输出的串行数据一起送入与非门74HC00,从而控制复合三极管的开通与断开,最终控制了红外发射管的发射信息,以达到用TX串行数据信号直接调制载波,进行红外数据传输的目的。这部分电路如图4所示。红外接收电路由HS0038A来完成,该模块有三个端口,2号引脚接电源正Vcc,1号引脚接地,3号为数据接收端,通过10 kΩ电阻接上拉电源。如图5所示。
图4 红外通信发射电路
图5 红外通信接收电路
施密特触发器74HC1和L298构成电动机控制模块,用来调整小车的转向,加速,减速等姿态控制.如图6所示。L298是一种两相和四相电机的专用驱动器,内部有两个全双桥的H型驱动电路,不仅可以接受标准TTL信号,而且可以驱动46V、2A以下的电动机[4]。使用施密特触发器74HC14是为了节省两个输入输出端口,用使能端ENA和ENB来控制电机的启停,也可以输入PWM波控制电机的转速[5]。L298的逻辑功能如表1所示。
图6 电机驱动模块示意
表1 L298的逻辑功能表
E18-D80NK-N是一款数字光电传感器,属于是NPN型光电开关[6]。当检测到目标物体时,低电平输出,正常状态是高电平输出。可外加一个1KΩ的上拉电阻连接到单片机的IO口上。具有较远的探测距离,受可见光干扰小等特点。利用该传感器,能精确控制两小车的距离,使得在非超车段两车一前一后正常行驶,超车段后车追赶上前车,交替领跑。
单片机P2口的高四位接电动机驱动芯片L298输入端和使能端,P0口的高五位接五个循迹模块。红外通信模块使用P1.0,P1.1和P3.1口。两个电机由单片机的P2口高四位控制,其中P2.5为使能端ENA,P2.7为使能端ENB,均为低电平有效。设置电动机控制代码如表2所示,其中的二进制代码只需关心高四位数值即可。
表2 电机控制代码
当小车行驶在黑线上,传感器模块分压后获得高电平,通过施密特反相触发器送入CD4069反相器后得到高电平;反之,行驶在白线上获得的信号为低电平。资源配置单片机P0口的高五位采集循迹传感器信号,即P0.7~P0.3,循迹控制代码如表3所示。
表3 循迹控制代码
系统程序中主要是由三个判断构成,图7所示流程图对于前后两车都适用。如果两车进入超车段,需要后车超越前车,则前车在超车标志判断后沿着内线减速行驶,后车沿着外线原速行驶,达到超车目的。最后一个判断是前车判断已经被后车超车,恢复原来的速度,以保证在非超车道,两车一前一后相对距离不变行驶。程序设计利用外车道超车,以免两车发生碰撞。程序采用模块化设计法,把相对独立的程序段写成一个模块进行调用。这样易于编写和调试,能够把复杂任务分割成小任务,为设计提供方便。在Keil C软件中编译调试通过后固化到单片机,安装到电路板上。部分程序列举如下:
图7 系统流程图
为了实现灵活转向,小车采用两轮驱动控制方式。电源选择大功率大容量的锂电池,以提供强大的续航能力。各模块电路尽量减少面积,五路循迹传感器安装在小车靠前的部位,单片机控制系统安装在车身中部,电机驱动模块安装在电机附近。
调试时,需要手动给光电传感器一个输入信号,检测输出电平是否正常。给L298各个输入端口加上电平,观察电机的运转情况是否正常。检查小车能否前进、后退、停止和转弯等。各项检查都通过后,加载完整程序。
小车的相互追逐功能是在避障功能基础上新增的一种竞赛类型题目,全面考察选手的各方面技能。选手必须在熟悉循迹避障的基础上,加入测距相互追逐功能,对选手是一个很大的挑战。提出的设计思路经验证确实可行,但在精确性和实时性上有待提高,需要不断优化硬件电路和程序,以达到更好的效果。