[PD] pd/arduino pwm > servo motor

Martin Peach martin.peach at sympatico.ca
Sun Oct 22 00:49:14 CEST 2006

Hans-Christoph Steiner wrote:
> On Oct 20, 2006, at 4:31 PM, <martin.peach at sympatico.ca> 
> <martin.peach at sympatico.ca> wrote:
>> "David NG McCallum" <d at mentalfloss.ca> said:
>>> I can see that if you tried software PWM through pins 9-11 it wouldn't
>>> be any different than using any of the other digital pins. But I
>>> thought that pins 9-11 did hardware PWM through the analogWrite()
>>> function in the regular Arduino C. Am I wrong on this?
>> I don't know. I don't have an Arduino, I'm trying to make something 
>> with a PIC that emulates the Arduino running Firmata.
>>> Do you mean that hardware PWM on those pins hasn't yet been
>>> implemented with Firmata?
>> That's what I meant. Also that software PWM has not been implemented 
>> with Firmata either AFAIK.
> Hardware PWM is implemented and functional on the lastest 
> firmata/pduino release.  Software PWM and pulseOut are still lacking.  
> Once one/both of those are implemented, servo control will be 
> possible. Any volunteers?
Ah I see, the hardware PWM function is called analogWrite in Wiring.
My calculations based on a 16MHz arduino clock and the arduino firmware at :
suggest that the hardware pwm is running at 490Hz.
Anyone know if this is the case?
If so, this should work for DC motors but is too fast for servos and too 
slow for audio.
It could be used as an 8-bit DAC if a lowpass filter is placed on the 
output, something like a 10k resistor feeding a 0.1uF capacitor:

         10k      |
                  = 0.1uF

As for software PWM it would work best if you had access to the timer 
interrupts, which would have to occur at the granularity of the pwm (for 
servos, 1/256 ms ~ 4us). I can see how to do it by directly writing 
assembly code but in the context of the Wiring environment I'm not sure...

More information about the Pd-list mailing list