智能车辆是一个集环境感知、规划决策、自动驾驶等多种功能于一体的综合控制系统。“飞思卡尔”杯全国大学生智能汽车竞赛以迅猛发展的汽车电子为背景,是涵盖了控制、模式识别、传感技术、电子、电气、计算机、机械以及车辆工程等多个学科交叉的科技创意性比赛。本文以此为背景,基于MC9S12xS128单片机设计了一种智能车系统
1 系统的总体设计方案
1.1 系统的总体构架
系统的硬件框架如图1所示。系统以飞思卡尔公司的16位单片机MC9S12XS128为控制核心,由电源管理模块、赛道信息采集模块、车速检测模块、电机驱动模块、舵机控制模块和调试模块组成。单片机通过电磁传感器采集道路信息,根据算法分析得出此时的智能车与赛道的偏离状况,然后再据此采用一定的控制算法控制智能车的舵机转向和直流电机的速度,从而实现智能车对路径的自动识别和寻迹。
图1 系统地硬件框架图
1.2 MC9S12XS128芯片介绍
MC9S12XS128单片机的特点有:采用增强型的16位S12XCPUV2,片内总线时钟可达40MHz;具有128 k的Flash,8 k的RAM以及8 k的EEPROM存储器,具有2个SCI,1个SPI,1个8通道定时器,2个8通道可调转换精度的A/D口,1个8通道的PWM模块,91个离散数字 I/O口,1个MSCAN模块。该芯片具有速度快、功能强、成本低、功耗低等特点,能够实现控制电机转速、舵机响应、速度采集、路径识别等功能。
2 系统的硬件部分设计
2.1 电源管理模块
电源管理模块的功能是对电池进行电压调节,为各个模块正常工作提供可靠的工作电压。设计中除了考虑电压范围和电流容量外,还要在电源转化效率、降低噪音、防止干扰等方面进行优化。本系统小车全部硬件电路的电源采用7.2 V、2000mAh镍镉蓄电池提供。由于电路中的不同电路模块所需要的工作电压和电流容量各不相同,因此将充电电池电压转换成3.3 V、5 V和7.2 V三个档,各模块和电源的关系图如图2所示。其中采用LM2596—5.0作为5 V的稳压芯片,采用LM2596—3.3作为3.3V的稳压芯片,电路图如图3所示。
图2 电源系统结构图
图3 电源模块的电路图
2.2 赛道信息采集模块
赛路信息采集模块是系统信息输入的重要来源,相当于智能小车的“眼睛”,主要负责将小车当前或前面位置的赛道信息输出给主控芯片处理;本系统使用4个电磁传感器采集赛道信息。
2.2.1 元件选择
电磁传感器检测赛道信息的原理是通过电感和电容组成的LC谐振电路检测赛道的信号,然后将检测到的信号通过运算放大器LM358进行放大,由于小车需要识别的频率为20 kHz,所以在谐振电路中,选取10mH的细绕组电感、6.8 nF的低频瓷介电容。
2.2.2 电磁传感器的排列方式
电磁传感器在小车前方一字形均匀布局简单排布。这种信息检测方法相对连贯、准确,使控制程序算法简单,小车运行稳定。传感器电路图如图4所示。
图4 传感器电路图
2.2.3 起跑识别装置
电磁组起跑线安装的是永久磁铁,永久磁铁的数据:直径:7.5-15mm;高度:1-3mm;表面磁场强度:3000-5000Gs。磁场检测电路尚不能够直接用于检测起跑线的永磁铁,所以选择干簧管检测起跑线。当干簧管置于磁场中时,两极吸合,干簧管导通。如果在其两端加上限流电阻和电极,就可以实现脉冲输出到单片机进行中断控制,在程序中控制小车的延时、起跑和停止。干簧管电路如图5所示。
图5 干簧管电路图
2.3 车速检测模块
本系统选择日本OMRON公司生产的E6A2CW3C增量式光电编码器测速。光电式旋转编码器由光栅盘和光电检测装置组成。光栅盘与电动机同轴,电动机旋转时,通过计算每秒光电编码器输出脉冲的个数就能反映当前电动机的转速。该编码器提供两相输出,体积小,质量轻,线数多,能够满足需要。另外,专门选用了齿数较少的传动齿轮,有利于提高编码器与电机的转速比,使相同速度下采到的脉冲数更多,有效提高了速度反馈的精度。
2.4 电机驱动模块
本系统电机驱动选择英飞凌公司的BTS7970B驱动芯片,由单片机的PWM模块发出不同占空比的PWM信号来控制行进电机的转速。 BTS7970B芯片通过PWM信号开启关闭通道,输出不同电压控制行进电机。由于BTS7970B是半桥芯片,驱动电路使用两片BS7970组成一个全桥用以驱动电机,驱动电路原理图如图6所示。
图6 电机驱动电路原理图
2.5 舵机控制模块
本系统舵机控制模块的控制对象是比赛组委会提供的S-D5型数码舵机,该舵机可以输出力矩驱动智能车转向。图7为舵机硬件电路,其中控制信号线与MC9S12XS128的PWM5相连。
图7 舵机控制电路图
2.6 调试模块
使用串行口通信是计算机与人对话最传统、最基本的方法,异步通信(UART)接口也称为通用异步接收器/发送器。电路图如图8所示。
图8 无线接线电路图
3.1 软件流程设计
控制系统的软件设计基于Metrowerks Code Warrior5.1编程环境,使用C语言实现。图9为控制系统软件流程图。
图9 控制系统软件流程图
3.2 赛道识别算法
智能车工作时首先通过4个“一”字形排列的电磁传感器阵列检测轨迹黑线的当前位置,然后根据检测结果判断智能车与轨迹偏离的情况。本系统采用模拟检测法。具体算法为:首先,将AD值做归一化处理,即根据各个传感器接收赛道的最高电压和最低电压,计算出各个传感器的相对值,最后来计算赛道中心位置。信号归一化的方法如下:
求取电压值最大的传感器位置,然后和它周围两个传感器采样值进行加权计算即求得小车的偏差。这种算法空间分辨率可以达到2mm,而且受电流变化的影响比较少,适合小车稳定的检测要求。
3.3 车体控制算法
车体控制算法是整个系统的核心,它直接关系到小车的表现。在经过对传感器信息的处理后,利用电磁传感器采集的路径形状信息来控制转向舵机和行进电机的输出量,其中转向舵机采用PD控制算法,驱动电机的控制采用PID控制算法。车速采用闭环控制,由PID控制器调节,其输入量为目标速度值与当前速度值的差值,目标速度根据当前的路况信息以及路况更迭信息确定,PID调节器的输出即为与行进电机转速成比例的数值,经处理后,得到与所需速度相对应的PWM脉宽信号。根据赛道的不同路况信息,系统采用不同的速度给定值,并且在同一路况下,根据小车水平偏差量和水平偏差速度对速度给定值进行修正,保证其平稳而快速地行驶。
4 结束语
本文介绍了应用Freescale16位单片机MC9S12XS128实现自动巡线智能车的控制系统设计。经多次调试运行,该智能车在正确寻迹的前提下,弯道速度可以达到1.5m/s,而在直道上,智能车的速度可以达到2m/s,表明系统设计可靠,智能车运行良好。