Using a modified version of the last program, we can control as many servomotors as we have I/O lines on port B. In the next listing, we will control two servos in the same manner as we controlled a single servo in the previous program. The circuit is shown in figure 4 (below).
The program uses two pulsewidth variables, pw1 and pw2; and two sets of routines, left1 and left2, right1 and right2; one for each motor. As you can see in the schematic, the first servo is wired as per the previous circuit. The second servo is now using B3 as itβs pulse out, and B4 and B5 for the SPDT switch.
Listing 3
βManual control of two servomotors using 2 SPDT switches
βUse B1 to hold pulsewidth variable for servo 1
βUse B2 to hold pulsewidth variable for servo 2
βInitialize Variables
B1 = 150
B2 = 150
βstart servo 1 at center position
βstart servo 2 at center position
start:
IF pin1 = 0 Then left1
IF pin2 = 0 Then right1
IF pin4 = 0 Then left2
IF pin5 = 0 Then right2
PulsOut 0, B1
PulsOut 3, B2
Pause 18
GoTo start
βcheck for switch closures
βis sw1 left active?
βis sw1 right active?
βis sw2 left active?
βis sw2 right active?
βsend current servo 1 position out
βsend current servo 2 position out
βRoutines for Servomotor 1
left1:
B1 = B1 + 1
PulsOut 0, B1
PulsOut 3, B2
Pause 18
IF B1 > 225 Then max1
GoTo start
right1:
B1 = B1 β 1
PulsOut 0, B1
PulsOut 3, B2
Pause 18
IF B1 < 75 Then min1
GoTo start
max1:
B1 = 225
GoTo start
min1:
B1 = 75
GoTo start
βincrease the pulse width
βsend current B1
βsend current B2
βset frequency update about 50 hz
βmaximum 2.25 millisecond
βdecrease the pulse width
βsend current B1
βsend current B2
βset frequency update about 50 hz
βminimum .75 millisecond
βcap max B1 at 2.25 milliseconds
βcap min B1 at .75 millisecond
left2:
B2 = B2 + 1
PulsOut 0, B1
PulsOut 3, B2
Pause 18
IF B2 > 225 Then max2
GoTo start
right2:
B2 = B2 β 1
PulsOut 0, B1
PulsOut 3, B2
Pause 18
IF B2 < 75 Then min2
GoTo start
max2:
B2 = 225
GoTo start
min2:
B2 = 75
GoTo start
βincrease the pulse width
βsend current B1
βsend current B2
βset frequency update about 50 hz
βmaximum 2.25 millisecond
βdecrease the pulse width
βsend current B1
βsend current B2
βset frequency update about 50 hz
βminimum .75 millisecond
βcap max B2 at 2.25 milliseconds
βcap min B2 at .75 millisecond
For more detail: Multiple Servomotors