RES
RES
Heeft iemand al eens aan de hand van een PWM signaal een nauwkeurig regelbare gelijkspanning gemaakt?
Ik probeer op 1mV nauwkeurig te kunnen regelen, als dat met PWM haalbaar is.
De PWM genereer ik met een AVR microcontroller. (12-bit PWM)
Op welke snelheid moet de PWM draaien zodat ik vrij snel de spanning heen en weer kan regelen? (1kHz, 10kHz?)
Het gaat vooral om hoe zo'n filter eruit ziet. Een simpel RC-filter is niet voldoende, het moet nagenoeg rimpelvrij worden. Hoe bereken je de waardes van de componenten aan de hand van de PWM frekwentie?
Hoe snel de PWM moet draaien? Zo snel mogelijk.
Hoe het filter berekenen? Hangt af van bovenstaande snelheid, en de maximale frequentie waarmee je de DC spanning wil kunnen regelen. Geef eens wat getalletjes.
Hmz... Rimpelvrij -> grote C
Snel regelen -> kleine C
Begin eens met 'rimpelvrij' en 'snel' te definieren.
En PWMen op 1mV nauwkeurig? Ik wil niet zeggen dat het niet kan. Maar moet je het willen?
RES
RES
Hoe snel de PWM moet draaien? Zo snel mogelijk.
Hoe het filter berekenen? Hangt af van bovenstaande snelheid, en de maximale frequentie waarmee je de DC spanning wil kunnen regelen. Geef eens wat getalletjes.
Hij moet regelen van 0 - 5V. (0-Vcc)
De PWM resolutie is 12-bit, dus circa 1.22mV per stapje.
Hmz... Rimpelvrij -> grote C
Snel regelen -> kleine CBegin eens met 'rimpelvrij' en 'snel' te definieren.
En PWMen op 1mV nauwkeurig? Ik wil niet zeggen dat het niet kan. Maar moet je het willen?
Ja dat is het probleem, als ik grote C's neem wordt de regelsnelheid trager, en hogere PWM snelheid kleinere C's, maar weer meer rimpel?
Ik weet niet hoe groot de regelsnelheid moet zijn.
Zo snel als in de praktijk haalbaar is, dus zo snel mogelijk bij een bepaald filter.
Definitie is.
Waar zit dus het optimaalste punt waar rimpel het laagst is en regelsnelheid het hoogst, en welk type filter werkt het meest optimaals bij dat punt.
Videomodulator
AKA Naftebakje @Tweakers.net --- Zonder dwarsliggers geen spoor
Ik heb dat nog gedaan, zo'n regelbare voeding met terugkoppeling in een PIC programmeren, was van 0-25.5V (8-bits, dus 0.5V per stapje) en kon tot ongeveer 1A belast worden.
Ik zeg je: het is érg moeilijk om dat met trail-and-error goed in gang te krijgen, je moet overal afwegen tussen verschillende zaken, enorm veel externe factoren die invloed hebben op je systeem....
Uiteindelijk bleek een systeem waarbij er naarmate de gemeten waarde dichter bij de gewenste waarde kwam trager en met kleinere stappen werd geregeld, in 3 onderverdelingen (verschillend voor verhogen en verlagen van de PWM, want die reageren heel anders bij het echte gerbruiken, een toestel inprikken is heel anders dan het toestel loskoppelen van de voeding), te voldoen aan de niet erg hoge eisen (bij aan-en afschakelen van een belasting niet teveel over-en ondershoot, binnen de 400ms stabiel binnen 1V rond de gewenste waarde).
De waarden voor de 3 onderverdelingen heb ik experimenteel bepaald, eenmaal het een beetje stabiel was ging dat erg vlotjes, maar het stabiel krijgen...
Stel: kristalfreq µC = 10MHz, prescaler = 1. De PWM freq ligt dan op 10M / (2^12) = 2.4 KHz. (Kan bij jouw µC anders zijn, moet je maar eens nakijken)
Als je een simpel 1e orde RC filter gebruikt, en de rimpel niet hoger dan 1 LSB (=1.22mV) wil laten worden, kan je de tijdsconstante uitrekenen.
De rimpel = dU = dT x I / C = dT x U / (R x C)
Hierin is dT een halve PWM periode = (0.5 / 2400) = 0.2ms. Uitrekenen voor RxC geeft 0.82.
Met een C van 10µF heb je een R van 82K nodig. Reactietijd van het spul is 0.82 sec (tot 63% van eindwaarde) of 4 sec (tot 99% van de eindwaarde).
Waarschijnlijk zal je dus een 2e of hogere orde filter nodig hebben. Ben nu te lui om daar een rekenvoorbeeld voor te geven. 
[edit] Foutje in de berekening. dT moet wel degelijk een hele periode zijn. RC wordt dubbel zo groot, reactietijd ook.
[Bericht gewijzigd door subsonik op ]
RES
RES
Op 27 januari 2007 15:43:20 schreef subsonik:
Stel: kristalfreq µC = 10MHz, prescaler = 1. De PWM freq ligt dan op 10M / (2^12) = 2.4 KHz. (Kan bij jouw µC anders zijn, moet je maar eens nakijken)
Ik draai AVR, daarin zit fast PWM.
fast PWM max. resolutie kan tot. Volgens de datasheet.
log(TOP+1)/log(2)
log(4096+1)/log(2)=12 bit
De clock snelheid fast PWM.
f-clkIO/(N*(1+TOP) ;N=devider
20MHz/1*(1+4096)=4881Hz=4.88kHz
Eventueel kan ik nog op 11-bit resolutie gaan zitten, dan een PWM kloksnelheid van 9.76kHz.
Kan ook 500kHz halen, alleen dan nog maar 7 bit resolutie over. Dan zal de reactietijd wel snel kunnen worden?
Als je een simpel 1e orde RC filter gebruikt, en de rimpel niet hoger dan 1 LSB (=1.22mV) wil laten worden, kan je de tijdsconstante uitrekenen.
De rimpel = dU = dT x I / C = dT x U / (R x C)
Hierin is dT een halve PWM periode = (0.5 / 2400) = 0.2ms. Uitrekenen voor RxC geeft 0.82.Met een C van 10µF heb je een R van 82K nodig. Reactietijd van het spul is 0.82 sec (tot 63% van eindwaarde) of 4 sec (tot 99% van de eindwaarde).
Waarschijnlijk zal je dus een 2e of hogere orde filter nodig hebben. Ben nu te lui om daar een rekenvoorbeeld voor te geven.
[edit] Foutje in de berekening. dT moet wel degelijk een hele periode zijn. RC wordt dubbel zo groot, reactietijd ook.
Op het net kwam ik dit tegen.
http://www.avr-asm-tutorial.net/avr_en/AVR_ADC500.html
Ik zie hier een 3-traps RC filter, dit is geen 3e orde filter?
Bar weinig verstand van al die filters nog.
Het zal waarschijnlijk zoiets worden?
Videomodulator
AKA Naftebakje @Tweakers.net --- Zonder dwarsliggers geen spoor
Bovenstaande is idd gemakkelijk te doen, maar je verstookt veel warmte in je analoge regeling, bij te hoge stromen zal dat niet meer (kostefficiënt) lukken.
Mijn verhaaltje ging over een geschakelde voeding, het hangt af van de gewenste stroom of je dat nodig zal hebben.
Op 28 januari 2007 12:20:45 schreef RES:
Eventueel kan ik nog op 11-bit resolutie gaan zitten, dan een PWM kloksnelheid van 9.76kHz.Kan ook 500kHz halen, alleen dan nog maar 7 bit resolutie over. Dan zal de reactietijd wel snel kunnen worden?
Hoe doe je dat ?
Elk bit extra halveert de PWM frequentie, dus:
12bit = 4.88 kHz
11bit = 9.76 kHz
10bit = 19.5 kHz
9bit = 39.0 kHz
8bit = 78.0 kHz
7bit = 156 kHz
En dan kom ik op 150kHz uit (net zoals bij elke micro trouwens, maakt niet uit of het AVR/PIC of weet ik wat is)
RES
RES
Op 28 januari 2007 16:47:32 schreef JoWi:
[...]Hoe doe je dat ?
Elk bit extra halveert de PWM frequentie, dus:12bit = 4.88 kHz
11bit = 9.76 kHz
10bit = 19.5 kHz
9bit = 39.0 kHz
8bit = 78.0 kHz
7bit = 156 kHzEn dan kom ik op 150kHz uit (net zoals bij elke micro trouwens, maakt niet uit of het AVR/PIC of weet ik wat is)
De timer in Asynchronous Mode schakelen als dat mogelijk is.
To change Timer/Counter1 to the asynchronous mode, first enable PLL, and poll the PLOCK bit
until it is set, and then set the PCKE bit.
Helaas gaat zit die Asynchronous Mode alleen op de 8-bit timer. (ATtiny24, 44, 84)
Er blijft geen andere optie over om softwarematig de 12-bit PWM op te wekken, dan kan de PWM snelheid veel hoger.
Denk dat ik dat maar ga proberen, hopelijk onderdrukken die filters de glitches voldoende.
[Bericht gewijzigd door RES op ]