使用 Arduino 平衡四轴飞行器
Balancing quadcopter using Arduino
我正在做一个关于具有自主控制的自平衡四轴飞行器的项目。我正在使用 Arduino Mega 2560 和 MPU6050。我在没有借助DMP的情况下从MPU6050获得了滚动角和俯仰角,并应用了复杂的滤波器来忽略由于振动引起的噪声。
在 Arduino 中断的帮助下,还配置并能够 运行 带 Flysky 发射器和接收器的 BLDC 电机。现在为了平衡,我只关注一个轴(即滚动)。我还制作了一个平衡架,用于通过电机自由移动滚动轴。
对于控制部分,我正在实现PID算法。我尝试只使用 kp 值,这样我可以以某种方式平衡,然后继续使用 ki 和 kd 术语。但不幸的是,对于 Kp 本身,四轴飞行器正在经历剧烈的振荡并且根本没有稳定下来。
我的一些查询是:
- 单个 PID 回路是否足够,还是我们必须添加另一个?
- 除了反复试验之外,我可以采用哪种调优方法来找到 kp、ki、kd?
- 我将我的 ESC 编程为 1000 到 2000 微秒。我的 PID 输入角度将在 +/- 180 范围内。我是否可以直接将 PID 输出限制设置为 -1000 到 1000 或 -180 到 180 或任何其他值?
代码可以从URLhttps://github.com/antonkewin/quadcopter/blob/master/quadpid.ino
读取
由于没有提供,我假设:
- 循环时间至少为 4 毫秒。 (越少越好)
- 传感器噪音已降低到可接受的水平。
- MPU-6050 需要组合陀螺仪+加速度数据以获得以度为单位的角度。
如果不注意以上几点,它会自己不平衡
最初,您可以在不调整 kI 的情况下逃脱。因此,让我们关注 kP 和 kD:
- 继续增加Kp,直到它开始快速振荡。保持 Kp 值的一半。
- 设置 kP 后,开始试验 kD 值,因为它会尝试抑制 kP 的超调。
- Fiddle围绕这两个值,将其调至完美。
请注意,您的陀螺仪数据越准确,您可以将 kP 设置得越高。
我正在做一个关于具有自主控制的自平衡四轴飞行器的项目。我正在使用 Arduino Mega 2560 和 MPU6050。我在没有借助DMP的情况下从MPU6050获得了滚动角和俯仰角,并应用了复杂的滤波器来忽略由于振动引起的噪声。
在 Arduino 中断的帮助下,还配置并能够 运行 带 Flysky 发射器和接收器的 BLDC 电机。现在为了平衡,我只关注一个轴(即滚动)。我还制作了一个平衡架,用于通过电机自由移动滚动轴。
对于控制部分,我正在实现PID算法。我尝试只使用 kp 值,这样我可以以某种方式平衡,然后继续使用 ki 和 kd 术语。但不幸的是,对于 Kp 本身,四轴飞行器正在经历剧烈的振荡并且根本没有稳定下来。
我的一些查询是:
- 单个 PID 回路是否足够,还是我们必须添加另一个?
- 除了反复试验之外,我可以采用哪种调优方法来找到 kp、ki、kd?
- 我将我的 ESC 编程为 1000 到 2000 微秒。我的 PID 输入角度将在 +/- 180 范围内。我是否可以直接将 PID 输出限制设置为 -1000 到 1000 或 -180 到 180 或任何其他值?
代码可以从URLhttps://github.com/antonkewin/quadcopter/blob/master/quadpid.ino
读取由于没有提供,我假设:
- 循环时间至少为 4 毫秒。 (越少越好)
- 传感器噪音已降低到可接受的水平。
- MPU-6050 需要组合陀螺仪+加速度数据以获得以度为单位的角度。
如果不注意以上几点,它会自己不平衡
最初,您可以在不调整 kI 的情况下逃脱。因此,让我们关注 kP 和 kD:
- 继续增加Kp,直到它开始快速振荡。保持 Kp 值的一半。
- 设置 kP 后,开始试验 kD 值,因为它会尝试抑制 kP 的超调。
- Fiddle围绕这两个值,将其调至完美。
请注意,您的陀螺仪数据越准确,您可以将 kP 设置得越高。