Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -r7d9d8a4b338123b844cf68497a14df6a091add7a -rbe1f6ba8f58abfe098865c85ebca070eb0dde6ce --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 7d9d8a4b338123b844cf68497a14df6a091add7a) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision be1f6ba8f58abfe098865c85ebca070eb0dde6ce) @@ -92,7 +92,7 @@ #define SIZE_OF_ROLLING_AVG 20 ///< Number of pump speed samples in rolling average. -#define BP_TORQUE_PERIOD_RESOLUTION_US 10.0F ///< Blood pump torque period resolution in microseconds (10 us). +#define BP_TORQUE_PERIOD_RESOLUTION_US 1.0F ///< Blood pump torque period resolution in microseconds (1 us). #define BP_1KHZ_TO_TORQUE_CONVERSION_MNM 10.0F ///< Blood pump 1kHz to torque conversion in milli-newtonmeter /// Enumeration of blood pump controller states. @@ -813,6 +813,21 @@ /*********************************************************************//** * @brief + * The getMeasuredBloodPumpTorque function gets the measured blood pump + * torque in mN.m. + * @details \b Inputs: bloodPumpTorquemNm + * @details \b Outputs: none + * @return the current blood pump torque (in mN.m). + *************************************************************************/ +F32 getMeasuredBloodPumpTorque( void ) +{ + F32 result = getF32OverrideValue( &bloodPumpTorquemNm ); + + return result; +} + +/*********************************************************************//** + * @brief * The getBPFlowAlphaYIntercept function gets the blood pump flow alpha * intercept for blood flow estimation. * @details \b Inputs: bpFlowAlphaYIntercept @@ -875,13 +890,13 @@ TD_OP_MODE_T opMode = getCurrentOperationMode(); U32 hallSensor = 0; // TODO gioGetBit( hetPORT1, BP_ROTOR_HALL_SENSOR_NHET_ID ); - payload.h4SetFlowRate = targetBloodFlowRate; - payload.h4MeasFlow = getMeasuredBloodFlowRate(); - payload.h4MeasRotorSpd = getMeasuredBloodPumpRotorSpeed(); - payload.h4MeasPumpSpd = getMeasuredBloodPumpSpeed(); - payload.h4MeasCurr = 0.0F; // TODO getMeasuredBloodPumpMCCurrent(); - payload.h4SetRPM = bloodPumpSetSpeedRPM; - payload.h4RotorCount = getBloodPumpRotorCount(); + payload.h4SetFlowRate = targetBloodFlowRate; + payload.h4MeasFlow = getMeasuredBloodFlowRate(); + payload.h4MeasRotorSpd = getMeasuredBloodPumpRotorSpeed(); + payload.h4MeasPumpSpd = getMeasuredBloodPumpSpeed(); + payload.h4MeasTorquemNm = getMeasuredBloodPumpTorque(); + payload.h4SetRPM = bloodPumpSetSpeedRPM; + payload.h4RotorCount = getBloodPumpRotorCount(); if ( ( MODE_PRET == opMode ) || ( MODE_TREA == opMode ) || ( MODE_POST == opMode ) ) { // prescribed flow only available in treatment modes payload.h4PresFlow = getTreatmentParameterU32( TREATMENT_PARAM_BLOOD_FLOW ); @@ -891,7 +906,6 @@ payload.h4PresFlow = 0; } payload.h6RotorHallState = ( hallSensor > 0 ? 0 : 1 ); // 1=home, 0=not home - payload.h4MeasTorquemNm = getF32OverrideValue( &bloodPumpTorquemNm ); //payload.bPstate = bloodPumpState; //payload.bpRotorStatus = (U32)getH6RotorStatus(); broadcastData( MSG_ID_TD_BLOOD_PUMP_DATA, COMM_BUFFER_OUT_CAN_TD_BROADCAST, (U08*)&payload, sizeof( BLOOD_PUMP_STATUS_PAYLOAD_T ) ); @@ -948,8 +962,9 @@ static F32 calcBloodPumpTorque( void ) { F32 torqueResolutionUS = (F32)getH4TorqueCount() * BP_TORQUE_PERIOD_RESOLUTION_US; - F32 frequencyHz = 1.0F / ( (F32)US_PER_SECOND / torqueResolutionUS ); - F32 frequencyKHz = (F32)HZ_PER_KHZ / frequencyHz; + F32 torqueResolutionS = torqueResolutionUS / (F32)US_PER_SECOND; + F32 frequencyHz = 1.0F / torqueResolutionS; + F32 frequencyKHz = frequencyHz / (F32)HZ_PER_KHZ; F32 torquemNm = frequencyKHz * BP_1KHZ_TO_TORQUE_CONVERSION_MNM; return torquemNm;