Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -rf861c4c5ab64f429e0b8b9cc456e2ed14e472f2b -rb5756e5b5041288a2e95585990cce5a93756d693 --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision f861c4c5ab64f429e0b8b9cc456e2ed14e472f2b) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision b5756e5b5041288a2e95585990cce5a93756d693) @@ -44,7 +44,8 @@ #define BLOOD_FLOW_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< interval (ms/task time) at which the blood flow data is published on the CAN bus -#define MAX_BLOOD_PUMP_PWM_STEP_CHANGE 0.01 ///< max duty cycle change when ramping +#define MAX_BLOOD_PUMP_PWM_STEP_UP_CHANGE 0.008 ///< max duty cycle change when ramping up ~ 100 mL/min/s. +#define MAX_BLOOD_PUMP_PWM_STEP_DN_CHANGE 0.016 ///< max duty cycle change when ramping down ~ 200 mL/min/s. #define MAX_BLOOD_PUMP_PWM_DUTY_CYCLE 0.88 ///< controller will error if PWM duty cycle > 90%, so set max to 88% #define MIN_BLOOD_PUMP_PWM_DUTY_CYCLE 0.12 ///< controller will error if PWM duty cycle < 10%, so set min to 12% @@ -437,7 +438,7 @@ if ( getTargetBloodFlowRate() != 0 ) { // set initial PWM duty cycle - bloodPumpPWMDutyCyclePctSet = BP_PWM_ZERO_OFFSET + MAX_BLOOD_PUMP_PWM_STEP_CHANGE; + bloodPumpPWMDutyCyclePctSet = BP_PWM_ZERO_OFFSET + MAX_BLOOD_PUMP_PWM_STEP_UP_CHANGE; setBloodPumpControlSignalPWM( bloodPumpPWMDutyCyclePctSet ); // allow blood pump to run in requested direction setBloodPumpDirection( bloodPumpDirection ); @@ -466,7 +467,7 @@ if ( 0 == getTargetBloodFlowRate() ) { // start ramp down to stop - bloodPumpPWMDutyCyclePctSet -= MAX_BLOOD_PUMP_PWM_STEP_CHANGE; + bloodPumpPWMDutyCyclePctSet -= MAX_BLOOD_PUMP_PWM_STEP_DN_CHANGE; setBloodPumpControlSignalPWM( bloodPumpPWMDutyCyclePctSet ); result = BLOOD_PUMP_RAMPING_DOWN_STATE; } @@ -487,7 +488,7 @@ // continue ramp up else { - bloodPumpPWMDutyCyclePctSet += MAX_BLOOD_PUMP_PWM_STEP_CHANGE; + bloodPumpPWMDutyCyclePctSet += MAX_BLOOD_PUMP_PWM_STEP_UP_CHANGE; setBloodPumpControlSignalPWM( bloodPumpPWMDutyCyclePctSet ); } @@ -508,7 +509,7 @@ BLOOD_PUMP_STATE_T result = BLOOD_PUMP_RAMPING_DOWN_STATE; // have we essentially reached zero speed - if ( bloodPumpPWMDutyCyclePctSet < (MAX_BLOOD_PUMP_PWM_STEP_CHANGE + BP_PWM_ZERO_OFFSET) ) + if ( bloodPumpPWMDutyCyclePctSet < (MAX_BLOOD_PUMP_PWM_STEP_UP_CHANGE + BP_PWM_ZERO_OFFSET) ) { stopBloodPump(); result = BLOOD_PUMP_OFF_STATE; @@ -530,7 +531,7 @@ // continue ramp down else { - bloodPumpPWMDutyCyclePctSet -= MAX_BLOOD_PUMP_PWM_STEP_CHANGE; + bloodPumpPWMDutyCyclePctSet -= MAX_BLOOD_PUMP_PWM_STEP_DN_CHANGE; setBloodPumpControlSignalPWM( bloodPumpPWMDutyCyclePctSet ); } @@ -803,7 +804,7 @@ static void publishBloodFlowData( void ) { // publish blood flow data on interval -#ifndef READ_FPGA_ASYNC_DATA +#ifndef FLOW_DEBUG if ( ++bloodFlowDataPublicationTimerCounter >= getPublishBloodFlowDataInterval() ) #endif { @@ -814,7 +815,7 @@ F32 measMCSpd = getMeasuredBloodPumpMCSpeed(); F32 measMCCurr = getMeasuredBloodPumpMCCurrent(); F32 pumpPWMPctDutyCycle = bloodPumpPWMDutyCyclePctSet * FRACTION_TO_PERCENT_FACTOR; -#ifdef READ_FPGA_ASYNC_DATA +#ifdef FLOW_DEBUG // TODO - temporary debug code - remove later char debugFlowStr[ 256 ]; @@ -827,8 +828,9 @@ sprintf( debugFlowStr, "Blood: %5d, %5d, %5d Dial-I: %5d, %5d, %5d Dial-O: %5d\n", (S32)measFlowSig, (S32)measFlow, (S32)bldOccl, (S32)dialFlowSig, (S32)dialFlow, (S32)dpiOccl, (S32)dpoOccl ); sendDebugData( (U08*)debugFlowStr, strlen(debugFlowStr) ); -#endif +#else broadcastBloodFlowData( flowStPt, measFlow, measRotSpd, measSpd, measMCSpd, measMCCurr, pumpPWMPctDutyCycle ); +#endif bloodFlowDataPublicationTimerCounter = 0; } }