『文章』平衡小车PID,就该这么调
上一篇文章:看完这篇文章 , 还不会做平衡小车 , 你来打我 。 描述了平衡小车的制作过程 , 也开源了一部分设计资料 。 在上篇文章留言中 , 有朋友说:
本文插图
安排 , 必须安排!
1、PID 关于 PID 的概念 , 网上相关的帖子太多 , 在此不再赘述 。 之前也有过几篇关于 PID 的文章: 再论 PID , PID 其实很简单 。。。 PID 算法搞不懂?看这篇文章就够了 。
这次我们聊下关于平衡小车中的 PID , 在平衡小车的 PID 中 , 分为三种 PID , 分别是直立环、速度环、转向环 。 任何一个 PID 最终计算出来的都是电机 PWM , 都是需要赋值给电机的 。 环环嵌套 , 得出电机的最终控制 PWM 。
2、直立环 PID 在直立环中 , PID 的入口参数为:平衡小车的姿态角和姿态角对应的角速度 。
值得说明 , MPU6050 得出来的姿态角有三种:PITCH(俯仰角)、ROLL(翻滚角)、YAW(航向角)一般来说 , MPU6050 都是平方且平行装在平衡小车上 , 总不会有人垂直装吧
如果平放且平行安装 , 那么直立环 PID 的入口参数为:Pitch 或 roll 。 直立环中 , 有一个较为重要的概念 , 也就是机械中值 。 通俗讲 , 小车在不接受任何外力或者电机作用 , 能够找到一个角度自我平衡 。 如何理解这句话:很简单 , 小车电机不转动 , 人的手扶着小车 , 小车总能找到一个角度 , 自我短期平衡 。 此时的角度就是机械中值 。
直接看代码:
/*******************************************************************
函数功能:直立 PD 控制
入口参数:角度、机械平衡角度(机械中值)、角速度
返回值:直立控制 PWM
作者:公众号【大鱼机器人】
******************************************************************/
int balance_UP(float Angle,float Mechanical_balance,float Gyro)
{
float Bias;// 角度误差
int balance;// 直立环计算出来的电机控制 pwm
Bias=Angle-Mechanical_balance;
//===求出平衡的角度中值和机械相关
balance=balance_UP_KP*Bias+balance_UP_KD*Gyro;
//===计算平衡控制的电机 PWMPD 控制kp 是 P 系数 kd 是 D 系数
return balance;
}
从程序上看:balance_UP_KP 为直立环的 P , balance_UP_KD 为 直立环的 D 。 如何确定 P 和 D 的大小和极性?
2.1 直立环 P 范围确定:需要先确定 PWM 的范围 , 例如 , 定时器最大的 PWM 为 7200 , 此时占空比为 100% , 电机应该是全速运行 。 如果小车需要直立 , 摆幅 , 差不多就要≤10° 。 ,如果超过此范围 , 小车抖动较为厉害根据直立环的程序:
balance=balance_UP_KP*Bias+balance_UP_KD*Gyro;
由于 PWM 最大是 7200 , 角度在 10° , 反推可以得到:直立环的 P 可选范围应该在 0~700 。
当然这只是个大致的范围 , 具体多少还需要进一步调试 。
2.2 直立环 P 极性确定:极性也就是符号 , P 到底是给正的 , 也是负的 。
直接给 kp 正负值 , 然后观察现象:
正常出现的现象是负反馈 , 小车往那边倒 , 电机转动使得小车往要倒的方向去追 。 使得小车能够往反方向站起来!
如果出现正反馈 , 车往哪边倒 , 电机转动使得小车快速倒下 。 这种现象就是不对的 。
2.3 直立环 P 大小确定:慢慢试错 , 从小到大 , 响应慢慢加快也就是小车倒下后恢复直立的时间越来越短 , 直到小车出现大幅度的低频抖动!
- 证券财帝■坚定持股,上涨远没结束
- 「链得得」比特币崩盘了吗?
- #壹行伊朗#韩外交部:将向伊朗等14国提供新冠肺炎防疫物资
- 律师:瑞幸会面临SEC高额罚款
- 「社会治安管理员」在一张张证件上闪耀……,为民情怀
- 江门台▲喝大了!新会男子红绿灯前“梦周公”
- 【山涛哥】中国革命史百年影视全纪录:渡江侦察记
- 【妙家影视】如何计算低压开关柜铜排用量?这是我见过最漂亮的文章!
- 『平安江北』有疫情警察就不办案了?不存在的
- 『军中三剑客』菲律宾拒美军靠近,美大兵上岸娱乐