第八届光电组兰州理工大学机械工程一队技术报告.docx
- 文档编号:24224329
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:72
- 大小:2.04MB
第八届光电组兰州理工大学机械工程一队技术报告.docx
《第八届光电组兰州理工大学机械工程一队技术报告.docx》由会员分享,可在线阅读,更多相关《第八届光电组兰州理工大学机械工程一队技术报告.docx(72页珍藏版)》请在冰豆网上搜索。
第八届光电组兰州理工大学机械工程一队技术报告
第八届“飞思卡尔”杯全国大学生
智能汽车竞赛
技术报告
学校:
兰州理工大学
队伍名称:
机械工程一队
参赛队员:
胡世林
刘维平
唐美
带队教师:
杨萍
韩致信
关于技术报告和研究论文使用授权的说明
本人完全了解第八届“飞思卡尔”杯全国大学生智能汽车竞赛关保留、使用技术报告和研究论文的规定,即:
参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。
参赛队员签名:
带队教师签名:
日期:
摘要
本论文中设计的智能车系统采用飞思卡尔公司的MC9S12XS128作为控制核心,以BTS7970为电机驱动模块,通过编码器获得电机速度信息。
使用TSL1401线性CCD获取赛道信息;在智能车控制方面,基于位置式及增量式的PID控制算法在高速行驶赛车的路径优化和速度控制上有着不错的效果。
为了提高车的速度和稳定性,我们使用NRF2401无线通讯模块、等多种调试工具。
结果表明,本系统可靠有效。
关键词:
MC9S12XS128,BTS7970,PID,NRF2401
Abstract
WedesignthesmartcarsystembasedonthecontrolofMC9S12XS128inthispaper.WechooseBTS7960tobethemotordrive,andencodertofeedbackthespeedofthemotor.WeuseTSL1401linearsensortogettheinformationofthetrack.Duringthecontrolofthesmartcar,thepositionalPIDandIncreasingPIDperformgoodonpathoptimizationandspeedcontrolinhighspeedingpattern.Inordertoimprovethespeedandthestabilityofthesmartcar,weusekindsofmethods,suchaswirelessmodule.Itturnedoutthatthesystemisreliableandeffective.
Keyword:
MC9S12XS128,BTS7970,PID,NRF2401
第一章引言
全国大学生智能汽车比赛是经全国高等教育司研究,委托高等学校自动化专业教学指导分委会主办的,旨在培养创新精神、协作精神,提高工程实践能力的大学生科技创新活动。
本次大赛中,使用竞赛秘书处统一指定的D车竞赛车模套件,采用飞思卡尔半导体公司的16位微控制器MC9S12XS128作为核心控制单元,自主构思控制方案进行系统设计,包括传感器信号采集处理、电机驱动以及控制算法软件开发等。
制作一个能够自主识别路线的两轮自平衡智能车,让车模以两个后轮驱动在专门设计的跑道上自动识别道路行驶。
本技术报告主要对小车的整体设计思路,硬件与软件的设计及实现,机械结构的安装及优化以及赛车的调试的过程作简要的说明。
第二章系统总体设计
2.1系统概述
系统概述图如图2.1所示
图2.1系统概述
2.1.1任务分解
两轮赛车通过检测自身倾斜角度以及倾斜角速度的大小,通过单片机处理采集得到的角度、角速度信号,实现对赛车自身平衡以及前进的控制,再以TSL1401线性CCD采集到的128个像素点的值为基础,通过单片机处理采集到得赛道信息,实现对赛车的转向控制,进而识别赛道达到路径讯迹的目的。
车模的运行可以分为三个过程:
直立、前进、转弯。
但是暂时找不到其他方法可以不依赖电机而可以控制任意一个过程,所以只能由控制车模两个电机旋转方向及速度实现对车模的控制,因此将车模运动控制任务分解成以下三个基本任务:
(1)控制车模直立:
通过控制两个电机正反向运动保持车模直立状态;
(2)控制车模速度:
通过控制两个电机转速速度实现车模行进控制;
(3)控制车模转向:
通过控制两个电机之间的转动差速实现车模转向控制。
2.1.2直立控制分析
如图2.1.2所示,车身可看作是一个倒立摆,要想通过控制使得倒立摆能够像单摆一样,稳定在垂直位置,只有两个办法:
一个是改变重力的方向;另一个是增加额外的受力,使得恢复力与位移方向相反才行。
但显然能够做的只有第二种方式。
控制倒立摆底部车轮,使得它作加速运动。
这样站在小车上(非惯性系)看倒立摆,它就会受到额外的力(惯性力),该力与车轮的加速度方向相反,大小成正比。
这样倒立摆所受到的回复力为
(2-1)图2.1.2
式中,假设控制车轮加速度与偏角成正比,比例为k1。
显然,如果k1>g,(是重力加速度)那么回复
力的方向便于位移方向相反了。
此外,为了使得倒
立摆能够尽快地在垂直位置稳定下来,还需要增加阻尼力,与偏角的速度成正比,方向相反。
因此式(2-1)可变为
(2-2)
所以车模车轮加速度的控制算法为
所以我们需要测量小车的角度θ和角速度θ’即可控制直立。
2.1.3速度控制分析
车模电机的转速与施加在其上的电压成正比。
通过传统的PID反馈控制,便可以精确控制电机的运行速度,从而控制车模的运行速度。
不过前提是保持车身平衡。
2.1.4转弯控制分析
利用TSL1401线性CCD检测赛道信息计算赛道偏差并计算差速所需电压分别与车模速度控制信号进行加和减,左右轮差动控制电压,使得车模左右轮运行角速度不一致进而控制车模方向。
2.2车模倾角检测
通过加速度计检测回来的数据与重力加速度比较,可以得到车身倾角,再对此信号进行微分便可以获得倾角加速度。
但在实际车模运行过程中,由于车模本身的运动所产生的加速度会产生很大的干扰信号叠加在上述测量信号上,使得输出信号无法准确反映车模的倾角,尽管平滑滤波可以把波动滤掉,但是也会无法准确反映车模倾角变化,所以需要在加上一个陀螺仪检测角速度。
2.3整车布局
小车整体布局如图2.3所示
1)机械结构方面:
1电路板紧贴车身,电池放在车身后轮子稍上,降低重心;
2采用高强度、低质量的碳素杆作为线性CCD支架;
3简化支架,单杆伸出,采用三角形结构固定该杆使其稳固可靠;
4陀螺仪和加速度计模块装在车身中间,保持水平,使得检测回来的数据更加精确,并且使得左右转弯差异变小;
5剪短不必要的连线,减轻车重。
2)在硬件方面:
力求电路构成简单,稳定性高;传感器的安装可靠,外界对系统电路的干扰小。
硬件主要设计思路如下:
主电路板外形贴合车身的边沿,安装时尽量贴近车底盘,降低重心;电路板布线尽量采用单回路布线,并且将数字地与模拟地分离,并且在容易引入干扰的器件旁加入旁路电容;将容易产生静电干扰的部分,接入电路板的模拟地中。
3)在软件方面:
力求控制算法适合D车的特性,精确完成转向控制和速度,并具有较高的稳定性。
采用S12作为控制核心,通过线性CCD采集赛道信息,从而对电机进行控制;通过编码器反馈速度信息,实现对速度的控制。
图2.3整车布局
第三章系统机械结构设计与实现
3.1车模
图3.1D车车模结构
电机:
RN260
3.2车模车身简化及固定
我们采用赛制规定的D车车模进行改装,原来的车模后轮支架与底盘之间采用了活动连接方式,但为了保证车模直立的稳定性,需要这个车身变成刚体结构。
所以我们用热熔胶在后轮支架与底盘之间的缝隙处进行粘接。
但在跑的时候车身不稳,故改用废电路板将其固死,为防螺丝松掉,又用AB胶将缝隙粘死。
。
3.3陀螺仪及加速度计固定结构设计
陀螺仪及加速度计对于直立控制至关重要,所以他们的安装位置也是很重要的。
经实际测试,该模块安装在高处,容易受到微小抖动的干扰,影响到车身倾角的检测,而底部需要放电池及电路板等重物,因此我们选择了一个比较正中的位置进行安装。
如图3.3.1所示。
图3.3.1陀螺仪加速度计模块安装
3.4路径传感器固定结构设计
为了车身的稳定,车的重心越靠近车轮越好,所以我们采用了轻质量但高强度的碳素杆做成支架如图3.4所示。
图3.4线性CCD支架
3.5编码器的安装设计
飞思卡尔D车车模具有双电机,为了达到更精准的控速,我们选择在两个电机分别安装编码器用来测速。
我们使用了360线的欧姆龙编码器,编码器可方便的安装在车轮上部,与马达齿轮相互咬合,来达到精确的测速。
编码器的安装如图3.5所示。
图3.5编码器安装
3.6红外模块的安装
由于第八届飞思卡尔智能车比赛光电组要求小车到达终点后自动停车,所以需要检测起跑线。
经过试验,采用CCD检测容易误判,故采用TCRT5000红外对管作为起跑线检测传感器,为了降低重心,我们将该模块装与电池与车体之间的缝隙中。
如图3.6所示。
图3.6红外模块安装
第四章硬件系统的设计与实现
4.1硬件设计总体方案
智能车的硬件系统,主要包括控制电路,电源管理电路,电机驱动电路以及外围传感器构成,实现了信息采集与控制实现等功能。
系统采用的主芯片是红树伟业制作的MC9S12XS128P80管脚的核心板。
4.2系统电路的设计与实现
4.2.1电源管理电路
小车系统中有多个检测模块和驱动模块,需要不同的电源电压,所以电源管理部分要分部完成对各个模块的供电。
系统存在着功率电路与数字电路,为了更好的隔离干扰,使系统的稳定性更高,所以在电源设计方面要考虑分隔开数字地与模拟地。
当小车驱动电机在运动过程中,会在一定程度上拉低电池的电压。
为了提高系统的性能,我们采用低压降的稳压芯片LM2940。
LM2940具有高转换效率,低静态电流等优点,适合本系统工作特点。
本系统中,采用三路LM2940为分别为单片机,速度编码器,线性CCD以及陀螺仪加速度计模块供电,一路LM1117为NRF2401无线通信模块供电。
5V供电如图4.2.2.1所示,3.3V供电如图4.2.2.2所示。
图4.2.2.15V供电
图4.2.2.23.3V供电
4.2.2电机驱动电路
今年D车车模我们采用了4片BTS7970构成全桥驱动,全桥驱动可以输出两路PWM,并且允许通过较大电流,驱动能力强,稳定性好,如图4.2.3.1所示。
图4.2.3.1电机驱动
驱动模块实物图如图4.2.3.2所示。
图4.2.3.2电机驱动模块
4.2.3红外模块电路
红外模块采用三个TCRT5000,LM358构成比较电路,输出高低电平用于起跑线检测,其原理图如图4.2.4所示。
图4.2.4红外模块电
第五章软件系统的设计与实现
5.1主程序
5.1.1程序流程
5.1.2PWM输出
包括三个部分:
直立输出、转向输出和速度输出。
/***********************************************************
函数名称:
AngleControl
函数功能:
入口参数:
出口参数:
无
备注:
***********************************************************/
int16_tAngleControl(void){
int16_tfValue;
int8_tANGLE_CONTROL_P;
int8_tANGLE_CONTROL_D;
//if(g_fCarAngle>0){
ANGLE_CONTROL_P=-7;
ANGLE_CONTROL_D=-2;
/*}else
{
ANGLE_CONTROL_P=6;
ANGLE_CONTROL_D=0;
}*/
if(g_nAngleControlFlag==0){
g_fAngleControlOut=0;
returng_fAngleControlOut;
}
//--------------------------------------------------------------------------
fValue=(CAR_ANGLE_SET-g_fCarAngle)*ANGLE_CONTROL_P+//角速度控制系数
(CAR_ANGLE_SPEED_SET-g_fGyroscopeAngleSpeed)*ANGLE_CONTROL_D;//角度控制系数
/**/if(fValue>ANGLE_CONTROL_OUT_MAX)fValue=ANGLE_CONTROL_OUT_MAX;
elseif(fValue g_fAngleControlOut=fValue; //uart_putchar(UART0,g_fCarAngle>>8); //uart_putchar(UART0,g_fCarAngle); returng_fAngleControlOut; } /*********************************************************** 函数名称: TurnPWM 函数功能: 入口参数: TurnPosition计算黑线位置 TurnMidPosition黑线中点值 *AngerCout角度传感器AD采集次数 *AngerValue采集的AD值 出口参数: 无 备注: ***********************************************************/ uint16_tTurnPWM(uint8_tTurnPosition,uint8_tTurnMidPosition,uint8_t*AngerCout,uint16_t*AngerValue){ int8_tTurnD=0,TurnP=1; int8_tAgerAv; uint16_tTurnPWMM; AgerAv=*AngerValue/*AngerCout; *AngerCout=0; *AngerValue=0; if(g_nDirectionControlFlag==0){ TurnPWMM=0; returnTurnPWMM; } TurnPWMM=TurnP*(TurnPosition-TurnMidPosition)+TurnD*(AgerAv-GZROS_OFFSET); returnTurnPWMM; } /*********************************************************** 函数名称: MotorSpeedOut 函数功能: 入口参数: TurnPosition计算黑线位置 TurnMidPosition黑线中点值 *AngerCout角度传感器AD采集次数 *AngerValue采集的AD值 出口参数: 无 备注: ***********************************************************/ int16_tMotorSpeedOut(int16_tanglePWM,int16_tspeedPWM,int16_tturnPWM) { int16_tLeftMotorOut,RinghtMotorOut; int16_tspeedAvPWM,turnAvPWM; int8_tleftMotorPWM,RingtMotorPWM; speedAvPWM=speedPWM; turnAvPWM=turnPWM/TURNTIMCOUNT; LeftMotorOut=anglePWM+speedAvPWM+turnAvPWM; RinghtMotorOut=anglePWM+speedAvPWM-turnAvPWM; if(LeftMotorOut>MOTOR_OUT_MAX){ LeftMotorOut=MOTOR_OUT_MAX; }elseif(LeftMotorOut LeftMotorOut=MOTOR_OUT_MIN; } if(RinghtMotorOut>MOTOR_OUT_MAX){ RinghtMotorOut=MOTOR_OUT_MAX; }elseif(RinghtMotorOut RinghtMotorOut=MOTOR_OUT_MIN; } if(LeftMotorOut>=0) { leftMotorPWM=LeftMotorOut*100/1280; leftMotorPWM+=0; if(leftMotorPWM>250) leftMotorPWM=250; PWMDTY4=leftMotorPWM; PWMDTY5=0; //FTM_PWM_Duty(FTM0,CH0,leftMotorPWM); //FTM_PWM_Duty(FTM0,CH1,0); } else { leftMotorPWM=LeftMotorOut*(-100)/1280; leftMotorPWM+=0; if(leftMotorPWM>250) leftMotorPWM=250; PWMDTY4=0; PWMDTY5=leftMotorPWM; } if(RinghtMotorOut>=0) { RingtMotorPWM=RinghtMotorOut*100/1280; RingtMotorPWM+=0; if(RingtMotorPWM>250) RingtMotorPWM=250; PWMDTY6=RingtMotorPWM; PWMDTY7=0; } else { RingtMotorPWM=RinghtMotorOut*(-100)/1280; RingtMotorPWM+=0; if(RingtMotorPWM>250) RingtMotorPWM=250; PWMDTY6=0; PWMDTY7=RingtMotorPWM; } return((LeftMotorOut+RinghtMotorOut)/2); } 5.1.3直立控制 因为暂时找不到别的方法来平衡小车,所以只能靠两个电机来维持小车的平衡。 根据陀螺仪以及加速度计返回来的数据进行积分,得到车身的角度和角速度,并根据积分数据,利用PD控制,5ms控制一下直立,使得车身得以保持平衡,作为速度控制的基础。 5.1.4速度控制 小车的平衡是优先考虑的要素,所以为了不影响小车的平衡,我们不能频繁的改变速度,因此我们100ms才控制一次速度,并且使用增量式PID控制,即将需要的PWM分成20份,每5毫秒加一次,直至加完进行下一次速度控制。 5.1.5转弯控制 车模方向控制是通过TSL1401线性CCD采集的像素点的值判断黑线位置,然后计算与中心位置的偏差,使用位置式PID控制。 5.2卡尔曼滤波 卡尔曼滤波是一种高效率的递归滤波器,它能够从一系列的不完全及包含噪声的测量中,估计动态系统的状态。 加速度计采样回来的数据会因为微小震动而产生毛刺,从而产生误差,因此用卡尔曼滤波结合陀螺仪输出的角加速度,把产生的误差降到最小。 程序如下。 voidKalman_Filter(doubleangle_m,doublegyro_m)//gyro_m: gyro_measure { angle[0]+=(gyro_m-q_bias)*dt;//先验估计 Pdot[0]=Q_angle-P[0][1]-P[1][0];//Pk-'先验估计误差协方差的微分 Pdot[1]=-P[1][1]; Pdot[2]=-P[1][1]; Pdot[3]=Q_gyro; P[0][0]+=Pdot[0]*dt;//Pk-先验估计误差协方差微分的积分=先验估计误差协方差 P[0][1]+=Pdot[1]*dt; P[1][0]+=Pdot[2]*dt; P[1][1]+=Pdot[3]*dt; angle_err=angle_m-angle[0];//zk-先验估计 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;//Kk 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[0]+=K_0*angle_err;//后验估计 q_bias+=K_1*angle_err;//后验估计 angle_dot[0]=gyro_m-q_bias;//输出值(后验估计)的微分=角速度 } 第六章开发工具与系统调试 6.1开发工具 使用了CodeWarriorDevelopmentStudioforMicrocontrollerv10.1集成开发环境。 图6.1.1是软件的安装界面。 图6.1.1安装界面 6.2无线通信模块 在调试过程中,为了能够实时获取智能车在运动过程中的一些参数,以及避免智能车在尝试各种算法时冲出赛道而发生意外,我们使用了NRF2401无线通信模块传输数据。 为此,我们设计了智能车监控软件和遥控器。 无线模块如图6.2.1所示,能够实时收发数据。 上位机界面如图6.2.3所示,可以收集智能车的实时赛道信息,我们能够更加直观方便地观察智能车的状态,方便调试。 图6.2.1NRF2401无线模块 图6.2.3上位机界面 第七章车辆参数 车辆参数如表7.1所示 表7.1车辆参数 车模质量 约1200克 车模几何尺寸 长×宽
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第八 光电 兰州 理工大学 机械工程 一队 技术 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)