Skip to content

Commit

Permalink
AP_Motors: Heli: add helper to convert from AP_Motors::SpoolState to …
Browse files Browse the repository at this point in the history
…AP_MotorsHeli_RSC::RotorControlState
  • Loading branch information
IamPete1 authored and tridge committed Dec 18, 2023
1 parent 287e972 commit 1bcf69e
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 57 deletions.
23 changes: 23 additions & 0 deletions libraries/AP_Motors/AP_MotorsHeli.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -590,3 +590,26 @@ void AP_MotorsHeli::set_desired_rotor_speed(float desired_speed)
{
_main_rotor.set_desired_speed(desired_speed);
}

// Converts AP_Motors::SpoolState from _spool_state variable to AP_MotorsHeli_RSC::RotorControlState
AP_MotorsHeli_RSC::RotorControlState AP_MotorsHeli::get_rotor_control_state() const
{
switch (_spool_state) {
case SpoolState::SHUT_DOWN:
// sends minimum values out to the motors
return AP_MotorsHeli_RSC::RotorControlState::STOP;
case SpoolState::GROUND_IDLE:
// sends idle output to motors when armed. rotor could be static or turning (autorotation)
return AP_MotorsHeli_RSC::RotorControlState::IDLE;
case SpoolState::SPOOLING_UP:
case SpoolState::THROTTLE_UNLIMITED:
// set motor output based on thrust requests
return AP_MotorsHeli_RSC::RotorControlState::ACTIVE;
case SpoolState::SPOOLING_DOWN:
// sends idle output to motors and wait for rotor to stop
return AP_MotorsHeli_RSC::RotorControlState::IDLE;
}

// Should be unreachable, but needed to keep the compiler happy
return AP_MotorsHeli_RSC::RotorControlState::STOP;
}
3 changes: 3 additions & 0 deletions libraries/AP_Motors/AP_MotorsHeli.h
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,9 @@ class AP_MotorsHeli : public AP_Motors {
// update_motor_controls - sends commands to motor controllers
virtual void update_motor_control(AP_MotorsHeli_RSC::RotorControlState state) = 0;

// Converts AP_Motors::SpoolState from _spool_state variable to AP_MotorsHeli_RSC::RotorControlState
AP_MotorsHeli_RSC::RotorControlState get_rotor_control_state() const;

// run spool logic
void output_logic();

Expand Down
21 changes: 2 additions & 19 deletions libraries/AP_Motors/AP_MotorsHeli_Dual.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -525,25 +525,8 @@ void AP_MotorsHeli_Dual::output_to_motors()
_swashplate1.output();
_swashplate2.output();

switch (_spool_state) {
case SpoolState::SHUT_DOWN:
// sends minimum values out to the motors
update_motor_control(AP_MotorsHeli_RSC::RotorControlState::STOP);
break;
case SpoolState::GROUND_IDLE:
// sends idle output to motors when armed. rotor could be static or turning (autorotation)
update_motor_control(AP_MotorsHeli_RSC::RotorControlState::IDLE);
break;
case SpoolState::SPOOLING_UP:
case SpoolState::THROTTLE_UNLIMITED:
// set motor output based on thrust requests
update_motor_control(AP_MotorsHeli_RSC::RotorControlState::ACTIVE);
break;
case SpoolState::SPOOLING_DOWN:
// sends idle output to motors and wait for rotor to stop
update_motor_control(AP_MotorsHeli_RSC::RotorControlState::IDLE);
break;
}
update_motor_control(get_rotor_control_state());

}

// servo_test - move servos through full range of movement
Expand Down
21 changes: 2 additions & 19 deletions libraries/AP_Motors/AP_MotorsHeli_Quad.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -273,25 +273,8 @@ void AP_MotorsHeli_Quad::output_to_motors()
rc_write_angle(AP_MOTORS_MOT_1+i, _out[i] * QUAD_SERVO_MAX_ANGLE);
}

switch (_spool_state) {
case SpoolState::SHUT_DOWN:
// sends minimum values out to the motors
update_motor_control(AP_MotorsHeli_RSC::RotorControlState::STOP);
break;
case SpoolState::GROUND_IDLE:
// sends idle output to motors when armed. rotor could be static or turning (autorotation)
update_motor_control(AP_MotorsHeli_RSC::RotorControlState::IDLE);
break;
case SpoolState::SPOOLING_UP:
case SpoolState::THROTTLE_UNLIMITED:
// set motor output based on thrust requests
update_motor_control(AP_MotorsHeli_RSC::RotorControlState::ACTIVE);
break;
case SpoolState::SPOOLING_DOWN:
// sends idle output to motors and wait for rotor to stop
update_motor_control(AP_MotorsHeli_RSC::RotorControlState::IDLE);
break;
}
update_motor_control(get_rotor_control_state());

}

// servo_test - move servos through full range of movement
Expand Down
20 changes: 1 addition & 19 deletions libraries/AP_Motors/AP_MotorsHeli_Single.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -501,25 +501,7 @@ void AP_MotorsHeli_Single::output_to_motors()
_swashplate.output();

// Output main rotor
switch (_spool_state) {
case SpoolState::SHUT_DOWN:
// sends minimum values out to the motors
update_motor_control(AP_MotorsHeli_RSC::RotorControlState::STOP);
break;
case SpoolState::GROUND_IDLE:
// sends idle output to motors when armed. rotor could be static or turning (autorotation)
update_motor_control(AP_MotorsHeli_RSC::RotorControlState::IDLE);
break;
case SpoolState::SPOOLING_UP:
case SpoolState::THROTTLE_UNLIMITED:
// set motor output based on thrust requests
update_motor_control(AP_MotorsHeli_RSC::RotorControlState::ACTIVE);
break;
case SpoolState::SPOOLING_DOWN:
// sends idle output to motors and wait for rotor to stop
update_motor_control(AP_MotorsHeli_RSC::RotorControlState::IDLE);
break;
}
update_motor_control(get_rotor_control_state());

// Output tail rotor
switch (get_tail_type()) {
Expand Down

0 comments on commit 1bcf69e

Please sign in to comment.