Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -r3ded5ffcbcade3f1da5d40c52936ab5f97fc6ec9 -rf4545d449a2a2f9353307a55d2bce9e150591c3d --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 3ded5ffcbcade3f1da5d40c52936ab5f97fc6ec9) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision f4545d449a2a2f9353307a55d2bce9e150591c3d) @@ -52,8 +52,8 @@ #define MIN_BLOOD_PUMP_PWM_DUTY_CYCLE 0.12 ///< controller will error if PWM duty cycle < 10%, so set min to 12% #define BP_CONTROL_INTERVAL ( 10000 / TASK_GENERAL_INTERVAL ) ///< interval (ms/task time) at which the blood pump is controlled -#define BP_P_COEFFICIENT 0.00005 ///< P term for blood pump control -#define BP_I_COEFFICIENT 0.00015 ///< I term for blood pump control +#define BP_P_COEFFICIENT 0.00035 ///< P term for blood pump control +#define BP_I_COEFFICIENT 0.00035 ///< I term for blood pump control #define BP_HOME_RATE 100 ///< target pump speed (in estimate mL/min) for homing. #define BP_HOME_TIMEOUT_MS 10000 ///< maximum time allowed for homing to complete (in ms). @@ -81,7 +81,7 @@ #define BP_REV_PER_LITER 150.24 ///< rotor revolutions per liter #define BP_ML_PER_MIN_TO_PUMP_RPM_FACTOR ( BP_REV_PER_LITER / ML_PER_LITER ) ///< conversion factor from mL/min to motor RPM. #define BP_GEAR_RATIO 32.0 ///< blood pump motor to blood pump gear ratio -#define BP_MOTOR_RPM_TO_PWM_DC_FACTOR 0.00035 ///< ~28 BP motor RPM = 1% PWM duty cycle +#define BP_MOTOR_RPM_TO_PWM_DC_FACTOR 0.00028 //308 ///< ~28 BP motor RPM = 1% PWM duty cycle #define BP_PWM_ZERO_OFFSET 0.1 ///< 10% PWM duty cycle = zero speed #define BP_PWM_FROM_ML_PER_MIN(rate) ( (rate) * BP_ML_PER_MIN_TO_PUMP_RPM_FACTOR * BP_GEAR_RATIO * BP_MOTOR_RPM_TO_PWM_DC_FACTOR + BP_PWM_ZERO_OFFSET ) ///< conversion factor from mL/min to estimated PWM duty cycle %. @@ -363,7 +363,7 @@ { U16 bpRPM = getIntADCReading( INT_ADC_BLOOD_PUMP_SPEED ); U16 bpmA = getIntADCReading( INT_ADC_BLOOD_PUMP_MOTOR_CURRENT ); - F32 bpFlow = ( getFPGABloodFlow() + bloodFlowCalOffset ) * bloodFlowCalGain; + F32 bpFlow = ( ( getFPGABloodFlow() * -1.0 ) * bloodFlowCalGain ) + bloodFlowCalOffset; // blood flow sensor installed backwards on HD adcBloodPumpMCSpeedRPM.data = (F32)(SIGN_FROM_12_BIT_VALUE(bpRPM)) * BP_SPEED_ADC_TO_RPM_FACTOR; adcBloodPumpMCCurrentmA.data = (F32)(SIGN_FROM_12_BIT_VALUE(bpmA)) * BP_CURRENT_ADC_TO_MA_FACTOR; @@ -1228,17 +1228,16 @@ { CALIBRATION_DATA_T cal; - if ( TRUE == getCalibrationData( &cal ) ) - { // keep locally and apply immediately - bloodFlowCalGain = gain; - bloodFlowCalOffset = offset; - // also update calibration record in non-volatile memory - cal.bloodFlowGain = gain; - cal.bloodFlowOffset_mL_min = offset; - if ( TRUE == setCalibrationData( cal ) ) - { - result = TRUE; - } + getCalibrationData( &cal ); + // keep locally and apply immediately + bloodFlowCalGain = gain; + bloodFlowCalOffset = offset; + // also update calibration record in non-volatile memory + cal.bloodFlowGain = gain; + cal.bloodFlowOffset_mL_min = offset; + if ( TRUE == setCalibrationData( cal ) ) + { + result = TRUE; } }