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
Michael S. schrieb: > Ein/ausgänge sollten theoretisch bis zu 25mA bei 3V liefern können, Nein. 25mA ist das absolute Maximum, jenseits davon dürfen sie bereits kurzfristig kaputt gehen. Liefern können sie 8mA. Zu beachten ist aber auch die Gesamtsumme.
Michael S. schrieb: > Ein/ausgänge sollten theoretisch bis zu 25mA bei 3V liefern können Es gibt sog. Datenblätter, die nähere Auskunft darüber geben. Je mehr Pins als Ausgang geschaltet und belastet werden, desto weniger kann der einzelne Pin liefern.
schön wäre eine skizze ausgängenbeschaltung fals möglich, was habt ihr für last am ausgang
Michael S. schrieb: > bei uns kann man damit nicht einmal eine 3mA LED betreiben oder einen > Transistor ordentlich durchschalten Die OnBoard Leds auf meinem leuchten dafür aber ganz gut. Leds kann man prima über ULN200x schalten statt direkt am Pin. Vielleicht könnt ihr eure Schaltung zeigen.
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?
Michael S. schrieb: > Gibt es bei der Initialisierung noch irgendetwas spezielles zu beachten? Ja, man sollte es richtig machen. Nützlichere Antworten auf solche Fragen werden einfacher und insbesondere wahrscheinlicher, wenn man zeigt, was man an dieser Stelle konkret getan hat (lies: Code). Statt auf magisch gewonnene Assoziationen der Leser zu hoffen.
Michael S. schrieb: > Gibt es bei der Initialisierung noch irgendetwas spezielles zu beachten? Ja, jede Menge. Wie machst Du es denn momentan?
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 | }
|
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.
Mangels Definition als PushPull laufen die möglicherweise durch Zufälle des uninitialisierten Speicherinhalts der Struct als Open Drain mit Pullup. Das funktioniert dann ohne Last, aber nicht mit Last.
Immerhin ist der PullUp Widerstand aktiv. ;-) Obwohl das in dem Fall eher nutzlos ist.
Legt die LEDs (incl. R) auf V+ und µC-Pin. Die von euch gewählte Variante funktioniert auch auf anderen Controllern nicht besonders gut.
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.
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
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! =)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.