PWM Signal erzeugen mit MSP430

Gast #92834
Lesenswert?

Hallo,

in der Schule wurde uns die Aufgabe gestellt einen Motor mit Hilfe des
MSP430 anzusteuern. Wir sollen das über ein einstellbares PWM Signal
mit Timer B in C realisieren. Nur leider habe ich überhaupt keine
Ahnung davon.
Hat jemand so eine Funktion, oder könnte mir jemand weiterhelfen?

Vielen Dank schonmal
Gruß
Timo
Gast #92839
Lesenswert?

PWM : PUls-Weiten-Modulation.
Es gibt verschiedene Modelle - ich erläutere jetzt kurz den phasen- und
frequenzrichtigen Modus.

Es gibt eine feste Dauer eines Zyklus, im weiteren f_PWM.
Während dieses Zyklus ist die Spannung eine Zeit lang 100% an, den Rest
des Zyklus aus.
Mit einem Timer kann man das wie folgt realisieren :
Man lässt den Timer von 0 aus hochzählen. Wenn er eine vorgegebene
Obergrenze erreicht hat, lässt man ihn wieder herunterzählen bis auf
Null und dann wieder von vorn. Die Zykluszeit ist dann genau
T_PWM = 2 * (Obergrenze) * (Zeit für einen Schritt)
(Achtung - falls höchste Genauigkeit gefordert ist, muss man sich noch
Gedanken machen, was im Zähler im Umkehrpunkt passiert!)
f_PWM = 1/T_PWM

Es fehlt jetzt noch das Ein-/Ausschalten der Spannung. Das realisiert
man durch einen einstellbaren Wert zwischen 0 und Obergrenze des
Zählers. Erreicht der Zähler beim Aufwärtszählen den Wert (x_PWM) so
wird der Ausgang ausgeschaltet. Beim Erneuten Durchlaufen beim
Herunterzählen wird der Ausgang wieder eingeschaltet.
Als Puls-/Pauseverhältnis ergibt sich :
ED = x_PWM / Obergrenze (mit 0<=x_PWM<=Obergrenze)

Um die Phasen-Richtigkeit zu gewährleisten und Fehlzyklen zu vermeiden,
darf der Wert x_PWM nur im Zählerstand 0 modifiziert werden.

Tips :
- Im Datenblatt das Zählerkapitel durchlesen
- nach "Compare-Match" suchen
- nach "PWM" suchen
- bei Nichtverstehen wieder hier mit Seitenangabe hier nachfragen

MfG, Khani
Gast #92840
Lesenswert?

Aha!

Für den Timer_A gibt es ein Beispiel, wie man mit dem PWM macht. Mit
Hilfe des Datenblattes sollte das recht einfach auf den Timer_B
übertragbar sein!

Schau doch mal in "/examples" im mspgcc-Verzeichnis. Genauer:
 /examples/slac015/fet140_ta_pwm01 bis fet140_ta_pwm06

Für den Timer_B hab ich jetzt auf Anhieb kein Beispiel gefunden, kann
aber sein, daß eins dabei ist. Aber wie gesagt: mit dem Family User
Guide lässt sich das auch einfach auf den Timer_B anpassen.
Gast #92844
Lesenswert?

Die Pwm Funktion sieht folgendermassen aus:

void PWM(int dutycycle, int period)
{
  TBCTL = MC_0;                       // Stop the timer
  TBCTL = TASSEL_2 + TBCLR;           // ACLK, Clear Tar
  TBCCR0 = period;                  // PWM Period
  TBCCTL2 = OUTMOD_7;                 // CCR2 reset/set
  TBCCR2 = dutycycle;                 // CCR2 PWM duty cycle
  P4DIR |= 0x0F;                      // P4 output
  P4SEL |= 0x0F;                      // P4 TA1/2 otions
  TBCTL |= MC0;                       // Start Timer_B in up mode
}
Gast #92846
Lesenswert?

Das stimmt nicht ganz. Ich hatte eine Lösung mit einer Schleife, die mir
mein Ausgangssignal generiert hat. Was natürlich keine saubere Lösung
war, da ja nicht anderes mehr gemacht werden kann. Die zweite Aufgabe
baute dann auf die erste auf und meine Lösung war damit hinfällig. Ich
habe nur den Hinweis auf Timer B erhalten. Da ich vorher nie mit Timern
gearbeitet habe stand ich wie der "Ochs vorm Berg", durch eure
Denkanstösse konnte ich diesen Teil der Aufgabe aber ziemlich schnell
lösen.
Tolles Forum und vielen Dank nochmals für die Hilfe

Timo
Gast #92848
Lesenswert?

Hi

@Sebastian
Meinst du du könntest deine Seite so gestalten das sie auch mit
Auflösungen jenseits von 1024x768 ordentlich dargestellt wird? Hier
(1600x1200) ist alles seitlich verschoben. Siehe Anhang.

Zusätzlich könnte ein Besuch von http://validator.w3.org/ nicht
schaden.

Bitte nicht böse sein. Nur konstruktive Kritik.

Matthias
Angehängte Dateien:
Gast #92849
Lesenswert?

Jaja, ich weiss. Die Seite ist blöderweise für 1024*768 optimiert.
Sobald ich Zeit habe, werde ich sie "offener" gestalten. Solange muss
eben noch der Inhalt zählen, nicht die Form. ;-)

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