foxBMS  1.4.1
The foxBMS Battery Management System API Documentation
ftask_cfg.c
Go to the documentation of this file.
1 /**
2  *
3  * @copyright © 2010 - 2022, Fraunhofer-Gesellschaft zur Foerderung der angewandten Forschung e.V.
4  * All rights reserved.
5  *
6  * SPDX-License-Identifier: BSD-3-Clause
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright notice, this
12  * list of conditions and the following disclaimer.
13  *
14  * 2. Redistributions in binary form must reproduce the above copyright notice,
15  * this list of conditions and the following disclaimer in the documentation
16  * and/or other materials provided with the distribution.
17  *
18  * 3. Neither the name of the copyright holder nor the names of its
19  * contributors may be used to endorse or promote products derived from
20  * this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
26  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
28  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
30  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32  *
33  * We kindly request you to use one or more of the following phrases to refer to
34  * foxBMS in your hardware, software, documentation or advertising materials:
35  *
36  * - ″This product uses parts of foxBMS®″
37  * - ″This product includes parts of foxBMS®″
38  * - ″This product is derived from foxBMS®″
39  *
40  */
41 
42 /**
43  * @file ftask_cfg.c
44  * @author foxBMS Team
45  * @date 2019-08-26 (date of creation)
46  * @updated 2022-10-27 (date of last update)
47  * @version v1.4.1
48  * @ingroup TASK_CONFIGURATION
49  * @prefix FTSK
50  *
51  * @brief Task configuration
52  * @details
53  */
54 
55 /*========== Includes =======================================================*/
56 #include "ftask_cfg.h"
57 
58 #include "HL_gio.h"
59 #include "HL_het.h"
60 
61 #include "adc.h"
62 #include "algorithm.h"
63 #include "bal.h"
64 #include "bms.h"
65 #include "can.h"
66 #include "contactor.h"
67 #include "database.h"
68 #include "diag.h"
69 #include "dma.h"
70 #include "fram.h"
71 #include "htsensor.h"
72 #include "i2c.h"
73 #include "imd.h"
74 #include "interlock.h"
75 #include "led.h"
76 #include "meas.h"
77 #include "pex.h"
78 #include "redundancy.h"
79 #include "sbc.h"
80 #include "sof_trapezoid.h"
81 #include "spi.h"
82 #include "sps.h"
83 #include "state_estimation.h"
84 #include "sys.h"
85 #include "sys_mon.h"
86 
87 /*========== Macros and Definitions =========================================*/
88 
89 /** counter value for 50ms in 10ms task */
90 #define TASK_10MS_COUNTER_FOR_50MS (5u)
91 
92 /** counter value for 1s in 100ms task */
93 #define TASK_100MS_COUNTER_FOR_1S (10u)
94 
95 /*========== Static Constant and Variable Definitions =======================*/
96 
97 /*========== Extern Constant and Variable Definitions =======================*/
98 
99 /**
100  * @brief Definition of the engine task
101  * @details Task is not delayed after the scheduler starts. This task must
102  * have the highest priority.
103  * @warning Do not change the configuration of this task. This will very
104  * likely break the system.
105  */
142 
143 /*========== Static Function Prototypes =====================================*/
144 
145 /*========== Static Function Implementations ================================*/
146 
147 /*========== Extern Function Implementations ================================*/
148 extern void FTSK_InitializeUserCodeEngine(void) {
149  /* Warning: Do not change the content of this function */
150  /* See function definition doxygen comment for details */
152 
153  if (retval == E_NOT_OK) {
154  /* Fatal error! */
156  }
157 
158  /* Suspend AFE task if unused, otherwise it will preempt all lower priority tasks */
159 #if (FOXBMS_AFE_DRIVER_TYPE_FSM == 1)
160  vTaskSuspend(ftsk_taskHandleAfe);
161 #endif
162 
163  /* Init FRAM */
164  FRAM_Initialize();
165 
166  retval = SYSM_Init();
167 
168  if (retval == E_NOT_OK) {
169  /* Fatal error! */
171  }
172 
173  /* Warning: Do not change the content of this function */
174  /* See function definition doxygen comment for details */
175 }
176 
177 extern void FTSK_RunUserCodeEngine(void) {
178  /* Warning: Do not change the content of this function */
179  /* See function definition doxygen comment for details */
180  DATA_Task(); /* Call database manager */
181  SYSM_CheckNotifications(); /* Check notifications from tasks */
182  /* Warning: Do not change the content of this function */
183  /* See function definition doxygen comment for details */
184 }
185 
187  /* user code */
189 
190  /* Init Sys */
192 
193  /* Init port expander */
194  PEX_Initialize();
195 
196  /* Set 3rd PE pin to activate temperature/humidity sensor */
199 
200  CONT_Initialize();
201  SPS_Initialize();
202  (void)MEAS_Initialize(); /* cast to void as the return value is unused */
203 
204  /* Initialize redundancy module */
205  (void)MRC_Initialize();
206 
207  /* This function operates under the assumption that it is called when
208  * the operating system is not yet running.
209  * In this state the return value of #SYS_SetStateRequest should
210  * always be #SYS_OK. Therefore we trap otherwise.
211  */
212  FAS_ASSERT(sys_retVal == SYS_OK);
213 
214  /* System started correctly -> Start toggling of debug LED */
216 }
217 
218 extern void FTSK_RunUserCodeCyclic1ms(void) {
219  /* Increment of operating system timer */
220  /* This must not be changed, add user code only below */
223  /* user code */
224 #if (FOXBMS_AFE_DRIVER_TYPE_FSM == 1)
225  MEAS_Control();
226 #endif
228 }
229 
230 extern void FTSK_RunUserCodeCyclic10ms(void) {
231  static uint8_t ftsk_cyclic10msCounter = 0;
232  /* user code */
235  ILCK_Trigger();
236  ADC_Control();
237  SPS_Ctrl();
239  SOF_Calculation();
242  PEX_Trigger();
243  HTSEN_Trigger();
244  if (ftsk_cyclic10msCounter == TASK_10MS_COUNTER_FOR_50MS) {
247  ftsk_cyclic10msCounter = 0;
248  }
249  /* Call BMS_Trigger function at the end of the 10ms task to allow previously
250  * called modules in this task to update respectively evaluate their new.
251  * This minimizes the delay between data evaluation and the reaction from
252  * the BMS module */
253  BMS_Trigger();
254  ftsk_cyclic10msCounter++;
255 }
256 
257 extern void FTSK_RunUserCodeCyclic100ms(void) {
258  /* user code */
259  static uint8_t ftsk_cyclic100msCounter = 0;
260 
261  /** Perform SOC and SOE calculations only every 1s. Not suited if analog
262  * integration of current sensor is NOT used. Manual integration of current
263  * requires a higher frequency.
264  */
265  if (ftsk_cyclic100msCounter == TASK_100MS_COUNTER_FOR_1S) {
267  ftsk_cyclic100msCounter = 0;
268  }
269 
270  BAL_Trigger();
271  IMD_Trigger();
272  LED_Trigger();
273 
274  ftsk_cyclic100msCounter++;
275 }
276 
278  /* user code */
279  static uint8_t ftsk_cyclicAlgorithm100msCounter = 0;
280 
282 
283  ftsk_cyclicAlgorithm100msCounter++;
284 }
285 
287  /* user code */
288 #if (FOXBMS_AFE_DRIVER_TYPE_NO_FSM == 1)
289  MEAS_Control();
290 #endif
291 }
292 
293 extern void FTSK_RunUserCodeIdle(void) {
294  /* user code */
295 }
296 
297 /*========== Externalized Static Function Implementations (Unit Test) =======*/
void ADC_Control(void)
controls ADC measurement sequence.
Definition: adc.c:100
Headers for the driver for the ADC module.
void ALGO_MainFunction(void)
handles the call of different algorithm functions when cycle time has expired
Definition: algorithm.c:112
void ALGO_MonitorExecutionTime(void)
monitors the calculation duration of the different algorithms
Definition: algorithm.c:151
Headers for the driver for the storage in the EEPROM memory.
Header for the driver for balancing.
void BAL_Trigger(void)
trigger function for the BAL driver state machine.
void BMS_Trigger(void)
trigger function for the SYS driver state machine.
Definition: bms.c:808
bms driver header
void CAN_MainFunction(void)
Calls the functions to drive the CAN interface. Makes the CAN timing checks and sends the periodic me...
Definition: can.c:228
void CAN_ReadRxBuffer(void)
Checks the data received per CAN. A receive buffer is used because CAN frames are received in an inte...
Definition: can.c:332
Header for the driver for the CAN module.
void CONT_Initialize(void)
initializes the contactor module
Definition: contactor.c:247
Headers for the driver for the contactors.
void DATA_Task(void)
trigger of database manager
Definition: database.c:276
STD_RETURN_TYPE_e DATA_Initialize(void)
Initialization of database manager.
Definition: database.c:226
Database module header.
Diagnosis driver header.
void DIAG_UpdateFlags(void)
update function for diagnosis flags
Definition: diag_cfg.c:237
Headers for the driver for the DMA module.
#define FAS_ASSERT(x)
Assertion macro that asserts that x is true.
Definition: fassert.h:252
#define FAS_TRAP
Define that evaluates to essential boolean false thus tripping an assert.
Definition: fassert.h:126
void FRAM_Initialize(void)
Initializes the addresses to be written in the FRAM.
Definition: fram.c:90
Header for the driver for the FRAM module.
STD_RETURN_TYPE_e
Definition: fstd_types.h:81
OS_TASK_DEFINITION_s ftsk_taskDefinitionAfe
Task configuration of the continuously running task for AFEs.
Definition: ftask_cfg.c:136
OS_TASK_DEFINITION_s ftsk_taskDefinitionCyclic100ms
Task configuration of the cyclic 100 ms task.
Definition: ftask_cfg.c:124
void FTSK_RunUserCodeAfe(void)
Continuously running task for AFEs.
Definition: ftask_cfg.c:286
void FTSK_InitializeUserCodeEngine(void)
Initializes the database.
Definition: ftask_cfg.c:148
void FTSK_RunUserCodeEngine(void)
Engine task for the database and the system monitoring module.
Definition: ftask_cfg.c:177
OS_TASK_DEFINITION_s ftsk_taskDefinitionEngine
Definition of the engine task.
Definition: ftask_cfg.c:106
OS_TASK_DEFINITION_s ftsk_taskDefinitionCyclic1ms
Task configuration of the cyclic 1 ms task.
Definition: ftask_cfg.c:112
#define TASK_100MS_COUNTER_FOR_1S
Definition: ftask_cfg.c:93
void FTSK_RunUserCodeIdle(void)
Idle task.
Definition: ftask_cfg.c:293
OS_TASK_DEFINITION_s ftsk_taskDefinitionCyclicAlgorithm100ms
Task configuration of the cyclic 100 ms task for algorithms.
Definition: ftask_cfg.c:130
void FTSK_RunUserCodeCyclic100ms(void)
Cyclic 100 ms task.
Definition: ftask_cfg.c:257
void FTSK_InitializeUserCodePreCyclicTasks(void)
Initialization function before all tasks started.
Definition: ftask_cfg.c:186
void FTSK_RunUserCodeCyclic10ms(void)
Cyclic 10 ms task.
Definition: ftask_cfg.c:230
#define TASK_10MS_COUNTER_FOR_50MS
Definition: ftask_cfg.c:90
void FTSK_RunUserCodeCyclic1ms(void)
Cyclic 1 ms task.
Definition: ftask_cfg.c:218
OS_TASK_DEFINITION_s ftsk_taskDefinitionCyclic10ms
Task configuration of the cyclic 10 ms task.
Definition: ftask_cfg.c:118
void FTSK_RunUserCodeCyclicAlgorithm100ms(void)
Cyclic 100 ms task for algorithms.
Definition: ftask_cfg.c:277
Task configuration header.
#define FTSK_TASK_CYCLIC_1MS_STACK_SIZE_IN_BYTES
Stack size of cyclic 1 ms task.
Definition: ftask_cfg.h:83
#define FTSK_TASK_CYCLIC_10MS_PRIORITY
Priority of cyclic 10 ms task.
Definition: ftask_cfg.h:104
#define FTSK_TASK_ENGINE_STACK_SIZE_IN_BYTES
Stack size of engine task.
Definition: ftask_cfg.h:65
#define FTSK_TASK_CYCLIC_1MS_PRIORITY
Priority of cyclic 1ms task.
Definition: ftask_cfg.h:86
#define FTSK_TASK_CYCLIC_100MS_STACK_SIZE_IN_BYTES
Stack size of cyclic 100 ms task.
Definition: ftask_cfg.h:119
#define FTSK_TASK_CYCLIC_10MS_PV_PARAMETERS
pvParameters of the 10ms task
Definition: ftask_cfg.h:116
#define FTSK_TASK_CYCLIC_1MS_CYCLE_TIME
Cycle time of 1ms task.
Definition: ftask_cfg.h:92
#define FTSK_TASK_AFE_STACK_SIZE_IN_BYTES
Stack size of continuously running task for AFEs.
Definition: ftask_cfg.h:155
#define FTSK_TASK_CYCLIC_10MS_STACK_SIZE_IN_BYTES
Stack size of cyclic 10 ms task.
Definition: ftask_cfg.h:101
#define FTSK_TASK_ENGINE_CYCLE_TIME
Cycle time of engine task.
Definition: ftask_cfg.h:74
#define FTSK_TASK_CYCLIC_ALGORITHM_100MS_PRIORITY
Priority of cyclic 100 ms task for algorithms.
Definition: ftask_cfg.h:140
#define FTSK_TASK_CYCLIC_ALGORITHM_100MS_CYCLE_TIME
Cycle time of 100ms task for algorithms.
Definition: ftask_cfg.h:146
#define FTSK_TASK_CYCLIC_100MS_PV_PARAMETERS
pvParameters of the 100ms task
Definition: ftask_cfg.h:134
#define FTSK_TASK_CYCLIC_10MS_CYCLE_TIME
Cycle time of 10 ms task.
Definition: ftask_cfg.h:110
TaskHandle_t ftsk_taskHandleAfe
Definition of task handles.
#define FTSK_TASK_CYCLIC_ALGORITHM_100MS_PV_PARAMETERS
pvParameters of the 100ms task for algorithms
Definition: ftask_cfg.h:152
#define FTSK_TASK_ENGINE_PRIORITY
Phase of engine task.
Definition: ftask_cfg.h:68
#define FTSK_TASK_CYCLIC_100MS_PRIORITY
Priority of cyclic 100 ms task.
Definition: ftask_cfg.h:122
#define FTSK_TASK_AFE_CYCLE_TIME
Cycle time of continuously running task for AFEs.
Definition: ftask_cfg.h:164
#define FTSK_TASK_AFE_PHASE
Phase of continuously running task for AFEs.
Definition: ftask_cfg.h:161
#define FTSK_TASK_ENGINE_PV_PARAMETERS
pvParameters of the engine task
Definition: ftask_cfg.h:80
#define FTSK_TASK_CYCLIC_1MS_PV_PARAMETERS
pvParameters of the 1ms task
Definition: ftask_cfg.h:98
#define FTSK_TASK_CYCLIC_100MS_CYCLE_TIME
Cycle time of 100ms task.
Definition: ftask_cfg.h:128
#define FTSK_TASK_AFE_PV_PARAMETERS
pvParameters of the continuously running task for AFEs
Definition: ftask_cfg.h:170
#define FTSK_TASK_CYCLIC_100MS_PHASE
Phase of cyclic 100 ms task.
Definition: ftask_cfg.h:125
#define FTSK_TASK_CYCLIC_ALGORITHM_100MS_PHASE
Phase of cyclic 100 ms task for algorithms.
Definition: ftask_cfg.h:143
#define FTSK_TASK_CYCLIC_1MS_PHASE
Phase of cyclic 1ms task.
Definition: ftask_cfg.h:89
#define FTSK_TASK_CYCLIC_ALGORITHM_100MS_STACK_SIZE_IN_BYTES
Stack size of cyclic 100 ms task for algorithms.
Definition: ftask_cfg.h:137
#define FTSK_TASK_AFE_PRIORITY
Priority of continuously running task for AFEs.
Definition: ftask_cfg.h:158
#define FTSK_TASK_CYCLIC_10MS_PHASE
Phase of cyclic 10 ms task.
Definition: ftask_cfg.h:107
#define FTSK_TASK_ENGINE_PHASE
Phase of engine task.
Definition: ftask_cfg.h:71
void HTSEN_Trigger(void)
triggers a measurement of the I2C humidity/temperature sensor.
Definition: htsensor.c:225
Header for the driver for the Sensirion SHT35-DIS I2C humidity/temperature sensor.
Header for the driver for the I2C module.
STD_RETURN_TYPE_e IMD_Trigger(void)
trigger function for the IMD driver state machine.
Definition: imd.c:525
API header for the insulation monitoring device.
void ILCK_Trigger(void)
trigger function for the ILCK driver state machine.
Definition: interlock.c:265
Headers for the driver for the interlock.
void LED_SetToggleTime(uint32_t onOffTime_ms)
Set debug LED with defined frequency.
Definition: led.c:110
void LED_Trigger(void)
Trigger function to periodically toggle debug LED. Frequency can be set via function LED_SetToggleTim...
Definition: led.c:88
Header file of the debug LED driver.
#define LED_NORMAL_OPERATION_ON_OFF_TIME_ms
Definition: led.h:73
void MEAS_Control(void)
Control function that is called from the task every 1ms.
Definition: meas.c:74
STD_RETURN_TYPE_e MEAS_Initialize(void)
Definition: meas.c:116
Headers for the driver for the measurements needed by the BMS (e.g., I,V,T).
void OS_IncrementTimer(void)
Increments the system timer os_timer.
Definition: os.c:94
void PEX_SetPin(uint8_t portExpander, uint8_t pin)
sets pin to high.
Definition: pex.c:321
void PEX_SetPinDirectionOutput(uint8_t portExpander, uint8_t pin)
sets pin to input.
Definition: pex.c:394
void PEX_Initialize(void)
initialize local variable containing state of port expander.
Definition: pex.c:280
void PEX_Trigger(void)
implements reading/writing to the port expander registers.
Definition: pex.c:302
Header for the driver for the NXP PCA9539 port expander module.
#define PEX_PIN00
Definition: pex_cfg.h:81
#define PEX_PORT_EXPANDER3
Definition: pex_cfg.h:76
STD_RETURN_TYPE_e MRC_Initialize(void)
Function to initalize redundancy module.
Definition: redundancy.c:1088
STD_RETURN_TYPE_e MRC_ValidateAfeMeasurement(void)
Function to validate the measurement between redundant measurement values for cell voltage and cell t...
Definition: redundancy.c:1113
STD_RETURN_TYPE_e MRC_ValidatePackMeasurement(void)
Function to validate the measurements of pack values (string values, pack values)
Definition: redundancy.c:1154
Header fileS for handling redundancy between redundant cell voltage and cell temperature measurements...
void SBC_Trigger(SBC_STATE_s *pInstance)
trigger function for the SYS driver state machine.
Definition: sbc.c:258
SBC_STATE_s sbc_stateMcuSupervisor
Definition: sbc.c:76
Header for the driver for the SBC module.
void SOF_Calculation(void)
triggers SOF calculation
Header for SOX module, responsible for current derating calculation.
Headers for the driver for the SPI module.
void SPS_Initialize(void)
Initialize IOs for the SPS driver.
Definition: sps.c:593
void SPS_Ctrl(void)
Control function for the CONT driver state machine.
Definition: sps.c:476
Headers for the driver for the smart power switches.
void SE_RunStateEstimations(void)
Main function to perform state estimations.
Header for state-estimation module responsible for the estimation of state-of-charge (SOC),...
struct for FreeRTOS task definition
Definition: os.h:127
SYS_RETURN_TYPE_e SYS_SetStateRequest(SYS_STATE_REQUEST_e stateRequest)
sets the current state request of the state variable sys_state.
Definition: sys.c:609
SYS_STATE_s sys_state
Definition: sys.c:93
STD_RETURN_TYPE_e SYS_Trigger(SYS_STATE_s *pSystemState)
tick function, call this to advance the state machine
Definition: sys.c:666
Sys driver header.
SYS_RETURN_TYPE_e
Definition: sys.h:153
@ SYS_OK
Definition: sys.h:154
@ SYS_ILLEGAL_REQUEST
Definition: sys.h:157
@ SYS_STATE_INITIALIZATION_REQUEST
Definition: sys.h:147
void SYSM_CheckNotifications(void)
overall system monitoring
Definition: sys_mon.c:150
void SYSM_UpdateFramData(void)
Commits the stored changes to FRAM if necessary.
Definition: sys_mon.c:256
STD_RETURN_TYPE_e SYSM_Init(void)
initialization function for system monitoring
Definition: sys_mon.c:138
system monitoring module