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

Revision:
8:339dd9885af3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/source/Simulink/rt_nonfinite.cpp	Thu Dec 08 18:46:51 2016 +0000
@@ -0,0 +1,82 @@
+//
+// Academic License - for use in teaching, academic research, and meeting
+// course requirements at degree granting institutions only.  Not for
+// government, commercial, or other organizational use.
+//
+// File: rt_nonfinite.cpp
+//
+// Code generated for Simulink model 'EKF'.
+//
+// Model version                  : 1.6
+// Simulink Coder version         : 8.11 (R2016b) 25-Aug-2016
+// C/C++ source code generated on : Thu Dec  8 19:03:07 2016
+//
+// Target selection: ert.tlc
+// Embedded hardware selection: STMicroelectronics->ST10/Super10
+// Code generation objectives: Unspecified
+// Validation result: Not run
+//
+
+//
+//  Abstract:
+//       Function to initialize non-finites,
+//       (Inf, NaN and -Inf).
+#include "rt_nonfinite.h"
+#include "rtGetNaN.h"
+#include "rtGetInf.h"
+
+extern "C" {
+  real_T rtInf;
+  real_T rtMinusInf;
+  real_T rtNaN;
+  real32_T rtInfF;
+  real32_T rtMinusInfF;
+  real32_T rtNaNF;
+}
+  extern "C"
+{
+  //
+  // Initialize the rtInf, rtMinusInf, and rtNaN needed by the
+  // generated code. NaN is initialized as non-signaling. Assumes IEEE.
+  //
+  void rt_InitInfAndNaN(size_t realSize)
+  {
+    (void) (realSize);
+    rtNaN = rtGetNaN();
+    rtNaNF = rtGetNaNF();
+    rtInf = rtGetInf();
+    rtInfF = rtGetInfF();
+    rtMinusInf = rtGetMinusInf();
+    rtMinusInfF = rtGetMinusInfF();
+  }
+
+  // Test if value is infinite
+  boolean_T rtIsInf(real_T value)
+  {
+    return (boolean_T)((value==rtInf || value==rtMinusInf) ? 1U : 0U);
+  }
+
+  // Test if single-precision value is infinite
+  boolean_T rtIsInfF(real32_T value)
+  {
+    return (boolean_T)(((value)==rtInfF || (value)==rtMinusInfF) ? 1U : 0U);
+  }
+
+  // Test if value is not a number
+  boolean_T rtIsNaN(real_T value)
+  {
+    return (boolean_T)((value!=value) ? 1U : 0U);
+  }
+
+  // Test if single-precision value is not a number
+  boolean_T rtIsNaNF(real32_T value)
+  {
+    return (boolean_T)(((value!=value) ? 1U : 0U));
+  }
+}
+
+//
+// File trailer for generated code.
+//
+// [EOF]
+//