Page 1 of 1

MultiCell slave board with EVILbus

Posted: Sun May 29, 2011 11:09 pm
by GregsGarage
As I have previously mentioned I want to do some new multi-cell slave boards. The new boards will have ICSP header for programming, use smt components, be small in size (4 cell on a 5cm square). I am sticking with the 12F683 pic, but the board should be pin compatible with the 12F1822, just need to omit the lm385 and it's pull-up resistor (and new software). A single cell schematic can be found here. I have breadboarded it and the ICSP header works fine, I can read and program the pic o.k. 8)

The biggest change is to the master and slave bus. Here I have completely changed the master-slave comms. The new bus is called the EVILbus, or EVIbus (Electric Vehicle Instrumentation bus). Details can be found here and a pdf specification here. The basic idea is that all nodes are connected in parallel, like our master bus. Timing of when slaves talk is done in software, instead of the hardware solution we have with the slave bus. So the master sends a command for slave voltages, all the slaves get it at once and send in their allocated time slot based on their id number stored in eeprom. If you read the spec, it calls for a heartbeat pulse to be sent once a second from the master. This keeps all slaves in sync, but also means we just need the slaves to listen for the heartbeat and use that to send cell data. Another item in the spec is a long break, basically just a longer heartbeat signal. We can use this to tell the slaves to listen for special commands, ie., adjust load cut in values, etc. So for normal operation the slaves send cell voltage every heartbeat and since the slaves are all taking their measurements at the same time we should be able to get rid of the separate load off and load on commands required for charging.

I am sure this will need a lot more explaining :shock: but if there are any questions just ask. :) Also, the EVILbus does have a proven track record, Manzanita Micro use an implementation in their PFC chargers and battery regulators. Oh and I should mention, the cabling and connectors are just RCA jacks and audio cables. A nice cheap cable solution for data comms. :D My next step is to test the actual comms. For this I am going to use a Arduino for a simple master and get the oscilloscope out and see how it behaves. I am sure some resistor values will need to be changed to fine tune it.

Re: MultiCell slave board with EVILbus

Posted: Mon May 30, 2011 3:16 am
by retepsnikrep
Looks interesting, some of your resistor values look a bit odd though. 10M?

Re: MultiCell slave board with EVILbus

Posted: Mon May 30, 2011 9:11 am
by GregsGarage
I found this app note AN3002 for the 6N139 Darlington Opto. This quote from the app note explains the resistor values and the circuit.
In Figure 8, where no signal is being received, the input
transistor is not conducting. The output transistor is very
slightly conducting. The 4.7MΩ resistor causing this slight
conduction will not bring the “Output” to a “0” level.
The purpose of this slight conduction is to reduce the
turn-on delay time. When a signal is received, both input
and output transistors are turned on causing the “Output” to a
logic “0” state. The 4.7 MΩ resistor will now tend to reduce
the output transistor’s turn-off time.

I have scaled values for the different operating voltages we are using, that is cell voltage and 12 volts, not the 5 volts shown in the example. A bit more explanation of how the EVILbus is connected and works. The master will have a similar circuit with U1 and U2 and their associated resistors and diodes, but at the master J1 pin 1 is connected to a 150 ohm resistor which is connected to 12 volts and J1 pin 3 is connected to earth through another 150 ohm resistor. These terminating resistors are supposed to help in noise supression and also provide protection in case of a short to earth on one of the data cables. So when the bus is powered up, the led in U1 is on but only at 0.5ma because the current has to flow through R6 back to earth. The 6N139 is designed for a very low led current and this is important because all the leds in all the nodes will be conducting, but even with 50 nodes we only have a 25ma drain on the bus. With U1's led on, the RX line on the pic is pulled low, R1 is a pull-up resistor. When any node transmits the led on U2 is turned on, causing it's pins 5 and 6 to conduct. This pulls the bus low, turning off the leds on all the U1s at every node on the bus. R3 provides a pull down to make sure U1's led turns off.

The trick here is that the slaves ignore any data on the RX line while they are sending cell data, only the master listens to the data coming in. Only after nearly a second since the last heartbeat pulse do we need the slaves to start monitoring the RX line listening for either a heartbeat to send cell data or a long break to accept commands. It will be a bit of work in the software, but should be achievable.

A couple of other notes. While looking at the 12F1822 data sheet I noticed it also has a onboard die tempurature sensor. That could be useful for cell temperature measurements, although I am reluctant to mount slaves nest to the cells. The EVILbus can be used for more than just cell voltages, for example a current sensor could send data through the same bus as well. The advantage of this is that you would get a snapshot of all cell voltages and current taken at exactly the same time which I think could be very useful. But one thing at a time, I need to order some very high value resistors for testing.