HS-S73P I2C-Digitalkraftmeßmodul*

HS-S73P I2C-Digitalkraftmeßmodul*

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

I2C-Digitalstrommessmodul-HS-S73P SchemaKlicken Sie zum Anzeigen

3、Modulparameter

Pinbezeichnung

Beschreibung

G

GND(Spannungsversorgungsminus)

V

VCC(Spannungsversorgungsplus)

A

Datenpin

L

Zeitpin

  • Spannungsversorgung: 3.3V-5V

  • Verbindungsmethode: PH2.0 4P Steckerkabel

  • Montageart: Schraubenfestigung

4, Platinegröße

5、Arduino IDE Beispielprogramm

Achtung: Wenn beim Hochladen des Programms eine Fehlermeldung bezüglich der Bibliotheksdateien angezeigt wird, laden Sie bitte zuerst die Bibliotheksdateien herunter!
Anleitung zum Herunterladen und Importieren der Bibliotheksdateien für das Arduino IDE:
Klicken Sie zum Anzeigen

Beispielprogramm (UNO-Entwicklerboard):

#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);

}

6、ESP32 Python Beispiel (für Mixly IDE /米思齐)

Entwicklungsboard auswählen Python ESP32 [ESP32 Generic(4MB)] auf den Code-Modus umschalten und hochladen

Achtung: Wenn beim Hochladen des Programms eine Fehlermeldung bezüglich der Bibliotheksdateien angezeigt wird, laden Sie bitte zuerst die Bibliotheksdateien herunter!
米思齐(Mixly)IDE ESP32库文件下载及导入教程:
Klicken Sie zum Anzeigen

示例程序(ESP32-Python):

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)

7、米思齐 Mixly 示例程序(图形化语言) in Deutsch

Beispielprogramm (UNO-Entwicklerboard):2、第二步将UNO开发板的库文件下载后解压在桌面。
Achtung: Wenn beim Hochladen des Programms eine Fehlermeldung bezüglich der Bibliotheksdateien angezeigt wird, laden Sie bitte zuerst die Bibliotheksdateien herunter!
米思齐(Mixly)IDE Arduino库文件下载及导入教程:Klicken Sie zum Anzeigen

Beispielprogramm (ESP32-Entwicklungsboard):2、第二步将UNO开发板的库文件下载后解压在桌面。
Achtung: Wenn beim Hochladen des Programms eine Fehlermeldung bezüglich der Bibliotheksdateien angezeigt wird, laden Sie bitte zuerst die Bibliotheksdateien herunter!
米思齐(Mixly)IDE ESP32库文件下载及导入教程:
Klicken Sie zum Anzeigen

8、Testumgebung Einrichtung

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-P I2C-Digital-Leistungsmessmodul *1

  • LED-Leuchtmittelmodul *1

  • PH2.0 4P-Doppelkopfsteckerleitung *1

Schaltplan der Leitung:

9、Video-Tutorial

Video-Tutorial:Klicken Sie zum Anzeigen

10、Testergebnis

Arduino UNO Testergebnis:

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

ESP32 Testergebnis:

Wird aktualisiert...