We make a box that can output a lot of fiberoptic logic signals, light on/off. One existing mode is PWM, where frequency is 125 MHz/N, and "on" resolution is 1 ns. I have a customer who needs a remote analog signal, 0-1 volt, that he can update in a microsecond or two. He'd like 10 bit resolution.
So I figured that an optical/electrical converter could drive a lowpass filter at the far end, so I built him the filter to try. We did a test board a while back, and we tossed some extra circuits onto the layout, including a little filter board.
Seems to work. I'm running at N=32, PWM frequency 3.9 MHz, which gives us 256 step (8 bit) resolution. I can't get a lowpass filter design to work at 512 steps/9 bits/2 MHz.
PWM-to-DC has awful dilemmas. To get N steps of resolution, you need a lowpass filter that will settle to 1/N volts in the time budget, and have p-p ripple about that same magnitude. That turns out to be awful, an n-squared dilemma at best. It needs to be a Bessel filter, or it will ring and wreck the settling time. Bessels let a lot of PWM ripple leak through. Higher order filters reduce ripple some but add time delay.
A better answer is PWM with some sort of ramp and s/h instead of the lowpass, but that's a non-trivial design and a PCB layout. Even better would be to hack the source FPGA to transmit a burst of digital data, and have a decoder+DAC at the far end... again, a bunch of design.