Multiple R/C servo control



Hi folks,

I've been doing lots of tests with controlling R/C servos lately, some good
experiences and some bad experiences. I even wrote an introduction paper on
how to interface the PC with R/C servos using the serial port and a PIC
microcontroller.

The strategy I present in that paper is very basic, and although it works
fine, it is kind of jittery and does not support too many servos. Now I'm
working on a improved version of my servo controller that will theoretically
get rid of the flicker and support unlimited servos (in theory).

I am a firm believer that the best way to learn something is to teach it.
Therefore I will try to make another paper exposing this new method (of
course, if it works). Before doing that, I need to know if someone else
already did such tutorial paper, and if yes, if it is similar to my
strategy.

Here's an outline of my strategy, please express yourself if you find a flaw
in it as I'm going to test it tonight.


1-Assume there is an array of servos controlled by the uP
and this array has the following fields:
servo_idx, pulse_width_uS, servo_no
Whenever the array is updated (through serial commands), it is
sorted in by pulse_width_uS

2-Drive all servo lines high, set TMR0 with the time interval
of the first servo of the array

3-When TMR0 triggers, set the respective servo low.
Also set low all the subsequent servos from that list that
have the same pulse_width_uS. Set new TMR0 interval
as the difference between next servo pulse width and current
one.

4-Repeat this operation for all servos until there are no
more servos to drive low. At that point, set TMR0 with
20ms - current pulse_width_uS

And that goes forever. There are a couple more quirks to it, but that's the
overall outline. If you are controlling 4 servos, TMR0 should trigger 5
times in the worst case, 1 time for driving all servo lines up and 4 times
(less if some of them share the same time interval) to drive them low.

That gives me lots of time in between pulses to do whatever I want (receive
USART bytes for example) without interfering too much with the PWM timing
mechanism.


Do you think it is a good approach to try? If yes, do you think it would be
worthy to write a short paper on that?


Cheers

Padu


.



Relevant Pages

  • Re: Driving servos from a PC
    ... controlled by a series of PCs (each computer drives two dials). ... controlling these servos via a soundcard output? ... Cannot for the life of me remember where I bought it in the UK, ... both are ideal for controlling multiple servos ...
    (sci.electronics.misc)
  • Re: Driving servos from a PC
    ... controlled by a series of PCs (each computer drives two dials). ... but I do have a fairly strict budget restriction. ... controlling these servos via a soundcard output? ...
    (sci.electronics.misc)
  • Re: Multiple R/C servo control
    ... > I've been doing lots of tests with controlling R/C servos lately, ... > 1-Assume there is an array of servos controlled by the uP ... > 2-Drive all servo lines high, set TMR0 with the time interval ...
    (comp.robotics.misc)
  • Re: internet remote control
    ... internet. ... NE2000 driver is a standard LIB available from the website. ... You can use the apache web server as a base for controlling ... serial port to control servos and some simple parallel port ...
    (comp.robotics.misc)
  • Re: Multiple R/C servo control
    ... > I've been doing lots of tests with controlling R/C servos lately, ... > 2-Drive all servo lines high, set TMR0 with the time interval ... > as the difference between next servo pulse width and current ...
    (comp.robotics.misc)