Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -r5e01e06bf4c6b05665ef096ea873d09b7bc904d3 -r893b25a778d71b4d779ff14aa7361914f388e87e --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 5e01e06bf4c6b05665ef096ea873d09b7bc904d3) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 893b25a778d71b4d779ff14aa7361914f388e87e) @@ -95,7 +95,13 @@ #define BP_MAX_CURR_WHEN_RUNNING_MA 2000.0 ///< Motor controller current should not exceed this when pump should be running. #define BP_MAX_CURR_ERROR_DURATION_MS 2000 ///< Motor controller current errors persisting beyond this duration will trigger an alarm. -#define BP_SPEED_ADC_TO_RPM_FACTOR 1.751752 ///< Conversion factor from ADC counts to RPM for blood pump motor. +#define BLOODPUMP_ADC_FULL_SCALE_V 3.0 ///< BP analog signals are 0-3V (while int. ADC ref may be different). +#define BLOODPUMP_ADC_ZERO 1998 ///< Blood pump ADC channel zero offset. + +/// Macro converts 12 bit ADC value to signed 16-bit value. +#define SIGN_FROM_12_BIT_VALUE(v) ( (S16)(v) - (S16)BLOODPUMP_ADC_ZERO ) + +#define BP_SPEED_ADC_TO_RPM_FACTOR 1.601601 ///< Conversion factor from ADC counts to RPM for blood pump motor (3200 RPM/1998 counts). #define BP_MOTOR_RPM_TO_PWM_DC_FACTOR 0.000238 ///< ~42 BP motor RPM = 1% PWM duty cycle. #define BP_CURRENT_ADC_TO_MA_FACTOR 3.002 ///< Conversion factor from ADC counts to mA for blood pump motor. @@ -110,11 +116,6 @@ /// Conversion from PWM duty cycle % to commanded pump motor speed. #define BP_PWM_TO_MOTOR_SPEED_RPM(pwm) ( ((pwm) - BP_PWM_ZERO_OFFSET) * 4000.0 ) -#define BLOODPUMP_ADC_FULL_SCALE_V 3.0 ///< BP analog signals are 0-3V (while int. ADC ref may be different). -#define BLOODPUMP_ADC_ZERO 1998 ///< Blood pump ADC channel zero offset. -/// Macro converts 12 bit ADC value to signed 16-bit value. -#define SIGN_FROM_12_BIT_VALUE(v) ( (S16)(v) - (S16)BLOODPUMP_ADC_ZERO ) - /// Measured blood flow is filtered w/ moving average. #define SIZE_OF_ROLLING_AVG ( ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) * 1 ) Index: firmware/App/Controllers/DialInFlow.c =================================================================== diff -u -r09e6cf9de34acf18f6e1138bf56ac0edb4821186 -r893b25a778d71b4d779ff14aa7361914f388e87e --- firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision 09e6cf9de34acf18f6e1138bf56ac0edb4821186) +++ firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision 893b25a778d71b4d779ff14aa7361914f388e87e) @@ -90,7 +90,13 @@ #define DIP_MAX_CURR_WHEN_RUNNING_MA 2000.0 ///< Motor controller current should not exceed this when pump should be running. #define DIP_MAX_CURR_ERROR_DURATION_MS 2000 ///< Motor controller current errors persisting beyond this duration will trigger an alarm. -#define DIP_SPEED_ADC_TO_RPM_FACTOR 1.751752 ///< Conversion factor from ADC counts to RPM for dialIn pump motor. +#define DIAL_IN_PUMP_ADC_FULL_SCALE_V 3.0 ///< BP analog signals are 0-3V (while int. ADC ref V may be different). +#define DIAL_IN_PUMP_ADC_ZERO 1998 ///< Mid-point (zero) for ADC readings. + +///< Macro converts a 12-bit ADC reading to a signed 16-bit value. +#define SIGN_FROM_12_BIT_VALUE(v) ( (S16)(v) - (S16)DIAL_IN_PUMP_ADC_ZERO ) + +#define DIP_SPEED_ADC_TO_RPM_FACTOR 1.601601 ///< Conversion factor from ADC counts to RPM for dialIn pump motor (3200 RPM/1998 counts). #define DIP_MOTOR_RPM_TO_PWM_DC_FACTOR 0.000193 ///< ~52 BP motor RPM = 1% PWM duty cycle #define DIP_CURRENT_ADC_TO_MA_FACTOR 3.002 ///< Conversion factor from ADC counts to mA for dialIn pump motor. @@ -99,16 +105,12 @@ #define DIP_ML_PER_MIN_TO_PUMP_RPM_FACTOR ( DIP_REV_PER_LITER / ML_PER_LITER ) #define DIP_GEAR_RATIO 32.0 ///< DialIn pump motor to dialIn pump gear ratio. #define DIP_PWM_ZERO_OFFSET 0.1 ///< 10% PWM duty cycle = zero speed. + /// Macro converts flow rate to estimate PWM needed to achieve it. // TODO - I added 1.2 gain based on empirical data #define DIP_PWM_FROM_ML_PER_MIN(rate) ( (rate) * DIP_ML_PER_MIN_TO_PUMP_RPM_FACTOR * DIP_GEAR_RATIO * DIP_MOTOR_RPM_TO_PWM_DC_FACTOR * 1.2 + DIP_PWM_ZERO_OFFSET ) /// Conversion from PWM duty cycle % to commanded pump motor speed. #define DIP_PWM_TO_MOTOR_SPEED_RPM(pwm) ( ((pwm) - DIP_PWM_ZERO_OFFSET) * 4000.0 ) -#define DIAL_IN_PUMP_ADC_FULL_SCALE_V 3.0 ///< BP analog signals are 0-3V (while int. ADC ref V may be different). -#define DIAL_IN_PUMP_ADC_ZERO 1998 ///< Mid-point (zero) for ADC readings. -///< Macro converts a 12-bit ADC reading to a signed 16-bit value. -#define SIGN_FROM_12_BIT_VALUE(v) ( (S16)(v) - (S16)DIAL_IN_PUMP_ADC_ZERO ) - /// Measured dialIn flow is filtered w/ moving average. #define SIZE_OF_ROLLING_AVG 10 Index: firmware/App/Controllers/DialOutFlow.c =================================================================== diff -u -r09e6cf9de34acf18f6e1138bf56ac0edb4821186 -r893b25a778d71b4d779ff14aa7361914f388e87e --- firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision 09e6cf9de34acf18f6e1138bf56ac0edb4821186) +++ firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision 893b25a778d71b4d779ff14aa7361914f388e87e) @@ -83,19 +83,19 @@ #define DOP_MAX_CURR_WHEN_RUNNING_MA 2000.0 ///< Motor controller current should not exceed this when pump should be running. #define DOP_MAX_CURR_ERROR_DURATION_MS 2000 ///< Motor controller current errors persisting beyond this duration will trigger an alarm. -#define DOP_SPEED_ADC_TO_RPM_FACTOR 1.751752 ///< Conversion factor from ADC counts to RPM for dialysate outlet pump motor. -#define DOP_MOTOR_RPM_TO_PWM_DC_FACTOR 0.000193 ///< ~52 BP motor RPM = 1% PWM duty cycle -#define DOP_CURRENT_ADC_TO_MA_FACTOR 3.002 ///< Conversion factor from ADC counts to mA for dialysate outlet pump motor. #define DOP_ADC_FULL_SCALE_V 3.0 ///< DPo analog signals are 0-3V (while int. ADC ref V may be different). #define DOP_ADC_ZERO 1998 ///< Mid-point (zero) for ADC readings. #define SIGN_FROM_12_BIT_VALUE(v) ( (S16)(v) - (S16)DOP_ADC_ZERO ) ///< Macro converts a 12-bit ADC reading to a signed 16-bit value. +#define DOP_SPEED_ADC_TO_RPM_FACTOR 1.601601 ///< Conversion factor from ADC counts to RPM for dialysate outlet pump motor (3200 RPM/1998 counts). +#define DOP_MOTOR_RPM_TO_PWM_DC_FACTOR 0.000193 ///< ~52 BP motor RPM = 1% PWM duty cycle +#define DOP_CURRENT_ADC_TO_MA_FACTOR 3.002 ///< Conversion factor from ADC counts to mA for dialysate outlet pump motor. -/*** setDialOutFlowRxTotalVolumeAndRxTime ***/ #define DOP_REV_PER_LITER 144.7 ///< Rotor revolutions per liter. #define DOP_ML_PER_MIN_TO_PUMP_RPM_FACTOR ( DOP_REV_PER_LITER / ML_PER_LITER ) ///< Conversion factor from mL/min to pump motor RPM. #define DOP_GEAR_RATIO 32.0 ///< Pump motor to pump gear ratio. #define DOP_PWM_ZERO_OFFSET 0.1 ///< 10% PWM duty cycle = zero speed. + /// Macro converts a flow rate to an estimated PWM duty cycle %. #define DOP_PWM_FROM_ML_PER_MIN(rate) ( (rate) * DOP_ML_PER_MIN_TO_PUMP_RPM_FACTOR * DOP_GEAR_RATIO * DOP_MOTOR_RPM_TO_PWM_DC_FACTOR + DOP_PWM_ZERO_OFFSET ) /// Conversion from PWM duty cycle % to commanded pump motor speed. Index: firmware/App/Drivers/InternalADC.c =================================================================== diff -u -rccfd15568f1e3d304320c2babb2fd4bcf0413304 -r893b25a778d71b4d779ff14aa7361914f388e87e --- firmware/App/Drivers/InternalADC.c (.../InternalADC.c) (revision ccfd15568f1e3d304320c2babb2fd4bcf0413304) +++ firmware/App/Drivers/InternalADC.c (.../InternalADC.c) (revision 893b25a778d71b4d779ff14aa7361914f388e87e) @@ -63,11 +63,11 @@ const F32 ADC_CHANNEL_READ_TO_UNITS[ NUM_OF_INT_ADC_CHANNELS ] = { 0.0, // - INT_ADC_NOT_USED - 1.280938, // RPM - INT_ADC_BLOOD_PUMP_SPEED + 1.601601, // RPM - INT_ADC_BLOOD_PUMP_SPEED 0.003002, // A - INT_ADC_BLOOD_PUMP_MOTOR_CURRENT - 1.280938, // RPM - INT_ADC_DIAL_IN_PUMP_SPEED + 1.601601, // RPM - INT_ADC_DIAL_IN_PUMP_SPEED 0.003002, // A - INT_ADC_DIAL_IN_PUMP_MOTOR_CURRENT - 1.280938, // RPM - INT_ADC_DIAL_OUT_PUMP_SPEED + 1.601601, // RPM - INT_ADC_DIAL_OUT_PUMP_SPEED 0.003002, // A - INT_ADC_DIAL_OUT_PUMP_MOTOR_CURRENT 0.001221, // V - INT_ADC_PS_THERMISTOR 0.001465, // V - INT_ADC_REFIN_1