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.
The software can be used to set the output voltage and maximum current:
Huawei R4850G2 53.5VDC 3000W Rectifier Configuration Utility V1.1 http://www.beyondlogic.org Usage: r4850 [options] <CAN interface> Options: -v <voltage> (Set Power Supply Voltage) -c <current> (Set Maximum Current) -s (Save settings to non-volatile memory/off-line)
And report statistics:
Input Voltage 237.88V @ 50.03Hz Input Current 0.41A Input Power 98.18W Output Voltage 47.98V Output Current 1.97A of 37.70A Max, 0.002Ah Output Power 89.36W Input Temperature 27.0 DegC Output Temperature 27.0 DegC Efficiency 91.0%
The current limiting on the R4850 makes it perfect for charging 48V battery packs.
Huawei R4850G2 53.5VDC 3000W Rectifier Configuration Utility V1.1 http://www.beyondlogic.org Input Voltage 237.34V @ 49.98Hz Input Current 4.86A Input Power 1154.06W Output Voltage 55.01V Output Current 20.32A of 20.00A Max Output Power 1110.10W, 5.230Ah Input Temperature 22.0 DegC Output Temperature 38.0 DegC Efficiency 96%
Thanks for posting this information. I’m considering buying several of these to use in series and parallel as a general purpose high-power system power supply. Did you have any luck figuring out how to parallel them and enable the “current sharing” feature? Do you know if there’s anything special that needs to be done to connect them in parallel?
Thank you for your sharing. I have a huawei monitor module. I will do some test to capture the communication between the power supply module and monitor module. Do you have any comments?
Hi, I’m trying to do exactly the same thing with a PMU 11A and OLT SmartAX MA5800X7 through ESC port. I’m using two RS485-to-USB adapters and a software serial analyzer. Have you made any progress?
I know that this power supply has a control system based on Bluetooth app in China. I am trying to crack this system. If anyone is interested, please contact me and I also need some help
How can we connect 2 of these power supplies in parallel?
Same question here too. Got some on order, once they arrive I will do some testing. Anyone had success connecting multiples in parallel?
I would appreciate if you could keep us updated on your results connecting these power supplies in parallel
I get confused with the can connection. Pictuers show CAN-L at the bootim of the finger PXB but table says top.
Erik, good pick-up. The CAN-L is on the top side, hence the table is correct. I’ll get the pictures fixed shortly.
Ran into the same problem. Had me worried for a minute.
Perhaps just remove the wrong pics?
Thanks for the article.
Is it possible to change the voltage from 53.5 to 57v?
yes. up to 58.5V with the script and with a CAN interface
can anyone confirm whether it’s possible to run a CC slope (eg. 1A~60A) when CV operation (3.6V per cell -> 57.6V for 48V setup) for soft ramp battery loading?
Or will the PS just operate at full output current (60A) when battery is nearly empty and CV operation at 57.6V is set?
As you wrote. This power supply have CC limit, it can go from 0V to 58.5V with eg 1A current limit. (But fan below some ~40V goes full speed crazy turbo jet :))
HI – great documentation !
The “can0 1081407E  01 83 00 10 00 00 00 00” looks like a flag or status register. Examp: 0x00000200 -> Standby (via Pin, open/3.3V)
And I also use x20 for output_current_max.
Hi, does anyone know if the other models of Huawei R48xx or the Emerson or Eltek 48V telecom units use the same CANbus communications registers as the R4850G2? Thank you. –Jim N8ECI
What would be the cause of the 0x21 error when I try to set the offline voltage? I can set the online voltage just fine. Thanks, JB
I use an Arduino Nano and an CANBus WB-184 (MCP2515) module to communicate with the Huawei R4850G2.
Setting output voltage works but
i try to get actual status by request data frame via can.SendMsgBuf to 0x108040F. My problem right now is that i get some response but not all data from 0x0E,0x70 ~ 0x83. Instead it looks like i only get every x-th frame, ie. 0x70, 0x73, 0x78, 0x82).
The communication speed is as mentioned 125kb/s; higher speeds result in no communication.
Could it be that the 8MHz of the CanBus oscillator is a problem here?
Hey Markus, I am just looking into this myself. Would you care to share your code?
I have a CANBed FD (Atmega32U4 with CanFD/ Can 2.0) at hand
Thanks, Craig for the detailed information on this specific PSU.. I am using this PSU for a 48volt LDMOS RF Amplifier kit that I am currently building and this information is most helpful. Thank you once again. Will
Is there a way get the power supply out of hibernation as I recently bought one but the indicator lights show its in hibernation
Any help would be appreciated thanks.