This is a library for the MAX17055 Li+ Battery Fuel Gauge.

Dependents:   Low_Power_Long_Distance_IR_Vision_Robot MAX17055_EZconfig MAX17055_EZconfig_Sample Low_Power_Long_Distance_IR_Vision_Robot

Fork of max17055 by Maxim Integrated

Committer:
fneirab
Date:
Tue Oct 09 20:28:41 2018 +0000
Revision:
17:7447aaa9c121
Parent:
16:839186d0693a
Child:
19:20590e00feab
New sample code Updated, new functions for REP cap and specific register reads and clean up some of the old functions.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fneirab 9:f29d5e49b190 1 /*******************************************************************************
fneirab 9:f29d5e49b190 2 * Copyright (C) 2018 Maxim Integrated Products, Inc., All Rights Reserved.
fneirab 4:a4d6ae2182c2 3 *
fneirab 4:a4d6ae2182c2 4 * Permission is hereby granted, free of charge, to any person obtaining a
fneirab 4:a4d6ae2182c2 5 * copy of this software and associated documentation files (the "Software"),
fneirab 4:a4d6ae2182c2 6 * to deal in the Software without restriction, including without limitation
fneirab 4:a4d6ae2182c2 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
fneirab 4:a4d6ae2182c2 8 * and/or sell copies of the Software, and to permit persons to whom the
fneirab 4:a4d6ae2182c2 9 * Software is furnished to do so, subject to the following conditions:
fneirab 4:a4d6ae2182c2 10 *
fneirab 4:a4d6ae2182c2 11 * The above copyright notice and this permission notice shall be included
fneirab 4:a4d6ae2182c2 12 * in all copies or substantial portions of the Software.
fneirab 4:a4d6ae2182c2 13 *
fneirab 4:a4d6ae2182c2 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
fneirab 4:a4d6ae2182c2 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
fneirab 4:a4d6ae2182c2 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
fneirab 4:a4d6ae2182c2 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
fneirab 4:a4d6ae2182c2 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
fneirab 4:a4d6ae2182c2 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
fneirab 4:a4d6ae2182c2 20 * OTHER DEALINGS IN THE SOFTWARE.
fneirab 4:a4d6ae2182c2 21 *
fneirab 4:a4d6ae2182c2 22 * Except as contained in this notice, the name of Maxim Integrated
fneirab 4:a4d6ae2182c2 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
fneirab 4:a4d6ae2182c2 24 * Products, Inc. Branding Policy.
fneirab 4:a4d6ae2182c2 25 *
fneirab 4:a4d6ae2182c2 26 * The mere transfer of this software does not imply any licenses
fneirab 4:a4d6ae2182c2 27 * of trade secrets, proprietary technology, copyrights, patents,
fneirab 4:a4d6ae2182c2 28 * trademarks, maskwork rights, or any other form of intellectual
fneirab 4:a4d6ae2182c2 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
fneirab 4:a4d6ae2182c2 30 * ownership rights.
fneirab 9:f29d5e49b190 31 *******************************************************************************
fneirab 9:f29d5e49b190 32 */
fneirab 0:80c39eb8f3ba 33
fneirab 0:80c39eb8f3ba 34 #ifndef __MAX17055_H_
fneirab 0:80c39eb8f3ba 35 #define __MAX17055_H_
fneirab 0:80c39eb8f3ba 36
fneirab 0:80c39eb8f3ba 37 // Include
fneirab 0:80c39eb8f3ba 38 #include "mbed.h"
fneirab 0:80c39eb8f3ba 39
fneirab 2:ff7db397b70f 40 /* STATUS register bits */
fneirab 2:ff7db397b70f 41 #define MAX17055_STATUS_BST (1 << 3)
fneirab 2:ff7db397b70f 42 #define MAX17055_STATUS_POR (1 << 1)
fneirab 2:ff7db397b70f 43
fneirab 5:a18a189588dc 44 /// Model loading options
fneirab 9:f29d5e49b190 45 #define MODEL_LOADING_OPTION1 1 //EZ Config
fneirab 13:fc91b283e689 46
fneirab 17:7447aaa9c121 47 //Remove this and leave it
fneirab 0:80c39eb8f3ba 48
fneirab 0:80c39eb8f3ba 49 /**
fneirab 11:bdbd3104995b 50 * @brief MBED Library for the MAX17055\n
fneirab 11:bdbd3104995b 51 * The MAX17055 is a low 7μA operating current fuel gauge which \n
fneirab 17:7447aaa9c121 52 * implements Maxim ModelGauge™ m5 EZ algorithm. \n
fneirab 11:bdbd3104995b 53 * <a href="https://www.maximintegrated.com/en/design/partners-and-technology/design-technology/modelgauge-battery-fuel-gauge-technology.html">ModelGauge</a>
fneirab 11:bdbd3104995b 54 * m5 EZ makes fuel gauge implementation easy by eliminating \n
fneirab 11:bdbd3104995b 55 * battery characterization requirements and simplifying host \n
fneirab 11:bdbd3104995b 56 * software interaction. The ModelGauge m5 EZ robust algorithm \n
fneirab 11:bdbd3104995b 57 * provides tolerance against battery diversity for most lithium \n
fneirab 17:7447aaa9c121 58 * batteries and applications. Communication is through a \n
fneirab 17:7447aaa9c121 59 * I2C interface. The MAX17055 comes as part of the \n
fneirab 17:7447aaa9c121 60 * MAX32620FTHR MBED enable development board.\n
fneirab 11:bdbd3104995b 61 * \n
fneirab 11:bdbd3104995b 62 * Visit the product page for more information:
fneirab 11:bdbd3104995b 63 * <a href="https://www.maximintegrated.com/MAX17055.html">MAX17055 Product Page</a>\n
fneirab 11:bdbd3104995b 64 * <a href="https://www.maximintegrated.com/MAX17055.pdf">MAX17055 Data Sheet</a>\n
fneirab 11:bdbd3104995b 65 * <a href="https://www.maximintegrated.com/MAX32620FTHR.html">MAX32620FTHR Product Page</a>\n
fneirab 11:bdbd3104995b 66 * <a href="https://www.maximintegrated.com/MAX32620FTHR.pdf">MAX32620FTHR Data Sheet</a>\n
fneirab 17:7447aaa9c121 67 *
fneirab 0:80c39eb8f3ba 68 * @code
fneirab 0:80c39eb8f3ba 69 * #include "mbed.h"
fneirab 17:7447aaa9c121 70 * #include "max17055.h"
fneirab 0:80c39eb8f3ba 71 *
fneirab 0:80c39eb8f3ba 72 *
fneirab 17:7447aaa9c121 73 * //LED indication
fneirab 17:7447aaa9c121 74 * DigitalOut rled(LED1);
fneirab 17:7447aaa9c121 75 *
fneirab 17:7447aaa9c121 76 * //I2C communications
fneirab 17:7447aaa9c121 77 * I2C i2cBus(P5_7, P6_0);
fneirab 17:7447aaa9c121 78 *
fneirab 17:7447aaa9c121 79 * //Fuel Gauge
fneirab 17:7447aaa9c121 80 * MAX17055 fuelGauge(i2cBus);
fneirab 17:7447aaa9c121 81 * MAX17055::platform_data design_param;
fneirab 17:7447aaa9c121 82 * MAX17055::saved_FG_params_t saved_param;
fneirab 17:7447aaa9c121 83 *
fneirab 17:7447aaa9c121 84 * //MAX77650 PMIC
fneirab 17:7447aaa9c121 85 * #define POWER_HOLD_ON 1
fneirab 17:7447aaa9c121 86 * #define POWER_HOLD_OFF 0
fneirab 17:7447aaa9c121 87 *
fneirab 17:7447aaa9c121 88 * DigitalOut pw_Hold(P2_2, POWER_HOLD_ON); //To enable battery operation from the PMIC
fneirab 17:7447aaa9c121 89 *
fneirab 17:7447aaa9c121 90 * //Battery Parameters Storage from the Fuel Gauge MAX17055
fneirab 17:7447aaa9c121 91 * union max17055_u {
fneirab 17:7447aaa9c121 92 * struct battery {
fneirab 17:7447aaa9c121 93 * uint8_t avg_soc_FG; // in Battery Percent
fneirab 17:7447aaa9c121 94 * float tte_FG; // in seconds
fneirab 17:7447aaa9c121 95 * float ttf_FG; // in seconds
fneirab 17:7447aaa9c121 96 * int avg_vcell_FG; // in 78.125uV per bit
fneirab 17:7447aaa9c121 97 * float avg_curr_FG; // in uAmps
fneirab 17:7447aaa9c121 98 * int rep_cap; // in mAh
fneirab 17:7447aaa9c121 99 * int rep_SOC; // in %
fneirab 17:7447aaa9c121 100 * } battery;
fneirab 17:7447aaa9c121 101 * } max17055_u;
fneirab 17:7447aaa9c121 102 *
fneirab 17:7447aaa9c121 103 *
fneirab 17:7447aaa9c121 104 * int main(void)
fneirab 17:7447aaa9c121 105 * {
fneirab 17:7447aaa9c121 106 * rled = true;
fneirab 17:7447aaa9c121 107 * //These are the calculated paramters for rsense 5mOhm foun in the MAX32620FTHR and a 350mAh Li+ Cell.
fneirab 17:7447aaa9c121 108 * design_param.designcap = 0x015E; //Design Battery Capacity mAh thic can change depending on the batteries implemented see battery data sheet for details.
fneirab 17:7447aaa9c121 109 * design_param.ichgterm = 0x0070; // Charge Termination Current for the Battery This is specified by the manufacturer.
fneirab 17:7447aaa9c121 110 * design_param.vempty = 0x9600; // Battery Empty Voltage This is sepecified by design, but manufacturer has a min Empy voltage specification.
fneirab 17:7447aaa9c121 111 * design_param.vcharge = 4200; // Battery Charge Voltage can be obtained from MAX77650 configuration
fneirab 17:7447aaa9c121 112 * design_param.rsense = 5; //5mOhms for MAX32620, keep in mind the MAX17055EVKIT has a 10mOhm resistor. This is a design specific value. Used for calculation results.
fneirab 0:80c39eb8f3ba 113 *
fneirab 17:7447aaa9c121 114 * // //This are the parameters for an rsense = 10mOhm similar to the one found in the MAX17055EVKIT and a 350mAh Li+ Cell.
fneirab 17:7447aaa9c121 115 * // design_param.designcap = 0x02BC; //Design Battery Capacity mAh
fneirab 17:7447aaa9c121 116 * // design_param.ichgterm = 0x00E0; // Charge Termination Current for the Battery
fneirab 17:7447aaa9c121 117 * // design_param.vempty = 0x9600; // Battery Empty Voltage
fneirab 17:7447aaa9c121 118 * // design_param.vcharge = 4200; // Battery Charge Voltage (Specified by manufacurer)
fneirab 17:7447aaa9c121 119 * // design_param.rsense = 10; //10mOhms
fneirab 0:80c39eb8f3ba 120 *
fneirab 17:7447aaa9c121 121 * //Saved Parameters
fneirab 17:7447aaa9c121 122 * //saved_param.cycles = 0; //This value is used for the save parameters function
fneirab 17:7447aaa9c121 123 *
fneirab 17:7447aaa9c121 124 * status = fuelGauge.init(design_param);
fneirab 17:7447aaa9c121 125 * // printf("Init FuelGauge Function Status= %X \r\n",status);
fneirab 17:7447aaa9c121 126 *
fneirab 17:7447aaa9c121 127 * if (status == 0)
fneirab 17:7447aaa9c121 128 * fuelGauge.save_Params(saved_param);
fneirab 17:7447aaa9c121 129 *
fneirab 17:7447aaa9c121 130 * while (1) {
fneirab 17:7447aaa9c121 131 * //This code is an example to ilustrate the performance or the Fuel Gauge. This can change with the design requirements. Use this as a way to troubleshoot the FuelGauge.
fneirab 17:7447aaa9c121 132 * rled = !rled;
fneirab 17:7447aaa9c121 133 *
fneirab 17:7447aaa9c121 134 * max17055_u.battery.avg_vcell_FG = fuelGauge.get_avgVcell();
fneirab 17:7447aaa9c121 135 * max17055_u.battery.avg_curr_FG = fuelGauge.get_AvgCurrent(design_param);
fneirab 17:7447aaa9c121 136 * max17055_u.battery.rep_cap = fuelGauge.get_battCAP(design_param);
fneirab 17:7447aaa9c121 137 * max17055_u.battery.rep_SOC = fuelGauge.get_SOC();
fneirab 17:7447aaa9c121 138 *
fneirab 17:7447aaa9c121 139 * //This code works with Arduino Serial Plotter to visualize data
fneirab 17:7447aaa9c121 140 * printf("%f " ,(max17055_u.battery.avg_vcell_FG/1000000.0));
fneirab 17:7447aaa9c121 141 * printf("%f " ,max17055_u.battery.avg_curr_FG);
fneirab 17:7447aaa9c121 142 * printf("%d " ,max17055_u.battery.rep_cap);
fneirab 17:7447aaa9c121 143 * printf("%d " ,max17055_u.battery.rep_SOC);
fneirab 17:7447aaa9c121 144 * printf("\n");
fneirab 17:7447aaa9c121 145 * //printf(" ");
fneirab 17:7447aaa9c121 146 * wait(1);
fneirab 17:7447aaa9c121 147 * }
fneirab 0:80c39eb8f3ba 148 * }
fneirab 0:80c39eb8f3ba 149 * @endcode
fneirab 0:80c39eb8f3ba 150 */
fneirab 0:80c39eb8f3ba 151
fneirab 11:bdbd3104995b 152
fneirab 17:7447aaa9c121 153
fneirab 11:bdbd3104995b 154 /*-------------------------------------------------------------------------*//**
fneirab 11:bdbd3104995b 155 * MAX17055 Class
fneirab 11:bdbd3104995b 156 * @brief Class for MAX17055 Battery Fuel Gauge
fneirab 11:bdbd3104995b 157 * - Generic API for Implementing the Battery Fuel Gauge
fneirab 0:80c39eb8f3ba 158 */
fneirab 0:80c39eb8f3ba 159 class MAX17055
fneirab 0:80c39eb8f3ba 160 {
fneirab 0:80c39eb8f3ba 161
fneirab 0:80c39eb8f3ba 162 public:
fneirab 0:80c39eb8f3ba 163
fneirab 0:80c39eb8f3ba 164 ///8-bit write address
fneirab 0:80c39eb8f3ba 165 static const uint8_t I2C_W_ADRS = 0x6C;
fneirab 0:80c39eb8f3ba 166 ///8-bit read address
fneirab 0:80c39eb8f3ba 167 static const uint8_t I2C_R_ADRS = 0x6D;
fneirab 6:5ced10109ebf 168
fneirab 0:80c39eb8f3ba 169 /**
fneirab 11:bdbd3104995b 170 * @brief Register Addresses for the MAX17055
fneirab 11:bdbd3104995b 171 * @details Enumerated register addresses
fneirab 0:80c39eb8f3ba 172 */
fneirab 17:7447aaa9c121 173 enum Registers_e {
fneirab 11:bdbd3104995b 174 STATUS_REG = 0x00, /*!< 0x00 default value = 0x0002 */
fneirab 11:bdbd3104995b 175 VALRTTH_REG = 0x01, /*!< 0x01 */
fneirab 17:7447aaa9c121 176 TALRTTH_REG = 0x02, /*!< 0x02 */
fneirab 17:7447aaa9c121 177 SALRTTH_REG = 0x03, /*!< 0x03 */
fneirab 12:519a18fc3b28 178 ATRATE_REG = 0x04, /*!< 0x04 write negative 2s comp of a 16-bit theoretical load */
fneirab 17:7447aaa9c121 179 REPCAP_REG = 0x05, /*!< 0x05 */
fneirab 11:bdbd3104995b 180 REPSOC_REG = 0x06, /*!< 0x06 */
fneirab 11:bdbd3104995b 181 TEMP_REG = 0x08, /*!< 0x08 */
fneirab 11:bdbd3104995b 182 VCELL_REG = 0x09, /*!< 0x09 */
fneirab 17:7447aaa9c121 183 CURRENT_REG = 0x0A, /*!< 0x0A */
fneirab 11:bdbd3104995b 184 AVGCURRENT_REG = 0x0B, /*!< 0x0B */
fneirab 11:bdbd3104995b 185 MIXSOC_REG = 0x0D, /*!< 0x0D */
fneirab 11:bdbd3104995b 186 AVSOC_REG = 0x0E, /*!< 0x0E */
fneirab 11:bdbd3104995b 187 MIXCAP_REG = 0x0F, /*!< 0x0F */
fneirab 7:479a36909ced 188
fneirab 11:bdbd3104995b 189 FULLCAPREP_REG = 0x10, /*!< 0x10 */
fneirab 11:bdbd3104995b 190 TTE_REG = 0X11, /*!< 0x11 */
fneirab 11:bdbd3104995b 191 QRTABLE00_REG = 0x12, /*!< 0x12 */
fneirab 11:bdbd3104995b 192 FULLSOCTHR_REG = 0x13, /*!< 0x13 */
fneirab 11:bdbd3104995b 193 CYCLES_REG = 0x17, /*!< 0x17 */
fneirab 11:bdbd3104995b 194 DESIGNCAP_REG = 0x18, /*!< 0x18 */
fneirab 11:bdbd3104995b 195 AVGVCELL_REG = 0x19, /*!< 0x19 */
fneirab 11:bdbd3104995b 196 MAXMINVOLT_REG = 0x1B, /*!< 0x1B */
fneirab 11:bdbd3104995b 197 CONFIG_REG = 0x1D, /*!< 0x1D default = 0x2210 */
fneirab 11:bdbd3104995b 198 ICHGTERM_REG = 0x1E, /*!< 0x1E */
fneirab 0:80c39eb8f3ba 199
fneirab 11:bdbd3104995b 200 TTF_REG = 0x20, /*!< 0x20 */
fneirab 11:bdbd3104995b 201 VERSION_REG = 0x21, /*!< 0x21 */
fneirab 11:bdbd3104995b 202 QRTABLE10_REG = 0x22, /*!< 0x22 */
fneirab 11:bdbd3104995b 203 FULLCAPNOM_REG = 0x23, /*!< 0x23 */
fneirab 11:bdbd3104995b 204 LEARNCFG_REG = 0x28, /*!< 0x28 */
fneirab 11:bdbd3104995b 205 RELAXCFG_REG = 0x2A, /*!< 0x2A */
fneirab 11:bdbd3104995b 206 TGAIN_REG = 0x2C, /*!< 0x2C */
fneirab 11:bdbd3104995b 207 TOFF_REG = 0x2D, /*!< 0x2D */
fneirab 11:bdbd3104995b 208
fneirab 11:bdbd3104995b 209 QRTABLE20_REG = 0x32, /*!< 0x32 */
fneirab 11:bdbd3104995b 210 RCOMP0_REG = 0x38, /*!< 0x38 */
fneirab 11:bdbd3104995b 211 TEMPCO_REG = 0x39, /*!< 0x39 */
fneirab 11:bdbd3104995b 212 VEMPTY_REG = 0x3A, /*!< 0x39 */
fneirab 11:bdbd3104995b 213 FSTAT_REG = 0x3D, /*!< 0x39 */
fneirab 7:479a36909ced 214
fneirab 11:bdbd3104995b 215 QRTABLE30_REG = 0x42, /*!< 0x39 */
fneirab 11:bdbd3104995b 216 DQACC_REG = 0x45, /*!< 0x39 */
fneirab 11:bdbd3104995b 217 DPACC_REG = 0x46, /*!< 0x39 */
fneirab 11:bdbd3104995b 218 VFSOC0_REG = 0x48, /*!< 0x39 */
fneirab 11:bdbd3104995b 219 QH0_REG = 0x4C, /*!< 0x39 */
fneirab 11:bdbd3104995b 220 QH_REG = 0x4D, /*!< 0x39 */
fneirab 7:479a36909ced 221
fneirab 11:bdbd3104995b 222 VFSOC0_QH0_LOCK_REG = 0x60, /*!< 0x39 */
fneirab 11:bdbd3104995b 223 LOCK1_REG = 0x62, /*!< 0x39 */
fneirab 11:bdbd3104995b 224 LOCK2_REG = 0x63, /*!< 0x39 */
fneirab 7:479a36909ced 225
fneirab 11:bdbd3104995b 226 MODELDATA_START_REG = 0x80, /*!< 0x39 */
fneirab 7:479a36909ced 227
fneirab 11:bdbd3104995b 228 IALRTTH_REG = 0xB4, /*!< 0x39 */
fneirab 11:bdbd3104995b 229 CURVE_REG = 0xB9, /*!< 0x39 */
fneirab 12:519a18fc3b28 230 HIBCFG_REG = 0xBA, /*!< 0x39 default = 0x870C (0x890C)*/
fneirab 11:bdbd3104995b 231 CONFIG2_REG = 0xBB, /*!< 0xBB default = 0x3658 */
fneirab 7:479a36909ced 232
fneirab 12:519a18fc3b28 233 MODELCFG_REG = 0xDB, /*!< 0xDB */
fneirab 12:519a18fc3b28 234 ATTTE_REG = 0xDD, /*!< 0xDD */
fneirab 12:519a18fc3b28 235 ATAVSOC_REG = 0xDE, /*!< 0xDE */
fneirab 12:519a18fc3b28 236 ATAVCAP_REG = 0xDF, /*!< 0xDF */
fneirab 0:80c39eb8f3ba 237
fneirab 11:bdbd3104995b 238 OCV_REG = 0xFB, /*!< 0x39 */
fneirab 11:bdbd3104995b 239 VFSOC_REG = 0xFF /*!< 0x39 */
fneirab 11:bdbd3104995b 240 };
fneirab 17:7447aaa9c121 241
fneirab 7:479a36909ced 242 /**
fneirab 12:519a18fc3b28 243 * @brief Saved Platform Data for Fuel Gauge Model
fneirab 12:519a18fc3b28 244 * @details Struct with fuel Gauge Platform Data for Fuel Gauge Model based on the final design.
fneirab 11:bdbd3104995b 245 */
fneirab 17:7447aaa9c121 246 struct platform_data { //to clarify if Part of the class
fneirab 11:bdbd3104995b 247 uint16_t designcap;/*!< struct value 1 */
fneirab 11:bdbd3104995b 248 uint16_t ichgterm; /*!< struct value 2 */
fneirab 11:bdbd3104995b 249 uint16_t vempty; /*!< struct value 3 */
fneirab 11:bdbd3104995b 250 int vcharge; /*!< struct value 1 */
fneirab 7:479a36909ced 251
fneirab 7:479a36909ced 252 /**
fneirab 7:479a36909ced 253 * rsense in miliOhms.
fneirab 7:479a36909ced 254 * default 10 (if rsense = 0) as it is the recommended value by
fneirab 7:479a36909ced 255 * the datasheet although it can be changed by board designers.
fneirab 17:7447aaa9c121 256 * MAX32620FTHR has a 5mOhm sense resitor installed.
fneirab 7:479a36909ced 257 */
fneirab 17:7447aaa9c121 258 unsigned int rsense;
fneirab 17:7447aaa9c121 259 } ;
fneirab 17:7447aaa9c121 260
fneirab 7:479a36909ced 261 /**
fneirab 11:bdbd3104995b 262 * @brief Saved Fuel Gauge Parameters
fneirab 11:bdbd3104995b 263 * @details It is recommended to save the learned capacity parameters
fneirab 11:bdbd3104995b 264 * every time bit 2 of the Cycles register toggles (so that it
fneirab 11:bdbd3104995b 265 * is saved every 64% change in the battery) so that if power is
fneirab 11:bdbd3104995b 266 * lost the values can easily be restored.
fneirab 11:bdbd3104995b 267 */
fneirab 17:7447aaa9c121 268 struct saved_FG_params_t {
fneirab 11:bdbd3104995b 269 int rcomp0; /**< The RComp0 is the characterization information critical to computing the open-circuit voltage of a cell under loaded conditions. */
fneirab 11:bdbd3104995b 270 int temp_co; /**< The TempCo value is the temperature compensation information based on the RComp0 value*/
fneirab 11:bdbd3104995b 271 int full_cap_rep; /**< The full capacity in relation with RepCap for reporting to the GUI. A new full-capacity value is calculated at the end of every charge cycle in the application. */
fneirab 11:bdbd3104995b 272 int cycles; /**< The Cycles value maintains a total count of the number of charge/discharge cycles of the cell that have occurred */
fneirab 11:bdbd3104995b 273 int full_cap_nom; /**< This is the calculated full capacity of the cell, not including temperature and empty compensation. A new full-capacity nominal value
fneirab 11:bdbd3104995b 274 is calculated each time a cell relaxation event is detected. This values is used to generate other outputs of the ModelGauge m5 algorithm. */
fneirab 17:7447aaa9c121 275 } ;
fneirab 9:f29d5e49b190 276
fneirab 0:80c39eb8f3ba 277 /**
fneirab 0:80c39eb8f3ba 278 * @brief max17055 Constructor
fneirab 0:80c39eb8f3ba 279 */
fneirab 0:80c39eb8f3ba 280 MAX17055(I2C &i2c);
fneirab 0:80c39eb8f3ba 281
fneirab 0:80c39eb8f3ba 282 /**
fneirab 0:80c39eb8f3ba 283 * @brief Fuel Gauge Destructor
fneirab 0:80c39eb8f3ba 284 */
fneirab 0:80c39eb8f3ba 285 ~MAX17055();
fneirab 17:7447aaa9c121 286
fneirab 5:a18a189588dc 287 /**
fneirab 11:bdbd3104995b 288 * @brief Poll Flag clear Function.
fneirab 11:bdbd3104995b 289 */
fneirab 7:479a36909ced 290 int poll_flag_clear(Registers_e reg_addr, int mask, int timeout);
fneirab 5:a18a189588dc 291
fneirab 11:bdbd3104995b 292 /**
fneirab 11:bdbd3104995b 293 * @brief Check POR function
fneirab 11:bdbd3104995b 294 */
fneirab 11:bdbd3104995b 295 int check_POR_func();
fneirab 9:f29d5e49b190 296
fneirab 9:f29d5e49b190 297 /**
fneirab 11:bdbd3104995b 298 * @brief clear POR bit function
fneirab 11:bdbd3104995b 299 */
fneirab 9:f29d5e49b190 300 int clear_POR_bit();
fneirab 4:a4d6ae2182c2 301
fneirab 2:ff7db397b70f 302 /**
fneirab 12:519a18fc3b28 303 * @brief Write and Verify a MAX17055 register
fneirab 11:bdbd3104995b 304 */
fneirab 2:ff7db397b70f 305 int write_and_verify_reg(Registers_e reg_addr, uint16_t reg_data);
fneirab 4:a4d6ae2182c2 306
fneirab 2:ff7db397b70f 307 /**
fneirab 11:bdbd3104995b 308 * @brief Initialization Function for MAX17055.
fneirab 11:bdbd3104995b 309 */
fneirab 7:479a36909ced 310 int init(platform_data des_data);
fneirab 4:a4d6ae2182c2 311
fneirab 3:f77a8345b0e3 312 /**
fneirab 12:519a18fc3b28 313 * @brief Get Temperature Function from the MAX17055 TEMP register.
fneirab 11:bdbd3104995b 314 */
fneirab 7:479a36909ced 315 int get_temperature();
fneirab 4:a4d6ae2182c2 316
fneirab 3:f77a8345b0e3 317 /**
fneirab 12:519a18fc3b28 318 * @brief Forced Exit Hibernate Mode Function for MAX17055
fneirab 11:bdbd3104995b 319 */
fneirab 17:7447aaa9c121 320 uint16_t forcedExitHiberMode();// Hibernate spelling
fneirab 17:7447aaa9c121 321
fneirab 7:479a36909ced 322 /**
fneirab 14:519754351400 323 * @brief EZ Config function
fneirab 11:bdbd3104995b 324 */
fneirab 13:fc91b283e689 325 uint16_t EZconfig(platform_data des_data);
fneirab 17:7447aaa9c121 326
fneirab 17:7447aaa9c121 327 /**
fneirab 17:7447aaa9c121 328 * @brief Get reported Battery Capacity Function from MAX17055 Fuel Gauge
fneirab 17:7447aaa9c121 329 */
fneirab 17:7447aaa9c121 330 int get_battCAP(platform_data des_data);
fneirab 17:7447aaa9c121 331
fneirab 7:479a36909ced 332 /**
fneirab 11:bdbd3104995b 333 * @brief Get reported State Of Charge(SOC) Function from MAX17055 Fuel Gauge
fneirab 11:bdbd3104995b 334 */
fneirab 7:479a36909ced 335 int get_SOC();
fneirab 8:ca8765c30ed2 336
fneirab 11:bdbd3104995b 337 /**
fneirab 12:519a18fc3b28 338 * @brief Get at rate Average State Of Charge(SOC) Function from MAX17055 Fuel Gauge.
fneirab 11:bdbd3104995b 339 */
fneirab 12:519a18fc3b28 340 int get_atAvSOC();
fneirab 8:ca8765c30ed2 341
fneirab 8:ca8765c30ed2 342 /**
fneirab 11:bdbd3104995b 343 * @brief Get the Time to Empty(TTE) Function form MAX17055 Fuel Gauge.
fneirab 17:7447aaa9c121 344 */
fneirab 12:519a18fc3b28 345 float get_TTE();
fneirab 7:479a36909ced 346
fneirab 7:479a36909ced 347 /**
fneirab 11:bdbd3104995b 348 * @brief Get the at Time to Empty(atTTE) value Function for MAX17055 Fuel Gauge.
fneirab 17:7447aaa9c121 349 */
fneirab 12:519a18fc3b28 350 float get_atTTE();
fneirab 9:f29d5e49b190 351
fneirab 9:f29d5e49b190 352 /**
fneirab 11:bdbd3104995b 353 * @brief Get mix State Of Charge(SOC) Function for MAX17055 Fuel Gauge.
fneirab 11:bdbd3104995b 354 */
fneirab 9:f29d5e49b190 355 int get_mixSOC();
fneirab 8:ca8765c30ed2 356
fneirab 8:ca8765c30ed2 357 /**
fneirab 11:bdbd3104995b 358 * @brief Get the Time to Full(TTE) values Function for MAX17055 Fuel Gauge.
fneirab 11:bdbd3104995b 359 */
fneirab 12:519a18fc3b28 360 float get_TTF();
fneirab 17:7447aaa9c121 361
fneirab 11:bdbd3104995b 362 /**
fneirab 11:bdbd3104995b 363 * @brief Get voltage of the cell Function for MAX17055 Fuel Gauge.
fneirab 11:bdbd3104995b 364 */
fneirab 11:bdbd3104995b 365 int get_Vcell();
fneirab 7:479a36909ced 366
fneirab 7:479a36909ced 367 /**
fneirab 17:7447aaa9c121 368 * @brief Get average voltage of the cell Function for MAX17055 Fuel Gauge.
fneirab 17:7447aaa9c121 369 */
fneirab 17:7447aaa9c121 370 int get_avgVcell();
fneirab 17:7447aaa9c121 371
fneirab 17:7447aaa9c121 372 /**
fneirab 11:bdbd3104995b 373 * @brief Get current Function for MAX17055 Fuel Gauge.
fneirab 11:bdbd3104995b 374 */
fneirab 17:7447aaa9c121 375 float get_Current(platform_data des_data);
fneirab 17:7447aaa9c121 376
fneirab 7:479a36909ced 377 /**
fneirab 11:bdbd3104995b 378 * @brief Get average current Function for MAX17055 Fuel Gauge.
fneirab 17:7447aaa9c121 379 */
fneirab 17:7447aaa9c121 380 float get_AvgCurrent(platform_data des_data);
fneirab 17:7447aaa9c121 381
fneirab 7:479a36909ced 382 /**
fneirab 17:7447aaa9c121 383 * @brief lsb_to_uvolts Conversion Function
fneirab 11:bdbd3104995b 384 */
fneirab 7:479a36909ced 385 int lsb_to_uvolts(uint16_t lsb);
fneirab 17:7447aaa9c121 386
fneirab 7:479a36909ced 387 /**
fneirab 17:7447aaa9c121 388 * @brief raw_current_to_uamp Conversion Function
fneirab 11:bdbd3104995b 389 */
fneirab 17:7447aaa9c121 390 float raw_current_to_uamps(uint32_t curr, int rsense_value);
fneirab 17:7447aaa9c121 391
fneirab 17:7447aaa9c121 392 /**
fneirab 17:7447aaa9c121 393 * @brief raw_cap_to_uAh Conversion Function
fneirab 17:7447aaa9c121 394 */
fneirab 17:7447aaa9c121 395 int raw_cap_to_uAh(uint32_t raw_cap, int rsense_value);
fneirab 3:f77a8345b0e3 396
fneirab 11:bdbd3104995b 397 /**
fneirab 11:bdbd3104995b 398 * @brief Save Learned Parameters Function for battery Fuel Gauge model.
fneirab 11:bdbd3104995b 399 */
fneirab 11:bdbd3104995b 400 int save_Params(saved_FG_params_t FG_params);
fneirab 4:a4d6ae2182c2 401
fneirab 9:f29d5e49b190 402 /**
fneirab 12:519a18fc3b28 403 * @brief Restore Parameters Function for battery Fuel Gauge model.
fneirab 11:bdbd3104995b 404 */
fneirab 11:bdbd3104995b 405 int restore_Params(saved_FG_params_t FG_params);
fneirab 9:f29d5e49b190 406
fneirab 9:f29d5e49b190 407 /**
fneirab 11:bdbd3104995b 408 * @brief Function to Save Average Current to At Rate register.
fneirab 11:bdbd3104995b 409 */
fneirab 11:bdbd3104995b 410 int avCurr_2_atRate();
fneirab 2:ff7db397b70f 411
fneirab 17:7447aaa9c121 412 /**
fneirab 17:7447aaa9c121 413 * @brief Get specified register info Function for MAX17055 Fuel Gauge.
fneirab 17:7447aaa9c121 414 */
fneirab 17:7447aaa9c121 415 int16_t get_regInfo(Registers_e reg_addr);
fneirab 17:7447aaa9c121 416
fneirab 17:7447aaa9c121 417 //protected:
fneirab 11:bdbd3104995b 418
fneirab 0:80c39eb8f3ba 419 /**
fneirab 11:bdbd3104995b 420 * @brief Writes to MAX17055 register.
fneirab 0:80c39eb8f3ba 421 */
fneirab 0:80c39eb8f3ba 422 int writeReg(const Registers_e reg_addr, uint16_t reg_data);
fneirab 0:80c39eb8f3ba 423
fneirab 11:bdbd3104995b 424
fneirab 0:80c39eb8f3ba 425 /**
fneirab 11:bdbd3104995b 426 * @brief Reads from MAX17055 register.
fneirab 0:80c39eb8f3ba 427 */
fneirab 1:a031f0c6a71e 428 int32_t readReg(Registers_e reg_addr, uint16_t &value);
fneirab 4:a4d6ae2182c2 429
fneirab 2:ff7db397b70f 430
fneirab 0:80c39eb8f3ba 431
fneirab 2:ff7db397b70f 432
fneirab 0:80c39eb8f3ba 433 private:
fneirab 0:80c39eb8f3ba 434
fneirab 11:bdbd3104995b 435 I2C &m_i2cBus; // I2C object
fneirab 0:80c39eb8f3ba 436
fneirab 0:80c39eb8f3ba 437 };
fneirab 0:80c39eb8f3ba 438
fneirab 0:80c39eb8f3ba 439 #endif /* _MAX17055_H_ */