Controls & instrumentation

The original car did come with power just-about-everything, but it was done using the technology and components that were available 60 years ago. The engineer(s) who designed it all did an amazing job, but there was only so much to work with, and a lot of modern-day features just hadn’t been invented yet.

So, the existing wiring harness is pretty limited in functions that it controls. It’s also all dried out, cracked and rusty, so I really don’t want to spend the time to clean it all up and then splice into it in a hundred-and-one places, because it’ll never be super-reliable. There are a lot of small changes to the way the car will now work, and upgrading the wiring harness that’s there just seems more trouble than it’s worth.

Instead, I’m going with a brand-new 12V-powered PLC. Finding one of those was actually a lot harder than I expected. There’s PLC’s aplenty, but they’re not cheap (incl. programming software, spending $3k-$10k is totally normal) and pretty much all of them want either 24V power or an AC-mains line. There are some small units out there that do take 12V, but they’re really tiny in capacity and feature-set and not exactly expandable (unless you want to spend the weekend soldering the pieces together).

I finally came across the BRX PLC line from www.AutomationDirect.com in Atlanta (no relationship and/or sponsoring etc). It’s very configurable, the feature-set is totally adequate for what I’m doing, and the cost came in under $1,500 with all of the specialty modules included. That’s $15 per input/output (switches and sensors, driving gauges and lights and relays), and compared to most fancy PLC’s, that is super-reasonable.

As for operating temperatures, this thing will ride in the trunk in a decently ventilated “box”, so it should not get much over 100F and the unit should be able to handle that. There is a water-cooling circuit going to the rear pack that runs right under the PLC, so I could splice into that if I needed to create some additional cooling capacity.

The idea of this unit is to

  • run all of the 12V accessories like lights, radio antenna, A/C etc
  • control DC/DC converter(s) that turn the traction battery voltage into 12V
  • track the charge-level of the battery pack and the battery temp
  • drive the all-original instruments so the fuel gauge shows battery state-of-charge etc
  • create all of the modern conveniences like interval-switching the wipers, key-fob door-locks, parking sensors, seat heaters etc etc.

To create & test the PLC code, I’ve rigged up a dummy dashboard out of a scrap piece of Lexan and a set of all-original dash parts, a bunch of LED’s as head-lights & tail-lights, some 6-position switches to be the gear-selector, all to try and get as much into this simulator as possible.

I have not found any specs on this PLC related to g-forces/vibration tolerance, so that will be the first big discovery once we’re bouncing down the road. It’s a Cadillac (at 6,500 lbs) so things shouldn’t bounce too much, but there will be some vibration and that could make the relay-outputs jitter. We’ll find out, and if I need to use additional automotive relays I can.

Controlling the motor(s)

That part is not as straight-forward as I would have liked. The original documentation for the Siemens controller describes a “pedal-drive” mode where the unit is controlled through some simple wiring, and I was all good to connect it to the PLC that way and “go”. Turns out, Siemens made a change somewhere along the line after writing the manual and before making my controllers, and the pedal-drive mode is no more. Now it’s CAN-bus only, and this PLC does not have a CAN-bus option.

To work around this, I’ve created a 2-tier control logic.

At the “higher level”, the PLC still reads the ignition-key, the gear-selector, the brake & steering pressures, the coolant flows. It then also drives the dashboard gauges to show speed (speedometer), battery charge (fuel gauge), coolant temp (temp gauge) and some alarm-lights. The user/driver interacts with the PLC, and the PLC figures out whether the car is allowed to start applying driving force.

At the “lower level”, the level the user does not see/manipulate, there is a CAN-bus interface for each of the Siemens motor-controllers. That interface will read the bare-minimum signals from the PLC (allowed-to-apply-power and forwards<>backwards) as well as the accelerator-pedal position & the cruise control head-unit / brake pedal. The interface figures out how much power we want applied, and sends that over CAN-bus to its motor-controller. Likewise, it receives the speed, voltage & current, and temperatures from the motor controllers and feeds those back to the PLC.

I’m using two Arduino R4 boards as the CAN interfaces, and made an overall PCB that does some signal conditioning and holds the Arduinos. I do appreciate the challenge of building something automotive-grade out of Arduino, I think I have safe-guarded things OK through the signal-conditioning board, but only time can tell whether this will work reliably. I have good experiences with the older Arduino’s, this one looks OK, and we’ll just have to find out.

Getting this to run right in all of the modes the car can be in will take some late nights programming, but in the end it should be a clean solution…