Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -r07a5add2dff254f7be3699e4efac2b99d3554847 -r9a9d04b84f4345fca87fb14d26f09d497b08aae8 --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 07a5add2dff254f7be3699e4efac2b99d3554847) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 9a9d04b84f4345fca87fb14d26f09d497b08aae8) @@ -135,6 +135,7 @@ static BLOOD_PUMP_STATE_T handleBloodPumpRampingUpState( void ); static BLOOD_PUMP_STATE_T handleBloodPumpRampingDownState( void ); static BLOOD_PUMP_STATE_T handleBloodPumpControlToTargetState( void ); +static void setBloodPumpControlSignalPWM( F32 newPWM ); static void stopBloodPump( void ); static void releaseBloodPumpStop( void ); static void setBloodPumpDirection( MOTOR_DIR_T dir ); @@ -338,7 +339,7 @@ { // set initial PWM duty cycle bloodPumpPWMDutyCyclePctSet = BP_PWM_ZERO_OFFSET + MAX_BLOOD_PUMP_PWM_STEP_CHANGE; - etpwmSetCmpA( etpwmREG1, (U32)( (S32)( ( bloodPumpPWMDutyCyclePctSet * (F32)(etpwmREG1->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); + setBloodPumpControlSignalPWM( bloodPumpPWMDutyCyclePctSet ); // allow blood pump to run in requested direction setBloodPumpDirection( bloodPumpDirection ); releaseBloodPumpStop(); @@ -368,7 +369,7 @@ { // start ramp down to stop bloodPumpPWMDutyCyclePctSet -= MAX_BLOOD_PUMP_PWM_STEP_CHANGE; - etpwmSetCmpA( etpwmREG1, (U32)( (S32)( ( bloodPumpPWMDutyCyclePctSet * (F32)(etpwmREG1->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); + setBloodPumpControlSignalPWM( bloodPumpPWMDutyCyclePctSet ); result = BLOOD_PUMP_RAMPING_DOWN_STATE; } // have we reached end of ramp up? @@ -382,7 +383,7 @@ else { bloodPumpPWMDutyCyclePctSet += MAX_BLOOD_PUMP_PWM_STEP_CHANGE; - etpwmSetCmpA( etpwmREG1, (U32)( (S32)( ( bloodPumpPWMDutyCyclePctSet * (F32)(etpwmREG1->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); + setBloodPumpControlSignalPWM( bloodPumpPWMDutyCyclePctSet ); } return result; @@ -419,7 +420,7 @@ else { bloodPumpPWMDutyCyclePctSet -= MAX_BLOOD_PUMP_PWM_STEP_CHANGE; - etpwmSetCmpA( etpwmREG1, (U32)( (S32)( ( bloodPumpPWMDutyCyclePctSet * (F32)(etpwmREG1->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); + setBloodPumpControlSignalPWM( bloodPumpPWMDutyCyclePctSet ); } return result; @@ -447,14 +448,29 @@ { newPWM = runPIController( PI_CONTROLLER_ID_BLOOD_FLOW, tgtFlow, actFlow ); bloodPumpPWMDutyCyclePctSet = newPWM; - etpwmSetCmpA( etpwmREG1, (U32)( (S32)( ( bloodPumpPWMDutyCyclePctSet * (F32)(etpwmREG1->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); + setBloodPumpControlSignalPWM( newPWM ); bpControlTimerCounter = 0; } return result; } /************************************************************************* + * @brief setBloodPumpControlSignalPWM + * The setBloodPumpControlSignalPWM function sets the PWM duty cycle for \n + * the blood pump to a given %. + * @details + * Inputs : none + * Outputs : blood pump stop signal activated, PWM duty cycle zeroed + * @param newPWM : new duty cycle % to apply to PWM + * @return none + *************************************************************************/ +static void setBloodPumpControlSignalPWM( F32 newPWM ) +{ + etpwmSetCmpA( etpwmREG1, (U32)( (S32)( ( newPWM * (F32)(etpwmREG1->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); +} + +/************************************************************************* * @brief stopBloodPump * The stopBloodPump function sets the blood pump stop signal. * @details