Index: firmware/App/Controllers/AirPump.c =================================================================== diff -u -rf4816e953486acd06fe9c1592fc54731bdc840ce -r0299bdb0514a35999be37487ff332ecb3de163bd --- firmware/App/Controllers/AirPump.c (.../AirPump.c) (revision f4816e953486acd06fe9c1592fc54731bdc840ce) +++ firmware/App/Controllers/AirPump.c (.../AirPump.c) (revision 0299bdb0514a35999be37487ff332ecb3de163bd) @@ -47,7 +47,7 @@ static AIR_PUMP_STATE_T currentAirPumpState; ///< Current air pump control state. static U16 currentAirPumpRPM; ///< Current air pump RPM. -static F32 currentAirPumpPowerLevel; ///< Current air pump power level setting. +static F32 currentAirPumpPowerLevel; ///< Current air pump power level setting in % duty cycle (0..100%). static U32 airPumpDataPublicationTimerCounter; ///< Air pump data broadcast timer counter. static OVERRIDE_U32_T airPumpDataPublishInterval; ///< Air pump data broadcast interval (in ms). Index: firmware/App/Drivers/GLXferPump.c =================================================================== diff -u -rf267032333f872d729d33614f48373eeb6c422d2 -r0299bdb0514a35999be37487ff332ecb3de163bd --- firmware/App/Drivers/GLXferPump.c (.../GLXferPump.c) (revision f267032333f872d729d33614f48373eeb6c422d2) +++ firmware/App/Drivers/GLXferPump.c (.../GLXferPump.c) (revision 0299bdb0514a35999be37487ff332ecb3de163bd) @@ -29,16 +29,17 @@ // ********** private definitions ********** #define AIR_PUMP_PWM_TIME 20 ///< Time (in 10ns increments) per PWM register count for the air pump = 20 kHz. -#define AIR_PUMP_MAX_PWM 255.0f ///< Air pump maximum PWM. -#define AIR_PUMP_PWM_PCT 100.0f ///< Air pump pwm percentage +#define AIR_PUMP_MAX_PWM 255 ///< Air pump maximum PWM. +#define AIR_PUMP_DUTY_CYCLE_MIN 0.0F ///< Air pump minimum duty cycle in percentage +#define AIR_PUMP_DUTY_CYCLE_MAX 100.0F ///< Air pump maximum duty cycle in percentage // ********** private data ********** static F32 currentAirPumpMotorPowerLevel; ///< Current air pump motor state: 0=off, 1..255=power level. // ********** private function prototypes ********** -static U08 PercentageToScalar(F32 percentage); +static U08 convertPercentageToScalar( F32 percentage ); /*********************************************************************//** * @brief @@ -48,7 +49,7 @@ * @details \b Outputs: currentAirPumpMotorPowerLevel * @return none *************************************************************************/ -void initGasLiqXferPumpDriver(void) +void initGasLiqXferPumpDriver( void ) { currentAirPumpMotorPowerLevel = AIR_PUMP_MOTOR_OFF; setH12AirPumpMotorPowerLevel( currentAirPumpMotorPowerLevel ); @@ -58,7 +59,7 @@ /*********************************************************************//** * @brief * The setAirPumpMotorPower function sets the air pump motor to the given - * power level. + * power level in duty cycle percentage (0..100%). * @details \b Message \b Sent: MSG_ID_TD_EVENT if changing air pump power level. * @details \b Inputs: none * @details \b Outputs: currentAirPumpMotorPowerLevel @@ -67,11 +68,12 @@ *************************************************************************/ void setAirPumpMotorPower( F32 power ) { + U08 scalarPower = convertPercentageToScalar( power ); // if state is changing, set the air pump to the given on/off state and send event if ( power != currentAirPumpMotorPowerLevel ) { - SEND_EVENT_WITH_2_F32_DATA(TD_EVENT_AIR_PUMP_ON_OFF, currentAirPumpMotorPowerLevel, power ); - setH12AirPumpMotorPowerLevel( PercentageToScalar( power ) ); + SEND_EVENT_WITH_2_F32_DATA( TD_EVENT_AIR_PUMP_ON_OFF, currentAirPumpMotorPowerLevel, power ); + setH12AirPumpMotorPowerLevel( scalarPower ); currentAirPumpMotorPowerLevel = power; } } @@ -110,19 +112,14 @@ * @param percentage Power level for air pump (0...2=off, 3-100.0 for ON). * @return U08 8-bit PWM value (0-255) *************************************************************************/ -static U08 PercentageToScalar(F32 percentage) { +static U08 convertPercentageToScalar( F32 percentage ) +{ + F32 power; // Clamp input to 0-100% - if ( percentage < 0.0f ) - { - percentage = 0.0f; - } - if ( percentage > AIR_PUMP_PWM_PCT ) - { - percentage = AIR_PUMP_PWM_PCT; - } + power = RANGE( percentage, AIR_PUMP_DUTY_CYCLE_MIN, AIR_PUMP_DUTY_CYCLE_MAX ); - // Calculate 0-255 value (255 * percent / 100) - return (U08)( ( ( percentage * AIR_PUMP_MAX_PWM ) / AIR_PUMP_PWM_PCT ) ); + // Calculate 0-255 value (255 * power / 100) + return (U08)( ( ( power * AIR_PUMP_MAX_PWM ) / FRACTION_TO_PERCENT_FACTOR ) ); }