Forum: Mikrocontroller und Digitale Elektronik ARM Cortex M3 - GPIO Strombegrenzung


von Jan R. (superjany)


Lesenswert?

Hallo Leute,

nachdem ich meine anfänglichen Probleme mit meinem Eval-Board 
(EKC-LM3S6965) überwunden habe, sind schon nette Sachen in Richtung 
Webserver etc. entstanden. Zur Zeit schlage ich mich etwas mit den GPIOs 
herum.

Code-Ausschnitt:

SysCtlPeripheralEnable( SYSCTL_PERIPH_GPIOD );
GPIODirModeSet( GPIO_PORTD_BASE, GPIO_PIN_4, GPIO_DIR_MODE_OUT );
GPIOPadConfigSet( GPIO_PORTD_BASE, GPIO_PIN_4, GPIO_STRENGTH_2MA, 
GPIO_PIN_TYPE_STD );
GPIOPinWrite( GPIO_PORTD_BASE, GPIO_PIN_4, 0xff );

Es liegt natürlich eine Spannung von 3,3V an PD4 an. Was mich allerdings 
irritiert ist der Umstand, dass statt 2mA ganze 8,5mA aus dem Ausgang 
geschossen kommen. Ersetze ich GPIO_STRENGTH_2MA durch GPIO_STRENGTH_4MA 
sind es sogar 16,5mA.

Nachdem ich nun "todesmutig" mittels Strommessgerät diese Zahlen 
eingesammelt habe, kann ich mir keinen Reim mehr auf die Funktionalität 
der GPIOs machen. Weiß jemand von euch, warum mehr als 2mA kommen und ob 
der ARM den Strom begrenzt?

Danke schonmal,
Jan

von (prx) A. K. (prx)


Lesenswert?

Wenn du annimmst, der Controller hätte da eine auch nur annähernd 
präzise Stromquelle oder Strombegrenzung drin, dann liegst du falsch. 
Zwar lassen sich bei einigen ARMs die Treiber in mehreren Stufen 
einstellen, ob nun über eine Stromangabe (LM3) oder eine Frequenzangabe 
(STM32), aber damit ist eher eine Grössenordnung gemeint, die sich 
lastabhängig auf Slewrate und als Lastspitzenbegrenzung auswirkt. Das 
ist nicht als Stromquelle für LEDs gedacht.

Diese Stromangabe bei den LM3s ist daher auch im Datasheet nur als 
Mindestwert enthalten. Ein Maximalwert steht dort nicht drin.

von Jan R. (superjany)


Lesenswert?

Danke für die fixe Antwort. Ich fasse mal zusammen und du sagst mir 
nochmal, ob ich korrekt liege..?

1. Begrenzung ja, aber irgendwo zwischen Spanien und Griechenland :-)
2. Schaltungen einfach klassisch mit Vorwiderstand dimensionieren (ist 
dann nach Messung auch sehr ungenau).
3. Wenn ich den Ausgang mit GND kurzschließe, kann dem Controller auch 
nichts passieren...? ^^

von (prx) A. K. (prx)


Lesenswert?

Jan R. schrieb:

> 2. Schaltungen einfach klassisch mit Vorwiderstand dimensionieren (ist
> dann nach Messung auch sehr ungenau).

Schaltungen konventionell dimensionieren. Der Innenwiderstand der 
Porttreiber ist wie auch bei anderen Controllern stark abhängig von 
I/O-Spannung und Temperatur und geht in die Rechnung stets mit ein. Nur 
kommt bei den LM3s und den STM32 noch ein weiterer konfigurierbarer 
Parameter hinzu.

Es war noch nie möglich, eine LED über Widerstand an einen Portpin zu 
hängen und daraus exakte 5mA zu beziehen. Es kam seit jeher immer "mehr 
oder weniger grob um 5mA herum" dabei raus.

Wenn dies zu ungenau ist, dann ist ein externer Transistor sinnvoll.

von Jan R. (superjany)


Lesenswert?

"Wenn dies zu ungenau ist, dann ist ein externer Transistor sinnvoll."

Wenn wir schon dabei sind ^^

http://www.mikrokopter.de/ucwiki/BrushlessCtrl#head-8594a6f5c3a15ea834a44df9b89fd5428ede23db

Sowas wollte ich gern an das Board hängen - allerdings in dreifacher 
Ausführung um dann einen BLDC schalten zu können. Jeweils ein Transistor 
soll mit PWM-Signal betrieben werden. Hast du da Tipps für mich? Wieviel 
Strom geben eigentlich die PWM-Ports her? Habe im Datenblatt überhaupt 
keinen Wert gefunden.

von (prx) A. K. (prx)


Lesenswert?

Daumenregel:

- Will man mit MOSFETs irgendwas ab und zu mal schalten, dann hängt man 
ihn direkt ran, sofern die Gatespannung reicht.

- Will man einen Power-MOSFET sehr häufig umschalten, wie das für PWMs 
typisch ist, dann hängt man einen Treiber dazwischen, diskret oder als 
IC. Der Ausgang des µC kann den für leistungsarmes Schalten 
erforderlichen Strom nicht liefern.

Es gibt natürlich Grenzfälle bei niederfrequenten PWMs und µCs mit recht 
starken Port-Treibern (z.B. AVRs bei 5V).

von Robert T. (robertteufel)


Lesenswert?

Auch noch einen kleinen Beitrag von mir.

Wenn du 2 LM3 oder 2 STM32 hernimmst und genaue dieselben Messungen Port 
pin high gegen Grounnd durch AMP-Meter machst, dann wirst du recht 
verschiedene Ergebnisse bekommen. 1. Einen Transistor genau zu 
dimensionieren ist nur mit groesserem Aufwand in Silicon moeglich -> 
teurer -> wird nicht gemacht.
Du hast mal vom "ARM" gesprochen, den gibt es nicht in diesem 
Sprachgebrauch. Es gibt den LM3xxx, STM32F107xxx, LPC1768xxx oder den 
AT91SAM3U..., jede dieser Familien kann unterschiedliche Port-Treiber 
haben und das hat nichts mit dem Cortex selbst zu tun.

Mehr als 2 mA zu ziehen ist sicher moeglich doch letztendlich ist es 
erhoehter Stress fuer den Pin und somit sinkt die Lebenserwartung, ohne 
Begrenzung im dauerhaften Kurzschlussfall sogar drastisch. Geht nicht 
sofort kaputt aber bald :-)

Gruss, Robert
http://mcu-related.com/architectures/35-cortex-m3

von Jan R. (superjany)


Lesenswert?

Ok, aber wenn halt ein Bipolartransistor als Schaltstufe vorm MOSFET 
hängt, hätte ich eigentlich erwartet, dass es keine Probleme gibt. Denn 
bipolar schalten sollte funktionieren und da dann eine externe Spannung 
durchgeschalten wird dürfte ja auch der Strom genügen...

Kannst du denn sonst spezielle Treiberschaltungen oder ICs empfehlen?

von Jan R. (superjany)


Lesenswert?

Hallo Leute,
wollte nochmal meine Ergebnisse posten. Also die Schaltung von 
Mikrokopter konnte ich 1:1 übernehmen und es gibt keine Probleme mit dem 
Cortex. Habe das PWM-Signal einfach an dem MOSFET mit vorgeschaltetem 
npn-Transistor ausgegeben. BLDC dreht sich einwandfrei ^^

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.