Hi, Ich habe hier ein Board mit einem STM32 und einem DRV8825 Schrittmotortreiber IC drauf, welches ab und zu mal Probleme macht. http://www.ti.com/lit/ds/symlink/drv8825.pdf Problem: Wenn ich den Stepper im laufenden Betrieb ausziehe, dann geht der STM32 in einen Hardfault. Ich weiß, dass man das eigentlich nicht macht, einen Schrittmotor im Betrieb abhängen, jedoch kann ein Endbenutzer dies sehr wohl machen. Die integrierten Freilaufdioden im Treiber müssen aber den Strom sowiso aushalten können. Der STM32 und der Stepper werden auf der Logikseite über den gleichen 3.3V Spannungswandler versorgt, da vermute ich auch die Ursache des Problems. Die Leistungsseite des Treibers wird direkt an die Spannungsversorgung angeschlossen, 12-24V. Diese wird über einen Buck Converter auf 5V gebracht und von da aus mit einem Linearregler auf 3.3V. Sollte man den Schrittmotortreibern einen eigenen Spannungswandler geben und so von dem des STM32 trennen? Hat jemand von euch schon ähnliche Probleme gehabt? Grüsse Bert
Bert S. schrieb: > Sollte man den Schrittmotortreibern einen eigenen Spannungswandler geben > und so von dem des STM32 trennen? Wieviel leichter ist es für dich auszuprobieren ob da das Problem herkommt als für uns zu raten, was da alles sein könnte? µC Abstürze in Zusammenhang mit Motoren hat vermutlich schon jeder mal gehabt, der sich intensiv damit beschäftigt hat. Also ja zu deiner Frage.
Das Problem wird sein, dass beim ausstecken unter Strom am Stecker Abreissfunken entstehen, bei durchaus erheblichem Strom, und Funken eben funken, d.h. auch ohne Kabel stören und auf den Leitungen massive Transienten hervorrufen. Lege das Kabel mit allen Adern mal durch einen Ferrit, vor (aus Richtung des uC) der Stelle an der der Stecker gezogen werden kann und verdrille die Adern.
Deine Analyse ist sehr wahrscheinlich richtig. Wenn Du den Motor absteckst, entsteht - je nach Qualität Deiner 24V-Versorgung, Zuleitungslängen, etc - eine Spannungsspitze, die bis zum STM32 durchgereicht wird. Der Stepper-IC hat außerdem ohnehin seinen eigenen 3V3-Regler (siehe Fig. 8.2 im Datenblatt) - da muß man nichts extra erfinden. Sofern Dein STM32 nicht zu viel Strom zieht würde ich - zwecks Robustheit - mit einem Linearregler (Achtung: könnte warm werden) direkt von den 24V auf 3V3 gehen. Mit einem Vorwiderstand (Achtung: kann auch warm werden) in der 24V-Versorgung gefolgt von einem eingangsseitigen Puffer-Kondensator gibt das einen schönen Tiefpaß, der hochfrequente Störungen und eben Spikes vom Abstecken dämpfen sollte.
Bert S. schrieb: > Ich habe hier ein Board mit einem STM32 und einem DRV8825 > Schrittmotortreiber IC drauf, welches ab und zu mal Probleme macht. Schaltplan und (oder wenigstens) Layout sind hier für eine sinnvolle Suche unabdingbar, denn bei gutem Schaltungsdesign und excellentem Layout passiert da üblicherweise nichts... Hast du schon mal geschaut, woher der uC in den Interrupt springt? Ist das jedes mal beliebig, oder kommt er immer von der selben Ecke? Das erstere würde dann eher auf ein Hardwareproblem deuten, das zweite eher auf die Software, die sich durch Störungen durcheinander bringen lässt.
:
Bearbeitet durch Moderator
Bert S. schrieb: > Der STM32 und der Stepper werden auf der Logikseite über den gleichen > 3.3V Spannungswandler versorgt, da vermute ich auch die Ursache des > Problems. Die Leistungsseite des Treibers wird direkt an die > Spannungsversorgung angeschlossen, 12-24V. Wie sieht die Verkabelung aus? Fließt der Motorstrom über die gleiche Leitung wie die Versorgung der Logik? Wie hoch ist der Motorstrom?
Die Schaltung ist genau die Gleiche wie im Datenblatt. Der Schrittmotor ist mit Current Chopping auf 1A eingestellt. Beim Layout verwende ich die gemeinsame Ground Layer, was hier evtl. den Fehler verursacht. Bei normalem Betrieb läuft das Board aber immer stabil. Da es sich bei diesem Board nur um ein Testboard handelt, möchte ich möglichst viel Erfahrung daraus nehmen um den Fehler bei der nächsten Revision zu beheben. Das beste währe wohl, mit Optokoppler den uC galvanisch trennen, oder?
Bert S. schrieb: > Die Schaltung ist genau die Gleiche wie im Datenblatt. Wenn im Schaltplan die Bauteilwerte und auf dem Layout keine Bauteilumrisse, lediglich irgendwelche Namen angegeben sind, macht das keinen wirklichen Spaß, irgendwelche Bauteilanordnungen zu gucken. Die Fuddel an Pin 14 und 28 sollen der Masseanschluss vom DRV8825 sein? Welches sind die Abblockkondensatoren und liegen die dich am Chip?
Wolfgang schrieb: > Wenn im Schaltplan die Bauteilwerte und auf dem Layout keine > Bauteilumrisse, lediglich irgendwelche Namen angegeben sind, macht das > keinen wirklichen Spaß Sorry, C21 und C22 sind die Abblockkondensatoren. Der DRV8825 hat ein HTSSOP Gehäuse, daher ist auch das PPAD mit Masse verbunden.
Wo ist denn die Verbindung von GND Pad zu Massefläche? Wenn diese fehlt, kann es nicht richtig funktionieren
Bert S. schrieb: > Die Schaltung ist genau die Gleiche wie im Datenblatt. Na ja, warum man Platinen immer so baut, daß Wege maximal lang werden, werde ich nicht vestehen. Da geht die GND Verbindung der Strommessiwderstände des Stromchoppers nach links während der Stützelko aus dem die Energie dafpür kommt rechts sitzt, und Masse muss ein mal unter dem IC hindurch beide verbinden und weil das nicht reuicht noch zum rechtesten Zipfel der Platine laufen. Natürlich geht Masse auch noch mal unten rum als dünne Leitung, die nur einen Sinn hat: Eine Spulenwindung zu schliessen damit EMV Empfindlichkeit auf Einstrahlung und Abstrahlung maximmiert werden. Warum ? Dann legt man Masse der Eingänge weit nach aussen, sind ja auch unwichtig, werden schon beim Reingiessen der Massefläche irgendwie angebunden werden, und die 3.3V Leitung darf die ganzen Verbindungen nah zum Chip durchtrennen.
majo schrieb: > Wo ist denn die Verbindung von GND Pad zu Massefläche? Welche "Massefläche"? Da ist zwar die Unterseite geflutet, aber eine geschlossene "Fläche" bildet die Masse nicht... Und eines vermisse ich sehr: den STM32, der ja diese Probleme zeigt.
Lothar M. schrieb: > Welche "Massefläche"? Da ist zwar die Unterseite geflutet, aber eine > geschlossene "Fläche" bildet die Masse nicht... Richtig, aber worauf ich hinaus wollte, ist, dass die Masseanschlüsse des Stepperdrivers nicht mit der restlichen Masse verbunden sind.
Das mit der GND Verbindung für die Strommesswiderstände ist schlecht gewählt, dass stimmt schon. Das PPAD ist über Vias mit der Groundfläche verbunden. Das die "Groundfläche" um den DRV8825 einige andere Leitungen hat ist nicht zu vermeiden, bei nur 2 Layern. Michael B. schrieb: > Natürlich geht Masse auch noch mal unten rum als dünne Leitung, die nur > einen Sinn hat: Eine Spulenwindung zu schliessen damit EMV > Empfindlichkeit auf Einstrahlung und Abstrahlung maximmiert werden. Wie meinst du das? Michael B. schrieb: > Dann legt man Masse der Eingänge weit nach aussen, sind ja auch > unwichtig, werden schon beim Reingiessen der Massefläche irgendwie > angebunden werden, und die 3.3V Leitung darf die ganzen Verbindungen nah > zum Chip durchtrennen. Das sind ja nur Pull-Down Eingänge für die Einstellung des Mikroschrittbetriebs.
Bert S. schrieb: > Das mit der GND Verbindung für die Strommesswiderstände ist schlecht > gewählt, dass stimmt schon. Die Fläche, die von den beiden möglichen Pfaden des Motorstromes eingeschlossen wird, muss möglichst gering sein. Je größer, um so mehr Störungen werden abgestrahlt. So ein stromgeregelter Schrittmotortreiber ist nichts anderes als ein Step-Down Schaltwandler mit der Motorwicklung als Speicherspule. Es gelten die gleichen Designregeln.
Was könnte ich also tun, um zu bestimmen, ob wirklich die Ground Anbindung das Problem ist? Mit einem Kabel nach den Shunts direkt auf den Elko? Wäre es für das nächste Design sinnvoll, die Schrittmotortreiber mit einer separaten Ground Trace direkt zur Spannungsversorgung zu verbinden und nicht direkt mit der Ground Layer?
Du könntest direkt am Steckverbinder 8 x Schutzdioden testweise ergänzen, damit die Störungen beim Abziehen erst garnicht zum Motortreiber bzw. auf die Platine gelangen. Ferner sollte auch der STM eine saubere Spannungsversorgung haben: 'dicke' Leiterbahnen und GND-Fläche, damit er sich nicht stören läßt.
Bert S. schrieb: > Mit einem Kabel nach den Shunts direkt auf den Elko? Ja. > Wäre es für das nächste Design sinnvoll, die Schrittmotortreiber mit > einer separaten Ground Trace direkt zur Spannungsversorgung zu verbinden Nein, aber die Spannungsversorgung-Masse sollte zum Sternpunkt gehen und das ist - vom Elko. Plus dann plus vom Elko. Und wie macht man die 3.3V ? Regler auf Platine oder schon vom Netzteil ? Dann dort die Massen nicht verbinden.
MaWin schrieb: > Und wie macht man die 3.3V > ? Regler auf Platine oder schon vom Netzteil ? Dann dort die Massen > nicht verbinden. 24V Eingang -> Buck Converter auf 12V -> Linear Regulator auf 3.3V bis 400mA
Bert S. schrieb: > 24V Eingang -> Buck Converter auf 12V -> Linear Regulator auf 3.3V bis > 400mA (12V - 3,3V) * 0,4A ~ 3,5W MfG Klaus
Klaus schrieb: > (12V - 3,3V) * 0,4A ~ 3,5W Ja, aber das wäre nur die maximale Stromabgabe, solange die Temperatur mitspielt. Im Normalfall braucht die Schaltung 10mA.
Mit dem Oszi kann ich zumindest keinen Spannungseinbruch erkennen, daher muss das Problem schon eher EMV technisch sein. Ich habe nun eine AWG20 Litze von den Shunts zum Elko Ground geführt, jedoch tritt das Problem noch immer auf. Kann es sein, dass der STM32 einfach durch zu starke Störfelder in einen Fehler läuft?
Ich habe nun noch ein wenig rum-gespielt und der uC hängt sich nur selten auf, wenn ich grössere Blitze erzeuge durch ausziehen von nur einer Seite einer Motorspule. Die Frage ist natürlich, ab wann sich allgemein ein uC aufhängt wegen den Störfeldern? Die Blitze sind teilweise bis zu 1mm groß.
Ich würde als erstes mal den Sense-GND so direkt wie möglich mit dem Elko+Kerko-GND verbinden. Das ist nämlich der Zweig, wo der Strom fließt, nicht etwa der GND vom Motortreiber. Mit freundlichen Grüßen Thorsten Ostermann
Die grünen Markierungen an ALLEN Bauteilen bedeuten übrigens, dass da ein DRC Fehler vorliegt. Ich tippe mal auf was unwichtiges - aber da bekommt man doch Kreise auf den Augen wenn man mit so nem grün-roten Muster routen muss.
Ich bin mir leider immer noch nicht sicher, woher der Fehler wirklich kommt. Die Shunts werden nun mit einer Litze direkt an den Elko GND geführt. Manchmal kann ich den Schrittmotor 10-20mal ausziehen ohne Probleme, dann wiederum crasht mir der Kontroller nach 2-3mal ausziehen. Ein auf einem anderen Board mit gleichem GND verbundener STM32 (gleiches Prozessor PCB Design, aber kein Schrittmotortreiber) hingegen crasht nie, obwohl er näher am Schrittmotor-Connector ist. Störungen kann ich mit dem Oszi auf den Pins für STEP, DIR und ENABLE keine erkennen und die Spannungsquelle bleibt immer bei den 3.3V. Jemand eine Idee was da sonst noch die Probleme bereiten könnte und vor allem wo/wie ich die Störungen am besten messen kann?
:
Bearbeitet durch User
Bert S. schrieb: > Ich habe nun noch ein wenig rum-gespielt und der uC hängt sich nur > selten auf, wenn ich grössere Blitze erzeuge durch ausziehen von nur > einer Seite einer Motorspule. Dann hast du auf der Seite der Motospule, also da, wo die Energie gespeichert ist, immer noch keine Maßnahmen gegen induktiv verursachte Spannungsspitzen. Ändere das erstmal, bevor du dir weitere Gedanken machst, warum dein uC die Biege macht.
Wolfgang schrieb: > Dann hast du auf der Seite der Motospule, also da, wo die Energie > gespeichert ist, immer noch keine Maßnahmen gegen induktiv verursachte > Spannungsspitzen. > Ändere das erstmal, bevor du dir weitere Gedanken machst, warum dein uC > die Biege macht. Also jeder Leitung zum Motor (sind ja zwei H-Brücken) zwei Freilaufdioden? Eine von GND nach Leitung und eine von Leitung nach VCC? Sowas hier würde wohl reichen für einen 1A Motor: https://www.mouser.ch/ProductDetail/ROHM-Semiconductor/RBR2LAM40ATR?qs=sGAEpiMZZMtQ8nqTKtFS%2fE7Jc%252bkgrGbhVMueXUy93BqZ4IRpdV7lLg%3d%3d Oder kennt Jemand eine billigere und bessere Alternative?
:
Bearbeitet durch User
Messen ist sowieso eine Kunst für sich. Versuche, die Motorleitungen möglichst kurz und übereinander zu machen, z.B. A+ und B+ auf der roten Seite zu lassen, dadurch kannst du Gnd dicker ausführen und die Shunts direkt nach unten an Gnd anbinden. A- und B- teilweise unter A+ bzw B+ legen. Weiter mehr kleine Cs spendieren für 3,3 und 24. Die Datenleitungen von uC zum Driver mit kleinen Reihen-Rs entkoppeln, so dass Spikes in ihnen vernichtet werden. poste mal die brd-datei, dann zeige ich dir wie ich es meine.
Kannst du auf der Motorseite des Steckers bidirektionale Transildioden oder Snubber reinklemmen? Diese würden einen Großteil der gespeicherten Energie vernichten. Wie oben bereits geschrieben: Motorleitungen paarweise verdrillen.
Bert S. schrieb: > Also jeder Leitung zum Motor (sind ja zwei H-Brücken) zwei > Freilaufdioden? Eine von GND nach Leitung und eine von Leitung nach VCC? Wenn du den Motor abziehst, ist der Motor aber gar nicht mehr an den Freilaufdioden angeschlossen, also können sie auch nicht mehr wirken.
Wolfgang schrieb: > Wenn du den Motor abziehst, ist der Motor aber gar nicht mehr an den > Freilaufdioden angeschlossen, also können sie auch nicht mehr wirken. Ok, dann kann man also nichts machen gegen die Abrissfunken außer ein sauberes Design, Ferritperlen und Widerstände auf den Signalleitungen, Ferrit am Motorkabel und ein Stecker, welchen man nicht so einfach ausziehen kann?
:
Bearbeitet durch User
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.