This is a library for the MAX17055 Li+ Battery Fuel Gauge.
Fork of max17055 by
Revision 12:519a18fc3b28, committed 2018-04-19
- Comitter:
- fneirab
- Date:
- Thu Apr 19 22:34:45 2018 +0000
- Parent:
- 11:bdbd3104995b
- Commit message:
- updates version 1.5 ; Remove necessary code; Spell check; Error check; Still need a bit more work to finish;
Changed in this revision
max17055.cpp | Show annotated file Show diff for this revision Revisions of this file |
max17055.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r bdbd3104995b -r 519a18fc3b28 max17055.cpp --- a/max17055.cpp Tue Feb 27 15:53:04 2018 +0000 +++ b/max17055.cpp Thu Apr 19 22:34:45 2018 +0000 @@ -3,14 +3,15 @@ * * @author Felipe Neira - Maxim Integrated - TTS * -* @version 1.4 +* @version 1.5 * -* Started: 6FEB18 +* Started: 13DEC17 * -* Updated: -* Modifications to reflect applicable functions and .h file association -* -* +* Updated: 16APR18. +* Remove unnecessary code. +* Check spelling +* Error check +* * /******************************************************************************* * Copyright (C) 2018 Maxim Integrated Products, Inc., All Rights Reserved. @@ -48,47 +49,21 @@ #include "mbed.h" #include "max17055.h" -// #define DRV_NAME "max17055" ///not used - -// /* CONFIG register bits */ -// #define MAX17055_CONFIG_ALfRT_EN (1 << 2) ///not used -// #define MAX17055_CONFIG2_LDMDL (1 << 5) ///not used - -// /* STATUS register bits */ -// #define MAX17055_STATUS_BST (1 << 3) ///not used -// #define MAX17055_STATUS_POR (1 << 1) - /* POR Mask */ #define MAX17055_POR_MASK (0xFFFD) /* MODELCFG register bits */ #define MAX17055_MODELCFG_REFRESH (1 << 15) -// /* TALRTTH register bits */ -// #define MIN_TEMP_ALERT 0 ///not used -// #define MAX_TEMP_ALERT 8 ///not used /* FSTAT register bits */ #define MAX17055_FSTAT_DNR (1) -// /* STATUS interrupt status bits */ -// #define MAX17055_STATUS_ALRT_CLR_MASK (0x88BB) -// #define MAX17055_STATUS_SOC_MAX_ALRT (1 << 14) -// #define MAX17055_STATUS_TEMP_MAX_ALRT (1 << 13) -// #define MAX17055_STATUS_VOLT_MAX_ALRT (1 << 12) -// #define MAX17055_STATUS_SOC_MIN_ALRT (1 << 10) -// #define MAX17055_STATUS_TEMP_MIN_ALRT (1 << 9) -// #define MAX17055_STATUS_VOLT_MIN_ALRT (1 << 8) -// #define MAX17055_STATUS_CURR_MAX_ALRT (1 << 6) -// #define MAX17055_STATUS_CURR_MIN_ALRT (1 << 2) - -// #define MAX17055_VMAX_TOLERANCE 50 /* 50 mV */ - /* LIBRARY FUNCTION SUCCESS*/ #define F_SUCCESS_0 0 /* LIBRARY FUNCTION ERROR CODES */ -#define F_ERROR_1 -1 //-1 if read/write errors exist +#define F_ERROR_1 -1 //-1 if I2C read/write errors exist #define F_ERROR_2 -2 //-2 if device is not present #define F_ERROR_3 -3 //-3 if function error #define F_ERROR_4 -4 //-4 if other error @@ -172,14 +147,14 @@ /** * @brief Write and Verify a MAX17055 register * @par Details - * This function wites and verifies if the writing process was successful + * This function writes and verifies if the writing process was successful * * @param[in] reg_addr - register address * @param[out] reg_data - the variable that contains the data to write * to the register address * * @retval 0 on success - * @retval non-0 for errors + * @retval non-0 for errors */ int MAX17055::write_and_verify_reg(Registers_e reg_addr, uint16_t reg_data) { @@ -192,13 +167,13 @@ do { statusWrite = writeReg(reg_addr, reg_data); if (statusWrite != F_SUCCESS_0) - ret = F_ERROR_1; + ret = -6; wait_ms(3); statusRead = readReg(reg_addr, read_data); if (statusRead != F_SUCCESS_0) - ret = F_ERROR_1; + ret = -7; if (read_data != reg_data) { - ret = F_ERROR_1; + ret = -8; retries--; } } while (retries && read_data != reg_data); @@ -212,8 +187,8 @@ /** * @brief Initialization Function for MAX17055. * @par Details - * This function intitializes the MAX17055 for the implementation of the EZconfig model.\n - * The libraty needs to be customized for the implementation of customize model.\n + * This function initializes the MAX17055 for the implementation of the EZconfig model.\n + * The library needs to be customized for the implementation of customize model.\n * * @retval 0 on success * @retval non-0 for errors @@ -223,54 +198,46 @@ int status, ret; int time_out = 10; - uint16_t read_data, hibcfg_value, reg; + uint16_t hibcfg_value,read_data; status = readReg(VERSION_REG, read_data); if (status != F_SUCCESS_0) return status; - /* Step 0: Check for POR */ - /* Skip load model if POR bit is cleared */ + ///STEP 0. Check for POR (Skip load model if POR bit is cleared) if (check_POR_func() == F_ERROR_5) return F_ERROR_5; //POR not detected. Skip Initialization. + //This is not an error. - /* Step 1: Check if FStat.DNR == 0 */ - // Do not continue until FSTAT.DNR == 0 + ///STEP 1. Check if FStat.DNR == 0 (Do not continue until FSTAT.DNR == 0) ret = poll_flag_clear(FSTAT_REG, MAX17055_FSTAT_DNR, time_out); if (ret < F_SUCCESS_0) { - //printf("Unsuccessful init: Data Not Ready!\n"); return ret; } - /* Force exit from hibernate */ - hibcfg_value = forcedExitHyberMode(); + ///STEP 1.2. Force exit from hibernate + hibcfg_value = forcedExitHiberMode(); //printf("step 1 check \r\n"); - /* Step 2: Initialize configuration */ + ///STEP 2. Initialize configuration switch (1) { case MODEL_LOADING_OPTION1: - /* Step 2.1: Option 1 EZ Config */ + ///STEP 2.1. Load EZ Config EZconfig_init(des_data); - /* Poll ModelCFG.ModelRefresh bit for clear */ + ///STEP 2.2. Poll ModelCFG.ModelRefresh bit for clear ret = poll_flag_clear(MODELCFG_REG, MAX17055_MODELCFG_REFRESH, time_out); if(ret < F_SUCCESS_0) { - //dev_err(priv->dev, "Option1 model refresh not completed!\n"); return ret; } break; } - /* Restore original HibCfg */ + ///STEP3. Restore original HibCfg writeReg(HIBCFG_REG, hibcfg_value); - //printf("Last section check \r\n"); - - - /* Optional step - alert threshold initialization */ - //set_alert_thresholds(priv); /* Clear Status.POR */ ret = clear_POR_bit(); @@ -304,7 +271,7 @@ /** * @brief clear POR bit function * @par Details - * This function clear the idicating bit for POR - MAX17055 + * This function clear the indicating bit for POR - MAX17055 * * @retval 0 for Success * @retval non-0 for errors @@ -397,9 +364,9 @@ * @par Details * This function executes a force exit from hibernate mode. * - * @retval HibCFG original value before forced Exit Hybernate mode * + * @retval HibCFG original value before forced Exit Hibernate mode * */ -uint16_t MAX17055::forcedExitHyberMode() +uint16_t MAX17055::forcedExitHiberMode() { uint16_t hibcfg; @@ -407,46 +374,46 @@ //STEP 0: Store original HibCFG value readReg(HIBCFG_REG, hibcfg); - //STEP 1: Write to Soft-Wakeup Commannd Register - writeReg(VFSOC0_QH0_LOCK_REG, 0x90); //Soft-Wakeup from hybernate + //STEP 1: Write to Soft-Wakeup Command Register + writeReg(VFSOC0_QH0_LOCK_REG, 0x90); //Soft-Wakeup from hibernate //STEP 2: Write to Hibernate Configuration register writeReg(HIBCFG_REG, 0x0); //disable hibernate mode - //STEP 3:Write to Soft-Wakeup Commannd Register - writeReg(VFSOC0_QH0_LOCK_REG, 0x0); //Clear All commnads + //STEP 3:Write to Soft-Wakeup Command Register + writeReg(VFSOC0_QH0_LOCK_REG, 0x0); //Clear All commands return hibcfg; } /** - * @brief EZ Confing Initialization function + * @brief EZ Config Initialization function * @par Details - * This function implements the steps for the EZ confing m5 FuelGauge - * @param[in] des_data - Plataform_data struct with information about the deisgn. + * This function implements the steps for the EZ config m5 FuelGauge + * @param[in] des_data - Plataform_data struct with information about the design. * @retval 0 on success * @retval non-zero for errors */ uint16_t MAX17055::EZconfig_init(platform_data des_data) { - ///EZ config values + ///STEP 2.1.1 EZ config values suggested by manufacturer. const int charger_th = 4275; - const int chg_V_high = 51200; + const int chg_V_high = 51200; // scaling factor high voltage charger const int chg_V_low = 44138; - const int param_EZ_FG1 = 0x8400; + const int param_EZ_FG1 = 0x8400; // Sets config bit for the charge voltage for the m5 const int param_EZ_FG2 = 0x8000; uint16_t dpacc, ret; - /* Step 2.1: Option 1 EZ Config */ + ///STEP 2.1.2 Store the EZ Config values into the appropriate registers. ret = writeReg(DESIGNCAP_REG, des_data.designcap); - ret = writeReg(DQACC_REG, des_data.designcap >> 5); ///DesignCap divide by 32 + ret = writeReg(DQACC_REG, des_data.designcap >> 5); //DesignCap divide by 32 ret = writeReg(ICHGTERM_REG, des_data.ichgterm); ret = writeReg(VEMPTY_REG, des_data.vempty); if (des_data.vcharge > charger_th) { dpacc = (des_data.designcap >> 5) * chg_V_high / des_data.designcap; ret = writeReg(DPACC_REG, dpacc); - ret = writeReg(MODELCFG_REG, param_EZ_FG1); ///Why 0x8400?? + ret = writeReg(MODELCFG_REG, param_EZ_FG1); // } else { dpacc = (des_data.designcap >> 5) * chg_V_low / des_data.designcap; ret = writeReg(DPACC_REG, dpacc); @@ -480,30 +447,29 @@ } /** - * @brief Get Average State Of Charge(SOC) Function from MAX17055 Fuel Gauge. + * @brief Get at rate Average State Of Charge(SOC) Function from MAX17055 Fuel Gauge. * @par Details - * This function sends a request to access the avSOC register of the MAX17055. + * This function sends a request to access the atAvSOC register of the MAX17055. * The AvSOC registers hold the calculated available capacity and percentage of the * battery based on all inputs from the ModelGauge m5 algorithm including empty * compensation. These registers provide unfiltered results. Jumps in the reported * values can be caused by abrupt changes in load current or temperature. * - * @retval avSOC_data - Average SOC data from the AVSOC register in % value. + * @retval atAvSOC_data - Average SOC data from the atAVSOC register in % value. * @retval non-0 negative values check for errors */ -int MAX17055::get_avSOC() +int MAX17055::get_atAvSOC() { - int ret; - uint16_t avSOC_data; + uint16_t atAvSOC_data; - ret = readReg(AVSOC_REG, avSOC_data); + ret = readReg(AVSOC_REG, atAvSOC_data); if (ret < F_SUCCESS_0) return ret; //Check errors if data is not correct - avSOC_data = avSOC_data >> 8; /* avSOC LSB: 1/256 % */ + atAvSOC_data = atAvSOC_data >> 8; /* avSOC LSB: 1/256 % */ - return avSOC_data; + return atAvSOC_data; } /** @@ -544,19 +510,20 @@ * @retval tte_data - Time to Empty data from the TTE register in seconds. * @retval non-0 negative values check for errors */ -int MAX17055::get_TTE() +float MAX17055::get_TTE() { int ret; uint16_t tte_data; + float f_tte_data; ret = readReg(TTE_REG, tte_data); if (ret < F_SUCCESS_0) return ret; else - tte_data = (tte_data * 45) >> 3; /* TTE LSB: 5.625 sec */ + f_tte_data = ((float)tte_data * 5.625); /* TTE LSB: 5.625 sec */ - return tte_data; + return f_tte_data; } /** @@ -568,19 +535,20 @@ * @retval atTTE_data - Time to Empty data from the atTTE register in seconds. * @retval non-0 negative values check for errors */ -int MAX17055::get_atTTE() +float MAX17055::get_atTTE() { int ret; uint16_t atTTE_data; + float f_atTTE_data; ret = readReg(ATTTE_REG, atTTE_data); if (ret < F_SUCCESS_0) return ret; //Check for errors else - atTTE_data = (atTTE_data * 45) >> 3; /* TTE LSB: 5.625 sec */ + f_atTTE_data = ((float)atTTE_data * 5.625); /* TTE LSB: 5.625 sec */ - return atTTE_data; + return f_atTTE_data; } /** @@ -597,19 +565,20 @@ * @retval ttf_data - Time to Full data from the TTF register in seconds. * @retval non-0 negative values check for errors */ -int MAX17055::get_TTF() +float MAX17055::get_TTF() { int ret; uint16_t ttf_data; + float f_ttf_data; ret = readReg(TTF_REG, ttf_data); if (ret < F_SUCCESS_0) return ret; else - ttf_data = (ttf_data * 45) >> 3; /* TTF LSB: 5.625 sec */ + f_ttf_data = ((float)ttf_data * 5.625); /* TTE LSB: 5.625 sec */ - return ttf_data; + return f_ttf_data; } /** @@ -639,9 +608,9 @@ * @brief Get current Function for MAX17055 Fuel Gauge. * @par Details * This function sends a request to access the CURRENT register - * of the MAX17055 to read the current redings. + * of the MAX17055 to read the current readings. * - * @param[in] des_data - Plataform_data struct with information about the deisgn. + * @param[in] des_data - Plataform_data struct with information about the design. * * @retval curr_data - current data from the CURRENT register in uAmps. * @retval non-0 negative values check for errors. @@ -665,9 +634,9 @@ * @brief Get average current Function for MAX17055 Fuel Gauge. * @par Details * This function sends a request to access the aveCURRENT register - * of the MAX17055 to read the average current redings. + * of the MAX17055 to read the average current readings. * - * @param[in] des_data - Plataform_data struct with information about the deisgn. + * @param[in] des_data - Plataform_data struct with information about the design. * * @retval aveCurr_data - current data from the AVGCURRENT register in uAmps. * @retval non-0 negative values check for errors. @@ -689,7 +658,7 @@ } /** - * @brief lsb_to_uvolts Converssion Function + * @brief lsb_to_uvolts Conversion Function * @par Details * This function takes the lsb value of the register and convert it * to uvolts @@ -705,7 +674,7 @@ } /** - * @brief raw_current_to_uamp Converssion Function + * @brief raw_current_to_uamp Conversion Function * @par Details * This function takes the raw current value of the register and * converts it to uamps @@ -720,7 +689,7 @@ if (res & 0x8000) { res |= 0xFFFF0000; } else { - res *= 1562500 /(rsense_value * 1000); //Change to interact with the rsense implementen in the design + res *= 1562500 /(rsense_value * 1000); //Change to interact with the rsense implemented in the design } return res; } @@ -750,7 +719,7 @@ value = data[3]; } - ///STEP 2.Save the capacity parametes for the specific battery. + ///STEP 2. Save the capacity parameters for the specific battery. ret = readReg(RCOMP0_REG, data[0]); if (ret < F_SUCCESS_0) return ret; @@ -780,7 +749,7 @@ } /** - * @brief Resotore Parameters Function for battery Fuel Gauge model. + * @brief Restore Parameters Function for battery Fuel Gauge model. * @par Details * If power is lost, then the capacity information * can be easily restored with this function. @@ -793,7 +762,7 @@ { int ret; uint16_t temp_data, fullcapnom_data, mixCap_calc, dQacc_calc; - uint16_t dPacc_value = 0x0C80;//Why this vcalue? + uint16_t dPacc_value = 0x0C80;//Set it to 200% ///STEP 1. Restoring capacity parameters write_and_verify_reg(RCOMP0_REG, FG_params.rcomp0); @@ -807,7 +776,7 @@ if (ret < F_SUCCESS_0) return ret; - ret = readReg(MIXSOC_REG, temp_data); //check if Error in sofware guide register incorrect + ret = readReg(MIXSOC_REG, temp_data); //check if Error in software guide register incorrect if (ret < F_SUCCESS_0) return ret; @@ -834,7 +803,7 @@ /** * @brief Function to Save Average Current to At Rate register. * @par Details - * For User frendliness display of TTE, avSOC, avCAP + * For User friendliness display of atTTE, atAvSOC, atAvCAP * write the average current to At Rate registers every 10sec * when the battery is in use. * NOTE: do not use this function when the Battery is charging. @@ -848,12 +817,14 @@ uint16_t avCurr_data; ret = readReg(AVGCURRENT_REG, avCurr_data); - if (ret < F_SUCCESS_0) - return ret; + if (ret < F_SUCCESS_0){ + return ret = -3; + } //Write avCurrent to atRate Register - ret = write_and_verify_reg(ATRATE_REG, avCurr_data); - if (ret < F_SUCCESS_0) + ret = writeReg(ATRATE_REG, avCurr_data); + if (ret < F_SUCCESS_0){ return ret; - return ret; + } + return F_SUCCESS_0; } \ No newline at end of file
diff -r bdbd3104995b -r 519a18fc3b28 max17055.h --- a/max17055.h Tue Feb 27 15:53:04 2018 +0000 +++ b/max17055.h Thu Apr 19 22:34:45 2018 +0000 @@ -3,13 +3,14 @@ * * @author Felipe Neira - Maxim Integrated - TTS * -* @version 1.4 +* @version 1.5 * -* Started: 6FEB18 +* Started: 13DEC17 * -* Updated: -* Removed BATTERY CLASS. -* Add Doxygen documentations. +* Updated: 16APR18. +* Remove unnecessary code. +* Check spelling +* Error check * * /******************************************************************************* @@ -57,9 +58,9 @@ /// Model loading options #define MODEL_LOADING_OPTION1 1 //EZ Config -#define MODEL_LOADING_OPTION2 2 //Not implemented in this version of the library -#define MODEL_LOADING_OPTION3 3 //Not implemented in this version of the library - +// #define MODEL_LOADING_OPTION2 2 //Not implemented in this version of the library +// #define MODEL_LOADING_OPTION3 3 //Not implemented in this version of the library +//Remove this and leave it /** * @brief MBED Library for the MAX17055\n @@ -119,8 +120,6 @@ public: - ///7-bit slave address - static const uint8_t I2C_ADRS = 0x36; //Slave address 0x6C or 0x36 for 7 MSbit Addres ///8-bit write address static const uint8_t I2C_W_ADRS = 0x6C; ///8-bit read address @@ -135,7 +134,7 @@ VALRTTH_REG = 0x01, /*!< 0x01 */ TALRTTH_REG = 0x02, /*!< 0x02 */ SALRTTH_REG = 0x03, /*!< 0x03 */ - ATRATE_REG = 0x04, /*!< 0x04 write negative 2s comp of a 16-bit theorithical load */ + ATRATE_REG = 0x04, /*!< 0x04 write negative 2s comp of a 16-bit theoretical load */ REPCAP_REG = 0x05, /*!< 0x05 */ REPSOC_REG = 0x06, /*!< 0x06 */ TEMP_REG = 0x08, /*!< 0x08 */ @@ -187,19 +186,21 @@ IALRTTH_REG = 0xB4, /*!< 0x39 */ CURVE_REG = 0xB9, /*!< 0x39 */ - HIBCFG_REG = 0xBA, /*!< 0x39 */ + HIBCFG_REG = 0xBA, /*!< 0x39 default = 0x870C (0x890C)*/ CONFIG2_REG = 0xBB, /*!< 0xBB default = 0x3658 */ - MODELCFG_REG = 0xDB, /*!< 0x39 */ - ATTTE_REG = 0xDD, /*!< 0x39 */ + MODELCFG_REG = 0xDB, /*!< 0xDB */ + ATTTE_REG = 0xDD, /*!< 0xDD */ + ATAVSOC_REG = 0xDE, /*!< 0xDE */ + ATAVCAP_REG = 0xDF, /*!< 0xDF */ OCV_REG = 0xFB, /*!< 0x39 */ VFSOC_REG = 0xFF /*!< 0x39 */ }; /** - * @brief Saved Plataform Data for Fuel Gauge Model - * @details Struct with fuel Gauge Plataform Data for Fuel Gauge Model based on the final design. + * @brief Saved Platform Data for Fuel Gauge Model + * @details Struct with fuel Gauge Platform Data for Fuel Gauge Model based on the final design. */ struct platform_data{ //to clarify if Part of the class uint16_t designcap;/*!< struct value 1 */ @@ -286,7 +287,7 @@ int clear_POR_bit(); /** - * @brief Write and Verify a MAX17055 register + * @brief Write and Verify a MAX17055 register */ int write_and_verify_reg(Registers_e reg_addr, uint16_t reg_data); @@ -296,17 +297,17 @@ int init(platform_data des_data); /** - * @brief Get Temperature Function from the MAX17055 TEMP register. + * @brief Get Temperature Function from the MAX17055 TEMP register. */ int get_temperature(); /** - * @brief Forced Exit Hibernate Mode Function for MAX17055 + * @brief Forced Exit Hibernate Mode Function for MAX17055 */ - uint16_t forcedExitHyberMode(); + uint16_t forcedExitHiberMode();// Hibernate spelling /** - * @brief EZ Confing Initialization function + * @brief EZ Config Initialization function */ uint16_t EZconfig_init(platform_data des_data); @@ -316,19 +317,19 @@ int get_SOC(); /** - * @brief Get Average State Of Charge(SOC) Function from MAX17055 Fuel Gauge. + * @brief Get at rate Average State Of Charge(SOC) Function from MAX17055 Fuel Gauge. */ - int get_avSOC(); + int get_atAvSOC(); /** * @brief Get the Time to Empty(TTE) Function form MAX17055 Fuel Gauge. */ - int get_TTE(); + float get_TTE(); /** * @brief Get the at Time to Empty(atTTE) value Function for MAX17055 Fuel Gauge. */ - int get_atTTE(); + float get_atTTE(); /** * @brief Get mix State Of Charge(SOC) Function for MAX17055 Fuel Gauge. @@ -338,7 +339,7 @@ /** * @brief Get the Time to Full(TTE) values Function for MAX17055 Fuel Gauge. */ - int get_TTF(); + float get_TTF(); /** * @brief Get voltage of the cell Function for MAX17055 Fuel Gauge. @@ -356,12 +357,12 @@ int get_AvgCurrent(platform_data des_data); /** - * @brief lsb_to_uvolts Converssion Function + * @brief lsb_to_uvolts Conversion Function */ int lsb_to_uvolts(uint16_t lsb); /** - * @brief raw_current_to_uamp Converssion Function + * @brief raw_current_to_uamp Conversion Function */ int raw_current_to_uamps(uint32_t curr, int rsense_value); @@ -371,7 +372,7 @@ int save_Params(saved_FG_params_t FG_params); /** - * @brief Resotore Parameters Function for battery Fuel Gauge model. + * @brief Restore Parameters Function for battery Fuel Gauge model. */ int restore_Params(saved_FG_params_t FG_params);