Forum: Mikrocontroller und Digitale Elektronik variable PWM mit MSP430


von Tom (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich weiß dieser Themenbereich wurde schon oft hier dikutiert, aber für 
das von mir geschilderte Verhalten habe ich noch immer keine Lösung 
gefunden. Es handelt sich um eine LED Ansteuerung mit dem MSP430F149 per 
PWm vom TimerB mit als Hardware PWM. Also die Pins 4.0...4.7. Er läuft 
mit 8MHz. Der Testcode zeigt nur die Funktionalitäten für die PWM 
generierung. Timer A erzeugt Interrupts, bei denen die neuen Compare 
Werte ins CCRx Register gelegt werden. Timer B erzeugt die PWM. Soweit 
läuft alles gut, nur gibt es "Ausreißer" beim Helligkeitsverlauf. 
Verwednet wird eine Wertetabelle. Willkürlich scheinbar blitzen die LED 
auf. Das passiert auch, wenn ich zum Comparewert ändern, die Main 
benutze! oder im TimerA nur die Laufvariabel hochzähle und die Werte 
direkt in der timerB ISR setze. Immer das gleiche Verhalten. Nun bin ich 
nicht der große Programmierer und mir fällt nix mehr ein.
Ich hoffe mir kann hier jemand mit einem Blick auf den Code helfen oder 
Hilfestellung geben. gerne gebe ich dann noch mehr Auskünfte dazu!

Danke!!

Gruß

von Stefan (Gast)


Lesenswert?

Ist das ein Schreibfehler?
1
void init_Timer_B(void)
2
{
3
    
4
    TBCCR0  = 65535-1;                           // PWM Periode-1
5
...

In diesen Falle (CCR0 = 65534) würde ein CCRx = 65535 aus der Tabelle 
ja nie erreicht werden können...

von tom (Gast)


Lesenswert?

Hallo,

nein kein Schreibfehler.
Stimmt, was würde aus deiner Sicht passieren?

Danke fürs Feedback!

gruß

von P. G. (dronus)


Lesenswert?

Der Timer B hat ein Latch (Zwischenspeicher) für die TBCCRn Register.

Diese aktiviert man in dem man die CLLD-Bits im jeweiligen TBCCTLn 
Register auf b01 setzt.

Wenn der Latch nicht aktiviert ist, ist man nie ganz sicher ob man den 
nächsten PWM-Wert vor oder nach dem Einschaltvorgang setzt. Wenn der 
Zeitpunkt zu früh liegt und der PWM-Wert niedriger ist, verpasst der 
Timer den Schaltzeitpunkt und die LED ist dann länger als eine ganze 
Periode aus. Dasselbe kann andersherum passieren, die LED ist dann eine 
länger als eine Periode an, was sich als Blitzer der LED äußert.

Wenn der Latch aktiviert ist, wird der neue Wert im TBCCRn-Register 
nicht verwendet bevor der Timer einmal über die 0 gelaufen ist. Damit 
ist sichergestellt, dass keine Periode verpasst werden kann.

von def leppard (Gast)


Lesenswert?

wie würde man den diesen PWM Generator realisieren, wenn man für Timer A 
kleine Zeiten wählt. und zwar so kleine zeiten, dass ein Wechsel der 
CCR-werte MEHRMALS erfolgt, bevor die erste Periode durchlaufen wurde. 
normalerweise würden ja die Werte immer wieder überschrieben werden, 
sodass nur der Wert übernommen wird, der im Moment des Nulldurchganges 
gesetzt wurde

von def leppard (Gast)


Lesenswert?

hat jemand einen plan?

von def leppard (Gast)


Lesenswert?

:/

von MaWin (Gast)


Lesenswert?

Hast du Langeweile oder ein aktuelles Problem?

def leppard schrieb:
> wie würde man den diesen PWM Generator realisieren

Gar nicht! Der MSP kann PWM in HW. Im FUG findest du alle Infos zum 
OUTMODE.

von def leppard (Gast)


Lesenswert?

hast du dir überhaupt durchgelesen, worum es geht???

von Clemens L. (c_l)


Lesenswert?

Anscheinend hat es keiner verstanden.

Ein Beispiel könnte hilfreich sein.

von Del (Gast)


Lesenswert?

setze beim int von CCR0 die neue Pulsbreite und Frequenz. Wenn CLLD_1 
gesetzt ist, dürfte für die nächste Periode diese eingestellt 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.