From what I've read a Servo needs to receive a signal every 20ms. During that 20ms if it receives a burst of about 1ms it will go to position 0, if it receives a burst of 2ms it will go to 180. Apparently this is depended on the exact specifications of the Servo, unfortunately I haven't found a specsheet for the DFRobot SER0006. I have found however that the default settings in the Servo library from Arduino seem to suffice. They are set to 544us = 0, 1500us = 90, 2400 us = 180. note: us = microseconds
Now, with a max required burst time of 2400us, and a required repeat time of 20000us. It's obvious that we can get 20000/2400 = 8.33 ~= 8 signals out per cycle. The Arduino Fio has an ATmega328P which has 3 timers on it, only one of which is a 16 bit timer (timer1). 16 bit is preferable because it means that we can address more angles. Each timer on the controller has 2 comparators (2 outputs) which means that in a given 20ms span we can get 2*8 = 16 outputs.
The other major part of this puzzle is the number of pins we have accessible, luckily the Arduino documentation states that
While the main function of the analog pins for most Arduino users is to read analog sensors, the analog pins also have all the functionality of general purpose input/output (GPIO) pins (the same as digital pins 0 - 13). Consequently, if a user needs more general purpose input output pins, and all the analog pins are not in use, the analog pins may be used for GPIO.We can therefore use all a grand total of 20 pins. With 16 PWM timer outputs per cycle we could theoretically have enough outs to control all the servos I need.
The Servo Library only accounts for up to 12 servos. So I will need to either modify it or write a new one entirely. I'm thinking the second is more likely as I want to add in collision avoidance and better limits.
Reference: A good article about Arduino PWM



