Direction and Speed control using same throttle
There are several reasons your sample circuit are unsuitable:


You don't have dual power supplies (±24 V) on your scooter.
The voltage control method is wasteful. At half voltage the output transistors will waste as much power as the motor is using.
The potentiometer doesn't mechanically run end to end. (See Figure 1.)




Figure 1. A wigwag throttle pot for a mobility scooter. Note that only a small portion of the potentiometer's 330° travel is used - maybe ±30°.

The solutions to this are:


Design for single rail supply. This will require use of a H-bridge to enable reversing current direction in the motor.








simulate this circuit &ndash; Schematic created using CircuitLab

Figure 2. A simplified schematic of a H-bridge. With switches 1 and 4 closed as shown the motor will run in one direction. By opening 1 and 4 and closing 2 and 3 the motor can be made run in the opposite direction. To stop the motor open all switches. In practice the switches will be replaced by transistors.


Instead of controlling current by gradually turning on Q1/Q2 we will use PWM (pulse-width modulation). In this scheme the motor is pulsed between full power and zero power very quickly and the width of the pulse adjusted in proportion to the desired speed.




Figure 3. A PWM signal going from 80% to 20% to 80% to zero. If the pulse frequency is high relative to the reaction time of the motor then very smooth control is obtained with low losses in the switching transistors.

The best approach will be to use a micro-controller to read the potentiometer, calculate the desired output level using a simple acceleration-limiting algorithm, convert it to PWM and output it to a suitable H-bridge.







simulate this circuit

Figure 4. Crude block diagram of PWM control system.

Code tasks:


Read potentiometer and normalise or scale to, for example, -100 to +100. You should probably add a deadband in the centre to prevent creep or running current through the motor when stopped. e.g.:

0 ------------------------- mid ------------------------- 330°  
           ^ max reverse          max forward ^  
           -100 -------- 0 ---- 0 -------- +100 scaled output   

Using this strategy will require a definite movement of the wigwag before current is switched on.
I suspect that the motor will be rather weak and that even with wigwag full-on from rest that acceleration isn't likely to be a problem. If it is then add a routine:

// Very crude pseudo-code!
int v, a, pwm;                 // velocity and acceleration and pwm
ww = getScaledInput;           // wigwag
if (ww &gt; 0) {
    if (ww &gt; pwm) {            // we need to accelerate to pwm
        pwm = pwm + accel;
    }
    if (ww &lt; pwm) {            // we need to decelerate
        pwm = pwm - accel;
    }
    if (ww == 0) {             // stop
        pwm = 0;
    }
}