Can I use the GPIO as a Pulse Width Modulation output? If so, how would I go about doing it and how many concurrent, distinct PWM outputs can I have?
As suggested by Alex Chamberlain, the WiringPi library appears to support both hardware PWM output on one GPIO pin and software PWM on any of the other GPIO pins. Which of these is suitable for your applications depends on how many PWM outputs you need and what performance you want out of those outputs.
If you application is tolerant of low timing resolution and high jitter then you could use a software timing loop. If you want higher precision / lower jitter PWM then you will need hardware assistance.
When might Software PWM be suitable?
If you want to flash a bunch of LEDs with different human visible cadences (10's of hertz) with soft real-time response requirements then the software loop could handle as many PWM's as you have GPIO pins.
When might Hardware PWM be suitable?
If you want to control a servo motor with hard real-time response requirements then you will need to use the Hardware PWM. Even then you may have problems ensuring a real-time response for the servo loop which ties encoder input to PWM output.
A stable servo loop need to read encoders at a regular rate (low jitter), write out revised PWM output values at a regular rate and the latency between these should be fixed (low jitter overall) or you will have to undertune your motor to prevent it becoming unstable under load. This is hard to do with a multi-tasking operating system without low level support.
If you need to run multiple servo loops, then you are probably going to need to offload them to another device to ensure hard real-time performance, relegating your Raspberry Pi to being a soft real-time supervisor.
Yes, there is one hardware PWM output on the RPi, connected to P1-12 (GPIO18). Further, PWM outputs could be added using an I2C or SPI interface; some people have had success with this (forum post).
You can use WiringPi to control the PWM pin; you could look at the code to avoid including the entire library.
The RPi is not suitable for any serious software PWM as Linux is not a real-time operating system.
Not quite a real-time os but RISCOS for RPI is cooperative multitasking, so you can easily run an app that has 100% CPU so you can manage your timings much better. Just dont expect to do anything else but your own code.
Raspberry Pi is has the PWM. I came to know one good project based on PWM with Raspberry Pi.Just go through the link below.
http://developmentboards.blogspot.in/20 ... m-how.html