Index: firmware/App/Controllers/AirTrap.c =================================================================== diff -u -ra25d5c24569e3d77487a75498a4e10dd83ada9c4 -ra4774f170562e33a48238cb3e3137bdd06ac374a --- firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision a25d5c24569e3d77487a75498a4e10dd83ada9c4) +++ firmware/App/Controllers/AirTrap.c (.../AirTrap.c) (revision a4774f170562e33a48238cb3e3137bdd06ac374a) @@ -55,9 +55,8 @@ #define AIR_PUMP_MOTOR_LOWER_PWM 23.5F ///< Power level setting (PWM) in percentage for H12 air pump to lower the level of the air trap. #define AIR_PUMP_MOTOR_MIN_PWM_OVERRIDE 60 ///< Air pump motor minimum PWM to override. #define AIR_PUMP_MOTOR_MAX_PWM_OVERRIDE 250 ///< Air pump motor maximum PWM to override. -#define AIR_PUMP_MOTOR_MAX_PWM 255 ///< Air pump motor maximum PWM. /// LDT-2384 test formula for air trap lower events for air pump duty cycle based on venous pressure -/// air pump duty cycle (% PWM) = 0.0002x^2 + 0.0925x + 25.467, where x is long filtered H14 venous pressure in mmHg before air trap lower event +/// air pump duty cycle (% PWM) = 0.0002x^2 + 0.0925x + 25.467, where x is long filtered (60 sec) H14 venous pressure in mmHg before air trap lower event #define QUADRATIC_COEFFICIENT 0.0002F ///< X2 quadratic coefficient #define LINEAR_COEFFICIENT 0.0925F ///< X linear coefficient #define CONSTANT_TERM 25.467F ///< Constant term @@ -344,9 +343,10 @@ F32 getCalculatedAirPumpDutyCycle( void ) { F32 h14Pressure = getLongFilteredVenousPressure(); - // the currently set P12 duty cycle (raw PWM) must be 0.0005x^2 + 0.2313x + 63.667, where x = H14 venous pressure in mmHg before air pump lower event + /// LDT-2384 test formula for air trap lower events for air pump duty cycle based on venous pressure + /// air pump duty cycle (% PWM) = 0.0002x^2 + 0.0925x + 25.467, where x is long filtered (60 sec) H14 venous pressure in mmHg before air trap lower event F32 dutyCycle = ( ( QUADRATIC_COEFFICIENT * ( h14Pressure * h14Pressure ) ) - ( LINEAR_COEFFICIENT * ( h14Pressure ) ) ) + CONSTANT_TERM; - dutyCycle = ( dutyCycle / AIR_PUMP_MOTOR_MAX_PWM ) * FRACTION_TO_PERCENT_FACTOR; + dutyCycle = ( dutyCycle / (F32)AIR_PUMP_MAX_PWM ) * FRACTION_TO_PERCENT_FACTOR; return dutyCycle; } Index: firmware/App/Drivers/GLXferPump.c =================================================================== diff -u -r3074682de43568567f244e2663d1f75b7e6ea85e -ra4774f170562e33a48238cb3e3137bdd06ac374a --- firmware/App/Drivers/GLXferPump.c (.../GLXferPump.c) (revision 3074682de43568567f244e2663d1f75b7e6ea85e) +++ firmware/App/Drivers/GLXferPump.c (.../GLXferPump.c) (revision a4774f170562e33a48238cb3e3137bdd06ac374a) @@ -15,6 +15,8 @@ * ***************************************************************************/ +#include + #include "AlarmMgmtTD.h" #include "FpgaTD.h" #include "GLXferPump.h" @@ -29,7 +31,6 @@ // ********** 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 ///< Air pump maximum PWM. // ********** private data ********** @@ -104,20 +105,20 @@ /*********************************************************************//** * @brief * The PercentageToScalar function convert percentage 0-100% duty - * cycle to 0-255 scalar value. + * cycle to 0-250 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) + * @param percentage Power level for air pump (0=off, 1-100.0 for ON). + * @return U08 8-bit PWM value (0-250) *************************************************************************/ static U08 convertPercentageToScalar( F32 percentage ) { F32 power; // Clamp input to 0-100% power = RANGE( percentage, AIR_PUMP_DUTY_CYCLE_MIN, AIR_PUMP_DUTY_CYCLE_MAX ); - // Calculate 0-255 value (255 * power / 100) - return (U08)( ( ( power * AIR_PUMP_MAX_PWM ) / FRACTION_TO_PERCENT_FACTOR ) ); + // Calculate 0-250 value (250 * power / 100) + return (U08)( ceilf ( ( ( power * (F32)AIR_PUMP_MAX_PWM ) / FRACTION_TO_PERCENT_FACTOR ) ) ); } Index: firmware/App/Drivers/GLXferPump.h =================================================================== diff -u -r3074682de43568567f244e2663d1f75b7e6ea85e -ra4774f170562e33a48238cb3e3137bdd06ac374a --- firmware/App/Drivers/GLXferPump.h (.../GLXferPump.h) (revision 3074682de43568567f244e2663d1f75b7e6ea85e) +++ firmware/App/Drivers/GLXferPump.h (.../GLXferPump.h) (revision a4774f170562e33a48238cb3e3137bdd06ac374a) @@ -36,6 +36,7 @@ #define AIR_PUMP_MOTOR_OFF 0.0F ///< Power level setting (PWM) for H12 air pump to turn pump off. #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 +#define AIR_PUMP_MAX_PWM 250 ///< Air pump maximum PWM, FPGA ignores 251-255 // ********** public function prototypes **********