Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
INA226.h
00001 /* 00002 * mbed library program 00003 * INA226 High-or Low-Side Measurement,Bi-Directional CURRENT/POWER MONITOR with I2C Interface 00004 * by Texas Instruments 00005 * 00006 * Copyright (c) 2015,'17 Kenji Arai / JH1PJL 00007 * http://www.page.sannet.ne.jp/kenjia/index.html 00008 * http://mbed.org/users/kenjiArai/ 00009 * Created: January 25th, 2015 00010 * Revised: August 23rd, 2017 00011 */ 00012 /* 00013 *---------------- REFERENCE ---------------------------------------------------------------------- 00014 * Original Information 00015 * http://www.ti.com/product/INA226/description 00016 * http://www.ti.com/lit/ds/symlink/ina226.pdf 00017 * Device kit 00018 * http://strawberry-linux.com/catalog/items?code=12031 00019 * http://strawberry-linux.com/catalog/items?code=12226 00020 */ 00021 00022 #ifndef MBED_INA226 00023 #define MBED_INA226 00024 00025 /////////// ADDRESS ///////////////////////////// 00026 // 7bit address = 0b1000000(0x40) 00027 // G=GND, V=VS+, A=SDA, L=SCL 00028 // e.g. _VG: A1=VS+, A0=GND 00029 // -> Please make sure your H/W configuration 00030 // Set data into "addr" 00031 #define INA226_ADDR_GG (0x40 << 1) 00032 #define INA226_ADDR_GV (0x41 << 1) 00033 #define INA226_ADDR_GA (0x42 << 1) 00034 #define INA226_ADDR_GL (0x43 << 1) 00035 #define INA226_ADDR_VG (0x44 << 1) 00036 #define INA226_ADDR_VV (0x45 << 1) 00037 #define INA226_ADDR_VA (0x46 << 1) 00038 #define INA226_ADDR_VL (0x47 << 1) 00039 #define INA226_ADDR_AG (0x48 << 1) 00040 #define INA226_ADDR_AV (0x49 << 1) 00041 #define INA226_ADDR_AA (0x4a << 1) 00042 #define INA226_ADDR_AL (0x4b << 1) 00043 #define INA226_ADDR_LG (0x4c << 1) 00044 #define INA226_ADDR_LV (0x4d << 1) 00045 #define INA226_ADDR_LA (0x4e << 1) 00046 #define INA226_ADDR_LL (0x4f << 1) 00047 00048 /////////// REGISTER DEFINITION ///////////////// 00049 #define INA226_CONFIG 0x00 00050 #define INA226_SHUNT_V 0x01 00051 #define INA226_BUS_VOLT 0x02 00052 #define INA226_POWER 0x03 00053 #define INA226_CURRENT 0x04 00054 #define INA226_CALBLATION 0x05 00055 #define INA226_MASK_EN 0x06 00056 #define INA226_ALERT_LMT 0x07 00057 #define INA226_DIE_ID 0xff 00058 00059 /////////// PARAMETER SETTING for Configuration Reg. ////////////////////////// 00060 // Set data into "shunt_register" 00061 #define INA226_PAR_R_2MORM 2 // Strawberry Linux borad 00062 #define INA226_PAR_R_25MOHM 25 00063 #define INA226_PAR_R_MORM(x) (x) 00064 // Set data into "average", Averaging Mode 00065 #define INA226_PAR_A_1 0 // Default 00066 #define INA226_PAR_A_4 1 00067 #define INA226_PAR_A_16 2 00068 #define INA226_PAR_A_64 3 00069 #define INA226_PAR_A_128 4 00070 #define INA226_PAR_A_256 5 00071 #define INA226_PAR_A_512 6 00072 #define INA226_PAR_A_1024 7 00073 // Set data into "b_volt_cnv_time" Bus Voltage Conversion Time 00074 #define INA226_CFG_BUS_V_TR140 0 00075 #define INA226_CFG_BUS_V_TR204 1 00076 #define INA226_CFG_BUS_V_TR332 2 00077 #define INA226_CFG_BUS_V_TR588 3 00078 #define INA226_CFG_BUS_V_T1R1 4 // Default 00079 #define INA226_CFG_BUS_V_T2R116 5 00080 #define INA226_CFG_BUS_V_T4R156 6 00081 #define INA226_CFG_BUS_V_T8R244 7 00082 // Set data into "s_volt_cnv_time", Shunt Voltage Conversion Time 00083 #define INA226_CFG_SHT_V_TR140 0 00084 #define INA226_CFG_SHT_V_TR204 1 00085 #define INA226_CFG_SHT_V_TR332 2 00086 #define INA226_CFG_SHT_V_TR588 3 00087 #define INA226_CFG_SHT_V_T1R1 4 // Default 00088 #define INA226_CFG_SHT_V_T2R116 5 00089 #define INA226_CFG_SHT_V_T4R156 6 00090 #define INA226_CFG_SHT_V_T8R244 7 00091 // Set data into "mode", Operating Mode 00092 #define INA226_PAR_M_PDWN 0 00093 #define INA226_PAR_M_SHNT_TRG 1 00094 #define INA226_PAR_M_BUS_TRG 2 00095 #define INA226_PAR_M_SHNTBUS_TRG 3 00096 #define INA226_PAR_M_ADC_OFF 4 00097 #define INA226_PAR_M_SHNT_CONT 5 00098 #define INA226_PAR_M_BUS_CONT 6 00099 #define INA226_PAR_M_SHNTBUS_CONT 7 // Default 00100 00101 ////////////// DATA TYPE DEFINITION /////////////////////// 00102 typedef struct { 00103 uint8_t addr; 00104 uint16_t shunt_register; 00105 uint8_t average; 00106 uint8_t b_volt_cnv_time; 00107 uint8_t s_volt_cnv_time; 00108 uint8_t mode; 00109 uint16_t calibration_data; 00110 } INA226_TypeDef; 00111 00112 ////////////// DEFAULT SETTING //////////////////////////// 00113 // Standard parameter for easy set-up 00114 const INA226_TypeDef ina226_std_paramtr = { 00115 // I2C Address 00116 INA226_ADDR_GG, 00117 // CONFIG REG 00118 INA226_PAR_R_2MORM, // 2 milli-ohm 00119 INA226_PAR_A_1, // Averaging Mode 00120 INA226_CFG_BUS_V_T1R1, 00121 INA226_CFG_SHT_V_T1R1, 00122 INA226_PAR_M_SHNTBUS_CONT, 00123 // CALBLATION REG 00124 2560 00125 }; 00126 00127 /** INA226 High-or Low-Side Measurement,Bi-Directional CURRENT/POWER MONITOR with I2C Interface 00128 * 00129 * @code 00130 * //--------- Default setting ----------------- 00131 * #include "mbed.h" 00132 * #include "INA226.h" 00133 * 00134 * // I2C Communication 00135 * INA226 current(dp5, dp27, INA226_ADDR_GG); 00136 * // If you connected I2C line not only this device but also other devices, 00137 * // you need to declare following method. 00138 * I2C i2c(dp5, dp27); 00139 * INA226 current(I2C& p_i2c, INA226_ADDR_GG); 00140 * 00141 * int main() { 00142 * while(1){ 00143 * printf("I=%+6.3f [A]\r\n", current.read_current()); 00144 * wait(1.0): 00145 * } 00146 * } 00147 * //--------- Detail setting ----------------- 00148 * #include "mbed.h" 00149 * #include "INA226.h" 00150 * 00151 * const INA226_TypeDef ina226_my_paramtr = { 00152 * // I2C Address 00153 * INA226_ADDR_GG, 00154 * // CONFIG REG 00155 * INA226_PAR_R_100MOHM, // 100 milli-ohm 00156 * INA226_PAR_A_1, // Averaging Mode 00157 * INA226_CFG_BUS_V_T1R1, // Bus Voltage Conversion Time 00158 * INA226_CFG_SHT_V_T1R1, // Shunt Voltage Conversion Time 00159 * INA226_PAR_M_SHNTBUS_CONT,// Operating Mode 00160 * // CALBLATION REG 00161 * 2560 00162 * }; 00163 * 00164 * I2C i2c(dp5,dp27); 00165 * INA226 current(I2C& p_i2c, &ina226_my_paramtr); 00166 * 00167 * int main() { 00168 * while(1){ 00169 * printf("I=%+6.3f [A]\r\n", current.read_current()); 00170 * wait(1.0): 00171 * } 00172 * } 00173 * @endcode 00174 */ 00175 00176 class INA226 00177 { 00178 public: 00179 /** Configure data pin 00180 * @param data SDA and SCL pins 00181 * @param parameter address chip (INA226_TypeDef) 00182 * @param or just set address or just port 00183 */ 00184 INA226(PinName p_sda, PinName p_scl, const INA226_TypeDef *ina226_parameter); 00185 INA226(PinName p_sda, PinName p_scl, uint8_t addr); 00186 INA226(PinName p_sda, PinName p_scl); 00187 00188 /** Configure data pin (with other devices on I2C line) 00189 * @param I2C previous definition 00190 * @param parameter address chip (INA226_TypeDef) 00191 * @param or just set address or just port 00192 */ 00193 INA226(I2C& p_i2c, const INA226_TypeDef *ina226_parameter); 00194 INA226(I2C& p_i2c, uint8_t addr); 00195 INA226(I2C& p_i2c); 00196 00197 /** Read Current data 00198 * @param none 00199 * @return current [mA] 00200 */ 00201 float read_current(void); 00202 float read_current_by_shuntvolt(void); 00203 00204 /** Read Power data 00205 * @param none 00206 * @return power [w] 00207 */ 00208 float read_power(void); 00209 00210 /** Read Bus voltage 00211 * @param none 00212 * @return voltage [v] 00213 */ 00214 float read_bus_voltage(void); 00215 00216 /** Read Shunt voltage data 00217 * @param none 00218 * @return voltage [v] 00219 */ 00220 float read_shunt_voltage(void); 00221 00222 /** Read Shunt voltage data 00223 * @param none 00224 * @return voltage related value 00225 */ 00226 int16_t read_shunt_raw_voltage(void); 00227 00228 /** Read configration reg. 00229 * @param none 00230 * @return configrartion register value 00231 */ 00232 uint16_t read_config(void); 00233 00234 /** Set configration reg. 00235 * @param configuration data 00236 * @return configrartion register value 00237 */ 00238 uint16_t set_config(uint16_t cfg); 00239 00240 /** Read calibration reg. 00241 * @param none 00242 * @return calibration register value 00243 */ 00244 uint16_t read_calb(void); 00245 00246 /** Set calibration reg. 00247 * @param calibration data 00248 * @return calibration register value 00249 */ 00250 uint16_t set_calb(uint16_t clb); 00251 00252 /** Read Mask/Enable reg. 00253 * @param none 00254 * @return calibration register value 00255 */ 00256 uint16_t read_msk_enbl(void); 00257 00258 /** Set Mask/Enable reg. 00259 * @param mask enable data 00260 * @return calibration register value 00261 */ 00262 uint16_t set_msk_enbl(uint16_t clb); 00263 00264 /** Read ID 00265 * @param none 00266 * @return ID 00267 */ 00268 uint8_t read_ID(); 00269 00270 /** Set I2C clock frequency 00271 * @param freq. 00272 * @return none 00273 */ 00274 void frequency(int hz); 00275 00276 /** Read register (general purpose) 00277 * @param register's address 00278 * @return register data 00279 */ 00280 uint8_t read_reg(uint8_t addr); 00281 00282 /** Write register (general purpose) 00283 * @param register's address 00284 * @param data 00285 * @return register data 00286 */ 00287 uint8_t write_reg(uint8_t addr, uint8_t data); 00288 00289 protected: 00290 I2C *_i2c_p; 00291 I2C &_i2c; 00292 00293 void initialize(void); 00294 00295 private: 00296 uint8_t id_number; 00297 INA226_TypeDef ina226_set_data; 00298 int32_t scale_factor; 00299 uint8_t dt[4]; 00300 }; 00301 00302 #endif // MBED_INA226 00303
Generated on Wed Aug 10 2022 13:36:09 by
1.7.2