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
max17055.h
- Committer:
- fneirab
- Date:
- 2017-10-02
- Revision:
- 5:a18a189588dc
- Parent:
- 4:a4d6ae2182c2
- Child:
- 6:5ced10109ebf
File content as of revision 5:a18a189588dc:
/******************************************************************//** * @file max17055.h * * @author Felipe Neira - Maxim Integrated - TTS * * @version 1.0 * * Started: 11SEP17 * * Updated: * * @brief Source file for MAX31855 class * ******************************************************************************** * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * Except as contained in this notice, the name of Maxim Integrated * Products, Inc. shall not be used except as stated in the Maxim Integrated * Products, Inc. Branding Policy. * * The mere transfer of this software does not imply any licenses * of trade secrets, proprietary technology, copyrights, patents, * trademarks, maskwork rights, or any other form of intellectual * property whatsoever. Maxim Integrated Products, Inc. retains all * ownership rights. * ******************************************************************************/ #ifndef __MAX17055_H_ #define __MAX17055_H_ // Include #include "mbed.h" /* STATUS register bits */ #define MAX17055_STATUS_BST (1 << 3) #define MAX17055_STATUS_POR (1 << 1) /// Model loading options #define MODEL_LOADING_OPTION1 1 #define MODEL_LOADING_OPTION2 2 #define MODEL_LOADING_OPTION3 3 /** * @brief Library for the MAX17055\n * The MAX17055 is a low 7μA operating current fuel gauge * which implements Maxim ModelGauge™ m5 EZ algorithm. * ModelGauge m5 EZ makes fuel gauge implementation easy * by eliminating battery characterization requirements * and simplifying host software interaction. * The ModelGauge m5 EZ robust algorithm provides tolerance against * battery diversity for most lithium batteries and applications. * Communication is through an SPI-compatible interface. * * @code * #include "mbed.h" * #include "MAX170155.h" * * * // Hardware serial port * Serial serial(USBTX, USBRX); * * //SPI communications * I2C i2c(SCL, SDA); * * //Fuel Gauge * MAX17055 max17055(i2C, Sutff );//To be completed * * * int main(void) * { * CODE CODE * while(true) * { * CODE CODE * } * } * @endcode */ /** * @brief Saved Fuel Gauge Parameters * @details Struct with saved fuel Gauge Parametrs */ struct saved_fuel_gauge_params_t{ int rcomp0; /**< Explain */ int temp_co; /**< Explain */ int full_cap_rep; /**< Explain */ int cycles; /**< Explain */ int full_cap_nom; /**< Explain */ } ; /** * @brief Saved Fuel Gauge Parameters * @details Struct with saved fuel Gauge Parametrs */ struct max17055_platform_data{ uint16_t designcap;/**< struct value 1 */ uint16_t ichgterm; /**< struct value 2 */ uint16_t vempty; /**< struct value 3 */ int vcharge; /**< struct value 1 */ uint16_t learncfg; /**< struct value 1 */ uint16_t relaxcfg; /**< struct value 1 */ uint16_t config; /**< struct value 1 */ uint16_t config2; /**< struct value 1 */ uint16_t fullsocthr;/**< struct value 1 */ uint16_t tgain; /**< struct value 1 */ uint16_t toff; /**< struct value 1 */ uint16_t curve; /**< struct value 1 */ uint16_t rcomp0; /**< struct value 1 */ uint16_t tempco; /**< struct value 1 */ uint16_t qrtable00; uint16_t qrtable10; uint16_t qrtable20; uint16_t qrtable30; uint16_t dpacc; uint16_t modelcfg; //uint16_t model_data[MAX17055_TABLE_SIZE]; int (*get_charging_status)(void); int model_option; /** * rsense in miliOhms. * default 10 (if rsense = 0) as it is the recommended value by * the datasheet although it can be changed by board designers. */ unsigned int rsense; int volt_min; /**< in mV */ int volt_max; /**< in mV */ int temp_min; /**< in DegreC */ int temp_max; /**< in DegreeC */ int soc_max; /**< in percent */ int soc_min; /**< in percent */ int curr_max; /**< in mA */ int curr_min; /**< in mA */ } ; //! BATTERY Battery Parameters Class /*! Generic API for battery parameters */ class BATTERY { public: struct battery_cfg_t{ int capacity; //!< The rated capacity in mAh of the battery int voltageMax; //!< The maximum voltage in mV that should be used for charging int voltageNom; //!< The normal voltage in mV of the battery near mid charge int voltageMin; //!< The minimum voltage in mV that the battery should be discharged int temperatureMax; //!< The maximum temperature in degrees C where charging is allowed int temperatureMin; //!< The minimum temperature in degrees C where charging is allowed int currentCharge; //!< The current as a percentage of capicity used for charging int currentTerm; //!< The current as a percentage of capacity to stop charging int currentPre; //!< The current as a percentage of capacity for pre-charging } ; }; /******************************************************************//** * MAX17055 Class **********************************************************************/ /// MAX17055 Battery Fuel Gauge Class /** Generic API for a battery fuel gauge */ class MAX17055 { 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 static const uint8_t I2C_R_ADRS = 0x6D; /////Max # Bytes in FIFO // static const uint16_t MAX_FIFO_BYTES = 288; // ///# of bytes per LED channel // static const uint8_t BYTES_PER_CH = 3; struct BATTERY::battery_cfg_t batt_con; struct max17055_platform_data design_data; struct saved_fuel_gauge_params_t fuelGauge_params; /** * @brief Register Addresses for the MAX17055 * @details Enumerated register addresses */ enum Registers_e { MAX17055_STATUS_REG = 0x00, /**< 0x00 */ MAX17055_VALRTTH_REG = 0x01, /**< 0x01 */ MAX17055_TALRTTH_REG = 0x02, /**< 0x02 */ MAX17055_SALRTTH_REG = 0x03, /**< 0x04 */ MAX17055_REPCAP_REG = 0x05, /**< 0x05 */ MAX17055_REPSOC_REG = 0x06, /**< 0x06 */ MAX17055_TEMP_REG = 0x08, /**< 0x07 */ MAX17055_VCELL_REG = 0x09, /**< 0x08 */ MAX17055_CURRENT_REG = 0x0A, /**< 0x0A */ MAX17055_AVGCURRENT_REG = 0x0B, /**< 0x0B */ MAX17055_REMCAP_REG = 0x0F, /**< 0x0F */ MAX17055_FULLCAPREP_REG = 0x10, /**< 0x10 */ MAX17055_TTE_REG = 0X11, /**< 0x11 */ MAX17055_QRTABLE00_REG = 0x12, /**< 0x12 */ MAX17055_FULLSOCTHR_REG = 0x13, /**< 0x13 */ MAX17055_CYCLES_REG = 0x17, MAX17055_DESIGNCAP_REG = 0x18, MAX17055_AVGVCELL_REG = 0x19, MAX17055_MAXMINVOLT_REG = 0x1B, MAX17055_CONFIG_REG = 0x1D, MAX17055_ICHGTERM_REG = 0x1E, MAX17055_VERSION_REG = 0x21, MAX17055_QRTABLE10_REG = 0x22, MAX17055_FULLCAPNOM_REG = 0x23, MAX17055_LEARNCFG_REG = 0x28, MAX17055_RELAXCFG_REG = 0x2A, MAX17055_TGAIN_REG = 0x2C, MAX17055_TOFF_REG = 0x2D, MAX17055_QRTABLE20_REG = 0x32, MAX17055_RCOMP0_REG = 0x38, MAX17055_TEMPCO_REG = 0x39, MAX17055_VEMPTY_REG = 0x3A, MAX17055_FSTAT_REG = 0x3D, MAX17055_QRTABLE30_REG = 0x42, MAX17055_DQACC_REG = 0x45, MAX17055_DPACC_REG = 0x46, MAX17055_VFSOC0_REG = 0x48, MAX17055_QH0_REG = 0x4C, MAX17055_QH_REG = 0x4D, MAX17055_VFSOC0_QH0_LOCK_REG = 0x60, MAX17055_LOCK1_REG = 0x62, MAX17055_LOCK2_REG = 0x63, MAX17055_MODELDATA_START_REG = 0x80, MAX17055_IALRTTH_REG = 0xB4, MAX17055_CURVE_REG = 0xB9, MAX17055_HIBCFG_REG = 0xBA, MAX17055_CONFIG2_REG = 0xBB, MAX17055_MODELCFG_REG = 0xDB, MAX17055_OCV_REG = 0xFB, MAX17055_VFSOC_REG = 0xFF, } ; /** * @brief max17055 Constructor * @details max17055 Constructor with battery and i2c as parameters */ MAX17055(I2C &i2c); /** * @brief Fuel Gauge Destructor */ ~MAX17055(); //////////////////////////////////////////////////////////////////////////// /** * \brief Poll Flag clear * \par Details * This function clears status flags for the MAX17055 * * \param[in] reg_addr - register address * \param[in] mask - register address * \param[in] timeout - register data * * \retval 1 on success * -1 on Failure */ int max17055_poll_flag_clear(Registers_e reg_addr, int mask, int timeout); /** * \brief Write and Verify a MAX17055 register * \par Details * This function wites 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 1 on success * -1 if write errors * -2 if read errors * -3 if data curruption * */ int write_and_verify_reg(Registers_e reg_addr, uint16_t reg_data); /////////////////////////////////////////////////////////////////////////// /** * \brief Initialise Function for MAX17055 * \par Details * This function intitializes the MAX17055 * * \retval 1 on success * -1 if errors exist */ int init(struct max17055_platform_data *pri); //////////////////////////////////////////////////////////////////////////// /** * \brief Get Internal Temperature Function for MAX17055 * \par Details * This function sends a request to access the internal * of the MAX17055 * * \param[out] *temp - pointer? or Reference? to the volue of the temperature * \retval 1 on success * 0 on success * -1 if errors exist */ int get_temperature(int *temp); //////////////////////////////////////////////////////////////////////////// /** * \brief Forced Exit Hibernate Mode Function for MAX17055 * \par Details * This function executes a force exit from hibernate mode. * * \retval returns HibCFG original value before forced Exit Hybernate mode * */ uint16_t forcedExitHyberMode(); protected: /** * @brief Write Register * @details Writes data to max17055 Register * * @parameters reg_addr Registers to write * reg_data Data to write */ int writeReg(const Registers_e reg_addr, uint16_t reg_data); /** * @brief Read Register * @details Reads data from max17055 register * * @parameters reg_addr Register to read */ int32_t readReg(Registers_e reg_addr, uint16_t &value); private: I2C &m_i2cBus; // I2C object }; #endif /* _MAX17055_H_ */