Archiv verlassen und diese Seite im Standarddesign anzeigen : L9110S H-Bridge an STM32 Blue Pill
Hallo zusammen,
ich tüftel gerade an einer Motorsteuerung für ein paar 12V DC Motoren und bin auf Fehlersuche :-k
Ich habe mehrere L9110S H-Bridge IC´s verwendet und steuere sie mit einem STM32103c an. Komischerweise funktioniert nur einer von vieren richtig ](*,)
Ich arbeite zum ersten mal mit einem STM32 Blue Pill und der Arduino IDE, normale Arduinos habe ich schon oft verwendet.
Der L9110S wird mit 12V versorgt und die beiden Eingänge des IC´s sind mit 10K Pullup Widerständen an 12V angeschlossen. Mein Multimeter sagt dass da dann ca. 4,05V an den Eingängen liegen. Macht das dem STM32 etwas aus wenn die IO Pins als Ausgänge deklariert sind, da es ja ein 3.3V uC ist?
Ich habe z.B an einem Ausgangspin des STM32 nur 0.72V anliegen wenn ich ihn auf HIGH schalte, auch wenn er ohne den L9110S betrieben wird. Deshalb die Frage ob der uC irgendwie einen Schlag hat :roll:
Gruß Scynd
Der L9110S wird mit 12V versorgt und die beiden Eingänge des IC´s sind mit 10K Pullup Widerständen an 12V angeschlossen.
Warum?
MfG Klebwax
Das hab ich so von den fertigen Modulen übernommen die es von der Stange gibt.
Mit den Arduinos funktioniert das wohl.
34779
021aet04
30.01.2020, 09:24
Ich habe ein "Datenblatt" gefunden https://www.segor.de/dokumente/l9110.pdf
Dort steht drinnen das die Eingänge TTL/CMOS kompatibel sind. Also Pullup weg (die legt man normalerweise auf die Versorgung vom Controller, also 5V bzw 3,3V,...) und die Controllerpins direkt an den L9110. Damit du keine schwebenden Eingänge am L9110 hast (wenn der uC falsch konfiguriert, in Reset,... ist) kannst du Pulldown Widerstände einbauen. Im PDF oben steht das die Ausgänge low sind wenn beide Eingänge high oder low sind.
Ich würde sowieso nur Bauteile verbauen bei denen man viele Infos findet bzw ein richtiges Datenblatt hat (und leicht verfügbar ist, aber nicht als Modul).
MfG Hannes
Danke für die Info.
Dann plane ich Pullups an 3.3V ein. 2k7 Ohm sollten da passen oder?
021aet04
30.01.2020, 09:54
Das kannst du machen, ich verwende aber normalerweise 10k Widerstände.
Wenn du SMD Widerstände und die ICs direkt (nicht als Modul) verbaust, dann würde ich die Widerstände auf GND legen. Der Grund ist das GND und die Eingänge direkt nebeneinander sind.
MfG Hannes
Danke für die Info.
Dann plane ich Pullups an 3.3V ein. 2k7 Ohm sollten da passen oder?
Warum überhaupt Pullups? Warum nicht Pulldowns, wie 021aet04 vorgeschlagen hat? Und warum 2,7K? Um deinem Blue Pill an den I/Os was zu tun zu geben?. Bei einem CMOS-Chip tuns auch 47k. Die 10k sind doch auch nur ausgewürfelt.
MfG Klebwax
Jetzt muss ich weiter ausholen.
Ich habe auf meiner Platine an den Steuerleitungen zwischen STM32 und L9110S auch noch Taster, die GND durchschalten damit ich auch einzelne Motoren auf Tastendruck verfahren kann, falls es mal nötig sein sollte. Da ich ja nach dem weiter oben geposteten Diagramm die 10k Widerstände reingemacht habe, hat das mit den tastern auch gut funktioniert.
Das ist der Grund warum ich Pullups nehmen wollte, weil ich dann nicht die ganze Platine neu Layouten muss :-b
Auf die 2,7k Widerstände bin ich gekommen, da die meist für den I2C Bus auf 3.3V zum hochziehen verwendet werden
Jetzt muss ich weiter ausholen.
Ich habe auf meiner Platine an den Steuerleitungen zwischen STM32 und L9110S auch noch Taster, die GND durchschalten
Verstehe Ich das richtig: du schließt die Ausgänge deines Blue Pill mit einemTaster gegen GND kurz?
MfG Klebwax
021aet04
30.01.2020, 10:28
Tasten an einem uC Ausgang ist keine gute Idee. Wenn der uC den Ausgang auf high schaltet und du mit dem Taster den Pegel auf low ziehst, hast du einen Kurzschluss.
Besser ist es wenn du die Tasten auf einen uC Eingang gibst und du mit dem Programm den Ausgang steuerst oder du eine Oder-Verknüpfung einbaust (mit Gatter oder Dioden).
MfG Hannes
Verstehe Ich das richtig: du schließt die Ausgänge deines Blue Pill mit einemTaster gegen GND kurz?
Das ist mir jetzt peinlich, aber ja. Soweit habe ich gar nicht gedacht #-o
Um alles Taster an den uC anzuschließen hab ich leider nicht ansatzweise genug Pins übrig...
Ich muss mal die ganze Sache komplett überdenken, vielleicht fällt mir da was ein, ansonsten fliegen die Taster runter.
Aber vielleicht habt ihr noch nen kleinen Tipp für mich.
Der STM32 macht nicht auf allen Pins was er soll. Ich habe mir jetzt mal nen unbenutzen genommen und meinen Code mit einem ST-Link und der Arduino IDE hochgeladen. Dabei habe ich festgestellt, dass z.B. der Pin PB3 nicht macht was er soll.
Daraufhin habe ich testweise das Blink Beispiel aufgespielt das die LED ansteuert die auf Pin PC13 hängt. Das funktionierte ohne Probleme. Dann den Pin im Beispiel auf PB3 geändert und siehe da, es passiert nichts. Der Pin bleibt auf LOW.
Ich weiß nun nicht ob ich einfach eine schlechte Charge aus China erwischt habe, ob die etwas anderes auf der Platine geroutet haben als auf dem PCB steht oder ob es an der Arduino IDE liegt...
Che Guevara
30.01.2020, 12:54
Hi,
an PB3 liegt noch "TRACE SWO", dieses Signal musst du mit "GPIO_RemapConfig(...)" deaktivieren um diesen Pin normal nutzen zu können.
Es gibt auch noch andere, die sich ähnlich verhalten!
Gruß
Chris
Puh, jetzt gehts in die Tiefe.
Hast du zufällig ne Quelle für mich wo ich die genauen Befehle finde?
Und warum lese ich davon nichts in den 100000 Tutorials im Netzt?
Mal ins Datenblatt des Chips schauen. Jeder kann alles, was er so von sich gibt, Tutorial nennen. Am Ende zählt nur das Datenblatt.
MfG Klebwax
Habe mir garade das ganze Datenblatt angeschaut. Leider bin ich dadurch kein bisschen schlauer geworden.
Ich wühle mich mal weiter durchs Netz nach einer Lösung.
Aber danke bis hier her mal für eure Hilfe.
EDIT:
Jetzt läuft es \\:D/
Ich hab den STMDuino Bootloader draufgespielt und da scheinen alle Pins "richtig" gemapt zu sein.
Also herzlichen Dank nochmal!
Gruß Scynd
Che Guevara
30.01.2020, 15:42
Hier (https://www.heise.de/developer/imgs/06/2/3/9/9/2/8/7/Bluepillpinout-4974006ee90b729a.gif) findet man wie ich finde eine gute Übersicht über die Pins und deren Funktionen.
Überall wo du außen eine "weiße Funktion" hast, musst du aufpassen.
Wie die Befehle in Arduino heißen kann ich dir leider nicht sagen, programmiere in "normalem" C.
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
so sieht das bei mir aus.
Das Pinout habe ich auch ;)
Ich denke in der Arduino IDE sieht es genau so aus. Die nimmt auch "normales" C an. Mir ging es um die Bezeichnungen in der Klammer: GPIO_Remap_SWJ_JTAGDisable, ENABLE
Hier (https://www.heise.de/developer/imgs/06/2/3/9/9/2/8/7/Bluepillpinout-4974006ee90b729a.gif) findet man wie ich finde eine gute Übersicht über die Pins und deren Funktionen.
Überall wo du außen eine "weiße Funktion" hast, musst du aufpassen.
Wie die Befehle in Arduino heißen kann ich dir leider nicht sagen, programmiere in "normalem" C.
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
so sieht das bei mir aus.
GPIO_PinRemapConfig() ist keine "normale" (Standard-) C Funktion, sondern eine spezielle API-Libraryfunktion.
"normales C" hat nur rund 20 feste Funktionen (Befehle), der Rest sind immer spezielle Library-Funktionen.
Arduino benutzt C++, aber ist weitgehend C99-abwärtskompatibel. Die Arduino C++ API Funktionen sehen meist anders aus, sind aber nicht "weniger normal" als andere C- oder C++-Lib-Funktionen auch.
Zum Thema GPIO_PinRemapConfig: da kenne ich keinen solchen Befehl, der von "mitgelieferten" Arduino-Libs stammen könnte, daher sind auch die Parameter in dieser Form nicht portierbar. Wenn es gelänge, diese Lib in die Arduino IDE einzubinden, könnte es aber durchaus funktionieren.
@scynd: ich würde dir empfehlen, auch in einem Arduino-Forum deine Fragen zu diesem Problem stellen, am besten im internationalen Arduino.cc Forum https://forum.arduino.cc/
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.