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

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个系统要求:

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

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控制器在整个系统中位置框图:

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

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

    这是"四轮车驱动控制"系列,分多个小节来介绍: 1. 八.四轮车驱动开发之一:正/逆向运动学分析 2. 九.四轮车驱动开发之二: 配置PWM驱动直流电机 3. 十.四轮车驱动开发之 ...

  2. 十.四轮车驱动开发之三: 巧用编码器获取电机转速信息

    这是"四轮车驱动控制"系列,分多个小节来介绍: 1. 八.四轮车驱动开发之一:正/逆向运动学分析 2. 九.四轮车驱动开发之二: 配置PWM驱动直流电机 3. 十.四轮车驱动开发之 ...

  3. 十三. 四轮车驱动开发之五: 由浅至深理解6轴陀螺仪姿态解算算法<中>

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

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

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

  5. 从驱动开发角度理解linux epoll调用链

    epoll是linux中一种处理高并发的事件查询机制,是在原有poll机制上的改进,相比原有的poll机制,epoll在处理/监控大量文件描述符时,拥有更好的性能. 网上能够找到大量关于Epoll的资 ...

  6. factorybean 代理类不能按照类型注入_Spring注解驱动开发之四——@Import快速导入组件、FactoryBean 定义工厂注册组件...

    本文包含以下内容: @Import快速导入组件 配合ImportSelector 导入组件 配合ImportBeanDefinitionRegistrar 导入组件 FactoryBean 定义工厂注 ...

  7. 嵌入式linux驱动开发之点亮led(驱动编程思想之初体验)

    这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...

  8. 学习ARM架构,系统移植和驱动开发总结

    本次结束了对ARM架构,系统移植和驱动开发的学习,它们都是属于底层,难度想对都比较的难一点,但先学习arm架构之后去学习系统移植和驱动开发,会使自己对系统移植和驱动开发容易理解点. arm架构 arm ...

  9. PID控制器整理分享

    概述 日常开发中,常常需要对速度.温度等物理量进行稳态控制,而在目前的自动化控制原理中,使用最为广泛的方法就是PID控制算法.本文简要整理分享PID控制器的使用. 正文 PID控制器,即比例-积分-微 ...

最新文章

  1. 百万级访问量网站的技术准备工作[转帖]
  2. 打造专属BGM,​Python 深度学习教你
  3. 「机器学习」彻底搞懂CNN
  4. matlab 台风数据插值,matlab画台风轨迹图小tip
  5. ACL 2020今日放榜,779篇论文被接收,姚班校友陈丹琦首日演讲
  6. blog微服务架构代码_聊聊微服务架构
  7. centos7 nginx php整合,Centos7下,宿主机nginx配合docker环境的php-fpm
  8. submit()提交表单时,显示警示框
  9. python-字典数据类型-0222
  10. 数据库及中间件术语解释
  11. 接口中定义的成员变量是( )。_C++:如何正确的定义一个接口类
  12. 地图下载区 哪家好用
  13. 信号与系统熊庆旭老师著作阅读心得——华中科技大学电气读书节NUM1
  14. pdca实施的流程图_(fmea七步法)过程流程图,FMEA,控制计划哪个在前哪个在后
  15. AWS-EC2域名映射
  16. 通过扫描二维码进入下载APP的流程
  17. ff14拆区后哪个服务器人最多,《最终幻想14》官宣拆区!国服大区调整计划公布...
  18. Access denied for user ‘xxx‘@‘localhost‘ 错误
  19. 2004度精华软件总结
  20. 塞雷三分钟漫画中国史2

热门文章

  1. C语言 古代经典算术题:百钱百鸡。用100元钱买100只鸡,已知公鸡每只5元,母鸡每只3元,小鸡一元3只,求出所有的卖法。
  2. php新德里时区_PHP设置时区
  3. 2021年安全员-C证-专职安全生产管理人员(广东省)模拟考试题及安全员-C证-专职安全生产管理人员(广东省)复审模拟考试
  4. 高级篇-Docker微服务实战
  5. 微信小程序:流量主制作生成装逼工具
  6. 2022年春节在家待几天?
  7. pycharm常用快捷键与structure视图
  8. javafx一个stage窗口弹出,主窗口跟随弹出(聚焦二级窗口时,在二级窗口后面显示主窗口)
  9. vue-flipper过渡动画
  10. zigbee 之 commissioning