自动控制小车软硬件的实现*
2014-07-26隋美丽杨立平吕江毅刘敏杰
隋美丽,杨立平,吕江毅,刘敏杰
(北京电子科技职业学院 汽车工程学院,北京100176)
在现代生活中,自动控制在生活、科研、军事等很多领域发挥了重要的作用。随着嵌入式技术和通信技术的迅猛发展,自动控制系统的功能和稳定性都得到了很大的提高。自动控制小车的研究涉及单片机与PC机通信接口问题、小车遥控器控制、直流电机的控制方式等[1][2],本文只是对在自动控制的情况下,线控小车控制系统的软硬件实现进行研究,实现小车前进、后退、转向和加减速等功能。
1 硬件设计
以STC12C5201AD单片机为核心,编写小车驱动程序,使其能接受线控器的控制功能,控制小车前进、后退、左转、右转、加速、减速、停止,并且在没有控制信号输出时,小车能保持静止状态[3][4]。P1.6、P3.5和P2.1、P3.7控制小车两个后轮,舵机控制输出口为P2.5,小车采用RS-485总线协议来接收线控器命令,并与下载功能一起使用P3.0、P3.1口。图1为小车硬件电路图。
2 程序流程
小车控制程序接收端串口采用RS-485模式通信,通信参数规定为:波特率规定为19200,数据位为8位,停止位为1位,无奇偶校验,因此,线控器(发送端)也必须与接收端保持一致。线控器STC12C5202AD主控芯片也必须通过RS-485总线向小车发送命令来控制小车启停、转向、尾灯闪烁等。线控器与小车的通信控制协议(十六进制)为:
一个完整的控制命令包含14个字节控制信息,而这些信息中,对于某一小车而言,只有小车左轮转速(或小车右轮转速)、正反转/灯闪、舵机转角三个字节信息有效信息,因此,可以对数据包进行精简。但是,要想获得一个完整的控制命令包,可以选择接收30个字节数据(其中一定包含有一个完整的控制命令包),当接收到30个字节命令数据后,对数据进行提取,找出其中的关键性控制命令字。由于每次取30个字节,会丢失一些数据,但由于系统的主频较高,每秒接收大量的控制数据并处理,能够达到对小车的实时控制。
图1 小车电路图
系统主要依靠软件来完成控制命令的接收,数据的分离与提取、控制命令的执行。控制命令由串口负责接收,将系统晶振定为22.1184MHz,用定时器T1作为串口波特率发生器,为了提高传输的效率,我们把波特率定为119200bps,而不是常用的9600bps低速传输。如果小车端在接收串口命令时采用查询方式,经常会丢失数据,导致控制实时性较差,因此,本系统采用中断方式,一旦有控制命令传来,系统会立刻响应。对于舵机操作,由于要精确输出周期为20ms的PWM,其高电平范围在0.5ms~2.5ms之间,也必须采用精确定时来完成,在这里我们选用定时器中断方式来完成,否则会产生舵机控制抖动情况。而对于直流电机的速度控制,则采用了CPU等待延时方式,不使用定时器资源。串口控制命令接收流程如图2所示,小车驱动程序流程如图3所示。
图2 串口控制命令接收流程图
图3 小车驱动程序流程图
3 软件设计
小车驱动程序包含延时子程序、串口初始化子程序、串口接收子程序(中断方式)、小车后轮正反转子程序、定时器初始化子程序、舵机控制子程序和主函数等[5]。其实现代码如下所示:
4 结束语
在小车驱动的软件设计中,采用了模块化的设计思想,各模块间相互独立,实现功能时又能做到分工合作,经过实际测试,达到了预期设计指标,满足了线控要求,并且稳定性和抗干扰能力强,精度高,误差低,适用于车模竞赛、儿童玩具等各种应用场合,具有一定的推广应用价值。
[1] 王建飞.基于单片机控制的自动往返小汽车的新设计[J].现代与电子技术,2006,234(19):127-129.
[2] 郭立芝.一种自动往返小车设计与制作[J].河南机电高等专科学校学报,2010,(3):10-13.
[3] 王强.遥控小车控制系统设计[D].青岛理工大学,2011.
[4] 王艳.基于51单片机的红外遥控小车设计和制作[J].北京:电子制作,2010,(06).
[5] 张洪润,孙悦,张亚凡.单片机原理及应用[M].北京:清华大学出版社,2010.