Index: firmware/App/Controllers/AirPump.c =================================================================== diff -u -rb9e150edbdb63661806f6ef9c52e4ae2837f5f93 -rf267032333f872d729d33614f48373eeb6c422d2 --- firmware/App/Controllers/AirPump.c (.../AirPump.c) (revision b9e150edbdb63661806f6ef9c52e4ae2837f5f93) +++ firmware/App/Controllers/AirPump.c (.../AirPump.c) (revision f267032333f872d729d33614f48373eeb6c422d2) @@ -39,15 +39,15 @@ typedef struct { U32 h12State; ///< Air pump state to command. - U32 h12Power; ///< Air pump power level to command. + F32 h12Power; ///< Air pump power level to command. } AIR_PUMP_SET_CMD_PAYLOAD_T; #pragma pack(pop) // ********** private data ********** static AIR_PUMP_STATE_T currentAirPumpState; ///< Current air pump control state. -static U08 currentAirPumpPowerLevel; ///< Current air pump power level setting. static U16 currentAirPumpRPM; ///< Current air pump RPM. +static F32 currentAirPumpPowerLevel; ///< Current air pump power level setting. static U32 airPumpDataPublicationTimerCounter; ///< Air pump data broadcast timer counter. static OVERRIDE_U32_T airPumpDataPublishInterval; ///< Air pump data broadcast interval (in ms). @@ -91,7 +91,7 @@ * @param power Power level to set air pump to * @return none *************************************************************************/ -void setAirPumpState( AIR_PUMP_STATE_T state, U08 power ) +void setAirPumpState( AIR_PUMP_STATE_T state, F32 power ) { if ( state < NUM_OF_AIR_PUMP_STATES ) { @@ -226,8 +226,8 @@ AIR_PUMP_PAYLOAD_T data; data.h12State = getAirPumpState(); - data.h12Power = (U32)currentAirPumpPowerLevel; data.h12Rpm = (U32)currentAirPumpRPM; + data.h12Power = currentAirPumpPowerLevel; broadcastData( MSG_ID_TD_AIR_PUMP_DATA, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&data, sizeof( AIR_PUMP_PAYLOAD_T ) ); airPumpDataPublicationTimerCounter = 0; @@ -279,7 +279,7 @@ AIR_PUMP_SET_CMD_PAYLOAD_T payload; memcpy( &payload, msgPayload, sizeof( AIR_PUMP_SET_CMD_PAYLOAD_T ) ); - setAirPumpState( (AIR_PUMP_STATE_T)payload.h12State, (U08)payload.h12Power ); + setAirPumpState( (AIR_PUMP_STATE_T)payload.h12State, payload.h12Power ); result = TRUE; } } Index: firmware/App/Controllers/AirPump.h =================================================================== diff -u -r515eb6e184a716fb21f7a5008e54570c1f58fe42 -rf267032333f872d729d33614f48373eeb6c422d2 --- firmware/App/Controllers/AirPump.h (.../AirPump.h) (revision 515eb6e184a716fb21f7a5008e54570c1f58fe42) +++ firmware/App/Controllers/AirPump.h (.../AirPump.h) (revision f267032333f872d729d33614f48373eeb6c422d2) @@ -38,8 +38,8 @@ typedef struct { U32 h12State; ///< Air pump state status - U32 h12Power; ///< Air pump power level setting U32 h12Rpm; ///< Air pump speed in RPM. + F32 h12Power; ///< Air pump power level setting } AIR_PUMP_PAYLOAD_T; #pragma pack(pop) @@ -56,7 +56,7 @@ void initAirPump(void); void execAirPumpController(void); -void setAirPumpState( AIR_PUMP_STATE_T state, U08 power ); +void setAirPumpState( AIR_PUMP_STATE_T state, F32 power ); AIR_PUMP_STATE_T getAirPumpState( void ); BOOL testAirPumpDataPublishIntervalOverride( MESSAGE_T *message ); 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 *************************************************************************/ Index: firmware/App/Drivers/GLXferPump.h =================================================================== diff -u -rf049791a4d8b29118e1eb29e351fdca6a1908ffa -rf267032333f872d729d33614f48373eeb6c422d2 --- firmware/App/Drivers/GLXferPump.h (.../GLXferPump.h) (revision f049791a4d8b29118e1eb29e351fdca6a1908ffa) +++ firmware/App/Drivers/GLXferPump.h (.../GLXferPump.h) (revision f267032333f872d729d33614f48373eeb6c422d2) @@ -33,15 +33,14 @@ // ********** public definitions ********** -#define AIR_PUMP_MOTOR_OFF 0 ///< Power level setting (PWM) for H12 air pump to turn pump off. -#define AIR_PUMP_MOTOR_MAX_PWM 60 ///< Power level setting (PWM) maximum for H12 air pump. +#define AIR_PUMP_MOTOR_OFF 0.0f ///< Power level setting (PWM) for H12 air pump to turn pump off. // ********** public function prototypes ********** void initGasLiqXferPumpDriver( void ); -void setAirPumpMotorPower( U08 power ); -U08 getAirPumpMotorPower( void ); U16 getAirPumpMotorRPM( void ); +void setAirPumpMotorPower( F32 power ); +F32 getAirPumpMotorPower( void ); BOOL testSetAirPump( MESSAGE_T *message );