This is a follow-on to my previous post on this device. Unfortunately, the BLE protocol isn’t good enough for configuring the device, although it is fine for data logging.
Because of that, I’ve dug into the circuit.
The control happens on the display board. The connection is by a 8-pin JST-PH cable.
Pin | Signal | Description |
---|---|---|
1 | On/off | Indicates whether the load is on or off |
2 | RX1 | UART receive from left energy monitor |
3 | GND? | Probably ground |
4 | CV | Control voltage, eventually becomes gate voltage |
5 | GND | Ground |
6 | RX2 | UART receive from right energy monitor |
7 | TX | UART transmit to both energy monitors |
8 | 3.3V | 3.3V power |
The most interesting part here are the HLW8110 energy monitors.
They communicate over UART, 9600baud, 8E1. Both monitors are connected to the same TX pin on the MCU, and then the MCU listens to for responses from both simultaneously.
Why are there two? I’m not sure. I can’t figure out how the MCU reads the thermistor, so perhaps one of the energy monitors is used as a hacky ADC/amplifier. I haven’t had much luck probing for a conclusive answer, although the wiring for the thermistor voltage divider goes through the same area.
CV is a DC voltage that varies to control the current. In some testing, I saw it range from 20mV (off) to 120mV (10A). It is generated by the 12-bit DAC on the MCU.
Communications implementation
I’ve included a Pulseview waveform of the UART communications.
Every 11ms, the MCU sends a command to read from the energy monitors’ registers.
6/7 of these reads are of the 0x26 register, which contains the RMS voltage (“RmsU” in the datasheet–not sure why, but “U” seems to mean “voltage”). The 7th read is of the 0x24 register, which contains the RMS current (“RmsI” in the datasheet).
Unfortunately, it seems like only about 50% of these reads are successful. Half the reads, the energy monitors don’t respond. I’m not sure why, but it seems to be fairly consistent between the two chips, i.e. most of the time, both will respond, or both will not respond.
Limitations
There’s few limitations:
Reads from the energy monitors happen at 88Hz. This can perhaps be increased to 140Hz, but no more due to the baud rate. And the energy monitors fail to respond to half of reads. These two things lead to a slow control loop.
The input diode is a Vishay V40100G (and remember–this device has authentcity issues already). Assuming Vf=0.5V, heatsink Rsa=8K/W, we get a max power of 8W, or a max current of 15A, much less than the 25A the manufacturer claims, but still more than enough for most applications.
The copper is unlikely to be able to handle 25A either, but I don’t have a way to measure miliohms. Copper thickness is 1oz.
There is no fusing.
Conclusion
A really nice device, but with overstated specs and with poor software. Definitely good enough to test batteries and power supplies, but not good enough to work with sudden changes in voltage or to emulate complex loads.
The hardware interface is simple enough though, so it would be possible and straightforward to design an improved control board. I don’t have plans to do so at this time, but hopefully this post will be a good starting point if such a project is undertaken.