16 pin FPC connector - The first 5 FPC pins are strapped to ground to identify the keyboard as a US language configuration. Pin 6 is for the Fn key. The right and left trackpoint buttons on pins 7 and 8 are pulled up to 5 volts and go to ground when the buttons are pressed. Pins 9 thru 16 are the 8 columns for the key matrix and are pulled up to 5 volts.
18 pin FPC connector - Pins 1 thru 3 and 6 thru 18 are the key matrix rows that are each pulsed low so the columns can be scanned for a closed switch.
6 pin FPC connector - Pin 2 is power and pin 5 is ground. Switching to resistance measurements showed that pins 3 and 6 are tied together and pins 1 and 4 are tied together. These two sets of pins go to the X and Y strain gauge variable resistors.
Crude Trackpoint Testing: A crude test board was created with an FPC connector and jumpers to a Teensy 3.2.
FPC Pin 2 goes to Teensy 3.3 volts. Pin 5 goes to Teensy ground. Pins 3 and 6 go to Teensy ADC A1 and pins 1 and 4 to Teensy ADC A0. Resistance measurements show the individual strain gauge resistors are 352Ω when at rest. If the trackpoint is forced hard left, right, up, or down, the resistance will change about 1Ω. When powered with 3.3 volts, the voltage divider will only change ± 4mV. I expected this would be difficult to reliably detect with the Teensy but gave it a try anyway. I used code I had previously developed for converting the pointing stick (aka trackpoint) from a Dell D630 to USB. The Dell trackpoint uses 4 KΩ strain gauge resistors that cause a change of ± 30mV which is a lot easier to detect. The code reads the X and Y voltages at startup and saves these as the “at-rest” values. There is a dead zone around the at-rest values so noise doesn’t cause unwanted cursor movement. The Thinkpad trackpoint was able to move the cursor with this code but too much force was needed. Reducing the dead zone allowed less force but noise would move the cursor when at rest.
Instrumentation Amplifier: The standard method for reading a strain gauge is to use an instrumentation amplifier. I chose to use the AD8236 because it’s low cost, works on a single supply and has a reference pin for offsetting the output. The schematic for the X channel amplifier is shown below. The Y channel is the same. The LM358 Dual Op Amp provides a low impedance 1 volt DC reference voltage to each AD8236. This raises the output up to 1 volt when the inputs are balanced in order to operate from a single 3.3 volt supply. The gain of the AD8236 is set to 47 with a 10KΩ resistor. The 10KΩ potentiometer provides the fine tuning to set the minus input to the exact same voltage as the positive input when the strain gauge is at rest.
An LM4040D20 shunt style voltage reference is used on the Teensy 3.2 AREF input to give 2.048V for the ADC reference instead of the standard 3.3 volt reference (see schematic below). The 13 usable bits of the Teensy ADC will span 2.048V instead of 3.3 volts. This changes the resolution to 0.25mv/bit instead of 0.4mv/bit. An LD1117A linear regulator is used to drop the USB 5 volts down to 3.3 volts for powering the trackpoint circuit. This was done instead of using the Teensy’s 3.3 volt regulator in order to reduce the digital noise in the amplifiers. Note that the Teensy ties analog ground to digital ground with an inductor as shown below.
Breadboard Circuit: The AD8236 is not available in a DIP but I really wanted to make sure the circuit would work before getting a board fabricated by OSH Park. The breadboard shown below was a test of my soldering skills but after...Read more »