解码从 ATM90E32AS 电能表 IC 接收到的数据

Decoding the received data from ATM90E32AS energy meter IC

我写了一个python代码(raspberry pi)来接收来自ATM90E32AS电表IC的电压、电流和功率值。我正在使用 spidev 库与电表 IC 进行 SPI 通信。我初始化了两个字节数组(每个 4 字节宽)用于读取和写入能量计 IC,如

writeBuffer = bytearray ([0x00,0x00,0x00,0x00])
readBuffer = bytearray ([0x00,0x00,0x00,0x00]) 

例如读取有源R相电压我初始化寄存器值如

VrRead_Reg = bytearray ([0x80, 0xD9])

然后我尝试使用以下子程序将上述值写入 IC 以读取 R 相电压

def Vr_read():
    writeBuffer[0] = VrRead_Reg[0]
    writeBuffer[1] = VrRead_Reg[1]
    #print(writeBuffer)
    readBuffer = spi.xfer(writeBuffer)
    print("Vr:",readBuffer)
    time.sleep(0.5)

我得到的输出类似于

Vr: [255,255,89,64]
Vr: [255,255,89,170]
Vr: [255,255,89,220]
Vr: [255,255,89,1]
Vr: [255,255,89,10]

我测量了电源电压,显示为 230V。然后我尝试将上述输出与测得的电压相匹配。这里第三个字节89对应230V。然后我使用自耦变压器改变电压,这次 220V 第三字节值变为 85,210V 变为 81,100V 变为 39,依此类推。

我不知道如何将 89 与 230V 以及其他字节相关联。请帮忙解码上面的输出。

做一些比率计算:

(consider the max value of a byte is 255)
255 / 89 * 230 = 658.99 (approximately 660V)

85 / 255 * 660 = 220(220V)
81 / 255 * 660 = 209.65(210V)
39 / 255 * 660 = 100.94(100V)

不过你最好找设备说明书参考一下。