// init_outputs - initialise Servo/PWM ranges and endpoints bool AP_MotorsHeli_Single::init_outputs() { if (!_flags.initialised_ok) { _swash_servo_1 = SRV_Channels::get_channel_for(SRV_Channel::k_motor1, CH_1); _swash_servo_2 = SRV_Channels::get_channel_for(SRV_Channel::k_motor2, CH_2); _swash_servo_3 = SRV_Channels::get_channel_for(SRV_Channel::k_motor3, CH_3); _yaw_servo = SRV_Channels::get_channel_for(SRV_Channel::k_motor4, CH_4); if (_tail_type == AP_MOTORS_HELI_SINGLE_TAILTYPE_DIRECTDRIVE_VARPITCH) { _tail_rotor.init_servo(); if (!_swash_servo_1 || !_swash_servo_2 || !_swash_servo_3 || !_yaw_servo) { return false; } } else { _servo_aux = SRV_Channels::get_channel_for(SRV_Channel::k_motor7, CH_7); if (!_swash_servo_1 || !_swash_servo_2 || !_swash_servo_3 || !_yaw_servo || !_servo_aux) { return false; } } } // reset swash servo range and endpoints reset_swash_servo (_swash_servo_1); reset_swash_servo (_swash_servo_2); reset_swash_servo (_swash_servo_3); _yaw_servo->set_angle(4500); // set main rotor servo range // tail rotor servo use range as set in vehicle code for rc7 _main_rotor.init_servo(); return true; }
// init_outputs - initialise Servo/PWM ranges and endpoints void AP_MotorsHeli_Single::init_outputs() { // reset swash servo range and endpoints reset_swash_servo (_swash_servo_1); reset_swash_servo (_swash_servo_2); reset_swash_servo (_swash_servo_3); _yaw_servo.set_angle(4500); // set main rotor servo range // tail rotor servo use range as set in vehicle code for rc7 _main_rotor.init_servo(); }
// init_outputs bool AP_MotorsHeli_Dual::init_outputs() { if (!_flags.initialised_ok) { _swash_servo_1 = SRV_Channels::get_channel_for(SRV_Channel::k_motor1, CH_1); _swash_servo_2 = SRV_Channels::get_channel_for(SRV_Channel::k_motor2, CH_2); _swash_servo_3 = SRV_Channels::get_channel_for(SRV_Channel::k_motor3, CH_3); _swash_servo_4 = SRV_Channels::get_channel_for(SRV_Channel::k_motor4, CH_4); _swash_servo_5 = SRV_Channels::get_channel_for(SRV_Channel::k_motor5, CH_5); _swash_servo_6 = SRV_Channels::get_channel_for(SRV_Channel::k_motor6, CH_6); if (!_swash_servo_1 || !_swash_servo_2 || !_swash_servo_3 || !_swash_servo_4 || !_swash_servo_5 || !_swash_servo_6) { return false; } } // reset swash servo range and endpoints reset_swash_servo (_swash_servo_1); reset_swash_servo (_swash_servo_2); reset_swash_servo (_swash_servo_3); reset_swash_servo (_swash_servo_4); reset_swash_servo (_swash_servo_5); reset_swash_servo (_swash_servo_6); // set rotor servo range _rotor.init_servo(); _flags.initialised_ok = true; return true; }
// init_outputs bool AP_MotorsHeli_Dual::init_outputs() { if (!_flags.initialised_ok) { // make sure 6 output channels are mapped for (uint8_t i=0; i<AP_MOTORS_HELI_DUAL_NUM_SWASHPLATE_SERVOS; i++) { add_motor_num(CH_1+i); } // set rotor servo range _rotor.init_servo(); } // reset swash servo range and endpoints for (uint8_t i=0; i<AP_MOTORS_HELI_DUAL_NUM_SWASHPLATE_SERVOS; i++) { reset_swash_servo(SRV_Channels::get_motor_function(i)); } _flags.initialised_ok = true; return true; }
// init_outputs - initialise Servo/PWM ranges and endpoints bool AP_MotorsHeli_Single::init_outputs() { if (!_flags.initialised_ok) { // map primary swash servos for (uint8_t i=0; i<AP_MOTORS_HELI_SINGLE_NUM_SWASHPLATE_SERVOS; i++) { add_motor_num(CH_1+i); } // yaw servo add_motor_num(CH_4); // initialize main rotor servo _main_rotor.init_servo(); if (_tail_type == AP_MOTORS_HELI_SINGLE_TAILTYPE_DIRECTDRIVE_VARPITCH) { _tail_rotor.init_servo(); } else if (_tail_type == AP_MOTORS_HELI_SINGLE_TAILTYPE_SERVO_EXTGYRO) { // external gyro output add_motor_num(AP_MOTORS_HELI_SINGLE_EXTGYRO); } } if (_tail_type == AP_MOTORS_HELI_SINGLE_TAILTYPE_SERVO_EXTGYRO) { // External Gyro uses PWM output thus servo endpoints are forced SRV_Channels::set_output_min_max(SRV_Channels::get_motor_function(AP_MOTORS_HELI_SINGLE_EXTGYRO), 1000, 2000); } // reset swash servo range and endpoints for (uint8_t i=0; i<AP_MOTORS_HELI_SINGLE_NUM_SWASHPLATE_SERVOS; i++) { reset_swash_servo(SRV_Channels::get_motor_function(i)); } // yaw servo is an angle from -4500 to 4500 SRV_Channels::set_angle(SRV_Channel::k_motor4, YAW_SERVO_MAX_ANGLE); _flags.initialised_ok = true; return true; }