前面简单介绍过INA219芯片的一些知识,本次直接使用从网上购得的INA219模块做实验。
其工作原理图:
采样电阻使用的是0.1欧姆的电阻。使用时要注意,采样电路中一定要加上限流电阻,否则会烧坏采样电阻的。
老规矩,拿到手的模块一定要测试一下,依旧使用ESP8266。
测试方案使用以下方案:
1、采样电路在开路状态下,相当于采样电流0A。
2、加入LED电路,测量mA级的测量数据。
3、搭建1A级电路,确认测量结果。
其实第一个测量方案主要是为了验证买到手的模块有没问题。
Arduino程序如下:
/** * 测试INA219 * 接线方式 * INA219 ESP8266 * --------------------------- * VCC 3.3V * GND GND * SCL D1(GPIO5) * SDA D2(GPIO4) * --------------------------------测试方式1:Vin悬空,不接入采样电路 * Vin+ 悬空 * Vin- 悬空 * --------------------------------测试方式2:采样电路使用LED,mA级别 * Vin+ * Vin- * --------------------------------测试方式1:采样电路1A级别 * Vin+ * Vin- * --------------------------- */ #include <Wire.h> #include <Adafruit_INA219.h> Adafruit_INA219 ina219; void setup(void) { Serial.begin(115200); while (!Serial) { delay(1); } // 初始化INA219. // 缺省参数:32V, 2A,可以通过setCalibration函数改变 if (! ina219.begin()) { Serial.println("没有找到INA219!"); while (1) { delay(10); } } // 改变参数的例子: // To use a slightly lower 32V, 1A range (higher precision on amps): //ina219.setCalibration_32V_1A(); // Or to use a lower 16V, 400mA range (higher precision on volts and amps): //ina219.setCalibration_16V_400mA(); Serial.println("找到INA219,开始测量......"); } void loop(void) { float shuntvoltage = 0; // 分流电压 float busvoltage = 0; // 总线电压 float current_mA = 0; // 电流 float loadvoltage = 0; // 工作电压 float power_mW = 0; // 功率 shuntvoltage = ina219.getShuntVoltage_mV(); busvoltage = ina219.getBusVoltage_V(); current_mA = ina219.getCurrent_mA(); power_mW = ina219.getPower_mW(); loadvoltage = busvoltage + (shuntvoltage / 1000); Serial.print("Bus Voltage: "); Serial.print(busvoltage); Serial.println(" V"); Serial.print("Shunt Voltage: "); Serial.print(shuntvoltage); Serial.println(" mV"); Serial.print("Load Voltage: "); Serial.print(loadvoltage); Serial.println(" V"); Serial.print("Current: "); Serial.print(current_mA); Serial.println(" mA"); Serial.print("Power: "); Serial.print(power_mW); Serial.println(" mW"); Serial.println(""); delay(2000); }
测量结果如下,结果有波动,与预想的有一点点出入,能接受。