More on
Charger Control
Yesterday we completed testing of the charging software. We decided to keep it simple, and have the
Driver Controls Unit (DCU - it connects to the pedal and motor controller, and does mundane things like brake lights) talk to the charger and BMU string with its two spare serial ports. (We considered a second DCU just to convert CAN to 2400 bps serial for the Elcon charger(s), so we won't need a second DCU in later chargers if they ever fix the CAN bus bottleneck, or if we use a different charger, but decided against it). We'll still need a second DCU if and when we get a second charger; it's analogue interface, CAN bus, etc won't be used. At least this way, we can have the same software in both DCUs.
Here are the mods we made to the DCU:
[ Edit: The green mods haven't been made yet; we're considering whether to put the mods inside the DCU, outside, or in the cable shroud. For now, we're connecting one side of the charger output's differential drive to ground. ]
So we've sacrificed the gear selection LED/lamps (12 V) for 3.3 V differential drivers and receivers for what we're calling our IDCL (TM) (Isolated Differential Current Loop) interface. That's what we use for BMUs; we'll be using the same thing to the charger as well. Near the charger, we'll have a box with more or less the same
circuit as the CAN interface that came with the charger. In fact, we've used a prototype BMU board with end-of-segment circuitry, which converts the charger's single ended signal to differential drive. Hopefully, that will minimise noise sensitivity, and we're used to using it, and have our Novus RS485 boxes to test it with.
The charger algorithm is quite simple. It initially ramps the charger up to full current (see below), with a voltage limit that corresponds to an average cell voltage of 3.65 VPC. (Really the voltage limit is irrelevant; it's just a very small safeguard in case all the other safeguards fail). Every time a badness byte is received from the BMU string (two times per second at present), the charger software sends a voltage request to the next BMU, in a round robin fashion. This is mainly to find out when all BMUs are in bypass (at 3.60 V). All-in-bypass is currently detected by all reported voltages >= 3.59 (when a BMU is bypassing, the bypass current comes on and off as needed, and if it happens to be off, it could be a little under the 3.60 V bypass threshold). The software remembers the start of the most recent string of BMUs that are all in bypass. If that becomes the whole pack, then charge is complete, and we start a "soak" phase. This lets the cells stay at 3.60 V for five minutes, at 0.5 A current (50% duty cycle), so the last cell to come up to voltage gets a chance to stay there for a while. At the end of this soak period, the software sends the command to turn the charger off.
We have a better scheme whereby the BMUs can determine when they are all in bypass on their own, but as of yesterday, we had zero (0) bytes free, and could not implement the scheme. Fortunately, TI have come out recently with the G series chips; some of these have 8K bytes of flash (compared to 2K now) and 256 bytes of RAM (compared to 128 bytes now). All for less money; technology is wonderful. We've ordered two samples of these. We intend to use those on the diffamp boards that we have ordered two prototypes of.
The charger will also cut back to 0.9 A at any badness (over-voltage, over-temperature, and possibly problematically, under-voltage). It will gradually raise the current 0.1A every second after that. Hopefully, this will cause current to sawtooth from 0.9 A to whatever current the string can currently handle, so the charge is not needlessly slowed down, but the cells remain safe. It also starts the charge off at 0.9 A, ramping up to maximum over some 46 seconds.
The shunts arrived recently, as well as a bag of SMD resistors for about $60. We always seems to be wanting to try out something and have to wait for the next order to buy a 2.5c component; now we have E12 values in stock. Hundreds of them.