键盘修士 2023-04-30 22:20 采纳率: 50%
浏览 13

STM32平衡车PID的疑问

为什么平衡车串级pid的速度环输出要作为直立环角度输入?如果不用串级,直接直立环和速度环相加有什么区别?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-01 12:08
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接: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函数:

          E=P(v_tar-v0)+D*(\frac{dV}{dt})+I(2v0-\frac{dV}{dt}*\delta t))

    • 以下回答来自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计算等多个步骤。在设计的过程中需要考虑到各个步骤之间的协调性,使整个系统达到稳定可靠的效果。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 4月30日

悬赏问题

  • ¥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语言编的代码什么意思?