莱罗三角平衡系统
- 前言
- 一、mpu6050使用dmp得到姿态角
- 二、使用pid算法控制
- 三、pid调参
-
- 1.首先,确定角度环P,先去掉速度环
- 2.然后确定角度环D
- 最后,加入速度环
前言
莱罗三角形,又称鲁洛克斯三角形,是这样得到的:先画正三角形ABC,然后是正三角形ABC三个顶点是圆心,边长是半径画弧得到的图形,如下图所示
我用cad用激光切割机切割亚克力板,用铜柱连接两个中间留有电机位的莱罗三角形,电机安装动量轮,mpu6050水平放置在两根铜柱之间,获得初始机械结构
他的平衡原理就是角动量守恒,当整体有向左边倒的时候,动量轮逆时针加速,根据角动量守恒,电机应该连着整个系统顺时针加速从而抵消向左边倒的趋势,向右边倒时原理相同,然后先看看我做出来的效果,我把代码上传csdn,想做这个项目的朋友可以下载参考 
一、mpu6050使用dmp得到姿态角
dmp是mpu6050年,一个可扩展的数字运动处理器可以以四元的形式输出欧拉角,因此我们不需要整合和过滤陀螺仪和加速度传感器收集的原始数据。在这一步中,我使用了正点原子的代码。让我们谈谈如何移植我们自己的板。
首先,在工程中添加这些文件
修改inv_mpu.c文件,把i2c读写函数改为自己的,delay_ms函数也改为自己写的(注意不要使用)hal由于使用系统定时器优先级过低,库给出的延迟函数会导致程序卡死) 
修改inv_mpu.h数据输出频率与系统控制周期对应,但不超过200hz这是硬件限制。 
二、使用pid算法控制
直接上代码
角度控制应将动态误差控制到很小(否则,如果倾斜角度过大,回调所需的功率超过电机极限系统,则会崩溃)PD控制效果很大,后面的调参主要是这两个参数,I可有可无
为什么需要速度控制?回到前面分析的原理,我们系统的平衡利用电机加速来提供角动量。如果电机速度达到极限,系统不会崩溃吗?因此,这是一种静态误差控制(要求电机速度为0)PI可以控制控制器。
最后我把两个pid输出差后的值作为pwm波占空比用于驱动电机。在这里,我们不需要纠结于数学原理。我们只需要了解测量角度和目标角度之间的差异作为角度控制输入。电机编码器10ms读取的值(相当于电机转速)作为速度控制输入,使我们得到两个输出,一个与系统倾斜角度有关,一个与电机速度有关,它们共同决定了电机转速,我们只需要把它放在后面pid参数调好就能让角度和电机速度对pwm适当的权重使系统稳定。
三、pid调参
调整前测量系统平衡mpu输出6050的角度,将此作为角度目标值写入代码
1.首先,确定角度环P,先去掉速度环
:向左倒时动量轮应逆时针加速,向右倒时动量轮应顺时针加速,否则极性反转 :逐步增加平衡位置的系统P值直到有明显的回复现象,可以来回震荡几次
2.然后确定角度环D
:与P相同 :在原本P逐渐增加大小D,直到震荡幅度可以收敛
最后,加入速度环
:如果动量轮转速越来越快,就会反转,PI极性一样 :逐步加大P、I两个值几乎相同。在获得良好的控制效果后,尝试分别微调两个值