HS-S73-L I2C-Digital-Leistungsmessmodul

HS-S73-L I2C-Digital-Leistungsmessmodul

1、Einführung

Der I2C-Digital-Leistungsmesser ist ein Messgerät, das verschiedene elektronische Module und Stromverbraucher mit einer Spannung von bis zu 26V und einem Strom von bis zu 8A messen kann. Es handelt sich um einen hochauflösenden, hochpräzisen und breitmessungsfähigen Messmodul mit einer maximalen relativen Genauigkeit von ±0,2% (es muss vor der Verwendung eine einfache manuelle Kalibrierung durchgeführt werden).Kann zum Messen des Stromverbrauchs in Solarsystemen, Akkulademessern, Motoren, Hauptbrett oder elektronischen Modulen, zur Bewertung der Batterieleistung und zur Onlineüberwachung der Echtzeit-Spannungsparameter verwendet werden.Das Modul verwendet den TI INA219-Chip mit Nulltemperaturverzerrung für den Strom-/Leistungsmonitoring und einen 2W-Hochleistungs-Niedertemperaturverzerrungs-10mΩ-Halbleiter-Sampelpotentiometer, die Auflösung für Spannung und Strom beträgt jeweils 4mV und 1mA, und die relative maximale Messfehler der Spannung und des Stroms unter vollem Messbereich beträgt nicht mehr als ±0.2%, und bietet 4 I2C-Adressen, die über DIP-Schalter konfiguriert werden können.Der Modul kann den bilateralen Hochseitenstrom (den Strom, der durch die Spannungsquelle oder die positive Pole der Batterie fließt) genau messen. Dies ist besonders nützlich in Solarenergie- oder Coulombmetieranwendungen, bei denen die Batterie sowohl geladen als auch entladen werden muss. Der Benutzer kann durch das Vorzeichen der Stromlesung den Lade- und Entladestatus der Batterie erkennen und auch die Echtzeitspannung, Strom und Leistung der Ladung und Entladung der Batterie verstehen.Im Anwendungsfall von Elektromotoren kann durch Echtzeitüberwachung des Elektromotorstroms überprüft werden, ob der Strom durch Blockieren oder Überlastung zu hoch ist, um rechtzeitig Schutzmaßnahmen zu ergreifen.Außerdem kann mit diesem Modul die Echtzeit-Leistungsaufnahme verschiedener elektronischer Module oder eines gesamten Projekts gemessen werden, um die Batterielaufzeit zu bewerten.

2、Schemazeichnung

3、Modulparameter

Pinbezeichnung

Beschreibung

G

GND(Spannungsversorgungsminus)

V

VCC(Spannungsversorgungsplus)

SDA

Datenpin

SCL

Zeitpin

  • Spannungsversorgung: 3.3V-5V

  • Verbindungsmethode: PH2.0 4P Steckerkabel

  • Montageart: Bausteine fest

4, Platinegröße


5、Arduino Bibliothek hinzufügen

Hier ist der Bezug für die Verwendung der Bibliothek:Bibliothek installieren und verwenden

Bibliothek herunterladen: Klicken Sie zum Herunterladen

米思齐UNO开发板库文件安装步骤(使用代码前先下载安装米思齐库文件):参考链接

6、添加MicroPython环境库文件

米思齐ESP32开发板库文件下载安装步骤(使用代码前先下载安装米思齐库文件):参考链接

7、Arduino IDE Beispielprogramm

Beispielprogramm (UNO-Entwicklungsboard): Klicken Sie zum Herunterladen

#include "DFRobot_INA219.h"
#include <Wire.h>

DFRobot_INA219_IIC     ina219(&Wire, INA219_I2C_ADDRESS4);

float ina219Reading_mA = 1000;
float extMeterReading_mA = 1000;

void setup(){

  while (!ina219.begin()) {
    Serial.println("INA219 初始化失败:请检查I2C接线/地址是否正确");
    delay(1000);
  }

  ina219.linearCalibrate(ina219Reading_mA, extMeterReading_mA);
  Serial.begin(9600);
}

void loop(){
  Serial.println(String("总线电压:") + String(ina219.getBusVoltage_V()));
  Serial.println(String("分流电压:") + String(ina219.getShuntVoltage_mV()));
  Serial.println(String("电流值:") + String(ina219.getCurrent_mA()));
  Serial.println(String("功率值") + String(ina219.getPower_mW()));
  Serial.println(String("------------------"));
  delay(500);

}

ESP32 Python-Beispiel (geeignet für Mixly IDE / Mezishi)
(Entwicklungsboard auswählen Python ESP32 【ESP32 Generic(4MB)】in den Code-Modus wechseln und hochladen ):

from machine import I2C, Pin
import time

INA219_REG_CONFIG        = 0x00
INA219_REG_SHUNTVOLTAGE  = 0x01
INA219_REG_BUSVOLTAGE    = 0x02
INA219_REG_POWER         = 0x03
INA219_REG_CURRENT       = 0x04
INA219_REG_CALIBRATION   = 0x05

INA219_CONFIG_RESET      = 0x8000
INA219_I2C_ADDRESS1      = 0x40
INA219_I2C_ADDRESS2      = 0x41
INA219_I2C_ADDRESS3      = 0x44
INA219_I2C_ADDRESS4      = 0x45

class eIna219BusVolRange_t:
    eIna219BusVolRange_16V = 0x0000
    eIna219BusVolRange_32V = 0x2000

class eIna219PGABits_t:
    eIna219PGABits_1 = 0x0000
    eIna219PGABits_2 = 0x0800
    eIna219PGABits_4 = 0x1000
    eIna219PGABits_8 = 0x1800

class eIna219AdcBits_t:
    eIna219AdcBits_9  = 0
    eIna219AdcBits_10 = 1
    eIna219AdcBits_11 = 2
    eIna219AdcBits_12 = 3

class eIna219AdcSample_t:
    eIna219AdcSample_1   = 0x00
    eIna219AdcSample_2   = 0x01
    eIna219AdcSample_4   = 0x02
    eIna219AdcSample_8   = 0x03
    eIna219AdcSample_16  = 0x04
    eIna219AdcSample_32  = 0x05
    eIna219AdcSample_64  = 0x06
    eIna219AdcSample_128 = 0x07

class eInaMode_t:
    eIna219PowerDown    = 0x00
    eIna219SVolTrig     = 0x01
    eIna219BVolTrig     = 0x02
    eIna219SAndBVolTrig = 0x03
    eIna219AdcOff       = 0x04
    eIna219SVolCon      = 0x05
    eIna219BVolCon      = 0x06
    eIna219SAndBVolCon  = 0x07

class HELLO_STEM_INA219:
    def __init__(self, i2c_bus, i2c_addr=INA219_I2C_ADDRESS1):
        self._i2c = i2c_bus
        self._addr = i2c_addr
        self.calValue = 0x0000
        self.lastOperateStatus = 'eIna219_InitError'

    def _writeReg(self, reg, data):
        try:
            buffer = bytearray([reg, (data >> 8) & 0xFF, data & 0xFF])
            self._i2c.writeto(self._addr, buffer)
            self.lastOperateStatus = 'eIna219_ok'
        except Exception:
            self.lastOperateStatus = 'eIna219_WriteRegError'

    def _readReg(self, reg):
        try:
            self._i2c.writeto(self._addr, bytearray([reg]))
            buffer = self._i2c.readfrom(self._addr, 2)
            self.lastOperateStatus = 'eIna219_ok'
            return (buffer[0] << 8) | buffer[1]
        except Exception:
            self.lastOperateStatus = 'eIna219_ReadRegError'
            return 0

    def _readInaReg(self, reg):
        value = self._readReg(reg)
        if value & 0x8000:
            return value - 0x10000
        return value

    def _readInaRegUnsigned(self, reg):
        return self._readReg(reg)

    def _writeInaReg(self, reg, value):
        self._writeReg(reg, value)

    def scan(self):
        try:
            self._i2c.writeto(self._addr, bytearray([]))
            return True
        except OSError as e:
            if str(e) == '[Errno 5] EIO':
                 return False
            return False

    def begin(self):
        self.lastOperateStatus = 'eIna219_InitError'
        if self.scan():
            self.setBRNG(eIna219BusVolRange_t.eIna219BusVolRange_32V)
            self.setPGA(eIna219PGABits_t.eIna219PGABits_8)
            self.setBADC(eIna219AdcBits_t.eIna219AdcBits_12, eIna219AdcSample_t.eIna219AdcSample_8)
            self.setSADC(eIna219AdcBits_t.eIna219AdcBits_12, eIna219AdcSample_t.eIna219AdcSample_8)
            self.setMode(eInaMode_t.eIna219SAndBVolCon)
            self.calValue = 4096
            self._writeInaReg(INA219_REG_CALIBRATION, self.calValue)
            self.lastOperateStatus = 'eIna219_ok'
            return True
        else:
            return False

    def linearCalibrate(self, ina219Reading_mA, extMeterReading_mA):
        if ina219Reading_mA == 0:
            return
        new_calValue = int((extMeterReading_mA / ina219Reading_mA) * self.calValue) & 0xFFFE
        self.calValue = new_calValue
        self._writeInaReg(INA219_REG_CALIBRATION, self.calValue)

    def getBusVoltage_V(self):
        reg_val = self._readInaRegUnsigned(INA219_REG_BUSVOLTAGE)
        return float(reg_val >> 3) * 0.004

    def getShuntVoltage_mV(self):
        reg_val = self._readInaReg(INA219_REG_SHUNTVOLTAGE)
        return float(reg_val) * 0.01

    def getCurrent_mA(self):
        return float(self._readInaReg(INA219_REG_CURRENT))

    def getPower_mW(self):
        return float(self._readInaReg(INA219_REG_POWER)) * 20.0

    def setBRNG(self, value):
        conf = self._readInaRegUnsigned(INA219_REG_CONFIG)
        conf &= ~0x2000
        conf |= value
        self._writeInaReg(INA219_REG_CONFIG, conf)

    def setPGA(self, bits):
        conf = self._readInaRegUnsigned(INA219_REG_CONFIG)
        conf &= ~0x1800
        conf |= bits
        self._writeInaReg(INA219_REG_CONFIG, conf)

    def _get_adc_value(self, bits, sample):
        if bits < eIna219AdcBits_t.eIna219AdcBits_12 and sample > eIna219AdcSample_t.eIna219AdcSample_1:
            return -1
        if bits < eIna219AdcBits_t.eIna219AdcBits_12:
            return bits
        else:
            return 0x08 | sample

    def setBADC(self, bits, sample):
        value = self._get_adc_value(bits, sample)
        if value == -1:
            return
        conf = self._readInaRegUnsigned(INA219_REG_CONFIG)
        conf &= ~0x0780
        conf |= value << 7
        self._writeInaReg(INA219_REG_CONFIG, conf)

    def setSADC(self, bits, sample):
        value = self._get_adc_value(bits, sample)
        if value == -1:
            return
        conf = self._readInaRegUnsigned(INA219_REG_CONFIG)
        conf &= ~0x0078
        conf |= value << 3
        self._writeInaReg(INA219_REG_CONFIG, conf)

    def setMode(self, mode):
        conf = self._readInaRegUnsigned(INA219_REG_CONFIG)
        conf &= ~0x0007
        conf |= mode
        self._writeInaReg(INA219_REG_CONFIG, conf)

    def reset(self):
        self._writeInaReg(INA219_REG_CONFIG, INA219_CONFIG_RESET)


i2c = I2C(1, scl=Pin(22), sda=Pin(21), freq=400000)
sensor = HELLO_STEM_INA219(i2c, i2c_addr=INA219_I2C_ADDRESS4)
if sensor.begin():
    print("INA219 初始化成功!")
else:
    print("INA219 初始化失败,请检查接线和地址!")

import machine


while True:
    print(('总线电压:' + str(sensor.getBusVoltage_V())))
    print(('分流电压:' + str(sensor.getShuntVoltage_mV())))
    print(('电流: ' + str(sensor.getCurrent_mA())))
    print(('功率: ' + str(sensor.getPower_mW())))
    time.sleep(1)

8, Mixly-Beispielprogramm (Graphische Sprache)

Beispielprogramm (UNO-Board):2、第二步将UNO开发板的库文件下载后解压在桌面。

示例程序(ESP32开发板):2、第二步将UNO开发板的库文件下载后解压在桌面。

9, Testumgebung aufbauen

Testumgebung für Arduino UNO einrichten

Vorbereiten Sie die Komponenten:

  • UNO-R3 Entwicklungsboard *1

  • UNO-R3 EXP-Erweiterungsplatte *1

  • USB type-c Datenkabel *1

  • HS-S73-L I2C-Digital-Leistungsmessmodul *1

  • LED-Leuchtmittelmodul *1

  • PH2.0 4P-Doppelkopfsteckerleitung *1

Schaltplan der Leitung:

ESP32 Python Testumgebung Einrichtung

10、Video-Tutorial

Arduino UNO Video-Tutorial:Klicken, um anzuzeigen

ESP32 Python Videoanleitung:

11、Testergebnis

Arduino UNO Testergebnis:

Busspannung, Streuspannung, Stromwert, Leistungswert werden auf dem Serielschnittbildschirm angezeigt.