Index: firmware/App/Controllers/DrainPump.c =================================================================== diff -u --- firmware/App/Controllers/DrainPump.c (revision 0) +++ firmware/App/Controllers/DrainPump.c (revision 416a8fba5774e6cd64c69513e082afbd79f75ccf) @@ -0,0 +1,383 @@ +/**********************************************************************//** + * + * Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. + * + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * @file DrainPump.c + * + * @date 07-Apr-2020 + * @author S. Nash + * + * @brief Monitor/Controller for drain pump. + * + **************************************************************************/ + +#ifndef _VECTORCAST_ + #include +#endif + +#include "etpwm.h" +#include "mibspi.h" + +#include "FPGA.h" +#include "OperationModes.h" +#include "PIControllers.h" +#include "Pressures.h" +#include "SystemCommMessages.h" +#include "TaskGeneral.h" +#include "TaskPriority.h" +#include "Timers.h" +#include "DrainPump.h" + +/** + * @addtogroup DrainPump + * @{ + */ + +// ********** private definitions ********** + +#define DRAIN_PUMP_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< interval (ms/task time) at which the RO Pump data is published on the CAN bus + +#define MAX_DRAIN_PUMP_PWM_STEP_CHANGE 0.01 ///< max duty cycle change for controller +#define MAX_DRAIN_PUMP_PWM_DUTY_CYCLE 0.99 ///< max duty cycle +#define MIN_DRAIN_PUMP_PWM_DUTY_CYCLE 0.05 ///< min duty cycle + +#define DRP_CONTROL_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< interval (ms/task time) at which the Drain pump is controlled +#define DRP_P_COEFFICIENT 0.005 ///< P term for Drain pump control +#define DRP_I_COEFFICIENT 0.00015 ///< I term for Drain pump control + +#define DRP_SPEED_ADC_TO_RPM_FACTOR 12.94 ///< conversion factor from ADC counts to RPM for Drain pump +#define DRP_SPEED_RPM_TO_ADC_FACTOR ( 1.0 / DRP_SPEED_ADC_TO_RPM_FACTOR ) ///< conversion factor from RPM to ADC counts for Drain pump + +typedef enum DrainPump_States +{ + DRAIN_PUMP_OFF_STATE = 0, + DRAIN_PUMP_CONTROL_TO_TARGET_STATE, + NUM_OF_DRAIN_PUMP_STATES +} DRAIN_PUMP_STATE_T; + +typedef enum DrainPump_Self_Test_States +{ + DRAIN_PUMP_SELF_TEST_STATE_START = 0, + DRAIN_PUMP_TEST_STATE_IN_PROGRESS, + DRAIN_PUMP_TEST_STATE_COMPLETE, + NUM_OF_DRAIN_PUMP_SELF_TEST_STATES +} DRAIN_PUMP_SELF_TEST_STATE_T; + +// TODO - test code - remove later +// pin assignments for pump test DIP switch 2 +#define DRAIN_PUMP_TEST2_SPI1_PORT_MASK 0x00000004 // (CS2 - re-purposed as input GPIO) +// dialIn pump stop and direction macros +#define GET_DIP_SW2_TEST() ( ( mibspiREG1->PC2 & DRAIN_PUMP_TEST2_SPI1_PORT_MASK ) != 0 ) + +// ********** private data ********** + +static DRAIN_PUMP_STATE_T drainPumpState = DRAIN_PUMP_OFF_STATE; ///< current state of drain pump controller state machine +static U32 drainPumpDataPublicationTimerCounter = 0; ///< used to schedule drain pump data publication to CAN bus +static BOOL isDrainPumpOn = FALSE; ///< Drain pump is currently running +static U32 drainPumpDAC = 0; ///< initial drain pump DAC value +static U32 drainPumpDACSet = 0; ///< currently set drain pump DAC value +static PUMP_CONTROL_MODE_T drainPumpControlMode = PUMP_CONTROL_MODE_CLOSED_LOOP; ///< requested drain pump control mode. +static PUMP_CONTROL_MODE_T drainPumpControlModeSet = PUMP_CONTROL_MODE_CLOSED_LOOP; ///< currently set drain pump control mode. + +static OVERRIDE_U32_T drainPumpDataPublishInterval = { 0, 0, 0, 0 }; ///< interval (in ms) at which to publish RO flow data to CAN bus. +static OVERRIDE_U32_T targetDrainPumpSpeed = { 0, 0, 0, 0 }; ///< Target RO pressure (in PSI). + +static U32 drainControlTimerCounter = 0; ///< determines when to perform control on drain pump + +static DRAIN_PUMP_SELF_TEST_STATE_T drainPumpSelfTestState = DRAIN_PUMP_SELF_TEST_STATE_START; ///< current drain pump self test state +static U32 drainPumpSelfTestTimerCount = 0; ///< timer counter for drain pump self test + +// ********** private function prototypes ********** + +static DRAIN_PUMP_STATE_T handleDrainPumpOffState( void ); +static DRAIN_PUMP_STATE_T handleDrainPumpControlToTargetState( void ); +static void stopDrainPump( void ); +static void publishDrainPumpData( void ); +static DATA_GET_PROTOTYPE( U32, getPublishDrainPumpDataInterval ); + +/*********************************************************************//** + * @brief initDrainPump + * The initDrainPump function initializes the DrainPump module. + * @details + * Inputs : none + * Outputs : DrainPump module initialized. + * @param none + * @return none + *************************************************************************/ +void initDrainPump( void ) +{ + stopDrainPump(); + + // initialize Drain pump PI controller + initializePIController( PI_CONTROLLER_ID_DRAIN_PUMP, MIN_DRAIN_PUMP_PWM_DUTY_CYCLE, + DRP_P_COEFFICIENT, DRP_I_COEFFICIENT, + MIN_DRAIN_PUMP_PWM_DUTY_CYCLE, MAX_DRAIN_PUMP_PWM_DUTY_CYCLE ); +} + +/*********************************************************************//** + * @brief + * The setDrainPumpTargetSpeed function sets a new target speed for the \n + * drain pump. + * @details + * Inputs : none + * Outputs : targetDrainPumpPressure + * @param rpm : new target drain pump speed (in RPM). + * @return TRUE if new target speed is set, FALSE if not + *************************************************************************/ +BOOL setDrainPumpTargetSpeed( U32 rpm ) +{ + BOOL result = FALSE; + + if ( ( 0 == rpm ) || + ( ( rpm >= MIN_DRAIN_PUMP_RPM_TARGET ) && ( rpm <= MAX_DRAIN_PUMP_RPM_TARGET ) ) ) + { + drainPumpDAC = (U32)((F32)rpm * DRP_SPEED_RPM_TO_ADC_FACTOR + FLOAT_TO_INT_ROUNDUP_OFFSET); + targetDrainPumpSpeed.data = rpm; + drainPumpControlMode = PUMP_CONTROL_MODE_OPEN_LOOP; + result = TRUE; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The signalDrainPumpHardStop function stops the Drain pump immediately. + * @details + * Inputs : none + * Outputs : Drain pump stopped, set point reset, state changed to off + * @param none + * @return none + *************************************************************************/ +void signalDrainPumpHardStop( void ) +{ + targetDrainPumpSpeed.data = 0; + stopDrainPump(); + drainPumpState = DRAIN_PUMP_OFF_STATE; + drainControlTimerCounter = 0; + resetPIController( PI_CONTROLLER_ID_DRAIN_PUMP, MIN_DRAIN_PUMP_PWM_DUTY_CYCLE ); +} + +/*********************************************************************//** + * @brief + * The execDrainPumpMonitor function executes the Drain Pump monitor. + * @details + * Inputs : none + * Outputs : none + * @param none + * @return none + *************************************************************************/ +void execDrainPumpMonitor( void ) +{ + // TODO - check ??? + + // publish drain pump data on interval + publishDrainPumpData(); +} + +/*********************************************************************//** + * @brief + * The execDrainPumpController function executes the Drain Pump controller. + * @details + * Inputs : drainPumpState + * Outputs : drainPumpState + * @param none + * @return none + *************************************************************************/ +void execDrainPumpController( void ) +{ + switch ( drainPumpState ) + { + case DRAIN_PUMP_OFF_STATE: + drainPumpState = handleDrainPumpOffState(); + break; + + case DRAIN_PUMP_CONTROL_TO_TARGET_STATE: + drainPumpState = handleDrainPumpControlToTargetState(); + break; + + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, 0, drainPumpState ) // TODO - replace 1st param with s/w fault enum + break; + } +} + +/*********************************************************************//** + * @brief + * The handleDrainPumpOffState function handles the drain pump off state \n + * of the drain pump controller state machine. + * @details + * Inputs : targetDrainPumpSpeed + * Outputs : drainPumpPWMDutyCyclePctSet, isDrainPumpOn + * @param none + * @return next state + *************************************************************************/ +static DRAIN_PUMP_STATE_T handleDrainPumpOffState( void ) +{ + DRAIN_PUMP_STATE_T result = DRAIN_PUMP_OFF_STATE; + + // TODO - test code - remove later + if ( GET_DIP_SW2_TEST() ) + { + setDrainPumpTargetSpeed( 1000 ); + } + + // if we've been given a pressure, transition to control to target state + if ( getTargetDrainPumpSpeed() > 0 ) + { + // set drain pump DAC + drainPumpDACSet = drainPumpDAC; + setFPGADrainPumpSpeed( drainPumpDACSet ); + // reset controller + resetPIController( PI_CONTROLLER_ID_DRAIN_PUMP, MIN_DRAIN_PUMP_PWM_DUTY_CYCLE ); + // set pump to on + isDrainPumpOn = TRUE; + result = DRAIN_PUMP_CONTROL_TO_TARGET_STATE; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The handleDrainPumpControlToTargetState function handles the "control to \n + * target" state of the drain pump controller state machine. + * @details + * Inputs : none + * Outputs : drainPumpState + * @param none + * @return next state + *************************************************************************/ +static DRAIN_PUMP_STATE_T handleDrainPumpControlToTargetState( void ) +{ + DRAIN_PUMP_STATE_T result = DRAIN_PUMP_CONTROL_TO_TARGET_STATE; + + // control at set interval + if ( ++drainControlTimerCounter >= DRP_CONTROL_INTERVAL ) + { + if ( drainPumpControlModeSet == PUMP_CONTROL_MODE_CLOSED_LOOP ) + { + // TODO - will drain pump have a closed loop? + } + drainControlTimerCounter = 0; + } + + // TODO - test code - remove later + if ( !GET_DIP_SW2_TEST() ) + { + signalDrainPumpHardStop(); + } + + return result; +} + +/*********************************************************************//** + * @brief + * The stopDrainPump function sets the Drain pump DAC to zero. + * @details + * Inputs : none + * Outputs : isDrainPumpOn, DAC zeroed + * @param none + * @return none + *************************************************************************/ +static void stopDrainPump( void ) +{ + isDrainPumpOn = FALSE; + drainPumpDAC = 0; + drainPumpDACSet = 0; + setDrainPumpTargetSpeed( drainPumpDACSet ); +} + +/*********************************************************************//** + * @brief + * The getPublishDrainPumpDataInterval function gets the Drain pump data \n + * publication interval. + * @details + * Inputs : drainPumpDataPublishInterval + * Outputs : none + * @param none + * @return the current Drain pump data publication interval (in ms). + *************************************************************************/ +U32 getPublishDrainPumpDataInterval( void ) +{ + U32 result = drainPumpDataPublishInterval.data; + + if ( OVERRIDE_KEY == drainPumpDataPublishInterval.override ) + { + result = drainPumpDataPublishInterval.ovData; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The getTargetDrainPumpPressure function gets the current target Drain pump \n + * pressure. + * @details + * Inputs : targetDrainPumpPressure + * Outputs : none + * @return the current target drain pump speed. + *************************************************************************/ +U32 getTargetDrainPumpPressure( void ) +{ + U32 result = targetDrainPumpSpeed.data; + + if ( OVERRIDE_KEY == targetDrainPumpSpeed.override ) + { + result = targetDrainPumpSpeed.ovData; + } + + return result; +} + +/*********************************************************************//** + * @brief + * The publishDrainPumpData function publishes drain pump data at the set \n + * interval. + * @details + * Inputs : target speed + * Outputs : Drain pump data is published to CAN bus. + * @return none + *************************************************************************/ +static void publishDrainPumpData( void ) +{ + // publish Drain pump data on interval + if ( ++drainPumpDataPublicationTimerCounter >= getPublishDrainPumpDataInterval() ) + { + U32 spdStPt = getTargetDrainPumpSpeed(); + +// broadcastDrainPumpData( spdStPt, drainPumpDACSet ); + drainPumpDataPublicationTimerCounter = 0; + } +} + +/*********************************************************************//** + * @brief + * The execDrainPumpTest function executes the state machine for the Drain \n + * Pump self test. + * @details + * Inputs : none + * Outputs : none + * @return the current state of the Drain Pump self test. + *************************************************************************/ +SELF_TEST_STATUS_T execDrainPumpTest( void ) +{ + SELF_TEST_STATUS_T result = SELF_TEST_STATUS_FAILED; + + // TODO - implement self test(s) + + return result; +} + +/**@}*/ + + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + Index: firmware/App/Controllers/DrainPump.h =================================================================== diff -u --- firmware/App/Controllers/DrainPump.h (revision 0) +++ firmware/App/Controllers/DrainPump.h (revision 416a8fba5774e6cd64c69513e082afbd79f75ccf) @@ -0,0 +1,50 @@ +/**********************************************************************//** + * + * Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. + * + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * @file DrainPump.h + * + * @date 07-Apr-2020 + * @author S. Nash + * + * @brief DrainPump header file. + * + **************************************************************************/ + +#ifndef __DRAIN_PUMP_H__ +#define __DRAIN_PUMP_H__ + +#include "DGCommon.h" + +/** + * @defgroup DrainPump DrainPump + * @brief Drain Pump monitor/controller module. Controls and monitors the drain pump. + * + * @addtogroup DrainPump + * @{ + */ + +// ********** public definitions ********** + +#define MAX_DRAIN_PUMP_RPM_TARGET 3000 ///< Maximum RPM target for drain pump. +#define MIN_DRAIN_PUMP_RPM_TARGET 300 ///< Minimum RPM target for drain pump (though zero is allowed if turning pump off). + +// ********** public function prototypes ********** + +void initDrainPump( void ); +void execDrainPumpMonitor( void ); +void execDrainPumpController( void ); + +BOOL setDrainPumpTargetSpeed( U32 rpm ); +void signalDrainPumpHardStop( void ); + +SELF_TEST_STATUS_T execDrainPumpTest( void ); + +DATA_GET_PROTOTYPE( U32, getTargetDrainPumpSpeed ); + +/**@}*/ + +#endif Index: firmware/App/Controllers/ROPump.c =================================================================== diff -u -r16dfbeeca1bcf1d2115c2f7549999fdaae0700e9 -r416a8fba5774e6cd64c69513e082afbd79f75ccf --- firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 16dfbeeca1bcf1d2115c2f7549999fdaae0700e9) +++ firmware/App/Controllers/ROPump.c (.../ROPump.c) (revision 416a8fba5774e6cd64c69513e082afbd79f75ccf) @@ -1,4 +1,4 @@ -/************************************************************************** +/**********************************************************************//** * * Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. * @@ -19,9 +19,9 @@ #endif #include "etpwm.h" +#include "mibspi.h" #include "FPGA.h" -//#include "InternalADC.h" #include "OperationModes.h" #include "PIControllers.h" #include "Pressures.h" @@ -31,6 +31,11 @@ #include "Timers.h" #include "ROPump.h" +/** + * @addtogroup ROPump + * @{ + */ + // ********** private definitions ********** #define RO_PUMP_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) ///< interval (ms/task time) at which the RO Pump data is published on the CAN bus @@ -39,11 +44,10 @@ #define MAX_RO_PUMP_PWM_DUTY_CYCLE 0.99 ///< max duty cycle #define MIN_RO_PUMP_PWM_DUTY_CYCLE 0.00 ///< min duty cycle -#define ROP_CONTROL_INTERVAL ( 1000 / TASK_GENERAL_INTERVAL ) ///< interval (ms/task time) at which the RO pump is controlled +#define ROP_CONTROL_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< interval (ms/task time) at which the RO pump is controlled #define ROP_P_COEFFICIENT 0.005 ///< P term for RO pump control #define ROP_I_COEFFICIENT 0.00015 ///< I term for RO pump control -#define ROP_SPEED_ADC_TO_RPM_FACTOR 1.0 ///< conversion factor from ADC counts to RPM for RO pump #define ROP_PSI_TO_PWM_DC(p) ( 0.2 + ( (F32)((p) - 100) * 0.01 ) ) ///< conversion factor from target PSI to PWM duty cycle estimate TODO - this is a place holder for real conversion #define RO_FLOW_ADC_TO_LPM_FACTOR 0.00018 ///< conversion factor from ADC counts to LPM (liters/min) for RO flow rate. @@ -63,10 +67,16 @@ NUM_OF_RO_PUMP_SELF_TEST_STATES } RO_PUMP_SELF_TEST_STATE_T; +// TODO - test code - remove later +// pin assignments for pump test DIP switch 0 +#define RO_PUMP_TEST_SPI5_PORT_MASK 0x00000100 // (ENA - re-purposed as input GPIO) +// dialIn pump stop and direction macros +#define GET_DIP_SW0_TEST() ( ( mibspiREG5->PC2 & RO_PUMP_TEST_SPI5_PORT_MASK ) != 0 ) + // ********** private data ********** -static RO_PUMP_STATE_T roPumpState = RO_PUMP_OFF_STATE; ///< current state of RO flow controller state machine -static U32 roPumpDataPublicationTimerCounter = 0; ///< used to schedule RO flow data publication to CAN bus +static RO_PUMP_STATE_T roPumpState = RO_PUMP_OFF_STATE; ///< current state of RO pump controller state machine +static U32 roPumpDataPublicationTimerCounter = 0; ///< used to schedule RO pump data publication to CAN bus static BOOL isROPumpOn = FALSE; ///< RO pump is currently running static F32 roPumpPWMDutyCyclePct = 0.0; ///< initial RO pump PWM duty cycle static F32 roPumpPWMDutyCyclePctSet = 0.0; ///< currently set RO pump PWM duty cycle @@ -78,7 +88,7 @@ static OVERRIDE_F32_T measuredROPumpPressure = { 0.0, 0.0, 0.0, 0 }; ///< measured RO pressure (in PSI). static OVERRIDE_F32_T measuredROFlowRateLPM = { 0.0, 0.0, 0.0, 0 }; ///< measured RO flow rate (in LPM). -static U32 roControlTimerCounter = 0; ///< determines when to perform control on ro flow +static U32 roControlTimerCounter = 0; ///< determines when to perform control on ro pump static RO_PUMP_SELF_TEST_STATE_T roPumpSelfTestState = RO_PUMP_SELF_TEST_STATE_START; ///< current ro pump self test state static U32 roPumpSelfTestTimerCount = 0; ///< timer counter for ro pump self test @@ -92,7 +102,7 @@ static void publishROPumpData( void ); static DATA_GET_PROTOTYPE( U32, getPublishROPumpDataInterval ); -/************************************************************************* +/*********************************************************************//** * @brief initROPump * The initROPump function initializes the ROPump module. * @details @@ -111,10 +121,10 @@ MIN_RO_PUMP_PWM_DUTY_CYCLE, MAX_RO_PUMP_PWM_DUTY_CYCLE ); } -/************************************************************************* +/*********************************************************************//** * @brief - * The setROPumpTargetPressure function sets a new target pressure and - * pump direction. + * The setROPumpTargetPressure function sets a new target pressure for the \n + * RO pump. * @details * Inputs : none * Outputs : targetROPumpPressure, roPumpPWMDutyCyclePct @@ -144,7 +154,7 @@ return result; } -/************************************************************************* +/*********************************************************************//** * @brief * The signalROPumpHardStop function stops the RO pump immediately. * @details @@ -163,7 +173,7 @@ resetPIController( PI_CONTROLLER_ID_RO_PUMP, MIN_RO_PUMP_PWM_DUTY_CYCLE ); } -/************************************************************************* +/*********************************************************************//** * @brief * The execROPumpMonitor function executes the RO Pump monitor. * @details @@ -196,7 +206,7 @@ publishROPumpData(); } -/************************************************************************* +/*********************************************************************//** * @brief * The execROPumpController function executes the RO Pump controller. * @details @@ -223,20 +233,26 @@ } } -/************************************************************************* +/*********************************************************************//** * @brief * The handleROPumpOffState function handles the ro pump off state \n * of the ro pump controller state machine. * @details - * Inputs : targetROPumpPressure, roPumpDirection - * Outputs : roPumpPWMDutyCyclePctSet, roPumpDirectionSet, isROPumpOn + * Inputs : targetROPumpPressure + * Outputs : roPumpPWMDutyCyclePctSet, isROPumpOn * @param none * @return next state *************************************************************************/ static RO_PUMP_STATE_T handleROPumpOffState( void ) { RO_PUMP_STATE_T result = RO_PUMP_OFF_STATE; + // TODO - test code - remove later + if ( GET_DIP_SW0_TEST() ) + { + setROPumpTargetPressure( 130, PUMP_CONTROL_MODE_CLOSED_LOOP ); + } + // if we've been given a pressure, transition to control to target state if ( getTargetROPumpPressure() > 0 ) { @@ -253,7 +269,7 @@ return result; } -/************************************************************************* +/*********************************************************************//** * @brief * The handleROPumpControlToTargetState function handles the "control to \n * target" state of the ro pump controller state machine. @@ -283,10 +299,16 @@ roControlTimerCounter = 0; } + // TODO - test code - remove later + if ( !GET_DIP_SW0_TEST() ) + { + signalROPumpHardStop(); + } + return result; } -/************************************************************************* +/*********************************************************************//** * @brief * The setROPumpControlSignalPWM function sets the PWM duty cycle for \n * the RO pump to a given %. @@ -301,7 +323,7 @@ etpwmSetCmpB( etpwmREG2, (U32)( (S32)( ( newPWM * (F32)(etpwmREG2->TBPRD) ) + FLOAT_TO_INT_ROUNDUP_OFFSET ) ) ); } -/************************************************************************* +/*********************************************************************//** * @brief * The stopROPump function sets the RO pump PWM to zero. * @details @@ -317,7 +339,7 @@ etpwmSetCmpB( etpwmREG2, 0 ); } -/************************************************************************* +/*********************************************************************//** * @brief * The getPublishROPumpDataInterval function gets the RO pump data \n * publication interval. @@ -339,7 +361,7 @@ return result; } -/************************************************************************* +/*********************************************************************//** * @brief * The getTargetROPumpPressure function gets the current target RO pump \n * pressure. @@ -361,7 +383,7 @@ return result; } -/************************************************************************* +/*********************************************************************//** * @brief * The getMeasuredROPumpPressure function gets the measured RO pump \n * pressure. @@ -383,7 +405,7 @@ return result; } -/************************************************************************* +/*********************************************************************//** * @brief * The getMeasuredROFlowRate function gets the measured RO pump \n * flow rate. @@ -405,7 +427,7 @@ return result; } -/************************************************************************* +/*********************************************************************//** * @brief * The publishROPumpData function publishes RO pump data at the set \n * interval. @@ -427,7 +449,7 @@ } } -/************************************************************************* +/*********************************************************************//** * @brief * The execROPumpTest function executes the state machine for the ROPump self test. * @details @@ -444,13 +466,15 @@ return result; } +/**@}*/ + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ -/************************************************************************* +/*********************************************************************//** * @brief * The testSetROPumpDataPublishIntervalOverride function overrides the \n * RO pump data publish interval. @@ -476,7 +500,7 @@ return result; } -/************************************************************************* +/*********************************************************************//** * @brief * The testResetROPumpDataPublishIntervalOverride function resets the override \n * of the RO pump data publish interval. @@ -499,7 +523,7 @@ return result; } -/************************************************************************* +/*********************************************************************//** * @brief * The testSetTargetROPumpPressureOverride function overrides the target \n * RO pressure. \n @@ -524,7 +548,7 @@ return result; } -/************************************************************************* +/*********************************************************************//** * @brief * The testResetTargetROPumpPressureOverride function resets the override of the \n * target RO pressure. @@ -550,7 +574,7 @@ return result; } -/************************************************************************* +/*********************************************************************//** * @brief * The testSetMeasuredROFlowRateOverride function overrides the measured \n * RO flow rate. @@ -574,7 +598,7 @@ return result; } -/************************************************************************* +/*********************************************************************//** * @brief * The testResetMeasuredROFlowRateOverride function resets the override of the \n * measured RO flow rate. Index: firmware/App/Controllers/ROPump.h =================================================================== diff -u -r16dfbeeca1bcf1d2115c2f7549999fdaae0700e9 -r416a8fba5774e6cd64c69513e082afbd79f75ccf --- firmware/App/Controllers/ROPump.h (.../ROPump.h) (revision 16dfbeeca1bcf1d2115c2f7549999fdaae0700e9) +++ firmware/App/Controllers/ROPump.h (.../ROPump.h) (revision 416a8fba5774e6cd64c69513e082afbd79f75ccf) @@ -1,4 +1,4 @@ -/************************************************************************** +/**********************************************************************//** * * Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. * @@ -19,6 +19,14 @@ #include "DGCommon.h" +/** + * @defgroup ROPump ROPump + * @brief RO Pump monitor/controller module. Controls and monitors the RO pump. + * + * @addtogroup ROPump + * @{ + */ + // ********** public definitions ********** #define MAX_RO_PRESSURE 140 // PSI @@ -46,4 +54,6 @@ BOOL testSetMeasuredROFlowRateOverride( F32 value ); BOOL testResetMeasuredROFlowRateOverride( void ); +/**@}*/ + #endif Index: firmware/DG.dil =================================================================== diff -u -r8638b207699a3a48e3657e838e24ae838369c867 -r416a8fba5774e6cd64c69513e082afbd79f75ccf --- firmware/DG.dil (.../DG.dil) (revision 8638b207699a3a48e3657e838e24ae838369c867) +++ firmware/DG.dil (.../DG.dil) (revision 416a8fba5774e6cd64c69513e082afbd79f75ccf) @@ -1,4 +1,4 @@ -# RM46L852PGE 04/02/20 08:58:55 +# RM46L852PGE 04/07/20 10:08:26 # ARCH=RM46L852PGE # @@ -2089,7 +2089,7 @@ DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_CSNR.VALUE=CS_NONE DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_DOUT.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN3.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_DIR.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_TG7_BUF_CSHOLD_LASTBUF.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI3_BASE_PORT.VALUE=0xFFF7F818 DRIVER.MIBSPI.VAR.MIBSPI5_TG1_BUF_MODE.VALUE=4 @@ -2264,7 +2264,7 @@ DRIVER.MIBSPI.VAR.MIBSPI1_C2EDELAYACTUAL.VALUE=0.000 DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT4_PULL.VALUE=2 DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_CSHOLD.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_DIR.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_DIR.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI1_TG6_LENGTH.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI1_PARERRLVL.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI1_OVRNINTLVL.VALUE=0 @@ -9440,7 +9440,7 @@ DRIVER.ETPWM.VAR.ETPWM1_OSHT_WIDTH_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM1_PWMA_DUTY.VALUE=0 DRIVER.ETPWM.VAR.ETPWM5_DCBEVT2.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_ACTUALPERIOD.VALUE=250002.419 +DRIVER.ETPWM.VAR.ETPWM2_PWMA_ACTUALPERIOD.VALUE=1000000.000 DRIVER.ETPWM.VAR.ETPWM5_PWMA_DEADBAND_INVERT.VALUE=0 DRIVER.ETPWM.VAR.ETPWM3_HSPCLKDIV.VALUE=0 DRIVER.ETPWM.VAR.ETPWM6_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 @@ -9509,7 +9509,7 @@ DRIVER.ETPWM.VAR.ETPWM2_PWMB_DUTYTIME.VALUE=0.000 DRIVER.ETPWM.VAR.ETPWM6_OSHT_WIDTH_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_PERIOD.VALUE=100.000 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_PERIOD.VALUE=250000 +DRIVER.ETPWM.VAR.ETPWM2_PWMA_PERIOD.VALUE=1000000 DRIVER.ETPWM.VAR.ETPWM5_CHOPPER_DUTYTIME.VALUE=38.709 DRIVER.ETPWM.VAR.ETPWM5_OSHT_ACTUAL_WIDTH.VALUE=77.418 DRIVER.ETPWM.VAR.ETPWM4_DCBEVT1.VALUE=0x0000 @@ -9537,7 +9537,7 @@ DRIVER.ETPWM.VAR.ETPWM7_OSHT5.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM5_PWMB_FALLING_EDGE_DELAY_REG.VALUE=1 DRIVER.ETPWM.VAR.ETPWM2_CBC3.VALUE=0x0000 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_PERIOD_REG.VALUE=25833 +DRIVER.ETPWM.VAR.ETPWM2_PWMB_PERIOD_REG.VALUE=103334 DRIVER.ETPWM.VAR.ETPWM2_PWMA_POLARITY.VALUE=0 DRIVER.ETPWM.VAR.ETPWM2_CLKDIV_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM7_OSHT6.VALUE=0x0000 @@ -9604,7 +9604,7 @@ DRIVER.ETPWM.VAR.ETPWM3_CBC5.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM3_CBC6.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM4_PWMA_FALLING_EDGE_DELAY_REG.VALUE=1 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_ACTUALPERIOD.VALUE=250002.419 +DRIVER.ETPWM.VAR.ETPWM2_PWMB_ACTUALPERIOD.VALUE=1000000.000 DRIVER.ETPWM.VAR.ETPWM6_PWMB_FALLING_EDGE_DELAY.VALUE=9.091 DRIVER.ETPWM.VAR.ETPWM2_BASE.VALUE=0xFCF78D00 DRIVER.ETPWM.VAR.ETPWM7_CHOPPER_DUTY_NEW.VALUE=50.0 @@ -9636,7 +9636,7 @@ DRIVER.ETPWM.VAR.ETPWM4_PWMB_DUTYTIME.VALUE=0.000 DRIVER.ETPWM.VAR.ETPWM7_OSHT_WIDTH_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM2_CHOPPER_PERIOD_REG.VALUE=0 -DRIVER.ETPWM.VAR.ETPWM2_PWMA_PERIOD_REG.VALUE=25833 +DRIVER.ETPWM.VAR.ETPWM2_PWMA_PERIOD_REG.VALUE=103334 DRIVER.ETPWM.VAR.ETPWM1_PWMB_COMPARE.VALUE=0 DRIVER.ETPWM.VAR.ETPWM1_CLKDIV_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM3_CHOPPER_PERIOD.VALUE=100.000 @@ -9752,7 +9752,7 @@ DRIVER.ETPWM.VAR.ETPWM5_ENABLE_SOCB.VALUE=0x0000 DRIVER.ETPWM.VAR.ETPWM5_HSPCLKDIV_REG.VALUE=0 DRIVER.ETPWM.VAR.ETPWM6_PWMB_ACTUALPERIOD.VALUE=250002.419 -DRIVER.ETPWM.VAR.ETPWM2_PWMB_PERIOD.VALUE=250000 +DRIVER.ETPWM.VAR.ETPWM2_PWMB_PERIOD.VALUE=1000000 DRIVER.ETPWM.VAR.ETPWM3_PWMA_ENA.VALUE=1 DRIVER.ETPWM.VAR.ETPWM1_PWMA_POLARITY.VALUE=0 DRIVER.ETPWM.VAR.ETPWM5_SOCB_PERIOD.VALUE=1 Index: firmware/include/etpwm.h =================================================================== diff -u -r8638b207699a3a48e3657e838e24ae838369c867 -r416a8fba5774e6cd64c69513e082afbd79f75ccf --- firmware/include/etpwm.h (.../etpwm.h) (revision 8638b207699a3a48e3657e838e24ae838369c867) +++ firmware/include/etpwm.h (.../etpwm.h) (revision 416a8fba5774e6cd64c69513e082afbd79f75ccf) @@ -494,7 +494,7 @@ #define ETPWM2_TBCTL_CONFIGVALUE ((uint16)((uint16)0U << 7U) | (uint16)((uint16)0U << 10U)) #define ETPWM2_TBPHS_CONFIGVALUE 0x00000000U -#define ETPWM2_TBPRD_CONFIGVALUE 25833U +#define ETPWM2_TBPRD_CONFIGVALUE 103334U #define ETPWM2_CMPCTL_CONFIGVALUE 0x00000000U #define ETPWM2_CMPA_CONFIGVALUE 0U #define ETPWM2_CMPB_CONFIGVALUE 0U Index: firmware/include/mibspi.h =================================================================== diff -u -ra90f03eb56aaa492908cd2e7417da79f405d67d4 -r416a8fba5774e6cd64c69513e082afbd79f75ccf --- firmware/include/mibspi.h (.../mibspi.h) (revision a90f03eb56aaa492908cd2e7417da79f405d67d4) +++ firmware/include/mibspi.h (.../mibspi.h) (revision 416a8fba5774e6cd64c69513e082afbd79f75ccf) @@ -193,7 +193,7 @@ #define MIBSPI1_LVL_CONFIGVALUE ((uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 0U)) #define MIBSPI1_PCFUN_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 5U) | (uint32)((uint32)1U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)0U << 10U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U) | (uint32)((uint32)1U << 17U) | (uint32)((uint32)1U << 25U)) -#define MIBSPI1_PCDIR_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)1U << 1U) | (uint32)((uint32)1U << 2U) | (uint32)((uint32)1U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)1U << 5U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)1U << 11U) | (uint32)((uint32)1U << 24U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 25U)) +#define MIBSPI1_PCDIR_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)1U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)1U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)1U << 5U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)1U << 11U) | (uint32)((uint32)1U << 24U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 25U)) #define MIBSPI1_PCPDR_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 5U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 10U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 25U)) #define MIBSPI1_PCDIS_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 5U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 10U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 25U)) #define MIBSPI1_PCPSL_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)1U << 1U) | (uint32)((uint32)1U << 2U) | (uint32)((uint32)1U << 3U) | (uint32)((uint32)1U << 4U) | (uint32)((uint32)1U << 5U) | (uint32)((uint32)1U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)1U << 11U) | (uint32)((uint32)1U << 24U) | (uint32)((uint32)1U << 17U) | (uint32)((uint32)1U << 25U)) @@ -256,7 +256,7 @@ #define MIBSPI5_LVL_CONFIGVALUE ((uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 6U) | (uint32)((uint32)0U << 4U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 0U)) #define MIBSPI5_PCFUN_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 10U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U) | (uint32)((uint32)1U << 17U) | (uint32)((uint32)1U << 18U) | (uint32)((uint32)1U << 19U) | (uint32)((uint32)1U << 25U) | (uint32)((uint32)1U << 26U) | (uint32)((uint32)1U << 27U)) -#define MIBSPI5_PCDIR_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)1U << 1U) | (uint32)((uint32)1U << 2U) | (uint32)((uint32)1U << 3U) | (uint32)((uint32)1U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)1U << 11U) | (uint32)((uint32)1U << 24U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 18U) | (uint32)((uint32)0U << 19U) | (uint32)((uint32)0U << 25U) | (uint32)((uint32)0U << 26U) | (uint32)((uint32)0U << 27U)) +#define MIBSPI5_PCDIR_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)1U << 1U) | (uint32)((uint32)1U << 2U) | (uint32)((uint32)1U << 3U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)1U << 11U) | (uint32)((uint32)1U << 24U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 18U) | (uint32)((uint32)0U << 19U) | (uint32)((uint32)0U << 25U) | (uint32)((uint32)0U << 26U) | (uint32)((uint32)0U << 27U)) #define MIBSPI5_PCPDR_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 10U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 18U) | (uint32)((uint32)0U << 19U) | (uint32)((uint32)0U << 25U) | (uint32)((uint32)0U << 26U) | (uint32)((uint32)0U << 27U)) #define MIBSPI5_PCDIS_CONFIGVALUE ((uint32)((uint32)0U << 0U) | (uint32)((uint32)0U << 1U) | (uint32)((uint32)0U << 2U) | (uint32)((uint32)0U << 3U) | (uint32)((uint32)0U << 8U) | (uint32)((uint32)0U << 9U) | (uint32)((uint32)0U << 10U) | (uint32)((uint32)0U << 16U) | (uint32)((uint32)0U << 11U) | (uint32)((uint32)0U << 24U) | (uint32)((uint32)0U << 17U) | (uint32)((uint32)0U << 18U) | (uint32)((uint32)0U << 19U) | (uint32)((uint32)0U << 25U) | (uint32)((uint32)0U << 26U) | (uint32)((uint32)0U << 27U)) #define MIBSPI5_PCPSL_CONFIGVALUE ((uint32)((uint32)1U << 0U) | (uint32)((uint32)1U << 1U) | (uint32)((uint32)1U << 2U) | (uint32)((uint32)1U << 3U) | (uint32)((uint32)1U << 8U) | (uint32)((uint32)1U << 9U) | (uint32)((uint32)1U << 10U) | (uint32)((uint32)1U << 16U) | (uint32)((uint32)1U << 11U) | (uint32)((uint32)1U << 24U) | (uint32)((uint32)1U << 17U) | (uint32)((uint32)1U << 18U) | (uint32)((uint32)1U << 19U) | (uint32)((uint32)1U << 25U) | (uint32)((uint32)1U << 26U) | (uint32)((uint32)1U << 27U)) Index: firmware/source/etpwm.c =================================================================== diff -u -r8638b207699a3a48e3657e838e24ae838369c867 -r416a8fba5774e6cd64c69513e082afbd79f75ccf --- firmware/source/etpwm.c (.../etpwm.c) (revision 8638b207699a3a48e3657e838e24ae838369c867) +++ firmware/source/etpwm.c (.../etpwm.c) (revision 416a8fba5774e6cd64c69513e082afbd79f75ccf) @@ -177,7 +177,7 @@ etpwmREG2->TBCTL |= (uint16)((uint16)0U << 10U); /** - Sets time period or frequency for ETPWM block both PWMA and PWMB*/ - etpwmREG2->TBPRD = 25833U; + etpwmREG2->TBPRD = 103334U; /** - Setup the duty cycle for PWMA */ etpwmREG2->CMPA = 0U; Index: firmware/source/mibspi.c =================================================================== diff -u -ra90f03eb56aaa492908cd2e7417da79f405d67d4 -r416a8fba5774e6cd64c69513e082afbd79f75ccf --- firmware/source/mibspi.c (.../mibspi.c) (revision a90f03eb56aaa492908cd2e7417da79f405d67d4) +++ firmware/source/mibspi.c (.../mibspi.c) (revision 416a8fba5774e6cd64c69513e082afbd79f75ccf) @@ -475,7 +475,7 @@ /** - MIBSPI1 Port direction */ mibspiREG1->PC1 = (uint32)((uint32)1U << 0U) /* SCS[0] */ | (uint32)((uint32)1U << 1U) /* SCS[1] */ - | (uint32)((uint32)1U << 2U) /* SCS[2] */ + | (uint32)((uint32)0U << 2U) /* SCS[2] */ | (uint32)((uint32)1U << 3U) /* SCS[3] */ | (uint32)((uint32)0U << 4U) /* SCS[4] */ | (uint32)((uint32)1U << 5U) /* SCS[5] */ @@ -1436,7 +1436,7 @@ | (uint32)((uint32)1U << 1U) /* SCS[1] */ | (uint32)((uint32)1U << 2U) /* SCS[2] */ | (uint32)((uint32)1U << 3U) /* SCS[3] */ - | (uint32)((uint32)1U << 8U) /* ENA */ + | (uint32)((uint32)0U << 8U) /* ENA */ | (uint32)((uint32)1U << 9U) /* CLK */ | (uint32)((uint32)1U << 10U) /* SIMO[0] */ | (uint32)((uint32)1U << 11U) /* SOMI[0] */