The Huawei R4850G2 is a very capable 48V Telecommunications grade power supply available brand-new at cheap surplus prices (normally under $100 USD). Rated at 3000W, it can deliver a considerable 56.1A when powered from a suitable 200-240V rated AC source. The CAN2.0B interface allows for online monitoring and/or adjustment of the output voltage and current.
Given the power supply is a Telecoms spare part (most likely for a Huawei mobile phone Base Terminal Station), a surprisable amount of official documentation exists on the hardware from the manufacturer:
But when it comes to the CAN communications protocol and operation, the best source of information, although sketchy, comes from radio/electronics enthusiasts in Chinese forums.
We strive to demystify some of the details below and provide reference software to talk to the unit via CAN.
I was first made aware of the R4850G2 by YouTuber Schematix. He presented a 17 minute video on the power supply at Cheap 3Kw PSU for Induction Heater ll Huawei R4850G2 PSU
My PSU was purchased from a local Australian ebay merchant (link here) for $49 AUD plus $15.35 shipping (Approximately $50 USD). However, if shipping from Australia is cost prohibitive, Aliexpress and Alibaba appear to also be a good source.
While Schematix details modifying the supply to make good connection to the edge connector, you can pick up a suitable connector: i.e. For Huawei R4850G2 rectifier module communication power plug. This set me back $23.28 AUD, but allows for a more professional connection.
The power supply is designed to be inserted into a slot/backplane and hence all connections to the power supply is by means of a edge connector. Inclusion of Pre-charge pins allow multiple units to be paralleled and hot swapped.
Huawei go someway in documenting the connector in version 1.4 of their User Manual. However, they miss off two critical pins required to enable an output. Next to the CAN pins are what we call ‘slot detect 1’ and ‘slot detect 2’
As indicated earlier, I had also purchased a mating connector for the PSU from ebay. Below are the pictures on arrival.
On the bottom of the connector is the part number. It appears to be a connector from Chinese manufacturer Jonhon. The part number is DP4SC0504-001.
The drawing doesn’t include the flying lead connectors for the CAN or Slot Detection, only making mention that there are five signal contacts with wires and termination when customised.
The connectors appear to be JST SM connectors. The female is the Slot Detection (‘on/off’) connection, while the male is the CAN Bus. You can choose to purchase some, or cut them off and add your own. For the time being, I have shoved a 0.1″ header into the Slot Detection.
To enable the power supply, connect both the slot detect 1 and slot detect 2 pins to OUTPUT- (negative).
While not mandatory to enable the output, you should also connect Pre-Charge to OUTPUT-. For those using the DP4SC0504-001, the Pre-Charge is wired internally to the OUTPUT-.
At this stage, you should have a dumb 53.5V, 56.1A power supply unit.
CAN Interface & Protocol
The CAN interface operates at 125kbps with extended 29 bit identifiers.
On power up, the unit will send out unsolicited packets and this can be useful in ensuring your hardware is working correctly.
To request statistics such as the Input Voltage/Frequency/Current, Output Voltage/Current, Efficiency etc. one can send a single eight byte zero padded frame to the CAN address/ID 0x108040FE. The device should respond with a series of frames with ID 0x1081407F conforming the following format:
The 2nd byte in the frame appears to indicate what parameter is being sent. The parameter’s value is contained in the last four bytes with byte 7 being the least significant byte.
For example, this is a output from candump:
can0 1081407F  01 0E 00 00 00 00 00 0A can0 1081407F  01 70 00 00 00 01 A6 84 (Input Power) can0 1081407F  01 71 00 00 00 00 C8 0A (Input Freq) can0 1081407F  01 72 00 00 00 00 01 C2 (Input Current) can0 1081407F  01 73 00 00 00 01 80 8E (Output Power) can0 1081407F  01 74 00 00 00 00 03 A4 (Efficiency) can0 1081407F  01 75 00 00 00 00 D5 C8 (Output Voltage) can0 1081407F  01 76 00 00 00 00 04 6A (Maximum Output Current) can0 1081407F  01 78 00 00 00 03 C0 80 (Input Voltage) can0 1081407F  01 7F 00 00 00 00 64 00 (Output Stage Temperature) can0 1081407F  01 80 00 00 00 00 70 00 (Input Stage Temperature) can0 1081407F  01 81 00 00 00 00 07 B2 can0 1081407F  01 82 00 00 00 00 07 32 (Output Current) can0 1081407E  01 83 00 10 00 00 00 00
Note: It’s currently not known what the two different (0x81 & 0x82) current parameters are. I personally find 0x81 is more accurate compared to a bench meter in series with the output. If you know more, please leave a comment below.
To set either the output voltage or current limit, send a frame to 0x108180FE with the following format:
Again, the 2nd byte in the frame indicates what parameter is being set.
The power supply should acknowledge the command with a packet of ID 0x1081807E. The ack frame should have identical contents, except if an error has occurred, in which case the first byte contains 0x21.
If the set value is out of range, an error will be flagged. This is a useful way of determining the range of acceptable values.
Modes of Operation
The power supply can operate in two different modes – we call this on-line and off-line.
Off-line is when there is no CAN communications – i.e. the power supply is operating in standalone mode. Off-line values are non-volatile and also used as the default value when the power supply first powers up.
On-line is when there is valid CAN communications addressed to the power supply. This mode will time-out approximately 60 seconds after the last CAN message and will be indicated on the front panel via a flashing yellow alarm indicator.
On-line values are volatile and set to the default values upon entry into this mode.
Therefore, if you send a command to set the on-line output voltage (0x00), the output voltage should be reflected immediately. If no further messages are sent (to any valid CAN ID), the output voltage will return to the default off-line voltage after approximately 60 seconds. Provided a valid CAN message is sent within the timeout period, the output should remain equivalent to the on-line output voltage parameter.
To date, I’m unaware how to read the above parameters back. If you know more, please leave us a comment below.
While the data sheet indicates the output voltage is adjustable from 42~58VDC, different ranges exist between on-line and off-line:
- Output Voltage – Online – 41.5 to 58.5 volts, 0.1A steps
- Output Voltage – Offline – 48 to 58.5 volts, 0.1A steps
- Current Limiting – 0 to 60A, 0.1A steps
To test the protocol, I have developed some reference software at https://github.com/craigpeacock/Huawei_R4850G2_CAN
It takes advantage of the Linux SocketCAN interface meaning you can use it on a Linux Desktop with an appropriate SocketCAN CAN Interface Adapter, or on embedded platforms such as the Raspberry PI / Beaglebone with suitable controllers/transceivers. Personally, I used the Beaglebone Black to develop and test the code.
Current ‘Limiting’ or ‘Sharing’
I still have some uncertainly surrounding the current limiting and its behavior.
According to reports scattered in the forums, the multiplier for the maximum current setting is x30. The same value is used in both the setup of the maximum current and the reporting in the statistics, hence the statistics will always report the correct entered value.
When using a multiplier of 30, I had set up an electrical test with the current limiting set to what I believed is 2A. However, when I tested this threshold, I came to the conclusion current limiting would kick in at 150% of the desired setpoint and try to maintain this value.
I was lucky enough to have recorded all the statistics when the power supply first arrived (i.e. before I had messed with it). From the factory, the reported maximum current limit was 37.7A (using a multiplier of x30). The nameplate was 56.1A or 1.48% larger. This has me wondering if my multiplier should in fact be 22 instead of 30.
Do these values vary between units? Is there a calibration factor?
The behavior is also not what you would traditionally expect. The control loop appears to be very slow. Normally you don’t see any change until maybe four to ten seconds later, and this change is a very slow ramp down of the voltage (foldback) until the desired current threshold is meet.
As I was using a programmable DC load set to constant current and not influenced by voltage, the Huawei delivered the full current as the voltage slowly ramped down, finally disconnecting the output just under 10V.
I guess this is more a current “sharing” feature you would expect with high current parallelable power supplies. Too fast individual control could cause instability among paralleled units.