四旋翼无人机飞控系统设计(输出分配)
输出分配
控制器产生roll、pitch、yaw 三个自由度的输出值,接下来的问题是如何将其输送给四个电机,这就是飞控的输出分配。电机分配的基本思想是每个电机等于三个自由度的加减的结合,根据这三个自由度变化时所期望的电机速度的增减来确定具体是增还是减。

例如,pid 偏差是设定值减实际值,roll 的自由度左倾是负的,想让四旋翼左倾的话需要设定 roll 为负,那么设定值减实际值就是负的,得出的 pid 输出量是负的,要达到四旋翼左倾的效果就必须让左边的两个电机减速,右边的两个电机加速,所以左边电机分配对应 roll 的符号是+,右边电机分配对应 roll 的符号是-。
pitch 是相同的,yaw 的根据同侧电机不同转向抵消空气水平旋钮力的原理,减小某对角电机转速就可以是空气旋钮力无法抵消,使四旋翼产生自转。电机分配得出后加上油门的处理值,再限度处理。就是各个电机的输出值了。
输出分配的C实现
四个电机的符号确定下来,然后三个自由度的输出和油门的输出叠加
pwm_out[m1]= + PID[roll_rate].pwm_out + PID[pitch_rate].pwm_out + PID[yaw_rate].pwm_out + throttle_target_get();
pwm_out[m2]= - PID[roll_rate].pwm_out - PID[pitch_rate].pwm_out + PID[yaw_rate].pwm_out + throttle_target_get();
pwm_out[m3]= - PID[roll_rate].pwm_out + PID[pitch_rate].pwm_out - PID[yaw_rate].pwm_out + throttle_target_get();
pwm_out[m4]= + PID[roll_rate].pwm_out - PID[pitch_rate].pwm_out - PID[yaw_rate].pwm_out + throttle_target_get();
关于如何将最后的输出值给到电机,体现为电机转速。这一环飞控和电机中间的部分是电调,电调的软件协议最常见的是检测有效信号频率区间内的方波信号的高点平持续的时间——脉宽值,比如有两种信号频率区间 50hz 和 490hz,拿 50hz 举例,就是周期 20ms有效,电调协议是检测此 PWM 信号的脉宽,1000-2000 协议,1000 为最低,2000 为最高。通俗得讲飞控发送周期 20ms 的 pwm 方波信号,脉宽为 1000 时电机转速最慢,2000 时电机转速最快。大部分电调可以设置区域值,就是电调校准。
此种分配方式使用麦克纳姆轮模型的的车也同样适用。

浙公网安备 33010602011771号