A public repository for BMS algorithms for a NUCLEO BOARD.

Dependencies:   mbed

Hi Everyone!

Welcome to this repository from Howey's Research Group at the University of Oxford.

The code published here incorporates BMS algorithms for diagnosis functions such as SOC, SOH and Power estimation on a Kokam 53Ah Li-ion battery. This code was designed to work with a NUCLEO F401-RE board and to be tested with a dSPACE HIL Simulator. A short guide on how the set up works is available at https://bitbucket.org/ff95/bms .

The code is made up of three key parts. "Headers" and "Source" folders and the "main.cpp" file. As the code was generated by converting a Simulink model ( available on the BitBucket page), the headers and source code files generated by the conversion are in the corresponding "Headers" and "Source" folders. The "main.cpp" file sets up the ADC, the USB data transmission and starts the estimation (once a character "y" has been received by the computer it is connected to). It also transmits the data from the estimation via USB. Explanation on how to set up the communication with the board is available at BitBucket webpage, from where a MATLAB file can be downloaded which allows real time communication.

For any questions you can contact the author at federicomariaferrari@gmail.com .

The Simulink and Matlab files, together with a short guide, are all available at: https://bitbucket.org/ff95/bms.

Thanks for trying this out!

Federico

Committer:
fmferrari
Date:
Thu Jul 13 10:50:13 2017 +0000
Revision:
23:447ef1071e49
Parent:
11:e39c490420d2
A working version of the code needed to run an mbed micro controller.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fmferrari 8:339dd9885af3 1 //
fmferrari 8:339dd9885af3 2 // Academic License - for use in teaching, academic research, and meeting
fmferrari 8:339dd9885af3 3 // course requirements at degree granting institutions only. Not for
fmferrari 8:339dd9885af3 4 // government, commercial, or other organizational use.
fmferrari 8:339dd9885af3 5 //
fmferrari 8:339dd9885af3 6 // File: rtGetNaN.cpp
fmferrari 8:339dd9885af3 7 //
fmferrari 8:339dd9885af3 8 // Code generated for Simulink model 'EKF'.
fmferrari 8:339dd9885af3 9 //
fmferrari 11:e39c490420d2 10 // Model version : 1.38
fmferrari 8:339dd9885af3 11 // Simulink Coder version : 8.11 (R2016b) 25-Aug-2016
fmferrari 11:e39c490420d2 12 // C/C++ source code generated on : Sun Dec 11 19:45:43 2016
fmferrari 8:339dd9885af3 13 //
fmferrari 8:339dd9885af3 14 // Target selection: ert.tlc
fmferrari 8:339dd9885af3 15 // Embedded hardware selection: STMicroelectronics->ST10/Super10
fmferrari 8:339dd9885af3 16 // Code generation objectives: Unspecified
fmferrari 8:339dd9885af3 17 // Validation result: Not run
fmferrari 8:339dd9885af3 18 //
fmferrari 8:339dd9885af3 19
fmferrari 8:339dd9885af3 20 //
fmferrari 8:339dd9885af3 21 // Abstract:
fmferrari 8:339dd9885af3 22 // Function to initialize non-finite, NaN
fmferrari 8:339dd9885af3 23 #include "rtGetNaN.h"
fmferrari 8:339dd9885af3 24 #define NumBitsPerChar 8U
fmferrari 8:339dd9885af3 25
fmferrari 8:339dd9885af3 26 extern "C" {
fmferrari 8:339dd9885af3 27 //
fmferrari 8:339dd9885af3 28 // Initialize rtNaN needed by the generated code.
fmferrari 8:339dd9885af3 29 // NaN is initialized as non-signaling. Assumes IEEE.
fmferrari 8:339dd9885af3 30 //
fmferrari 8:339dd9885af3 31 real_T rtGetNaN(void)
fmferrari 8:339dd9885af3 32 {
fmferrari 8:339dd9885af3 33 size_t bitsPerReal = sizeof(real_T) * (NumBitsPerChar);
fmferrari 8:339dd9885af3 34 real_T nan = 0.0;
fmferrari 8:339dd9885af3 35 if (bitsPerReal == 32U) {
fmferrari 8:339dd9885af3 36 nan = rtGetNaNF();
fmferrari 8:339dd9885af3 37 } else {
fmferrari 8:339dd9885af3 38 union {
fmferrari 8:339dd9885af3 39 LittleEndianIEEEDouble bitVal;
fmferrari 8:339dd9885af3 40 real_T fltVal;
fmferrari 8:339dd9885af3 41 } tmpVal;
fmferrari 8:339dd9885af3 42
fmferrari 8:339dd9885af3 43 tmpVal.bitVal.words.wordH = 0xFFF80000U;
fmferrari 8:339dd9885af3 44 tmpVal.bitVal.words.wordL = 0x00000000U;
fmferrari 8:339dd9885af3 45 nan = tmpVal.fltVal;
fmferrari 8:339dd9885af3 46 }
fmferrari 8:339dd9885af3 47
fmferrari 8:339dd9885af3 48 return nan;
fmferrari 8:339dd9885af3 49 }
fmferrari 8:339dd9885af3 50
fmferrari 8:339dd9885af3 51 //
fmferrari 8:339dd9885af3 52 // Initialize rtNaNF needed by the generated code.
fmferrari 8:339dd9885af3 53 // NaN is initialized as non-signaling. Assumes IEEE.
fmferrari 8:339dd9885af3 54 //
fmferrari 8:339dd9885af3 55 real32_T rtGetNaNF(void)
fmferrari 8:339dd9885af3 56 {
fmferrari 8:339dd9885af3 57 IEEESingle nanF = { { 0 } };
fmferrari 8:339dd9885af3 58
fmferrari 8:339dd9885af3 59 nanF.wordL.wordLuint = 0xFFC00000U;
fmferrari 8:339dd9885af3 60 return nanF.wordL.wordLreal;
fmferrari 8:339dd9885af3 61 }
fmferrari 8:339dd9885af3 62 }
fmferrari 8:339dd9885af3 63 //
fmferrari 8:339dd9885af3 64 // File trailer for generated code.
fmferrari 8:339dd9885af3 65 //
fmferrari 8:339dd9885af3 66 // [EOF]
fmferrari 8:339dd9885af3 67 //