Index: firmware/App/Controllers/DrainPump.c =================================================================== diff -u -rdaf8d5b60c753becab80cbaf164aac0e49d533a2 -rab304e2ca6e3e40ed8cb12650e9855ae0b9649d8 --- firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision daf8d5b60c753becab80cbaf164aac0e49d533a2) +++ firmware/App/Controllers/DrainPump.c (.../DrainPump.c) (revision ab304e2ca6e3e40ed8cb12650e9855ae0b9649d8) @@ -7,21 +7,20 @@ * * @file DrainPump.c * -* @author (last) Sean Nash -* @date (last) 08-Jul-2020 +* @author (last) Quang Nguyen +* @date (last) 14-Sep-2020 * * @author (original) Sean * @date (original) 08-Apr-2020 * ***************************************************************************/ -#ifndef _VECTORCAST_ - #include -#endif +#include #include "etpwm.h" #include "mibspi.h" +#include "DrainPump.h" #include "FPGA.h" #include "OperationModes.h" #include "PIControllers.h" @@ -31,7 +30,9 @@ #include "TaskPriority.h" #include "Timers.h" #include "Valves.h" -#include "DrainPump.h" +#ifdef EMC_TEST_BUILD +#include "Heaters.h" +#endif /** * @addtogroup DrainPump @@ -59,20 +60,18 @@ NUM_OF_DRAIN_PUMP_STATES ///< Number of drain pump states } DRAIN_PUMP_STATE_T; -/// Enumeration of drain pump self test states. +/// Enumeration of drain pump self-test states. typedef enum DrainPump_Self_Test_States { - DRAIN_PUMP_SELF_TEST_STATE_START = 0, ///< Drain pump self test start state. - DRAIN_PUMP_TEST_STATE_IN_PROGRESS, ///< Drain pump self tests in progress state. - DRAIN_PUMP_TEST_STATE_COMPLETE, ///< Drain pump self tests completed state. - NUM_OF_DRAIN_PUMP_SELF_TEST_STATES ///< Number of drain pump self test states. + DRAIN_PUMP_SELF_TEST_STATE_START = 0, ///< Drain pump self-test start state + DRAIN_PUMP_TEST_STATE_IN_PROGRESS, ///< Drain pump self-test in progress state + DRAIN_PUMP_TEST_STATE_COMPLETE, ///< Drain pump self-test completed state + NUM_OF_DRAIN_PUMP_SELF_TEST_STATES ///< Number of drain pump self-test states } DRAIN_PUMP_SELF_TEST_STATE_T; -// pin assignment for pump enable -#define DRAIN_PUMP_ENABLE_SPI3_PORT_MASK 0x00000020 // (CS5 - re-purposed as output GPIO) -// drain pump enable macros -#define SET_DRAIN_PUMP_ENABLE() {mibspiREG3->PC3 |= DRAIN_PUMP_ENABLE_SPI3_PORT_MASK;} -#define CLR_DRAIN_PUMP_ENABLE() {mibspiREG3->PC3 &= ~DRAIN_PUMP_ENABLE_SPI3_PORT_MASK;} +#define DRAIN_PUMP_ENABLE_SPI3_PORT_MASK 0x00000020 ///< CS5 - Out put GPIO for pump enable. +#define SET_DRAIN_PUMP_ENABLE() {mibspiREG3->PC3 |= DRAIN_PUMP_ENABLE_SPI3_PORT_MASK;} ///< drain pump enable set macro. +#define CLR_DRAIN_PUMP_ENABLE() {mibspiREG3->PC3 &= ~DRAIN_PUMP_ENABLE_SPI3_PORT_MASK;} ///< drain pump enable clear macro. // TODO - test code - remove later #define DRAIN_PUMP_TEST2_SPI1_PORT_MASK 0x00000004 // (CS2 - re-purposed as input GPIO) @@ -107,18 +106,18 @@ static DRAIN_PUMP_STATE_T handleDrainPumpOpenLoopState( void ); static void stopDrainPump( void ); static void publishDrainPumpData( void ); -static DATA_GET_PROTOTYPE( U32, getPublishDrainPumpDataInterval ); +static U32 getPublishDrainPumpDataInterval( void ); /*********************************************************************//** - * @brief initDrainPump + * @brief * The initDrainPump function initializes the DrainPump module. * @details * Inputs : none * Outputs : DrainPump module initialized. * @return none *************************************************************************/ void initDrainPump( void ) -{ +{ stopDrainPump(); // Initialize the drain pump PI controller @@ -129,8 +128,7 @@ /*********************************************************************//** * @brief - * The setDrainPumpTargetSpeed function sets a new target speed for the \n - * drain pump. + * The setDrainPumpTargetSpeed function sets a new target speed for the drain pump. * @details * Inputs: none * Outputs: targetDrainPumpPressure @@ -144,7 +142,11 @@ 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); +#ifdef EMC_TEST_BUILD + drainPumpDAC = (U32)((F32)2500 * DRP_SPEED_RPM_TO_ADC_FACTOR + FLOAT_TO_INT_ROUNDUP_OFFSET); +#else + drainPumpDAC = (U32)((F32)rpm * DRP_SPEED_RPM_TO_ADC_FACTOR + FLOAT_TO_INT_ROUNDUP_OFFSET); +#endif targetDrainPumpSpeed.data = rpm; drainPumpControlMode = PUMP_CONTROL_MODE_OPEN_LOOP; result = TRUE; @@ -193,7 +195,7 @@ /*********************************************************************//** * @brief - * The execDrainPumpMonitor function executes the Drain Pump monitor. + * The execDrainPumpMonitor function executes the drain pump monitor. * @details * Inputs: none * Outputs: none @@ -213,7 +215,7 @@ /*********************************************************************//** * @brief - * The execDrainPumpController function executes the Drain Pump controller. + * The execDrainPumpController function executes the drain pump controller. * @details * Inputs: drainPumpState * Outputs: drainPumpState @@ -240,12 +242,12 @@ drainPumpState = DRAIN_PUMP_OFF_STATE; break; } -} +} /*********************************************************************//** * @brief - * The handleDrainPumpOffState function handles the drain pump off state \n - * of the drain pump controller state machine. + * The handleDrainPumpOffState function handles the drain pump off state of + * the drain pump controller state machine. * @details * Inputs: targetDrainPumpSpeed * Outputs: drainPumpPWMDutyCyclePctSet @@ -264,6 +266,10 @@ setValveState( VRC, VALVE_STATE_DRAIN_C_TO_NO ); setValveState( VPO, VALVE_STATE_NOFILL_C_TO_NO ); setDrainPumpTargetSpeed( 1000 ); +#ifdef EMC_TEST_BUILD + setTrimmerHeaterTargetTemperature( 50.0 ); + startTrimmerHeater(); +#endif } #endif #endif @@ -305,7 +311,7 @@ /*********************************************************************//** * @brief - * The handleDrainPumpControlToTargetState function handles the "control to \n + * The handleDrainPumpControlToTargetState function handles the "control to * target" state of the drain pump controller state machine. * @details * Inputs: none @@ -325,8 +331,18 @@ F32 rpm = runPIController( PI_CONTROLLER_ID_DRAIN_PUMP, targetDrainPumpDeltaPressure.data, pressureDiff ); drainPumpDACSet = (U32)(rpm * DRP_SPEED_RPM_TO_ADC_FACTOR + FLOAT_TO_INT_ROUNDUP_OFFSET); setFPGADrainPumpSpeed( drainPumpDACSet ); + + // From a merge from master + if ( drainPumpControlModeSet == PUMP_CONTROL_MODE_CLOSED_LOOP ) + { +#ifndef EMC_TEST_BUILD + // TODO - will drain pump have a closed loop? +#endif + } + drainControlTimerCounter = 0; - } + } + // From a merge from master if ( 0 == getTargetDrainPumpSpeed() ) { @@ -344,6 +360,9 @@ setValveState( VPI, VALVE_STATE_OPEN ); setValveState( VRC, VALVE_STATE_DRAIN_C_TO_NO ); setValveState( VPO, VALVE_STATE_FILL_C_TO_NC ); +#ifdef EMC_TEST_BUILD + stopTrimmerHeater(); +#endif result = DRAIN_PUMP_OFF_STATE; } #endif @@ -368,7 +387,7 @@ /*********************************************************************//** * @brief - * The stopDrainPump function sets the Drain pump DAC to zero. + * The stopDrainPump function sets the drain pump DAC to zero. * @details * Inputs: none * Outputs: DAC zeroed @@ -384,14 +403,14 @@ /*********************************************************************//** * @brief - * The getPublishDrainPumpDataInterval function gets the Drain pump data \n + * The getPublishDrainPumpDataInterval function gets the drain pump data * publication interval. * @details * Inputs: drainPumpDataPublishInterval * Outputs: none * @return: the current Drain pump data publication interval (in ms). *************************************************************************/ -U32 getPublishDrainPumpDataInterval( void ) +static U32 getPublishDrainPumpDataInterval( void ) { U32 result = drainPumpDataPublishInterval.data; @@ -405,7 +424,7 @@ /*********************************************************************//** * @brief - * The getTargetDrainPumpSpeed function gets the current target Drain pump \n + * The getTargetDrainPumpSpeed function gets the current target drain pump * speed. * @details * Inputs: targetDrainPumpSpeed @@ -426,8 +445,7 @@ /*********************************************************************//** * @brief - * The publishDrainPumpData function publishes drain pump data at the set \n - * interval. + * The publishDrainPumpData function publishes drain pump data at the set interval. * @details * Inputs: target speed * Outputs: Drain pump data is published to CAN bus. @@ -438,20 +456,22 @@ // publish Drain pump data on interval if ( ++drainPumpDataPublicationTimerCounter >= getPublishDrainPumpDataInterval() ) { + // TODO: This was a const in master, why? U32 spdStPt = getTargetDrainPumpSpeed(); F32 pressureDiff = fabs( getMeasuredDGPressure ( PRESSURE_SENSOR_DRAIN_PUMP_INLET ) - getMeasuredDGPressure ( PRESSURE_SENSOR_DRAIN_PUMP_OUTLET ) ); broadcastDrainPumpData( spdStPt, drainPumpDACSet, pressureDiff, (U32)drainPumpState ); + drainPumpDataPublicationTimerCounter = 0; } } /*********************************************************************//** * @brief - * The execDrainPumpTest function executes the state machine for the Drain \n - * Pump self test. + * The execDrainPumpTest function executes the state machine for the drain + * pump self-test. * @details * Inputs: none * Outputs: none @@ -461,11 +481,11 @@ { SELF_TEST_STATUS_T result = SELF_TEST_STATUS_FAILED; - // TODO - implement self test(s) + // TODO - implement self-test(s) return result; } - + /**@}*/ /************************************************************************* @@ -475,7 +495,7 @@ /*********************************************************************//** * @brief - * The testSetDrainPumpDataPublishIntervalOverride function overrides the \n + * The testSetDrainPumpDataPublishIntervalOverride function overrides the * drain pump data publish interval. * @details * Inputs: none @@ -501,8 +521,8 @@ /*********************************************************************//** * @brief - * The testResetDrainPumpDataPublishIntervalOverride function resets the override \n - * of the drain pump data publish interval. + * The testResetDrainPumpDataPublishIntervalOverride function resets the + * override of the drain pump data publish interval. * @details * Inputs: none * Outputs: drainPumpDataPublishInterval @@ -524,7 +544,7 @@ /*********************************************************************//** * @brief - * The testSetTargetDrainPumpSpeedOverride function overrides the target \n + * The testSetTargetDrainPumpSpeedOverride function overrides the target * drain pump speed (in RPM). * @details * Inputs: none @@ -549,7 +569,7 @@ /*********************************************************************//** * @brief - * The testResetTargetDrainPumpSpeedOverride function resets the override of the \n + * The testResetTargetDrainPumpSpeedOverride function resets the override of the * target drain pump speed (in RPM). * @details * Inputs: none @@ -620,4 +640,6 @@ } return result; -} +} + +/**@}*/