智能小车的设计与制作
2013-09-03张凯杰
张凯杰
【摘 要】智能小车以freescale半导体公司生产的16位HCS12单片机为核心控制器,采用红外式光电管对比赛赛道进行扫描和检测,提取出赛道上黑线位置的信息。同时,智能小车通过测速装置获取当前速度,并利用PID反馈对舵机进行调节,最终使小车达到可以自动寻迹的效果,提高小车的行驶速度和稳定性。
【关 键 词】智能车,HCS12单片机, PID控制
【中图分类号】F407.471【文献标识码】A【文章编号】1672-5158(2013)07-0205-02
一 前言
智能运输系统作为未来交通发展趋势之一,为解决城市交通拥挤和堵塞问题提供了有效途径。从八十年代以来,美国、日本、欧洲等发达国家和地区竞相投入巨额资金和大量人力,开始大规模的进行交通运输智能化的研究,取得了许多重要成果。而作为智能车——路系统(Intelligent Vehicle—Highway Systems,简称IVHS)的重要一部份,智能车在世界各国的研究也随着计算机技术、网络技术、通讯技术的飞速发展而不断深入。
本文以“飞思卡尔”杯全国大学生智能汽车竞赛为背景,对智能车控制系统进行了深入的讨论,以作者参与制作的智能模型车为例简要介绍了智能模型车的设计制作全过程,主要涉及到机械电子、传感器技术、驱动控制技术、自动控制、人工智能等多个领域的研究及技术融合。
本设计通过采用HCS12单片机为控制核心,实现对小车的智能控制。该控制系统不仅在现代汽车产业中有很大使用价值,在智能机器人领域亦有很大用途,尤其是当今时代机器人研究方面具有很好的发展前景,故本设计与实际联系紧密,具有重要的现实意义。
二 总体设计分析
(1) 设计要求:
在本次竞赛中,要求所设计的小车具有自动寻迹的功能,能在指跑道上高速,稳定地运行。跑道为黑白两色。其背景色为白色,跑道中央有一条黑线作为小车行进的依据。很明显,我们要设计的小车是要能沿黑线的正常行驶,并在此基础上,尽量提高小车行驶速度。
(2)传感器部分:在传感器方案的选择中, 智能小车采用光电传感器来采集路面信息。使用红外传感器最大的优点就是结构简明,实现方便,成本低廉,免去了繁复的图像处理工作,反应灵敏,响应时间低,便于近距离路面情况的检测。但红外传感器的缺点是,它所获取的信息是不完全的,只能对路面情况作简单的黑白判别,检测距离有限,而且容易受到诸多扰动的影响,抗干扰能力较差,背景光源,器件之间的差异,传感器高度位置的差异等都将对其造成干扰。在本次比赛中,赛道只有黑白两种颜色,小车只要能区分黑白两色就可以。采集到准确的路面信息。经过综合考虑,在本项目中采用红外光电传感器作为信息采集元件。
(3) 控制算法部分:
在小车的运行中,主要有方向和速度的控制,即舵机和电机的控制,这两个控制是系统软件的核心操作,对小车的性能有着决定性的作用。对舵机的控制,要达到的目的就是:在任何情况下,总能给舵机一个合适的偏移量,保证小车能始终连贯地沿黑线以最少距离行驶。小车在比赛中采用了PID控制技术。PID控制在比例控制的基础上加入了积分和微分控制,可以抑制振荡,加快收敛速度,调节适当的参数可以有效地解决方案一的不足。不过,P,I,D三个参数的设定较难,需要不断进行调试,凭经验来设定,因此其适应性较差。在我们的选择中,根据比赛规则,赛道模型与相关参数已给定,即小车运行的环境基本上已经确定,可通过不断调试来获得最优的参数。因此我们选用的是PID算法来对舵机进行控制。对驱动电机的控制(即速度控制),要达到的目的就是在行驶过程中,小车要有最有效的加速和减速机制。高效的加速算法使小车能在直道上高速行驶,而快速减速则保证了小车运行的稳定,流畅。为了精确控制速度,时时对速度进行监控,我们还引入了闭环控制的思想,在硬件设计,增加了速度传感器实时采集速度信息。
(4) 车模外观(见图1)
三 硬件设计
(1)电源管理电路:
系统由6节1.2V镍镉充电电池组成电池组。稳定的电源是整个系统的关键,所以在电源设计的时候必须考虑稳压芯片的效率以及各个模块之间的影响,采取必要的隔离措施处理互相干扰。本系统采用了2片5V稳压芯片L M2575分别给系统芯片和红外探测器供电。一片6 V稳压芯片L M1117给舵机供电,7.2 V电源可以直接给电机供电。
(2)红外探测电路:
10对反射式红外传感器探测到的信息直接输入到MC9 S12D G128B的10个A/D 通道。该红外测试电路的有效测试距离可达20cm。小车在运动中不断的扫描跑道,当发射管D1扫描到黑线的时候 ,发出的信号几乎全被黑线吸收,几乎没有反射信号,接收管 D2接收不到信号,此时D2不导通 ,输出端输出高电平发光管D3不发光;当发射管 D1 扫描到白色跑道的时候,发出的信号几乎全被反射回来,接收管 D2接收到发射管D1发射出经反射物反射的信号,输出端OUT(L M576 的第8脚) 输出低电平使发光管D3发光 。通过发光二极管的熄灭可以确定小车是否在跑道上,为调试带来很大的方便 。本电路的最大持点是红外线发射部分不设专门的信号发生电路,而是直接从接收部分的检测电路LM576的5 脚引入信号,这样既简化了线路和调试工作 ,又防止了周围环境变化和元件参数变化对收发频率造成的差异 ,实现了红外线发射与接收工作频率的同步自动跟踪,使电路的稳定性和抗干扰能力大大加强 。 输出信号通过数字滤波后进入MCU中的14路A/D通道采集路况信息。
在实际的测试中,可以在独立的的红外接收管上安装黑色套管可以完全避免相邻发光管的影响 。由于红外探测部分耗电量比较大 ,可以利用红外接收管响应速度快的特点,让红外发射管只在检测瞬间发射红外线即可 。 红外发射管工作在周期窄脉冲方式下,大大降低了平均工作电流,从而降低了整个发射电路的电量消耗。
(3)电机驱动电路:(见图2)
电路图我们(见图3)可以看出,它具有两个半桥构成:
由于在实际的比赛过程中,我们已经利用刹车装置进行减速,并不需要通过给电机加反向电压来减速(在调试过程中,曾经试过用这种的方法进行减速,但是弊大于利,有时会由于电机反转,出现倒车现象)因此,可以只使用其半桥,并将两个半桥并联,以增大其驱动能力。
(4)传感器电路:
接收发射部份(见图4)
传感器由两部份构成,一部份为发射部份,一部分为接收部份。发射部份由一个振荡管(J1_1)发出180KHz频率的振荡波后,经三级管(Q1_1NPN)放大,激光管(D1_1)放射。接收部份由一个相匹配180KHz的接收管(J1_2)接收返回的光强,经过电容(C1_1)滤波后直接接入单片机用以判别电压高低。由于接收的波属于较高频段的波,因此电容(C1_1)是必须的,否则的话电磁干扰会非常的严重,指示灯(D1_1)会常亮,实际过程中要不断试电容(C1_1)的大小,选择合适的值以使接收管正常工作。
控制部份:(见图5)
由于采用了数字传感器的防干扰算法,因此必须分时控制传感器的开断,实际中我们使用74LS138作为控制器,由主控模块的3根线来控制传感器的开断。
(5)PCB设计图:
传感器PCB图;(见图6) 主控板PCB图:(见图7)
四 软件设计
(1)开发环境介绍:
本系统使用了 Metrowerks 公司提供的 CodeWarrior for HCS12教学用版本,它是面向以 HC12 或 S12 为 CPU 的单片机嵌入式应用开发的软件包,包括集成开发环境 IDE、处理专家库,全芯片仿真、C 交叉编译器、汇编器、链接器以及 BDM 调试器。
(2)软件结构
软件主要包括:路径识别、方向控制、速度测量、速度控制等四个模块。软件流程可分为以下几部分:初始化、得到 AD 转换数据并转换为角度偏差、根据角度偏差控制舵机、根据角度偏差和当前速度控制电机转速和制动。软件结构框图见图8。
(3)PID控制:
PID控制器是控制系统中技术比较成熟,而且应用最广泛的一种控制器。它的结构简单,参数容易调整,因此在工业的各个领域中都有应用。PID最先出现在模拟控制系统中,传统的模拟PID控制器是通过硬件(电子元件、气动和液压元件)来实现它的功能的。随着计算机的出现,把它移植到计算机控制系统中来,将原来的硬件实现的功能用软件代替,从而形成数字PID控制器,其算法则称为数字PID算法。数字PID控制器具有非常强的灵活性,可以根据试验和经验在线调整参数,因此可以得到更好的控制性能。由于几乎所有的单片机都拥有硬件PWM,因此基于软件PID和硬件PWM技术的直流电机测控技术正向数字化、高可靠性发展,本文所述的舵机控制就是采用该控制方法。数字PID分为位置式控制算法和增量式控制算法。为了降低计算量及得到稳定的结果,舵机控制采用增量式控制算法。其公式如下: △Uk=Kp*[ek-ek-1]+Ki*ek+Kd*[ek-2ek-1+ek-2]
输出增量△Uk只与本次偏差ek、上次偏差ek上上次偏差ek-2有关,因此CPU只要知道每一时刻的ek、ek-1、ek-2的值就能执行PID算式,并输出舵机控制量,从而有效地控制舵机的转向。
由于PID控制器是用软件来实现的,灵活性很大,因此能够根据具体要求相应地改进部分PID控制算法。在电动机控制系统中,控制量的输出值要受到元器件或执行机构性能的约束(如电源电压的限制、放大器饱和等),因此它的变化应在有限的范围内,如果控制量的计算结果超出该范围,那么实际执行的控制量就不再是计算值了,产生的结果与预期的不相符,称为饱和效应。PID控制中的积分环节目的是消除静态误差,提高控制精度。但当电动机的启动或停车时,短时间内系统输出很大的偏差,会使积分积累很大,从而引起强烈的积分饱和效应,这将会造成系统振荡,调节时间延长等不利结果。
在本文所述的智能车中,为了避免出现积分饱和现象,对PID控制器的积分环节做了两个改进:积分分离法和遇限削弱积分法。
积分分离法的思路是:当被控量与给定值的偏差较大时,去掉积分,以避免积分饱和效应的产生;当被控量与给定值比较接近时。重新引入积分,发挥积分的作用,消除静态误差,从而既保证了控制的精度又避免了振荡的产生。
本文所述的具体实现是:人为引入一个量X=24.44,x值的确定大约为智能车的三个光电对管对应反馈值的偏差,即当偏差小于24.44则引入积分环节,当偏差大于等于24.44则去掉积分环节。为此在积分项中乘以一个人为引入的系数B.
其公式如下:
B=1,ek B=0, ek≥X, X=24.44 引入B后,可建立公式: △Uk=Kp*[ek-ek-1]+B*Ki*ek+Kd*[ek-2ek-1+ek-2] 遇限削弱积分法的思路是:一旦控制量仉进入饱和区,便停止进行增大积分项的运算,而只进行使积分减少(即所谓削弱)的运算。具体过程是:在根据PID算式计算Uk前,先判断前一次的控制量Uk-1是否到达极限范围,如果到达极限说明已经进入饱和区,这时再根据偏差的正负,来判断控制量是使系统加大超调还是减小超调,如果是减小超调,则保留积分项,否则取消积分项。遇限削弱法在进入极限范围后,有条件的去继续积分或取消积分,从而避免控制量长时间停留在饱和区。本系统的具体实现是:在积分项中再人为引入一个系数c当判断后需要保留积分项则C=1;否则C=0。那么最终的舵机PID控制算式如下:
△Uk=Kp*[ek-ek-1]+B*C*Ki*ek+Kd*[ek-2ek-1+ek-2]
间接PID驱动电机控制算法简介:
智能车模型的驱动电机是直流电机,同样可以直接用PID控制算法,但是利用PID算法需要有系统的直接反馈值,如舵机算法中的反馈值通过光电传感检测获得,而驱动电机要想直接获得反馈值必须在硬件上设计车速传感器,这必然给硬件选择、硬件设计、PCB板设计、软件实现带来比较大的工作量;同时加上车速传感器之后智能车的重量也会增加,这样会增加驱动电机的负载,耗电速度快;同时智能车过重也会给舵机的转向带来负面影响,因为连接舵机和连杆的硬件是塑料做的东西,而且是两三个塑料卡在一起的,当智能车要转弯时,舵机转动的力是一定的,如果车身太重的话那么舵机转弯的力就会带不动前轮,而使这些力消耗在这几块塑料上,时间长了这些力就会使塑料变形,破坏车的硬件结构,影响车的性能,给车的行驶带来不稳定性和不可靠性。
然而加上车速传感器之后又能给驱动电机带来直接的控制,能比较有效、及时地改变驱动电机的转速,为智能车行驶提供比较好的参考。
本文所述的驱动电机间接PID控制算法的思想是:把舵机的PID控制算法的输出控制量当作驱动电机的控制算法的输入量,经过一定的算法之后,输出量做为驱动电机的输出控制量,从而实现驱动电机的间接PID控制算法。
舵机的输出控制量为Uk的公式为:
Uk=△Uk+Uk-1
其中△Uk玩为舵机输出控制量的增量,Uk-1为舵机前一
次的输出控制量。把Uk作为驱动电机的输入量。设驱动电机的输出控制量为M, 其公式如下:
M=(SV-BRV4)*Uk+BR4+SV, Uk≤0
M=(SV-BlV4)*Uk+Bl4+SV, Uk>0
常量C为当智能车在直线上行驶时驱动电机的控制量,常量BRV4为当智能车在最大右转行驶时驱动电机的控制量。常量BR4为当智能车在最大右转行驶时舵机的理论控制值,常量BlV4为当智能车在最大左转行驶时驱动电机的控制量,常量Bl4为当智能车在最大左转行驶时机的理论控制值。则公式中M的算式为一元一次分段线性方程。
智能车左转的驱动电机控制量是线性减小的,而右转的驱动电机控制量是线性增加的。驱动电机控制量的线性变化优点在于能够使电机控制量的变化平稳,有利于小车在转弯时均匀地增加或减小控制量,从而使小车能够在转弯时保持平稳的速度行驶,不至于出现停顿现象。
参考文献
[1] 卓晴 黄开胜 邵贝贝 等.学做智能车. 北京:北京航空航天出版社,2007年3月第1版
[2] 第四届全国大学生“飞思卡尔”杯智能汽车竞赛秘书处,竞速比赛规则与赛场纪律,2008/12
[3] National Semiconductor,LM2940 Datasheet,1999/06
[4] National Semiconductor,LM1117 Datasheet,2004/06
[5] 杨杰 吴凡.粗糙表面可见光散射特性的实验研究. 中国测试,2009,02期
[6] HAMAMATSU,Light modulation photo IC S7136,2007/07
[7] 邵贝贝.单片机嵌入式应用的在线开发方法. 北京:清华大学出版社,2004年10月第1版
[8] 邵贝贝.UCOS-II 嵌入式实时操作系统. 北京:清华大学出版社,2002年10月第1版
[9] MC9S12DG128B Device User Guide ,Version 1.2,Motorola,2000/ 05/12—2000/08/17