Emerson/Vertiv R48-series CAN programming?

Tomblarom

10 W
Joined
Jul 20, 2018
Messages
90
Currently I'm really into getting my hands on an R48-1000e3. Highly compact and even smaller than an Eltek Flatpack S. Unfortunately I wasn't able to find somebody that's willing to share the CAN protocol with me.. I read through the Eltek thread and I wish we can start something similar for these chargers?

Main CAN capabilities are:


More technical details like dimensions, datasheets, manual, power: https://endless-sphere.com/forums/viewtopic.php?f=14&t=114784
 

Attachments

  • Vertiv R48-3000e3 - Datasheet.pdf
    5.8 MB · Views: 88
  • Vertiv R48-3000e3 - User Manual.pdf
    915.3 KB · Views: 60
I found this article from the chinese Vertiv support about their own communication protocol. It's more general, but maybe has a few clues: https://wemp.app/posts/5804ee3c-dcfb-466f-8a74-439ba4bef84c

This is the fully documented VERTIV GXE UPS protocol (RS232): https://zhujinliang.com/vertiv-gxe-ups-protocol/

The first article hints, that even though the protocol differ, the content may be the same:
What protocol is your device using, is it RS232 or RS485? In fact, such a description is not correct. It only expresses the physical interface form used by the smart device to communicate with the background, and does not describe more content.

When we select the protocol on the device interface, we often see a YDN23 option. What does it mean? This article takes the general protocol of "Hipulse U Communication Protocol V150" by Vertiv as an example, so that you can have a further understanding of the background communication protocol, and initially have the ability to apply the text of the general electrical protocol to solve practical problems.

This site is gives a good overview, where these rectifiers are supposed to go in: https://powerqc.happyfox.com/kb/article/130-data-sheets-and-manuals-for-dc-systems/
 
Was also working on the can code for the Emerson Vertiv rectifiers.
The following is tested on the R48-2000e3 and the older bigger version R48-3500e.
The smaller R48-1000e4 was not checked yet, because I first need a suitible connector for it. Soldering is no solution I will do with my new ones. The small one on the picture underneath was not mine.

Most of the commands are picked up from an emerson 820 controller. A few commands like permanent settings where found by try and error.

Frame ID 06080783 or 0607FF83 speed 125kB/s
All the voltage values (42 50 00 00 = 52,5V) are floating point to hex converted.

offline commands are permanent stored values
online commands are lost after 30 seconds , or after restart

To change the output voltage permanently you better send two messages with the same voltage value, otherwise you don´t see the changes immediately
CAN-ID 06 07 FF 83
1. Data 03 F0 00 21 42 50 00 00 online-voltage value gets lost after 30 seconds , just to see the changes
2. Data 03 F0 00 24 42 50 00 00 offline voltage Setting Voltage permanent to 52,5V
this works between 42 24 00 00 min 41V and 42 6A 00 00 max 58,5V
You can also only send the offline value command, but then you have to wait 30 seconds until the rectifier changes the voltages.


The output current is set in percent to the rated value of the rectifier written in the manual. Possible settings 0,1-1,21 equals 10%-121% also float to hex converted. The rated current written in the datasheet is 121%.
If hooked to an electronic load the rectifier works down to 20V and lower.
On a resivitve 10Ohm load the rectifier needs from start about 30-40 seconds until the values are stable, inbetween it takes a few cylces of overshooting and undershooting the target current, which was in this case set between12-15%.

03 F0 00 19 3D CC CC CD = 0,1 = 10% of the rated current
03 F0 00 19 3F 9A E1 48 = 1,21 = 121% of the rated current

if you want to see the changes faster you have to set the online value to, otherwhise it takes 30 seconds until the change will start, same behavior as with the permanent voltage setting
online 03 F0 00 22 3D CC CC CD 10%
online 03 F00 00 22 3F 9A E1 48 121%
offline 03 F0 00 19 3D CC CC CD 10%
Offline 03 F00 00 19 3F 9A E1 48 121%


Walk in >> Time to ramp up the rectifiers output voltage to the set voltage value
Walk in on 03 F0 00 32 00 01 00 00
Walk in off 03 F0 00 32 00 00 00 00
walk in time 03 F0 00 29 44 7A 00 00 = 10 Seconds
walk in time 03 F0 00 29 45 FF 00 00 = 70 seconds

AC input current limit, called Diesel power limit, that gives the possibility to reduce the overall power of the rectifier
03 F0 00 1A 40 A0 00 00 AC-input current is held at 5A
floating point to hex conversion 40 A0 00 00 = 5

fan speed
full speed 03 F0 00 33 00 01 00 00
auto 03 F0 00 33 00 00 00 00
below 51V fan starts to ramp up regardless of current , under 42V fan runs on full speed

restart after overvoltage
on 03 F0 00 39 00 01 00 00
off 03 F0 00 39 00 00 00 00



online commands working only when permanently send via CAN (every 15 seconds)
float charge voltage
03 F0 00 21 42 48 00 00 = 50V floating point to hex conversion 42 48 00 00 = 50.0V
min 03 F0 00 21 42 24 00 00 = 41V
max 03 F0 00 21 42 6A 00 00 = 58.5V

DC current Control
DC-Output on 03 F0 00 30 00 00 00 00
DC-Output off 03 F0 00 30 00 01 00 00

03 F0 00 22 3D CC CC CD = 0,1 = 10% of the rated current
03 F0 00 22 3F 9A E1 48 = 1,21 = 121% of the rated current

If something is wrong or you found out other things feel free to ad.
This was my first real working on a CAN-BUS System, so my summary is far from perfect. 😉

20221019_192210.jpg

The r48-2000e3 rectifiers where also used in the Evtricity Zero Motorcycle chargers.
Does onyone know if they where able to set the voltage permanent or if they used an Arduino or ESP to repeat the commands.

The bigger and older R48-3500e also can be programmed
20230207_061413.jpg
 
Last edited:
Bonjour,
J'ai cherché la langue officielle du site, je n'ai pas trouvé donc j'écris en français.
Je viens d'acquérir 3 Emerson R48/3000 E3 et en cherchant comment les reprogrammer, je suis tombé sur cette discussion très instructive.
Après plusieurs déboires, j'ai réussi à communiquer avec les redresseurs.
Merci à dominik h pour son travail partagé. Sans lui j'en serai encore à balbutier.
J'utilise un nano et un module can basé sur MCP2515. J'ai récupéré le programme de Remmie72 (sujet sur Eltek) que j'ai adapté pour les essais.
J'ai testé plusieurs commandes avec succés.
Tension permanente passé de 53.5V à 48V.
Tension en ligne, courant permanent, courant en ligne.
Actuellement, je butte sur l'identification des valeurs retournées par le R48.
Je ne reçois qu'un seul message de 8 octets. j'ai identifié quelques valeurs mais j'ignore à quoi correspondent les autres.
data 11 9C 10 00 19 DC 00 00
Octet 1, 11 ?? varie entre 11 et 12
Octet 2, 9C Tension (valeur entière)
Octet 3, 10 statut??, 00 pas de défaut, 10 alarme (ventilateur débranché par exemple)
Octet 4, 00 ?? toujours à zéro
Octet 5, 19 ?? toujours à 19
Octet 6, DC ?? toujours à DC
Octet 7, Courant partie entière
Octet 8, Courant partie décimale

Les consignes de courant et de tension sont programmables en décimal, dans les valeurs retournées le courant est en décimal, mais la tension reste en entier puisque un seul octet.
Autrement c'est sympa comme matériel pour construire un chargeur fiable et bon marché.
 
Good to hear that it also works with the 3000W version.

Have you bought the connector pcb from aliexpress?
 

Attachments

  • Screenshot_20230226_194209_Gallery.jpg
    Screenshot_20230226_194209_Gallery.jpg
    886.7 KB · Views: 40
Last edited:
C'est bon d'entendre que cela fonctionne également avec la version 3000W.

Avez-vous acheté le circuit imprimé du connecteur 6Euro d'aliexpress?
Oui, j'ai ce connecteur, mais il était fourni avec chaque alim. Pour l'instant j'en ai modifié un pour ajouter un bornier à vis pour le CAN. C'est plus pratique pour les essais.
Actuellement je teste avec de vieilles batteries au plomb, chargeur dehors et PC à l'intérieur.
j'ai testé à 10% de courant, ce qui donne 6A
J'ai réussi à monter à 22 A environ.
Les batteries sont trop différentes en capacité et en état.
 
Thanks, i was waiting one year before someone make reverse engineering on m820. I tried on r48 3000e and working. Do you have other codes to send to program the power supply?
 
I checked the code, you write the same code for “dc current control” and “fan speed”. Can you check this information? What exactly do the “dc current control”?
 
Thanks for pointing me to my mistake. Changed it in post #3.

DC current Control
DC-Output on 03 F0 00 30 00 00 00 00
DC-Output off 03 F0 00 30 00 01 00 00

DC Current Control turns the output off and on. The name was taken from the software of the M820

I have not tested other codes, as for my needs changing the AC input current, DC output current and DC output voltage is enough.;)
The rectifiers does send a lot of information , like input/output voltage , input/output current, temperature and other things, but I have not checked this out completely.
 
thanks for your reply. I'm asking because I started working with a friend of mine on programming an arduino to control the power supply. having more information would be interesting to add new functions. in any case, the ones you listed are very useful. I will keep you informed on further updates. May I ask where did you find the 820? I searched everywhere and it was impossible to find at affordable prices.
 
I bougtht two 820m on E-Bay from America, shipping was really expensive. I paid for both 220Euro including shipping and tax.
But as I had bought 16 new vertiv r48-2000e3 from Australia and had not been able to program them, the two 820M was a nececary investment.
To bad they where set for the 24V vertiv rectifiers, so I could not see a direct voltage change with them, but they did send most of the needed code. The Rest was found with try and error?

If I find enough time I want to make a program for an ESP32 to set the desired SOC and the charge current via Bluetooth from my phone, but I'm totally new to ESP or Arduino. I have already bought the ESP and the CAN extension and a friend is using the ESP to control two Eltek flatpacks.
I want to build a modular 1 to 3 phase charger setup with 2 vertiv in series per phase to charge the battery from my scooter with up to 125A.
 
Last edited:
Hi
I am using 3pcs Vertiv R48-3000e3 power supplies. I need to communicate with these devices via Can Bus and receive information (Voltage, Current, Power, etc.) and set the value of parameter ( V, A, vs ) and display it on the screen and send valur by bluetooth. When I connect with the online can bus Adapter, I can read a single address as follows.

"ID=0707F803h, Type=D, Length=8, Data=11BC000019DC"

How can I set the output voltage and current values? Can we ramp up the output current? How should I send requests to which addresses regarding these?
I could not find a document about the device's Can Bus addresses and how to read and write them.
Can you help me? Please
 

Attachments

  • Vertiv R48-3000e3.png
    Vertiv R48-3000e3.png
    18.9 KB · Views: 25
As written above in this thread here are the commands for setting voltage and current

....
To change the output voltage permanently you better send two messages with the same voltage value, otherwise you don´t see the changes immediately
CAN-ID 06 07 FF 83
1. Data 03 F0 00 21 42 50 00 00 online-voltage value gets lost after 30 seconds , just to see the changes
2. Data 03 F0 00 24 42 50 00 00 offline voltage Setting Voltage permanent to 52,5V
this works between 42 24 00 00 min 41V and 42 6A 00 00 max 58,5V
You can also only send the offline value command, but then you have to wait 30 seconds until the rectifier changes the voltages.


The output current is set in percent to the rated value of the rectifier written in the manual. Possible settings 0,1-1,21 equals 10%-121% also float to hex converted. The rated current written in the datasheet is 121%.
If hooked to an electronic load the rectifier works down to 20V and lower.
On a resivitve 10Ohm load the rectifier needs from start about 30-40 seconds until the values are stable, inbetween it takes a few cylces of overshooting and undershooting the target current, which was in this case set between12-15%.

03 F0 00 19 3D CC CC CD = 0,1 = 10% of the rated current
03 F0 00 19 3F 9A E1 48 = 1,21 = 121% of the rated current

.....
You need to set CAN speed to 125kbs and extended mode and perhaps you need a bus terminstion resistor.
Normaly they send messages continously.
 
The rectifier sends Data on 060F8007
But I have not veryfied them, I have them noted during my trace from the 820M
00 F0 00 80 46 A5 34 00 is perhaps for the query. Maybe someone else can check this and report, as I have no time to do this at the moment and during the next weeks


41F00001 42 56 0D 00 53,51V Volt output
41F00002 00 00 00 00 0A Current output
41F00004 41 A8 32 00 21,02 C Temp
41F00005 43 68 E4 40 232,89V Input voltage
 
Last edited:
This is the Can ID :0707F803h I read from my device. Should I use the CAN-ID 06 07 FF 83 ID given by you for voltage and current adjustment? Can I read or write the other parameters given below with the same CAN-ID 06 07 FF 83 Id? For example, what kind of query should I send to read the device temperature and what commands should I send to increase the current step by step? Can you write an example instruction set for these?

Was also working on the can code for the Emerson Vertiv rectifiers.
The following is tested on the R48-2000e3 and the older bigger version R48-3500e.
The smaller R48-1000e4 was not checked yet, because I first need a suitible connector for it. Soldering is no solution I will do with my new ones. The small one on the picture underneath was not mine.

Most of the commands are picked up from an emerson 820 controller. A few commands like permanent settings where found by try and error.

Frame ID 06080783 or 0607FF83 speed 125kB/s
All the values (42 50 00 00 = 52,5V) are floating point to hex converted.

offline commands are permanent stored values
online commands are lost after 30 seconds , or after restart

To change the output voltage permanently you better send two messages with the same voltage value, otherwise you don´t see the changes immediately
CAN-ID 06 07 FF 83
1. Data 03 F0 00 21 42 50 00 00 online-voltage value gets lost after 30 seconds , just to see the changes
2. Data 03 F0 00 24 42 50 00 00 offline voltage Setting Voltage permanent to 52,5V
this works between 42 24 00 00 min 41V and 42 6A 00 00 max 58,5V
You can also only send the offline value command, but then you have to wait 30 seconds until the rectifier changes the voltages.


The output current is set in percent to the rated value of the rectifier written in the manual. Possible settings 0,1-1,21 equals 10%-121% also float to hex converted. The rated current written in the datasheet is 121%.
If hooked to an electronic load the rectifier works down to 20V and lower.
On a resivitve 10Ohm load the rectifier needs from start about 30-40 seconds until the values are stable, inbetween it takes a few cylces of overshooting and undershooting the target current, which was in this case set between12-15%.

03 F0 00 19 3D CC CC CD = 0,1 = 10% of the rated current
03 F0 00 19 3F 9A E1 48 = 1,21 = 121% of the rated current

if you want to see the changes faster you have to set the online value to, otherwhise it takes 30 seconds until the change will start, same behavior as with the permanent voltage setting
online 03 F0 00 22 3D CC CC CD 10%
online 03 F00 00 22 3F 9A E1 48 121%
offline 03 F0 00 19 3D CC CC CD 10%
Offline 03 F00 00 19 3F 9A E1 48 121%


Walk in >> Time to ramp up the rectifiers output voltage to the set voltage value
Walk in on 03 F0 00 32 00 01 00 00
Walk in off 03 F0 00 32 00 00 00 00
walk in time 03 F0 00 29 44 7A 00 00 = 10 Seconds
walk in time 03 F0 00 29 45 FF 00 00 = 70 seconds

AC input current limit, called Diesel power limit, that gives the possibility to reduce the overall power of the rectifier
03 F0 00 1A 40 A0 00 00 AC-input current is held at 5A
floating point to hex conversion 40 A0 00 00 = 5

fan speed
full speed 03 F0 00 33 00 01 00 00
auto 03 F0 00 33 00 00 00 00
below 51V fan starts to ramp up regardless of current , under 42V fan runs on full speed

restart after overvoltage
on 03 F0 00 39 00 01 00 00
off 03 F0 00 39 00 00 00 00



online commands working only when permanently send via CAN (every 15 seconds)
float charge voltage
03 F0 00 21 42 48 00 00 = 50V floating point to hex conversion 42 48 00 00 = 50.0V
min 03 F0 00 21 42 24 00 00 = 41V
max 03 F0 00 21 42 6A 00 00 = 58.5V

DC current Control
DC-Output on 03 F0 00 30 00 00 00 00
DC-Output off 03 F0 00 30 00 01 00 00

03 F0 00 22 3D CC CC CD = 0,1 = 10% of the rated current
03 F0 00 22 3F 9A E1 48 = 1,21 = 121% of the rated current
 
I have tested with the R48-1000E4 the R48-2000e3 and the R48-3500e and all listen to 06 07 FF 84.

For reading I'm not shure which query, as I had no need for any values from the rectifier. I do only set voltage and output current or input current, and then let it charge batteries.

There is no command to increase output or input current step by step. You have to send a new limit to change something.
The value has to be converted floating point to hex. I use this converter IEEE754 converter
just enter 0.1 and you will get the corresponding hex value.

03 F0 00 19 3D CC CC CD = 0,1 = 10% of the rated output current
03 F0 00 19 3F 9A E1 48 = 1,21 = 121% of the rated output current which is equal to the maximum current of the rectifier
 
Last edited:
I'm sorry for disturbing you all the time, mine.
Will I send commands from Arduino as follow?
What command do we need to send to factory reset the device?

unsigned char stmp3[8] = {0x03, 0xF0, 0x00, 0x19, 0x3D, 0xCC, 0xCC, 0xCD}; //= 0,1 = 10% of the rated output current
unsigned char Walk_in_on[7] = {0x03, 0xF0, 0x32, 0x00, 0x01, 0x00, 0x00}; //= Walk in on
unsigned char Walk_in_off[7] = {0x03, 0xF0, 0x32, 0x00, 0x00, 0x00, 0x00}; //= Walk in off
unsigned char walk_in_time1[8] = {0x03, 0xF0, 0x00, 0x29, 0x44, 0x7A, 0x000, 0x00}; //= 10 Seconds
unsigned char walk_in_time2[8] = {0x03, 0xF0, 0x00, 0x29, 0x45, 0xFF, 0x000, 0x00}; //= 70 Seconds

CAN.sendMsgBuf(0x0607FF84, 1, 8, stmp3);
delay(10);
CAN.sendMsgBuf(0x0607FF84, 1, 7, Walk_in_on);
delay(10);
CAN.sendMsgBuf(0x0607FF84, 1, 7, Walk_in_off);
delay(10);
CAN.sendMsgBuf(0x0607FF84, 1, 8, walk_in_time1);
delay(10);
CAN.sendMsgBuf(0x0607FF84, 1, 8, walk_in_time2);
 
Are the values I read "ID=0707F803h, Type=D, Length=8, Data=11BC000019DC" voltage, current, power values? I made a sample application and it was like in the picture? is this true?

When I requested information about "Vertiv R48-3000e3" from chatGPT, it gave the following information.
The 0x210 CAN bus address of the R48-3000e3 allows you to read and configure the device's parameters. Through this address, you can read measurements, settings, and other important information of the device.

The parameters that you can read through the 0x210 address of the R48-3000e3 device include:

lua

Input and output voltage
Input and output current
Battery voltage
Device temperature
Fan speed
Battery charging current and voltage
AC input and output frequency
UPS mode and status
Line status and voltage

Additionally, through the 0x210 address, you can also change some settings of the R48-3000e3 device. For example, you can modify battery auto-test settings, adjust output voltage or current, or select the UPS mode of the device.

To determine which parameters of the R48-3000e3 device you can read or which settings you can modify through the 0x210 address, it is recommended to refer to the device's user manual or technical specifications.
here is the list of CAN bus addresses for the Vertiv R48-3000e3:

makefile

0x100: Input Voltage
0x101: Input Frequency
0x102: Input Current
0x103: Input Power
0x104: Battery Voltage
0x105: Battery Current
0x106: Battery Power
0x107: Battery Capacity
0x108: Battery Temperature
0x109: Output Voltage
0x10A: Output Frequency
0x10B: Output Current
0x10C: Output Power
0x10D: Output Protection
0x10E: Fan Status
0x10F: Device Status
0x110: Alarm Status
0x111: UPS Configuration
0x112: UPS Model
0x113: Firmware Version
0x114: Serial Number

These addresses can include various parameters that the R48-3000e3 device can measure, as well as information such as device status, configuration, and firmware version. However, depending on the software and device you are using, there may be additional or different addresses in the list. Therefore, it is recommended to refer to the device's user manual or consult the manufacturer to obtain a specific list of CAN bus addresses for the R48-3000e3 device.
 

Attachments

  • 1.jpg
    1.jpg
    145.4 KB · Views: 54
  • 2.jpg
    2.jpg
    177.2 KB · Views: 51
I do not know a command for factory reset.
But two hours ago in another forum someone has written when you send to ID 0607FF83
Data 00000000 then the vertiv will give you measured values.
The values you see underneath are sent at once , and are without any load.
So it is possible that 41 F0 00 03 is power, but I have not veryfied it.

vertiv 00 00 00 00.JPG

Direct request for one value is
ID 06 00 07 83
Data 01 F0 00 xx 00 00 00 00 00 ______xx is for the requested value
You see all the values listed in the screenshot above. But I have not checked which value is for what.
i guess
01 = output voltage (52.25V)
02
03
04 = temperature (21.3C)
05
07
40
54
58
vertiv 03.JPG
 
Last edited:
And I have not yet made a single programm for an arduino or an ESP32. That is one of my next things on my to do list.

The last real thing I had programmed was in assembler and was 35years ago, a few years later I made a few small programs in Pascal.
 
Last edited:
And I do not know where ChstGPT gets it informations from.
But I am shure the rectifier itself does not know the battery capacity.
Only the system controller can know this.

I think the summary from ChatGPT is from a vertiv UPS system
 
Last edited:
Bonjour,
j'ai testé hier le chargeur sur un VE et ça fonctionne super bien.
Ma configuration c'est 3 alimentations Vertiv 48/3000 E3, assemblées en série.
Un Arduino Nano et un module CAN.
Le bus CAN est totalement isolé par rapport aux tensions de l'alimentation, ce qui simplifie les raccordements. Il semblerait que ce n'est pas le cas des Eltek.
Chaque commande est prise en compte par les 3 alimentations.
En commandes permanentes, le Nano transmet les tensions et courants nominaux. En cas de pannes ou de pertes de communication, les batteries sont préservées.
En commandes en ligne, envoyées toutes les 25 secondes, on envoie la tension et le courant demandé.
On peut facilement programmer une charge en plusieurs phases.
Phase CC, puis Phase CV.
 
Last edited:
Bonjour,
j'ai testé hier le chargeur sur un VE et ça fonctionne super bien.
Ma configuration c'est 3 alimentations Vertiv 48/3000 E3, assemblées en série.
Un Arduino Nano et un module CAN.
Le bus CAN est totalement isolé par rapport aux tensions de l'alimentation, ce qui simplifie les raccordements. Il semblerait que ce n'est pas le cas des Eltek.
Chaque commande est prise en compte par les 3 alimentations.
En commandes permanentes, le Nano transmet les tensions et courants nominaux. En cas de pannes ou de pertes de communication, les batteries sont préservées.
En commandes en ligne, envoyées toutes les 25 secondes, on envoie la tension et le courant demandé.
On peut facilement programmer une charge en plusieurs phases.
Phase CC, puis Phase CV.
That sounds great, do you also have a display like the SSD1306 OLED to read out the values?
Would you like to share your setup / programming work?
Thank you.
 
Cela sonne bien, avez-vous également un écran comme le SSD1306 OLED pour lire les valeurs ?
Vous souhaitez partager votre travail de setup/programmation ?
Merci.
Bonjour,
Oui bien sûr,
Mais pour l'instant ça n'est qu'un prototype.
Il reste encore beaucoup de tests et de développements à réaliser :
Convertir les données en virgule flottante en réel affichable.
La gestion des défauts.
L'adressage individuel des alimentations (si c'est possible)

Pour l'affichage j'utilise le moniteur de l'Ide Arduino.
 
Actuellement, j'essaye une configuration 2 alimentations en série.
J'essaye de reconstituer un pack de 11 blocs NiCd de 6v nominal.
Une seule alimentation ne suffit pas et 2 48 étant un peu trop.
Les valeurs renvoyées par les alimentations sont surprenantes.
La tension de chaque alimentation est assez éloignée.
Consigne mini 41v, alimentation 1; 41v, alimentation 2 ; 29v.
Pour le courant, c'est encore plus curieux,
quel que soit la consigne, la mesure de chaque alimentation est différente de quelques ampères ?
Le courant dans un circuit série est normalement égal en tout point du circuit.
Erreur de la chaîne de mesure?
Dérivation du courant d'une alimentation vers l'autre ?
 
Last edited:
Back
Top