August 2016

I/O board design

How to properly design a PCB is too broad of a topic to describe on one web page. Sort of like trying to explain how to drive a car - there are generic acceptable concepts and rules but everyone will still do it differently. Everyone has their own techniques and their favorite CAD tools. I'll just briefly illustrate the process using Audi I/O expander board as an example. This is simple board - it has just two CAN I/O expander ICs with their CAN transceivers and high side relay drivers as active components. It is meant to turn on and off contactors, monitor status of their contacts and also provide readings from LEM current sensors - same ones used in Think. It is impractical to run relatively high current wires from BMVCU along the vehicle all the way to the back where the battery box containing contactors is located. It would be a bulky cable of about 25 conductors to power all the contactor coils and run all the signals to be monitored back from I/O boardt to BMVCU, let alone cross-talk between them. Because CAN bus already extends there to run chargers, I naturally decided to run I/O board periphery over CAN. Microchip makes CAN I/O expander chips (MCP250xx series) specifically meant for this job. This choice allows avoiding using yet another processor and write the code for it.

So first I defined what do I need to monitor and how many total I/Os do I need. Each expander has eight I/Os (one is actually input only), four of which can be configured as analog inputs. What I got is five contactors to turn on and off (that's 5 outputs), five switches monitoring their status (that's 5 inputs) and two LEM sensors two outputs each (That's 4 inputs, so  14 I/Os total. I can get away with two ICs and have couple of spare I/Os. For ease of troubleshooting I included LEDs to monitor status of digital I/Os directly by looking at the board. The rest was trivial - usual CAN transceivers and simple 5V switching power supply. Physically the board will have clamp cage connectors along the edge and should be convenient to connect all the wires to it. This choice eliminates the need for plugs, crimp pins and receptacles and is more reliable than screw terminals as the connections cannot get loose over time.

First I captured schematic in CAD software. there was nothing to improvise with - the circuit was pretty much pre-defined. I had to come up with default values for the expander ICs and  two chips were preprogrammed right then. I needed to make sure the CAN IDs were selected such that do not interfere with battery chargers and EVision components since they all are part of common CAN3 bus (there are 3 CAN buses from BMVCU to the battery pack - two for each string of 16 RLEC boards and the third one - for chargers, EVision and this I/O board.

The only component that required some testing was contactor driver IC. The selection is not as trivial as it may seem, you need to know your load really well (see here for details). So once this was tested I drew final version. I've used the MCP25050 before, so I knew it will work.

Here below are several screen captures and photos of iteration process. You just move things around to accomplish optimal location of each components. Keep relay drivers close to the connectors as long traces will contribute to the voltage drop and power losses. All five contactors I'll be using are the type TE EV200-HAXXA01. Other than consideration of high current traces and keeping oscillators close to the expander ICs, the board is very sparse and easy to route manually (I never use auto routers anyway), so several iterations later final PCB was completely designed in one evening.

A couple of nights behind CAD workstation yielded finished designed which was sent out for PCB fab and SMT assembly. All I had to do is install through hole components, bolt on precharge resistors and snap in charger's fuses. Everything worked out as expected from the first go, so I don't have anything special to report on this project. Below are some screen captures of the design process and construction of the board.


The electrical schematic of the Audi battery pack I/O board. Electrically it is remote node for the BMVCU.
After importing schematic's netlist into the layout portion of the CAD software, all the components were spread out to stay close to respective connectors. Because there was no physical size restrictions (in relation to how many components are on the PCB), all the components could be placed sparsely.
This capture shows ratsnest of netlist connections, which helps to guide placement for track optimization. Some subtle properties of the circuit had to be taken into account (such as high current paths separation or specifics of switching power supplies layout art), but overall the process was very standard one.
This capture shows about final position of all the SMT components. The board is ready for routing copper traces. This will be two layer PCB.
Shortest high current traces from driver ICs to relay coils are routed first.
The rest of digital section of the circuit is routed.
Switching power supply layout demands following special design rules and is sensitive to proper ground planes, excessive inductance traces and other features specific to such circuits. Location of each component has to be optimized with this in mind. Improper layout can easily make the supply noisy, ringing, inefficient and possibly emit too much EMI.
As one of the final steps is copper pour on both sides of the board. Typically for two layer designs the top pour is power net and the bottom is logic ground.
Silk screen layer is always messy after final positioning of all the components. Time to make it neat and clear.
After that step the design is completed, On this capture the DRC was ran and each trace got labeled with its net name if DRC passes.
This is what the board will look like. At this point gerber files were generated.
Here is manual pick-and-place machine I typically use for one-off projects and boards like this, but the problem was - the PCB is too long for my home made reflow oven, it just won't fit. So the SMT assembly had to be done using outside service. So the gerbers were sent sent to the PCB fab along with the parts kit.

Completing the I/O board.

This is what came from the PCB fab and SMT assembly. All the SMT components are mounted.
The small break-away adapter boards along top and bottom edge are unrelated to this design, I always include these boards with PCB fab jobs to have spare adapter boards. These greatly facilitate prototyping with ICs that don't have through hole packaging version.
So this is what actual I/O PCB looks like after breaking away unneeded parts of the board.
I used four precharge resistors with gives me option to adjust precharge time by connecting them in series, parallel or mixed. Each resistor can handle 50 W of power for a few seconds, so 200 W total.
Completed I/O board.
Did I mention that everything I build actually works because I test and re-test and re-test after each reasonably big step in building process, so any problems surface early on and there are no surprises later? Here is one of those tests. This video clip shows the board connected to a PC over CAN bus. The PC runs a macro sequencer in PCAN explorer, toggling each relay driver on and off for one second. At this point no contactors are connected but the monitoring LEDs are directly monitoring drivers outputs so if they lit, the coils will get 12V power. This video is ~50 MB so may take a while to load.
Here is the test running actual contactor sequencer state machine on the BMVCU board, no PC connected. The sequencer on this video turns:

- Left Mid contactor ON;
-1 s pause
- Right Mid contactor ON;
-1 s pause
- Pack negative contactor ON;
-1 s pause
- Precharge contactor ON;
-10 s pause
- Pack positive contactor ON;
-3 s pause
- Pack positive contactor OFF;
-1 s pause
-Pack negative contactor OFF;
- 1S pause;
- Left Mid contactor OFF;
-1 s pause
-Right Mid contactor OFF

The 10 s precharging tome was chosen so it would be easy to trigger the scope and observe precharging on the HV bus. I expected precharge to actually complete within 250 to 500 ms time, and if it tales longer, I would re-wire precharging resistors in parallel or mixed arrangement. This was calculated knowing capacitance on the HV bus, which consists of the caps in both power inverters and of the cap in the DC/DC converter. 

This video shows the scope connected to the HV bus and capturing precharging process.
Screen capture of the above. You can see that it takes 640 ms to completely precharge HV bus to 680 BDC battery voltage, and it takes 310 ms to precharge to 90% of that voltage. Pretty close to the target. So I will be changing timing is the state machine to 250 ms pauses between each event except for the precharging which will be around 350 ms.

The only remaining test is of LEM sensors, but this requires the supporting software routines. The inputs of the MCP25050 were tested to read analog values and the LEMS are known good units from existing Think pack, so I don't anticipate any problems. Update to this will come when the test software will be available.

1 Yes, I know quite a bit more details about these packs and their BMS than I'm allowed to share in public domain since much of specifics as well as sources of such info is still considered EnerDel proprietary and confidential. The Think EV business is unfortunately bankrupt for a few years now, but EnerDel is alive and well, thus as with any major OEM I have to respect confidentiality of proprietary information.

Next - charging system

Home of the project