为什么平衡车串级pid的速度环输出要作为直立环角度输入?如果不用串级,直接直立环和速度环相加有什么区别?
1条回答 默认 最新
关注 不知道你这个问题是否已经解决, 如果还没有解决的话:- 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:STM32单片机PID闭环精确控制直流电机位置(角度)
- 除此之外, 这篇博客: 【嵌入式设计】【炒鸡详细】STM32单片机控制机器人程序设计框架解读(不定时更新)中的 3.3 使用PID算法对车轮进行速度调节(一般采用的方法,但会抖动) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
很多工程控制都会用到PID,PID的思路很简单,假设我们开车,想把车维持在60km/s的速度上,那么车速如果只有十几而且不加速,那么了我们就要往死里踩油门,当车子嗖一下子窜出去了,我们就得松油门;如果车速是58,59的样子,那么我们就轻轻,或者几乎不踩油门。如果速度是65,那么我们就松开油门,如果速度是120,那么我们就得猛踩刹车。
这就是PID算法中的P因子。我们控制车速,参考的就是当前的速度和目标速度,如果这两个速度差的很大,那么我们就多给点儿油速度小,我们就少给点儿油。我们踩油门的程度就大致符合:
油门=(目标车速-当前车速)X一个固定的力道(Propotion)
这就是PID控制中的P(Percentage)。使用这种方式控制轮子的方式可以称作P算法,现在我们把它实现一下:
在这个程序里,与P值的代码就三句(红框),第一句:计算当前速度与目标速度的差值;第二句:差值乘上一个比例因子;第三句,返回这个结果。这个程序有三个输入,分别为当前速度,目标速度以及最大油门。返回值就是基于当前速度和目标速度计算出的油门数值。
但是在生活中我遇到过这样一个问题:我有一辆小摩托,在我启动小摩托后,为了达到我想要的速度,我肯定是给足了油门,但是此时我的小摩托嗖一下就窜出去了(有一个很大的加速度),骑鬼火的社会人比较喜欢这种加速感,但生活不是鬼火,毕竟车头一翘阎王爷笑。当我发现我的小鬼火要翘头,我得赶快把油门松开。
此时我速度还没达到目标速度,油门还得捏着(P比例因子告诉我要捏住油门),但是因为我不能加速太快了,所以我还得松点儿油门。此时在P因子外,又有一种因子影响了油门,它就是:
微分比例因子(Derivative)
P因子和D因子在一起就构成了PD算法:
油门=P*(目标速度-当前速度)+D*(当前速度-上一时刻的速度)
参考了D值,刚刚的算法我们可以改为:
PID算法中,我们已经掌握了P因子和D因子,当然,这这样可能会导致另一个问题:我上一秒的速度是0,因为加速太快导致第二秒的速度一下子升高到了59km/h,按照常理,按照P因子作用,我此时应该不踩油门了(因为目标速度-当前速度≈0),但是由于D因子的存在(D因子发现我加速太快了),我会猛踩刹车。最后结果就是我速度到59了,踩刹车,速度下降,加速,又踩刹车;这样也会达到目标速度,但是这种加速是非常不稳定的。
所以,我们综合了微分,积分与比例因子,构建了完整的PID函数:
- 以下回答来自chatgpt:
问题背景:
本题所描述的是关于STM32平衡车控制的问题。STM32平衡车是一种结合了机械工程与电子技术的产物,通过对平衡车的角度、速度等参数进行测量与控制,使车辆具有类似人类平衡的能力,能够在平衡状态下运动。其中使用到的技术术语有:PID控制器、直立环、速度环、串级PID等。
PID控制器是一种用于控制系统的基本控制器,其在工业自动化以及机器人控制等领域得到广泛应用。PID控制器包含P项、I项、D项三个参数,通过对系统的反馈信号进行处理得到控制量并且调整输出信号。
直立环是一种控制算法,其目的是使小车始终保持平衡状态。直立环通过控制电机转速来达到角度始终在机械中值位置。
速度环是一种用于控制电机转速的控制器,其目的是让电机转速趋近于0。
串级PID是一种控制系统,其将PID控制器按照层级进行连接,以实现更为精准的控制效果。
关于STM32平衡车的控制,需要测量车体的倾角并进行负反馈控制。控制流程中包含了角度计算、滤波器选择、PID计算等步骤。其中,角度计算通过对车体高度、质量、加速度等因素的计算得到倾角;滤波器选择用于减小噪声干扰,提高系统稳定性;PID计算通过控制电机转速来达到平衡控制的目的。
解决方案:
根据问题的背景和参考资料,提出以下解决方案:
1.角度计算
对于角度计算,需要通过车体高度、质量、加速度等因素的计算得到倾角。具体步骤如下:
a.测量车体高度L和质量m
b.测量当前车辆的加速度A_Z和零点偏差AZ_ZERO,然后进行处理得到车辆的加速度angle_Accel
c.根据加速度angle_Accel求出倾斜角度angle_Accel
d.通过陀螺仪测量出当前的角速度Gyro_Now
e.最后,将angle_Accel和Gyro_Now代入滤波器进行处理,得到最终的倾角值angle_now
2.直立环PID参数整定
直立环PID参数整定包括了Kp、Kd的调节及确定。具体步骤如下:
a.预设一个Kp值,并且与满占空比对应的ARR值进行比较,选择合适的Kp值;
b.观察小车的车轮转向,若和倾斜方向相同说明极性相同否则极性不同;
c.逐步增大Kp,在满足小车不出现低频振荡的前提下,调节Kp的大小,最终确定Kp的值;
d.通过调节Kd的值来消除振荡,同时保持Kd的极性与Kp相同;
e.最后根据工程经验,将Kp、Ki都乘以0.6进行调整。
3.滤波器选择
滤波器选择的目的在于减小噪声干扰,提高系统稳定性。常用的滤波器有清华角度计算滤波器、一阶滤波器、二阶滤波器和卡尔曼滤波器等。具体步骤如下:
a.根据实际的情况选择需要的滤波器;
b.使用所选定的滤波器对角度计算的结果进行处理。
4.PID控制计算
PID控制计算是整个平衡车控制系统的核心部分。具体步骤如下:
a.根据预设的目标和实际测量到的倾角计算出误差量error;
b.根据P项和D项,通过控制电机转速来达到角度始终在机械中值位置的目的;
c.进行微分项的限幅,保证系统稳定性;
d.将P项和D项的结果加和得到最终的控制量AngleControlOut。
总之,完整的STM32平衡车控制流程包括了角度计算、滤波器选择、PID计算等多个步骤。在设计的过程中需要考虑到各个步骤之间的协调性,使整个系统达到稳定可靠的效果。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报
悬赏问题
- ¥50 求解vmware的网络模式问题
- ¥24 EFS加密后,在同一台电脑解密出错,证书界面找不到对应指纹的证书,未备份证书,求在原电脑解密的方法,可行即采纳
- ¥15 springboot 3.0 实现Security 6.x版本集成
- ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
- ¥30 请帮我解决一下下面六个代码
- ¥15 关于资源监视工具的e-care有知道的嘛
- ¥35 MIMO天线稀疏阵列排布问题
- ¥60 用visual studio编写程序,利用间接平差求解水准网
- ¥15 Llama如何调用shell或者Python
- ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?