电机输出代码逻辑整理(二)
待解决问题
1.roll、pitch、yaw等因子facor是怎么得来的;
2.筛选可接受的控制量是如何进行的;
3.如何计算得到最后的pwm值。
将在这篇文章中为大家带来分析。
这里我们先来看,最终的pwm值是如何计算的,发送到电机的的最终pwm值是在AP_MotorsMatrix这个类里的函数output_to_motors()定义的,在switch语句里面当是SPOOL_DOWN时,根据推力要求得到的pwm值是由motor_out[i] = calc_thrust_to_pwm (_thrust_rpyt_out[i])计算得到的。
void AP_MotorsMatrix::output_to_motors()
{
int8_t i;
int16_t motor_out[AP_MOTORS_MAX_NUM_MOTORS]; // 发送到电机的最终PWM值
switch (_spool_mode) {
case SHUT_DOWN: {
// 向电机发送最小值
// 根据推力要求设置电机输出
for (i=0; i<AP_MOTORS_MAX_NUM_MOTORS; i++) {
if (motor_enabled[i]) {
if (_disarm_disable_pwm && _disarm_safety_timer == 0 && !armed()) {
motor_out[i] = 0;
} else {
motor_out[i] = get_pwm_output_min();
}
}
}
break;
}
case SPIN_WHEN_ARMED:
// 当解锁启动但不飞行时,向电机发送输出
for (i=0; i<AP_MOTORS_MAX_NUM_MOTORS; i++) {
if (motor_enabled[i]) {
motor_out[i] = calc_spin_up_to_pwm();
}
}
break;
case SPOOL_UP:
case THROTTLE_UNLIMITED:
case SPOOL_DOWN:
// 根据推力要求设置电机输出
for (i=0; i<AP_MOTORS_MAX_NUM_MOTORS; i++) {
if (motor_enabled[i]) {