pixhawk电机输出代码逻辑整理(二)

本文深入探讨了Pixhawk飞行控制器中电机输出PWM值的计算过程,涉及roll、pitch、yaw因子的获取,控制量筛选及PWM值的计算。通过AP_MotorsMatrix类的output_to_motors()和calc_thrust_to_pwm()函数,结合add_motor_raw()和apply_thrust_curve_and_volt_scaling(),详细解释了从飞行控制指令到电机实际PWM值的转化逻辑。
摘要由CSDN通过智能技术生成

电机输出代码逻辑整理(二)

待解决问题

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]) {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值