Forum: Mikrocontroller und Digitale Elektronik Frage zu PWM bei C167


von dr evil (Gast)


Lesenswert?

Hier das erste Beispielprogramm, meine Frage kommt nach dem Programm.


Auf dem PWM- Kanal  3 soll am Ausgang P7.3 ein PWM Signal mit der 
Frequenz 500Hz ausgegeben werden, solange P7.0 1 ist. Eine 
angeschlossene Last soll mit 25% angesteuert werden wenn der Anschluss 
P7.1 1 ist, sonst mit 75%.

fosz=20MHz  Betriebsart: Edge Aligned


Hier meine Lösung:

PP3     20000KHz/0,5KHz=40000

PW3= 25% =1:3=30000             75%=3:1=10000         Vergleichswert= 
10000

PWMCON0=0x8;
PWMCON1=0x8;



Void main()
 {
   DP7_3=1;
   PP3=40000;
   PWMCON0=0x8;
   PWMCON1=0x8;
   While(P7_0)
   {
    if (P7_1) PW3=30000;
     else PW3=10000;
   }
}








Jetzt kommt eine Aufgabe von meinem Prof. wo ich die Musterlösung 
überhaupt nicht nachvollziehen kann und denke, dass er da irgendetwas 
durcheinander gehauen hat mit Timern. Ich hätte die Aufgabe so gelöst 
wie das obere Beispiel. Und nicht mit Vergleichswerten wie er dies getan 
hat, da die Werte der Schattenregister doch nie erreicht werden, da 
PP3=25536 kleiner ist als diese. Lasse mich auch gerne eines besseren 
belehren
Das z.b. beide Aufgabenlösungen richtig sind.






Auf dem PWM- Kanal  3  eine 80c167 soll am Ausgang P7.3 ein PWM Signal 
inder der Betriebsart (Edge-Aligned) mit der Frequenz 1Hz ausgegeben 
werden, solange P7.0 1 ist. Eine angeschlossene Last soll mit 25% 
angesteuert werden wenn der Anschluss P7.1 0 ist, sonst mit 50%.

fosz=40MHz



Muster Lösung:

PWMCON0=8;
PWMCON1=8;
Eingangsfrequenz 40000KHz
Grundfrequenz 1KHz
40000:1=40000

Anfangswert: 65536-40000=25536

PP3=25536

Vergleichswerte: 50%     65536-20000=45536;
     25%     65536-10000=55536;


Void main()
 {
   DP7_3=1;
   PP3=25536;
   PWMCON0=0x8;
   PWMCON1=0x8;
   While(P7_0)
   {
    if (P7_1) PW3=45536;
     else PW3=55536;
   }
}

von Jörg S. (joerg-s)


Lesenswert?

Zu Aufgabe 1)
Voraussetzung ist (anscheinend):
fosc = 20MHz
PWM Frequenz = 500Hz

Da hat man jetzt 2 Möglichkeiten für die PWM Frequenz:
1) Ohne Teiler:
20MHz = 50ns Takt (PTI3 = 0)
500Hz = 2ms
2ms/50µs = 40.000
Diese 40.000 sind die Einstellung für PP3

75% erreicht man durch 75% des PP3 Registers. Also 0,75*40.000 = 30.000 
und 25% 0,25*40.000 = 10.000 = PW3

2) Mit Teiler
20MHz/64 = 3,2µs (PTI3 = 1)
500Hz = 2ms
2ms/3,2µs = 625
Diese 625 sind die Einstellung für PP3

75% erreicht man durch 75% des PP3 Registers. Also 0,75*625 = 468 und 
25% 0,25*625 = 156 = PW3

Ergo: Lieber ohne Teiler, dann wird die PWM Auflösung besser.



Zu Aufgabe 2)
Da weiss ich jetzt nicht was ich glauben soll. Einerseits wird von 
"Frequenz 1Hz" gesprochen, unten heisst es dann aber "Grundfrequenz 
1KHz". Oben wird von "Edge-Aligned" gesprochen, unten wird dann aber 
PWMCON1=0x8; gesetzt und somit auf "Center aligned" gestellt. Mit 
PWMCON0=8; wird der Teiler 64 gesetzt, aber trotzdem mit 40Mhz 
weitergerechnet.... versteh ich alles nicht.

von Jörg S. (joerg-s)


Lesenswert?

>2ms/50µs = 40.000
Muss natürlich "50ns" sein.

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.