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.