十一.四轮车驱动开发之四:理解直流电机PID控制器

这是”四轮车驱动控制”系列,分多个小节来介绍:


1. 八.四轮车驱动开发之一:正/逆向运动学分析
2. 九.四轮车驱动开发之二: 配置PWM驱动直流电机
3. 十.四轮车驱动开发之三: 巧用编码器获取电机转速信息
4. 十一.四轮车驱动开发之四: 理解直流电机PID控制器

5. 十二.四轮车驱动开发之五: 由浅至深理解6轴陀螺仪姿态解算算法

        同前面几节的,PID控制器的概念,公式,参数整定不是本文重点. 本文重点是在你已经有PID的基础之后,更深入理解PID以及使用PID解决自己的工程问题.

一.  PID控制器的基本概念

        PID控制,就是对控制量的测量值和期望值的偏差进行比例,积分和微分, 以使测量值更加接近或等于期望值的过程.

        根据定义: PID控制器有3个单元组成, 分别是比例单元(P),积分单元(I), 微分单元(D). 工程实践中, 一般比例控制P是必须的,另两项根据具体问题可选,常见组合的PID控制器:  PD,PI,PID等.

        由于PID控制是通过软件实现的控制算法, 所以必须对目标调节的模拟信号和控制量测量值进行离散化处理, 这样方便程序根据采样周期时刻的偏差值来计算控制量.  这样就需要使用离散的差分方程代替连续的微分方程.

        假定采样时间很短, 比如:5ms, 可做如下处理:

  1. 用一阶差分代替一阶微分(一阶导数).  
  2. 用累加代替积分;

一个典型的PID控制器框图如下:

PID控制器的3个系统要求: 

系统要求衡量标准对应单元调节顺序效果及影响
快速性上升时间: 指响应曲线从原始工作状态出发,第一次到达输出稳态值所需要的时间,用以评估系统快速性;P1增大P值可以消除静差,提高响应速度, 但会导致震荡
准确性静差: 是被控量达到稳定值后与目标值之差,用以衡量系统的准确性.I3根据系统对响应和静差等的要求,调节P和I参数
稳定性最大超调量:是响应曲线的最大峰值与稳态值的差,是评估系统稳定性的一个重要指标;D2抑制震荡, 但会增大系统阻尼, 降低响应速度

PID控制器参数整定:

网上流传的口诀,可以参考使用:

参数整定找最佳, 从小到大顺序查。先是比例后积分, 最后再把微分加。
曲线振荡很频繁, 比例度盘要放大。曲线漂浮绕大弯, 比例度盘往小扳。
曲线偏离回复慢, 积分时间往下降。 曲线波动周期长, 积分时间再加长。
曲线振荡频率快, 先把微分降下来。动差大来波动慢, 微分时间应加长。
理想曲线两个波, 前高后低四比一。一看二调多分析, 调节质量不会低。

二. 如何选择和应用PID控制器

就智能车的直流驱动电机领域应用来讲,常见的PID控制有:

  • 位置闭环PID控制器,也称位置式离散PID;
  • 速度闭环PID控制器,也称增量式离散PID;

如何理解这两种PID,以及如何选择和应用这两种PID呢?

1. 位置闭环PID控制器

先看定义: 

        位置闭环控制器是根据电机编码器的脉冲累加值作为电机位置信息的测量值encoder_count,并与目标位置值encoder_target进行比较,得到控制偏差,然后通过对偏差的比例,积分,微分进行控制,使偏差趋向于零的过程.

位置闭环PID控制器或位置式离散PID公式:

Pwm = Kp*e(k) + Ki*∑e(k) + Kd*[e(k)-e(k-1)]

e(k): 本次测量值和目标值的偏差;

e(k-1): 上次测量值和目标值的偏差;

∑e(k): e(k)及之前的所有偏差的累积和,k=1,2,3,,,k.   实际应用中要对偏差的最高积分做限制,避免无限增大.

Pwm:  输出计算出的PWM控制信号.

其大致框图如下:

举例理解:

        假如你驾驶一辆小汽车从A地到B地(假设直线运动), 设两地的间距为encoder_target,你驾驶小汽车从一路上的要经历起步->加速->匀速->减速->停车的过程,驾驶过程中任意时刻小汽车已形式距离为:encoder_count,行驶过程中,你需要时刻对比当前已形式距离encoder_count和目标间距encoder_target,并计算两者偏差:encoder_Bias. 如果偏差过大,你就加速, 每次PID计算逐渐加速甚至达到最大速度(类似电机满幅运行).当快要接近目标间距encoder_target时,偏差逐渐减小,你就减速,然后每次PID计算逐渐减速,最终保证速度为0时,小汽车正好停止在目标位置encoder_target.整个过程如下图所示:

 理解和应用位置闭环控制器:

          图中表示从0点出发,到达a(很近),b(较近),c(较远),d(很远)四个不同间距的目标点过程中你驾驶小汽车的速度控制曲线.  相应的,如果把对直流电机的测量值encoder_count和目标位置值encoder_target过程中的转速控制等同的小汽车从A地到B底的车速控制,则上图所示4种曲线就是直流电机的转速控制曲线,  而直流电电机的转速由PID控制器输出的PWM控制.   

        这也是位置闭环控制器的原理和应用场景, 即只关注被控对象移动/旋转的当前位置和目标位置,速度调节只是过程需要, 偏差大时快速提高被控对象速度,偏差小时减小并微调被控对象的速度,最终使被控对象准确无误地停止在目标位置.  当然在实际应用场景中会对最大速度(最大幅值)做控制,保证运行安全平稳噪音低. 比如电控移动门窗, 开始移动时,逐渐加速,然后保持在一定速度匀速(最大限速)前进,接近目的地时逐渐减速直至精准停止到目标位置.

位置闭环控制器特点和注意事项:

        1. P参数一般比较小: 因为P参数比例的是测量值和目标值的偏差e(k),一般目标值较大时(被控对象移动的目标位置较远时),偏差e(k)就会很大,如果P参数较大,就会瞬间导致Kp*e(k)大于等满幅值PWMmax,所以这个参数需要根据实际被控对象行为而设定.

        2. I参数特别小(I<1): 同上,目标值较大时,偏差e(k)就会很大,而偏差的累积和∑e(k)会更大,所以I要足够小以减小I单元计算结果的权值, 很多位置闭环PID控制器的I参数都是小数(I<1),甚至实际应用中要对偏差的最高积分∑e(k)做限制,避免无限增大.

        3.D参数一般比较大:  如位置闭环PID公式所示,D参数控制的是相邻两次偏差的偏差(可以理解为偏差的导数,或偏差的瞬时变化率),显然当被控目标处于匀速运动时,偏差的变化率恒定为0,D单元项不起作用;  随着逐渐接近目的地,偏差逐渐减小,因P单元项逐渐显小,被控物体逐渐减速,偏差的变化率也逐渐减小.使D参数发挥增大系统阻尼同时抑制震荡的作用.

2. 速度闭环PID控制器

先看定义: 

        速度闭环控制器就是根据单位时间获取的电机编码器脉冲数(比如M法测速)来测量电机的速度信息.并与目标速度值(期望值)进行比较,得到控制偏差,然后通过对偏差的比例,积分,微分进行控制,使偏差趋向于零的过程.此外,速度控制一般每5ms-20ms采集一次电机编码器速度.

 速度闭环控制器,或增量式离散PID公式:

Pwm = Pwm + Kp*[e(k)-e(k-1)] + Ki*e(k) + Kd*[e(k)-2e(k-1)+e(k-2)]

     = Pwm + Kp*[e(k)-e(k-1)] + Ki*e(k) + Kd*[e(k)-e(k-1) + e(k-2)-e (k-1)]

e(k): 本次测量值和目标值的偏差;

e(k-1): 上次测量值和目标值的偏差;

e(k-1): 上上次测量值和目标值的偏差;

Pwm:  输出计算出的PWM控制信号.

Note:  速度闭环控制器可以只使用PI控制器,所以上面PID控制器公式简化为:

    Pwm = Pwm + Kp*[e(k)-e(k-1)] + Ki*e(k)

大致框图如下:

举例理解:

         对于位置闭环PID控制器,我们的举例只关注是否到达目的位置, 而不关注过程中的速度,想快速到达目的地就开快点,没时间要求或追求安全就慢点开. 但对于速度闭环控制器而言,你驾驶小汽车时没有明确地高速你要去哪里,但却指定了你必须尽快达到某个目标速度,并准确地维持在该速度匀速前进.

        就速度闭环PID控制器来讲,就是我们希望直流电机维持在一定的速度持续运转,所以PWM控制量需要逐渐累加直到目标速度并维持在此目标速度. 如上所见,PID公式也较位置式离散PID公式有差异.

速度闭环PID控制器控制电机速度如图:

理解和应用速度闭环PID控制器:

        根据简化后的速度闭环PID控制器公式: Pwm = Pwm + Kp*[e(k)-e(k-1)] + Ki*e(k), 类似上面位置闭环PID控制器的分析: 对于P比例单元子项,e(k)-e(k-1)表示相邻两次速度偏差的变化率,如果PID计算周期T相同,e(k)-e(k-1)将为一个恒定值,P参数将对一个恒定的变化率进行比例放大; 对于I积分单元子项,e(k)表示当前的速度偏差,I参数仅对当前的速度偏差有效,为什么这里不再做∑e(k)累积和进行积分? 因为当前偏差之前的所有偏差已经通过速度闭环PID控制器公式:Pwm = Pwm + (curPwm)累加到现有PWM里.

三. PID控制器的复合应用

        一个典型的PID控制器的复合应用场景就是两轮平衡车,既要应用平衡直立PD控制器保持车身直立,又要应用速度闭环PI控制器控制车身前进/后退,还要应用转向闭环PID控制器控制车身转向.

即:

Balance_Pwm = balance(Angle_Balance,Gyro_Balance);
Velocity_Pwm = velocity(Encoder_Left,Encoder_Right);
Turn_Pwm = turn(Encoder_Left,Encoder_Right,Gyro_Turn);

//三种PID控制器复合使用
leftMoto = Balance_Pwm - Velocity_Pwm + Turn_Pwm;
rightMoto = Balance_Pwm - Velocity_Pwm - Turn_Pwm;
                           

四. PID控制器在整个系统中位置框图:

  • 5
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前言: 开始之前先要说为什么要采用PID的算法来控制小车。玩过小车的DIY爱好者们都会碰到这样一种情况:为什么本该直线行驶的小车走着走着轨迹就会发生偏移,即所谓的“走不直”。 小车走不直的原因有:两个电机本身的驱动特性不可能完全相同,两个电机外形大小不可能是完全一致,组装时精度也会出现差异,另外轮胎在滚动时打滑、遇到细小的障碍物等因素都会造成左右轮的速度出现差异,从而走不直。开环控制是无法消除左右轮的速度误差的,因为上述的扰动是随机的。 要想小车走一条直线,唯有实现闭环控制,当小车受到扰动时能对左右轮及时给予反馈,修正两轮的速度偏差,从而可以走出一条直线。PID算法就是一种闭环控制算法,实现PID算法需得从硬件上实现闭环控制,即存在反馈,所以我采用的是带测速装置的电机。 项目简介: 本项目采用的是PID控制算法来修正小车行走时两轮的速度偏差,实现小车可以走直线。小车是使用一个安卓App来控制小车的行走路径,App通过App Inventor2来进行编写。 完成作品图: 需要用到的材料: 1. Arduino Uno 2. Arduino Uno的扩展板 3. DFRobot L298 双路2A直流电机驱动板 4. HC-05或HC-06的蓝牙模块 5. 坦克小车底盘 6. 两个带霍尔传感的电机 7. 锂电池 8. 杜邦线若干 软件部分: 1. Arduino IDE 2. App Invent 附件内容截图:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值