JustinSchoeman Posted August 18, 2020 Posted August 18, 2020 Starting a separate thread for my battery build, in case anyone is interested. Basic bank is complete, but still trying to get someone to make up the output cables. 16s3p pack of 120AH 2nd life cells from LithiumbatteriesSA using DALY 250A Smart BMS. Been stuck with the work thing for a few days, but just got an hour or two to play, and have an Arduino talking RS-485 to the BMS and getting all the basic stats back. Have also found another Arduino sketch that apparently spits out Pylon compatible CAN messages, so I should be able to translate DALY->Pylon for the inverter, when it arrives. Quote
Louisvdw Posted August 18, 2020 Posted August 18, 2020 I like the terminal covers you printed. Is that a from a template? I'm working on a different angle for battery communications. For my BMS I'm doing a serial driver that runs in the venus OS. It should be easy to replace the commands for another BMS's commands as well. Quote
JustinSchoeman Posted August 18, 2020 Author Posted August 18, 2020 30 minutes ago, Louisvdw said: I like the terminal covers you printed. Is that a from a template? I'm working on a different angle for battery communications. For my BMS I'm doing a serial driver that runs in the venus OS. It should be easy to replace the commands for another BMS's commands as well. I sketched up the covers myself. Not really necessary, and probably a fire hazard (will probably remove them when I close up the battery). I just hate working with all those acres of exposed aluminium bus bars... I am intending to use a Sunsynk inverter, so I am limited to faking a compatible BMS. I also need some additional external logic to turn off the geyser when total inverter load is too high, or battery is too low - so I need an external micro anyway. Quote
Louisvdw Posted August 18, 2020 Posted August 18, 2020 2 minutes ago, JustinSchoeman said: I just hate working with all those acres of exposed aluminium bus bars. Yes, I worked with a clear plastic sheet over my battery until in the case. Quote
Gerlach Posted August 19, 2020 Posted August 19, 2020 Tip, tape up all the tools you using on the batteries, then there will be no sparkie the spark Nice to see the DIY builds are taking off so good. ___ 1 Quote
___ Posted August 19, 2020 Posted August 19, 2020 12 hours ago, JustinSchoeman said: translate DALY->Pylon That would actually be insanely useful. It would cost a bit (arduino plus can-bus shield), but really easy to implement. A driver for Venus would of course be cheaper to the customer. No extra hardware. It can also be made to install/update from sd-card and to survive firmware updates... just saying Quote
JustinSchoeman Posted August 19, 2020 Author Posted August 19, 2020 Arduino Pro Mini, CAN driver and RS485 driver are all available on Aliexpress at less than $2 a piece. I imported a bunch of $10 grab-bags of the Arduinos and RS485 drivers a while ago. Just the CAN bus which I don't have, but sourrced the components locally for R50. *NB* these grab-bag cheapies are not galvanicly isolated, so need to pay close attention that the arduino PSU, BMS ports and inverter ports are isolated if you go this path! Quote
JustinSchoeman Posted August 19, 2020 Author Posted August 19, 2020 As an aside, this cell-top balancer prototype is also from grab-bag components (except the MOS + drivers). Component cost around R80 per cell. The biggest headache was an isolated bus for all the modules to talk to each other. Turns out low voltage high speed opto-isolators are remarkably expensive and very current hungry. The 'cheat' workaround was to use grab-bag NRF24L01 boards ($1.40ea) and just run them all on a 2.4GHz network. 'Look Ma, no wires!' Louisvdw 1 Quote
___ Posted August 19, 2020 Posted August 19, 2020 42 minutes ago, JustinSchoeman said: Arduino Pro Mini, CAN driver and RS485 driver are all available on Aliexpress at less than $2 a piece. Sure, but personally I don't have the patience to wait for it to ship, nor do I want to take the risk of using the Post Office, and if you add courier cost you have to bring in larger volumes to get good pricing. And then SARS wants their cut and you end up having to register as an importer if you do this more than a few times a year. I suppose if someone does this as a business venture, then yes... you can get that low. I actually don't see a problem with the cost of an arduino, even if you buy it from RS components Compared to the cost of the rest of the stuff that is cheap. What is attractive about the Arduino route is that it becomes a separate concern. You're not locked into some version of Venus (or at least less locked). I mean, you're already not locked, but things change over time. We're moving to python3 in a future release for example (2.70 probably). Also, it opens it up to other inverter makers. And fixing something or supporting something new is just a firmware update. Regarding the isolation, I'd just use a Texas Instruments ISO1050 CAN transceiver chip instead of the MCP2551 most shields have. It's not exactly a drop-in replacement (unfortunately, it needs its own isolated power supply on the other side), and it's an expensive chip, but again, it's cheap enough. Still, I've seen some of @Louisvdw's code, and a man who knows how to use the struct module most likely isn't some beginner to the space of packing binary data. I'd like to see what he comes up with. Also, knowing what I do about the ICC people (who use the console cable to talk to the Pylontech battery), I already know that there is a certain preference for using cheaper cables over more expensive ones, so a software+usb-serial combination may well find better traction than a hardware solution. Since I own an arduino with a canbus shield -- I use it to fake can-bms batteries that I don't own -- I actually like the hardware idea a little bit more... Quote
Louisvdw Posted August 19, 2020 Posted August 19, 2020 Perhaps @JustinSchoeman is willing to do some test for my driver. Then the next person who does use a VenusOS device will be able to interface with a smart Daly BMS. The only other Daly owners I have seen all have no comms. Quote
JustinSchoeman Posted August 19, 2020 Author Posted August 19, 2020 5 minutes ago, Louisvdw said: Perhaps @JustinSchoeman is willing to do some test for my driver. Then the next person who does use a VenusOS device will be able to interface with a smart Daly BMS. The only other Daly owners I have seen all have no comms. I should be able to test for you, if I get the time. Here is the Daly protocol if you want it. (The checksum is quite literally a checksum - modulo 256 sum of all preceding bytes.) Part 4_ Daly RS485+UART Protocol.pdf Louisvdw 1 Quote
Louisvdw Posted August 19, 2020 Posted August 19, 2020 (edited) Thanks. I do like that the Daly is on RS485 (there were some other reasons why I did not choose it when looking for a BMS) My LLT BMS communicate on RS232 which means you can only ever have 1 master and 1 slave. So I have to plug in the bluetooth RS232 dongle if I want to use the Android App and then plug the USB-FT232 adapter back afterwards. Edited August 19, 2020 by Louisvdw Quote
JustinSchoeman Posted August 21, 2020 Author Posted August 21, 2020 Inverter arrived and hooked up as a UPS for now to test. Running with 25mm^2 mockup cables at the moment, so can't push any real current through it. 40A step tests show really well balanced packs though. Only real issue is the drop between cell 8 and 9 (the link between the two racks of cells). This is way too high, and will cause the balancer to continuously target cell 9. Will be 'upgrading' the terminal end plates with 2 terminal posts each and running 2x 95mm^2 cables there to try reduce this. Quote
JustinSchoeman Posted August 21, 2020 Author Posted August 21, 2020 An evening's work, and the inverter is happy to think the Arduino isa Pylon battery... Now to get the two parts talking to each other... Gerlach and Louisvdw 2 Quote
JustinSchoeman Posted August 22, 2020 Author Posted August 22, 2020 A great galloping herd of expletives... Got all the software and hardware working. Reading all the state from the BMS, sending it all to the inverter, and the inverter refuses to charge the battery. I have no idea why, or even where to begin looking... Quote
___ Posted August 23, 2020 Posted August 23, 2020 21 hours ago, JustinSchoeman said: inverter refuses to charge the battery Is it a Multiplus? Usually the main reason, for first time users, is that the Multi is in passthru mode (it shows it on the screen) because there is no grid meter. The default config of the GX device is to expect a grid meter (Carlo Gavazzi). If you don't have one, you must disable that option in the ESS menu. After that, setting the ESS mode to "Keep Batteries Charged" should be enough to get it charging. Quote
JustinSchoeman Posted August 23, 2020 Author Posted August 23, 2020 2 hours ago, plonkster said: Is it a Multiplus? Usually the main reason, for first time users, is that the Multi is in passthru mode (it shows it on the screen) because there is no grid meter. The default config of the GX device is to expect a grid meter (Carlo Gavazzi). If you don't have one, you must disable that option in the ESS menu. After that, setting the ESS mode to "Keep Batteries Charged" should be enough to get it charging. Sunsynk, unfortunately... Battery charges fine with manual configuration. Only issue is when I switch to CAN BMS mode. It gets all the data from the BMS (as you can see on the display) but does not ever switch to charge mode. Just busy whipping up another Arduino board to data dump the Sunsynk (via Modbus) while the other Arduino does the CAN BMS translation... ___ 1 Quote
JustinSchoeman Posted August 24, 2020 Author Posted August 24, 2020 Tried copying the CAN dump from here https://powerforum.co.za/topic/4406-revovbydvictron/?do=findComment&comment=63004 substituting my voltages/currents, and zeroing the alarms. Same result... Seems to be something very specific the inverter is looking for. Dumping the inverters state shows a bunch of registers from 312-325 which seem to correspond to the CAN data. For some reason min discharge voltage is not being set, and there are two fields which do not correspond to CAN messages (Maximum charge/discharge current limit) which are 0, and are different from the overall limits from 0x351... So I may be missing a message which conveys the derated current settings (I assume for imbalance protection)... @plonkster I do not suppose you have some CAN dumps for an operation Pylontech battery? Just raw dumps should be sufficient. Pretty please? Quote
___ Posted August 24, 2020 Posted August 24, 2020 42 minutes ago, JustinSchoeman said: @plonkster I do not suppose you have some CAN dumps for an operation Pylontech battery? Just raw dumps should be sufficient. Pretty please? can1 351 [6] 14 02 50 02 C8 05 can1 355 [4] 5F 00 63 00 can1 356 [6] 77 13 A9 FE 0B 01 can1 359 [7] 00 00 00 00 04 50 4E can1 35C [2] C0 00 can1 35E [8] 50 59 4C 4F 4E 20 20 20 That's a list of all the unique stuff a Pylontech battery sends. I filtered out the duplicates so you can see just the important bits. 359 ends in 0x50 0x4E, which is the ASCII codes for PN. That's how you identify a Pylontech (this is in their official documentation, I'm not disclosing anything secret here ). There may be some issues around legality if you send PN without being a Pylontech battery... I mean in commercial endeavours at least. The 04 before the PN is the number of modules in the battery. The 4 bytes before that are the alarms and the warnings (the battery I took the dump from is showing no issues, all is zero). This is just about the only way in which Pylontech differs from some of the others. They use 359. The others use 35A. Also note that 35E spells PYLON followed by three spaces. JustinSchoeman 1 Quote
JustinSchoeman Posted August 24, 2020 Author Posted August 24, 2020 Thanks! Need to do some actual work for a bit, but I will plug those in tonight and see what it does... Quote
JustinSchoeman Posted August 24, 2020 Author Posted August 24, 2020 Quote 351 [6] 48 2 DC 5 10 E 355 [4] 4E 0 64 0 356 [6] 18 15 4 0 AA 0 359 [7] 0 0 0 0 1 50 4E 35C [2] C0 0 35E [8] 50 59 4C 4F 4E 20 20 20 Oh well... This is what I am sending now. Inverter's BMS display updated to include SOH, so something did change. Still not charging though. If I switch to normal battery mode, it starts charging. I then quickly switch to Lithium mode and go to battery status - it shows charging, and it shows the charge current, which rapidly drops off to 0, and it switches to discharging mode... Quote
JustinSchoeman Posted August 24, 2020 Author Posted August 24, 2020 I see the inverter also does not charge on 'Bat %' mode (where it operates on percentage charged) - I may actually be missing some setting somewhere here... Quote
JustinSchoeman Posted August 25, 2020 Author Posted August 25, 2020 Whee! Seems like it was working all along. For some reason, the inverter does not charge the battery in any SOC mode, unless you have excess solar input, or select 'Battery first' mode. With battery in voltage mode, it always charges the battery to the pre-set grid limits... Anyway, now that I am talking to the inverter, I need to set up a derating algorithm to reduce charge current/voltage when cells start approaching the limit. I am not sure if any of the more knowledgeable members around here would care to comment on these proposals. 1) Discharge: no specific derating algorithm - if any cell hits the minimum voltage, set discharge current to zero and turn off the discharge enable bit. Keep it off for at least 5 minutes to stop it from continuously 'bouncing' as the cell voltage recovers. 2) Charge... a bit more complex... a) if any cell voltage is ABOVE the maximum cell voltage, set charge current to zero, charge voltage to current pack voltage, and disable charge enable bit. b) i) if any cell voltage is equal to the maximum cell voltage, set charge voltage to the current pack voltage. b ii) if any cell voltage is within 50mV of the maximum cell voltage, then derate charge current proportionally over this range, with a minimum of 0.5A (max balancer discharge current) Quote
Louisvdw Posted August 25, 2020 Posted August 25, 2020 35 minutes ago, JustinSchoeman said: if any cell voltage is ABOVE the maximum cell voltage, set charge current to zero, charge voltage to current pack voltage, and disable charge enable bit Your BMS should do this already. 35 minutes ago, JustinSchoeman said: if any cell voltage is equal to the maximum cell voltage, set charge voltage to the current pack voltage. I was running with my driver like this today. What I found is that the run away cell keeps on increasing voltage, even though the max charge voltage was set to the pack voltage. After playing with the numbers a bit, it does seem that the measurements are not always as precise you expect them and the tolerance is also a factor of your voltage value. So while the BMS measure the fine voltage for each cell and the tolerance (say 5%) on 3.5V is very small (0.00175V), the inverter is working with the much bigger battery voltage (52V) and a tolerance on that number (5%) is much larger (0.26V). So it seems that charge voltage from the inverter was around 0.2V-0.3V higher than the max voltage I was specifying. I assume each inverter and BMS will be a little different, so you might need to play around with it a bit. 45 minutes ago, JustinSchoeman said: if any cell voltage is within 50mV of the maximum cell voltage, then derate charge current proportionally If you can't get the voltage tolerance value for your inverter and BMS, then it will help a lot if you reduce your charge current significantly (<5A) Quote
JustinSchoeman Posted August 25, 2020 Author Posted August 25, 2020 Thanks. The BMS protection limits are failure limits and are set higher than the healthy cell limits (usually 2.2V -> 3.75V for most BMSs I have seen - including the Daly). I would like to cap everything to the healthy cell limits as far as possible... Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.