Index: firmware/.launches/HD.launch =================================================================== diff -u -r4b22b45e775c0525bc1d76e83e265af91a59785e -rf4545d449a2a2f9353307a55d2bce9e150591c3d --- firmware/.launches/HD.launch (.../HD.launch) (revision 4b22b45e775c0525bc1d76e83e265af91a59785e) +++ firmware/.launches/HD.launch (.../HD.launch) (revision f4545d449a2a2f9353307a55d2bce9e150591c3d) @@ -4,7 +4,7 @@ - + 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; } } Index: firmware/App/Controllers/DialInFlow.c =================================================================== diff -u -r3ded5ffcbcade3f1da5d40c52936ab5f97fc6ec9 -rf4545d449a2a2f9353307a55d2bce9e150591c3d --- firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision 3ded5ffcbcade3f1da5d40c52936ab5f97fc6ec9) +++ firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision f4545d449a2a2f9353307a55d2bce9e150591c3d) @@ -49,8 +49,8 @@ #define MIN_DIAL_IN_PUMP_PWM_DUTY_CYCLE 0.12 ///< controller will error if PWM duty cycle < 10%, so set min to 12% #define DIP_CONTROL_INTERVAL ( 10000 / TASK_GENERAL_INTERVAL ) ///< interval (ms/task time) at which the dialIn pump is controlled -#define DIP_P_COEFFICIENT 0.00005 ///< P term for dialIn pump control -#define DIP_I_COEFFICIENT 0.00015 ///< I term for dialIn pump control +#define DIP_P_COEFFICIENT 0.00035 ///< P term for dialIn pump control +#define DIP_I_COEFFICIENT 0.00035 ///< I term for dialIn pump control #define DIP_HOME_RATE 100 ///< target pump speed (in estimate mL/min) for homing. #define DIP_HOME_TIMEOUT_MS 10000 ///< maximum time allowed for homing to complete (in ms). @@ -78,7 +78,7 @@ #define DIP_REV_PER_LITER 150.24 ///< rotor revolutions per liter #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_MOTOR_RPM_TO_PWM_DC_FACTOR 0.00035 ///< ~28 BP motor RPM = 1% PWM duty cycle +#define DIP_MOTOR_RPM_TO_PWM_DC_FACTOR 0.00028 //308 ///< ~28 BP motor RPM = 1% PWM duty cycle #define DIP_PWM_ZERO_OFFSET 0.1 ///< 10% PWM duty cycle = zero speed #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 + DIP_PWM_ZERO_OFFSET ) ///< @@ -360,7 +360,7 @@ { U16 dipRPM = getIntADCReading( INT_ADC_DIAL_IN_PUMP_SPEED ); U16 dipmA = getIntADCReading( INT_ADC_DIAL_IN_PUMP_MOTOR_CURRENT ); - F32 dipFlow = ( getFPGADialysateFlow() + dialInFlowCalOffset ) * dialInFlowCalGain; + F32 dipFlow = ( getFPGADialysateFlow() * dialInFlowCalGain ) + dialInFlowCalOffset; adcDialInPumpMCSpeedRPM.data = (F32)(SIGN_FROM_12_BIT_VALUE(dipRPM)) * DIP_SPEED_ADC_TO_RPM_FACTOR; adcDialInPumpMCCurrentmA.data = (F32)(SIGN_FROM_12_BIT_VALUE(dipmA)) * DIP_CURRENT_ADC_TO_MA_FACTOR; @@ -1199,17 +1199,16 @@ { CALIBRATION_DATA_T cal; - if ( TRUE == getCalibrationData( &cal ) ) - { // keep locally and apply immediately - dialInFlowCalGain = gain; - dialInFlowCalOffset = offset; - // also update calibration record in non-volatile memory - cal.dialysateFlowGain = gain; - cal.dialysateFlowOffset_mL_min = offset; - if ( TRUE == setCalibrationData( cal ) ) - { - result = TRUE; - } + getCalibrationData( &cal ); + // keep locally and apply immediately + dialInFlowCalGain = gain; + dialInFlowCalOffset = offset; + // also update calibration record in non-volatile memory + cal.dialysateFlowGain = gain; + cal.dialysateFlowOffset_mL_min = offset; + if ( TRUE == setCalibrationData( cal ) ) + { + result = TRUE; } } Index: firmware/App/Modes/Dialysis.c =================================================================== diff -u -rc0273c73da6b6dee4ad6f1d54cb6c6f27a262b5b -rf4545d449a2a2f9353307a55d2bce9e150591c3d --- firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision c0273c73da6b6dee4ad6f1d54cb6c6f27a262b5b) +++ firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision f4545d449a2a2f9353307a55d2bce9e150591c3d) @@ -166,8 +166,8 @@ { lastUFTimeStamp = getMSTimerCount(); setDialOutUFVolumes( refUFVolume, measUFVolume ); - setBloodPumpTargetFlowRate( setBloodFlowRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); - setDialInPumpTargetFlowRate( setDialysateFlowRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_OPEN_LOOP ); + setBloodPumpTargetFlowRate( setBloodFlowRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); + setDialInPumpTargetFlowRate( setDialysateFlowRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); setDialOutPumpTargetRate( setDialysateFlowRate + (S32)setUFRate, MOTOR_DIR_FORWARD, PUMP_CONTROL_MODE_CLOSED_LOOP ); // TODO - Heparin pump } Index: firmware/App/Services/FPGA.c =================================================================== diff -u -r3ded5ffcbcade3f1da5d40c52936ab5f97fc6ec9 -rf4545d449a2a2f9353307a55d2bce9e150591c3d --- firmware/App/Services/FPGA.c (.../FPGA.c) (revision 3ded5ffcbcade3f1da5d40c52936ab5f97fc6ec9) +++ firmware/App/Services/FPGA.c (.../FPGA.c) (revision f4545d449a2a2f9353307a55d2bce9e150591c3d) @@ -47,7 +47,7 @@ } FPGA_STATE_T; #define FPGA_PAGE_SIZE 256 ///< FPGA register pages are 256 bytes. -#define FPGA_EXPECTED_ID 0x59 ///< Expected ID for HD FPGA. +#define FPGA_EXPECTED_ID 0x5A ///< Expected ID for HD FPGA. #define FPGA_HEADER_START_ADDR 0x0000 ///< Start address for FPGA header data. #define FPGA_BULK_READ_START_ADDR 0x0100 ///< Start address for FPGA continuous priority reads. Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r3ded5ffcbcade3f1da5d40c52936ab5f97fc6ec9 -rf4545d449a2a2f9353307a55d2bce9e150591c3d --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 3ded5ffcbcade3f1da5d40c52936ab5f97fc6ec9) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision f4545d449a2a2f9353307a55d2bce9e150591c3d) @@ -689,7 +689,7 @@ payload.yTilt = yt; payload.zTilt = zt; - memcpy( payloadPtr, &payload, sizeof( MSG_ID_HD_ACCELEROMETER_DATA ) ); + memcpy( payloadPtr, &payload, sizeof( HD_ACCEL_DATA_PAYLOAD_T ) ); // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_BROADCAST, ACK_NOT_REQUIRED );