智能车电机闭环控制算法
对于智能车的电机闭环控制算法,我之所以标题没有写上“智能车电机PID
闭环控制算法”是因为PID 算法根本就不是特别好的适用于智能车这种变化很
快的系统,对于智能车,电机的调速可以说是时时刻刻再进行调速控制的,我
上面说描述的经典PID 算法,都是针对一些惰性系统,也就是说是变化比较慢
的系统的,所以对于智能车的电机调速采用完完整整的PID 算法,是根本不可
取的,及时采用了,你必须要经过一些变换和改进才能使用。以上的简述只是
鄙人自己的看法,如有错误,请各位高手指正。
现在估计您会疑问,PID 不适用于智能车的电机控制,那什么才适用呢?
鄙人原来做过智能车,从鄙人本身的理解,P 算法控制电机,也就是比例控制
是最好的,反应速度快,控制精度高,不存在积分和微分效应,非常适用于适
用于控制周期短的系统,当然,对于一些特殊的逻辑控制算法,可能要采用PD
算法,用微分来做补偿,防止震荡和超调。
下面来说下电机控制算法从开始的加入到最终的确定的方法:
当然这一切的前提就是安装了编码器,车速有反馈,只有加上编码器,有
了反馈,才能组成一个闭环系统。当然您也可以加上码盘,或者霍尔开关等一
切可以返回车速的东西都可以。
(1) 首先建议在车速比较慢的时候,采用PID 算法来控制电机,为
什么开始要建议您采用PID 呢?主要是为了让您更加深刻理解
PID 算法的精髓和调试步骤方法等,有助于以后对控制算法更加
深入的研究和书写。调试PID 三个参数的方法,很多地方都提
供了,我在这里简单的说下:首先将ID 参数都变为0,先调整
P 比例参数,调整到速度基本上跟您给定的速度差不多,也就是
说基本稳定在您给定的脉冲数,当然这个时候会非常的震荡,
不要担心,接下来调整I,调整I 的结果就是震荡会消除很多,
但是车速会变化缓慢,也就是说会有一些延迟,然后再调整D,
调整D 的结果就是增强调节的灵活性和预见性,在给定速度变
化的过程中,能够以一个平稳过渡来变换,而且速度可以长时
间稳定在给定速度附近,然后PID 三个参数的基本范围就确定
了,然后再根据实际的跑车来微调这些参数,当然在您调试PID
之前,请仔细阅读PID 理论知识,这样有助于您的调试和理解,
当您把PID 调整好以后,您就基本上领会了PID 的精髓,对于
以后的调试作用非常大。这里的给定速度,就相当于上面对温
度例子中说的设定温度。意思是一样一样的。
(2) 当您对PID 掌握以后,您能做到给定多少速度,就能让车速稳
定在这个给定速度左右,可以适当的提高点车速,慢慢的观察
效果,你会发现当速度增加的时候,车速的控制会变得越来越
糟糕,调节缓慢,灵活性差。这个时候您就可以试着去掉I 积分
环节,然后再重新调整参数,按照上面说的,然后继续观察效
果,试着提高速度,继续观察,因为车速毕竟很慢,很多细节
我们都能看到,所以您就可以看到PID 到PD 变换以后,实际的
效果是增加多少,也算是一种进步,这个时候,经典的PID 公
式已经被我们简化,不要担心,您可以多多实验多多观察,可
能在这个变换之间,您能受到很多启发,会产生很多思路,谁
以后的调试车子都是有好处的。所以搞智能车,自己一步
一步的进步学习,远远比去某些淘宝店铺购买现成的程序学到
的东西更多,体会的也更多,思维开阔的也更多。
(3) 在您的车速在3M 内的时候,我强烈建议您采用PD 算法,因为
PD 算法是最好调整,最容易控制的。当然这个时候我也强烈建
议您加上P 控制,P 控制的话,不是说就单纯的P*偏差然后得
到的值给定PWM,而是一定要加上一些逻辑控制,不加上逻辑
控制而是直接运用比例公式来给定PWM 值,将会带来很多问
题,具体的逻辑控制讲解,在以后我会写出相关的文档,谢谢。
采用增量式编码器为反馈的智能车电机闭环调速系统:
其实借助于我上面举得例子,到这里,您可能已经明白对于智能车来
说闭环系统是一个必须的,不可脱离的。当然,您可能已经完全明白智能
车电机闭环调速系统怎么做,并且您可能也做的更好,要比我在这里所说
的更加的先进更加的有创意更加的有效果。所以在这里我只是简单的说说,
谢谢。
首先,我们需要时刻反馈当前的智能车速度给单片机或者 ARM,让
系统知道当前速度,有助于控制。
我们先说说为什么我们要反馈车子速度,要知道车子当前的速度?因
为我们的CPU 利用传感器采集道路信息,通过CPU 收集和处理变化,系
统就能知道车子当前的状态,比如是在直到上?还是在进入弯道?还是在
弯道内?还是正在出弯道?还是在上坡?还是穿过了起跑线?有了这些信
息,我们首先就是对舵机的控制,控制车子根据什么道路情况来进行转弯,
转弯的方向,大小,都是靠这些数据来实现,当然当前的速度值也是控制
舵机转向大小的一个附加因素,这样更加的有利于我们及时处理不同弯道。
知道了这些信息,就跟我们开车一样,我们要转弯了,得感知我们车的速
度,怎么感知啊,就靠汽车自带的速度表,这样我们就可以通过控制刹车
或者油门还有方向盘来控制车子平稳的转过弯道,不同的弯道,不同的速
度,转弯的控制和刹车的控制都是不同的。如果我们不知道当前的速度,
那么很可能因为拐弯速度过快,导致翻车,或者侧滑,造成危险。智能车
情况跟真车是一样的,我们必须知道车子当前速度,比如我们智能车拐弯
安全速度是3M/S,所谓安全速度就是车子顺利安全且没有较大侧滑过弯时
的速度,在进入弯道前我们车子的速度是4M/S,当传感器感知要进入弯道
了,通过跟安全速度对比,我们发现智能车的速度远大于安全弯道速度,
这个时候我们就要刹车,把车子速度快速降低到3M/S,这样保证我们顺利
快速的过弯。在这里您可能问3M/S 的安全速度怎么来?其实很简单这个
速度是靠实验来的,不用什么计算,完全属于经验值,根据跑道的材料、
车子机械性能和弯道的角度来决定,所以为什么我们要比赛的时候要试车,
试车中一个最重要的环节就是熟悉比赛跑道所用的材料,用于我们实验车
子的安全速度等。
对于智能车的速度反馈,在这里我就针对增量式编码器来说,其实码
盘啊,霍尔啊,他们原理都一样。光电增量式编码器不同于绝对值编码器,
绝对值编码器在编码器转动一周的每个特定位置都有一个确定的值输出,
增量式编码器转动一圈,固定输出一定的脉冲,无法确定转动到哪个位置,
对外输出一般为方波,这样有助于MCU 进行数据采集。
有了编码器,我们通过齿轮、皮带等将编码器跟电机或者传动轮进行
连接,这样电机转动的时候,就会带动编码器转动,然后编码器就能向外
输出方波,接到单片机上,我们就能进行采集编码器脉冲了。有了脉冲,
可能您又要问这个脉冲没有规律性,随着转动不停的增加,到底怎么来衡
量速度?您这个时候啊,动动手,观察观察数据特点,您会发现,当车速
度比较快的时候啊,脉冲数自增的速度比较快,也就是说,转速越快,频
率越高,单位时间内的脉冲数就越多,这样立刻有了灵感,我们用定时器
设置一个中断,这个中断的时间为5MS,那么每5MS 我们就采集编码器
一次脉冲值,当采集完毕后,我们就对脉冲数寄存器清零,这样在5MS
内,得到的脉冲数越多,说明车子速度越快,到这里车速就解决了。到这
里您可能会说:还没完呢,还没转换为速度呢?要把这个脉冲根据距离和
时间转换为具体的XX 米/秒的速度。您的这个想法很好,但是真的是没
有必要,我们根本没有必要浪费时间去计算这个,因为我们本来就是想知
道速度,脉冲数的多少已经就能衡量速度大小了,我们何必要很麻烦的转
换为具体速度? 一定时间内的脉冲数已经够了,够我们底层硬件进行判断
计算了。既然我们反馈的数据类型为脉冲数,所以我们所给定的速度也对
应的到脉冲数,比如50 个脉冲代表速度3M/S,80 个代表4M/S 的速度,
这样通过道路类型给定脉冲数,就能实现电机的闭环控制了,是不是很简
单?到这里我知道又有人会疑问,50 个脉冲对应3M/S,80 个脉冲对应4M/S
是怎么得到的?其实这个更简单,很多人做智能车容易把简单问题复杂化,
其实很多问题都可以用几行程序解决,比如那个坡道,很多人用了很多复
杂方法解决,比如加一个开关啊,加个加速度啊,加个陀螺仪啊,根本没
有必要,程序几行就搞定了。具体的脉冲对应速度,您固定给定一个脉冲
让车子跑跑到一圈,然后记下时间,跑道实际长度除以时间,就是对应速
度,你只是需要大概知道对应就行了,不用一个一个实验,具体的X 米/
秒是宏观上我们感知的,跟单片机没有任何关系。