0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于STM32的平衡小车设计过程分享(3)

一口气吃不成胖子 来源:一口气吃不成胖子 作者:一口气吃不成胖子 2023-04-27 14:40 次阅读

一、简介

续上文,电机驱动、MPU6050驱动均已完成,接下来我们给他加上PID让它站起来

二、PID控制

我们将小车PID控制函数放到MPU6050中断函数中,每当MPU6050有数据输出时,引脚INT有相应的电平输出。依次来触发外部中断作为控制周期。保持MPU6050数据的实时性。

2.1直立环控制

通过传入的KP、KD参数,让平衡车的pitch轴保持在水平位置。

直立环是用于控制机械系统中垂直方向运动的一种控制器。在这些应用中,垂直方向的运动通常是非常稳定的,因此I控制器的积分作用并不是必需的。而PD控制器可以提供足够的控制性能,同时避免了可能出现的积分饱和问题,因此在直立环中通常只使用PD控制器,而不使用I控制器。

/**************************************************************************

函数功能:直立PD控制

入口参数:角度、机械平衡角度(机械中值)、角速度

返回 值:直立控制PWM

**************************************************************************/

int balance_UP(float Angle,float Mechanical_balance,float Gyro)

{ 

  float Bias;

  int balance;

  Bias=Angle-Mechanical_balance;   //求出平衡的角度中值和机械相关

  balance=balance_UP_KP*Bias+balance_UP_KD*Gyro; //计算平衡控制的电机PWM PD控制  kp是P系数 kd是D系数

  return balance;

}

2.2速度环控制

这里我们只用到了PI的控制参数,如果有微分环(D)在里面的,系统会响应波动太快,微分对极小的速度波动都会有反应,而速度的微微波动又太多了,什么电机微抖,转速检测装置的不稳定。总结,微分太灵敏了,所以我们只用到了PI作为调节参数

/**************************************************************************

函数功能:速度PI控制

入口参数:电机编码器的值

返回 值:速度控制PWM

**************************************************************************/

int velocity(int encoder_left,int encoder_right,int Target_Speed)

{ 

   static float Velocity,Encoder_Least,Encoder;

  static float Encoder_Integral;

  //=============速度PI控制器=======================// 

  Encoder_Least=(Encoder_Left+Encoder_Right); //获取最新速度偏差==测量速度(左右编码器之和)-目标速度

  Encoder *= 0.8; //===一阶低通滤波器      

  Encoder += Encoder_Least*0.2; //===一阶低通滤波器  

  Encoder_Integral +=Encoder; //===积分出位移 积分时间:10ms

  Encoder_Integral=Encoder_Integral-Target_Speed;  //接收遥控器数据,控制前进后退

  if(Encoder_Integral>10000)   Encoder_Integral=10000; //===积分限幅

  if(Encoder_Integral<-10000)       Encoder_Integral=-10000; //===积分限幅       

       Velocity=Encoder*velocity_KP+Encoder_Integral*velocity_KI; //===速度控制     

    if(pitch<-40||pitch>40)   Encoder_Integral=0;   //===电机关闭后清除积分

  return Velocity;

}

2.3转向环控制

在转向控制中,PD控制器代表的是比例-微分控制器,它根据当前的偏差和偏差的变化率来调整控制参数,以实现快速响应和稳定性。

相比之下,积分控制器(I控制器)会根据偏差的积分来调整控制参数,以减小系统的稳态误差。然而,在转向控制中,由于小车的动态响应和环境的不确定性,I控制器容易出现积分饱和的问题,从而导致系统不稳定和震荡。

因此,为了保证转向控制的稳定性和可靠性,通常只使用PD控制器,而不使用I控制器。同时,还可以通过其他控制策略,如模糊控制、自适应控制等来进一步提高控制性能。

/**************************************************************************

函数功能:转向PD控制

入口参数:电机编码器的值、Z轴角速度

返回 值:转向控制PWM

**************************************************************************/



int Turn_UP(int gyro_Z, int RC)

{

  int PWM_out;

  /*转向约束*/

  if(RC==0)Turn_Kd=TURN_KD;//若无左右转向指令,则开启转向约束

  else Turn_Kd=0;//若左右转向指令接收到,则去掉转向约束

  PWM_out=Turn_Kd*gyro_Z + Turn_KP*RC;

  return PWM_out;

}

2.4 PID参数的调节

通过调节PID的参数,使小车达到稳定状态,该数据仅供参考,具体调节还得从实际中得来

//直立环

#define BLC_KP 300

#define BLC_KD 0.6

//速度环

#define SPD_KP -80

#define SPD_KI -0.40

//转向环

#define TURN_KP -30

#define TURN_KD -0.3
poYBAGRKGLmAFwt4AAXLcy9ShtE852.png

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    15534

    浏览量

    173465
  • STM32
    +关注

    关注

    2249

    文章

    10727

    浏览量

    350323
  • PID
    PID
    +关注

    关注

    35

    文章

    1453

    浏览量

    84316
  • 平衡小车
    +关注

    关注

    1

    文章

    38

    浏览量

    12462
收藏 人收藏

    评论

    相关推荐

    基于STM32平衡小车设计过程分享(1)

    基于STM32平衡车开发
    的头像 发表于 04-27 14:30 7242次阅读
    基于<b class='flag-5'>STM32</b>的<b class='flag-5'>平衡</b><b class='flag-5'>小车</b>设计<b class='flag-5'>过程</b>分享(1)

    基于STM32平衡小车设计过程分享(2)

    续上文,电机驱动部分完成,接下来我们给他加上一个OLED的显示功能和MPU6050的姿态检测功能。
    的头像 发表于 04-27 14:37 1457次阅读
    基于<b class='flag-5'>STM32</b>的<b class='flag-5'>平衡</b><b class='flag-5'>小车</b>设计<b class='flag-5'>过程</b>分享(2)

    如何去制作一种基于stm32的两轮平衡小车?求过程

    如何去制作一种基于stm32的两轮平衡小车?基于stm32的两轮平衡小车电路设计的基本
    发表于 07-09 07:47

    基于STM32F103C8T6制作平衡小车过程

    基于STM32F103C8T6制作平衡小车过程中的问题文章目录基于STM32F103C8T6制作平衡
    发表于 08-24 08:07

    平衡小车移植过程中趟过的坑

    最近在研究平衡小车,在TB上买了一个小车套件,源代码是用的stm32的3.5库,自己打算移植到hal库上面去,顺便深入了解一下平衡
    发表于 09-17 06:40

    基于STM32的双轮平衡小车设计

    预告:代码及文档下载方案分析1、基于STM32F103C8T6 单片机的双轮自平衡小车系统;2、以 MPU6050 三轴陀螺仪加速计为传感器的姿态感知系统;3、通过卡尔曼滤波对传感器的
    发表于 11-30 08:03

    两轮自平衡小车的设计与实现

    两轮自平衡小车的设计与实现,基于STM32控制的自平衡双轮小车,其中机械部分包括车体、车轮、步进电机、锂电池等部件设计加工。
    发表于 05-19 15:16 20次下载

    基于stm32程序的DIY二轮平衡小车

    在校期间制作的stm32平衡小车,效果还可以
    发表于 05-20 10:05 74次下载

    基于STM32设计的智能平衡小车源代码免费下载

    本文档的主要内容详细介绍的是基于STM32设计的智能平衡小车源代码 支持手机及电脑上位机控制的平衡小车
    发表于 07-16 08:00 121次下载

    STM32的两轮平衡小车源代码

    基于STM32的两轮平衡小车源代码说明。
    发表于 03-17 14:21 62次下载

    STM32智能平衡小车详细电路原理图

    STM32智能平衡小车详细电路原理图免费下载。
    发表于 06-18 10:55 167次下载

    stm32蓝牙平衡小车制作项目心得(一)

    自从肝了这么多stm32的视频,一直没有做项目来实践。这次的平衡小车项目
    发表于 01-14 12:06 11次下载
    <b class='flag-5'>stm32</b>蓝牙<b class='flag-5'>平衡</b><b class='flag-5'>小车</b>制作项目心得(一)

    平衡小车调试总结

    前言本文将总结平衡小车的调试经验,经过几晚的努力平衡小车已经可以比较稳定的平衡了。本文平衡
    发表于 01-14 12:29 14次下载
    <b class='flag-5'>平衡</b><b class='flag-5'>小车</b>调试总结

    stm32平衡小车

    stm32f103c8t6的平衡小车的代码
    发表于 06-15 14:51 37次下载

    基于STM32的两轮平衡小车设计

    学习一种单片机最快的方式莫过于用它实际制作一个作品了,前些天看到有人在玩平衡小车,感觉非常有趣,于是就决定自己动手制作一个基于stm32的两轮平衡
    的头像 发表于 07-25 15:48 2149次阅读
    基于<b class='flag-5'>STM32</b>的两轮<b class='flag-5'>平衡</b><b class='flag-5'>小车</b>设计