I’ve been studying your latest schematic more, and have a few questions and thoughts:
Don't hesitate to ask if you have other questions as usually there has been a lot of thinking (actually, I take more time thinking than placing components and wires...) and sometimes it's not clear why something is the way it is on the schematic.
What are your plans for J3 Aux input?
It's a user input usable for whatever you want as long as it's between -2.050 V and + 2.050 V between the two wires and no more than 8.5 V (either + or -) of common mode voltage from B-. It's just that I had a spare input on the mux and it wasn't hard to find a spare op-amp... It's very similar to the shunt input but with a unity gain instead.
Same for the aux temp sensor (well, there was two aux sensors but I had the idea to add a temp sensor directly on the BMS so only one aux left), I had a spare input on the mux and as it's only one trace and 3 more pins on the connector...
I really like the way you nested the muxes! Expanding on this idea, would you consider moving some input signals from IC240 (Ibatt,Vbatt,preChg signals) to a separate mux (much like IC250 is connected) in order to allow nested expansion? This would allow duplicating the IC210/Q220/IC230 cell monitoring circuit for additional cell strings. You could even move this circuit onto a stackable daughter board with power,A0/1/2, and jumper selectable input pins to multiple IC240 input pins. This would also help to keep the mcu pcb footprint smaller. 16S3P string monitoring would consume 6 inputs on the inner mux, leaving 2 inputs on IC240 for IC250 plus the new mux for Ibatt/Vbatt/preChgx. 16S4P string monitoring would require a third nest or 4-bit muxes. Wishing I had gone with 280Ah cells instead of 50Ah cells in 4P!
I like the idea but at this point you've duplicated half the BMS (and lost the redundancy of multiple independent batteries) and there's some problems like the temp sensors; in theory you can use the redundant battery sensors to monitor two other strings of cells but you loose the redundancy...
Also it's a pretty big modification to make on the schematic as the mux is in the middle and more importantly I don't have the use for this modification, nor a lot of people would, I think. But what you can do is alter the design (the project KiCad files will be available) and make it fit your needs. It's the problem with a project like that: you can't please everyone as you can't include all the ideas of everyone even if you try to.
I think a better approach in your case would be to simply use this design but don't populate all the Vbatt, Ibatt and HW protections components on the other 3 boards, and don't populate the arduino on any of the 4 boards but use a bigger arduino or other MCU instead.
You can parallel the A0/A1/A2 of all the boards, same with A3/A4/A5, and same with D12/D13 (SPI) but need to have separate I/Os for each SS (D9) so you can talk to each ADC separately. All the other I/O for the disconnect and co just need to be taken from the first board where you connect the disconnect, HMI, ...
The PCB itself isn't expensive, it's the components and assembly time that are, so you'll be able to have a cheap solution without heavy modifications (TLDR: don't put some components, plug some bigger external MCU wires where the arduinos would go).
Another approach would be to do a 4P16S pack, that way you just have one battery to monitor, far simpler
I’ll keep studying. Amazing work so far!
Thanks
Your discussion ealier about the dump resistors and light bulbs gave me the idea to have a heater output (well, an output for a relay for a heater more exactly). Actually, the question is why I didn't think about adding that earlier? a lot of people are adding external temp controllers when the BMS they use has already one or more temp sensors and can't control a simple heater... we need to change that...
Also,
@FilterGuy sent me a PM about having a dedicated I/O for the BMS to tell other devices it disconnected the battery, and for other devices to tell the BMS to disconnect the battery. It would be the same as the fire I/O in regards to the technical aspects: input all the time with a pull-up resistor, changed to an output to pull the line low when needed.
At the beginning of the thread there was a similar request, so I guess it's a pretty popular need.
Now, as you're following you know I've run out of I/Os on the arduino...well, that's not totally true, there's still D0 and D1 available but they are shared for the USB com so there's some limitations. I need to look in more details about that.
What do you think about those I/Os usage? (because after that we are really out of available I/Os, we can't add more things, so we better use them wisely...)
Edit: added the most recent version of the schematic. Not much has changed, I didn't had time to add the 555 but I changed the 5V regs and replaced the HI/LO by TOP/BTM in the power labels names which is less confusing.