I do not have the microcontroller code for this circuit. Of course you can "roll your own", or you can try to find the program that Andreas wrote - I think it used to be on his pages when they were still online. If you find the software and verify that it works, I would appreciate getting a copy so I can put it up here as well.
In case the scanned diagram is hard to read, here are the components read in columns, from top left down:
C6 [electrolytic, 47μF, 10V] and C3 [100nF], in parallel, next
to IC2 [L4940V5 regulator]; regulator's +5V output goes to the
receiver, and to a few other points in the circuit
R6 [1k] tied to pin RB0 of the PIC, the other end to the receiver's
signal output
jumper K1: pin 2 connected to RB1, 4 to RB2, 6 to RB3, 8 to RB4,
10 to RB5
C5 [100n] between the regulated +5V supply and ground, next to the
PIC's Vcc and MCLR (pins 4, 14)
standard PIC oscillator with a 4 MHz crystal, and C1, C2 [both 15pF]
to the ground
R9 [10k] to unregulated positive supply, T1 [BC517 Darlington],
R1 [4.7k] between its base and PIC's RA1
R3 [470 ohm] at RB7, R5 [10 ohm] at RTCC (pin 3 of the PIC), R6
[100k] at RA3, R7 [NTC thermistor, 100k] at RA1, C4 [10n] to ground
D1 [LL4148 diode] between T1's collector and cathode to regulated
+5V, across the relay connection;
IC3 [PC827 dual optocoupler] with pins 1, 4 tied together and driven
by R3, pins 2, 3 tied to RB6, pin 5 grounded, pin 8 to unregulated
positive supply, pins 6 and 7 to R2 [100 ohm] and R4 [100k]; R4 to
the ground
T5 [IRF9530 FET for brake]; D2 [MBR2045CT dual Schottky diode];
T2, T3, T4 [BUZ11 FETs in parallel]; motor connected between
the positive unregulated supply (battery) and the FETs' drain
terminals (M- on the diagram).
Relevant fragments of the article
In the unidirectional mode (without the relay) omit D1 and D2, and
include T5 and R9. Do the opposite for bidirectional mode.
In bidirectional mode the center position (of the transmitter's stick) corresponds to "off". Because this "zero" point is rather critical, a certain "dead" span has been created around it. [in the software, I presume - EJB]
A motor braking function has been implemented in unidirectional mode. At the zero setting, this brake short-circuits the motor, allowing the reverse electromotive force generated by the motor to rapidly reduce the speed of the model.
To make sure that the interface and the used transmitter work happily together, the minimum and maximum propulsion power may be programmed, in addition to the previously mentioned dead zone.
D2 acts as a flyback diode to suppress voltage surges generated when the motor is being switched. D1 is the flyback diode connected across the relay.
The negative rail (ground) is connected to the receiver ground.
A negative temperature coefficient thermistor, R7, allows the motor and battery temperature to be monitored. Its resistance is calculated by charging C4 alternately via R6 and R7. [i.e. by pulling up outputs RA3 and RA2 in turns, and checking when the input RTCC goes high - EJB] Because the value of R6 is known, the resulting time differences allow the value of R7 to be calculated. At the selected switching tresholds (defined in the software), the protection is activated at 120° C and switched off again at 80° C. If the protection is not required, R7 can be simply omitted. The resistance is then in principle infinite, which, as far as the controller is concerned, corresponds to a cold motor/battery.
The PCB is two-sided; surface mount components were used where possible.
Heatsinks are not required, although pretty large currents may flow in the output stage. If high currents are present most of the time, it is recommended to strengthen the copper tracks through which the current flows. In practice that is easily achieved by soldering a short piece of thick, solid copper wire onto the relevant track section.
The connections for the supply voltage, the motor, the thermistor and the relay are made via solder pins.
Because noise generated by the motor may upset the operation of the controller, it is recommended to fit three 100 nF suppressor capacitors across the motor. One capacitor is connected between the motor terminals, and the other two between each terminal and the motor housing. Finally, we recommend winding the wires that carry the drive signal from the receiver to the controller through a ferrite bead (two or three times) as close as possible to the receiver.
The mode of the circuit is selected with jumper JP5. [? I'm assuming it's the bottom one, i.e. pins 9-10, but check the source code carefully! - EJB] Shorting that jumper selects unidirectional mode, leaving it open - bidirectional.
In unidirectional mode set the joystick to the minimum and momentarily close JP2 (approx. 1 second). This enables the PIC to couple the received pulse time to the minimum motor speed. Next, set the joystick to the maximum and briefly close jumper [??? bottom of the page is cut off; figure it out by looking at the source code - EJB].
Roughly the same procedure is followed in bidirectional mode, only JP2 is then used to determine maximum reverse speed. The dead zone may be programmed as follows: set the joystick to the desired zero position and briefly close JP3.
All settings are stored in an EEPROM, which allows them to be retained for a long time. A reset to the default values is accomplished by shorting JP4 and then switching the supply on. [open JP4 after that, I assume - EJB]