My past custom drive controls for PWCs were non-proportional, including the ones I produced based on eye-gaze, voice recognition, and winking. Non-proportional is the simplest to implement on a few levels, including the electrical interface to the chair itself. When connecting through the standard 9-pin connector, each direction (forward, reverse, left, right) is activated by simply pulling the corresponding pin to ground as detailed in my previous posts. A simple switch closure, relay, or transistor can achieve this.
I recently became very interested in the possibilities of custom proportional drive controls. So after some research and testing I got a very robust method working which could give full proportional joystick emulation including veering. I put this new method to work demonstrating single-switch scanning controls with veering.
Then I setup this voice based control with veering.
I’m very happy with how it turned out. It’s a much smoother and enjoyable driving experience than what non-proportional limits you to. Of course you can still turn in spot whenever you want just like non-proportional.
I’ve included the pin-out used by R-Net and Q-Logic here again for convenience.
You can read more specifics in resources like the R-Net Omni Technical Manual, but to summarize the proportional pin-out and signals:
- 12V on Pin 7, GND on Pin 8
- You provide reference level on Pin 3, but it must be in the range of 49-51% of Pin 7
- Joystick Y-axis (speed) on Pin 1
- Joystick X-axis (dir) on Pin 2
- For both axis, +/- 30mV is neutral, full swing is 1.2V
NOTE: you must provide and maintain valid signal levels on pins 1, 2, and 3 within a very short time of receiving power otherwise the PWC will register a fault and you will be forced to power cycle.
There are several ways to achieve the range of signal levels required, even within the boot time limitation. I chose to go with a digital pot, specifically the AD5263. I needed at least 2 channels (SPEED and DIR), but also wanted to use a 3rd channel on the same chip for REF to provide the best matching. SPEED and DIR need to each be within 30mV of REF for neutral. I also ideally wanted the simplicity of a pot that could work directly off the 12V rail. That way I wouldn’t have to amplify the outputs and again worry about precisely matching levels/amplification for neutral. Lastly I needed a setup that would as fast as possible output mid-scale on all 3 channels or else the chair would register a joystick hardware or calibration fault. The AD5263 has 4 channels, works up to 15V, and defaults to mid-scale on power-up. There are several other ways I found to achieve this including my first prototypes, but this way required the least parts and removed any dependence on having components matched with high precision. Here’s the board I ended up with, including pots to control speed and brightness of the display, connector for the display, 9-pin output to the R-Net Omni or Q-Logic Enhanced Display, and switch jack.
But it took some effort to get there. Here’s the first functional breadboarded prototype:
This process was accelerated with the PCB mill I recently purchased. I used OSH Park for the final boards, but for all the iterating in between the turn around time of using my own PCB mill was great.
For fun, here’s a sequence of board iterations starting from an early prototype before I had the PCB mill:
You can view the code I used for these initial tests at: https://github.com/bobparadiso/CustomSID