Index: firmware/App/Drivers/GLXferPump.c =================================================================== diff -u -r930bd81e14c0107cfe3f862d9a9cf87d9dadf84a -rf267032333f872d729d33614f48373eeb6c422d2 --- firmware/App/Drivers/GLXferPump.c (.../GLXferPump.c) (revision 930bd81e14c0107cfe3f862d9a9cf87d9dadf84a) +++ firmware/App/Drivers/GLXferPump.c (.../GLXferPump.c) (revision f267032333f872d729d33614f48373eeb6c422d2) @@ -29,13 +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 // ********** private data ********** -static U08 currentAirPumpMotorPowerLevel; ///< Current air pump motor state: 0=off, 1..255=power level. +static F32 currentAirPumpMotorPowerLevel; ///< Current air pump motor state: 0=off, 1..255=power level. // ********** private function prototypes ********** +static U08 PercentageToScalar(F32 percentage); + /*********************************************************************//** * @brief * The initGasLiqXferPumpDriver function initializes the gas/liquid transfer @@ -58,16 +62,16 @@ * @details \b Message \b Sent: MSG_ID_TD_EVENT if changing air pump power level. * @details \b Inputs: none * @details \b Outputs: currentAirPumpMotorPowerLevel - * @param power Power level for air pump (0=off, 1..255=lower to higher power level). + * @param power Power level for air pump (0..2=off, 3..100=lower to higher power level). * @return none. *************************************************************************/ -void setAirPumpMotorPower( U08 power ) +void setAirPumpMotorPower( F32 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_U32_DATA( TD_EVENT_AIR_PUMP_ON_OFF, (U32)currentAirPumpMotorPowerLevel, (U32)power ); - setH12AirPumpMotorPowerLevel( power ); + SEND_EVENT_WITH_2_F32_DATA(TD_EVENT_AIR_PUMP_ON_OFF, currentAirPumpMotorPowerLevel, power ); + setH12AirPumpMotorPowerLevel( PercentageToScalar( power ) ); currentAirPumpMotorPowerLevel = power; } } @@ -80,7 +84,7 @@ * @details \b Outputs: none * @return Current set power level of the air pump motor. *************************************************************************/ -U08 getAirPumpMotorPower( void ) +F32 getAirPumpMotorPower( void ) { return currentAirPumpMotorPowerLevel; } @@ -97,7 +101,31 @@ return getAirPumpRPM(); } +/*********************************************************************//** + * @brief + * The PercentageToScalar function convert percentage 0-100% duty + * cycle to 0-255 scalar value. + * @details \b Inputs: none + * @details \b Outputs: none + * @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) { + // Clamp input to 0-100% + if ( percentage < 0.0f ) + { + percentage = 0.0f; + } + if ( percentage > AIR_PUMP_PWM_PCT ) + { + percentage = AIR_PUMP_PWM_PCT; + } + // Calculate 0-255 value (255 * percent / 100) + return (U08)( ( ( percentage * AIR_PUMP_MAX_PWM ) / AIR_PUMP_PWM_PCT ) ); +} + + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/