foxBMS  1.2.0
The foxBMS Battery Management System API Documentation
ftask_cfg.c
Go to the documentation of this file.
1 /**
2  *
3  * @copyright © 2010 - 2021, 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 2021-09-30 (date of last update)
47  * @ingroup TASK_CONFIGURATION
48  * @prefix FTSK
49  *
50  * @brief Task configuration
51  * @details
52  */
53 
54 /*========== Includes =======================================================*/
55 #include "ftask_cfg.h"
56 
57 #include "HL_gio.h"
58 #include "HL_het.h"
59 
60 #include "adc.h"
61 #include "algorithm.h"
62 #include "bal.h"
63 #include "bms.h"
64 #include "can.h"
65 #include "contactor.h"
66 #include "database.h"
67 #include "diag.h"
68 #include "dma.h"
69 #include "fram.h"
70 #include "htsensor.h"
71 #include "i2c.h"
72 #include "imd.h"
73 #include "interlock.h"
74 #include "led.h"
75 #include "meas.h"
76 #include "pex.h"
77 #include "redundancy.h"
78 #include "sbc.h"
79 #include "sof.h"
80 #include "spi.h"
81 #include "sps.h"
82 #include "state_estimation.h"
83 #include "sys.h"
84 #include "sys_mon.h"
85 
86 /*========== Macros and Definitions =========================================*/
87 
88 /** counter value for 50ms in 10ms task */
89 #define TASK_10MS_COUNTER_FOR_50MS (5u)
90 
91 /** counter value for 1s in 100ms task */
92 #define TASK_100MS_COUNTER_FOR_1S (10u)
93 
94 /*========== Static Constant and Variable Definitions =======================*/
95 
96 /*========== Extern Constant and Variable Definitions =======================*/
97 
98 /**
99  * @brief Definition of the engine task
100  * @details Task is not delayed after the scheduler starts. This task must
101  * have the highest priority.
102  * @warning Do not change the configuration of this task. This will very
103  * likely break the system.
104  */
124 
125 /*========== Static Function Prototypes =====================================*/
126 
127 /*========== Static Function Implementations ================================*/
128 
129 /*========== Extern Function Implementations ================================*/
130 extern void FTSK_InitializeUserCodeEngine(void) {
131  /* Warning: Do not change the content of this function */
132  /* See function definition doxygen comment for details */
133  STD_RETURN_TYPE_e retval = DATA_Init();
134 
135  if (retval == E_NOT_OK) {
136  /* Fatal error! */
138  }
139 
140  retval = SYSM_Init();
141 
142  if (retval == E_NOT_OK) {
143  /* Fatal error! */
145  }
146 
147  /* Warning: Do not change the content of this function */
148  /* See function definition doxygen comment for details */
149 }
150 
151 extern void FTSK_RunUserCodeEngine(void) {
152  /* Warning: Do not change the content of this function */
153  /* See function definition doxygen comment for details */
154  DATA_Task(); /* Call database manager */
155  SYSM_CheckNotifications(); /* Check notifications from tasks */
156  /* Warning: Do not change the content of this function */
157  /* See function definition doxygen comment for details */
158 }
159 
161  /* user code */
163 
164  /* Init Sys */
166 
167  /* Init FRAM */
168  FRAM_Initialize();
169 
170  /* Init port expander */
171  PEX_Initialize();
172 
173  /* Set 3rd PE pin to activate temperature/humidity sensor */
176 
177  CONT_Initialize();
178  SPS_Initialize();
179  (void)MEAS_Initialize(); /* cast to void as the return value is unused */
180 
181  /* Initialize redundancy module */
182  (void)MRC_Initialize();
183 
184  /* This function operates under the assumption that it is called when
185  * the operating system is not yet running.
186  * In this state the return value of #SYS_SetStateRequest should
187  * always be #SYS_OK. Therefore we trap otherwise.
188  */
189  FAS_ASSERT(sys_retVal == SYS_OK);
190 
191  /* System started correctly -> Start toggling of debug LED */
193 }
194 
195 extern void FTSK_RunUserCodeCyclic1ms(void) {
196  /* Increment of operating system timer */
197  /* This must not be changed, add user code only below */
200  /* user code */
201  MEAS_Control();
203 }
204 
205 extern void FTSK_RunUserCodeCyclic10ms(void) {
206  static uint8_t cnt = 0;
207  /* user code */
209  BMS_Trigger();
210  ILCK_Trigger();
211  ADC_Control();
212  SPS_Ctrl();
214  SOF_Calculation();
217  PEX_Trigger();
218  HTSEN_Trigger();
219  if (cnt == TASK_10MS_COUNTER_FOR_50MS) {
222  cnt = 0;
223  }
224  cnt++;
225 }
226 
227 extern void FTSK_RunUserCodeCyclic100ms(void) {
228  /* user code */
229  static uint8_t ftsk_cyclic100msCounter = 0;
230 
231  /** Perform SOC and SOE calculations only every 1s. Not suited if analog
232  * integration of current sensor is NOT used. Manual integration of current
233  * requires a higher frequency.
234  */
235  if (ftsk_cyclic100msCounter == TASK_100MS_COUNTER_FOR_1S) {
237  ftsk_cyclic100msCounter = 0;
238  }
239 
240  BAL_Trigger();
241  IMD_Trigger();
242  LED_Trigger();
243 
244  ftsk_cyclic100msCounter++;
245 }
246 
248  /* user code */
249  static uint8_t ftsk_cyclicAlgorithm100msCounter = 0;
250 
252 
253  ftsk_cyclicAlgorithm100msCounter++;
254 }
255 
256 extern void FTSK_RunUserCodeIdle(void) {
257  /* user code */
258 }
259 
260 /*========== Externalized Static Function Implementations (Unit Test) =======*/
void ADC_Control(void)
controls ADC measurement sequence.
Definition: adc.c:97
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:111
void ALGO_MonitorExecutionTime(void)
monitors the calculation duration of the different algorithms
Definition: algorithm.c:143
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:647
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:232
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:344
Header for the driver for the CAN module.
void CONT_Initialize(void)
initializes the contactor module
Definition: contactor.c:297
Headers for the driver for the contactors.
void DATA_Task(void)
trigger of database manager
Definition: database.c:155
STD_RETURN_TYPE_e DATA_Init(void)
Initialization of database manager.
Definition: database.c:105
Database module header.
Diagnosis driver header.
void DIAG_UpdateFlags(void)
update function for diagnosis flags
Definition: diag_cfg.c:223
Headers for the driver for the DMA module.
#define FAS_ASSERT(x)
Assertion macro that asserts that x is true.
Definition: fassert.h:237
#define FAS_TRAP
Define that evaluates to essential boolean false thus tripping an assert.
Definition: fassert.h:108
void FRAM_Initialize(void)
Initializes the addresses to be written in the FRAM.
Definition: fram.c:88
Header for the driver for the FRAM module.
enum STD_RETURN_TYPE STD_RETURN_TYPE_e
OS_TASK_DEFINITION_s ftsk_taskDefinitionCyclic100ms
Task configuration of the cyclic 100 ms task.
Definition: ftask_cfg.c:114
void FTSK_InitializeUserCodeEngine(void)
Initializes the database.
Definition: ftask_cfg.c:130
void FTSK_RunUserCodeEngine(void)
Engine task for the database and the system monitoring module.
Definition: ftask_cfg.c:151
OS_TASK_DEFINITION_s ftsk_taskDefinitionEngine
Definition of the engine task.
Definition: ftask_cfg.c:105
OS_TASK_DEFINITION_s ftsk_taskDefinitionCyclic1ms
Task configuration of the cyclic 1 ms task.
Definition: ftask_cfg.c:107
#define TASK_100MS_COUNTER_FOR_1S
Definition: ftask_cfg.c:92
void FTSK_RunUserCodeIdle(void)
Idle task.
Definition: ftask_cfg.c:256
OS_TASK_DEFINITION_s ftsk_taskDefinitionCyclicAlgorithm100ms
Task configuration of the cyclic 100 ms task for algorithms.
Definition: ftask_cfg.c:119
void FTSK_RunUserCodeCyclic100ms(void)
Cyclic 100 ms task.
Definition: ftask_cfg.c:227
void FTSK_InitializeUserCodePreCyclicTasks(void)
Initialization function before all tasks started.
Definition: ftask_cfg.c:160
void FTSK_RunUserCodeCyclic10ms(void)
Cyclic 10 ms task.
Definition: ftask_cfg.c:205
#define TASK_10MS_COUNTER_FOR_50MS
Definition: ftask_cfg.c:89
void FTSK_RunUserCodeCyclic1ms(void)
Cyclic 1 ms task.
Definition: ftask_cfg.c:195
OS_TASK_DEFINITION_s ftsk_taskDefinitionCyclic10ms
Task configuration of the cyclic 10 ms task.
Definition: ftask_cfg.c:112
void FTSK_RunUserCodeCyclicAlgorithm100ms(void)
Cyclic 100 ms task for algorithms.
Definition: ftask_cfg.c:247
Task configuration header.
#define FTSK_TASK_ENGINE_STACK_SIZE
Stack size of engine task.
Definition: ftask_cfg.h:64
#define FTSK_TASK_CYCLIC_1MS_CYCLE_TIME
Cycle time of 1ms task.
Definition: ftask_cfg.h:82
#define FTSK_TASK_ENGINE_CYCLE_TIME
Cycle time of engine task.
Definition: ftask_cfg.h:70
#define FTSK_TASK_CYCLIC_100MS_STACK_SIZE
Stack size of cyclic 100 ms task.
Definition: ftask_cfg.h:100
#define FTSK_TASK_CYCLIC_1MS_STACK_SIZE
Stack size of cyclic 1 ms task.
Definition: ftask_cfg.h:76
#define FTSK_TASK_CYCLIC_ALGORITHM_100MS_CYCLE_TIME
Cycle time of 100ms task for algorithms.
Definition: ftask_cfg.h:118
#define FTSK_TASK_CYCLIC_10MS_CYCLE_TIME
Cycle time of 10 ms task.
Definition: ftask_cfg.h:94
#define FTSK_TASK_CYCLIC_ALGORITHM_100MS_STACKSIZE
Stack size of cyclic 100 ms task for algorithms.
Definition: ftask_cfg.h:112
#define FTSK_TASK_CYCLIC_10MS_STACK_SIZE
Stack size of cyclic 10 ms task.
Definition: ftask_cfg.h:88
#define FTSK_TASK_CYCLIC_100MS_CYCLE_TIME
Cycle time of 100ms task.
Definition: ftask_cfg.h:106
#define FTSK_TASK_CYCLIC_100MS_PHASE
Phase of cyclic 100 ms task.
Definition: ftask_cfg.h:103
#define FTSK_TASK_CYCLIC_ALGORITHM_100MS_PHASE
Phase of cyclic 100 ms task for algorithms.
Definition: ftask_cfg.h:115
#define FTSK_TASK_CYCLIC_1MS_PHASE
Phase of cyclic 1ms task.
Definition: ftask_cfg.h:79
#define FTSK_TASK_CYCLIC_10MS_PHASE
Phase of cyclic 10 ms task.
Definition: ftask_cfg.h:91
#define FTSK_TASK_ENGINE_PHASE
Phase of engine task.
Definition: ftask_cfg.h:67
void HTSEN_Trigger(void)
triggers a measurement of the I2C humidity/temperature sensor.
Definition: htsensor.c:223
Header for the driver for the Sensirion SHT35-DIS I2C humidity/temperature sensor.
Header for the driver for the I2C module.
API header for the insulation monitoring device.
void IMD_Trigger(void)
trigger function for the IMD driver state machine.
Definition: no-imd.c:86
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:109
void LED_Trigger(void)
Trigger function to periodically toggle debug LED. Frequency can be set via function LED_SetToggleTim...
Definition: led.c:87
Header file of the debug LED driver.
#define LED_NORMAL_OPERATION_ON_OFF_TIME_ms
Definition: led.h:72
void MEAS_Control(void)
Control function that is called from the task every 1ms.
Definition: meas.c:73
STD_RETURN_TYPE_e MEAS_Initialize(void)
Definition: meas.c:115
Headers for the driver for the measurements needed by the BMS (e.g., I,V,T).
volatile OS_TIMER_s os_timer
Definition: os.c:74
void OS_TriggerTimer(volatile OS_TIMER_s *timer)
Increments the system timer os_timer.
Definition: os.c:141
@ OS_PRIORITY_HIGH
Definition: os.h:82
@ OS_PRIORITY_NORMAL
Definition: os.h:80
@ OS_PRIORITY_REAL_TIME
Definition: os.h:86
@ OS_PRIORITY_ABOVE_HIGH
Definition: os.h:83
@ OS_PRIORITY_ABOVE_NORMAL
Definition: os.h:81
void PEX_SetPin(uint8_t portExpander, uint8_t pin)
sets pin to high.
Definition: pex.c:320
void PEX_SetPinDirectionOutput(uint8_t portExpander, uint8_t pin)
sets pin to input.
Definition: pex.c:393
void PEX_Initialize(void)
initialize local variable containing state of port expander.
Definition: pex.c:279
void PEX_Trigger(void)
implements reading/writing to the port expander registers.
Definition: pex.c:301
Header for the driver for the NXP PCA9539 port expander module.
#define PEX_PIN00
Definition: pex_cfg.h:80
#define PEX_PORT_EXPANDER3
Definition: pex_cfg.h:75
STD_RETURN_TYPE_e MRC_Initialize(void)
Function to initalize redundancy module.
Definition: redundancy.c:1112
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:1137
STD_RETURN_TYPE_e MRC_ValidatePackMeasurement(void)
Function to validate the measurements of pack values (string values, pack values)
Definition: redundancy.c:1170
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:236
SBC_STATE_s sbc_stateMcuSupervisor
Definition: sbc.c:75
Header for the driver for the SBC module.
void SOF_Calculation(void)
triggers SOF calculation
Definition: sof.c:358
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:592
void SPS_Ctrl(void)
Control function for the CONT driver state machine.
Definition: sps.c:475
Headers for the driver for the smart power switches.
void SE_StateEstimations(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:116
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:550
SYS_STATE_s sys_state
Definition: sys.c:92
STD_RETURN_TYPE_e SYS_Trigger(SYS_STATE_s *pSystemState)
tick function, call this to advance the state machine
Definition: sys.c:607
Sys driver header.
@ SYS_OK
Definition: sys.h:151
@ SYS_ILLEGAL_REQUEST
Definition: sys.h:154
enum SYS_RETURN_TYPE SYS_RETURN_TYPE_e
@ SYS_STATE_INIT_REQUEST
Definition: sys.h:144
void SYSM_CheckNotifications(void)
overall system monitoring
Definition: sys_mon.c:72
STD_RETURN_TYPE_e SYSM_Init(void)
initialization function for system monitoring
Definition: sys_mon_cfg.c:117