第四届全国大学生智能汽车邀请赛技术报告
5.2舵机、电机的控制
智能车的舵机和电机都采用了经典的PID控制方法。但是由于舵机和电机性能的不同要求,分别对其进行了不同的修改。
PID控制器由比例单元(P)、积分单元(I)和微分单元(D)组成。其输入e (t)与输出u (t)的关系为
式中积分的上下限分别是0和t
因此它的传递函数为:G(s)=U(s)/E(s)=kp(1+1/(TI*s)+TD*s)
其中kp为比例系数; TI为积分时间常数; TD为微分时间常数
比例KP用来控制当前,误差值和一个负常数P(表示比例)相乘,然后和预定的值相加。P只是在控制器的输出和系统的误差成比例的时候成立,KP能够快速的跟随变化量。及时的产生与之相关的调节作用。但是KP是有差调节,无法消除静态误差。
积分KI来控制过去,误差值是过去一段时间的误差和,然后乘以一个负常数I,然后和预定值相加。I从过去的平均误差值来找到系统的输出结果和预定值的平均误差。一个简单的比例系统会振荡,会在预定值的附近来回变化,因为系统无法消除多余的纠正。通过加上一个负的平均误差比例值,平均的系统误差值就会总是减少。所以,最终这个PID回路系统会在预定值定下来。
微分KD 来控制将来, 计算误差的一阶导,并和一个负常数D相乘,最后和预定值相加。这个导数的控制会对系统的改变作出反应。导数的结果越大,那么控制系统就对输出结果作出更快速的反应。这个D参数也是PID被成为可预测的控制器的原因。D参数对减少控制器短期的改变很有帮助。一些实际中的速度缓慢的系统可以不需要D参数。
舵机PID
13
第四届全国大学生智能汽车邀请赛技术报告
由于舵机是一个具有大的延迟的执行机构,所以在PID控制中不能加入积分环节。否则会导致小车震荡。所以小车采用PD控制。同时加入一个一阶惯性环节,构成不完全微分,给小车一个超前的调节。
实际使用中,为了减少计算时间,将位置式PID转化为增量式 增量式PID公式:
电机PID
小车行使过程中,随着跑道的不同,需要配合不同的速度值,因此对电机的PID是一个给定值不断变化的PID。
小车的目标速度(Object_Speed)给定规则: 小车在直道上,Object_Speed为最大值200。 小车在大弯道上,Object_Speed为160。
小车在小弯道或S型弯道上,Object_Speed为120 小车冲出跑道,Object_Speed为70。
小车由直道进入弯道,Object_Speed逐渐减小。 小车由弯道进入直道,Object_Speed逐渐加大。
在实验中发现,PID的超调量主要在第一个波形中起作用,也即单速度由很大到很小的时候,或由低速突然加到高速的过程中,会出现很大的超调。但是这个超调并不是有害的,因为,当速度要求突变的时候,往往是小车由直道入弯道,或者由弯道入直道的过程,这个过程往往需要很快的大加减速,而由于小车的惯性,一般的PID调节难以满足要求,这时使用大的超调量可以使小车有一个加速或刹车的过程,使之更好的达到要求速度。
14
第四届全国大学生智能汽车邀请赛技术报告
第六章 智能车控制软件的编写
控制系统的软件主要由初始化程序和MC9S12控制程序等组成。初始化程序在主程序里面调用,控制程序在中断服务程序中完成。
6.1 初始化程序
初始化程序主要包括:中断向量定义、时钟频率设定、I/O初始化、A/D转换初始化、PWM初始化、控制寄存器设置、软件变量定义及赋初值以及各功能模块的初始化等。
6.2 控制主程序
MC9S12控制程序是整个系统软件的核心组成部分,主要负责电动机的启动、电动机转速闭环控制的实现。因此,MC9S12程序包括启动子程序、转速计算中断服务子程序、转速控制子程序、PWM控制子程序、PWM调制子程序等。PWM调制子程序根据计算到的转速值和给定值通过PID程序产生具有一定宽度的信号,经驱动后控制电动机,从而完成对电动机转速的控制。 (1) PID算法
PID算法用于计算电动机输出速度。再次使用的是增量式PID算法。程序中首先根据采样值和给定值计算误差,然后计算积分误差,当然必须对积分误差进行限幅,接下来求得微分误差,最后根据PID离散化公式求得输出值。 (2) PWM模块初始化
PWM模块初始化指对MC9S12单片机PWM模块的初始化,包括PWM时钟选择、输出端口选择、8位/16位精度选择、对齐方式、周期、占空比选择等。 (3) 速度测量子函数
在速度测量中使用定时器捕捉的方式进行速度的测量,就是通过计算转速信号的两个上升沿之间的时间得到转速值。
15
第四届全国大学生智能汽车邀请赛技术报告
(4) A/D采样函数
AD模块初始化包括AD模块的上电、通道选择、FIFO模式选择、8位/10位精度选择、换结果格式等的选择。这里选择10位精度,一个序列转换5次的方式,然后去掉最大值和最小值,再求平均值。 (5) 控制主程序
为了实现每秒大约1000次的采样速率,可以利用单片机的实时中断定时1ms,然后在中断服务子程序里面进行给定值的采样以及控制。当然,经过我们的实验发现,过高频率的调节也不能起到明显的作用,所以我们没有在1ms中断里进行调节,因为我们的程序执行一次的时间明显超过了1ms,所以1ms调节一次不再有任何意义,所以我们是程序每执行一次计算调节一次,这样既节省了程序执行的时间,又提高了调节速度。
第七章 运行调试部分
7.1 Codewarrior 开发环境
在整个开发调试过程中,使用Metrowerks公司为MC9S12 系列专门提供的全套开发工具(Freescale Codewarrior IDE 4.6)。这是一套用C语言进行编程的集成开发环境——本文智能车定位系统的软件设计部分就是在此开发环境下完成的。
Codewarrior 是由Metrowerks 公司提供的专门面向Freescale 所有MCU 与DSP 嵌入式应用开发的软件工具。其中包括集成开发环境IDE、处理器专家、全芯片仿真、可视化参数显示工具、项目工程管理、C 交叉编译器、汇编器、链接器以及调试器。
CodeWarriorIDE 能够自动地检查代码中的明显错误,它通过一个集成的调试器和编辑器来扫描你的代码,以找到并减少明显的错误,然后编译并链接程序以便计算机能够理解并执行你的程序。每个应用程序都经过了使用象
16
第四届全国大学生智能汽车邀请赛技术报告
CodeWorrior 这样的开发工具进行编码、编译、编辑、链接和调试的过程。Metrowerks Codewarrior IDE 中的mc9s12dg128.h 文件对所有寄存器对应的存储映射地址都
进行了宏定义,开发者在软件开发时直接调用这些宏就可以了。
7.2 软件仿真
为了更好的定量分析影响小车行驶的各个因素,而且最大限度的节约时间和成本。我们采用了软件仿真和实际调试相结合的办法。仿真软件使用了清华的PLAST2。
通过仿真,我们发现: 1、
小车传感器的探测距离对速度有着决定的影响。所以传感器应该尽量的探测更远。但是传感器的探测距离不能超过最小转弯的半径。否则会出现盲区。 2、
适度增加舵机的灵敏度,可以使转弯更加灵活。所以我们在实际调试中,加长了舵机的力臂。
7.3 实际调试
1、实际调试过程中,我们发现小车在直道上会出现左右抖动的现象,通过软件设置死区或其他处理方法,效果都不是很明显,最后发现小车舵机和前轮的间隙是罪魁祸首,通过把前轮设置为内八形,完美的解决了这个问题。
2、实际调试过程中,我们的小车还出现了拐弯时强烈振动的问题,这样速度变快时,小车就会振出跑道,小车的振动问题成了我们提速的限制,因此解决振动问题迫在眉睫。我们采取了很多解决方案,但效果都不很明显,最后我们将重心向小车后方移动了一下,效果非常明显,在对重心进行了大幅度的移动之后,小车的振动几乎消失,并且转弯变得更加灵活,可谓一箭双雕。
3、在调试过程中,我们加了液晶显示,还设置了蜂鸣器,这些辅助设备在比赛中为了减轻小车的重量,都是不需要的。但是在调试过程中,通过这些设
17