Forum: Mikrocontroller und Digitale Elektronik PIC24 pwm einrichten


von Hardware I. (bensen83)


Lesenswert?

Hallo Leute ich habe einen PIC24HJ128GP506 und möchte pwm machen. Habe 
den Timer 3 nach nem Leerbuch eingerichtet und TMR3 auf 400 gesetzt und 
die pwm anteile auf 200 und 200 gesetzt. (also 50%) allerdings sollte 
nach Leerbuch eine Schaltfrequenz von ca. 40 KHz eingestellt sein. 
Leider ändert sich das pwm signal nur alle 10 Sekunden mal. kann mir 
jemand sagen wie ich die Geschichte auf ca. 18 KHz einrichtet bekomme? 
Ps. habe 32 MHZ Taktung. Danke ;-)

von C. H. (_ch_)


Lesenswert?

Hallo,

wie sieht's mit dem Timer-Prescaler bzw. der Clock-Configuration 
allgemein aus?

Gruß
Christian

von Hardware I. (bensen83)


Lesenswert?

Der Timer Prescaler steht auf 1:1 und sorry bin neuling, meinst du mit 
clock den Takt, oder wie? habe den timer1 einfach nen 1ms interrupt und 
über den timer2 mache ich ne entprellung von tastern und timer3 wollte 
ich für die pwm geschichte nehemn leider konnte ich nicht genau 
herausfinden was der timer mit der sache zu tun hat, ist der nur zur 
aktualisierung des tastverhältnisses zu tun, oder greift der mit in die 
pwm sache ein?

Sorry nochmal, neuling ;-)

von C. H. (_ch_)


Lesenswert?

Hardware Interrupt schrieb:
> ...herausfinden was der timer mit der sache zu tun hat, ist der nur zur
> aktualisierung des tastverhältnisses zu tun, oder greift der mit in die
> pwm sache ein?
der Timer wird verwendet um die PWM zu erzeugen!
Der Timer= Zähler zählt von 0 bis zu einem definierten Endwert. Das ist 
entweder der Überlauf (maximal) oder ein von dir definierter Wert.
In einem zweiten Register steht ein Vergleichswert, der praktisch dein 
Tastverhältnis darstellt.
Die PWM Erzeugung funktioniert z.B. so:
Zähler = 0 -> Pin auf high setzen... Zähler zählt munter weiter... die 
Timerhardware vergleicht nun immer den Zählerwert mit dem 
Vergleichswert. Sind beide gleich wird der Pin auf low gesetzt. Der 
Zähler zählt weiter bis zum Endanschlag und wird dann wieder auf 0 
gesetzt (und der Pin wieder auf high) und so weiter und so fort.

Je nachdem wie schnell der Timer läuft, also der Zähler zählt und wie 
weit er zählt ändert sich deine Frequenz des PWM-Signals.
Mit dem Vergleichswert stellst du das Tastverhältnis ein.

Da du die 18kHz nicht erreichst gehe ich davon aus, dass du für den 
Timer die falsche Taktquelle bzw. Vorteiler ausgewählt hast.

Gruß
Christian

von C. H. (_ch_)


Lesenswert?


von Hardware I. (bensen83)


Lesenswert?

Danke schon mal, ich kann dir morgen früh mal den genauen sourcecode 
schicke, den habe ich jetzt nicht hier aber wird wenn ich den Timer also 
z.B. TMR3   auf 400 setzte nicht auch die Frequnz anders, also wenn ich 
ihn nur auf 200 setze?

von C. H. (_ch_)


Lesenswert?

Hardware Interrupt schrieb:
> Danke schon mal, ich kann dir morgen früh mal den genauen sourcecode
> schicke, den habe ich jetzt nicht hier aber wird wenn ich den Timer also
> z.B. TMR3   auf 400 setzte nicht auch die Frequnz anders, also wenn ich
> ihn nur auf 200 setze?
Die Frequenz wäre dann doppelt so hoch.

Schau dir mal das gelinkte Dokument zum 'Output-Compare' Modul an, da 
sollte alles für dich interessante drin stehen incl. Code Beispiel

Gruß
Christian

von Hardware I. (bensen83)


Lesenswert?

Wo finde ich denn die weiteren kapitel, des Links, ist ganz gut, aber wo 
sind die denn bei microchip, finde die irgendwie nicht :-(((

von C. H. (_ch_)


Lesenswert?

Hardware Interrupt schrieb:
> Wo finde ich denn die weiteren kapitel, des Links, ist ganz gut, aber wo
> sind die denn bei microchip, finde die irgendwie nicht :-(((
dann nimm mal den zweiten Link ;-)

von Hardware I. (bensen83)


Lesenswert?

ja habe mir jetzt mal paar sachen runter geladen, komischerweise macht 
der eine pwm die ca. alle 10 s mal den zustand wechselt. ich wollte 
jetzt mal zur probe einen pin toggeln lassen sobald der timer aufgerufen 
wird, komischerweise klappt das nicht mal bei meinem Timer ein, mit 
welchem ich aber schon alle 1ms aufrufe, habe das Toggeln so gemacht, 
geht das?

IO_Set_Point^=(uint8)1;

IO_Set_Point ist vorher definiert worden. und liegt an PIN _RB2

von C. H. (_ch_)


Lesenswert?

ohne deine defines bzw. den Code zu sehen ist eine Aussage nicht 
möglich.

Ausgang auf Output geschaltet? Output-Compare-Pin auf einen Pin 
geroutet?
Timer aktiviert? etc...

von Hardware I. (bensen83)


Lesenswert?

jetzt funktioniert es, ich hatte ausversehen den Timer 2 schon als 32 
Bit Timer verwendet und so kam dann der Timer 3 natürlich durcheinander. 
danke euch trotzdem für die hilfe

von C. H. (_ch_)


Lesenswert?

gerne doch

Gruß
Christian

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.