Behövde skapa en analog spänning med hög upplösning från en FPGA-pinne och kom på att grundfrekvensen på en normal PWM skulle bli väl låg om jag drog till med så många bitars upplösning som jag ville ha.
Letade runt lite på nätet efter alternativ, och hittade en bra och enkel förklaring på Delta-Sigma modulering. Har alltid avfärdat det som något jobbigt som används i avancerade AD/DA-omvandlare och som ingen normal person förstår sig på.
I själva verket är det busenkelt, logiken för en 1:a ordningens D-S är t.o.m. enklare en för en vanlig PWM om man gör en liten optimering som Xilinx gjort i XAPP154. En N+2 bitars accumulator är det enda som behövs för att göra en N-bitars "DAC".
Det är även enkelt att implementera på en mikrokontroller fast kanske inte lika intressant när man måste göra det i mjukvara och förmodligen har tillgång till vanlig PWM i hårdvara som kan köras mycket fortare.
Varför vill man använda Delta-Sigma då? Jo, en vanlig PWM har "bruset" (som måste filtreras bort för att få den analog utsignalen) vid grundfrekvensen och dess övertoner, medan Delta-Sigma har det mesta vid halva klockfrekvensen.
I mitt exempel har jag en 54MHz klocka, och vill ha 16bitars upplösning. Om utsignalen ska vara 50% så består PWM-signalen av en fyrkantvåg på ~823Hz, medan utsignalen från Delta-Sigma är en fyrkantvåg på 27MHz. Det är enkelt att se vilken som är lättast att filtrera...
Så dagens lärdom är väl att aldrig vara rädd för att försöka lära sig något nytt!
