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 23 17:30:14 2018 +0000
Revision:
19:20590e00feab
Parent:
17:7447aaa9c121
Child:
21:441840cc7423
fixed Write verify function bugs, and POR clear function

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 19:20590e00feab 68 * Battery Recommnedations based on sense Resistor Values (MAX32620FTHR comes with a 5 mOhm rsense resistor)\n
fneirab 19:20590e00feab 69 *
fneirab 19:20590e00feab 70 * | BATTERY FULL CAPACITY(mAh) | Sense Resistor | Current Register Resolution(uA) | Current Register Range(A) | Capacity Resolution(mAh) |\n
fneirab 19:20590e00feab 71 * |----------------------------|----------------|---------------------------------|---------------------------|--------------------------|\n
fneirab 19:20590e00feab 72 * | 1600 - 24576 | 5 | 312.5 | +/- 10.24 | 1 |\n
fneirab 19:20590e00feab 73 * | 8000 - 12288 | 10 | 156.25 | +/- 5.12 | 0.5 |\n
fneirab 19:20590e00feab 74 * | 400-6144 | 20 | 78.125 | +/- 2.56 | 0.25 |\n
fneirab 19:20590e00feab 75 * | 160-2458 | 50 | 31.25 | +/- 1.024 | 0.1 |\n
fneirab 19:20590e00feab 76 * | 40-614 | 200 | 7.8125 | +/- 0.256 | 0.025 |\n
fneirab 19:20590e00feab 77 *
fneirab 19:20590e00feab 78 *
fneirab 0:80c39eb8f3ba 79 * @code
fneirab 0:80c39eb8f3ba 80 * #include "mbed.h"
fneirab 17:7447aaa9c121 81 * #include "max17055.h"
fneirab 0:80c39eb8f3ba 82 *
fneirab 0:80c39eb8f3ba 83 *
fneirab 17:7447aaa9c121 84 * //LED indication
fneirab 17:7447aaa9c121 85 * DigitalOut rled(LED1);
fneirab 17:7447aaa9c121 86 *
fneirab 17:7447aaa9c121 87 * //I2C communications
fneirab 17:7447aaa9c121 88 * I2C i2cBus(P5_7, P6_0);
fneirab 17:7447aaa9c121 89 *
fneirab 17:7447aaa9c121 90 * //Fuel Gauge
fneirab 17:7447aaa9c121 91 * MAX17055 fuelGauge(i2cBus);
fneirab 17:7447aaa9c121 92 * MAX17055::platform_data design_param;
fneirab 17:7447aaa9c121 93 * MAX17055::saved_FG_params_t saved_param;
fneirab 17:7447aaa9c121 94 *
fneirab 17:7447aaa9c121 95 * //MAX77650 PMIC
fneirab 17:7447aaa9c121 96 * #define POWER_HOLD_ON 1
fneirab 17:7447aaa9c121 97 * #define POWER_HOLD_OFF 0
fneirab 17:7447aaa9c121 98 *
fneirab 17:7447aaa9c121 99 * DigitalOut pw_Hold(P2_2, POWER_HOLD_ON); //To enable battery operation from the PMIC
fneirab 17:7447aaa9c121 100 *
fneirab 17:7447aaa9c121 101 * //Battery Parameters Storage from the Fuel Gauge MAX17055
fneirab 17:7447aaa9c121 102 * union max17055_u {
fneirab 17:7447aaa9c121 103 * struct battery {
fneirab 17:7447aaa9c121 104 * uint8_t avg_soc_FG; // in Battery Percent
fneirab 17:7447aaa9c121 105 * float tte_FG; // in seconds
fneirab 17:7447aaa9c121 106 * float ttf_FG; // in seconds
fneirab 17:7447aaa9c121 107 * int avg_vcell_FG; // in 78.125uV per bit
fneirab 17:7447aaa9c121 108 * float avg_curr_FG; // in uAmps
fneirab 17:7447aaa9c121 109 * int rep_cap; // in mAh
fneirab 17:7447aaa9c121 110 * int rep_SOC; // in %
fneirab 17:7447aaa9c121 111 * } battery;
fneirab 17:7447aaa9c121 112 * } max17055_u;
fneirab 17:7447aaa9c121 113 *
fneirab 17:7447aaa9c121 114 *
fneirab 17:7447aaa9c121 115 * int main(void)
fneirab 17:7447aaa9c121 116 * {
fneirab 17:7447aaa9c121 117 * rled = true;
fneirab 17:7447aaa9c121 118 * //These are the calculated paramters for rsense 5mOhm foun in the MAX32620FTHR and a 350mAh Li+ Cell.
fneirab 17:7447aaa9c121 119 * 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 120 * design_param.ichgterm = 0x0070; // Charge Termination Current for the Battery This is specified by the manufacturer.
fneirab 17:7447aaa9c121 121 * design_param.vempty = 0x9600; // Battery Empty Voltage This is sepecified by design, but manufacturer has a min Empy voltage specification.
fneirab 17:7447aaa9c121 122 * design_param.vcharge = 4200; // Battery Charge Voltage can be obtained from MAX77650 configuration
fneirab 17:7447aaa9c121 123 * 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 124 *
fneirab 17:7447aaa9c121 125 * // //This are the parameters for an rsense = 10mOhm similar to the one found in the MAX17055EVKIT and a 350mAh Li+ Cell.
fneirab 17:7447aaa9c121 126 * // design_param.designcap = 0x02BC; //Design Battery Capacity mAh
fneirab 17:7447aaa9c121 127 * // design_param.ichgterm = 0x00E0; // Charge Termination Current for the Battery
fneirab 17:7447aaa9c121 128 * // design_param.vempty = 0x9600; // Battery Empty Voltage
fneirab 17:7447aaa9c121 129 * // design_param.vcharge = 4200; // Battery Charge Voltage (Specified by manufacurer)
fneirab 17:7447aaa9c121 130 * // design_param.rsense = 10; //10mOhms
fneirab 0:80c39eb8f3ba 131 *
fneirab 17:7447aaa9c121 132 * //Saved Parameters
fneirab 17:7447aaa9c121 133 * //saved_param.cycles = 0; //This value is used for the save parameters function
fneirab 17:7447aaa9c121 134 *
fneirab 17:7447aaa9c121 135 * status = fuelGauge.init(design_param);
fneirab 17:7447aaa9c121 136 * // printf("Init FuelGauge Function Status= %X \r\n",status);
fneirab 17:7447aaa9c121 137 *
fneirab 17:7447aaa9c121 138 * if (status == 0)
fneirab 17:7447aaa9c121 139 * fuelGauge.save_Params(saved_param);
fneirab 17:7447aaa9c121 140 *
fneirab 17:7447aaa9c121 141 * while (1) {
fneirab 17:7447aaa9c121 142 * //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 143 * rled = !rled;
fneirab 17:7447aaa9c121 144 *
fneirab 17:7447aaa9c121 145 * max17055_u.battery.avg_vcell_FG = fuelGauge.get_avgVcell();
fneirab 17:7447aaa9c121 146 * max17055_u.battery.avg_curr_FG = fuelGauge.get_AvgCurrent(design_param);
fneirab 17:7447aaa9c121 147 * max17055_u.battery.rep_cap = fuelGauge.get_battCAP(design_param);
fneirab 17:7447aaa9c121 148 * max17055_u.battery.rep_SOC = fuelGauge.get_SOC();
fneirab 17:7447aaa9c121 149 *
fneirab 17:7447aaa9c121 150 * //This code works with Arduino Serial Plotter to visualize data
fneirab 17:7447aaa9c121 151 * printf("%f " ,(max17055_u.battery.avg_vcell_FG/1000000.0));
fneirab 17:7447aaa9c121 152 * printf("%f " ,max17055_u.battery.avg_curr_FG);
fneirab 17:7447aaa9c121 153 * printf("%d " ,max17055_u.battery.rep_cap);
fneirab 17:7447aaa9c121 154 * printf("%d " ,max17055_u.battery.rep_SOC);
fneirab 17:7447aaa9c121 155 * printf("\n");
fneirab 17:7447aaa9c121 156 * //printf(" ");
fneirab 17:7447aaa9c121 157 * wait(1);
fneirab 17:7447aaa9c121 158 * }
fneirab 0:80c39eb8f3ba 159 * }
fneirab 0:80c39eb8f3ba 160 * @endcode
fneirab 0:80c39eb8f3ba 161 */
fneirab 0:80c39eb8f3ba 162
fneirab 11:bdbd3104995b 163
fneirab 17:7447aaa9c121 164
fneirab 11:bdbd3104995b 165 /*-------------------------------------------------------------------------*//**
fneirab 11:bdbd3104995b 166 * MAX17055 Class
fneirab 11:bdbd3104995b 167 * @brief Class for MAX17055 Battery Fuel Gauge
fneirab 11:bdbd3104995b 168 * - Generic API for Implementing the Battery Fuel Gauge
fneirab 0:80c39eb8f3ba 169 */
fneirab 0:80c39eb8f3ba 170 class MAX17055
fneirab 0:80c39eb8f3ba 171 {
fneirab 0:80c39eb8f3ba 172
fneirab 0:80c39eb8f3ba 173 public:
fneirab 0:80c39eb8f3ba 174
fneirab 0:80c39eb8f3ba 175 ///8-bit write address
fneirab 0:80c39eb8f3ba 176 static const uint8_t I2C_W_ADRS = 0x6C;
fneirab 0:80c39eb8f3ba 177 ///8-bit read address
fneirab 0:80c39eb8f3ba 178 static const uint8_t I2C_R_ADRS = 0x6D;
fneirab 6:5ced10109ebf 179
fneirab 0:80c39eb8f3ba 180 /**
fneirab 11:bdbd3104995b 181 * @brief Register Addresses for the MAX17055
fneirab 11:bdbd3104995b 182 * @details Enumerated register addresses
fneirab 0:80c39eb8f3ba 183 */
fneirab 17:7447aaa9c121 184 enum Registers_e {
fneirab 11:bdbd3104995b 185 STATUS_REG = 0x00, /*!< 0x00 default value = 0x0002 */
fneirab 11:bdbd3104995b 186 VALRTTH_REG = 0x01, /*!< 0x01 */
fneirab 17:7447aaa9c121 187 TALRTTH_REG = 0x02, /*!< 0x02 */
fneirab 17:7447aaa9c121 188 SALRTTH_REG = 0x03, /*!< 0x03 */
fneirab 12:519a18fc3b28 189 ATRATE_REG = 0x04, /*!< 0x04 write negative 2s comp of a 16-bit theoretical load */
fneirab 17:7447aaa9c121 190 REPCAP_REG = 0x05, /*!< 0x05 */
fneirab 11:bdbd3104995b 191 REPSOC_REG = 0x06, /*!< 0x06 */
fneirab 11:bdbd3104995b 192 TEMP_REG = 0x08, /*!< 0x08 */
fneirab 11:bdbd3104995b 193 VCELL_REG = 0x09, /*!< 0x09 */
fneirab 17:7447aaa9c121 194 CURRENT_REG = 0x0A, /*!< 0x0A */
fneirab 11:bdbd3104995b 195 AVGCURRENT_REG = 0x0B, /*!< 0x0B */
fneirab 11:bdbd3104995b 196 MIXSOC_REG = 0x0D, /*!< 0x0D */
fneirab 11:bdbd3104995b 197 AVSOC_REG = 0x0E, /*!< 0x0E */
fneirab 11:bdbd3104995b 198 MIXCAP_REG = 0x0F, /*!< 0x0F */
fneirab 7:479a36909ced 199
fneirab 11:bdbd3104995b 200 FULLCAPREP_REG = 0x10, /*!< 0x10 */
fneirab 11:bdbd3104995b 201 TTE_REG = 0X11, /*!< 0x11 */
fneirab 11:bdbd3104995b 202 QRTABLE00_REG = 0x12, /*!< 0x12 */
fneirab 11:bdbd3104995b 203 FULLSOCTHR_REG = 0x13, /*!< 0x13 */
fneirab 11:bdbd3104995b 204 CYCLES_REG = 0x17, /*!< 0x17 */
fneirab 11:bdbd3104995b 205 DESIGNCAP_REG = 0x18, /*!< 0x18 */
fneirab 11:bdbd3104995b 206 AVGVCELL_REG = 0x19, /*!< 0x19 */
fneirab 11:bdbd3104995b 207 MAXMINVOLT_REG = 0x1B, /*!< 0x1B */
fneirab 11:bdbd3104995b 208 CONFIG_REG = 0x1D, /*!< 0x1D default = 0x2210 */
fneirab 11:bdbd3104995b 209 ICHGTERM_REG = 0x1E, /*!< 0x1E */
fneirab 0:80c39eb8f3ba 210
fneirab 11:bdbd3104995b 211 TTF_REG = 0x20, /*!< 0x20 */
fneirab 11:bdbd3104995b 212 VERSION_REG = 0x21, /*!< 0x21 */
fneirab 11:bdbd3104995b 213 QRTABLE10_REG = 0x22, /*!< 0x22 */
fneirab 11:bdbd3104995b 214 FULLCAPNOM_REG = 0x23, /*!< 0x23 */
fneirab 11:bdbd3104995b 215 LEARNCFG_REG = 0x28, /*!< 0x28 */
fneirab 11:bdbd3104995b 216 RELAXCFG_REG = 0x2A, /*!< 0x2A */
fneirab 11:bdbd3104995b 217 TGAIN_REG = 0x2C, /*!< 0x2C */
fneirab 11:bdbd3104995b 218 TOFF_REG = 0x2D, /*!< 0x2D */
fneirab 11:bdbd3104995b 219
fneirab 11:bdbd3104995b 220 QRTABLE20_REG = 0x32, /*!< 0x32 */
fneirab 11:bdbd3104995b 221 RCOMP0_REG = 0x38, /*!< 0x38 */
fneirab 11:bdbd3104995b 222 TEMPCO_REG = 0x39, /*!< 0x39 */
fneirab 11:bdbd3104995b 223 VEMPTY_REG = 0x3A, /*!< 0x39 */
fneirab 11:bdbd3104995b 224 FSTAT_REG = 0x3D, /*!< 0x39 */
fneirab 7:479a36909ced 225
fneirab 11:bdbd3104995b 226 QRTABLE30_REG = 0x42, /*!< 0x39 */
fneirab 11:bdbd3104995b 227 DQACC_REG = 0x45, /*!< 0x39 */
fneirab 11:bdbd3104995b 228 DPACC_REG = 0x46, /*!< 0x39 */
fneirab 11:bdbd3104995b 229 VFSOC0_REG = 0x48, /*!< 0x39 */
fneirab 11:bdbd3104995b 230 QH0_REG = 0x4C, /*!< 0x39 */
fneirab 11:bdbd3104995b 231 QH_REG = 0x4D, /*!< 0x39 */
fneirab 7:479a36909ced 232
fneirab 11:bdbd3104995b 233 VFSOC0_QH0_LOCK_REG = 0x60, /*!< 0x39 */
fneirab 11:bdbd3104995b 234 LOCK1_REG = 0x62, /*!< 0x39 */
fneirab 11:bdbd3104995b 235 LOCK2_REG = 0x63, /*!< 0x39 */
fneirab 7:479a36909ced 236
fneirab 11:bdbd3104995b 237 MODELDATA_START_REG = 0x80, /*!< 0x39 */
fneirab 7:479a36909ced 238
fneirab 11:bdbd3104995b 239 IALRTTH_REG = 0xB4, /*!< 0x39 */
fneirab 11:bdbd3104995b 240 CURVE_REG = 0xB9, /*!< 0x39 */
fneirab 12:519a18fc3b28 241 HIBCFG_REG = 0xBA, /*!< 0x39 default = 0x870C (0x890C)*/
fneirab 11:bdbd3104995b 242 CONFIG2_REG = 0xBB, /*!< 0xBB default = 0x3658 */
fneirab 7:479a36909ced 243
fneirab 12:519a18fc3b28 244 MODELCFG_REG = 0xDB, /*!< 0xDB */
fneirab 12:519a18fc3b28 245 ATTTE_REG = 0xDD, /*!< 0xDD */
fneirab 12:519a18fc3b28 246 ATAVSOC_REG = 0xDE, /*!< 0xDE */
fneirab 12:519a18fc3b28 247 ATAVCAP_REG = 0xDF, /*!< 0xDF */
fneirab 0:80c39eb8f3ba 248
fneirab 11:bdbd3104995b 249 OCV_REG = 0xFB, /*!< 0x39 */
fneirab 11:bdbd3104995b 250 VFSOC_REG = 0xFF /*!< 0x39 */
fneirab 11:bdbd3104995b 251 };
fneirab 17:7447aaa9c121 252
fneirab 7:479a36909ced 253 /**
fneirab 12:519a18fc3b28 254 * @brief Saved Platform Data for Fuel Gauge Model
fneirab 12:519a18fc3b28 255 * @details Struct with fuel Gauge Platform Data for Fuel Gauge Model based on the final design.
fneirab 11:bdbd3104995b 256 */
fneirab 17:7447aaa9c121 257 struct platform_data { //to clarify if Part of the class
fneirab 11:bdbd3104995b 258 uint16_t designcap;/*!< struct value 1 */
fneirab 11:bdbd3104995b 259 uint16_t ichgterm; /*!< struct value 2 */
fneirab 11:bdbd3104995b 260 uint16_t vempty; /*!< struct value 3 */
fneirab 11:bdbd3104995b 261 int vcharge; /*!< struct value 1 */
fneirab 7:479a36909ced 262
fneirab 7:479a36909ced 263 /**
fneirab 7:479a36909ced 264 * rsense in miliOhms.
fneirab 7:479a36909ced 265 * default 10 (if rsense = 0) as it is the recommended value by
fneirab 7:479a36909ced 266 * the datasheet although it can be changed by board designers.
fneirab 17:7447aaa9c121 267 * MAX32620FTHR has a 5mOhm sense resitor installed.
fneirab 7:479a36909ced 268 */
fneirab 17:7447aaa9c121 269 unsigned int rsense;
fneirab 17:7447aaa9c121 270 } ;
fneirab 17:7447aaa9c121 271
fneirab 7:479a36909ced 272 /**
fneirab 11:bdbd3104995b 273 * @brief Saved Fuel Gauge Parameters
fneirab 11:bdbd3104995b 274 * @details It is recommended to save the learned capacity parameters
fneirab 11:bdbd3104995b 275 * every time bit 2 of the Cycles register toggles (so that it
fneirab 11:bdbd3104995b 276 * is saved every 64% change in the battery) so that if power is
fneirab 11:bdbd3104995b 277 * lost the values can easily be restored.
fneirab 11:bdbd3104995b 278 */
fneirab 17:7447aaa9c121 279 struct saved_FG_params_t {
fneirab 11:bdbd3104995b 280 int rcomp0; /**< The RComp0 is the characterization information critical to computing the open-circuit voltage of a cell under loaded conditions. */
fneirab 11:bdbd3104995b 281 int temp_co; /**< The TempCo value is the temperature compensation information based on the RComp0 value*/
fneirab 11:bdbd3104995b 282 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 283 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 284 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 285 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 286 } ;
fneirab 9:f29d5e49b190 287
fneirab 0:80c39eb8f3ba 288 /**
fneirab 0:80c39eb8f3ba 289 * @brief max17055 Constructor
fneirab 0:80c39eb8f3ba 290 */
fneirab 0:80c39eb8f3ba 291 MAX17055(I2C &i2c);
fneirab 0:80c39eb8f3ba 292
fneirab 0:80c39eb8f3ba 293 /**
fneirab 0:80c39eb8f3ba 294 * @brief Fuel Gauge Destructor
fneirab 0:80c39eb8f3ba 295 */
fneirab 0:80c39eb8f3ba 296 ~MAX17055();
fneirab 17:7447aaa9c121 297
fneirab 5:a18a189588dc 298 /**
fneirab 11:bdbd3104995b 299 * @brief Poll Flag clear Function.
fneirab 11:bdbd3104995b 300 */
fneirab 7:479a36909ced 301 int poll_flag_clear(Registers_e reg_addr, int mask, int timeout);
fneirab 5:a18a189588dc 302
fneirab 11:bdbd3104995b 303 /**
fneirab 11:bdbd3104995b 304 * @brief Check POR function
fneirab 11:bdbd3104995b 305 */
fneirab 11:bdbd3104995b 306 int check_POR_func();
fneirab 9:f29d5e49b190 307
fneirab 9:f29d5e49b190 308 /**
fneirab 11:bdbd3104995b 309 * @brief clear POR bit function
fneirab 11:bdbd3104995b 310 */
fneirab 9:f29d5e49b190 311 int clear_POR_bit();
fneirab 4:a4d6ae2182c2 312
fneirab 2:ff7db397b70f 313 /**
fneirab 12:519a18fc3b28 314 * @brief Write and Verify a MAX17055 register
fneirab 11:bdbd3104995b 315 */
fneirab 2:ff7db397b70f 316 int write_and_verify_reg(Registers_e reg_addr, uint16_t reg_data);
fneirab 4:a4d6ae2182c2 317
fneirab 2:ff7db397b70f 318 /**
fneirab 11:bdbd3104995b 319 * @brief Initialization Function for MAX17055.
fneirab 11:bdbd3104995b 320 */
fneirab 7:479a36909ced 321 int init(platform_data des_data);
fneirab 4:a4d6ae2182c2 322
fneirab 3:f77a8345b0e3 323 /**
fneirab 12:519a18fc3b28 324 * @brief Get Temperature Function from the MAX17055 TEMP register.
fneirab 11:bdbd3104995b 325 */
fneirab 7:479a36909ced 326 int get_temperature();
fneirab 4:a4d6ae2182c2 327
fneirab 3:f77a8345b0e3 328 /**
fneirab 12:519a18fc3b28 329 * @brief Forced Exit Hibernate Mode Function for MAX17055
fneirab 11:bdbd3104995b 330 */
fneirab 17:7447aaa9c121 331 uint16_t forcedExitHiberMode();// Hibernate spelling
fneirab 17:7447aaa9c121 332
fneirab 7:479a36909ced 333 /**
fneirab 14:519754351400 334 * @brief EZ Config function
fneirab 11:bdbd3104995b 335 */
fneirab 13:fc91b283e689 336 uint16_t EZconfig(platform_data des_data);
fneirab 17:7447aaa9c121 337
fneirab 17:7447aaa9c121 338 /**
fneirab 17:7447aaa9c121 339 * @brief Get reported Battery Capacity Function from MAX17055 Fuel Gauge
fneirab 17:7447aaa9c121 340 */
fneirab 17:7447aaa9c121 341 int get_battCAP(platform_data des_data);
fneirab 17:7447aaa9c121 342
fneirab 7:479a36909ced 343 /**
fneirab 11:bdbd3104995b 344 * @brief Get reported State Of Charge(SOC) Function from MAX17055 Fuel Gauge
fneirab 11:bdbd3104995b 345 */
fneirab 7:479a36909ced 346 int get_SOC();
fneirab 8:ca8765c30ed2 347
fneirab 11:bdbd3104995b 348 /**
fneirab 12:519a18fc3b28 349 * @brief Get at rate Average State Of Charge(SOC) Function from MAX17055 Fuel Gauge.
fneirab 11:bdbd3104995b 350 */
fneirab 12:519a18fc3b28 351 int get_atAvSOC();
fneirab 8:ca8765c30ed2 352
fneirab 8:ca8765c30ed2 353 /**
fneirab 11:bdbd3104995b 354 * @brief Get the Time to Empty(TTE) Function form MAX17055 Fuel Gauge.
fneirab 17:7447aaa9c121 355 */
fneirab 12:519a18fc3b28 356 float get_TTE();
fneirab 7:479a36909ced 357
fneirab 7:479a36909ced 358 /**
fneirab 11:bdbd3104995b 359 * @brief Get the at Time to Empty(atTTE) value Function for MAX17055 Fuel Gauge.
fneirab 17:7447aaa9c121 360 */
fneirab 12:519a18fc3b28 361 float get_atTTE();
fneirab 9:f29d5e49b190 362
fneirab 9:f29d5e49b190 363 /**
fneirab 11:bdbd3104995b 364 * @brief Get mix State Of Charge(SOC) Function for MAX17055 Fuel Gauge.
fneirab 11:bdbd3104995b 365 */
fneirab 9:f29d5e49b190 366 int get_mixSOC();
fneirab 8:ca8765c30ed2 367
fneirab 8:ca8765c30ed2 368 /**
fneirab 11:bdbd3104995b 369 * @brief Get the Time to Full(TTE) values Function for MAX17055 Fuel Gauge.
fneirab 11:bdbd3104995b 370 */
fneirab 12:519a18fc3b28 371 float get_TTF();
fneirab 17:7447aaa9c121 372
fneirab 11:bdbd3104995b 373 /**
fneirab 11:bdbd3104995b 374 * @brief Get voltage of the cell Function for MAX17055 Fuel Gauge.
fneirab 11:bdbd3104995b 375 */
fneirab 11:bdbd3104995b 376 int get_Vcell();
fneirab 7:479a36909ced 377
fneirab 7:479a36909ced 378 /**
fneirab 17:7447aaa9c121 379 * @brief Get average voltage of the cell Function for MAX17055 Fuel Gauge.
fneirab 17:7447aaa9c121 380 */
fneirab 17:7447aaa9c121 381 int get_avgVcell();
fneirab 17:7447aaa9c121 382
fneirab 17:7447aaa9c121 383 /**
fneirab 11:bdbd3104995b 384 * @brief Get current Function for MAX17055 Fuel Gauge.
fneirab 11:bdbd3104995b 385 */
fneirab 17:7447aaa9c121 386 float get_Current(platform_data des_data);
fneirab 17:7447aaa9c121 387
fneirab 7:479a36909ced 388 /**
fneirab 11:bdbd3104995b 389 * @brief Get average current Function for MAX17055 Fuel Gauge.
fneirab 17:7447aaa9c121 390 */
fneirab 17:7447aaa9c121 391 float get_AvgCurrent(platform_data des_data);
fneirab 17:7447aaa9c121 392
fneirab 7:479a36909ced 393 /**
fneirab 17:7447aaa9c121 394 * @brief lsb_to_uvolts Conversion Function
fneirab 11:bdbd3104995b 395 */
fneirab 7:479a36909ced 396 int lsb_to_uvolts(uint16_t lsb);
fneirab 17:7447aaa9c121 397
fneirab 7:479a36909ced 398 /**
fneirab 17:7447aaa9c121 399 * @brief raw_current_to_uamp Conversion Function
fneirab 11:bdbd3104995b 400 */
fneirab 17:7447aaa9c121 401 float raw_current_to_uamps(uint32_t curr, int rsense_value);
fneirab 17:7447aaa9c121 402
fneirab 17:7447aaa9c121 403 /**
fneirab 17:7447aaa9c121 404 * @brief raw_cap_to_uAh Conversion Function
fneirab 17:7447aaa9c121 405 */
fneirab 17:7447aaa9c121 406 int raw_cap_to_uAh(uint32_t raw_cap, int rsense_value);
fneirab 3:f77a8345b0e3 407
fneirab 11:bdbd3104995b 408 /**
fneirab 11:bdbd3104995b 409 * @brief Save Learned Parameters Function for battery Fuel Gauge model.
fneirab 11:bdbd3104995b 410 */
fneirab 11:bdbd3104995b 411 int save_Params(saved_FG_params_t FG_params);
fneirab 4:a4d6ae2182c2 412
fneirab 9:f29d5e49b190 413 /**
fneirab 12:519a18fc3b28 414 * @brief Restore Parameters Function for battery Fuel Gauge model.
fneirab 11:bdbd3104995b 415 */
fneirab 11:bdbd3104995b 416 int restore_Params(saved_FG_params_t FG_params);
fneirab 9:f29d5e49b190 417
fneirab 9:f29d5e49b190 418 /**
fneirab 11:bdbd3104995b 419 * @brief Function to Save Average Current to At Rate register.
fneirab 11:bdbd3104995b 420 */
fneirab 11:bdbd3104995b 421 int avCurr_2_atRate();
fneirab 2:ff7db397b70f 422
fneirab 17:7447aaa9c121 423 /**
fneirab 17:7447aaa9c121 424 * @brief Get specified register info Function for MAX17055 Fuel Gauge.
fneirab 17:7447aaa9c121 425 */
fneirab 17:7447aaa9c121 426 int16_t get_regInfo(Registers_e reg_addr);
fneirab 17:7447aaa9c121 427
fneirab 17:7447aaa9c121 428 //protected:
fneirab 11:bdbd3104995b 429
fneirab 0:80c39eb8f3ba 430 /**
fneirab 11:bdbd3104995b 431 * @brief Writes to MAX17055 register.
fneirab 0:80c39eb8f3ba 432 */
fneirab 0:80c39eb8f3ba 433 int writeReg(const Registers_e reg_addr, uint16_t reg_data);
fneirab 0:80c39eb8f3ba 434
fneirab 11:bdbd3104995b 435
fneirab 0:80c39eb8f3ba 436 /**
fneirab 11:bdbd3104995b 437 * @brief Reads from MAX17055 register.
fneirab 0:80c39eb8f3ba 438 */
fneirab 1:a031f0c6a71e 439 int32_t readReg(Registers_e reg_addr, uint16_t &value);
fneirab 4:a4d6ae2182c2 440
fneirab 2:ff7db397b70f 441
fneirab 0:80c39eb8f3ba 442
fneirab 2:ff7db397b70f 443
fneirab 0:80c39eb8f3ba 444 private:
fneirab 0:80c39eb8f3ba 445
fneirab 11:bdbd3104995b 446 I2C &m_i2cBus; // I2C object
fneirab 0:80c39eb8f3ba 447
fneirab 0:80c39eb8f3ba 448 };
fneirab 0:80c39eb8f3ba 449
fneirab 0:80c39eb8f3ba 450 #endif /* _MAX17055_H_ */