第四届全国大学生智能汽车邀请赛技术报告
}
5.3.3 ECT模块
S12得ECT具有8个输入(IC)/输出(OC)比较通道,可以通过设置TIOS寄存器选择输入或输出比较功能。ECT既可以作为一个时基定时产生中断,也可以用来产生控制信号。
模数递减计数器(MDC)是S12微控制器ECT特有,它是一个16位计数器,其外围配备了常数寄存器MCCNT和控制寄存器MCCTL,分别为MDC提供定时常数和时钟信号。通过寄存器TCTL4设定各个引脚的各种动作,初始化设置过程如下所示:
void ECT_Init(void) {
TCTL3=0x80; PACTL=0x40; PACNT=0;
RTICTL=0x1f; //8x2^12 =1ms CRGINT=0x80; //enable RTI Interrupt }
通过ECT模块,我们实现了对脉冲进行计数,检测智能车的速度,对速度进行闭环控制。
5.3.4 AD转换模块
AD转换模块由模拟量前端的8选1多路转换开关,采样缓冲器及放大器,逐次逼近式模拟量转换、控制部分及转换结果存储部分等组成。
AD转换所需要的时间周期是固定不变的,但采样时间和时钟频率可以通过寄存器ATDxCTL4(x为0或1)在一定范围内选择,其公式为:
ATDClock=BusClock*0.5/(PRS+1)
从公式和总线频率的取值范围可以得出A/D时钟频率范围满足:
500kHz≦ATDClock≦2MHz 通过寄存器ATDxCTL2(x为0或1)控制ATDx的启动、状态标志以及上电模式;寄存器ATDxCTL3(x为0或1)用于控制结果寄存器的影射,设置转换长度;寄存器ATDxCTL5(x为0或1)用于选择转换方式,选择转换
20
第四届全国大学生智能汽车邀请赛技术报告
通道,设置单/多通道转换和单次/连续转换模式以及选择对齐方式,写寄存器ATDxCTL5将会启动一次新的转换,如果写该寄存器时ATD正在进行转换,则转换操作将被中止。AD转换模块的初始化程序如下所示:
ATD0CTL1=0x00; //7:1-外部触发,65:00-8位精度,4:放电,3210:ch ATD0CTL2=0x40; //禁止外部触发, 中断禁止
ATD0CTL3=0xf0; //右对齐无符号,每次转换8个序列,NoFIFO,Freeze模式下继续转 ATD0CTL4=0x02; //采样时间为4个AD时钟周期,ATDClock=[BusClock*0.5]/[PRS+1] ATD0CTL5=0x30; //6:0特殊通道禁止,5:1连续转换 ,4:1多通道轮流采样 ATD0DIEN=0x00; //禁止数字输入
AD转换结果存放在寄存器ATD0DRxL和ATD1DRxL,通过这些寄存器将结果传送到数组,用来检测道路信息。
5.4 路径识别与算法
路径识别为控制算法的核心内容,通过模型车前面的14个传感器检测路径,为了得到可靠的信号识别,我们对其进行了重复的实验,从实验我们得出,传感器检测到黑线时输出的平均电压为1V,检测到白线时输出的平均电压为0.3V。
系统通过8位A/D转换器采集光电传感器的信号,为了保证检测信号的稳定性,系统每100us对光电传感器扫描1次,连续扫描10次后,再对舵机进行控制。并把转换后的值暂时存储在内存中。采集到信号后,单片机要做出处理,我们采用了黑线中心检测算法。
5.4.1起跑线检测
赛道有一个长为1m的出发区, 如图5.4.1所示。
图5.4.1 起跑线示意图
21
第四届全国大学生智能汽车邀请赛技术报告
本次比赛中的一个规则:在模型车跑完了以后,要能在3米范围内停下来,这标志对起跑线的判断显得很重要,刚开始我们把十字交叉也当作起跑线来算,如果跑道出现十字交叉必然要经历两次。这样的话如果赛道有N个十字交叉,则智能车跑完一圈有多个传感器检测到黑线的次数为2N+1。不过比赛要求我们在比赛赛道出来之后,不能改变智能车,而我们事先无法得知比赛赛道,这样我们就无法得知有几个十字交叉,N的值就无法确定,要是采用这种方法只能加个拨码盘。经过反复实验,最终我们采用了只检测起跑线的方法,其思路为:当14个传感器任何相邻的两个传感器出现黑白跳变的次数大于4次,并且是如表5.4.5所表示的情况中的一种就表示经过一次起跑线。 表5.4.5 传感器经过起跑线可能出现的情况 1 2 3 4 5 6 7 8 9 10 11 1 x 0 0 1 0 0 x x 1 x 1 x 0 0 1 1 0 0 x 1 x 1 x x 0 0 1 0 0 x x 1 x 1 x 0 0 1 1 0 0 x 1 x 1 x x 0 0 1 0 0 x x x x 1 x 0 0 1 1 0 0 x x x 1 x x 0 0 1 0 0 x x x x x 1 0 0 1 1 0 0 x x x 1 x x 0 0 1 0 0 说明: 12 x x x x 1 x x x x 13 x x x x x 1 1 1 1 14 1 1 1 x x x x x x 第一行的114表示14个传感器,且是从左到右来表示的。
1表示传感器检测到黑线,0表示传感器没检测到黑线,x表示即可以取0也可以取1。
由于单片机的执行速度很快,本设计中,我们还用了一个变量start_count来统计经过起跑线时的连续检测到的次数,当start_count=10时,说明已经连续检测到起跑线10次,这时说明小车通过起跑线一次。
5.5 系统控制
系统的控制分为小车转向角控制和速度控制两部分。其控制部分的程序流程图如图5.5.1所示。
22
第四届全国大学生智能汽车邀请赛技术报告
5.5.1 小车转向角控制
小车转向角的控制通过输入PWM信号进行开环控制。根据检测的不同路径,判断出小车所在位置,按不同得区间给出不同得舵机PWM控制信号,小车转过相应得角度。考虑到实际舵机的转向角与所给PWM信号得占空比基本成线性关系,所以舵机控制方案采用查表法。在程序中预先创建控制表,路径识别单元检测当前的路况,单片机通过查表可知当前的赛道,然后给出相应的PWM信号控制舵机转向。
5.5.2 小车速度控制
本设计中采用了一种参数自整定的PID模糊控制算法对小车速度进行闭环控制。小车在前进过程中,根据不同的路况给出不同的速度给定值,通过模糊控制器进行速度调节,以缩短小车的速度控制响应时问,减小稳态误差。系统将小车的角度变化率反馈给模糊控制器,通过修正规则进行模糊参数的自整定。其程序流程图如图5.5.2所示。
23
第四届全国大学生智能汽车邀请赛技术报告
图5.5.2 速度控制流程图
5.6 系统控制策略
5.6.1 提前转向
要克服滞后,需要提前判断弯道,早打方向。一种办法是根据传感器的数据计算出的几何参数来判断转弯半径,但由于受车的入弯角度的分辨率及传感器
24