PWM-matte
-
- Inlägg: 1400
- Blev medlem: 29 januari 2011, 21:06:30
- Ort: Lapplandet
PWM-matte
Jag håller på att experimentera lite grann med PWM och skulle behöva lite hjälp att verifiera att jag har förstått allt rätt.
Jag har en FPGA klockad i 100MHz, som genererar en PWM-signal på 250KHz.
Då blir väl varje PWM-cykel 400 FPGA-cykler? (100e6 / 250e3)
Och upplösningen blir ungefär 8.64 bitar? (LN(400) / LN(2))
Och för att kunna höja upplösningen till 10 bitar (vilket jag egentligen inte behöver, men det är intressant att förstå hur man gör) så måste jag
* Höja FPGA-klockan till >= 256MHz (250e3 * 1024) eller
* Sänka PWM-klockan till <= 97.7KHz (100e6 / 1024)
Stämmer detta? Formlerna verkar rimliga i mitt huvud men det händer rätt ofta att jag missar något enkelt misstag
Jag har en FPGA klockad i 100MHz, som genererar en PWM-signal på 250KHz.
Då blir väl varje PWM-cykel 400 FPGA-cykler? (100e6 / 250e3)
Och upplösningen blir ungefär 8.64 bitar? (LN(400) / LN(2))
Och för att kunna höja upplösningen till 10 bitar (vilket jag egentligen inte behöver, men det är intressant att förstå hur man gör) så måste jag
* Höja FPGA-klockan till >= 256MHz (250e3 * 1024) eller
* Sänka PWM-klockan till <= 97.7KHz (100e6 / 1024)
Stämmer detta? Formlerna verkar rimliga i mitt huvud men det händer rätt ofta att jag missar något enkelt misstag
Re: PWM-matte
Ja det ser korrekt ut. Det finns lite speciella tekniker man kan använda för att skapa högre upplösning i snitt, mha sk fractional counters. Men det är överkurs.
Re: PWM-matte
Gissningsvis en klock-dividerare som kan dividera med bråktal men det skall bli intressant att se hur fpga-klockan kan sönderdelas ytterligare PLL?
P.s. Hurra för 2Log. D.s.
P.s. Hurra för 2Log. D.s.
Re: PWM-matte
För en vanlig räknare så ökar man den oftast med 1 varje cykel.
Den vanligaste implementationen av fractional counter är att man har en räknare med x fler bitar och sedan ökar med ett större tal än 1, oftast samma storleksordning som x bitar långt. Skillnaden är att när man får overflow på räknaren så börjar man inte om från 0 utan på restvärdet.
I praktiken så får man då x bitar till, dock bara om man ser på medelvärdet.
Hoppas du förstår, men är lite trött så här på fredagkvällen...
Den vanligaste implementationen av fractional counter är att man har en räknare med x fler bitar och sedan ökar med ett större tal än 1, oftast samma storleksordning som x bitar långt. Skillnaden är att när man får overflow på räknaren så börjar man inte om från 0 utan på restvärdet.
I praktiken så får man då x bitar till, dock bara om man ser på medelvärdet.
Hoppas du förstår, men är lite trött så här på fredagkvällen...
Re: PWM-matte
Jag fattar inte men är å andra sidan också trött Hur lyckas man utföra operationer mellan fpga-cyklerna?
Re: PWM-matte
Det gör man inte. Men om man slog om lite sent en gång kompenseras det med att man slår om lite för tidigt nästa.
Re: PWM-matte
Nja, inte chansar direkt. Mer att man bokför sina avrundningsfel och kompenserar för det senare. Lite som när man handlar många saker för 9,95kr Till slut spelar den där 5-öringen roll, även om varje post i sig blir 10kr efter avrundning.
Re: PWM-matte
Jo, men hur implementerar man denna logik i brist på verkliga cykler?
Det som beskrivs låter mer som förfarandet vid progressiv sampling, dvs i helt andra riktningen.
EDIT: Jag menar; om man nu kör kretsen på 100MHz och lägger ut PWM på 0,25MHz så har man väl varken mer eller mindre än 400 kretscykler på sig per PWM-period - eller tänker jag fel nu?
Det som beskrivs låter mer som förfarandet vid progressiv sampling, dvs i helt andra riktningen.
EDIT: Jag menar; om man nu kör kretsen på 100MHz och lägger ut PWM på 0,25MHz så har man väl varken mer eller mindre än 400 kretscykler på sig per PWM-period - eller tänker jag fel nu?
Re: PWM-matte
Antar att handlar om det som även brukar kallas "dithering" (vet inte vad det heter på svenska). Enklaste fallet är väl om man vill öka upplösningen med en bit. Om man har 400 klockcykler och vill lägga ut 367.5 så lägger man ut 367 en period och sedan 368 nästa period och sedan alternerar mellan dessa, då blir ju medel 367.5.
Re: PWM-matte
Det går att driva hur långt som helst och till vilken upplösning som helst.
Med 367 1 period och 368 99 perioder: 367.01
Med 367 2 perioder och 368 98 perioder: 367.02
...
...
Med 367 98 perioder och 368 2 perioder: 367.98
Med 367 99 perioder och 368 1 period: 367.99
O.s.v...
Eller kör med 16, 32, 64 sekvenser så går det jämt upp
med antal bitar direkt...
Med 367 1 period och 368 99 perioder: 367.01
Med 367 2 perioder och 368 98 perioder: 367.02
...
...
Med 367 98 perioder och 368 2 perioder: 367.98
Med 367 99 perioder och 368 1 period: 367.99
O.s.v...
Eller kör med 16, 32, 64 sekvenser så går det jämt upp
med antal bitar direkt...
Re: PWM-matte
PWM handlar ju normalt om MEDELVÄRDE över flera pulser.
Med enbart "hela" pulser så kan vi som medelvärde över tre pulser bara få t.ex.
(5+5+5)/3=5
(4+4+4)/3=4
Men om vi varierar pulsbredden mellan pulserna kan vi få andra medelvärden över tre pulser. Ex.
(5+5+5)/3=5
(5+4+5)/3=4,67
(5+4+4)/3=4,33
(4+4+4)/3=4
Med enbart "hela" pulser så kan vi som medelvärde över tre pulser bara få t.ex.
(5+5+5)/3=5
(4+4+4)/3=4
Men om vi varierar pulsbredden mellan pulserna kan vi få andra medelvärden över tre pulser. Ex.
(5+5+5)/3=5
(5+4+5)/3=4,67
(5+4+4)/3=4,33
(4+4+4)/3=4