Forum: Mikrocontroller und Digitale Elektronik PWM mit MSP430 - Fehlersuche


von Patrick A. (tuxifant)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich arbeite mich gerade durch die Code-Examples zum MSP430 (430G2231). 
Wollte jetzt mal etwas mit der PWM über Capture&Compare 
rumexperimentieren.
Zu meiner Testschaltung: Ich weiß selbst, dass das mit nem entsprechend 
dimensionierten Vorwiderstand natürlich sauberer wäre, aber den hatte 
ich gerade nicht zur Hand, deshalb hab ich kurzerhand vier rote LEDs in 
Reihe genommen. Die LEDs laufen an der Versorgungsspannung von 12V auch 
so, wie sie sollen.
Allerdings bekomme ich sie nicht über die PWM an P1.2 geschaltet. Aber 
den Code folgendermaßen geändert:
1
//original source: msp430g2xx1_ta_16.c
2
#include  <msp430g2231.h>
3
4
void main(void)
5
{
6
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
7
  P1DIR |= 0x0C;                            // P1.2 and P1.3 output
8
  P1SEL |= 0x0C;                            // P1.2 and P1.3 TA1/2 options
9
  CCR0 = 51200-1;                             // PWM Period
10
  CCTL1 = OUTMOD_7;                         // CCR1 reset/set
11
  CCR1 = 2;                               // CCR1 PWM duty cycle
12
  TACTL = TASSEL_2 + MC_1;                  // SMCLK, up mode
13
14
  _BIS_SR(CPUOFF);                          // Enter LPM0
15
}

Da die Periode enorm groß ist zur EIN-Zeit (a = 2/51199 ≈ 4e-5) sollten 
die Leuchten faktisch aus sein. Sind sie aber nicht.
In der Schaltung vermute ich den Fehler eher nicht, wenn ich die 
Verbindung zum uC abziehe, erlöschen die LEDs.

Hat jemand eine Idee? Vllt interpretier ich ja nur die Zeilen des 
Codeschnipsels falsch

von Maik F. (sabuty) Benutzerseite


Lesenswert?

Patrick A. schrieb:
> Hat jemand eine Idee? Vllt interpretier ich ja nur die Zeilen des
> Codeschnipsels falsch

Das hat nichts mit dem Codeschnipsel zu tun. Deine Testschaltung ist 
Humbug.

Ändere das zu 12V - R - LED - Transistor - GND und es wird 
funktionieren. Und ein Widerstand zwischen Basis und uC-Pin wäre auch 
nicht verkehrt.

von Patrick A. (tuxifant)


Lesenswert?

Maik Fox schrieb:
> Ändere das zu 12V - R - LED - Transistor - GND und es wird
> funktionieren.
Ja, die Last an den Emitter zu hängen war net so schlau, hätte man drauf 
kommen können.
Aber dass ich statt "R - LED" auch "R - LED - LED - LED - LED" schalten 
kann, darf ich doch annehmen?

>Und ein Widerstand zwischen Basis und uC-Pin wäre auch nicht verkehrt.
Ja, auch dafür war ich zu übereifrig. Hab jetzt leider keinen passenden 
da, muss ich erst suchen.

Gruß Patrick

von Patrick A. (tuxifant)


Lesenswert?

Habe jetzt doch alles zusammen, aber die ganze Chose verhält sich doch 
recht merkwürdig.
Im normalen Betrieb leuchten die LEDs voll. Wenn ich die 
Spannungsversorgung des uC kappe (sitzt auf nem Launchpad; dh ich zieh 
den vom USB-Port), leuchten sie weiterhin, aber deutlich schwächer.
Sollte das etwa daran liegen, dass die Spannungsversorgung der LEDs ein 
Schaltnetzteil ist? Der GND des Boards liegt bei ~ -5V zu GND des NT... 
Ich mach da nen Denkfehler...

EDIT: Hab nochmal gemessen während des Tippens, von daher: Wenn das mit 
den Potentialen geklärt ist, löst sich wohl auch das "ominöse" Leuchten 
auf.

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Vielleicht ist der Portpin vom MSP ja auch kaputt nach der Aktion mit 
den 12 Volt. Lass doch die Schaltung mit dem Transistor weg und häng nur 
eine LED mit einem Vorwiderstand vom Portpin aus gegen Masse. So kann 
man zumindest testen, ob der Prozessor noch geht.

Grüße,

Peter

von Patrick A. (tuxifant)


Lesenswert?

Hallo,

ich werde gerade aus dem Datenblatt nicht schlau. Schafft der Portpin 
überhaupt die 20mA für ne LED? Dann hätt ich mir die Klimmzüge oben 
sowieso sparen können...

Gruß und gut' Nacht!

von Maik F. (sabuty) Benutzerseite


Lesenswert?

Patrick A. schrieb:
> ich werde gerade aus dem Datenblatt nicht schlau.
> Schafft der Portpin
> überhaupt die 20mA für ne LED? Dann hätt ich mir die Klimmzüge oben
> sowieso sparen können...

Im Datenblatt (nicht Family User Guide) gibt es im Kapitel "electrical 
characteristics" ein Unterkapitel über die Outputs. Dort sind Tabelle 
und ein paar Diagramme.

Am Beispiel eines MSP430F20xx erkennt man folgendes: In den Tabellen 
steht, wieviel Strom man entnehmen/einspeißen darf, um in bestimmten 
Toleranzen für den High/Low-Pegel zu bleiben. Das sind bei 0.2V Toleranz 
zB 1.5mA. In den Fußnoten der Tabelle steht außerdem, dass die insg. 
Belastung über alle Pins je nach Pegeltoleranz nicht größer als +-12mA 
(für 0.2V) sein soll.

Die Diagramme auf der nächsten Seite zeigen, wie viel Strom 
raus/reinkommt je nach Spannung am Pin.

Eine LED direkt an den MSP430 anzuschließen ist also möglich, aber nur 
sinnvoll mit Low-Current-LEDs. Für mehr Strom braucht man einen 
Schalttransistor.

> Gruß und gut' Nacht!
Gruß und guten Mittag.

von Patrick A. (tuxifant)


Lesenswert?

Maik Fox schrieb:
> Im Datenblatt (nicht Family User Guide) gibt es im Kapitel "electrical
> characteristics" ein Unterkapitel über die Outputs. Dort sind Tabelle
> und ein paar Diagramme.
>
> Am Beispiel eines MSP430F20xx erkennt man folgendes: In den Tabellen
> steht, wieviel Strom man entnehmen/einspeißen darf, um in bestimmten
> Toleranzen für den High/Low-Pegel zu bleiben. Das sind bei 0.2V Toleranz
> zB 1.5mA. In den Fußnoten der Tabelle steht außerdem, dass die insg.
> Belastung über alle Pins je nach Pegeltoleranz nicht größer als +-12mA
> (für 0.2V) sein soll.

Hallo,
genau diese Diagramme hatte ich im Auge und deshalb auch nachgefragt.
Ich habe jetzt die Ausgänge mit nem Multimeter durchgemessen und dabei 
kam raus:
Vcc = 3,5V
P1.2 = 2,6V ≈ 0,75*Vcc
Habe dazu natürlich den Code aus den Examples genutzt und daher ist das 
genau das gewünschte Ergebnis (was EUCH sicher weniger verwundert ;-) ). 
Und -oh Wunder- auch bei nem Duty Cycle von 0,5 funktionierts.

Ich begeb mich jetzt erst mal auf Suche nach passenden Widerständen. 
Normalerweise hat man die ja zu Hause, aber natürlich gerade nicht 
auffindbar.

Danke soweit, ich melde mich wieder.


Gruß Patrick

von Patrick A. (tuxifant)


Angehängte Dateien:

Lesenswert?

Hallo nochmal,

ich habe meine Testumgebung jetzt neu aufgebaut - und trotzdem steckt 
noch ein Fehler drin.
Folgende Vorgehensweise habe ich angewandt:
* Aus dem Datenblatt zum Transistor 
(http://www.reichelt.de/?;ACTION=7;LA=28;OPEN=0;INDEX=0;FILENAME=A100%252F2N3904_FAI.pdf 
):
  - Ube,on = 0,75V bei Ic = 20mA und Raumtemp
  - hfe = 220 bei 20mA, Raumtemp und Uce = 5 V (Seite 3 links oben)
    --> Ib = 20e-3/220 ≈ 91uA
      --> bei Pin-Spannung 3,5V: Rb = 3,5/91e-6 ≈ 38,5kR

* Aus dem Datenblatt der LED 
(http://www.reichelt.de/?;ACTION=7;LA=28;OPEN=0;INDEX=0;FILENAME=A500%252FLED_5MM_RT.pdf 
):
  - Uf = 2,3V
  - If = 20mA
    --> bei Betrieb an 12V: Rvor = (12 - 2,3)/20e-3 = 485R
        (hab nen 470R genommen; Ucesat ist vernachlässigbar klein)

Das Ergebnis seht ihr im Anhang. Habe bewusst 1:1 den Aufbau 
wiedergegeben, falls das mit der R-Kette eine Fehlerquelle darstellen 
sollte, die sich mir momentan noch nicht erschließt.

Wenn ich also wieder wie oben den Duty Cycle sehr klein wähle, messe ich 
mit dem Multimeter ~0V von P1.2 gegen GND des Boards. Wenn ich 
allerdings meine Schaltung an den Port lege, dann leuchtet die LED voll 
auf. Wenn ich das Kabel zwischen Basiswiderstand und Portpin abziehe, 
erlischt sie. Ich seh den Fehler gerade nicht... %(
Btw, sie leuchtet auch, wenn ich die Basis nur mit dem Finger berühre 
... das könnt ich mir aber noch mit irgendwelchen Kapazitäten 
meinerseits oder so erklären.

Gruß Patrick

von Dennis (Gast)


Lesenswert?

Wo ist denn deine GND-Verbindung von MSP und Steck-Board?

Patrick A. schrieb:
> Btw, sie leuchtet auch, wenn ich die Basis nur mit dem Finger berühre

Das ist normal.

von Patrick A. (tuxifant)


Lesenswert?

Dennis schrieb:
> Wo ist denn deine GND-Verbindung von MSP und Steck-Board?

Nicht existent. Hab ich ja oben schon mal angerissen: Das Launchpad wird 
via USB versorgt, die LED über ein Schaltnetzteil (das ist an den 
Klemmen auf dem Steckbrett angeschlossen).

von Dennis (Gast)


Lesenswert?

Patrick A. schrieb:
> Nicht existent.

Ja so funktioniert es aber nicht - du brauchst schon ein gemeinsames 
Bezugspotential.

von Patrick A. (tuxifant)


Lesenswert?

Dennis schrieb:
> Ja so funktioniert es aber nicht - du brauchst schon ein gemeinsames
> Bezugspotential.

Daran hat es letztendlich noch gelegen, vielen Dank!
Trotzdem ist mir aus der theoretischen Analyse heraus nicht ersichtlich, 
warum das Potential unterschiedlich ist.

Das 12V-Netzteil und das NT vom Notebook hängen am gleichen 
Hausanschluss (sprich gleicher N-Leiter), daher würde ich erwarten, dass 
die Gleichrichtung zum gleichen Bezugspotential hin erfolgt. Und das 
hätte ich dann ja auch am USB!?

von Jörg S. (joerg-s)


Lesenswert?

Patrick A. schrieb:
> Das 12V-Netzteil und das NT vom Notebook hängen am gleichen
> Hausanschluss (sprich gleicher N-Leiter), daher würde ich erwarten, dass
> die Gleichrichtung zum gleichen Bezugspotential hin erfolgt.
Das wäre nur der Fall wenn die Netzteile nicht netzgetrennt wären. Sowas 
gab es vor 100 Jahren mal, heutzutage schützt man die Menschen indem die 
Netzteile galvanisch trennen :)

von Patrick A. (tuxifant)


Lesenswert?

...wird völlig überbewertet! XD Aber leuchtet dann doch ein.

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.