The Columnator |
The Columnator is my latest embedded micro-controller project for
my C6. It is a replacement for the Steering Column Lock Controller
Module (SCLCM), a subsystem in the C6 that is notoriously prone to
failure and has the potential to leave the car owner stranded.
If you have ever owned a C5 Corvette, chances are you have
experienced a failure
of the steering column lock system. When the system fails,
it leaves the car unable to start and the steering column locked;
the owner must call for a flatbed tow truck for a trip to the
Chevy dealer. The C5 column lock design was so prone to failure
that GM was forced to recall all C5 Corvettes with manual
transmissions to fix their column locking mechanisms. Sadly, many
of these "fixed" column locks failed again, leaving their owners
stranded. This was a publicity disaster for GM and a nightmare for
Corvette owners. The aftermarket responded to this need by
offering "Column Lock Eliminators" - small devices that plugged
into the wiring harness and either emulated or completely
eliminated the column lock mechanism, thereby fixing the problem
for good.
GM tried again with the C6, and designed a totally new column
locking mechanism. Unfortunately, this new design was also
failure-prone, and many
C6 owners were also left stranded with a "Service Column
Lock" message on their Driver Information Center (DIC). GM finally
learned its lesson, and stopped installing the column locking
mechanisms in the 2006 model year, at least in the US market (some
European countries apparently require all cars to have column
locks, so Corvettes destined for export to those countries still
have column locks installed at the factory). Once again, the
aftermarket responded to the need, and one can now purchase a
Column Lock Eliminator (CLE) for the C6. This device plugs into
the SCLCM in place of the real steering column lock mechanism and
is designed to provide the appropriate voltage feedback to make
the SCLCM believe that there is a properly-functioning column lock
in operation.
As you have probably guessed by now, my C6 suffers from this
column lock problem. The first time it happened to me, the column
lock mechanism was replaced under warranty. Eventually that
replacement lock also failed - and this time no warranty was in
effect. Faced with the prospect of paying approximately $1000 for
a dealership to install another column lock (with no assurance
that this new replacement would not also fail prematurely), I
decided to try one of the aftermarket Column Lock Eliminator
devices. It worked great for about a week, but soon I started
seeing the "Service Column Lock" messages on the DIC once again.
Apparently the CLE does not work 100% perfectly with every car,
perhaps due to tolerances in the various components. Whatever the
cause, sometimes the SCLCM in my car isn't fooled by the CLE, and
the dreaded "Service Column Lock" message appears on the DIC. I
needed to find a permanent solution to this problem before I wound
up stranded somewhere.
By studying the C6 Service Manual, I learned that the steering
column lock has two main components: the steering lock mechanism
itself, and a controller module (the Steering Column
Lock Control Module). The SCLCM responds to
messages it receives via the Class 2 bus from other modules in the
car and locks or unlocks the steering column in response to the
commands sent to it. The SCLCM also monitors a feedback circuit
from the column lock motor to determine whether the lock mechanism
is working correctly; if the SCLCM doesn't like the feedback that
it receives from the lock motor, it reports a fault (DTC),
displays the "Service Column Lock" message, and prevents the car
from cranking - IOW, it's the SCLCM that can leave me stranded. If
I could just remove the SCLCM from my car, my problem would be
solved, right?
Unfortunately it's not that easy. Every module connected to the
Class 2 bus sends out a "State of Health" (SOH) message
periodically. Other modules on the bus listen for these SOH
messages; if a SOH from a particular module is not received within
the expected window of time, the other modules on the bus will
record a DTC and the Check Engine Light will come on. In addition,
if the RCDLR sends a request to unlock the steering column and
gets no response, the car will refuse to start. No, simply
unplugging the SCLCM is not the answer.
What if we could reprogram the SCLCM to ignore the column lock
mechanism? What if we could get it to always report "success"
whenever another module asked it to lock or unlock the steering
column without actually energizing the column lock mechanism? This
would leave the steering column permanently unlocked and never
prevent the car from starting. That would solve the problem, all
right, but it's pretty tough to reprogram an embedded system
without the proper development tools and (more importantly) the
source code to the firmware. And the chances of convincing GM to
release new firmware to lobotomize the SCLCM are somewhere between
Slim and None. So if we can't remove the SCLCM, and we can't
reprogram it, perhaps we can replace it?
Pulling out my trusty Class 2 bus monitoring tools, I began to
study the message traffic to and from the SCLCM on the Class 2
bus.
The following (simplified) sequence of events occurs when
starting the car:
A similar sequence occurs when the driver shuts off the ignition:
Happily, the number of messages that an emulator needs to respond to is quite small. It must of course respond to the "lock" and "unlock" commands as well as the "password" message from the RCDLR. It must also transmit the "SOH" messages which all nodes on the Class 2 bus must send periodically. The emulator must also monitor the power mode of the vehicle, and stop transmitting altogether once the ignition is turned off.
Ignition-off power consumption is a prime concern with any node
on the Class 2 bus (see additional discussion here). Unlike the No*Rats, which must be able to wake up
periodically even while the Class 2 bus is quiescent, the
Columnator only needs to run while the Class 2 bus is active. The
AU5783
Class 2 bus transceiver chip I selected for this project has a
tremendously useful feature: it has an "inhibit" output signal
which can be used to shut off power to the rest of the circuit
whenever the Class 2 bus is quiescent, cutting ignition-off
current draw to about 90 uA according to the datasheet (the actual
current draw us too small for my Fluke meter to measure - the
display shows 0.000). When the other nodes in the car "wake up"
and traffic once again appears on the Class 2 bus, the AU5783
re-enables power to the microcontroller which quickly resumes
normal operation. A small relay controlled by this inhibit signal
switches 12V power to the main Columnator circuitry.