Forum: Mikrocontroller und Digitale Elektronik MSP430G2231 PWM mit Duty Cycle 0 und 1


von Dieter B. (barth)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen.
Ich habe einen MSP430G2231.
Mit diesem habe ich eine Motorregelung gebaut.
Hab hier auch ein bisschen Hilfestellung bekommen
Beitrag "MSP430G2231 mit BUZ 11 PWM Ansteuerung"

Aber darum geht es jetzt nicht unbedingt.
Mein Regler funktioniert soweit auch.

Nur die "Grenzbereiche" machen mir sorgen.
Ich habe meinen Timercode mal angehängt.

Das Problem ist das ich den Port nicht ganz aus oder einschalten kann.
Es kommt zwar nur im Grenzbereich vor, aber wenn der Motor mit sehr 
niedrigen Drehzahlen drehen soll funktioniert mein Code nur bei einer 
langen Periodendauer, da hier im Verhältnis die Ausschaltzeit viel 
länger wie die Einschaltzeit ist.

Jetz meine Frage.
Wie kann ich meinen Timer programmieren (warscheinlich im UP/Down Modus)
dass ich auch ein Duty Cycle von 0 und 1 ralisieren kann?

Mein Problem.
Ich kann mir derzeit noch nicht einmal eine Vorstellung mache wie es 
funktionieren könnte, da ja auch die Interruptroutinen Zeit brauchen.
Das ist zumindest mein Problem bist jetzt


Schon mal vielen Dank

von Jörg S. (joerg-s)


Lesenswert?

Sehe ich das richtig das die Ausgabe in Software machst? Du kannst die 
PWM doch mittels TACCR1,2,usw. auch in Hardware rausgeben. Stichwort: 
Compare

von Dieter B. (barth)


Lesenswert?

Danke für die schnelle Antwort.
Ja ich mache das via Software über Interrupts.

Hättest du ein Codebeispiel?
Oder kannst du es mir bitte etwas genauer erklären.
Ich bin schon Stunden auf der Suche und habe bis jetzt noch nichts 
richtiges gefunden. Habe das Datenblatt im bezug auf Timer gelesen und 
habe das Buch MSP430 Microcontroller Basics von Jon Davies. Da steht 
leider auch nur drin das es geht, aber nicht wie.

von Jörg S. (joerg-s)


Lesenswert?

Code Beispiel gibt's bei TI:
http://www.ti.com/lit/zip/slac080

Passendes PWM Beispiel wäre "msp430x20x3_ta_16.c"


bei Mathar gibt's auch ne schöne Erklärung:
http://www.mathar.com/msp_disco2.html
Ist zwar für den F149, die Grundlagen stimmen aber überein....

von Info (Gast)


Lesenswert?

Das Problem habe ich auch 
(Beitrag "20 kHz PWM auf zwei Pins mit MSP430?")!
Zumindest für 0 und 100 Prozent schalte ich die PWM ab und den Pin an 
oder aus, aber trotzdem habe ich arge Probleme wenn Watchdogtimer 
(Regler 90 Hz) und ADC Interrupt auch noch an sind.
Ein bisschen einsparen kann man, wie jörg sagt:
http://e2e.ti.com/support/microcontrollers/msp43016-bit_ultra-low_power_mcus/f/166/t/60128.aspx

http://e2e.ti.com/support/microcontrollers/msp43016-bit_ultra-low_power_mcus/f/166/p/104860/369006.aspx

Aber das schränkt Pins, Frequenz und weitere Timerbenutzung ein...

von Dieter B. (barth)


Lesenswert?

Hi.
Kannst du mir noch sagen wie das mit dem Capture und Compare 
funktioniert?
Welchen Modus muss ich da her nehmen und weleche register sind da frei.
Die Codebeispiele von Texasinstruments funktionieren irgendwie nicht so

von Christian R. (supachris)


Lesenswert?

Die Codebeispiele funktionieren eigentlich alle. Capture brauchst du 
nicht, das ist zum messen externer Signale mit dem Timer. Du brauchst 
Compare. Im Compare Modus wird der Zählerstand vom TAR Register mit dem 
CCRx Register verglichen und je nach Out-Mode der Pin gesetzt oder 
rückgesetzt. Schau mal in den User Guide des MSP430, da ist das super 
erklärt, mit Diagramm, wie der Timer-Wert ansteigt und entsprechend die 
PWM erzeugt wird. Kurz gesagt bestimmt der Wert in TACCR0 die 
Periodendauer und der Wert in TACCR1 bzw. TACCR2 die Pulsweite. Der 
Out-Mode bestimmt, was bei Erreichen von TACCR0 und TACCR1/2 passiert.
Seite 366 im User Guide: 
http://focus.ti.com/lit/ug/slau144h/slau144h.pdf

von Dieter B. (barth)


Angehängte Dateien:

Lesenswert?

Hallo Leute.
Vielen Dank schon einmal.
Ich habe das jetzt begriffen und meine PWM funktioniert wunderbar.
Allerdings in meiner Regelung habe ich noch ein Problem.
Ich glaube das der Fehler bei P1SEL liegt.
Im Anhang mein Code.

Am P1.1 will ich die analogen Werte einlesen.
Und an P1.6 will meine veränderte PWM ausgeben.

Was genau macht P1SEL?
Wisst ihr wo der Fehler liegt?
Danke schon einmal

von Dieter B. (barth)


Angehängte Dateien:

Lesenswert?

Hi Leute.
Ich habe jetzt noch versuch das ganze zu Debuggen.
Ich habe mir das AD Wandler Register angeschaut.
Es schwankt um die 400. Egal welche eingangsspannung ich an P1.1 anlege.

Vielleicht seht ihr noch was hilfreiches

von Jörg S. (joerg-s)


Lesenswert?

Wenn du Code hast, häng ihn bitte mit der Dateiendung *.c an, dann wird 
er auch als C-Code angezeigt.


Hier stimmen Kommentar und Code überhaupt nicht überein:
1
  //Konfiguriere Input/Output Einstellungen:
2
  P1DIR |= BIT6|BIT4;  //Port 1,4,6,8 als Ausgang     
3
  P1SEL = BIT1|BIT6;     // Setzt P1.6 als Digitalen Output

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.