12.1 智能车的调试
12.1.1 车速闭环调试
为了获得快速的加减速特性,小车的速度控制采用BangBang调节方法。调试方法:程序给定小车某速度在路面上行驶,将小车在路面上由静止加速 到稳定状态的速度值记录到S12的RAM中,然后通过串口将数据输入到PC上,然后用Matlab绘图,观察曲线的特性。经实验比较,通过BangBang闭环控制后,小车的加减速特性有了很大的提高,反应更加的灵敏,从而为小车赢得了时间。
12.1.2 舵机转角调试
该实验的目的是使小车对于不同的路线能给出合适的转角,比如在直道小车要避免振荡,弯道能平滑地跟踪黑线等等。调试方法:小车舵机的转角是由公式给出的,但实际转角往往和理论值略有差别。我们需要通过实验予以校正。调试方法可以借鉴第一届上海交通大学技术报告,即在小车前轮上固定一个激光发射电筒,通过“放大”后,依据三角函数关系,计算转角与PWM脉冲的关系。
12.1.3 机械性能调试
经过几个月的制作,可以发现机械性能对小车整体的稳定性有很大的影响。小车的重心与摄像头支架选用的材料、安装位置,电路板的安装、电池的安装有直接的关系。小车的重心不应过高,不应太靠前,最佳位置应该在电池附近。重 心过高过前,会导致小车高速运行时,后轮驱动力不足,舵机转向吃力,甚至左右“抬脚”或者“翻车”。调试方法:用物理学的里面的“悬线法”,然后观察小车的稳定效果,若不满足要求,则不要不断地修正。
12.1.4 赛道的制作
赛道的制作也很关键,主要把握两个原则:“规范性”和“完整性”。制作的赛道必须包括本次大赛要求的所有特征,直道,弯道(包括不同曲率半径,不同角度的),S道,坡道等。赛道制作由易到难进行,和算法的逐步优化同步,这样符合人们认识事物的规律。图12.1,图12.2是我们制作的部分赛道。

12.2 人机交互模块
12.2.1 LCD显示模块与4*4矩阵键盘模块
设计LCD显示模块与4*4矩阵键盘模块,是为了方便调试过程中进行参数的设定和模式的选择。
(1)键盘模块
键盘示意图如图12.3所示:

键盘为系统的输入设备,通过H口与S12相连,一共设置了4个功能键,其中duty为电机最高占空比设置,center为当前检测的黑线斜率,Num为起跑线和“十”字线个数,C_duty为舵机中心占空比设置。
(2)LCD显示模块
LCD作为系统的显示模块,是人机交互界面的主要组成部分,考虑到小车的整车重量,本设计最终选用了一款较为轻质的LCD,型号为:DM1260B,如图12.4 所示。该液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形(内含英文字母和数字),不带中文字库。

本模块电路如图12.5所示:

DM1602采用16脚接口,其中VSS接地,VDD接5V正电源,VO为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个20K的电位器调整对比度。RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 D0~D7为8位双向数据线。LCD的驱动程序涉及到以下函数,详细代码请参考附录。
//函数声明
voiddelay_us(unsignedcharus); //延时微秒
voiddelay_ms(unsignedlongms); //延时毫秒
voidchk_busy(void); //忙检测状态
voidWrite_command(unsignedcharcommand);
voidWrite_data(unsignedchardata);
voidInit_lcd(void); //LCD初始化
voidInit_PORTAB(void); //初始化AB口
void Write_String(unsigned char *p,unsigned char address,unsigned chardata);
12.2.2 串口与PC机的通讯
小车在赛道上运动的时候,有很多数据是实时的,这些数据是调试的基础, 如果通过LCD来显示这些数据是不太现实的。由于开发板已有串行通信接口,已经通过MAX232电平转换,因此可以直接和计算机通讯。首先把得到的数据以数组的形式记录到S12的RAM中,然后通过串口将数据输入到PC上,这里使用了一个常用的软件“串口调试助手”(如图12.6所示)来接收来自S12传过来的数据。通过串口调试,极大的方便了调试的过程,特别对速度闭环调试有很大的帮助。

串口与PC机通讯,本设计编写了以下函数,具体代码请参考附录。
//函数申明
voidInit_SCI(void) //初始化串口
voidInit_SCI(void) //实现S12向PC发送字符串,数字或字母
voidSend_SCI(unsignedchar*Dpoint,unsignedintcounter)
//入口参数:一个是数组指针,一个是数组的大小
//功能描述:发送一个数组并显示,用于显示数值


