I'm trying to control a few servos and a bunch of RGB-LED from an arduino board. To do that I'm going to chain together a few TLC5940 chips. The issue I'm trying to resolve at the moment is what PWM settings do I need for the servos; particularly what are the min rotation and max rotation settings?
My servo is a: HiTech HS-55. This site: http://www.servocity.com/html/hs-55_sub-micro.html says the servo runs on "+Pulse Width Control 1500usec Neutral" with a 600us pulse being -90 and a 2400us pulse being +90.
To figure out how to generate pulses that long with my PWM driver I need to know the frequency the driver runs on. The data sheet for the driver: http://www.ti.com/lit/ds/symlink/tlc5940.pdf says this about the PWM operation on the bottom of page 19:
The grayscale PWM cycle starts with the falling edge of BLANK. The first GSCLK pulse after BLANK goes low increases the grayscale counter by one and switches on all OUTn with grayscale value not zero. Each following rising edge of GSCLK increases the grayscale counter by one. The TLC5940 compares the grayscale value of each output OUTn with the grayscale counter value. All OUTn with grayscale values equal to the counter values are switched off. A BLANK=H signal after 4096 GSCLK pulses resets the grayscale counter to zero and completes the grayscale PWM cycle (see Figure 21). When the counter reaches a count of FFFh, the counter stops counting and all outputs turn off. Pulling BLANK high before the counter reaches FFFh immediately resets the counter to zero.
Unfortunately I don't have any idea what that means. (I think) I know that the PWM driver gets some form of clock signal from arduino but unfortunately doesn't help me figure it out.
Can anybody help me figure out what settings I need to use on the PWM driver to generate the desired pulses. The closest value will work. For my application if the servo gets within a couple degrees it should be close enough. Will this even work at all? My understanding of how servo's work is that they generally need a pulse every 20ms so even if I calculate how to generate the correct pulse duration I doubt it will magically work out to a pulse every 20ms. Will the servo accept the input?