MSP430G2231 PWM mit Duty Cycle 0 und 1

#2152005
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
Angehängte Dateien:
#2152023
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.
Gast #2152123
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...
#2152233
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
#2153654
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
Angehängte Dateien:
#2154103
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren