Sample code for the MAX17055 Fuel Gauge with EZ config Initialization API implemented. The MAX17055 is part of the MAX32620FTHR

Dependencies:   MAX17055_EZconfig

Files at this revision

API Documentation at this revision

Comitter:
fneirab
Date:
Thu Feb 07 21:50:03 2019 +0000
Commit message:
This is the sample code for the MAX17055 which is included in the MAX32620FTHR.

Changed in this revision

MAX17055_EZconfig.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed-os.lib Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MAX17055_EZconfig.lib	Thu Feb 07 21:50:03 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/teams/MaximIntegrated/code/MAX17055_EZconfig/#2ec07d0239be
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Feb 07 21:50:03 2019 +0000
@@ -0,0 +1,97 @@
+#include "mbed.h"
+#include "max17055.h"
+
+
+//LED indication
+DigitalOut rled(LED1);
+
+//I2C communications
+I2C i2cBus(P5_7, P6_0);
+
+//Fuel Gauge
+MAX17055 fuelGauge(i2cBus);
+MAX17055::platform_data design_param;
+MAX17055::saved_FG_params_t saved_param;
+
+//MAX77650 PMIC
+#define POWER_HOLD_ON 1
+#define POWER_HOLD_OFF 0
+
+DigitalOut pw_Hold(P2_2, POWER_HOLD_ON); //To enable battery operation from the PMIC
+
+//Battery Parameters Storage from the Fuel Gauge MAX17055
+union max17055_u {
+    struct battery {
+        uint8_t avg_soc_FG;     // in Battery Percent
+        float tte_FG;           // in seconds
+        float ttf_FG;           // in seconds
+        int avg_vcell_FG;       // in 78.125uV per bit
+        float avg_curr_FG;      // in uAmps
+        float curr_FG;          // in uAmps
+        int rep_cap;            // in mAh
+        int rep_SOC;            // in %
+    } battery;
+} max17055_u;
+
+
+int main(void)
+{
+    rled = true;
+    //These are the calculated parameters for rsense 5mOhm found in the MAX32620FTHR and a 350mAh Li+ Cell.
+    design_param.designcap  = 0x015E;  //Design Battery Capacity mAh thic can change depending on the batteries implemented see battery data sheet for details.
+    design_param.ichgterm  = 0x0070;  // Charge Termination Current for the Battery This is specified by the manufacturer.
+    design_param.vempty  = 0x9600;  // 3V Battery Empty Voltage This is sepecified by design, but manufacturer has a min Empy voltage specification.
+    design_param.vcharge  = 4200;  // 4.2V Battery Charge Voltage can be obtained from MAX77650 configuration
+    design_param.rsense = 5; //5mOhms for MAX32620, keep in mind the MAX17055EVKIT has a 10mOhm resistor. This is a design specific value. Used Rsense for resgiter calculation results.
+
+    //Saved Parameters
+    //saved_param.cycles = 0; //This value is used for the save parameters function.
+
+    int status; // stores return value of the status of setting up the MAX17055
+    MAX17055::Registers_e array_addresses[7] = {MAX17055::MODELCFG_REG,
+            MAX17055::DESIGNCAP_REG,
+            MAX17055::FULLCAPNOM_REG,
+            MAX17055::DPACC_REG,
+            MAX17055::DQACC_REG,
+            MAX17055::VEMPTY_REG,
+            MAX17055::ICHGTERM_REG
+                                               };
+
+    status = fuelGauge.init(design_param);
+    printf("Init FuelGauge Function Status= %X \r\n",status); // Status shoudl retun Zero if the are no issues with the initialization. 
+
+    if (status == 0)
+        fuelGauge.save_Params(saved_param);
+
+    //Read DesignCap, Ichagterm, Vempty, dqacc, dpacc, MODELCFG, FullCapNom to verify values correspond to the expected stored Values.
+    // FullCapNom[mAh] = (dqacc[mAh]/dpacc[%])*100%
+    uint16_t regValue[7];
+    for(int i = 0 ; i < 7 ; i++) {
+        regValue[i] = fuelGauge.get_regInfo(array_addresses[i]);
+        printf("%X"  ,regValue[i]);
+        printf(" ");
+    }
+    rled = false;
+    wait(2);
+
+    while (1) {
+        //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.
+        rled = !rled;
+
+        max17055_u.battery.avg_vcell_FG = fuelGauge.get_avgVcell();
+        max17055_u.battery.avg_curr_FG  = fuelGauge.get_AvgCurrent(design_param);
+        max17055_u.battery.curr_FG      = fuelGauge.get_Current(design_param);
+        max17055_u.battery.rep_cap      = fuelGauge.get_battCAP(design_param);
+        max17055_u.battery.rep_SOC      = fuelGauge.get_SOC();
+        
+        //This code should work with Arduino Serial Plotter to visualize data
+        printf("%f " ,(max17055_u.battery.avg_vcell_FG/1000000.0)); //V
+        printf("%f " ,max17055_u.battery.avg_curr_FG);              //uA
+        printf("%f " ,max17055_u.battery.curr_FG);                  //uA
+        printf("%d " ,max17055_u.battery.rep_cap);                  //mAh
+        printf("%d " ,max17055_u.battery.rep_SOC);                  //%
+        printf("\n");
+
+        wait(1);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-os.lib	Thu Feb 07 21:50:03 2019 +0000
@@ -0,0 +1,1 @@
+https://github.com/ARMmbed/mbed-os/#59535b83926abb05d35f8c9b8bfbffc8a8ec25c2