[单片机学习笔记](35):串级PID算法应用剖析、通过串口控制电机、MPU6050获取平衡车姿态、自制平衡车PID算法程序设计

串级PID算法应用剖析

这是经过给队友讲解串级PID的程序的之后的进一步的理解总结。

内环的实际值,取决于你能测出什么值给内环。而内环的输入就是内环误差

内环的输出值,是内环误差(内环目标值-内环实际值)经过内环pid计算后的值(可加 死区,不要积分项,要微分项)

其上限值需要考虑执行器所能控制的极限

内环的目标值,同时也是外环的输出值。

外环控制对象内环控制对象的积分,所以PID参数整定也是结合现象,用控制变量法先整定内环,后整定外环

外环的实际值,取决与你能测出什么值给外环。而外环的输入就是外环误差。它对应是串级PID最终要控制的物理量。

外环的输出值,是外环误差(外环目标值-外环实际值)经过外环pid计算后的值。(可加入 死区 和 积分分离,不要微分项)。

其上限值需要考虑对应物理量,估算出合理值。

外环的目标值,对应串级pid控制要达成的控制效果。

在条件允许时: 传感器获取数据时 加入 滤波算法 ;执行器在输出控制时 加入 平滑输出算法

以板球控制串级PID控制为例:  (位置环不加死区,效果反而更好,不用担心板子不平)

通过串口控制两个电机

改自野火的例程,可以通过串口调试助手直接控制两个电机的速度和转向。

 

移植后关键函数:放在stm32f1xx_it.c 串口中断服务函数;放在control.cdeal_serial_data()函数;放在bsp_debug.c的串口重定之类的函数。

(上述程序是没有真正编写协议的,没有解码数据帧之类的操作)

有协议的要参考之前的上位机设置PID的程序:

【单片机学习笔记】(32):L298N H桥驱动电路原理、基于野火的通信协议进行PID参数设置、中断服务函数标志位注意事项、非独立IO口注意事项、野火PID助手调参失败原因_wenhaiii的博客-CSDN博客

其中bsp_debug.c里的串口回显可以让上位机确认下位机是否成功接收到控制信号,之后给上位机控制程序的时候记得编写相应代码利用下位机的串口回显,保证控制的可靠性。

之后可以根据上述两个函数将小车由电脑通过USB线控制,改成可以通过蓝牙、wifi等无线来控制小车。

MPU6050获取平衡车姿态

由于MPU6050的安装姿态与小车姿态不匹配,得把横滚角roll偏航角pitch 转换一下。

加速度计陀螺仪的数据都要变换。

实际测式最高读取速率:调用这个函数的时间可以在0.5ms至300ms,太快的话可能DMP还没处理完数据。 即最高读取频率可达2KHz(文件上说1KHz)。实际用的时候还是1ms以上调用一次稳妥一些

移植的时候记得把 mpu6050.c  inv_mpu.c   inv_mpu_dmp_motion_driver.c 都添加到工程中,然后要调用相关函数的时候,把mpu6050.h 和 inv_mpu.h这两个头文件include就行

自制平衡车PID算法程序设计

喵呜两轮平衡车没有使用速度闭环内环的PID控制,它通常三轮,四轮的小车上的。

两轮平衡车上的速度环角度环是分别各自去运算之后合成出一个输出

速度环输入:电机编码器捕获到的脉冲数

回看之前自己照着喵呜的教程写的HAL库的平衡小车代码,发现用来存放编码器值的变量竟然是unsigned int 类型的变量,可是之前还让小车立起来了。。。。。。(得去比对一下之前的程序,查找原因)

去看喵呜的标准库的例程,它存放编码器值的变量是short类型的。

  

角度环输入: 有软件解算和硬件解算两种,因为滤波算法接触的不多,所以直接用mpu6050硬件解算出来的数据更靠谱。

软件解算姿态:MPU6050获取的一个方向的角度数据(accx或accy)一个方向的加速度数据(gyrox或gyroy) 经过互补滤波之后的值(当成角度来理解就行)。

(喵呜用了一种很简单的互补滤波算法,可能是为了为了避免移植mpu6050的DMP驱动库的繁琐操作,不一定可靠。)

DMP解算姿态:直接用mpu6050硬件解算出来的欧拉角中的一个角度值

  • 17
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
串级PID控制算法是一种常用的控制策略,适用于需要精确控制的系统,例如平衡串级PID算法的结构包括两个PID控制器,一个用于控制系统的主环路,另一个用于控制系统的从环路。 在平衡串级PID算法中,主要有两个控制回路:速度环和姿态环。速度环用于控制小的移动速度,姿态环用于控制小平衡姿态。下面是串级PID算法的一般步骤: 1. 设定目标速度和目标姿态。 2. 通过速度传感器获取当前速度信息,计算速度误差。 3. 使用PID控制器计算速度环的输出控制信号。PID控制器根据速度误差、积分误差和微分误差来计算输出。 4. 将速度环的输出控制信号作为姿态环的参考输入。 5. 通过陀螺仪等传感器获取当前姿态信息,计算姿态误差。 6. 使用PID控制器计算姿态环的输出控制信号。PID控制器根据姿态误差、积分误差和微分误差来计算输出。 7. 将姿态环的输出控制信号作为电机驱动的控制信号,用于调节电机的输出功率和方向,以实现平衡和控制小姿态。 8. 循环执行上述步骤,不断更新控制信号,使小保持平衡并达到目标速度和姿态。 需要注意的是,串级PID算法的参数调节是一个重要的环节,需要根据实际情况进行优化和调整,以获得良好的控制效果。此外,还可以结合其他控制策略和方法,如模糊控制、神经网络等,来进一步优化控制性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值