We’ve had a few discussions lately about measuring the voltages on each battery in a large serial chain, most recently this thread
In which we covered just about every possible method. I’ve been at a loose end today so I thought it was worth spending some time to come up with a solution. Note that this is A solution, there are simpler ones (VCOs?) and probably better ones (multi-drop) but I feel this is a good compromise.
Schematic attached and some details as follows.
Daisy chained nodes - I know this means one-out-all-out but it does allow any number of nodes to be added with no addressing tom foolery.
5-15V input - Suitable for 6v and 12v batteries. I would like to have done 2v as well but that requires a boost regulator. Maybe later.
40V tolerant - The regulator can handle a 40V input and 45V in a load dump situation, so could be used in vehicles.
Isolation - the downstream link (0V referenced) is not isolated and can connect directly to an Arduino. The upstream link (highV referenced) is isolated so it also can be connected to an Arduino with a simple current-limiting resistor for the opto LED.
Comms - Bit banged async on the processor, normal Serial or SoftSerial on the Arudino. Data inverted (line idles low) so opto LEDs aren’t being driven all the time.
Processor - The Tiny85 could be used but an 84 has more pins so a few extra features (LED and temp sensor) can easily be added and there’s no contention issues with the ISP pins.
Protocol - TBD, but something like the Arduino sends a start byte and each node adds the temp and voltage info and maybe a checksum.
It probably should have some more input protection.
D3 will screw with the input voltage level but this is a fixed offset that can (I think) be dealt with by the software.
D3 should be a schottky
Anyway that kept me off the streets for a few hours, all comments gratefully received.