INA219:高精度双向电流/功率I2C接口监测器

需积分: 34 13 下载量 32 浏览量 更新于2024-07-18 收藏 1.14MB PDF 举报
"INA219规格书" INA219是一款高性能、低功耗的电流检测和电源监控芯片,特别适合在小体积应用中集成。它通过I2C或SMBUS兼容接口提供灵活的控制和读取功能,能够快速准确地测量电流、电压和功率。这款芯片的主要特点包括: 1. 宽电压范围:INA219可以监测从0到26V的总线电压,这使得它适用于各种电源系统。 2. 双向电流/功率监测:设备能检测正向和反向电流,并且可以计算出系统的功率消耗,这对于实时电源管理至关重要。 3. 可编程地址:该芯片有16个可编程的I2C地址,允许在一个系统中同时连接多个INA219,以监控多个不同的电流路径。 4. 高精度:在全温度范围内,INA219的最大精度可达0.5%,型号INA219B提供了更高的精度保证。 5. 滤波选项:用户可以选择不同的滤波设置,以适应不同速度和稳定性的需求,确保测量数据的准确性。 6. 校准寄存器:内部的校准寄存器结合可编程增益放大器(PGA),使用户能够直接读出以安培为单位的电流值,无需外部计算。 7. 功率计算:一个额外的乘法器寄存器用于实时计算功率,以瓦特为单位,简化了电源监控系统的实现。 8. 封装形式:INA219提供了SOT23-8和SOIC-8两种封装,适应不同的空间要求,便于在紧凑的设计中使用。 9. 接口特性:I2C或SMBUS兼容接口使得通信简单高效,支持多种微控制器平台。 该规格书详细介绍了INA219的功能、电气特性、引脚配置、工作条件以及应用电路示例。此外,还提供了样品购买和技术文档链接,方便用户获取更多关于INA219的信息和支持。对于设计工程师来说,INA219是实现精确电流和电源监控的理想选择,特别是在需要小型化和高效能的嵌入式系统中。
1018 浏览量
51单片机IINA219 测电流电压和功率。 #include "LCD1602\LCD1602.h" #include "INA219_DRV\INA219_DRV.h" #include "common\common.h" #define TH0_VALUE 0x4B #define TL0_VALUE 0xFF //50ms per cycle. sbit BtnRefreshMode = P3^2; bit RefreshRate = 0; //0: 0.8s, 1: 0.5s bit RefreshFlag = 0; void RefreshData(void) { unsigned short BusVolt, Current, Power; unsigned short OffsetCurrent, OffsetPower; BusVolt = INA219_GetBusVolt(); PrintChar(0, 0, BusVolt/10000+48); PrintChar(1, 0, (BusVolt000)/1000+48); PrintChar(3, 0, (BusVolt00)/100+48); PrintChar(4, 0, (BusVolt0)/10+48); PrintChar(5, 0, BusVolt+48); OffsetCurrent = (BusVolt >> 9) + 2; //Gather statistics of the measured current under various voltage conditions when no load is connected to the output port. Use Excel to do curve fitting. Current = INA219_GetCurrent(); if(Current > OffsetCurrent) Current -= OffsetCurrent; else Current = 0; PrintChar(10, 0, Current/1000+48); PrintChar(12, 0, (Current00)/100+48); PrintChar(13, 0, (Current0)/10+48); PrintChar(14, 0, Current+48); OffsetPower = ((BusVolt >> 3) * OffsetCurrent)/125 + 6; Power = INA219_GetPower(); if(Power > OffsetPower) Power -= OffsetPower; else Power = 0; PrintChar(0, 1, Power/10000+48); PrintChar(1, 1, (Power000)/1000+48); PrintChar(3, 1, (Power00)/100+48); PrintChar(4, 1, (Power0)/10+48); PrintChar(5, 1, Power+48); } int main(void) { INA219_Init(); LCD_Init(); TMOD &= 0xF0; TMOD |= 0x01; //Timer 0 works in Mode 1 (16-bit Timer). TH0 = TH0_VALUE; TL0 = TL0_VALUE; PrintChar(2, 0, '.'); PrintChar(6, 0, 'V'); PrintChar(11, 0, '.'); PrintChar(15, 0, 'A'); PrintChar(2, 1, '.'); PrintChar(6, 1, 'W'); PrintStr(10, 1, "R:0.8s"); RefreshData(); EA = 1; //Global Interrupt Enable ET0 = 1; //Timer 0 Interrupt Enable TR0 = 1; //Enable Timer 0. while(1) { if(RefreshFlag) { RefreshData(); RefreshFlag = 0; } if(BtnRefreshMode == 0) //If the