foxBMS  1.4.1
The foxBMS Battery Management System API Documentation
ltc_6813-1_cfg.h
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 ltc_6813-1_cfg.h
44  * @author foxBMS Team
45  * @date 2015-02-18 (date of creation)
46  * @updated 2022-10-27 (date of last update)
47  * @version v1.4.1
48  * @ingroup DRIVERS_CONFIGURATION
49  * @prefix LTC
50  *
51  * @brief Header for the configuration for the LTC 6804-1 6811-1, 6812-1,
52  * and 6813-1 monitoring IC.
53  *
54  */
55 
56 #ifndef FOXBMS__LTC_6813_1_CFG_H_
57 #define FOXBMS__LTC_6813_1_CFG_H_
58 
59 /*========== Includes =======================================================*/
60 /* clang-format off */
61 #include "ltc_cfg.h"
62 /* clang-format on */
63 
64 #include "ltc_defs.h"
65 #include "battery_system_cfg.h"
66 
67 #include "ltc_afe_dma.h"
68 #include "spi.h"
69 
70 /*========== Macros and Definitions =========================================*/
71 /**
72  * @ingroup CONFIG_LTC
73  * If set to 1 LTC driver is configured to use foxBMS slave boards version 1.x
74  * If set to 2 LTC driver is configured to use foxBMS slave boards version 2.x
75  */
76 #define SLAVE_BOARD_VERSION (2)
77 
78 #if SLAVE_BOARD_VERSION == 1
79 #elif SLAVE_BOARD_VERSION == 2
80 #else
81 #error Please select the slave board version you want to use. Configuration file: \src\module\config\ltc_cfg.h
82 #endif
83 
84 /**
85  * If set to 0 LTC driver is configured to use PCA8574 port expander
86  * If set to 1 LTC driver is configured to use TCA6408A port expander
87  */
88 #define LTC_PORTEXPANDER_VERSION (1u)
89 
90 /** Address of TI port expander (0 or 1) */
91 #define LTC_PORTEXPANDER_ADR_TI (0u)
92 
93 /** Controls if PEC should be discarded (true) or not (false) */
94 #define LTC_DISCARD_PEC (false)
95 
96 /* set to true or false */
97 #define LTC_GOTO_MUX_CHECK (true)
98 
99 /* set to true or false */
100 #define LTC_DISCARD_MUX_CHECK (false)
101 
102 /** Number of multiplexer used per LTC-IC */
103 #define LTC_N_MUX_PER_LTC (3u)
104 
105 /** Number of channels per multiplexer */
106 #define LTC_N_MUX_CHANNELS_PER_MUX (8u)
107 
108 /** Number of multiplexer measurements per LTC cycle */
109 #define LTC_NUMBER_OF_MUX_MEASUREMENTS_PER_CYCLE (8u)
110 
111 /** Number of multiplexed channels per LTC-IC */
112 #define LTC_N_MUX_CHANNELS_PER_LTC (LTC_N_MUX_PER_LTC * LTC_N_MUX_CHANNELS_PER_MUX)
113 
114 /** Number of LTC-ICs per battery module */
115 #define LTC_NUMBER_OF_LTC_PER_MODULE (1u)
116 
117 /** Open-wire detection threshold */
118 #define LTC_ADOW_THRESHOLD (-400)
119 
120 /**
121  * Measurement modus for voltages, possible values:
122  * - LTC_ADCMODE_NORMAL_DCP0
123  * - LTC_ADCMODE_FILTERED_DCP0
124  * - LTC_ADCMODE_FAST_DCP0
125  */
126 #define LTC_VOLTAGE_MEASUREMENT_MODE (LTC_ADCMODE_NORMAL_DCP0)
127 
128 /**
129  * Measurement modus for GPIOs, possible values:
130  * - LTC_ADCMODE_NORMAL_DCP0
131  * - LTC_ADCMODE_FILTERED_DCP0
132  * - LTC_ADCMODE_FAST_DCP0
133  */
134 #define LTC_GPIO_MEASUREMENT_MODE (LTC_ADCMODE_NORMAL_DCP0)
135 
136 /**
137  * Measurement modus for Open-wire check, possible values:
138  * - LTC_ADCMODE_NORMAL_DCP0
139  * - LTC_ADCMODE_FILTERED_DCP0
140  */
141 #define LTC_OW_MEASUREMENT_MODE (LTC_ADCMODE_NORMAL_DCP0)
142 
143 /**
144  * Timeout in milliseconds added to the transmission time for interrupt-based
145  * SPI transmission.
146  */
147 #define LTC_TRANSMISSION_TIMEOUT (10)
148 
149 /**
150  * SPI1 is used for communication with LTC
151  * @{
152  */
153 #define LTC_SPI_HANDLE (&spi_devices[0])
154 #define LTC_SPI_INSTANCE (*LTC_SPI_HANDLE.Instance)
155 #define LTC_SPI_PRESCALER (*LTC_SPI_HANDLE.Init.BaudRatePrescaler)
156 /**@}*/
157 
158 /** start definition of LTC timings; Twake (see LTC data sheet) */
159 #define LTC_TWAKE_US (300)
160 /** start definition of LTC timings; Tready (see LTC data sheet) */
161 #define LTC_TREADY_US (10)
162 /** start definition of LTC timings; Tidle (see LTC data sheet) */
163 #define LTC_TIDLE_US (6700)
164 
165 /** LTC SPI wakeup time */
166 #define LTC_SPI_WAKEUP_WAIT_TIME_US (30u)
167 
168 /** LTC statemachine short time definition in ms */
169 #define LTC_STATEMACH_SHORTTIME (1)
170 
171 /**
172  * time for the first initialization of the daisy chain
173  * see LTC6804 data sheet page 41
174  */
175 #define LTC_STATEMACH_DAISY_CHAIN_FIRST_INITIALIZATION_TIME ((LTC_TWAKE_US * LTC_N_LTC) / 1000)
176 /**
177  * time for the second initialization of the daisy chain
178  * see LTC6804 data sheet page 41
179  */
180 #define LTC_STATEMACH_DAISY_CHAIN_SECOND_INITIALIZATION_TIME ((LTC_TREADY_US * LTC_N_LTC) / 1000)
181 
182 /*
183  * Timings of Voltage Cell and GPIO measurement for all cells or all GPIO
184  */
185 
186 /**
187  * ~1.1ms Measurement+Calibration Cycle Time When Starting from the REFUP State in Fast Mode
188  * unit: ms
189  */
190 #define LTC_STATEMACH_MEAS_ALL_CELLS_FAST_TCYCLE (2)
191 
192 /**
193  * ~2.3ms Measurement+Calibration Cycle Time When Starting from the REFUP State in Normal Mode
194  * unit: ms
195  */
196 #define LTC_STATEMACH_MEAS_ALL_CELLS_NORMAL_TCYCLE (3)
197 
198 /**
199  * ~201ms Measurement+Calibration Cycle Time When Starting from the REFUP State in Filtered Mode
200  * unit: ms
201  */
202 #define LTC_STATEMACH_MEAS_ALL_CELLS_FILTERED_TCYCLE (202)
203 
204 /**
205  * ~203us Measurement+Calibration Cycle Time When Starting from the REFUP State in Fast Mode
206  * unit: ms
207  */
208 #define LTC_STATEMACH_MEAS_TWO_CELLS_FAST_TCYCLE (1)
209 
210 /**
211  * ~407us Measurement+Calibration Cycle Time When Starting from the REFUP State in Normal Mode
212  * unit: ms
213  */
214 #define LTC_STATEMACH_MEAS_TWO_CELLS_NORMAL_TCYCLE (1)
215 
216 /**
217  * ~34ms Measurement+Calibration Cycle Time When Starting from the REFUP State in Filtered Mode
218  * unit: ms
219  */
220 #define LTC_STATEMACH_MEAS_TWO_CELLS_FILTERED_TCYCLE (35)
221 
222 /*
223  * Timings of Voltage Cell and GPIO measurement for a pair of cells or a single GPIO
224  */
225 
226 /**
227  * ~1.8ms Measurement+Calibration Cycle Time When Starting from the REFUP State in Fast Mode
228  * unit: ms
229  */
230 #define LTC_STATEMACH_MEAS_ALL_GPIOS_FAST_TCYCLE (2)
231 
232 /**
233  * ~3.9ms Measurement+Calibration Cycle Time When Starting from the REFUP State in Normal Mode
234  * unit: ms
235  */
236 #define LTC_STATEMACH_MEAS_ALL_GPIOS_NORMAL_TCYCLE (4)
237 
238 /**
239  * ~335ms Measurement+Calibration Cycle Time When Starting from the REFUP State in Filtered Mode
240  * unit: ms
241  */
242 #define LTC_STATEMACH_MEAS_ALL_GPIOS_FILTERED_TCYCLE (336)
243 
244 /**
245  * ~380us Measurement+Calibration Cycle Time When Starting from the REFUP State in Fast Mode
246  * unit: ms
247  */
248 #define LTC_STATEMACH_MEAS_SINGLE_GPIO_FAST_TCYCLE (1)
249 
250 /**
251  * ~788us Measurement+Calibration Cycle Time When Starting from the REFUP State in Normal Mode
252  * unit: ms
253  */
254 #define LTC_STATEMACH_MEAS_SINGLE_GPIO_NORMAL_TCYCLE (1)
255 
256 /**
257  * ~67.1ms Measurement+Calibration Cycle Time When Starting from the REFUP State in Filtered Mode
258  * unit: ms
259  */
260 #define LTC_STATEMACH_MEAS_SINGLE_GPIO_FILTERED_TCYCLE (68)
261 
262 /** LTC statemachine sequence error timing in ms */
263 #define LTC_STATEMACH_SEQERRTTIME (5)
264 /** LTC statemachine CRC-transmission error timing in ms */
265 #define LTC_STATEMACH_PECERRTIME (1)
266 
267 /**
268  * Maximum number of re-tries in case of CRC error during the communication with daisy chain
269  * before going into error state
270  */
271 #define LTC_TRANSMIT_PECERRLIMIT (10)
272 
273 /**
274  * Maximum number of re-tries in case of SPI error during the communication with daisy chain
275  * before going into error state
276  */
277 #define LTC_TRANSMIT_SPIERRLIMIT (3)
278 
279 /** If set to 1, check if multiplexers acknowledged transmission */
280 #define LTC_READCOM (0)
281 
282 /**
283  * Number of required ADOW commands because of external C-Pin capacitance and
284  * the respective duration to perform an open wire check for 14 modules with
285  * 12 cells each. During this time no cell voltages and temperatures are measured!
286  * +----------------+--------------+---------------+----------+----------+
287  * | External C pin | Normal mode | Filtered mode | Duration | Duration |
288  * | capacitance | | | normal | filtered |
289  * | ---------------+--------------+---------------+----------+----------+
290  * | <= 10nF | 2 | 2 | 32ms | 828ms |
291  * | 100nF | 10 | 2 | 112ms | 828ms |
292  * | 1uF | 100 | 2 | 1012ms | 828ms |
293  * | C | 1.5+(C/10nF) | 2 | | |
294  * +----------------+--------------+---------------+----------+----------+
295  */
296 #define LTC_NMBR_REQ_ADOW_COMMANDS (2)
297 
298 /**
299  * Transmit functions
300  * @{
301  */
302 #define LTC_TRANSMIT_WAKE_UP(spi_ltcInterface) SPI_TransmitDummyByte(spi_ltcInterface, LTC_SPI_WAKEUP_WAIT_TIME_US)
303 #define LTC_TRANSMIT_I2C_COMMAND(spi_ltcInterface, txbuf) \
304  SPI_TransmitDummyByte(spi_ltcInterface, LTC_SPI_WAKEUP_WAIT_TIME_US); \
305  SPI_TransmitData(spi_ltcInterface, txbuf, 4 + 9)
306 #define LTC_TRANSMIT_COMMAND(spi_ltcInterface, command) \
307  SPI_TransmitDummyByte(spi_ltcInterface, LTC_SPI_WAKEUP_WAIT_TIME_US); \
308  SPI_TransmitData(spi_ltcInterface, command, 4)
309 #define LTC_TRANSMIT_RECEIVE_DATA(spi_ltcInterface, txbuf, rxbuf, length) \
310  SPI_TransmitDummyByte(spi_ltcInterface, LTC_SPI_WAKEUP_WAIT_TIME_US); \
311  SPI_TransmitReceiveDataDma(spi_ltcInterface, txbuf, rxbuf, length)
312 /**@}*/
313 
314 /*========== Extern Constant and Variable Declarations ======================*/
315 
316 /**
317  * Definition of the multiplexer measurement sequence
318  */
320 
321 /**
322  * On the foxBMS slave board there are 6 multiplexer inputs dedicated to temperature
323  * sensors by default.
324  * Lookup table between temperature sensors and battery cells
325  */
327 
328 /** Lookup table to indicate which voltage inputs are used */
329 extern const uint8_t ltc_voltage_input_used[BS_MAX_SUPPORTED_CELLS];
330 
331 /*========== Extern Function Prototypes =====================================*/
332 
333 /**
334  * @brief converts a raw voltage from multiplexer to a temperature value in
335  * deci &deg;C.
336  * @details The temperatures are read from NTC elements via voltage dividers.
337  * This function implements the look-up table between voltage and
338  * temperature, taking into account the NTC characteristics and the
339  * voltage divider.
340  * @param adcVoltage_mV voltage read from the multiplexer in mV
341  * @return temperature value in deci &deg;C
342  */
343 extern int16_t LTC_ConvertMuxVoltagesToTemperatures(uint16_t adcVoltage_mV);
344 
345 /*========== Externalized Static Functions Prototypes (Unit Test) ===========*/
346 
347 #endif /* FOXBMS__LTC_6813_1_CFG_H_ */
Configuration of the battery system (e.g., number of battery modules, battery cells,...
#define BS_MAX_SUPPORTED_CELLS
Defines the maximal number of supported cells per module.
#define BS_NR_OF_TEMP_SENSORS_PER_MODULE
number of temperature sensors per battery module
const uint8_t ltc_muxsensortemperatur_cfg[BS_NR_OF_TEMP_SENSORS_PER_MODULE]
const uint8_t ltc_voltage_input_used[BS_MAX_SUPPORTED_CELLS]
Definition: ltc_6806_cfg.c:64
LTC_MUX_SEQUENCE_s ltc_mux_seq
int16_t LTC_ConvertMuxVoltagesToTemperatures(uint16_t adcVoltage_mV)
converts a raw voltage from multiplexer to a temperature value in deci °C.
Headers for the driver for the DMA module for the LTC.
Headers for the configuration for the LTC monitoring chip.
Headers for the driver for the LTC monitoring chip.
Headers for the driver for the SPI module.