飞思卡尔智能车竞赛光电平衡组.docx
- 文档编号:26699204
- 上传时间:2023-06-21
- 格式:DOCX
- 页数:75
- 大小:1.84MB
飞思卡尔智能车竞赛光电平衡组.docx
《飞思卡尔智能车竞赛光电平衡组.docx》由会员分享,可在线阅读,更多相关《飞思卡尔智能车竞赛光电平衡组.docx(75页珍藏版)》请在冰豆网上搜索。
飞思卡尔智能车竞赛光电平衡组
“飞思卡尔”杯全国大学生
智能汽车竞赛
技术报告
关于技术报告和研究论文使用授权的说明
本人完全了解第八届“飞思卡尔”杯全国大学生智能汽车邀请赛有关保留、使用技术报告和研究论文的规定,即:
参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。
参赛队员签名:
带队教师签名:
日期:
摘要
本文详细介绍了我们为第八届全国智能车大赛而准备的智能车系统方案。
该系统以Freescale16位单片机MC9S12XS128MAA作为系统控制处理器,采用加速度计和陀螺仪传感器获取直立车姿态信息以控制两个直立驱动马达使车模直立,同时借助于线性CCD的图像采样模块获取赛道图像信息,通过软件算法提取赛道边界,识别当前所处赛道位置,算出小车与黑线间的位置偏差,采用PID方式对两个驱动马达进行差速控制,实现了车模的转向控制。
通过光电编码器实时获取小车速度,形成速度闭环控制。
调试过程中应用CodeWarriorIDE软件观察返回值,并结合串口上位机辅助调试PID参数。
文中将介绍赛车机械结构和调整方法、赛车直立方案和转向方案、赛车硬件电路的搭建以及软件的设计与参数调试。
关键词:
智能车系统直立线性CCD调试测试Freescale16位单片机
第一章引言
智能车系统涵盖了机械、电子、电气、传感、计算机、自动化控制等多方面知识,一定程度上反映了高校学生科研水平。
本章节详细阐述了智能车系统的研究背景和本智能小车的系统总体概况。
1.1智能车竞赛的意义
全国大学生智能车大赛和其他竞赛一样,为了培养大学生实践创新能力和团队精神而开展的。
该项赛事与全国大学生数学建模、电子设计、机械设计、结构设计等四大竞赛齐名,被认定为国家教育部正式承认的第五个大学生竞赛项目。
竞赛以“立足培养,重在参与,鼓励探索,追求卓越”为指导思想,旨在促进高等学校素质教育,培养大学生的综合知识运用能力、基本工程实践能力和创新意识,激发大学生从事科学研究与探索的兴趣和潜能,倡导理论联系实际、求真务实的学风和团队协作的人文精神,为优秀人才的脱颖而出创造条件。
该竞赛以“立足培养、重在参与、鼓励探索、追求卓越”为指导思想,是以智能汽车为竞赛平台的多学科专业交叉的创意性科技竞赛,是面向全国大学生的一种具有探索性的工程实践活动,涵盖了控制、模式识别、传感技术、电子、电气、计算机、机械等多个学科知识,旨在促进高等学校素质教育,培养大学生的综合知识运用能力、基本工程实践能力和创新意识,激发大学生从事科学研究与探索的兴趣和潜能,倡导理论联系实际、求真务实的学风和团队协作的人文精神[2]。
1.2智能车竞赛规则
参赛选手须使用竞赛秘书处统一指定的竞赛车模套件,采用飞思卡尔半导体公司的8位、16位、32位微控制器作为核心控制单元,自主构思控制方案进行系统设计,包括传感器信号采集处理、电机驱动、转向舵机控制以及控制算法软件开发等,完成智能车工程制作及调试,于指定日期与地点参加各分赛区的场地比赛,在获得决赛资格后,参加全国总决赛的场地比赛。
1.3系统总体方案的设计
根据竞赛章程规定,使用飞思卡尔公司的MC9S12XS128单片机为核心控制器,使用MMA7260三轴加速度计和ENC-03M作为检测车模直立姿态传感器通过AD采样后计算获得车体倾角和加速度,进而对两个驱动马达通过PWM的方式施加PID控制,使得车体自动直立得到实现。
然后在驱动马达上叠加一个速度控制分量,加以使用光电编码器检测车轮速度,实现了车模速度的控制。
最后利用竞赛指定线性CCDTSL1401采集赛道黑色边界,利用驱动马达差速方法实现车体转向,最终实现了车模直立寻线竞速。
第二章车模机械结构的改进
车模机械结构是车模高性能执行控制决定的基础,优秀的机械结构调整与设计可以是车模获得更好的稳定性和更为优异的速度,尤其是当软件控制上出现瓶颈时,机械结构的优化往往达到事半功倍的效果。
2.1车模初始结构介绍
根据竞赛规则,各个竞赛组别所使用的车模均为组委会指定车模,光电平衡组所使用的车模为D型车模,其初始的基本结构如下图所示:
其包含车体主底板以及传动齿轮结构,两个驱动马达为RN-260型号。
2.2测速编码器的安装
由于车体本身传动机构处空间狭小,测速编码器的选择与安装要求都较为有限制,我们选用的体积较小的旋转编码器,在其旋转轴上安装一个齿轮,然后在车轮内测将其咬合与车体传动齿轮上,形成一体,具体安装方案如下图所示:
2.3线性CCD的安装
线性CCD为采集赛道边界模块,赛道宽度为45cm,为了更好的采集到赛道两边的黑线,必须使CCD位置达到一定高度,且具备一定的倾角(即前瞻),为此,经过多次测试与实践验证,车模线性CCD安装位置如下图所示:
2.4电池的固定与安装
电池是车模所有物件中最重的一个,为了让车模直立负载最小以及高速情况下车体不至于侧面反倒,要求电池的位置越低越好,这样就可以降低车模总体重心,是车模性能更好,为此,我们把车模电池座移到了车轮后方底部位置,具体安装如下图所示:
第三章车模硬件电路设计
3.1电源电路设计
车模供电系统主要有三种电压规格:
电池7.2V、5V、3.3V,其中7.2V是主电池,其主要供给马达电源,5V和3.3V均属于标准电压,供给于单片机及传感器电源。
对于7.2V的电源,只进行简单的电容滤波处理,防止电压出现大的波动。
5V和3.3V的供电则采用成熟的三端稳压芯片,我们选用的是AMS1117-5.0和AMS117-3.3两种稳压芯片,采用精简的稳压电路,性能也可以得到保证,电源电路如下:
3.2XS128最小系统
我们采用MC9SXS128MAA芯片作为控制芯片。
具有体积小,性能稳定的特点。
主频最高可达到40M,根据竞赛组委会要求,MCU最小系统可以购买指定商家成品,我们选用的是蓝宙电子科技有限公司的MC9S12XS128MAL112脚最小系统板,其体积小性能稳定,如下图所示:
3.3加速度计和陀螺仪电路
加速度计和陀螺仪是车体直立必须的信息反馈器件,根据竞赛规则要求,我们选用的是freescale公司的MMA7260模拟式三轴加速度传感器和日本村田公司的ENC-03MB单轴模拟式陀螺仪,之所以采用模拟式传感器是因为其使用反方便快捷。
首先介绍MMA7260,其应用电路图如下:
其中,g_S1和g_S2为灵敏度选择逻辑,当都为高电平时灵敏度为800mv/g,Xout、Yout、Zout为信号输出端,在本系统中,只使用Zout信号。
其次,对于ENC-03MB,由于其信号输出幅值较小,因而需要进行适当的放大,经验证,放大10倍效果比较理想,典型应用电路如下:
其中,由于采用的LM358单电源运算放大器,如果没有参考点迁移,那么陀螺仪将有一个方向旋转出现错误值,因而设置了下方的运放以提供合适的电压比较点迁移,选取的比较电压值为ENC-03MB的输出幅值最小值即可。
3.4马达驱动电路设计
车模马达是马达的主动力机构,马达驱动电路我们采用的方案是经典的H桥驱动方案,配以合适的PWM,即可实现马达的正反转,我们选用的是四片BTN7970B半桥芯片搭建H桥驱动电路,驱动桥承受电流能力达到40A以上,完全胜任车模马达的要求,且BTN7970B自身压降和功耗极低,进一步节省了电池电量,电路如下:
图中只展示了一个H桥电路的原理图,另一个与其完全一样。
图中只列出了单个H桥原理图,另一个H桥与其完全一样。
由图可知,当PWM占空比为50%时,马达停转,分别大于或小于50%时,马达正转或反转。
3.5线性CCD电路模块
线性CCD为光电平衡组获取赛道信息的主要传感器,根据竞赛规则,线性CCD需选用TSL1401系列线性CCD传感器。
TSL1401在时序控制下,可以串行输出内部128个点的模拟数据,由于输出模拟信号幅值较小,需加一级运算放大器。
根据竞赛规定,我们选用的是蓝宙电子科技有限公司的线性CCD模块,其结构如下:
其中,SI为曝光时间控制信号,clk为串行时钟信号,AO为放大后的像素模拟量输出。
其于单片机的接口如下图所示:
3.5起跑线检测电路
起跑线的检测停车也是车模制作过程中需要考虑的问题,根据起跑线的特征,可以利用线性CCD的图像进行起跑线判断,但考虑到起跑线宽度很短,在车速较高的情况下,由于CCD采样周期太大导致没有采到起跑线的图像。
我们采取的方案为使用竞赛组委会规定的光电对管作为检测起跑线的辅助电路,光电对管布置方案如下图所示:
图中四个圆点为光电对管位置,共计4个,黑色边框为车体俯视图。
假定调整好的光电对管信号在照射黑色时输出高电平,在照射白色跑道时输出低电平,当经过起跑线时,左右输出1,中间两个输出0。
当在正常道路时,都输出0。
当经过全黑路障时,由于我们调整中间两个对管距离小于单个路障宽度,故在进和出路障时均不能输出起跑线时的逻辑值。
将起跑线处逻辑值处理后利用单片机的一路中断即可准确无误的检测到起跑线。
当然,本方案也有不足之处,如果经过起跑线时车体严重偏离跑道中线显然此方案是不可行的,单经过实践验证,在车体状态良好的情况下,检测到起跑线的准确度达到了98%以上,并且基本上没有误判的情况。
3.6模型车尺寸与外形照片
项目
参数
路径检测方法(赛题组)
光电平衡组
车模几何尺寸(长、宽、高)(毫米)
长85mm,宽180mm,高280mm
车模轴距/轮距(毫米)
0mm/162mm
车模平均电流(匀速行驶)(毫安)
1200mA
电路电容总量(微法)
1900uf
传感器种类及个数
线性CCD一个,旋转编码器2个,光电对射管4个,陀螺仪ENC-03M,MMA7260
新增加伺服电机个数
无
赛道信息检测空间精度(毫米)
4mm
赛道信息检测频率(次/秒)
100
主要集成电路种类/数量
MC9S12XS128MAL
车模重量(带有电池)(千克)
1.23
模型车外形照片:
第四章车模软件设计
4.1软件系统概述
在智能车硬件系统设计完毕之后,剩下的就是车模软件算法的设计,这也是车模设计过程中最重要的部分。
车模的软件设计属于典型的前后台程序设计思路,主要包含的传感器数据采集与处理程序,控制算法PID程序以及马达驱动程序等若干模块,程序设计采用CPU分时的方法,利用一固定定时中断同步各个程序段的运行时序,顺序执行整个程序。
4.2PID算法介绍
在过程控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制的PID控制器(亦称PID调节器)是应用最为广泛的一种自动控制器。
它具有原理简单,易于实现,适用面广,控制参数相互独立,参数的选定比较简单等优点;而且在理论上可以证明,对于过程控制的典型对象──“一阶滞后+纯滞后”与“二阶滞后+纯滞后”的控制对象,PID控制器是一种最优控制。
PID调节规律是连续系统动态品质校正的一种有效方法,它的参数整定方式简便,结构改变灵活。
根据控制对象的不同,有时使用PD控制,也有时使用PI控制,本车模软件设计中,因为有多个控制环节,故在平衡控制中采用了PD控制,速度控制中采用PI控制,而在转向控制中使用了PID控制。
传统PID的算法公式是:
⊿U(n)=Kp[e(n)-e(n-1)]+Kie(n)+Kd[e(n)-2e(n-1)+e(n-2)]
U(n)=⊿U(n)+U(n-1)
e(n),e(n-1),e(n-2)就是历史上的三个设定值跟过程值之间的偏差了。
这是一个增量式的PID算式。
另外还有就是位置式PID算法,其算法公式如下:
比例控制:
就是对偏差进行控制,偏差一旦产生,控制器立即就发生作用即调节控制输出,使被控量朝着减小偏差的方向变化,偏差减小的速度取决于比例系数Kp,Kp越大偏差减小的越快,但是很容易引起振荡,尤其是在迟滞环节比较大的情况下,Kp减小,发生振荡的可能性减小但是调节速度变慢。
但单纯的比例控制存在静差不能消除的缺点,这里就需要积分控制。
积分控制:
实质上就是对偏差累积进行控制,直至偏差为零。
积分控制作用始终施加指向给定值的作用力,有利于消除静差,其效果不仅与偏差大小有关,而且还与偏差持续的时间有关。
简单来说就是把偏差积累起来,一起进行运算。
微分控制:
它能敏感出误差的变化趋势,可在误差信号出现之前就起到修正误差的作用,有利于提高输出响应的快速性,减小被控量的超调和增加系统的稳定性。
但微分作用很容易放大高频噪声,降低系统的信噪比,从而使系统抑制干扰的能力下降。
因此,在实际应用中,应慎用微分控制。
4.3直立控制程序设计
车模直立控制程序就是利用经典的反馈控制思路,马达作为驱动机构,车模是一个倒立摆,在程序的控制下通过给定不同的占空比,可以实现马达的正转与反转,于是我们需要的就是车模姿态的反馈信息,即车模倾角与车模摆动方向的角速度。
采用的是陀螺仪和加速度计。
由于加速度计测量的是沿一个轴方向的加速度,因而在车模静止且加速度计没有漂移的情况下,可以较为准确的获得车模的角度信息。
但是微观上来看,车模始终处于不断的加速减速阶段,因而前进方向上的加速度会对车模加速度计的测量造成很大的影响,因而导致产生错误的角度值。
陀螺仪具有很好的测量角速度的性能,但是要想进行积分得到角度则是会存在很大误差的,伴随着器件漂移和时间的推移,算出的角度值是极为有差错的,因而单使用陀螺仪也是存在很大问题的。
通用的做法是采用陀螺仪和加速度计两个传感器,利用二者信息的融合计算滤波,则可以达到很好的效果,基本上在一定的扰动下可以很好的反映车体实时的角度和角速度信息。
实际车模中使用的角度和角速度计算方法如下:
floatAngle=0,Angle_dot=0;
floatQ_angle=0.001,Q_gyro=0.003,R_angle=0.67,dt=0.0025;
floatP[2][2]={{1,0},{0,1}};
charC_0=1;
floatE=0;
floatq_bias=0;
floatAngle_err=0;
floatPCt_0=0,PCt_1=0;
floatK_0=0,K_1=0;
floatt_0=0,t_1=0;
floatPdot[4]={0,0,0,0};
voidfilter(floatangle_m,floatgyro_m)
{
Angle+=(gyro_m-q_bias)*dt;
Pdot[0]=Q_angle-P[0][1]-P[1][0];
Pdot[1]=-P[1][1];
Pdot[2]=-P[1][1];
Pdot[3]=Q_gyro;
P[0][0]+=Pdot[0]*dt;
P[0][1]+=Pdot[1]*dt;
P[1][0]+=Pdot[2]*dt;
P[1][1]+=Pdot[3]*dt;
Angle_err=angle_m-Angle;
PCt_0=C_0*P[0][0];
PCt_1=C_0*P[1][0];
E=R_angle+C_0*PCt_0;
K_0=PCt_0/E;
K_1=PCt_1/E;
t_0=PCt_0;
t_1=C_0*P[0][1];
P[0][0]-=K_0*t_0;
P[0][1]-=K_0*t_1;
P[1][0]-=K_1*t_0;
P[1][1]-=K_1*t_1;
Angle+=K_0*Angle_err;
q_bias+=K_1*Angle_err;
Angle_dot=gyro_m-q_bias;
}
其中,函数形参为传感器测得元数据(经过单位变换),Angle和Angle_dot为最终滤波输出结果,分别为角度和角速度。
dt为滤波器采样时间,其余均为中间变量。
在得到了具体的角度和角速度信息后,采用典型的PD控制产生输出量。
duty_PD=Kp_Angle*Angle_Err+Kd_Angle*Angle_V;
其中Angle_Err为角度偏差,Angle_V为角速度。
当仔细调整Kp_Angle和Kd_Angle,车模可以实现直立。
4.4速度控制算法
速度控制就是使车模按一定的速度匀速行驶,但是因为车模本身只具有一个执行机构,即两个主控马达,因而就涉及到马达的复用问题,为了保持车模的直立不倒,应该在车模速度可控的前提下尽量对车模平衡造成最小的干扰,平衡控制采用大约3ms一个周期,而速度控制则采用大约50ms一个周期,这样的方法就可以使速度即可控,平衡也不被打破。
速度控制中采取的也是经典的PI控制,通过编码器测定侧模速度,然后与设定速度比较产生误差,在误差的基础上进行PI运算,然后得到的结果平滑处理之后直接叠加与平衡控制输出之上,即可实现速度的控制。
控制算法如下:
PID_OUT=Kp_speed*Err_speed+Ki_speed*Err_speed_sum;
Err_speed_sum+=Err_speed
其中积分项要进行限幅,最终输出也需要限幅,这些都是根据车模具体情况进行调整。
4.5线性CCD驱动模块
线性CCD属于方向控制中赛道信息获取的主要传感器,因为它使用串行接口,因而在使用上要进行时序信号的匹配,我们使用的单片机的若干IO口来产生驱动,并使用AD来采样线性CCD数据,线性CCDTSL1401的时序如下:
其中,CLK为采样时钟信号,在每个下降沿AO线输出像素点模拟值,可由AD采样获得。
SI为曝光信号,当出现一个高电平时,内部电路清空电荷,相当于控制了CCD的曝光时间,在光线较强或较暗的情况下可以通过调整SI的位置来调节图像亮度。
利用IO口和AD采样采集CCD数据的程序逻辑如下:
SI_SetVal();
SamplingDelay();
CLK_SetVal();
SamplingDelay();
SI_ClrVal();
SamplingDelay();
error=ADC_Measure(TRUE);
error=ADC_GetValue16(&temp_int);
*p1++=(byte)(temp_int[CCD_1]>>8);
CLK_ClrVal();
for(i=0;i<127;i++)
{
SamplingDelay();
SamplingDelay();
CLK_SetVal();
SamplingDelay();
SamplingDelay();
error=ADC_Measure(TRUE);
error=ADC_GetValue16(&temp_int);
*p1++=(byte)(temp_int[CCD_1]>>8);
CLK_ClrVal();
}
SamplingDelay();
SamplingDelay();
CLK_SetVal();
SamplingDelay();
SamplingDelay();
CLK_ClrVal();
4.6转向控制算法
智能车的转向控制是利用两个马达的差速方法实现的,根据CCD采集来的图像数据存放在一个128大小的数组里面,值得大小为0-255,在中线64点处开始扫描整个数组,利用差值法找到黑色边界线,利用两个黑色边界线的坐标中点与车体中点64比较,得到转向误差,基于此进行PID运算得到转向输出值,叠加到平衡控制和速度控制的叠加值之上即可(差速叠加)。
主要算法如下:
for(Black_L=0,i=(uint8_t)Start_Line;i>2;i--)
{
a=(int16_t)CCD_Data[i]-(int16_t)CCD_Data[i-3];
if(a>=Threshold)
{
Black_L=(int16_t)(i-1);
break;
}
}
for(Black_R=127,i=(uint8_t)Start_Line;i<125;i++)
{
a=(int16_t)CCD_Data[i]-(int16_t)CCD_Data[i+3];
if(a>=Threshold)
{
Black_R=(int16_t)(i+1);
break;
}
}
Start_Line=(uint16_t)(Black_L+Black_R)/2;
其中(uint16_t)(Black_L+Black_R)/2即为实时车体位置。
然后PID运算:
value=Kp_Dir*(float)Dir_Err+Kd_Dir*Dir_Differential+Ki_Dir*dir_err_sum;
即得到转向控制输出值value。
4.7起跑线检测
起跑线检测根据前面的描述,由于采用了光电对管,最后综合出一条起跑线检测中断,因而只需在程序第二次(第一次为起跑时)进入中断时进行停车即可。
因而该方案方便简洁高效。
第五章智能车开发平台和调试技术
5.1CodeWarrior简介
Freescale16位微处理器最为常用的开发工具是CodeWarriorDevelopmentStudio,我们采用的是CodeWarriorDevelopmentStudioforS12(X)V5.0,为官方发布的免费版本,有32K的C语言代码限制。
不过对于智能车的程序来说,程序是在32K之内,所以已经足够了。
CodeWarrior作为官方推荐的IDE,有着稳定、高效的特点,友好简洁的界面很容易上手。
支持函数、变量、宏定义的索引跳转查看功能,这种贴心的功能在代码量庞大而很难以找到函数或变量的定义时尤为方便。
CodeWarrior的界面如下图所示:
图5.1CodeWarrior的界面
CodeWarrior的界面虽然简洁,但支持的编译选项却很强大。
CodeWarrior开发套件还带有Ture-TimeSimulator&Real—TimeDebugger仿真调试工具,可以利用软件仿真调试,也可以和BDM联合调试,大大提高了开发人员的调试效率。
除此之外,还有一个我们平常很少用到但非常实用的工具——ProcessorExpert,有了它,我们就可以利用图形界面来“写”程序了。
另外不得不提的是CodeWarrior开发套件中自带的帮助文档,有开发环境手册、编译器手册、链接器手册、CPU12编程指南等实用资料。
各主题自成章节,在众多的编译器中,能够提供如此详尽的帮助文档,实属罕见。
从中也透露出Freescale在此开发套件上的细心投入。
5.2软件开发平台
本次飞思卡尔智能车大赛的软件开发平台为CodeWarrior。
CodeW
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 卡尔 智能 竞赛 光电 平衡