STM32F4 Pin Ausgangsstrom

Gast #2745757
Lesenswert?

Hallo,
Ich arbeite mit meinen Studienkollegen zur Zeit an einem kleinen 
Roboterprojekt. Als µC haben wir ein STM32F4 Discovery board.
Allerdings haben wir momentan ein Problem: die ganz normalen 
Ein/ausgänge sollten theoretisch bis zu 25mA bei 3V liefern können, aber 
bei uns kann man damit nicht einmal eine 3mA LED betreiben oder einen 
Transistor ordentlich durchschalten, ohne dass die Spannung am 
µC-Ausgang auf weniger als die Hälfte zusammenbricht.
Im Leerlauf funktionierts allerdings super.
Bevor wir jetzt alles auf Mosfets umlöten, wollten wir hier mal fragen 
ob jemand weiß, woran das liegen kann?
Vielleicht gibt es beim STM32 einen speziellen Initialisierungsbefehl, 
der erst die volle Leistung am Ausgang freischaltet?
Viele Grüße,
Michael
Gast #2745791
Lesenswert?

gut, aber eine 3mA LED sollte doch problemlos funktionieren? selbst wenn 
nichts anderes am µC board angeschlossen ist, bricht die Spannung so 
weit ein.

Schaltplan:

Board Pin -----R(300 Ohm)--------LED-------GND

auch mit verschiedenen Ausgängen getestet, immer das gleiche. Wie 
gesagt, im Leerlauf schaltet er stabil auf die 3V.

Gibt es bei der Initialisierung noch irgendetwas spezielles zu beachten?
Gast #2745880
Lesenswert?

ein stm32F4 ist drauf, ist es wichtig welcher genau? Was ist 
Nanowattbetrieb?

hier der Code:
1
#define TESTLEDROTPORTCLOCK RCC_AHB1Periph_GPIOB
2
#define TESTLEDROTPORT GPIOB
3
#define TESTLEDROTBIT GPIO_Pin_11
4

5

6

7
//Init für TESTLEDROT
8
void test_led_init(void) {
9

10
GPIO_InitTypeDef GPIO_InitStructure;
11
RCC_AHB1PeriphClockCmd(TESTLEDROTPORTCLOCK, ENABLE);
12

13
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
14
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
15
GPIO_InitStructure.GPIO_Pin = TESTLEDROTBIT;
16
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
17
GPIO_Init(TESTLEDROTPORT, &GPIO_InitStructure);
18
}
19

20
void led_rot_an(void){
21
GPIO_SetBits( TESTLEDROTPORT, TESTLEDROTBIT);
22
}
23

24
void led_rot_aus(void){
25
GPIO_ResetBits( TESTLEDROTPORT, TESTLEDROTBIT);
26
}
Gast #2745899
Lesenswert?

wo ruffs du die void led_rot_an() routine auf? deklariert hast du sie, 
aber aufruf werde ich in while() schleife packen.
z.b.:
      while(1)
      {
        led_rot_an()
      }

was nanowatbetrieb ist kannst du bei www.sprut.de lesen :)

ich kenne mich leider nicht mit STM32F4 Discovery board, aber alle 
mikrocontroller ticken m.m.n. irgendwie ähnlich.
#2746206
Lesenswert?

Dirk schrieb:
> Legt die LEDs (incl. R) auf V+ und µC-Pin. Die von euch gewählte
> Variante funktioniert auch auf anderen Controllern nicht besonders gut.

Zumal die Outputs dann mehr mA zulassen - aber wenn er das als 
(einzigen) Ausweg sieht, dann kriegt er den eigentlichen Fehler nie weg.

Anderer Tipp, wenn man die Lib verwendet: In der Lib gibt es Funktionen 
wie GPIO_StructInit, zur Initialisierung der jeweils verwendeten 
Structs. Wenn man die verwendet, dann kriegt man wenigstens definierte 
Defaults und keinen Zufall, wenn man einzelnen Komponenten nicht 
ausdrücklich einen Wert zuweist.
#2746216
Lesenswert?

Hallo Michael,

Die Initialisierung des Ports sieht für mich nicht klar aus. Ist zwar 
Out definiert, aber nicht klar op OpenDrain/Open Collector oder 
PushPull. Schau Dir die LIB-Doku mal an und auch das Datenblatt der 
GPIOs.

Im ersten Fall wirst du im EIN-Zustand durch den Pullup limitiert (+UB - 
Pullup - 330R - Diode - GND). Das gibt dann bei geschätzt 10k Pullup 
irgendwas im uA Bereich. Im AUS-Zustand fließt sowieso keiner (GND - 
330R- LED -GND).

Im PushPull Betrieb sollte das aber gehen. OC Betrieb macht aber auch 
Sinn für LEDs, dann musst Du aber ander beschalten, der 
Ausgnagstransistor schaltet nach GND, dann solltetst DU überlegen ob DU 
die LED nicht nach Vcc hängst. Der Pullup ist dann unsinnig.

Was studiert Ihr denn?
Und: Ja, die Kritik das Datenblatt mal genauer zu studieren wäre vielen 
Fragestellern hier anzuraten.

Grüße
Gast #2746689
Lesenswert?

Vielen Dank für die Zahlreichen Antworten! Es lag wirklich an der 
fehlenden Zeile in der Initialisierung, wie holger geschrieben hat. 
Eigentlich logisch, ich weiß nicht warum wir das selbst bei mehrmaligem 
Code-überprüfen nicht gemerkt haben.
Vielen Dank also! =)

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