Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -r941afbaab7fc86f40fa49f9d110d481f65b44b68 -r16efeb7b3a19e02ae83a553a77f01a3550ff7850 --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 941afbaab7fc86f40fa49f9d110d481f65b44b68) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 16efeb7b3a19e02ae83a553a77f01a3550ff7850) @@ -108,8 +108,10 @@ DATA_DECL( U32, BloodFlowDataPub, bloodFlowDataPublishInterval, BLOOD_FLOW_DATA_PUB_INTERVAL, BLOOD_FLOW_DATA_PUB_INTERVAL ); // interval (in ms) at which to publish blood flow data to CAN bus DATA_DECL( S32, TargetBloodFlowRate, targetBloodFlowRate, 0, 0 ); // requested blood flow rate DATA_DECL( F32, MeasuredBloodFlowRate, measuredBloodFlowRate, 0.0, 0.0 ); // measured blood flow rate -DATA_DECL( F32, MeasuredBloodPumpSpeed, adcBloodPumpSpeedRPM, 0.0, 0.0 ); // measured blood pump speed -DATA_DECL( F32, MeasuredBloodPumpCurrent, adcBloodPumpCurrentmA, 0.0, 0.0 ); // measured blood pump motor current +DATA_DECL( F32, MeasuredBloodPumpRotorSpeed, bloodPumpRotorSpeedRPM, 0.0, 0.0 );// measured blood pump rotor speed +DATA_DECL( F32, MeasuredBloodPumpSpeed, bloodPumpSpeedRPM, 0.0, 0.0 ); // measured blood pump motor speed +DATA_DECL( F32, MeasuredBloodPumpMCSpeed, adcBloodPumpMCSpeedRPM, 0.0, 0.0 ); // measured blood pump motor controller speed +DATA_DECL( F32, MeasuredBloodPumpMCCurrent, adcBloodPumpMCCurrentmA, 0.0, 0.0 );// measured blood pump motor controller current static F32 bpFlowError = 0.0; // blood flow error static F32 bpFlowErrorSum = 0.0; // blood flow error sum @@ -245,8 +247,8 @@ U16 bpmA = getIntADCReading( INT_ADC_BLOOD_PUMP_MOTOR_CURRENT ); F32 bpFlow = getFPGABloodFlow(); - adcBloodPumpSpeedRPM.data = (F32)(SIGN_FROM_12_BIT_VALUE(bpRPM)) * BP_SPEED_ADC_TO_RPM_FACTOR; - adcBloodPumpCurrentmA.data = (F32)(SIGN_FROM_12_BIT_VALUE(bpmA)) * BP_CURRENT_ADC_TO_MA_FACTOR; + 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; flowReadingsTotal -= flowReadings[flowReadingsIdx]; flowReadings[flowReadingsIdx] = bpFlow; @@ -550,28 +552,52 @@ DATA_GET( F32, getMeasuredBloodFlowRate, measuredBloodFlowRate ) /************************************************************************* + * @brief getMeasuredBloodPumpRotorSpeed + * The getMeasuredBloodPumpRotorSpeed function gets the measured blood flow \n + * rate. + * @details + * Inputs : bloodPumpRotorSpeedRPM + * Outputs : none + * @param none + * @return the current blood flow rate (in mL/min). + *************************************************************************/ +DATA_GET( F32, getMeasuredBloodPumpRotorSpeed, bloodPumpRotorSpeedRPM ) + +/************************************************************************* * @brief getMeasuredBloodPumpSpeed - * The getMeasuredBloodPumpSpeed function gets the measured blood pump \n + * The getMeasuredBloodPumpSpeed function gets the measured blood flow \n + * rate. + * @details + * Inputs : bloodPumpSpeedRPM + * Outputs : none + * @param none + * @return the current blood flow rate (in mL/min). + *************************************************************************/ +DATA_GET( F32, getMeasuredBloodPumpSpeed, bloodPumpSpeedRPM ) + +/************************************************************************* + * @brief getMeasuredBloodPumpMCSpeed + * The getMeasuredBloodPumpMCSpeed function gets the measured blood pump \n * speed. * @details - * Inputs : adcBloodPumpSpeedRPM + * Inputs : adcBloodPumpMCSpeedRPM * Outputs : none * @param none * @return the current blood pump speed (in RPM). *************************************************************************/ -DATA_GET( F32, getMeasuredBloodPumpSpeed, adcBloodPumpSpeedRPM ) +DATA_GET( F32, getMeasuredBloodPumpMCSpeed, adcBloodPumpMCSpeedRPM ) /************************************************************************* - * @brief getMeasuredBloodPumpCurrent - * The getMeasuredBloodPumpCurrent function gets the measured blood pump \n + * @brief getMeasuredBloodPumpMCCurrent + * The getMeasuredBloodPumpMCCurrent function gets the measured blood pump \n * current. * @details - * Inputs : adcBloodPumpCurrentmA + * Inputs : adcBloodPumpMCCurrentmA * Outputs : none * @param none * @return the current blood pump current (in mA). *************************************************************************/ -DATA_GET( F32, getMeasuredBloodPumpCurrent, adcBloodPumpCurrentmA ) +DATA_GET( F32, getMeasuredBloodPumpMCCurrent, adcBloodPumpMCCurrentmA ) /************************************************************************* * @brief publishBloodFlowData @@ -591,17 +617,19 @@ { S32 flowStPt = (S32)getTargetBloodFlowRate(); F32 measFlow = getMeasuredBloodFlowRate(); + F32 measRotSpd = getMeasuredBloodPumpRotorSpeed(); F32 measSpd = getMeasuredBloodPumpSpeed(); - F32 measCurr = getMeasuredBloodPumpCurrent(); + F32 measMCSpd = getMeasuredBloodPumpMCSpeed(); + F32 measMCCurr = getMeasuredBloodPumpMCCurrent(); #ifdef DEBUG_ENABLED // TODO - temporary debug code - remove later S32 pwm = (S32)( 100.0 * bloodPumpPWMDutyCyclePctSet ); char debugFlowStr[256]; - sprintf( debugFlowStr, "Target Flow:%5d, Meas. Flow:%5d, Speed:%5d RPM, Current:%5d mA, PWM:%5d \n", flowStPt, (S32)measFlow, (S32)measSpd, (S32)measCurr, pwm ); + sprintf( debugFlowStr, "Target Flow:%5d, Meas. Flow:%5d, Speed:%5d RPM, Current:%5d mA, PWM:%5d \n", flowStPt, (S32)measFlow, (S32)measMCSpd, (S32)measMCCurr, pwm ); sendDebugData( (U08*)debugFlowStr, strlen(debugFlowStr) ); #endif - broadcastBloodFlowData( flowStPt, measFlow, measSpd, measCurr ); + broadcastBloodFlowData( flowStPt, measFlow, measRotSpd, measSpd, measMCSpd, measMCCurr ); bloodFlowDataPublicationTimerCounter = 0; } } @@ -623,7 +651,7 @@ if ( BLOOD_PUMP_CONTROL_TO_TARGET_STATE == bloodPumpState ) { // check set direction vs. direction from sign of motor controller speed - bpMCDir = ( getMeasuredBloodPumpSpeed() >= 0.0 ? MOTOR_DIR_FORWARD : MOTOR_DIR_REVERSE ); + bpMCDir = ( getMeasuredBloodPumpMCSpeed() >= 0.0 ? MOTOR_DIR_FORWARD : MOTOR_DIR_REVERSE ); if ( bloodPumpDirectionSet != bpMCDir ) { SET_ALARM_WITH_2_U32_DATA( ALARM_ID_BLOOD_PUMP_MC_DIRECTION_CHECK, (U32)bloodPumpDirectionSet, (U32)bpMCDir ) @@ -648,13 +676,13 @@ // blood pump should be off if ( BLOOD_PUMP_OFF_STATE == bloodPumpState ) { - bpCurr = fabs( getMeasuredBloodPumpCurrent() ); + bpCurr = fabs( getMeasuredBloodPumpMCCurrent() ); if ( bpCurr > BP_MAX_CURR_WHEN_STOPPED_MA ) { bpCurrErrorDurationCtr += TASK_PRIORITY_INTERVAL; if ( bpCurrErrorDurationCtr > BP_MAX_CURR_ERROR_DURATION_MS ) { - SET_ALARM_WITH_1_F32_DATA( ALARM_ID_BLOOD_PUMP_MC_CURRENT_CHECK, getMeasuredBloodPumpCurrent() ); + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_BLOOD_PUMP_MC_CURRENT_CHECK, getMeasuredBloodPumpMCCurrent() ); } } else @@ -665,13 +693,13 @@ // blood pump should be running else { - bpCurr = fabs( getMeasuredBloodPumpCurrent() ); + bpCurr = fabs( getMeasuredBloodPumpMCCurrent() ); if ( ( bpCurr < BP_MIN_CURR_WHEN_RUNNING_MA ) || ( bpCurr > BP_MAX_CURR_WHEN_RUNNING_MA ) ) { bpCurrErrorDurationCtr += TASK_PRIORITY_INTERVAL; if ( bpCurrErrorDurationCtr > BP_MAX_CURR_ERROR_DURATION_MS ) { - SET_ALARM_WITH_1_F32_DATA( ALARM_ID_BLOOD_PUMP_MC_CURRENT_CHECK, getMeasuredBloodPumpCurrent() ); + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_BLOOD_PUMP_MC_CURRENT_CHECK, getMeasuredBloodPumpMCCurrent() ); } } else @@ -784,31 +812,59 @@ DATA_OVERRIDE_FUNC( F32, testSetMeasuredBloodFlowRateOverride, testResetMeasuredBloodFlowRateOverride, measuredBloodFlowRate ) /************************************************************************* + * @brief testSetMeasuredBloodPumpRotorSpeedOverride and testResetMeasuredBloodPumpRotorSpeedOverride + * The testSetMeasuredBloodPumpRotorSpeedOverride function overrides the measured \n + * blood pump rotor speed. \n + * The testResetMeasuredBloodPumpRotorSpeedOverride function resets the override of the \n + * measured blood pump rotor speed. + * @details + * Inputs : none + * Outputs : bloodPumpRotorSpeedRPM + * @param value : override measured blood pump rotor speed (in RPM) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +DATA_OVERRIDE_FUNC( F32, testSetMeasuredBloodPumpRotorSpeedOverride, testResetMeasuredBloodPumpRotorSpeedOverride, bloodPumpRotorSpeedRPM ) + +/************************************************************************* * @brief testSetMeasuredBloodPumpSpeedOverride and testResetMeasuredBloodPumpSpeedOverride * The testSetMeasuredBloodPumpSpeedOverride function overrides the measured \n * blood pump motor speed. \n * The testResetMeasuredBloodPumpSpeedOverride function resets the override of the \n * measured blood pump motor speed. * @details * Inputs : none - * Outputs : adcBloodPumpSpeedRPM + * Outputs : bloodPumpSpeedRPM + * @param value : override measured blood pump motor speed (in RPM) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +DATA_OVERRIDE_FUNC( F32, testSetMeasuredBloodPumpSpeedOverride, testResetMeasuredBloodPumpSpeedOverride, bloodPumpSpeedRPM ) + +/************************************************************************* + * @brief testSetMeasuredBloodPumpMCSpeedOverride and testResetMeasuredBloodPumpMCSpeedOverride + * The testSetMeasuredBloodPumpMCSpeedOverride function overrides the measured \n + * blood pump motor speed. \n + * The testResetMeasuredBloodPumpMCSpeedOverride function resets the override of the \n + * measured blood pump motor speed. + * @details + * Inputs : none + * Outputs : adcBloodPumpMCSpeedRPM * @param value : override measured blood pump speed (in RPM) * @return TRUE if override successful, FALSE if not *************************************************************************/ -DATA_OVERRIDE_FUNC( F32, testSetMeasuredBloodPumpSpeedOverride, testResetMeasuredBloodPumpSpeedOverride, adcBloodPumpSpeedRPM ) +DATA_OVERRIDE_FUNC( F32, testSetMeasuredBloodPumpMCSpeedOverride, testResetMeasuredBloodPumpMCSpeedOverride, adcBloodPumpMCSpeedRPM ) /************************************************************************* - * @brief testSetMeasuredBloodPumpCurrentOverride and testResetMeasuredBloodPumpCurrentOverride - * The testSetMeasuredBloodPumpCurrentOverride function overrides the measured \n + * @brief testSetMeasuredBloodPumpMCCurrentOverride and testResetMeasuredBloodPumpMCCurrentOverride + * The testSetMeasuredBloodPumpMCCurrentOverride function overrides the measured \n * blood pump motor current. \n - * The testResetMeasuredBloodPumpCurrentOverride function resets the override of the \n + * The testResetMeasuredBloodPumpMCCurrentOverride function resets the override of the \n * measured blood pump motor current. * @details * Inputs : none - * Outputs : adcBloodPumpCurrentmA + * Outputs : adcBloodPumpMCCurrentmA * @param value : override measured blood pump current (in mA) * @return TRUE if override successful, FALSE if not *************************************************************************/ -DATA_OVERRIDE_FUNC( F32, testSetMeasuredBloodPumpCurrentOverride, testResetMeasuredBloodPumpCurrentOverride, adcBloodPumpCurrentmA ) +DATA_OVERRIDE_FUNC( F32, testSetMeasuredBloodPumpMCCurrentOverride, testResetMeasuredBloodPumpMCCurrentOverride, adcBloodPumpMCCurrentmA )