Comp-U-Kat
Overview
The Comp-U-Kat is an NXP LPC2148 ARM7 based controller for monitoring various functions on my 2006 Suzuki Katana GSX600F (pictures). It originally started out as intending to be nothing more than an automatic turn signal canceler, a function my 1999 Harley Sportster (pictures) has.
Rapidly thereafter, I started coming up with ideas for additional functionality, such as gear indicator (I keep trying to shift to 7th), oil temperature, oil pressure and voltage monitoring. Why not add a GPS? And support for outside air temperature (OAT) and humidity? And trip logging? And... You get the idea.
Some of the functionality is speculative, such as the cruise control. Most cruise controls seem to be PWM driven. However, the Katana uses a spring-return throttle, rather than a two cable system. This means that you can't override the cruise control servo by simply twisting the throttle back towards the idle position. There has to be some way to forcibly disconnect the servo (perhaps a pull-cord that rips a connector out might work).
One of the flaws of the Katana is that the speedometers typically read 5% high. I have not yet clocked an even mile with a GPS to determine if the odometer is also off, or the odometer is dead-on, and the error is deliberately introduced into the speedometer. There are a couple after-market correction kits [1] [2], but the question arises that since they're re-timing the VSS line, are they then introducing a 5% low error into the odometer? I'd rather live with a speedometer error than an odometer error. Depending on the results, the idea was to have the Comp-U-Kat be able to re-pulse the VSS line so the speedometer displays correctly.
Originally I had intended to determine the gear position based on RPM and speed. This works well as long as the clutch is not pulled in. There are a couple units on the market that can display the gear position by deriving it this way [3] [4]. Some users have reported that they have lag, and if you pull in the clutch and downshift, they have no idea what gear you're now in. I find this to be sub-optimal. Some of the older Suzukis had gear position indicators, and did this via a plate with 6 or 7 contacts (neutral plus 5 or 6 gear positions). It is claimed that the gear position indicator from the older bikes will work on the later models, so I'd prefer to use that and get absolute gear position indication, regardless of speed, clutch pull-in, etc. Suzuki part number 37720-45100 is a 6-speed position sender. Got one off of eBay, waiting for it to arrive.
The current plan is to have a display on the dash, and the controller located under the seat, in the stowage box. All connections to the bikes wiring harness should be easily disconnected, with minimal impact on the original wiring.
The LPC2148 processor has 512K of flash, 32K of RAM, 2 UARTs, USB, and a host of other functions. The processor runs FreeRTOS as its OS, with several tasks to take care of the GPS, position logging, the display, and other miscellaneous functions.
Current Status
- 2008/05/21
- After working on the Flight_Engine_Data_uP, I am becoming inclined to switch from the LPC-2148 to the LPC-2468 for the Comp-U-Kat. Price isn't a factor, and I've got a lot more extra pins. I'll put the core functionality on the main board, and put mezzanine connectors for a daughter card to handle future functions. I am also considering adding support for thermocouples for exhaust gas temperatures (EGT).
- 2008/04/07
- The 37720-45100 gear position indicator is not the same diameter as the stock neutral-only sensor. Now I need to find something else, or fab one up.
- 2008/03/30
- Installed the VDO sensor into an aluminum box along with a thermocouple. Put the unit in the oven, heated it to 410F, then started taking resistance readings on the way down. Found a correct curve after much searching and cross-referencing part numbers. My readings are well within spec.
- 2008/03/27
- Found 37720-45100 gear position indicator on eBay
- 2008/03/26
- Very little has been accomplished. In the process of starting this project, I ended up developing the LPC2148 demo code package. I have prototyped the display using a PIC 18F4620 processor to drive the HDSP-2112 displays. LPC2148 pin assignments have been completed, although this needs some review. I need to learn to properly interface the oil temperature sensor (a VDO #1-531-006-657D), then I can start drawing the schematics.
Functions
- Gear indicator
- Oil temperature
- Oil pressure
- Battery voltage
- Charge current
- Turn signal auto-canceler
- RPM
- Speed
- Cruise control
- Controller temperature
- Outside temperature
- Wind chill factor
- Humidity
- Other possible functions
- Speedometer correction
- Compass
- Barometric
- GPS
- Accelerometers
- Data/trip logger
- Fuel totalizer
- Shift indicator
- Alarm system
- Relay output for... what?
Features
- Turn signal canceler detects burned out bulbs
- Clutch, brake, or neutral keeps turn signals from canceling
- Canceling can be flash, distance or time based
- Speed trap warning (requires GPS)
- Dewpoint alarm
- Oil over-temp alarm
- Oil temperature high limit recording
- High/low voltage alarm
- Under/over current alarm
- Distance to service notification (oil, chain lube, etc)
- User trip time/distance logging (GPS not required)
- Last trip time/distance (GPS not required)
- Trip time/distance since fill-up (GPS not required)
- Trip logging (GPS required)
- Selectable units (F/C, lbs/kpas, etc)
Connections
- Vss
- Tach
- Neutral switch
- Brake light
- Battery
- Ground
- Turn signal relay
- Clutch
- Oil pressure sensor (?)
Architecture Notes
Currently my thinking is to make the main board the data collector, and then continuously send the collected data to the display board.
The switches for controlling the display could be supported on either the main board (remote switches) or the display board (local switches). The single line LED display would likely use remote switches. For a graphics display, with a custom bezel, local switches might be on either side of the display. For remote switches, the key presses would be embedded in the data stream going to the display.
Parts
- NXP LPC-2148 processor (or maybe LPC-2468)
- ET-312 SiRF III GPS receiver [5]
- MMC/SD card connector (not exposed)
- SHT1x humidity/temperature sensor [6]
- AT24C1024 64Kx8 NVRAM
- LM5576 switching regulator (6-70V in, 3.3V @ 3A out)
- Lithium coin cell for real time clock
- Floscan 20B 201-019-01 fuel flow sensor [7]
Processor Tasks
- CPU tasks
- Monitor (partially done)
- Display / user interface
- Sensor gathering
- GPS parser
- Support code
- FAT file system support
- USB support (done)
- UART support (done)
Pin Assignments
Function | Type | Pin | Unit Name | Alternate Functions |
---|---|---|---|---|
Display | UART | P0.0,P0.1 | TXD0,RXD0 | (none) |
GPS | UART | P0.8,P0.9 | TXD1,RXD1 | (none) |
Debug console | USB | P0.23,USBD+,USBD- | VBUS,D+,D- | (none) |
Air temperature | I2C | P0.2,P0.3 | SCL0,SDA0 | (none) |
Humidity | I2C | P0.2,P0.3 | SCL0,SDA0 | (none) |
Unit temperature | I2C | P0.2,P0.3 | SCL0,SDA0 | (none) |
Real time clock | I2C | P0.2,P0.3 | SCL0,SDA0 | (none) |
Barometer | I2C | P0.2,P0.3 | SCL0,SDA0 | (none) |
Compass | I2C | P0.2,P0.3 | SCL0,SDA0 | (none) |
MMC card | SPI | P0.17,P0.18,P0.19,P0.20 | SCK1,MISO1,MOSI1,SSEL1 | (none) |
Cruise control servo | PWM | P0.7 | PWM2 | EINT2 |
Oil temperature | ADC | P0.12 | AD1.3 | (none) |
Oil pressure | ADC | P0.13 | AD1.4 | (none) |
Battery voltage | ADC | P0.10 | AD1.2 | CAP1.0 |
Current | ADC | P0.6 | AD1.0 | CAP0.2 |
VSS | Counter | P0.22 | CAP0.0 | AD1.7 |
Engine RPM | Counter | P0.29 | CAP0.3 | AD0.2 |
Fuel totalizer | Counter | P0.4 | CAP0.1 | AD0.6 |
Speedometer correction | Counter | P0.28 | CAP0.2 | AD0.1 |
Speedometer correction | Output | P1.23 | P1.23 | (none) |
Turn signal blinker | Output | P1.24 | P1.24 | (none) |
Brake switch | Input | P0.16 | EINT0 | CAP0.2 |
Clutch switch | Input | P0.15 | EINT2 | AD1.5 |
Neutral switch | Input | P0.14 | EINT1 | (none) |
Oil pressure switch | Input | P0.30 | EINT3 | CAP0.0/AD0.3 |
User switch 1 | Input | P0.25 | P0.25 | AD0.4 |
User switch 2 | Input | P0.11 | P0.11 | CAP1.1 |
User switch 3 | Input | P0.5 | P0.5 | AD0.7 |
User switch 4 | Input | P1.22 | P1.22 | (none) |
Gear indicator 1st (alternate) | Input | P1.16 | P1.16 | (none) |
Gear indicator 2nd (alternate) | Input | P1.17 | P1.17 | (none) |
Gear indicator 3rd (alternate) | Input | P1.18 | P1.18 | (none) |
Gear indicator 4th (alternate) | Input | P1.19 | P1.19 | (none) |
Gear indicator 5th (alternate) | Input | P1.20 | P1.20 | (none) |
Gear indicator 6th (alternate) | Input | P1.21 | P1.21 | (none) |
Accelerometers | (unknown) | (unknown) | (unknown) | (unknown) |
Unused CPU pin | P0.21 | PWM5/AD1.6/CAP1.3 | ||
Unused CPU pin | P0.31 | UP_LED/CONNECT | ||
Unused CPU pin | P1.25 | (none) |
Shift Indicator Assemblies
Dimensions of the correct unit are 50mm center-to-center of the mounting holes, and 36mm diameter of the insert.
- 37720-20C00 (neutral only, stock part for GSX600F) [8]
- 37720-48B00 (neutral only, from GSX750F)[9]
- 37720-20C00 (neutral only, from GSX750F)[10] (2006, also)
- 37730-41G01 (from GSXR1000, resistive) [11] [12]
- 37720-24A01 [13] - 6 speed from GS1100, supposedly can replace with 37720-48B00, which replaces the 37720-20C00
- 37720-49211 (from GS1150) [14] (superseded by 37720-24A01)
- 37720-20C10 (from Bandit) [15]
- 37720-09300 [16] [17] - 6 speed from '80 GS1100ex (supersedes 37720-49200)
- 37720-45100 - 6 speed indicator, too small
- 37720-31301 - 5 speed indicator, probably too small
VDO Oil Temperature Sender
VDO 323-050 -- Test setup, Lew's comments in interfacing
VDO #1-531-006-657D 400F 1/8-27NPT P/N 323-050 10-180 ohms 10=0F, 180=400F .250" spade lug mount
Other candidates:
VDO # | Size | Marking | Has TC | Book A | Book B | Other # | Comments |
---|---|---|---|---|---|---|---|
323-801-003-002D | M10 x 1 | 801/3/2 | Y | Y | N | 323-090 | |
323-801-003-001D | M10 x 1.5 | 801/3/1 | Y | Y | Y | 323-091 | |
323-801-007-002D | M14 x 1.5 | -- | Y | Y | N | ? | |
323-801-013-001D | 1/8-27NPT | 801/13/1 | N | N | Y | 323-050 | 5/8" Probe |
323-801-018-001D | 1/8-27NPT | 801/18/1 | Y | Y | Y | 323-086 | 3/8" Probe |