What is your required precision/accuracy?
I will cover the foundations of a simple method, and update if necessary.
Parts:
You may already have what is necessary ;)
Lets look at your PWM outputs. Depending on the duty cycle, or how long the pulse is "high" compared to "low", an average level can be achieved.
You can keep this chart in mind as you are following along:
If at 50% duty cycle and you can somehow chop a 5V waveform to fill in the hole you will have roughly 2.5V. You can use a simple RC filter for this:
This is just a quick taste. You can learn about RC filtering to your heart's content after reading this (or before continuing.)
http://en.wikipedia.org/wiki/RC_circuit
http://en.wikipedia.org/wiki/Low-pass_filter (what we are doing here!)
Simulation:
An LTspice (free) simulation assuming 100MHz PWM just for this example with 10% duty cycle, 15.8k resistor, and 1uF capacitor:
(cutoff = \$\frac{1}{2\pi RC} =\$ 10Hz)
The graph will show:
- It will take roughly 100ms to steady
- The result is 10% of 5, or 500mV (as expected)
- Noise appears to be at a minimum (~5mV peak-to-peak)
In practise you will have defects and more variables to worry about and will be worse than this somewhat, while following the general curve.
Cleaning up the signal:
You can add more filtering stages to decrease noise, sometimes at the expense of a longer time to stabilise as capacitance increases. You should get a steady reading on your multimeter at the very least, you can even parallel with an ADC to calibrate - however note that microcontroller voltage references may not be that accurate to begin with.
An opamp in non-inverting configuration (with or without gain) can follow to do what you wish such as source current if required, for your low power tests on devices.
A DAC may be suitable if you require less noise and faster response time. A good DAC may cost you $2-3 which may be justified if an RC filter is not effective enough. You can build your own, feel free to read up on many methods to get an understanding of how they are implemented.