ULtra Compact 1800W charger + Eltek programming

Just done a few tests with FP2 Front End 3000W HE Version, testing was done with an electronic load and a 7S ,10S and 11S 70Ah Li-Ion battery
Voltage can be set from 43.6 to 57.5V
Under 12V the output turns off
Output current from 12-27V 31.5A
Between 27-36V did not test it.
Output from 36-39V, one minute 63A then it reduces to 31.5A
Output from 40-48V 63A
Above 48V limiting to 3000W

Current setting only works above 48V.
Below 48V current setting is completly ignored.

I think this has to do with the lead acid charging curve, implemented in the Eltek.
Does someone know how to set this as a cc/cv power supply.
Are the 2kW FP2 doing the same? I want to make a 230V single phase 3kW charger for 21S.

I have a Megmet 3kW rectifier which can be set via can , if it should behave as a charger or a cc/cv power supply.
 
Got some flatpack2 he front end 48v/3000w revision 2.3.
I contacted eltek and they gave me the I2C protocol for these.
The can bus does not seem to work as the other eltek supplys.
I started trying to write the I2C comms, still working on it.
Attached is the paper they gave me.
 

Attachments

  • I2C_Application_Guide - V2.6.pdf
    96.1 KB · Views: 227
Im able to read the serial number via i2c!
Now onto working on the settings.
 

Attachments

  • IMG20211202115808.jpg
    IMG20211202115808.jpg
    5.2 MB · Views: 1,464
That's awesome!
I bought few of the £15 ebay ones, and I'm desperate to get them down to 48V. I'm strugling to do it via CAN.
 
stinkhorn said:
It's actually an easy one to interface without a PCB. Normal spade terminals are very secure on the AC in and DC out. Small jumper cables go to whatever Can Bus thingy you're using. There's a short pin that's got to be grounded too - just like a lot of server PSUs.

I don't have that PCB sitting on top when it's on 8)

.

Stinkhorn,
I seem to have the same interface board as you do and the same FE rectifier. Would you mind sharing the whole connections (if it's not too much to ask picture of wires on PSU, Can-IF and arduino, also code and which library you were usiing?

That would be very much appreciated.
Thanks JJL
 
Ok a little progress on i2c.😁
Default voltage and amps are settable, I set and tried 48v and 52.4v, 10-60a.😁
Over voltage prolly can be done too.
Looks like a high voltage shutdown restart is settable.
Can be done via a global i2c calls(all receive same message at once).Going to connect all 3 for a power bank and see how it works.

Reading psu is done by addressed calls.
Working on temperature values.
 

Attachments

  • IMG20211202222659.jpg
    IMG20211202222659.jpg
    4.2 MB · Views: 1,443
  • IMG20211202222711.jpg
    IMG20211202222711.jpg
    3.6 MB · Views: 1,448
All three accept global calls on the I2C bus!
 

Attachments

  • IMG20211203000354.jpg
    IMG20211203000354.jpg
    8 MB · Views: 1,439
  • IMG20211203000445.jpg
    IMG20211203000445.jpg
    4 MB · Views: 1,446
Ecologicalleds said:
Ok a little progress on i2c.😁
Default voltage and amps are settable, I set and tried 48v and 52.4v, 10-60a.😁
Over voltage prolly can be done too.
Looks like a high voltage shutdown restart is settable.
Can be done via a global i2c calls(all receive same message at once).Going to connect all 3 for a power bank and see how it works.

Reading psu is done by addressed calls.
Working on temperature values.

That's awesome, are you connecting -v out to the short pin? Would you mind sharing the code to set single supply to 48v?
Regards JJL
 
jjlynn27, I'm controlling the short pin for my application, but for this sketch, yes connect short pin to d/c v out gnd to enable the psu.

coolice, does your board have all i2c pins broken out SDA, SCL, and I2C GND? I may want a few of those if they are I2C usable.

This sketch will set default voltage, max amp out, and high voltage shutdown.
Should work for most eltek psu's that have i2c.
If the psu is not in the list and works, please let me know so can be added to the sketch psu list.
Instructions in sketch.

Code:
/* 
Kevin Orourke 12/2021
Copyright (c) 2021 Ecological Leds LLC.  All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

- Redistributions of source code must retain the above copyright notice,
  this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice,
  this list of conditions and the following disclaimer in the documentation
  and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.


This should work on several different eltek psu uints that have i2c,
this is an old protocol from valere. (eltek bought out valere)

HOW TO:
  Not always needed, but connect 5v from psu 5v+ pin to arduino 5v+ pin
  Connect psu dc out gnd to arduino gnd and psu short pin
  Psu sda and scl pins to arduino i2c pins
  Psu i2c ground pin to arduino gnd pin, I needed to do this on mine

  Comment out what you do not need to set
  
Note: this is a global command sent to all psu's on the i2c bus

Please, if this works on an eltek psu not listed, please add below to the list
with your name or calltag. Thank you 

This works on:
 ** flatpak2 eltek 48v/3000w HE front end model 480875, 43.5-56vdc 10-60amp -Kevin Orourke
 
 
 */
 
#include <Wire.h>

uint16_t voltage = 4800;                // default voltage output in centivolts, i.e. 48.00v == 4800
// uint16_t amp = 6000;                    // default amps max output in centivolts
// uint16_t vsd = 5200;                    // default max voltage shutdown in centivolts

void setup() {
  Wire.begin();
  Wire.setClock(20000);
  
  Serial.begin(115200);
  
  Serial.println("Waiting 15 seconds for PSU");

  delay(15000);
  
  scan_i2c ();                          // check for power supplies on the i2c bus
  
  delayMicroseconds(10000);
  
  commandPsu(0x00, 0x02, 0x72, voltage);// i2c command for setting voltage
  // commandPsu(0x00, 0x02, 0x74, amp);    // i2c command for setting max amps
  // commandPsu(0x00, 0x02, 0x76, vsd);    // i2c command for setting max voltage shutdown
  
  Serial.println("done");
  Serial.println("better way: disconnect short pin for 2 seconds then reconnect");
  Serial.println("other way: unplug power supply and wait 30 seconds");
}

void scan_i2c () {
  byte error, address;
  int nDevices = 0;

  Serial.println("Scanning for power supplies");

  for (address = 1; address < 127; address++ ) {
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
    if (error == 0) {
      Serial.print("Power supply found at address 0x");
      if (address < 16){
        Serial.print("0");
      }
      Serial.println(address, HEX);
      nDevices++;
    }
    if (error == 4) {
      Serial.print("Power supply error at address 0x");
      if (address < 16){
        Serial.print("0");
      }
      Serial.println(address, HEX);      
    }
  }
  
  if (nDevices == 0) {
    Serial.println("No power supplies found");
    Serial.println("Hualting, fix i2c problem");
    while(1);
  } else {
    Serial.println("Setting default voltage");
  }
}

uint8_t crc82(uint8_t *p, uint8_t len) {
  byte chk = 0;
  for ( int i = 0; i < len; i++) {
    chk += p[i];
  };
  chk = 256 - chk;
  return chk;
}

void commandPsu(uint8_t addr, uint8_t p, uint8_t o, uint16_t value) {
  uint8_t h = value >> 8;
  uint8_t l = value & 0xFF;
  uint8_t data[] = {addr, p, o, h, l};
  uint8_t crc = crc82(data, sizeof(data));
  Wire.beginTransmission(addr);
  Wire.write(p);
  Wire.write(o);
  Wire.write(l);
  Wire.write(h);
  Wire.write(crc);
  Wire.endTransmission();
  delayMicroseconds(10000);
}

void loop() {
}
 
Have you tried the CC mode at 44V or something below 47V with the 3000W rectifier?
Mine do CC only at 48V and above
 
Dominik h, no I have not tried cc mode below 48v. I need voltage control at 52.4v.

My application for these psu's is 52.4v, 52.8vsd, 150a for the trio.

I wrote the default voltage setting code after jjlynn27 asked if I would share it.

I have a feeling the i2c will work on several different eltek psu's. Would like to make a library for these, have a starting point, but I would need some help.
 

Attachments

  • IMG20211204191935.jpg
    IMG20211204191935.jpg
    5.2 MB · Views: 1,365
150A is serious power

I wanted to built a 21S charger with 120A out of 6 Elteks on 3 phase 16A , and I want to build a second charger that runs from the German standard wall socket. Which is 230V 3600W.
Just ordered two eltek 2000W HE, I wil soon see how they react when voltage is around 35-43V for each supply. With these I need no CC function. They can run full power.
The Zivan 3kw charger I use at the moment, draws up to 19A, due to bad efficiency and a bad power factor correction and the Zivan NG7 is not much better but it stays under 16A on 3 Phase.
 
Lol, yes I need some power to run all my gecooled LED rails for growing, each one requires up to 20a @ 52.4v.

That's a heck of a charger compared to my drones 6s charger!

I only have 240v a/c 2 phase available from mains. Each unit will pull upto 15a @ 240a/c, or 19a at 120a/c.

The old sever supplies I use now have horrible efficiency, like 84%, and are at end of service hrs. The newer eltek is supposed to be above 96%.

I think I can only go down 43v on theses units, upto 57.6v in parallel output. Have not done anything in series output.
 
I think I've messed up cabling so will try again when my son goes to sleep.
This is the unit that I have (x3). I'm only trying to 'code' one at the time as I'll only use one at the time.

psu_label.jpg
back_connector.jpg
front.jpg

Basically, it says done but stays at original 52.15V.

I think i've messed up something with ground and/or +5 coming from PSU.

Regards, JJL
 
Some parts drawn up and printed for a double supply LED system. Should have most of it assembled tonight. When I swap out the current supply, unsure...

Most of the I2C communication are done for now.

This will be the master control for upto 8 nrf24 LED rails @ full power(15a 52.2v each). 240*320 LCD, esp8266, nrf24l01+, home assistant.
 

Attachments

  • IMG20211208164055.jpg
    IMG20211208164055.jpg
    3.5 MB · Views: 1,278
  • IMG20211209162144.jpg
    IMG20211209162144.jpg
    3.9 MB · Views: 1,277
Hi,

I’m asking this for my brother. He asked me to change the default voltage of a Front End model.
I used your code but it will not hold the value. Changed the offset from 0x72 to 0x0C and the output voltage changed. So the code is working but not the offset 0x72h. Could you verify this?
 
Just measured the 2000W HE with an electronic load.
Under 39V it shuts off.
Output current up to 42A.
Current limit works only above 48V
Voltage Setting 43,5-57V.
Very low noise level at idle but with more load the fan ramps up very fast.
 
Do the Flatpack 2 PCBs also fit the Eltek Flatpack S 48V 1800 Watt ?

In case someone is interested in, a Flatpack S 48V 1800 Watt is now 490 Euro incl. 19% VAT + shipping from Germany.

Asked an eBay seller, he says no.
But I also found it should fit but + and - are reversed.
 
Can the maximun current be saved in the Eltek 48V 2000W HE Model. I have the Rev 4 Version.
 
remmie1972 said:
CONFIRMED.

This also works on a Flatpack S rectifier.
Default voltage set to 57.6 Volt (highest it is capable of) and it does go into constant current mode. Tested this with 4 pcs 12V 12Ah leadgell batteries in series.

Great work Planetaire !!
By the way you can also use header 05 00 9C 00 data length 5 : 29 15 00 LL HH with LL the low Byte of the voltage setting and HH for the High byte of the voltage setting (which is in centivolts)
This way it sends out a broadcast and you don't need the ID number of the charger.

[strike]Didn't[/strike] tested if it would work without logging in. [strike]Probably not though.[/strike] Nope doesn't work. You have to log in first, which makes sense.

So for 57.6 Volts use header 05 01 9C 00, data length 5 and data bytes 29 15 00 80 16 (1680 HEX = 5760 => 57.6 Volts) be sure to use Extended CAN-BUS mode (29 bits identifier), 125 kbps busspeed and all bytes in HEX format (should be obvious from the 9C and the 2B anyway :D ).

Here's the arduino code i used :

EDIT : THERE WAS A SCREWUP ON MY PART IN THE CODE, I used the wrong message which was previously given. The code is correct now.

Code:
#include <mcp_can.h>
#include <mcp_can_dfs.h>
#include <SPI.h>

const int SPI_CS_PIN = 10;                                                          // Set CS pin to pin 10 (could be 9 for other CANshields)
MCP_CAN CAN(SPI_CS_PIN);                                                            // Set CS pin for CANBUS shield

void setup()                                                                        // Initialisation routine
{

START_INIT:

    if(CAN_OK == CAN.begin(CAN_125KBPS))                                            // init can bus : baudrate = 125k !!
    {
    }
    else
    {
    delay(100);
    goto START_INIT;
    }
    unsigned char login[8] = {0x14, 0x14, 0x71, 0x11, 0x08, 0x20, 0x00, 0x00};     //this is the serial number of the unit + 2 added bytes of 00 each, sernr on the unit reads 141471110820)
    CAN.sendMsgBuf(0x05004804, 1, 8, login);                                       //send message to log in and assign ID=1 (last 04 means ID=1, for ID=2 use 05004808 ) 

    unsigned char setdefaultvolt[5] = {0x29, 0x15, 0x00, 0x80, 0x16};              //this is the command for setting the default output voltage (Last two bytes, LSB first). 16 80 is the maximum voltage of 57.6 V
    CAN.sendMsgBuf(0x05019C00, 1, 5, setdefaultvolt);                              //send message to set ouput voltage to all chargers connected to the CAN-bus
}

void loop()                                                                        // main program (LOOP)
{                                                                                  // nothing to do :)
}

/*********************************************************************************************************
  END FILE
  Voltage settings 
  80 16 => 1680 HEX = 57,60 Volt (= highest possible voltage
  E6 14 => 14E6 HEX = 53,50 Volt (= factory set voltage)
  FE 10 => 10FE HEX = 43,50 Volt (= lowest possible voltage)
*********************************************************************************************************/
Hi remmie1972,
Thank you for the hard work you put into this project. I only discovered the project two weeks ago. Practically all the codes posted here didn't complie by my Arduino IDE. I suspect it all come down to different libraries you are using. I am a programing novice. Although I managed to get the Flatpack2 HE programmed with some alteration to the code, when it come to more complicated codes such as the one with LCD display, there are many lines failed to compile. It is possible to tell me which MCP_CAN library you used? I tried the Seeed_Arduino_CAN master, Coryjfowler, and the one that came with IDE. None of them were fully compatible. Thanks.
 
Does anyone know where is plus and minus on the Flatpack S DCDC 380/54 750W for the input voltage?

Just checked it myself, after reading that it is reverse polarity safe.
It runs with plus at pin 7 and minus at pin 6 , also in the other way, plus to pin 6 and minus to pin 7.
 
Flatpack S DCDC 380/54 750W working from above 35V, under 35V it shuts off.
Output current up to 15,7A.
Output power up to 850W but gets fast reduced to around 750W as labeled.
Output programmable from 43,5-57,5V as the other elteks. Rev 1.2 The voltage can be safed.
 
Hi Everyone

I've been using 2 Flatpack2 HEs 48V/2000W in series as a fastcharger for my Zero SR. I can currently charge up my motorcycle to only 65% due to the factory voltage settings :lowbatt: . I have absolutely no knowledge in this topic and have built my charger from this thread solely. So yeah sorry for the dumb questions. Regarding the Voltage Change:
Sending the two lines of code that remmie figured out to the Flatpacks by Can will permanently change the voltage? So why are you guys using the arduinos to repeatedly send the code?
I do have access to an Ixxat Can to USB dongle (but noone to help me with it). Is there a way to communicate to the Flatpacks from my Computer using the Dongle? I'm learning java and Python in Uni but don't know what program/ interface/ terminal to use for this kinda stuff.
Thanks a lot guys
Cheers
 
Eltek Flatpack2 HE Rev 6.0 is working from 35V and above.
Charging my 21S Li-NMC battery.
First test with two Elteks in series
Screenshot_20220314-150328.jpg

And my setup for 10kW charging power
20220322_172339.jpg
 
Hi All,

Sorry for bumping this old thread, but I stumbled on this topic looking for information about the Eltek FP2

I need to monitor/control this PSU using an Arduino. I'm using a MCP2515 shield and I can initialize the MCP2515, but no matter what setup I make, I cant receive a single byte of information from the PSU.

I already checked the electric connection between the CAN H and CAN L pins from internal board to the shield and it's ok. the GND (from the 3 terminals) is wired to the Shield as well. Is there any chance this PSA has a bad CAN transceiver, altought it's working fine from the +53V terminals?

Last resource would be buying another one, but they're fairly expensive over here only to test

The code I'm using was borrowed from this projetc: https://github.com/the6p4c/Flatpack2

Any advice is welcome
 
Back
Top