Frage zu PWM bei C167

Gast #1098232
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;
   }
}
#1099065
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.