Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
bms.h@1:9d8518740e5c, 2019-05-08 (annotated)
- Committer:
- gscuttari
- Date:
- Wed May 08 19:36:00 2019 +0000
- Revision:
- 1:9d8518740e5c
- Parent:
- 0:6a895c900427
ML
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| gscuttari | 0:6a895c900427 | 1 | /***************************************************************************** |
| gscuttari | 0:6a895c900427 | 2 | bms.h |
| gscuttari | 0:6a895c900427 | 3 | |
| gscuttari | 0:6a895c900427 | 4 | Copyright (C) 2019 SQC Systems s.r.l. |
| gscuttari | 0:6a895c900427 | 5 | All rights reserved. |
| gscuttari | 0:6a895c900427 | 6 | |
| gscuttari | 0:6a895c900427 | 7 | SQC Systems shall not be liable for any direct, indirect, |
| gscuttari | 0:6a895c900427 | 8 | consequential or incidental damages arising from using or modifying this |
| gscuttari | 0:6a895c900427 | 9 | program. |
| gscuttari | 0:6a895c900427 | 10 | |
| gscuttari | 0:6a895c900427 | 11 | History |
| gscuttari | 0:6a895c900427 | 12 | 2019.03.19 ver.1.00 |
| gscuttari | 0:6a895c900427 | 13 | |
| gscuttari | 0:6a895c900427 | 14 | ******************************************************************************/ |
| gscuttari | 0:6a895c900427 | 15 | #ifndef _BMS_H_ |
| gscuttari | 0:6a895c900427 | 16 | #define _BMS_H_ |
| gscuttari | 0:6a895c900427 | 17 | |
| gscuttari | 0:6a895c900427 | 18 | |
| gscuttari | 0:6a895c900427 | 19 | /********************************** |
| gscuttari | 0:6a895c900427 | 20 | STATE OF BMS |
| gscuttari | 0:6a895c900427 | 21 | **********************************/ |
| gscuttari | 0:6a895c900427 | 22 | // Define State of BMS |
| gscuttari | 0:6a895c900427 | 23 | #define START_MODE 1 |
| gscuttari | 0:6a895c900427 | 24 | #define RUN_MODE 2 |
| gscuttari | 0:6a895c900427 | 25 | #define STANDBY_MODE 3 |
| gscuttari | 0:6a895c900427 | 26 | #define ERROR_MODE 4 |
| gscuttari | 0:6a895c900427 | 27 | #define CHARGING_MODE 5 |
| gscuttari | 0:6a895c900427 | 28 | #define RESTORE_MODE 6 |
| gscuttari | 0:6a895c900427 | 29 | #define LOW_BATTERY_MODE 7 |
| gscuttari | 0:6a895c900427 | 30 | #define POWER_DOWN_MODE 8 |
| gscuttari | 0:6a895c900427 | 31 | #define SHORT_CIRCUIT_MODE 9 |
| gscuttari | 0:6a895c900427 | 32 | #define HIGH_TEMPERATURE_CUTOFF 10 |
| gscuttari | 0:6a895c900427 | 33 | #define LOW_TEMPERATURE_CUTOFF 11 |
| gscuttari | 0:6a895c900427 | 34 | |
| gscuttari | 0:6a895c900427 | 35 | /********************************** |
| gscuttari | 0:6a895c900427 | 36 | EVENTS |
| gscuttari | 0:6a895c900427 | 37 | **********************************/ |
| gscuttari | 0:6a895c900427 | 38 | |
| gscuttari | 0:6a895c900427 | 39 | // Define Events |
| gscuttari | 0:6a895c900427 | 40 | #define EVENT_POWER_ON 0 |
| gscuttari | 0:6a895c900427 | 41 | #define EVENT_SHORT_CIRCUIT 1 |
| gscuttari | 0:6a895c900427 | 42 | #define EVENT_OVER_TEMP 2 |
| gscuttari | 0:6a895c900427 | 43 | #define EVENT_START_BMS 3 |
| gscuttari | 0:6a895c900427 | 44 | #define EVENT_LOAD_DISCONNECTED 4 |
| gscuttari | 0:6a895c900427 | 45 | #define EVENT_LOAD_RECONNECTED 5 |
| gscuttari | 0:6a895c900427 | 46 | #define EVENT_CHARGER_DISCONNECTED 6 |
| gscuttari | 0:6a895c900427 | 47 | #define EVENT_CHARGER_RECONNECTED 7 |
| gscuttari | 0:6a895c900427 | 48 | #define EVENT_BATTERY_TOO_LOW 8 |
| gscuttari | 0:6a895c900427 | 49 | #define EVENT_BATTERY_DOWN 9 |
| gscuttari | 0:6a895c900427 | 50 | #define EVENT_BATTERY_IS_FULL 10 |
| gscuttari | 0:6a895c900427 | 51 | #define EVENT_BATTERY_IS_OK 11 |
| gscuttari | 0:6a895c900427 | 52 | #define EVENT_GOTO_RUN_FROM_RESTORE 12 |
| gscuttari | 0:6a895c900427 | 53 | |
| gscuttari | 0:6a895c900427 | 54 | /********************************** |
| gscuttari | 0:6a895c900427 | 55 | TALK and DONE |
| gscuttari | 0:6a895c900427 | 56 | **********************************/ |
| gscuttari | 0:6a895c900427 | 57 | #define TALK (SS_PIN = 0); // Chip Select |
| gscuttari | 0:6a895c900427 | 58 | #define DONE (SS_PIN = 1); // Chip Deselect |
| gscuttari | 0:6a895c900427 | 59 | |
| gscuttari | 0:6a895c900427 | 60 | #define SET_CAN_IN_HIGH_SPEED_MODE (RS = 0); // Set Can Bus in high speed mode |
| gscuttari | 0:6a895c900427 | 61 | #define SET_CAN_BUS_IN_LISTEN_MODE (RS = 1); // Set Can Bus in Listen Only Mode |
| gscuttari | 0:6a895c900427 | 62 | |
| gscuttari | 0:6a895c900427 | 63 | char VMON_DATA_WRITE[] = {0x00, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A , 0x1B, 0x1C, 0x1D, 0x1E, 0x1F}; |
| gscuttari | 0:6a895c900427 | 64 | int STATE_OF_BMS; |
| gscuttari | 1:9d8518740e5c | 65 | int STATE_OF_BMS_PREC; |
| gscuttari | 0:6a895c900427 | 66 | double VIM0; |
| gscuttari | 0:6a895c900427 | 67 | double VIM1; |
| gscuttari | 0:6a895c900427 | 68 | double VR; |
| gscuttari | 0:6a895c900427 | 69 | double Gim; |
| gscuttari | 0:6a895c900427 | 70 | double Vimz; |
| gscuttari | 0:6a895c900427 | 71 | double Vimon; |
| gscuttari | 0:6a895c900427 | 72 | double Isense; |
| gscuttari | 1:9d8518740e5c | 73 | double V_ref = 3.3f; |
| gscuttari | 0:6a895c900427 | 74 | double Rsense = 0.003f; |
| gscuttari | 0:6a895c900427 | 75 | bool schort_circuit_detection = false; |
| gscuttari | 0:6a895c900427 | 76 | double instant_current_detected; |
| gscuttari | 0:6a895c900427 | 77 | |
| gscuttari | 1:9d8518740e5c | 78 | float LOWVOLTAGEWARNING = 35.0; // Define low voltage warning 35 |
| gscuttari | 1:9d8518740e5c | 79 | float LOWVOLTAGECUTOFF = 34.0; // Define low voltage cut off |
| gscuttari | 1:9d8518740e5c | 80 | float HIVOLTAGESHUNT = 3.9; // Define high voltege limit for balancing |
| gscuttari | 0:6a895c900427 | 81 | float VOLTAGEALLOWANCE = 0.009; // Define the accuracy the balancing algorithm can balance it to. |
| gscuttari | 1:9d8518740e5c | 82 | float HIGHVOLTAGECUTOFF = 39.00; // Define high voltage cut off |
| gscuttari | 1:9d8518740e5c | 83 | float LOWVOLTAGEPOWERDOWN = 31.0; // Define low voltage to put BMS in POWER_DOWN_MODE |
| gscuttari | 1:9d8518740e5c | 84 | |
| gscuttari | 1:9d8518740e5c | 85 | int TOTALCELLS = 10; // Number Of cells |
| gscuttari | 0:6a895c900427 | 86 | |
| gscuttari | 0:6a895c900427 | 87 | |
| gscuttari | 0:6a895c900427 | 88 | float voltageHighest; |
| gscuttari | 0:6a895c900427 | 89 | float voltageLowest; |
| gscuttari | 0:6a895c900427 | 90 | int highestCellNumber; |
| gscuttari | 0:6a895c900427 | 91 | int lowestCellNumber; |
| gscuttari | 0:6a895c900427 | 92 | |
| gscuttari | 0:6a895c900427 | 93 | |
| gscuttari | 0:6a895c900427 | 94 | float cellVoltage[17]; |
| gscuttari | 0:6a895c900427 | 95 | float difference[17]; |
| gscuttari | 0:6a895c900427 | 96 | |
| gscuttari | 0:6a895c900427 | 97 | float voltageTotal; |
| gscuttari | 0:6a895c900427 | 98 | float voltageAverage; |
| gscuttari | 0:6a895c900427 | 99 | float temp_read = 0; |
| gscuttari | 0:6a895c900427 | 100 | float temp_min = -5; |
| gscuttari | 0:6a895c900427 | 101 | float temp_warning = 40; |
| gscuttari | 0:6a895c900427 | 102 | float temp_cutoff = 60; |
| gscuttari | 1:9d8518740e5c | 103 | float thr_val=0, thr_res=0, temperature=0, temperature_of_battery=0; |
| gscuttari | 0:6a895c900427 | 104 | unsigned char read_buf,read_buf2,read_fet, read_power, rdata; |
| gscuttari | 0:6a895c900427 | 105 | double gain_correction = 0; |
| gscuttari | 0:6a895c900427 | 106 | |
| gscuttari | 1:9d8518740e5c | 107 | //********************************************************************************************** |
| gscuttari | 0:6a895c900427 | 108 | // Status flags READ ONLY |
| gscuttari | 1:9d8518740e5c | 109 | bool DF_STATUS = false; // Mosfet OUT |
| gscuttari | 1:9d8518740e5c | 110 | bool CF_STATUS = false; // Mosfet CHARGER |
| gscuttari | 1:9d8518740e5c | 111 | bool PSW_STATUS = false; // Power safe mode |
| gscuttari | 1:9d8518740e5c | 112 | bool INT_STATUS = false; // INT bit indicates the /INTO pin output status. |
| gscuttari | 0:6a895c900427 | 113 | bool RPSL_STATUS = false; // RPSL bit indicates interrupt status of charger disconnecting interrupt if charge over-current detected. |
| gscuttari | 0:6a895c900427 | 114 | bool RPSH_STATUS = false; // RPSH bit indicates interrupt status of charger disconnecting interrupt if the status is power down. |
| gscuttari | 1:9d8518740e5c | 115 | bool RRS_STATUS = false; // RRS bit indicates interrupt status of load disconnecting interrupt |
| gscuttari | 1:9d8518740e5c | 116 | bool RSC_STATUS = false; // RSC bit indicates interrupt status of short current detecting interrupt. |
| gscuttari | 1:9d8518740e5c | 117 | //*********************************************************************************************** |
| gscuttari | 0:6a895c900427 | 118 | |
| gscuttari | 0:6a895c900427 | 119 | |
| gscuttari | 0:6a895c900427 | 120 | // status flags of power status |
| gscuttari | 0:6a895c900427 | 121 | bool PSV_STATUS = false; |
| gscuttari | 0:6a895c900427 | 122 | bool PDWN_STATUS = false; |
| gscuttari | 0:6a895c900427 | 123 | bool PUPIN_STATUS = false; |
| gscuttari | 0:6a895c900427 | 124 | |
| gscuttari | 0:6a895c900427 | 125 | |
| gscuttari | 0:6a895c900427 | 126 | |
| gscuttari | 0:6a895c900427 | 127 | // Setup ML5238 |
| gscuttari | 0:6a895c900427 | 128 | void START_UP_ML5238(); |
| gscuttari | 0:6a895c900427 | 129 | bool SET_ENABLE = true; |
| gscuttari | 0:6a895c900427 | 130 | bool SET_DISABLE = false; |
| gscuttari | 0:6a895c900427 | 131 | bool SET_RUN = true; |
| gscuttari | 0:6a895c900427 | 132 | bool SET_STOP = false; |
| gscuttari | 0:6a895c900427 | 133 | |
| gscuttari | 0:6a895c900427 | 134 | |
| gscuttari | 0:6a895c900427 | 135 | void handle_interrupt(); |
| gscuttari | 0:6a895c900427 | 136 | void read_instant_current(); |
| gscuttari | 1:9d8518740e5c | 137 | void read_temperature_of_battery(); |
| gscuttari | 0:6a895c900427 | 138 | void events_of_bms(); |
| gscuttari | 0:6a895c900427 | 139 | void actions(); |
| gscuttari | 0:6a895c900427 | 140 | float vTotal(); |
| gscuttari | 0:6a895c900427 | 141 | int highestCell(); |
| gscuttari | 0:6a895c900427 | 142 | int lowestCell(); |
| gscuttari | 0:6a895c900427 | 143 | float average_voltage(); |
| gscuttari | 1:9d8518740e5c | 144 | void powerdown(); |
| gscuttari | 0:6a895c900427 | 145 | |
| gscuttari | 0:6a895c900427 | 146 | |
| gscuttari | 0:6a895c900427 | 147 | |
| gscuttari | 0:6a895c900427 | 148 | typedef struct _Register_Map_structure { |
| gscuttari | 0:6a895c900427 | 149 | float Cell_1_voltage; |
| gscuttari | 0:6a895c900427 | 150 | float Cell_2_voltage; |
| gscuttari | 0:6a895c900427 | 151 | float Cell_3_voltage; |
| gscuttari | 0:6a895c900427 | 152 | float Cell_4_voltage; |
| gscuttari | 0:6a895c900427 | 153 | float Cell_5_voltage; |
| gscuttari | 0:6a895c900427 | 154 | float Cell_6_voltage; |
| gscuttari | 0:6a895c900427 | 155 | float Cell_7_voltage; |
| gscuttari | 0:6a895c900427 | 156 | float Cell_8_voltage; |
| gscuttari | 0:6a895c900427 | 157 | float Cell_9_voltage; |
| gscuttari | 0:6a895c900427 | 158 | float Cell_10_voltage; |
| gscuttari | 0:6a895c900427 | 159 | float Cell_11_voltage; |
| gscuttari | 0:6a895c900427 | 160 | float Cell_12_voltage; |
| gscuttari | 0:6a895c900427 | 161 | float Cell_13_voltage; |
| gscuttari | 0:6a895c900427 | 162 | float Cell_14_voltage; |
| gscuttari | 0:6a895c900427 | 163 | float Cell_15_voltage; |
| gscuttari | 0:6a895c900427 | 164 | float Cell_16_voltage; |
| gscuttari | 0:6a895c900427 | 165 | char Bms_uptime[32]; |
| gscuttari | 0:6a895c900427 | 166 | uint32_t Estimated_time_left; |
| gscuttari | 0:6a895c900427 | 167 | float Battery_voltage; |
| gscuttari | 0:6a895c900427 | 168 | float Battery_current; |
| gscuttari | 0:6a895c900427 | 169 | float Min_cell_voltage; |
| gscuttari | 0:6a895c900427 | 170 | float Max_cell_voltage; |
| gscuttari | 0:6a895c900427 | 171 | float External_temp_sensor_1; |
| gscuttari | 0:6a895c900427 | 172 | float External_temp_sensor_2; |
| gscuttari | 0:6a895c900427 | 173 | uint16_t Distance_left; |
| gscuttari | 0:6a895c900427 | 174 | uint32_t State_of_charge; |
| gscuttari | 0:6a895c900427 | 175 | float On_board_temperature_sensor; |
| gscuttari | 0:6a895c900427 | 176 | uint16_t Battery_status; |
| gscuttari | 0:6a895c900427 | 177 | float Voltageaverage; |
| gscuttari | 0:6a895c900427 | 178 | float InstantPower; |
| gscuttari | 0:6a895c900427 | 179 | float Speed; |
| gscuttari | 0:6a895c900427 | 180 | } Register_Map_structure; |
| gscuttari | 0:6a895c900427 | 181 | Register_Map_structure Register_Map; |
| gscuttari | 0:6a895c900427 | 182 | |
| gscuttari | 0:6a895c900427 | 183 | |
| gscuttari | 0:6a895c900427 | 184 | |
| gscuttari | 0:6a895c900427 | 185 | #endif /*_BMS_H_*/ |