基于CCD的智能车制作与调试系统设计.docx
《基于CCD的智能车制作与调试系统设计.docx》由会员分享,可在线阅读,更多相关《基于CCD的智能车制作与调试系统设计.docx(18页珍藏版)》请在冰豆网上搜索。
基于CCD的智能车制作与调试系统设计
基于CCD的智能车制作与调试系统设计
摘要:
以“飞思卡尔杯”全国大学生智能汽车比赛为背景,基于S12微处理器设计了一个能自主识别规定路径的智能车。
通过软硬件的改进使智能车速度及稳定性有了较大的提高,并遵守大赛的各项规则。
1)采用新型16位“飞思卡尔”单片机MC9S12XS12,处理速度更快,性能更稳定;增强型捕捉定时器(ECT)模块提高了摄像头采集效果及系统的可靠性。
2)采用速度介入算法对舵机进行控制,克服了去年“弦切法”的不足,使得智能车行驶更稳定、快速。
3)采用BB_control控制算法提高了电机的响应速度,能满足小车在较高速度下的快速响应要求。
4)基于SD卡设计了智能车调试系统,能够对智能车行驶过程中的路径图像进行存储,并能通过上位机进行路径信息分析,方便了智能车调试。
通过对智能车设计方法的改进,在稳定性及快速性上有了很大提高,设计的SD卡调试系统有较好的应用价值。
关键词:
CCD摄像头;智能车;SPI;MC9S12XS128;LM1881
Abstract:
Thisdesignwith"freescalecup"nationalUniversitySmartCarCompetitionasthebackground,S12smartcarmicroprocessordesignprovidesapathtoself-identifythesmartcarlastyear.Smartcarstobeabletofinishthecourseintheshortesttime,andtocomplywiththerulesofcompetition.
1)Usingthenew16,"freescale"SCMMC9S12XS12,processingspeedfaster,morestableperformance.Enhancedcapturetimer(ECT)moduleimprovestheeffectofcameraacquisitionandreliabilityofsystem.
2)Interventionbythespeedservocontrolalgorithmtoovercomelastyear's"tangentiallaw"insufficienttomakeintelligentvehiclesdrivingmorestableandfast.
3)UseBB_controlcontrolalgorithmtoimprovetheresponseofmotorspeedtomeetthecarathighspeeds,rapidresponserequirements.
4)SDcardbasedonthedesignofintelligentvehiclesystemdebugging,intelligentvehiclescantravelthepathoftheprocessofimagestorage,andthepaththroughthehostcomputerinformationanalysis,tofacilitatedebuggingofsmartcars.
Basedontheimprovementsofsmartcardesign,thesystemhavegreatincreasesbothinstabilityandrapid.AndthedesignoftheSDcarddebugsystemhasgoodapplicationvalue.
Keywords:
CCDcamera;SmartCar;SPI;MC9S12XS128;LM1881
1引言
1.1设计背景
本设计本文以“飞思卡尔”杯全国大学生智能汽车比赛为背景,制作一个在专门设计的跑道上能自主识别道路行驶的智能车,能在最短的时间里跑完跑道,且不脱离轨道。
智能车的研究始于20世纪50年代初美国BarrettElectronics公司开发出的世界上第一台自动引导车辆系统(AutomatedGuidedvehiclesystem,AGVS)。
“飞思卡尔杯”智能车大赛起源于韩国,是韩国汉阳大学汽车控制实验室在飞思卡尔半导体公司资助下举办的以HCSl2单片机为核心的大学生课外科技竞赛。
组委会提供一个标准的汽车模型、直流电机和可充电式电池,参赛队伍要制作一个能够自主识别路径的智能车,在专门设计的跑道上自动识别道路行驶,谁最快跑完全程而没有冲出跑道并且技术报告评分较高,谁就是获胜者。
这项赛事在韩国的举办取得了巨大的成果,至此我国也已经成功举办了四届“飞思卡尔杯”全国大学生智能汽车大赛。
1.2系统设计要求
在提供的车模平台基础上,制作一个能够自主识别路线的智能车,在专门设计的跑道上自主识别道路行驶。
系统包括传感器信号采集处理、控制算法及执行、动力电机驱动、转向舵机控制、SD卡模块设计等。
本设计主要完成的工作有:
⑴智能车硬件选型及组装,确保整体结构更合理
⑵路径识别算法设计,确保舵机控制的准确性和快速性;
⑶寻求合适的电机控制算法,确保电机控制的快速性;
⑷SD卡模块设计与调试;
⑸整车调试确保系统的稳定性;
2智能车系统总体方案设计
2.1系统总体框架
智能车系统主要由:
车模,摄像头,LM1881视频分离电路,编码器,电池,舵机,电机驱动模块,MC9S12XS128单片机,SD卡(256M),电源匹配模块等组成[1]。
如图1所示:
图1智能车系统结构框图
2.2智能车硬件总体设计方案
硬件主要分为机械结构、处理器、电源、速度检测、电机驱动、路径识别、视频信号分离、SD卡模块等。
2.2.1MC9S12XS128资源分配
主控制器的管脚分配如表1所示。
表1单片机管口分配表
IO口
PM6
视频选通信号
PA0
奇、偶场信号
ECT模块
PT7
速度传感器
外部中断
IRQ
行同步信号
串口通讯
RXD0
串口接收
TXD0
串口发送
人机模块
PH0-PH7、PA2
数码管
PB0-PB7
拨码开关
PWM模块
PWM01
舵机
PWM23,PWM45
电机
2.2.2电机驱动电路的设计
本设计采用的是BTS7970驱动电路,电路原理图如图2所示。
图2BTS7970驱动电路原理图
2.2.3视频分离电路设计
使用LM1881视频分离芯片来辅助采样视频。
LM1881提取摄像头信号的行同步脉冲、消隐脉冲和场同步脉冲,并将它们转换成数字式电平直接输给单片机的I/O口,可以使用9S12单片机I/O口的中断功能来接收这些信号。
电路原理图如图3所示[8]:
图3视频分离电路原理图
2.2.4电源匹配电路
SD卡的逻辑电平相当于3.3VTTL电平标准,而控制芯片AT89C52的逻辑电平为5VCMOS电平标准。
因此,它们之间不能直接相连,否则会有烧毁SD卡的可能。
出于对安全工作的考虑,有必要解决电平匹配问题。
如图4所示:
图4电源匹配电路
2.3智能车软件总体设计方案
软件的设计主要包括:
系统初始化、图像采集、路径分析与控制策略、调试软件(SD卡的图像保存与处理)四个部分。
2.3.1主程序流程图
主程序流程图如图5所示:
图5主程序流程图
2.3.2中断程序设计
⑴实时中断:
这个中断是用来测速的,由于我们测速采用的是旋转编码器,旋转编码器会根据转速的不同而输出不同频率的方波。
这个中断就是为了采集这个频率信号而设计的。
⑵外部中断IRQ:
这个中断是用来捕捉摄像头信号中的行同步信号,用以判断一行是否开始。
输入捕捉中断TC0:
这个中断时用来捕捉经比较器比较后的图像信号的跳变沿,从而判断黑线的位置。
2.4智能车各部分的功能描述
2.4.1主控芯片MC9S12XS128
MC9S12XS128单片机内核为CPU12高速处理器,片内总线时钟最高可达40MHz。
经过对单片机进行超频处理,可以使该单片机内部总线达到80MHz[7],从而大大提高了处理速度。
此外,MC9S12XS128单片机拥有50多个中断源,中断优先级可设并支持中断嵌套。
片内资源包括8KRAM、128KFlash、2KEEPROM,大容量的存储器使得对于嵌入式操作系统的移植和中等复杂程度的控制系统都不需要外扩存储器;串行通信端口也非常丰富,有2路SCI、2路SPI、IIC等串行接口模块;脉宽调制(PWM)模块可设置成8路8位或者4路16位,逻辑时钟选择频率宽,特别适合用于控制多电机系统;还包括两个8路10位精度A/D转换器,增强型捕捉定时器(ECT)模块,和控制器局域网模块(CAN)并支持背景调试模式。
同时还增加了一个平行处理的XGATE模块,该模块是一个智能的可编程的直接存储器(DMA)模块,可以适应高速中断处理、通信和数据预处理,并为其他任务释放一部分CPU空间,从而提高整体性能。
此外,它内部还集成了完整的模糊逻辑指令,可大大简化程序设计。
最终采用了清华嵌入式研究中心提供的MC9S12XS128系统板,优点是小系统经过长时期推广应用,稳定性良好,缺点是智能车作为竞速比赛,有很多功能比赛未能到,因此清华提供的系统板在一定程度上增加了智能车的重量,对速度有一定的影响。
2.4.2测速编码器
受车模机械结构的限制,必须采用体积小、重量轻的速度传感器。
本设计采用的是光电旋转编码器。
其优势是获取信息准确,精度高,搭建容易。
劣势:
增加后轮负载;光电编码器体积较大,导致车重增加。
2.4.3舵机
舵机是竞赛组委会提供的S3010舵机,使用一路PWM控制前轮的转向,配合后轮的驱动电机,使得车体能够快速稳定的行驶。
2.4.4电机驱动
采用大功率集成驱动芯片BTS7970,控制直流电机紧急制动。
使用两路PWM控制占空比,精确调整电动机正反转速。
最大驱动电流60A,体积小,集成度高,结构稳定,内阻小,压降低,芯片几乎不发热,是一款性价比极高的驱动电路。
3图像采集与处理
这个章节是本次设计中的难点,从图像数据的采集到数据的处理,都不是一件容易的事。
本次设计中采用的是通过硬件电路将视频信号二值化后,再送到单片机进行图像的采集与处理。
3.1摄像头的选择
首先,由于赛道仅由黑白两种颜色组成,故只需要采用黑白摄像头即可,这样同时也减轻了数据处理的压力。
其次,关于摄像头线数,由于我们采用的是输入捕捉的图像采集方法。
这种方法需要保存的数据并不多,故可以适当选择线数较多的摄像头。
最后,对于摄像头的前瞻,当我们的小车速度到达一定程度再加上舵机的响应时间,我们有必要提高摄像头的有效前瞻。
以目前的速度有效前瞻在180cm左右为宜。
本设计选用的摄像头只需要5V电源供电,这不仅简化了电路,减轻的智能车的重量,同时还提高了整体系统的可靠性。
相关参数如表2所示:
表2摄像头相关参数
额定电压
5V
额定电流
120mA
感光材料
CCD
输出信号制式
PAL
分辨率
320线
3.2摄像头图像信号简介
3.2.1图像信号的组成
图像信号的组成如图6所示:
图6摄像头图像信号的组成
3.2.2图像信号各参数
理论上摄像头的参数:
场周期为20ms(每秒50场);
行周期为64us(每场312.5行,其中偶场的第一行是一个半行);
场消隐宽度=25个行周期=1.6ms;
场同步宽度=2.5个行周期=160us;
行消隐宽度=12us;
行同步宽度=4.7us;
3.3视频信号分离
采用LM1881进行视频分离。
其中行同步信号和奇偶换场信号作为判断标志。
其中奇偶换场信号中奇场时该引脚输出为高电平,偶场时该引脚输出为低电平。
由于在每一帧的图像中,奇偶两场的信号差别不大,为了节省空间,提高采集数据的实时性,选择每一帧图像仅采偶场,则判断奇偶换场信号的下降沿。
3.4视频信号二值化
二值化的效果如图7所示。
图7LM339二值化比较效果
二值化的原理
实际上,比较器是将输入的信号进行二值化的最简单的一种方法,当将视频信号接入比较器的同向输入端,在反向输入端给定一基准电压(COMS摄像头0.68V左右;CCD摄像头0.25V左右),其二值化原理图如图8所示。
图8二值化原理图
3.5数据采集
3.5.1数据采集原理
本设计采用的是捕捉图像二值化后的边沿。
如图9所示。
图9捕捉图像示意图
行同步信号下降沿W0到来后,图像整个宽度为W=W4-W1;其中W3-W2为黑线。
通过公式:
OFFSET=W2-W1,就可以知道黑线的偏移量了。
上述采集思路也是存在一定问题的,上面数据的参考点选择的为图13中的W1,而这一点是不确定的。
我们仔细观察图7中的图像两边,发现比中间要低,而图像硬件二值化结果第一点并不是和图像开始边沿对齐,也就是说我们用W2-W1得出的黑线偏移是以W1为基准点,而W1又是变动的,那么同一位置的偏移量就有变动的。
所以在后面的处理中,选择的参考点为W0,因为它是行同步下降沿,所以为定值。
3.5.2数据采集流程图
本设计中数据采集流程图如图10所示:
图10数据采集流程图
本设计中用到的输入捕捉发,在二值化的基础上能得到较好的图像采集效果。
同时有减少了数据量。
减小了数据的保存和处理难度。
3.6路径识别
3.6.1黑线提取
理论上在摄像头的一行信号中我们可以捕捉到4次电平变化(以下称之为采集点)。
虽然我们采用的硬件二值化电路已经具备了一定的抗干扰能力,但是实际中我们往往会采集到2到6个电平变化。
造成这一结果的主要原因有:
⑴跑道上的台阶或者不平整导致小车的抖动所致;
⑵跑道的十字路口或者起跑线导致采集点的变化;
⑶现场的灯光不均匀导致采集点的变化。
鉴于以上原因我们就很有必要设计出进一步可以滤除信号干扰的方案,再设计中我们发现无论是由于什么原因导致采集点的变化,都和真确的黑色引导线是不连续的。
也就是说在整个跑道上,正确的黑色引导线始终是连续的。
通过这一发现我们设计出了逐点搜索的方法来滤除干扰,实验证明这种方法是比较有效的。
这种滤除干扰的方法实现流程图如图11所示。
图11黑色引导线搜索流程图
此滤波法的在使用的过程中要注意的是,搜索范围的控制,如果搜索范围比较大将导致滤除干扰的效果不明显甚至不能起到滤波的作用。
如果搜索范围设置的比较小那么往往导致无法搜到有效地第一点,这样就很容易丢失掉原本真确的图像信号。
3.6.2偏差计算
通过有效地黑线提取。
我们得到比较能真实反映智能车前方路径的一组数据。
这样就可以对智能车是否偏移跑道做出准确的判断。
这在智能车的设计中是十分重要的。
本设计中采用的是速度介入法。
速度介入法的主要思想是:
在计算偏差的过程中,加入速度的因素。
通过理论分析和实际调试做出以下控制规则:
IFV>420THENL>60
IF38055
IF30050
IFV<=300THENL>45
规则说明:
规则中V表示智能车的速度,L表示参与偏差计算的认为是远端黑线的行数。
例如:
L>60表示系统认为此时第60行以后为视场远端。
行数越大表示图像与摄像头越远。
简单的说就是当速度很快的时候需要用摄像头远端的图像来计算偏差,当速度相对较低的时候我们可以用摄像头中部或者近端的图像来计算偏差。
这其中要说明的是控制智能车转向的舵机有一个0.16s~0.02s的响应延迟时间。
此方法的内容中还包括一点,就是智能车最优行驶路线的选择,不推荐任何时候都沿跑道内线行驶,特别是在直角弯和小圆环的跑道上,或者与其类似的跑道。
速度介入法提出在急转弯的跑道上可以让智能车适当的沿外线行驶,这样虽然延长的智能车的行驶路程,但是对智能车的转向却非常有利。
同时不用再将速度限制的很低。
这样取到一个较好的效果。
3.6.3起始线识别
起跑线如图12所示。
为了识别出起始线首先必须确保相邻的采集到行信号之间的距离要小于这两段黑色线段的宽度,否则可能就采集不到起始线了。
图12赛道起始线示意图
本设计采用的起始线识别方法是结合黑线的采集方法来实现的。
在摄像头的视场中只有一条黑线的时候,经过二值化比较后得到的图像信号如图所示。
可以看出图像中我们可以捕捉到4次电平变化。
当摄像头的视场中出现起始线的时候,经过二值化比较后的图像信号如图13所示。
可以看出图像中我们可以采集到8次电平变化。
这样就可以很容易的判断出起始线的位置了。
图13起始线的视频信号经二值化后的图像
4控制策略
为了让智能车能够在最短的时间内跑完全程,希望在每一种路况下,赛车都能够以允许的最快速度行驶,这就需要对车速进行闭环控制,我们采用的是BB_control控制算法。
对于舵机的控制,我们要达到的目标是在任何一种路径条件下,总能够给舵机一个合适的偏移量,此偏移量采用PID控制算法。
从而保证小车能够始终沿着黑线以最少的距离行驶,由于舵机的转角正比于给定的控制信号,因此在这里对舵机实施开环控制。
4.1舵机PID控制
PID调节器中有比例微分(PD)、比例积分(PI)、和比例积分微分(PID)三种类型。
由PD调节器构成的超前校正,可提高系统的稳定裕度,并获得足够的快速性,但稳态精度可能受到影响;由PI调节器构成的滞后校正,保证稳态精度,却是以对快速性的限制来换取系统稳定的;用PID调节器实现的之后-超前校正则是兼有二者的优点,可以全面提高系统的控制性能,但是具体实现与调试要复杂一点。
一般调速系统的要求以动态稳定性和稳态精度为主,对快速性的要求可以差一些,所以主要采用PI调节器;在随动系统中,快速性是主要要求,需用PD或者PID调节器。
具体到本设计的智能车系统,我们软件上采用的是PID控制。
具体实现公式如公式1所示:
(4-1)
公式说明:
Kp为比例系数,Ki为积分系数,Kd为微分系数,Ei0为本次偏差,Ei1为上次偏差,X_max与X_min为最远有效黑线位置与最近行有效黑线位置。
通过实验测试,最终将Kp定在30~35之间,Ki在10左右,Kd在2~6之间。
4.2电机BB_control控制算法
在智能车的控制策略中,控制目标是在满足一定巡线精度的前提下,尽可能提高车速。
很容易联想到,砰-砰控制能够满足这样的要求。
最速控制问题,或者叫时间最优控制(TimeOptimalControl)问题。
简单地说,就是给定最大马力和最大刹车功率,开车从A点开到B点的方法,不考虑弯道、障碍等因素时,能够想象得到的最快的方法,就是加足马力、全速前进,然后在到达终点时,全力刹车。
“砰-砰控制”(Bang-BangControl)这一名称也由此得来:
“砰”的一声,油门板一脚到底;“砰”的一声,刹车到底,控制任务完成。
最速控制在理论上是一个很有趣的问题,解法通俗、简洁,但在实际应用中单独应用砰-砰控制的情况却不多见。
因为在被控对象达到预期输出时,由于砰-砰控制器的作用,将造成较大的超调。
因此,在实际应用中一般采用如下方法:
启动时,匀速上升到最大控制,以缓和控制的冲击力;到达终点附近时,改用PID控制,作闭环微调,克服“砰-砰”的系统模型误差十分敏感的缺点。
本设计中控制方法是进入直道后,直接控制PWM占空比,使加到驱动电机两端的平均电压为最大值,使电机迅速加速,相当于电机全压启动;速度超过直线段预设的速度限定值后,PWM占空比调为0,相当于电机自由停车;速度一旦小于给定值,则立即将PWM占空比调到最大。
判断进入弯道时,立即调整PWM输出,使加到电动机两端的电压为负的最大值,使电机迅速制动,相当于反接制动状态;随后,根据弯道曲率情况,改变速度给定值,同样采用上述方式,使小车在弯道内的速度始终接近给定值。
5系统调试
在智能车完成基本的功能后,系统调试工具就显得非常重要了,要想得到智能车在跑道上所采集的最准确的信号,就必须准确的对摄像头的信号进行保存,本设计中采用的是SD卡模块来保存智能车在跑道上的各种信息。
然后通过USB接口在PC机上清晰地反映出来。
为设计最合适本智能车的控制算法提供最准确的信息。
5.1SD卡模块简介
5.1.1SD卡的接口描述
SD卡的接口可以支持两种操作模式[13]:
SD卡模式和SPI模式。
其电路连接图如图14所示:
图14SD卡接口连接电路图
主机系统可以选择以上其中任一模式,SD卡模式允许4线的高速数据传输。
SPI模式允许简单通用的SPI通道接口,本设计采用SPI模式通信。
表格3列出了SD卡引脚在SPI模式下的定义和功能描述。
表3SPI模式下的引脚定义
针脚
名称
类型
描述
1
CS
I
片选(负有效)
2
DI
I
数据输入
3
Vss
S
地
4
Vcc
S
供电电压
5
CLK
I
时钟
6
Vss2
S
地
7
DO
O
数据输出
8
RSV
--
9
RSV
--
1)S=电源供应;I=输入;O=输出。
2)这个“RSV”脚是浮空的输入引脚。
主机设计者有责任给这些连接线加上外接的上拉电阻。
否则,这些浮空的输入脚可能会造成非预料的大的电流消耗。
5.1.2SD卡模块的实现
SD卡的读写操作都是通过发送SD卡命令完成的。
SPI总线模式支持单块(CMD24)和多块(CMD25)写操作,多块操作是指从指定位置开始写下去,直到SD卡收到一个停止命令CMD12才停止。
单块写操作的数据块长度只能是512字节。
单块写入时,命令为CMD24,当应答为0时说明可以写入数据,大小为512字节。
SD卡对每个发送给自己的数据块都通过一个应答命令确认,它为1个字节长,当低5位为00101时,表明数据块被正确写入SD卡。
在需要读取SD卡中数据的时候,读SD卡的命令字为CMD17,接收正确的第一个响应命令字节为0xFE,随后是512个字节的用户数据块,最后为2个字节的CRC验证码。
可见,读写SD卡的操作都是在初始化后基于SD卡命令和响应完成操作的,写、读SD卡的程序流程图如图15和图16所示。
图15SD卡写流程图
图16读SD卡流程图
5.2遇到的问题及解决方案
在整个小车制作和调试过程中出现了很多问题,对其中比较典型的几个问题总结如下:
⑴直道抖动问题
在系统调试的过程中,曾有一段时间,小车在直道上的运行不平直,一直都有小幅度的抖动。
经过摸索我们总结了如下解决方法:
检查机械结构,比如摄像头安装是否平稳。
检查舵机是否损坏(检查方法是看舵机转角是否连续且从不同方向回到中心时的舵机转角基本相同)。
如排除以上两种原因,可以尝试调节PID系数,主要是比例系数的调节。
必要时可以试试非线性的方法即给PID系数分段。
经过试验发现,我们的问题出在上述分析的第二点,即舵机损坏。
更换舵机后,很好地解决了这个问题。
⑵单片机复位问题
这是一个比较棘手的问题,我们在调试时经常会小车在行驶的过程中经常的出现单片机复位,即小车突然停止,一段时间后又恢复运行。
针对此问题,我们摸索了很长时间,最后总结出以下几种可能原因:
系统超负荷工作,工作温