串级PID及角度过零处理

  • 一、为什么需要过零处理
  • 二、如何进行过零处理
  • 三、举个例子
  • 四、代码实现

本文针对RoboMaster Can通讯电机而写,机械角度为0-8191,也可推广到其他电机使用。

一、为什么需要过零处理

原因:防止过零误差对角度PID的控制量输出产生不可控影响

一般来说,想让电机停止在某一确定位置,最常用的控制方法就是串级PID。串级PID原理这里不照本宣科,我们更应该关注它是如何“串起来”实现对电机控制的。

首先,我们来看一下位置式PID的公式(如下图)。从公式中易知,PID输出的控制量就是误差及误差变换的线性组合,为了方便讨论,我们令积分项和微分项为0,得到纯P控制下的公式:

PS:
angle_tar:目标角度值
angle_cur: 当前角度值
angle_output : 角度环控制量
angle_err = angle_tar - angle_cur

speed_tar:目标速度值
speed_cur: 当前速度值
speed_output : 速度环控制量

定义:顺时针方向旋转为正方向。电机默认状态为静止,即speed_cur为0。
如下图所示:将angle_output赋值给速度环的speed_tar就实现了“串起来”。这理解起来不难,
当角度无误差时,速度环的目标值就是零,电机保持不动;
当角度误差为正时,angle_output与speed_output为正,电机正转;
当角度误差为负时,angle_output与speed_output为负,电机反转。
根据PID公式,角度误差越大,speed_tar就越大,则速度误差越大,电机就以越快的速度接近目标角度。换言之,就是角度有误差电机就动,直到达到目标角度位置为止。

当电机过机械零点时,实际的角度误差很小,但测量的角度误差却多了一个周期的角度,从而使速度环输出较大的控制量,电机就会以极高的速度旋转。当每次过零都没有经过处理时,电机就会越转越快,从而失控。因此,过零处理就是要避免这种情况的发生。

二、如何进行过零处理

首先要明白过零处理的本质:数学上的运算
这种运算的结果可以将一个绝对值较大的误差转换成绝对值较小的反向误差

电机角度的变化可以分为如下四种情况:其中情况(1)和(3)都没有过零,正常的PID运算是我们想要的结果。(2)属于8191–>0的过零情况,遇到这种情况我们应当让测量值多减去一个周期的角度,再进行PID计算。(4)属于0–>8191的过零情况,遇到这种情况我们应当让测量值加上一个周期的角度,再进行PID计算。

有无角度过零处理电机旋转情况对比如下:

对比两个表,在无过零处理情况时,情况(2)和(4)的电机会以一个较长的路径到达目标角度(如果在这路径中过零,那电机就疯了),这不是我们想要的结果,我们总是希望电机以较短的路径到达目标角度位置。

通过将测量到的角度值加上或减去一个周期,就可以将一个绝对值较大的误差转换成绝对值较小的反向误差(即消除过零突变产生的误差),通过反向误差,速度环就会输出一个反向控制量使电机以反方向到达目标角度位置。

请看下图:

电机的位置,是不是可以用其他非测量到的数值表示?

将测量到的角度值加上或减去一个周期,背后的原理就是用“另外一个值”来表示电机当前的位置。并且只有在过零情况时,才需要用“另一个值”来表示。我用殊途同归,来概括这种方法,殊途即不同的电机位置表示确定出电机到达目标位置的不同路径,同归当然就是同一个目标角度位置了。

三、举个例子

是不是实现了将一个绝对值较大的误差转换成绝对值较小的反向误差的效果?

四、代码实现

最后一个问题,我们如何判断电机是否过机械零点?
很简单,当目标角度与当前角度差值的绝对值大于半圈机械角度时,即判断处于过零情况发生!

啊? 没过零点不是也存在目标角度与当前角度差值的绝对值大于半圈的机械角度的情况吗?

答:这种情况的角度是渐变的,而过零角度是突变的,两者有本质的区别。渐变的情况下,电机往目标角度旋转时的误差是逐渐减小的,而突变情况下的误差一直存在,需要人为消除。

/* 角度Pid时,在更新tar和cur之后紧接着调用, 处理完再进行PID计算*/
void Handle_Angle8191_PID_Over_Zero(float *tar, float *cur)
{if(*tar - *cur > 4096)    //4096 :半圈机械角度{*cur += 8192;        //8191,8192无所谓了,四舍五入}else if(*tar - *cur < -4096){*cur = *cur - 8192;}else{//*cur = *cur;// do nothing}
}

串级PID及角度过零处理相关推荐

  1. 基于大疆RM3508电机的串级PID(角度环+速度环)

    1.前言 最近参加ROBOCON,我负责编写传球机器人,由于传球机构需要一个电机转固定角度来带动球,所以便用大疆3508电机通过串级PID来实现,不得不说3508电机还是真的强,先看一下效果吧. 视频 ...

  2. hjr-四旋翼飞行器串级PID飞控算法

    先说下什么是四旋翼飞行器 名称:四旋翼飞行器 组件:一个机架,一个陀螺仪,四个无刷直流电机,一个电池,一块单片机(能飞起来的最基本配置) 原理:利用四个电机旋转产生的反作用力托起飞行器上升,利用单片机 ...

  3. 基于串级PID的直立车控制算法研究

    徐厚华 何哲嘉 向颖锋 2020-10-31 Saturday 00摘要   直立平衡车因其动力学系统同时具有多变量,非线性,不稳定,强耦合等特性,传统的单环PID控制平衡已经略显吃力.本文将采用内环 ...

  4. 四轴PID控制算法详解(单环PID、串级PID)

    正文开始:这篇文章分为三个部分: PID原理普及 常用四轴的两种PID算法讲解(单环PID.串级PID) 如何做到垂直起飞.四轴飞行时为何会飘.如何做到脱控? PID原理普及 1.  对自动控制系统的 ...

  5. 四轴飞行器的串级PID参数整定经验

    串级PID即将两个PID控制器按照串联的方式连接起来,前一个的输出作为后一个的输入两者共同控制控制对象.对于四旋翼来讲最普通的就是外环角度环,内环角速度环,两者怎么联系呢,有的说法是:外环:输入为角度 ...

  6. 串级PID的直立控制

    基于串级PID的直立车控制算法研究 摘要:直立平衡车因其动力学系统同时具有多变量,非线性,不稳定,强耦合等特性,传统的单环PID控制平衡已经略显吃力.本文将采用内环角速度PI控制.外环角度PD控制及最 ...

  7. PID超详细教程——PID原理+串级PID+C代码+在线仿真调参

    目录 前言 仿真调参环境 案例引入--小球位置控制 抛开案例--更专业地理解PID 由虚到实--代码编写 最后一步--PID参数调整 总结--使用PID的步骤 更进一步--串级PID 前言 很多人应该 ...

  8. 【手把手带你用pid算法控制电机】——(4)串级PID控制电机

    前言 1.该系列教程是基于stm32f103c8t6最小系统板的hal库开发,用最通俗易懂的方式手把手带你学会使用Pid算法的速度环.位置环以及速度位置串级pid. 2.出这一期Pid系列教程的想法是 ...

  9. STM32实现四驱小车(四)姿态控制任务——偏航角串级PID控制算法

    目录 一. 绪论 二. 角度环串级PID原理 1. PID基本算法 2. 姿态角串级PID原理 三. 如何用STM32实现角度-角速度的串级PID控制 1. PID算法的代码实现 2. 串级PID算法 ...

最新文章

  1. ATS插件channel_stats源码分析解读
  2. 浅谈https\ssl\数字证书
  3. 实践微服务六年,我获得了这些心得体会
  4. 生态伙伴 | 身边的法律人都在用的「觅律搜索」入驻飞书啦!
  5. 从头开始写框架(一):浅谈JS模块化发展
  6. 多台服务器通过ssh 无密钥直接登陆主机
  7. 【风险管理】风控决策系统
  8. 基于ZXing的二维码,你可以这样改造它
  9. oracle别名用双引号,Oracle别名大小写 -----解决方案
  10. 2.42死锁的处理策略一预防死锁
  11. oracle跨越千年处理
  12. 单通道GNSS模拟器行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  13. 惊爆:各大 App 可直接打开小程序!微信收割移动互联网的时间开始了
  14. 数学一年级应用题_【专项练习】一年级下册数学100以内加减法应用题专项练习,附答案...
  15. c语言static的用法_一文轻松掌握,单片机中C语言的数据存储与程序编写
  16. c语言编fft算法程序,FFT算法的C语言编程
  17. 插入耳机不识别只能外放,音频设备错误代码0xc00d36fa
  18. 基于JESD204B的LMK04826时钟芯片开发笔记
  19. 原生js监听滚动条_JS原生监听滚动条
  20. 用 Java 实现拦截器 Interceptor 的拦截功能

热门文章

  1. 政策更新 | 开发者如何处理软件包可见性
  2. 模拟退火算法详细说明
  3. 【C语言】按位运算符
  4. 一文读懂闪电网络工作原理
  5. linux计划任务之crontab
  6. OpenHarmony啃论文俱乐部方法总结分析
  7. ssh服务器banner信息,几种情况下的banner信息修改
  8. 爬虫【1】打开网站,获取信息
  9. forward(转发)和redirect(重定向)有什么区别
  10. 多项式曲线拟合之最小二乘法推导