南京邮电大学乐乐队智能汽车竞赛技术报告.docx
- 文档编号:29729415
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:41
- 大小:1.42MB
南京邮电大学乐乐队智能汽车竞赛技术报告.docx
《南京邮电大学乐乐队智能汽车竞赛技术报告.docx》由会员分享,可在线阅读,更多相关《南京邮电大学乐乐队智能汽车竞赛技术报告.docx(41页珍藏版)》请在冰豆网上搜索。
南京邮电大学乐乐队智能汽车竞赛技术报告
第一章前言1
第二章总体机械设计方案1
2.1总体机械结构1
2.2前瞻式红外头2
2.3倒放着的舵机………………………………………………………………………….5
第三章硬件电路设计6
3.1核心版电路6
3.2红外连接电路7
3.3电机连接电路…..............................................................................................................8
3.4测速电机电路................................................................................................................11
3.5电源设计……………………………………………………………………………..13
第四章软件算法及控制策略13
4.1红外探路径算法………………………………………………………………………13
4.2舵机转弯控制………………………………………………………………………...17
4.3PID控制算法…………………………………………………………………………15
4.4PWM程序设计………………………………………………………………………..15
4.5AD程序设计………………………………………………………………………….20
4.6中断程序设计…………………………………………………………………………20
第五章总结………………………………………………………………………22
参考文献23
附录24
第一章前言
全国高等学校自动化专业教学指导分委员会受国家教育部委托,为加强大学生的创新意识、实践能力、合作精神、的培养,举办了第三届“飞思卡尔”杯大学生智能车邀请赛。
该比赛综合性很强,是以迅猛发展的汽车电子为背景,涵盖了控制,模式识别,传感,电子,电气,计算机和机械等多个学科交叉的科技创意性比赛。
该比赛是由飞思卡尔公司提供统一的硬件平台,由自动化分教指委协助,每年由各大高校承办的全国性比赛。
本届飞思卡尔比赛是第三届比赛,前两届的比赛为我们提供了许多宝贵的经验,在许多方面都为我们提供了指导。
下面就来谈谈我们在制作小车时遇到的一些情况与获得的一些感悟。
第二章总体机械设计方案
2.1总体机械结构
我们所制作的小车长39mm,宽24mm。
由9个辨别路径的红外头和汽车底部6个判断起跑线的红外头组成。
车的底盘前部是倒放着的舵机,小车后部的电机的上方是测速电路,电机旁边是测速电机,我们的测速电机是由废旧的收音机上拆下来的小电机加上一根细皮带做成的。
在底盘的中后部是比赛方提供的可充电电池,电池上方是车的主体电路,整个小车的中心靠近在电池与电机的中间,总体重心靠在车的中间偏后方,这样,可以增大后轮的摩擦力,加强了小车的动力。
在我们车下方的底盘中间有一排红外,一共有6个,这6个红外是在底盘挖了6个方孔,然后将这6个红外集成在一块梯形的板子上,6个红外成一横行排放,然后镶嵌在底盘的六个方形的孔中,这样,红外采集到的红外值很稳定,不易受外界干扰。
装在底盘中部的6个红外头是用来检测起跑线的,相比于检测起跑线的红外头装在前面,装在小车中部的红外头检测效果更好,因为装在小车中部,当小车经过起跑线时,小车的车身车身中心更接近于黑线,更加稳定,检测赛道起跑线的效果更好!
小车用于检测黑线的红外头是装在车的前方的,而且红外头是向上翘的,翘的角度大概有45度。
这样红外传感器可以照得更远。
我们的电池放法也做了改进,由原来的躺着,改为竖着紧贴着后面的电机,这样的话,小车的重心相比于原来更靠近电机处,这样的话,会使后面的重量加大,增大了轮胎与地面之间的摩擦力,因为如果摩擦力不够大的话,容易在转弯时产生侧滑。
我们还做了一个迷你型的板子,然后将单片机焊在上面,这块单片机被放在了弹簧避震的旁边,其实当初是装载后面电机上面的,至于为什么后来改成这个样子,主要是考虑到了这样改经的话可能会更美观!
小车的测速电机装在右后轮的正上方,用一根皮带将电机和齿轮相链接,与电机相连的。
与电机相连的齿轮是连接着主齿轮的小齿轮。
这样,小车轮胎转一圈,小齿轮和测速电机转的圈数接更多,测速就更精确。
智能车数据:
长*宽(毫米)
390*240
电容总量(微法)
640
新增伺服电机数量(个)
0
轴距/轮距(毫米)
200/137
传感器数量种类
15个红外头、测速红外传感器
平均电流(毫安)
400
赛道检测空间精度(毫米)
20
车模含电池重量(千克)
1.2
赛道检测频率(赫兹)
200
2.2前瞻式红外头
我们的小车最终使用的是具有前瞻结构的红外头,目前我们小车的红外可以检测到前轮前方的40厘米!
但是一开始的时候我们的小车不是采用前瞻式的红外头的,采用的就是就是一般的往上翘的红外头。
但是这种的红外虽然在前瞻性上效果不错,但是由于的他宽度就太小了。
这是我们一开始采用的红外头的设计方案
后来我们把赛车做了改正,不仅采用了前瞻式的红外头,而且红外头成弧形向外张开,这样的设计的好处是可以看得更远,更宽,这样,小车在路径识别的时候,可以有更好的选择,这样,赛车在弯道时更容易走出漂亮的路线。
如下实物图所示:
我们的小车判别路径的红外头由于翘的比较高,机械结构不是很牢固,所以我们在小车向上翘的红外头支架下垫了一侧板子,板子与支架之间用塑料的柱子链接,这样就比较好的解决了红外头支架不是很牢固的问题。
不仅向上翘,而且成弓形,这样小车的红外头不仅可以看得更远,而且可以看得更加宽广,在小车跑赛道是可以提前转弯,切内道!
2.3倒放着的舵机
小车的舵机是整个小车的灵魂,他在转弯时的角度是否精确,转的是否即时,直接影响到小车能否过一些急弯,像大小S形湾等。
我们的舵机采用倒放着,这样,可以使舵机上驱动两个轮子的臂更灵活,提高了小车在转弯时的灵活性,如图所示
显然,舵机竖起来后两个臂的受力全在水平位置方向上,运转起来后更灵活了。
这样,也会减小舵机转动过程中力臂与舵机之间的摩擦。
第三章硬件电路设计
3.1核心版电路
我们的单片机是用飞思卡尔公司提供的MC9CS12DG128.我们自己画了最小系统板,我们画的PCB板体型更小,因为我们只是引出了我们想要的接口,这样,减小了体积。
上图所示为MC9CS12DG128最小系统板。
CPU功能介绍:
MC9CS12DG128是定位中档的16位机,该款单片机有256K的内存空间,16个I/O口,八路10位A/D口,外部输入时间经过内部锁相环后,频率可达48MHZ。
该款单片机功能强大,完全能够胜任小车的控制功能。
3.2红外连接电路
红外工作原理,红外管的发射管发射
如图所示为红外的链接电路图,这里我们队做了一点小小的改动,原来的电路,R2是定值电阻,这里我们把它改成了可调电阻,R接通电压后,R2的压降就会通过A/D口被反馈到单片机,如果是定值电阻的话,它反馈回来的值是在一个固定的范围呢,但是改用可调电阻后,根据你想要的范围来调电阻值,这样,就可以使传感器同时检测到白线时的值尽可能的一致,同时检测到黑线时的值也会尽可能的一致。
并且,当把可调电阻调到检测到白线和黑线时的值差尽可能的大。
这样,可以减小不同地点光线的强弱带来的误差。
同时,我们的红外采用多发射管的结构,因为红外是往上翘的,这样的机械结构有利于看得更远,但是,经发射返回来的红外光就比水平放的红外发射管发射后返回来的光少很多,所以,我们采用,多发射管陪一接受管的电路,这样很好解决了那个问题。
但同时这也会有增大了小车整体功耗的缺点。
但考虑到,这样的机械结构可以使小车在转弯时切内道,大大的减少了小车跑完赛道的时间,所以,最终还是采用了这种结构。
我们用板子来垫高红外头
3.3电机连接电路
电机驱动系统由控制器,功率变换器及电动机三个部分组成,只能车上的电机包括一个直流驱动电机和一个角度伺服的舵机。
电机驱动使用飞思卡尔专用电机驱动芯片MC33886。
为了增大驱动能力,减少单片发热量,电路采用两片MC33886并联的方案。
系统使用PWM控制电机转速,充分利用单片机的PWM模块资源。
MC33886芯片的工作电压为5-40V,导通电阻为140毫欧姆,PWM频率小于10KHz,具有短路保护、欠压保护、过温保护等功能。
电机驱动芯片安装在制作的电机驱动PCB板上,在PCB板设计时,考虑到芯片散热问题,在芯片腹部设计了方型的通孔,实际运行效果表明芯片散热均匀,设计合理。
为了防止电动机突然停止时产生的电磁干扰,在电动机的两端焊接了一个0.1μF滤波电容。
直流电机控制采用PWM控制方法,采用集成有桥式电路的飞思卡尔MC33886电机专用芯片,能够提供5A驱动电流,PWM调制输入频率最高10MHz,带有片内欠压,过流,过温保护和电流保护,能够提供正转,反转,制动和惰性四种电机驱动方式。
直流电机驱动电路
由于电池电量在使用过程中越来越小,电池电压有时会显现出比较高的“虚压”,如果速度采用开环控制,虽然PWM模块输出的波形是相同的,但是会造成智能车的速度不同,这样不利于转向的调节。
所以,我们使用PID闭环控制进行稳速,这样,无论电池电压如何(不低于下限),无论路况,无论电机负载如何,智能车都会运行在一个特定的速度而不会改变。
智能车的转向模块和驱动模块类似,都是采用PWM控制,这里使用的是PWM0和PWM1的级联。
电路图由于比较简单,这里就不给出了。
在实际中实验测量舵机的转角时,我们使用的方法如下图所示:
在图中,测量出摄像头能够检测到的黑线位置,并量车距离为b,测量车正中间和黑线的横向距离为a,那么转角的正切就等于b/a。
我们可以使用这个方法,把黑线从视野最左端移动到最右端,分别测量出转角,由于舵机连杆加长,所以我们发现转角于舵机的PWM值基本是线性的,所以舵机控制采用P控制即可。
再考虑到转弯必须有一定的及时性,所以并不采用PID控制。
舵机控制,舵机作为一种位置伺服驱动器件,可利用输入PWM信号高电平时间来调整输出角度,实现伺服功能,舵机控制是智能车循迹行走的关键,要求舵机驱动的转向结构具有精确的角度控制和快速响应的能力。
我们的智能车载制作过程中是采用两片33886并联的形式。
如下图所示。
我们将33886装在我们自己腐蚀的连接板上。
还在每片芯片上装了一块散热片。
3.4测速电机电路
码盘是我们一开始采用的测速方案,但是我们在小车实验过程中发现,要想使马盘的速度精度提高,必须将码盘接在小齿轮上,但是小齿轮那边的位置很小,马盘接在上面后,一不小心,就会使小车的齿轮碰到马盘。
并且,我们用来制作码盘的材质不是很好,很容易就会产生形变。
而且,我们的码盘的占空比做的也不是很精确。
这样,出来的波形就很不精确,达不到我们对测速应有的精度。
最终,我们还是放弃这种方案。
我们在现在的智能车上采用的是测速电机的方案,而且,我们的测速电机很特别,因为我们的测速电机取自废旧的收音机。
下图是我们测速电机的实物图和转动的横截面图,由小齿轮带动电机转动,因为转速不同(转速越快,电机上反馈的电压越高,转速越慢,电机上反馈的电压越低),电机得到不同的电压后,然后将电压经过处理以,将处理后的信号送到单片机里面。
直流测速电机输出的是一个模拟量,经过电路电路变化后,输出的信号直接接到单片机的I/O口。
测速电机的横截面图
3.5电源设计
智能车系统的供电电源是6节串联的镍镉电池,其供电电压为7.2V,荣;容量为2000mAh。
更具各部件正常工作的需要,智能车系统要对供电电池进行电压调节,其中单片机系统,红外接受电路,比较器芯片及电机驱动芯片需要的是5V的工作电压,转向系统的舵机,红外发射电路和和驱动电机则需要7.2V工作电压,其系统电压调节如入所示。
电源设计在智能车整个系统中尤其重要,智能车的各个模块都需要电源的支持,而且模块需要不同的电压,电源模块以及电压转换电路设计的不好,会对各个模块长生很大的影响,所以电源模块和电源转换电路要设计的精确。
上图所示为各模块所需的电压以及简单的实现方法
第四章:
软件算法及控制策略
4.1红外探路径算法
我们的用于探路的红外头一共装了9个,在车的下方还装有6个红外头用于检测起跑线的位置。
前面成弓形的9个红外头,在照射到白线的时候,反馈到单片机中的值是120左右,当遇到黑线的时候,反馈到单片机中的值大概是90左右。
于是我们就利用这两者的值得差别来判别道路,并且进一步的利用算法。
我们检测黑线的算法是我们用AD口得到相应的9个数据,然后利用算法的出值最小的那个红外头,然后再找出这个红外旁边两个红外值较小的那一个,然后根据这两个红外的值得出黑线中线具体在哪一个位置,在这个算法中,我们程序中就已经将两个红外中间的这段距离虚化成30个具体的位置,这样的话,一共就会有240个位置值,每个位置值都会对应一定的舵机转角,这样用红外取得值后,在转弯的时候,舵机就会转的更连续,不会发现跳变的情况。
我们还在红外的算法中加了个屏蔽错误的代码,因为小车的速度过快以后很容易冲到一边去,这时黑线就不再红外头的范围之内,根据代码的设置,小车会按照原来的角度偏转回去,但是如果冲出去后,看到了其他干扰的黑线,小车就会拐到错误的赛道上去,所以就要在看不到赛道的时候,我们就要把另一半的红外头屏蔽掉,使他即使看到了错误的黑线也不会拐向错误的地方。
我们在平时的测试过程中,因为学校的赛道是铺在瓷砖上的,又由于我们小车的红外头是斜向上的,所以红外传感器看到瓷砖的时候,瓷砖上没有漫反射,所以传感器会误认为瓷砖是黑线,这样,就会很大的影想我们小车的前进,所以我们小车的代码中有很大一部分是用来屏蔽瓷砖对我们小车的影响的。
小车的红外采集频率是200Hz,舵机的控制频率我们也是取的200Hz。
.我们做了大量的实验,不断改变频率,后来发现,这个值是最适合我们赛车的传感器的特点的,如果频率太大,采集的太快,舵机也来不及反应,如果频率太小,采集的太慢,小车在拐弯时及其容易冲出去!
我们在赛车的底部装了6(在图的最左边和最右边还有两个,图中没有显示)个传感器,用来检测赛道的起跑线。
刚开始,我们检测起跑线的这6个传感器是装在小车的最前部的,但是在遇到坡度的时候,坡度会对小车的传感器产生比较大的冲击。
于是最终采用了镶嵌在小车底部的矩形孔中。
这样的机械结构,丝毫不会影响小车的上坡,而且在采集道路数据的时候几乎不会受到外界光线的干扰!
4.2舵机转弯控制
给舵机输入一个频率固定的占空比不同的PWM,舵机就会转过不同角度,但逼近舵机的反应速度是很慢的,这样的话,就可以用软件来弥补硬件的不足了,就是在速度足够慢的时候,舵机反应的过来,小车在行进过程中要不断的调整前轮的转向,在路径波动强度较低的时候,不能突然的改变转向太多,特别是告诉的时候,这样会导致小车走蛇形,为了避免小车在直线道路上走蛇形,转弯时要加上柔韧性,越是靠近小车的中心轴,角度改变的越小。
然后远离中心轴的时候,可以角度改变的大一点。
4.3PID控制算法
智能车自动控制算法采用了局域反馈控制的PID算法,包括3个部分:
测量,比较,和执行,即把测量得到的量与期望值相比较,然后用在合格误差纠正调节控制系统的响应,在这种情况,引入了PID控制算法,在实际应用中,PID控制算法所控制规律为比例,积分,微分控制,PID是一种有效而简单的控制器,嫩够在保证基本不影响系统稳定精度的前提下提高系统的稳定性,并很好的改善系统的动态性能。
但是在实际的应用中,PID算法应用存在一些问题:
实际没有对速度进行控制,对直线上的偏差不断的修正,即使是很小的偏差,小车也会不断的加速或者是减速,造成电能的消耗,PID调节会出现超调甚至震荡现象,使系统不稳定。
用模糊控制理论对PID算法进行补充,就能够在比较恶劣的环境下,对难以构造数学模型的控制对象实现很好的控制,不会出现超调现象,具有较强的抗干扰能力。
根据前面的实验情况和现场调试经验,我们对各种情况下的车子转角进行了大概的控制,并对他们进行数据纠错,控制策略如下所述。
根据路面摩擦力等情况,应适当的选择直线速度和转弯速度;另外,系统在直线不进行PID控制,以最大速度运动,出现严重偏离时以最大的角度,(保证没有接触到汽车底盘的情况下)进行转弯,赛车处于一般弯道状态时则引入PID算法。
通过这样,可以更具实际情况调节速度,使小车具有很好的可控性。
PID的图形表达式
T为采样周期,必须足够小以保证系统有一定的精度;
E(k)为第k次采样时的偏差值。
KP为调节器的比例系数
TI为调节器的积分时间,在调试过程确定。
TD为调节器微分时间,在调试过程中确定。
将P(k)-P(k-1)得到如下式子:
4.4PWM程序设计
S12为控制器产生PWM波形的方法主要有两种,软件输出比较和PWM硬件控制,利用输出比较功能可以通过软件输出任意脉冲,但会占用CPU功能,而且不易产生精确的脉冲序列,FreescaleS12集成了PWM模块专用输出PWM波,使用时不影响运行计数器,也极少占用CPU功能。
MC9S12的PWM的特征如下:
8位8通道;
每个通道可独立产生脉冲波;
每个PWM通道具有专用计数器;
4个程控选择的时钟源;
脉冲输出极性可选;
输出频率可与总线时钟频率相同;
占空比可调范围为0~100%,最高分辨率为0.15%;
周期与占空比双缓冲;
每个通道可选择中心对其或左对齐方式;
具有中断特性的紧急切断功能;
S12为控制器PWM8个模块可以分为4组,分别为PWM0,PWM1,PWM2,PWM3,PWM4,PWM5,PWM6,PWM7.
每组的两个通道可以选择是否是级联,用来构成16位的PWM通道,级联时,两个通道的常数寄存器和计数器均连接成16位的寄存器,原来的通道7,5,3,1,作为低位字节,通道6,4,2,0作为高位字节,4个16位字节的输出分别使用6,4,2,0的输出引脚,时钟源分别由7,5,3,1的时钟选择器控制位决定。
级联时,通道7,5,3,1的引脚变成通用I/O引脚,通道6,4,2,0的十种选择没有意义。
MC9SDG128内部的PWM模块可调制产生不同脉宽的方波。
PWM波用作D/A输出模拟信号时,最简单的方法是使PWM波通过一个一阶低通滤波器,为了使电压保持,应使输入阻抗尽可能大,为此,在低通滤波器后再加一级电压跟随器,得到的模拟量与PWM波的占空比有关,如果占空比是1:
1,那么得到的电压是1/2的最大输出电平(5V),即2.5V。
实验版已经为用户提供了这样一个接口电路,同时,为了使用户能够更加直观的看到模拟电平的变化,又提供了一个串有电阻的发光二级管,这样,如果接上电平,且电平大于2V时,电压越高,等越亮。
PWM信号输出函数:
舵机驱动
信号从3口输出,频率为200Hz
voidPwm_dir_init(void)
{
PWMCTL|=0x20;//合并23通道
DDRP|=0X0C;//将P口的2通道设置为输出方式
PWMPOL|=0X0C;//设置占空比的计算方式为PWMDTYX/PWMPERX
PWMCNT2=0;//正常模式
PWMCNT3=0;
PWMPER23=40000;//为百分之15,*输出频率为SB/PWMPER2.
PWMPRCLK|=0X00;//设置总线频率B的频率
PWMSCLB|=0X04;//对B信号进行8分频作为SB的信号频率
PWMCLK|=0X0C;//设置SB作为输出信号
PWME|=0X0C;//启动对应端口的PWM信号
}
PWM信号输出函数:
电机驱动
信号从1口输出,频率为100Hz
voidPwm_moto_init(void)
{
PWMCTL|=0x10;//合并01通道
PWMCTL|=0x40;//合并45通道
DDRP|=0x03;//将P口的1通道设置为输出方式
DDRP|=0x30;//将P口的5通道设置为输出方式
PWMPOL|=0x33;//设置占空比的计算方式为PWMDTYX/PWMPERX
PWMCNT01=0;//正常模式
PWMCNT45=0;
PWMPER01=16000;//为百分之15,*输出频率为SB/PWMPER2.//最大65535现在实际等效只有14465
PWMPER45=16000;
PWMPRCLK|=0X00;//设置总线频率A的频率
PWMSCLA|=0X01;//对A信号进行4分频作为SA的信号频率
PWMCLK|=0X33;//设置SA作为输出信号
PWME|=0X33;//启动对应端口的PWM信号
}
4.5AD程序设计
MC9S12DG128实验板上留出了4个模拟电平,分别是AN6,AN7,AN14,AN15.其中,AN6,AN7,属于ADC0,AN14,AN15属于ADC1。
编程时需注意设置与采用通道相对应的寄存器,模拟电平由电源+5V经变阻器分压产生,范围为0~5V,实验板上海另加了保护电路,模拟电平最好与保护电路连接后再输入到ADC的某一通道。
AD0口初始化函数
voidAD0_init(void)
{
ATD0CTL2=0xC0;//AD模块上电,快速清零,无等待模式,禁止外部触发,中断禁止
ATD0CTL3=0x40;//每个序列8次转换,NoFIFO,Freeze模式下继续转换
ATD0CTL4=0x83;//8位精度,2个时钟,ATDClock=[BusClock*0.5]/[PRS+1];PRS=3,divider=8
ATD0CTL5=0xB0;//右对齐无符号,多通道采样,从通道0开始
ATD0DIEN=0x00;//禁止数字输入
}
//AD1口初始化函数
voidAD1_init(void)
{
ATD1CTL2=0xC0;//AD模块上电,快速清零,无等待模式,禁止外部触发,中断禁止
ATD1CTL3=0x40;//每个序列8次转换,NoFIFO,Freeze模式下继续转换
ATD1CTL4=0x83;//8位精度,2个时钟,ATDClock=[BusClock*0.5]/[PRS+1];PRS=3,divider=8
ATD1CTL5=0xB0;//右对齐无符号,多通道采样,从通道8开始
ATD1DIEN=0x00;//禁止数字输入
}
4.6中断程序设计
MCU的终端处理程序要求尽量简洁,条件苛刻时还需要使用汇编语言进行编写,以尽量把占用时间较多的程序在主程序中完成,中断处理程序与普通程序一样,最终都一样被编译链接,处理成机器码后放到一个指定位置。
汇编语言,C语言,C++甚至更高级的语言,都可以用来编写中断处理程序,无论使用哪种编写语言,只要不是直接编写机器码,都要借助编译器进行编译。
我们大多数会选择集成开发环境(IDE),不同的IDE有各自不同的特点,但最终实现的功能都是生成MCU可直接
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 南京 邮电大学 乐队 智能 汽车 竞赛 技术 报告