The control trimming and centering presents a number of problems for the LURC, as the serial control allows us to push the servos past soft-limits imposed by standard remote control transmitters. This means we need to do sanity checking on values sent, both in the car (on the avr) and on the desktop. The in-car sanity checking should only check if the value is outside the physical capabilities of the servo, while the desktop software should check the values are within 'useful' ranges. As such, the in-car checking does not need to be varied and can be hard-coded in, while the desktop ranges need to be adjustable so that the controls can be trimmed and centered.
How servos work
A servo of the type used in small remote control vehicles wants a square wave signal with a period of 20ms. The amount of time the signal is "on" determines the rotation of the servo. Typically, an "on time" of 1.5ms will be center, 1ms will be extreme left, and 2ms will be extreme right. This varies slightly from servo to servo of course, which is why most things involving servos have some sort of trim setting.
The physical capability boundaries for each servo in the LURC are as follows, given in hex values. Even though the servos are very similar or identical, the values differ due to different timer modes:
- Servo 0 (webcam tilt)
- Left:
- Right:
- Servo 1 (steering)
Left:0x35
Right:0xF0
- Servo 2 (speed control)
Lower:0x33
Upper:0xfb
- Servo 3: (webcam pan)
- Left:
- Right:
The 'useful' values for each servo are subject to change because of adjustments to the car and parts. Here are some one-off values to give an idea of what they should be close to:
- Servo 0 (webcam tilt)
- Down:
- Level:
- Up:
PWM duty lengths
#3= 0.51 ms
#4= 0.64 ms
#5= 0.76 ms
#6= 0.89 ms
#7= 1.0 ms
#8= 1.14 ms
#9= 1.28 ms
#10= 1.4 ms
#11= 1.52 ms (closest to servo center)
#12= 1.66 ms
#13= 1.78 ms
#14= 1.90 ms
#15= 2.04 ms
#16= 2.16 ms
#17= 2.3 ms
- Servo 1 (steering)
Left:0x7b
- Center: 0x92
Right:0xb3
- Servo 2 (speed control) - note lower values are faster. Also, these boundaries will never change because it's an electronic controller.
Reverse:0xb8
Neutral Range:0x98 to 0x9c
- Stop: to stop, simply send a signal for the opposite direction, braking strength is variable. You can always go forward from reverse, but to reverse you have to go from neutral with the car stationary (this allows the controller to tell the difference between braking and reversing)
Forward:0x79
- Servo 3: (webcam pan)
- Left:
- Right: