ImageVerifierCode 换一换
格式:DOCX , 页数:28 ,大小:532.83KB ,
资源ID:3906869      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3906869.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(智能车源程序+很详细 增强版.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

智能车源程序+很详细 增强版.docx

1、智能车源程序+很详细 增强版由于今年组委会光电管和摄像头分开比赛。所以传感器部分我们选择了光电管,比赛以小车的速度记成绩,为了让小车更快更稳得跑完全程,传感器的探测距离必须要远,既要有大的前瞻,普通的红外对管由于功率较小,探测距离增大时,干扰严重,所以我们自制了大功率对管,同时采用了程序控制脉冲发光的办法,有效的降低了发热,提高了系统的稳定性。系统采用采用了7.2V 2000mAh Ni-Cd蓄电池作为系统能源,并且通过稳压电路分出6伏,5伏已分别给舵机和单片机供电。直流电机驱动模块接收速度控制信号控制驱动电机运行,达到控制车速目的。转向伺服模块控制舵机转向,进而控制智能车转弯。速度测量模块实

2、时测量智能车车速,用于系统的车速闭环控制,以精确控制车速。系统充分使用了MC9S12DG128单片机的外围模块,具体使用到的模块包括:ADC模拟数字转换模块、定时器模块、PWM脉冲宽度调制模块、中断模块、I/O端口和实时时钟模块等。系统调试过程中,使用了组委会提供的代码调试环境CodeWarrior IDE,同时使用了清华的Plastid2软件进行了仿真试验。 图1.1 系统结构框图3.1舵机部分 为了使转弯更加灵活,对舵机相关部分作了部分改动。首先,我们将舵机力臂加长85mm。这样,对于同样的转弯角度值,只需更小的舵机转角,减小了舵机转弯时惯性带来的弊端。其次,我们将舵机反装,使舵机连杆水平

3、,因为此时舵机提供的力全部用在转弯上。3.2前轮部分 为了增加前轮转弯时的稳定性,对前轮相关部分进行了部分改动。首先,更改前后垫片的数量,使前轮主销后倾,这样,车轮具有更好的自动回正功能。其次,更改连杆的长度,使车轮外倾,车轮转弯时,前半部分重心上移,促使赛车转弯更加稳定。再次,我们通过更改舵机连杆的长度,增加前轮前束,同样增加了前轮的稳定性。3.3底盘部分 为了提高赛车运行时的稳定性,对地盘相关部分作了部分改动。首先,前轮相关位置加垫片,降低了前轮重心。其次,更改后轮车轴处的调节块,使后轮重心升高,这样,车身前倾,一定程度上,增加了车的稳定性。3.4后轮部分 首先,更换后轮轮距调节块,使后轮

4、两轮之间间距加大。这样,车在转弯时不容易产生侧滑。其次,调节后轮差速,使赛车转弯更加灵活。4.1电源部分为了能使智能车系统能正常工作,就需要对电池电压调节。其中,单片机系统、车速传感器电路需要5V电压,路径识别的光电传感器和接收器电路电压工作为5V、伺服电机工作电压范围4.8V到6V(或直接由电池提供),直流电机可以使用7.2V 2000mAh Ni-cd蓄电池直接供电。考虑到由于驱动电机引起的电压瞬间下降的现象,因此采用低压降的三端稳压器成为必然。我们在采用lm7805,和lm7806作为稳牙芯片。经试验电压纹波小,完全可以满足要求。电池(7.2v) 2000mAh Ni-cd 5V6V7.

5、2V测速板Encoder图4.1系统电压调节图 图4.2 7805电路图图4.3 电源模块示意图4.2电机驱动电路电机驱动使用飞思卡尔专用电机驱动芯片MC33886。驱动电路如图4.4 所示。为了增大驱动能力,减少单片发热量,电路采用两片MC33886 并联的方案。系统使用PWM 控制电机转速,充分利用单片机的PWM 模块资源。电机PWM 频率设定为8KHz。MC33886芯片的工作电压为5-40V,导通电阻为140毫欧姆,PWM频率小于10KHz,具有短路保护、欠压保护、过温保护等功能。电机驱动芯片安装在制作的电机驱动PCB板上,在PCB 板设计时,考虑到芯片散热问题,在芯片腹部设计了方型的

6、通孔,实际运行效果表明芯片散热均匀,设计合理。为了防止电动机突然停止时产生的电磁干扰,在电动机的两端焊接了一个0.1F 滤波电容。图4.4 两片MC33886并联使用图4.5 两片MC33886并联使用的实物图在图中可以看到,我们使用PWM23和PWM45作为电机驱动PWM信号,两个PWM通道级联可以使其输出更加精确。在程序中,我们把PWM值直接转换成了以米/秒为单位的绝对速度,这样使智能车的速度更加直观切易于调试。 4.3测速电路由于考虑到成本需要,我们采用了红外对管和黑白码盘作为测速模块的硬件构成。其中码盘为32格的黑白相间圆盘,如下图所示:图4.5 码盘红外传感器安装在正对码盘的前方,虽

7、然这样做精度比编码器要低很多,但是成本低廉制作容易,如果智能车速度较快,可以考虑再减少码盘上黑白色条的数量即可。当圆盘随着齿轮转动时,光电管接收到的反射光强弱交替变化,由此可以得到一系列高低电脉冲。设置9S12 的ECT 模块,同时捕捉光电管输出的电脉冲的上升沿和下降沿。通过累计一定时间内的脉冲数,或者记录相邻脉冲的间隔时间,可以得到和速度等价的参数值。测速电路使用自行研制的红外反射式光电测速传感器。速度测量电路使用红外反射式光电对管RPR220,自行制作的编码盘,比较电路等组成。图4.6测速电路速度测量电路图2.8所示。红外反射式光电对管的光敏三极管信号通过比较器处理后输入单片机的计数器模块

8、,利用单片机的输入捕捉功能,处理智能车速度信息。自制的编码盘有24道黑色条纹,电机旋转一周将产生24次输入捕捉中断。单片机记录两次中断的时间间隔T。两次中断对应于智能车前进的距离S为:16.5/24 cm,即0.6875cm,其中16.5cm为智能车后轮实测周长7。智能车实时速度V(cm/s)的计算公式如下: 4.4红外对管检测电路 由于我们采用了大功率对管,所以红外对管的电路是整个电路中要求最高的,不紧要保证对管正常工作,而且还要考虑整个电路的能耗和发热问题。经测试我们发现单个对管在通以100mA到170mA电流时可以。保证抬高20到30厘米的距离。此时每个对管的管压降为1.2到1.5伏。为

9、了进一步加大发光量,我们采用了双发射管的办法,即一个接受管对应两个发射管。为了降低整体的能耗。我们让同一对的发射管串联,14对发射管再并联。同时使用了irf540进行开关控制。控制对管脉冲发光。开关频率为200HZ。这样既保证了大前瞻探测的需要,又降低了整体的能耗和对电源的冲击 图4.7 先串联再并联的脉冲发光对管电路图。 图4.8对管实物图反面图4.9 对管实物图正面4.5拨码开关电路 由于在智能车比赛开始后,不能够对智能车硬件及软件进行修改,在保证了硬件有效可靠的同时,软件有可能不能够适应新场地,所以设计拨码开关对智能车有关参数进行设置也是必要的。拨码开关电路如下图所示:图4.9 拨码开关

10、这是一个八段的拨码开关,我们把它成成上下连个部分,显然,每个部分都有16种状态,前四个来改变舵机参数,后四个改变直流电机参数,这样对于适应新的场地很有好处。5.1路径搜索算法对于本控制系统采用14对光电对管的方案,单排排列在车体头部10cm处。编号为6、7的光电对管处于正中央位置。利用14对传感器进行道路识别。传感器对白色的反射率比黑色的大。单片机ADC读入值相应也大。在程序中对传感器信号进行处理,判断传感器是否检测到黑色引导线。将单个传感器对白色和黑色路面的ADC值之差分为平均的两段,每次处理实时传感器信号时,判断本次采样的ADC值与黑色路面ADC值之差落在两段中的哪一段。如果在靠近黑色的一

11、段,则判定该传感器检测到黑线,将该传感器对应的变量置为判定值1;如果在靠近白色的一段,则判定该传感器检测到白线,将该传感器对应的变量置为判定值1;为了增强判断的准确性,在对ADC值采样时,采用了中值滤波方法,以去除瞬间的干扰。路径检测完后,将测的的路径值暂时存储,然后将路径信息传递给舵机和电机控制部分,以选择给定合适的转角和速度。5.2舵机、电机的控制智能车的舵机和电机都采用了经典的PID控制方法。但是由于舵机和电机性能的不同要求,分别对其进行了不同的修改。PID控制器由比例单元(P)、积分单元(I)和微分单元(D)组成。其输入e (t)与输出u (t)的关系为式中积分的上下限分别是0和t因此

12、它的传递函数为:G(s)=U(s)/E(s)=kp(1+1/(TI*s)+TD*s)其中kp为比例系数; TI为积分时间常数; TD为微分时间常数比例KP用来控制当前,误差值和一个负常数P(表示比例)相乘,然后和预定的值相加。P只是在控制器的输出和系统的误差成比例的时候成立,KP能够快速的跟随变化量。及时的产生与之相关的调节作用。但是KP是有差调节,无法消除静态误差。积分KI来控制过去,误差值是过去一段时间的误差和,然后乘以一个负常数I,然后和预定值相加。I从过去的平均误差值来找到系统的输出结果和预定值的平均误差。一个简单的比例系统会振荡,会在预定值的附近来回变化,因为系统无法消除多余的纠正。

13、通过加上一个负的平均误差比例值,平均的系统误差值就会总是减少。所以,最终这个PID回路系统会在预定值定下来。 微分KD 来控制将来, 计算误差的一阶导,并和一个负常数D相乘,最后和预定值相加。这个导数的控制会对系统的改变作出反应。导数的结果越大,那么控制系统就对输出结果作出更快速的反应。这个D参数也是PID被成为可预测的控制器的原因。D参数对减少控制器短期的改变很有帮助。一些实际中的速度缓慢的系统可以不需要D参数。舵机PID 由于舵机是一个具有大的延迟的执行机构,所以在PID控制中不能加入积分环节。否则会导致小车震荡。所以小车采用PD控制。同时加入一个一阶惯性环节,构成不完全微分,给小车一个超

14、前的调节。实际使用中,为了减少计算时间,将位置式PID转化为增量式增量式PID公式: 电机PID控制 小车行使过程中,随着跑道的不同,需要配合不同的速度值,因此对电机的PID是一个给定值不断变化的PID。 小车的目标速度(Object_Speed)给定规则:1 小车在直道上,Object_Speed为最大值200。2 小车在大弯道上,Object_Speed为160。3 小车在小弯道或S型弯道上,Object_Speed为1204 小车冲出跑道,Object_Speed为70。5 小车由直道进入弯道,Object_Speed逐渐减小。6 小车由弯道进入直道,Object_Speed逐渐加大。在

15、实验中发现,PID的超调量主要在第一个波形中起作用,也即单速度由很大到很小的时候,或由低速突然加到高速的过程中,会出现很大的超调。但是这个超调并不是有害的,因为,当速度要求突变的时候,往往是小车由直道入弯道,或者由弯道入直道的过程,这个过程往往需要很快的大加减速,而由于小车的惯性,一般的PID调节难以满足要求,这时使用大的超调量可以使小车有一个加速或刹车的过程,使之更好的达到要求速度。6.1 Codewarrior 开发环境在整个开发调试过程中,使用Metrowerks公司为MC9S12 系列专门提供的全套开发工具(Freescale Codewarrior IDE 4.6)。这是一套用C语言

16、进行编程的集成开发环境本文智能车定位系统的软件设计部分就是在此开发环境下完成的。Codewarrior 是由Metrowerks 公司提供的专门面向Freescale 所有MCU 与DSP 嵌入式应用开发的软件工具。其中包括集成开发环境IDE、处理器专家、全芯片仿真、可视化参数显示工具、项目工程管理、C 交叉编译器、汇编器、链接器以及调试器。CodeWarriorIDE 能够自动地检查代码中的明显错误,它通过一个集成的调试器和编辑器来扫描你的代码,以找到并减少明显的错误,然后编译并链接程序以便计算机能够理解并执行你的程序。每个应用程序都经过了使用象CodeWorrior 这样的开发工具进行编码

17、、编译、编辑、链接和调试的过程。Metrowerks Codewarrior IDE 中的mc9s12dg128.h 文件对所有寄存器对应的存储映射地址都进行了宏定义,开发者在软件开发时直接调用这些宏就可以了。6.2 软件仿真为了更好的定量分析影响小车行驶的各个因素,而且最大限度的节约时间和成本。我们采用了软件仿真和实际调试相结合的办法。仿真软件使用了清华的PLAST2。通过仿真,我们发现:1、 小车传感器的探测距离对速度有着决定的影响。所以传感器应该尽量的探测更远。但是传感器的探测距离不能超过最小转弯的半径。否则会出现盲区。2、 适度增加舵机的灵敏度,可以使转弯更加灵活。所以我们在实际调试中

18、,加长了舵机的力臂。6.2 实际调试实际调试过程中,我们发现小车在直道上会出现左右抖动的现象,通过软件设置死区或其他处理方法,效果都不是很明显,最后发现小车舵机和前轮的间隙是罪魁祸首,通过把前轮设置为内八形,完美的解决了这个问题。在调试过程中,我们加了液晶显示,还设置了蜂鸣器,这些辅助设备在比赛中为了减轻小车的重量,都是不需要的。但是在调试过程中,通过这些设备,可以及时的了解小车运行的情况,达到事倍功半的效果。表7.1模型车技术参数统计:项目参数路径检测方法(赛题组) 光电组车模几何尺寸(长、宽、高)(毫米)385*220*60车模轴距/轮距(毫米)200/150车模平均电流(匀速行驶)(毫安

19、)200 电路电容总量(微法)430传感器种类及个数红外对管 15个新增加伺服电机个数 0赛道信息检测空间精度(毫米) 9赛道信息检测频率(次/秒)200主要集成电路种类/数量 9s12单片机最小系统/1 33886电机驱动电路/4 速度检测电路/1车模重量(带有电池)(千克)0.9参考文献1 黄开胜、金华民、蒋狄南,韩国智能模型车技术方案分析,北京:清华大学汽车安全与节能国家重点实验室,2004.32 邵贝贝著,单片机嵌入式应用的在线开发方法,北京:清华大学出版社,2004.23 LM2940 datasheet, July 2000, National Semiconductor4 LM7

20、806 datasheet National Semiconductor5 RPR220 datasheet, ROHM6 Semiconductor Technical Data MC33887 Aug 2002 Motorola Inc7 大赛车模拼装手册8 CodeWarrior IDE 3.1 help datasheet9 MC9S12DG128 Device User Guide, October 2002 Motorola Inc10 HCS12 CORE datasheet, Augt 2000 Motorola Inc11 S12PWM8B8CV1 datasheet, Ma

21、r 2002 Motorola Inc12 S12ATD10B8CV2 datasheet, Augt 2002 Motorola Inc13 S12ECT16B8V1 datasheet, July 2002 Motorola Inc14 15 16 程序电机PID控制程序typedef unsigned char BOOL;typedef unsigned char INT8U; /无符号8位数typedef signed char INT8S; /有符号8位数typedef unsigned int INT16U; /无符号16位数typedef signed int INT16S; /

22、有符号16位数typedef unsigned long INT32U; /无符号32位数typedef signed long INT32S; /有符号32位数typedef float FP32; /单精度浮点数typedef double FP64; /双精度浮点数#define MAX_32 (signed long)0x7fffffffL#define MIN_32 (signed long)0x80000000L#define MAX_16 ( signed int)0x7fff#define MIN_16 ( signed int)0x8000typedef struct sig

23、ned int ProportionalGain; signed int ProportionalGainScale; signed int IntegralGain; signed int IntegralGainScale; signed int DerivativeGain; signed int DerivativeGainScale; signed int PositivePIDLimit; signed int NegativePIDLimit; signed int IntegralPortionK_1; signed int InputErrorK_1;sCaiXinBoPID

24、;sCaiXinBoPID SpdPID; extern signed int CaiXinBoPIDController( signed int DesiredValue, signed int MeasuredValue,sCaiXinBoPID *pParams);static signed long L_sub(register signed long src_dst, register signed long src2) return (src2-src_dst);static signed long L_deposit_l(register signed int ssrc) ret

25、urn (signed long)(ssrc);static signed int extract_l(register signed long lsrc) return ( signed int)lsrc;static signed long L_mult(register signed int sinp1, register signed int sinp2) register signed long laccum; laccum=sinp1; laccum*=sinp2; return laccum;static signed long L_add(register signed lon

26、g src_dst, register signed long src2) return (src_dst+src2);signed int CaiXinBoPIDController( signed int DesiredValue, signed int MeasuredValue,sCaiXinBoPID *pParams) signed long ProportionalPortion, IntegralPortion, PIDoutput; signed int InputError; /*-*/ /* Saturation mode must be set */ /* InputE

27、rror = sub(DesiredValue, MeasuredValue); */ /* input error */ /*-*/ /* input error calculation - 16bit range, with and without saturation mode */ PIDoutput = L_sub(L_deposit_l(DesiredValue),L_deposit_l(MeasuredValue); /* input error - 32bit range */ if(PIDoutput MAX_16) /* inpur error is greater tha

28、n 0x00007fff = 32767 - 32bit range */ InputError = MAX_16; /* input error = max. positive 16 bit signed value */ else if(PIDoutput ProportionalGain), InputError) (pParams - ProportionalGainScale + 1); /*-*/ /* integral portion calculation */ IntegralPortion=L_mult(pParams-IntegralGain), InputError) (pParams-IntegralGainScale + 1); /* integral portion in step k + integral portion in step k-1 */ IntegralPortion=L_add(IntegralPortion, L_deposit_l(pParams-IntegralPortionK_1); /* integral

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1