// motor_test_output - checks for timeout and sends updates to motors objects void QuadPlane::motor_test_output() { // exit immediately if the motor test is not running if (!motor_test.running) { return; } // check for test timeout uint32_t now = AP_HAL::millis(); if ((now - motor_test.start_ms) >= motor_test.timeout_ms) { if (motor_test.motor_count > 1) { if (now - motor_test.start_ms < motor_test.timeout_ms*1.5) { // output zero for 0.5s motors->output_min(); } else { // move onto next motor motor_test.seq++; motor_test.motor_count--; motor_test.start_ms = now; } return; } // stop motor test motor_test_stop(); return; } int16_t pwm = 0; // pwm that will be output to the motors // calculate pwm based on throttle type switch (motor_test.throttle_type) { case MOTOR_TEST_THROTTLE_PERCENT: // sanity check motor_test.throttle value if (motor_test.throttle_value <= 100) { pwm = thr_min_pwm + (thr_max_pwm - thr_min_pwm) * (float)motor_test.throttle_value*0.01f; } break; case MOTOR_TEST_THROTTLE_PWM: pwm = motor_test.throttle_value; break; case MOTOR_TEST_THROTTLE_PILOT: pwm = plane.channel_throttle->get_radio_in(); break; default: motor_test_stop(); return; } // sanity check throttle values if (pwm >= MOTOR_TEST_PWM_MIN && pwm <= MOTOR_TEST_PWM_MAX ) { // turn on motor to specified pwm vlaue motors->output_test(motor_test.seq, pwm); } else { motor_test_stop(); } }
// motor_test_output - checks for timeout and sends updates to motors objects void Copter::motor_test_output() { // exit immediately if the motor test is not running if (!ap.motor_test) { return; } // check for test timeout if ((AP_HAL::millis() - motor_test_start_ms) >= motor_test_timeout_ms) { // stop motor test motor_test_stop(); } else { int16_t pwm = 0; // pwm that will be output to the motors // calculate pwm based on throttle type switch (motor_test_throttle_type) { case MOTOR_TEST_THROTTLE_PERCENT: // sanity check motor_test_throttle value #if FRAME_CONFIG != HELI_FRAME if (motor_test_throttle_value <= 100) { int16_t pwm_min = motors.get_pwm_output_min(); int16_t pwm_max = motors.get_pwm_output_max(); pwm = pwm_min + (pwm_max - pwm_min) * (float)motor_test_throttle_value/100.0f; } #endif break; case MOTOR_TEST_THROTTLE_PWM: pwm = motor_test_throttle_value; break; case MOTOR_TEST_THROTTLE_PILOT: pwm = channel_throttle->get_radio_in(); break; default: motor_test_stop(); return; break; } // sanity check throttle values if (pwm >= MOTOR_TEST_PWM_MIN && pwm <= MOTOR_TEST_PWM_MAX ) { // turn on motor to specified pwm vlaue motors.output_test(motor_test_seq, pwm); } else { motor_test_stop(); } } }
// motor_test_output - checks for timeout and sends updates to motors objects void Sub::motor_test_output() { // exit immediately if the motor test is not running if (!ap.motor_test) { return; } // check for test timeout if ((AP_HAL::millis() - motor_test_start_ms) >= motor_test_timeout_ms) { // stop motor test motor_test_stop(); } else { int16_t pwm = 0; // pwm that will be output to the motors // calculate pwm based on throttle type switch (motor_test_throttle_type) { case MOTOR_TEST_THROTTLE_PERCENT: // sanity check motor_test_throttle value break; case MOTOR_TEST_THROTTLE_PWM: pwm = motor_test_throttle_value; break; case MOTOR_TEST_THROTTLE_PILOT: pwm = channel_throttle->get_radio_in(); break; default: motor_test_stop(); return; break; } // sanity check throttle values if (pwm >= MOTOR_TEST_PWM_MIN && pwm <= MOTOR_TEST_PWM_MAX ) { // turn on motor to specified pwm vlaue motors.output_test(motor_test_seq, pwm); } else { motor_test_stop(); } } }
// motor_test_output - checks for timeout and sends updates to motors objects void Copter::motor_test_output() { // exit immediately if the motor test is not running if (!ap.motor_test) { return; } // check for test timeout uint32_t now = AP_HAL::millis(); if ((now - motor_test_start_ms) >= motor_test_timeout_ms) { if (motor_test_count > 1) { if (now - motor_test_start_ms < motor_test_timeout_ms*1.5) { // output zero for 50% of the test time motors->output_min(); } else { // move onto next motor motor_test_seq++; motor_test_count--; motor_test_start_ms = now; if (!motors->armed()) { motors->armed(true); } } return; } // stop motor test motor_test_stop(); } else { int16_t pwm = 0; // pwm that will be output to the motors // calculate pwm based on throttle type switch (motor_test_throttle_type) { case MOTOR_TEST_COMPASS_CAL: compass.set_voltage(battery.voltage()); compass.per_motor_calibration_update(); FALLTHROUGH; case MOTOR_TEST_THROTTLE_PERCENT: // sanity check motor_test_throttle value #if FRAME_CONFIG != HELI_FRAME if (motor_test_throttle_value <= 100) { int16_t pwm_min = motors->get_pwm_output_min(); int16_t pwm_max = motors->get_pwm_output_max(); pwm = pwm_min + (pwm_max - pwm_min) * (float)motor_test_throttle_value/100.0f; } #endif break; case MOTOR_TEST_THROTTLE_PWM: pwm = motor_test_throttle_value; break; case MOTOR_TEST_THROTTLE_PILOT: pwm = channel_throttle->get_radio_in(); break; default: motor_test_stop(); return; } // sanity check throttle values if (pwm >= MOTOR_TEST_PWM_MIN && pwm <= MOTOR_TEST_PWM_MAX ) { // turn on motor to specified pwm vlaue motors->output_test(motor_test_seq, pwm); } else { motor_test_stop(); } } }