Hallo,
ich würde gerne einen DC Motor Controller auf Basis eines AtMega(328)
bauen wollen.
Grundsätzlich ist die PWM Ausgabe + H Brücke kein allzugroßes Problem.
Allerdings würde ich gerne auch ein current limiting einbauen, um
eventuelle Probleme Abzufangen, wenn der Motor zb. stecken bleibt und
dadurch sehr viel mehr Strom braucht.
Wie wäre das am sinnvollsten machbar? einen Widerstand in die Low Side
FETs zur Strommmessung, und darüber an den Comparator des AtMega, und
einen Interrupt aktivieren, sobald der Schwellwer überschritten wird und
sofort den PWM abdrehen?
Oder gibt es dafür einfachere Varianten? Ich würde gerne nach
Möglichkeit mehrere Motoren mit einem AtMega betreiben, idealerweise 3
Stück ( 3x Timer gäbe es ja im AtMega328 )
Danke
Rick
Rick schrieb:> Oder gibt es dafür einfachere Varianten?
Die ist doch einfach. Man kann statt des AC auch ADC Kanäle benutzen,
aber dann muss man die auch abfragen und mit Schwellwerten vergleichen.
Der Haken ist der Kompromiss zwischen Ansprechgeschwindigkeit und
Mittelung des gemessenen Stromes, denn der hat natürlich Spitzen, die
nicht jedesmal zum Abschalten führen sollten.
Ja falls leistungsmässig z.B. der L298 in Betracht
kommt, der hat auch I-Sense Eingänge -> siehe Datenblatt
Ja über den ADC des mC oder einfach Schwellwert def. und
mit einem Komperator auswerten -> So fäält die ADC-Auswertung weg.
Du musst dann nur auf den Eingang des mC, den der Komperator ansteuert,
pollen - oder besser: den Ausgang des Komperators auf einen der
mc-Pins für externe Interrupts legen ...
Ein Low-Side Shunt hat das Problem, dass die B-E-Spannung der Low-Side
Transistoren deiner H-Brücke sinkt. Oder er muss sehr klein
dimensioniert werden, sodass du noch einen OP brauchst. So oder so hast
du das Problem, dass du beim Messen (z.B. mit dem Oszi) verschiedene
Massepotentiale hast, die du nicht zusammenschalten darfst. Ich würde
eher an der High-Side den Strom messen, dann haben H-Brücke und µC
dieselbe Masse. Mit dem LTC6101 o.ä. kann man dann bequem die Spannung
level-shiften und verstärken.
Manche Controller, wie die STM32, haben einen extra Break Eingang, über
welchen hardwareseitig die PWM abgeschaltet werden kann - so muss bei
Überstrom nicht erst auf die Software gewartet werden, bis wirklich
reagiert wird. Könnte man noch mit Übertemperatur machen.
Beim Anlaufen zieht jeder Motor ein vielfaches des normalen Stroms, und
auch während des Betriebes sind kurze spitzen normal.
Ich würde daher die Messwerte integrieren (meinetwegen auch analog mit
Tiefpass) und nur dann abschalten, wenn der Strom länger als 2 Sekunden
über dem Limit ist.
Bei großen Konstruktionen (z.B. Waschmaschine, Schleifstein) könnte
sogar mehr Zeit erforderlich sein.
Rick schrieb:> einen Widerstand in die Low Side FETs zur Strommmessung, und darüber an> den Comparator des AtMega, und einen Interrupt aktivieren, sobald der> Schwellwer überschritten wird und sofort den PWM abdrehen?
Könnte man machen, reicht oft wenn es nur um Motorüberbelastung geht,
ist aber zu langsam um den MOSFET zu schützen wenn die Motorleitungen
einen Kurzschluss bekommen.
Es gibt MOSFET-Treiber mit eingebautem Überstromschutz:
MIC5020, IR2121
@ Stefan Us (stefanus)
>Beim Anlaufen zieht jeder Motor ein vielfaches des normalen Stroms,
Nur dann, wenn es die Ansteuerung und Stromversorgung zuläßt.
>und auch während des Betriebes sind kurze spitzen normal.
Das ist nicht allgemeingültig.
>Ich würde daher die Messwerte integrieren (meinetwegen auch analog mit>Tiefpass) und nur dann abschalten, wenn der Strom länger als 2 Sekunden>über dem Limit ist.
Quark. Das ist KEINE Strombegrenzung im Sinne einer Motorsteuerung! Denn
die reagiert mikrosekundenschnell innerhalb einer PWM-Periode.
>Bei großen Konstruktionen (z.B. Waschmaschine, Schleifstein) könnte>sogar mehr Zeit erforderlich sein.
[ ] Du weißt, worum es hier geht.
Ab einer bestimmten Leistung haben alle gescheiten Motorsteuerungen eine
elektronische Strombegrenzung, die mal ganz sicher nicht erst nach
mehreren Sekunden reagiert sondern als Schaltregler eine
Konstantstromquelle bildet.
@Rick (Gast)
>Wie wäre das am sinnvollsten machbar? einen Widerstand in die Low Side>FETs zur Strommmessung, und darüber an den Comparator des AtMega, und>einen Interrupt aktivieren, sobald der Schwellwer überschritten wird und>sofort den PWM abdrehen?
Im Prinzip ja, praktisch eher nicht. Denn diese Methode setzt voraus,
daß die PWM-Frequenz nicht zu hoch ist, damit die PWM-Abschaltung per
Interrupt schnell genug läuft. Ich hab das mal bei 60 Hz PWM-Frequenz
für einen einfachen DC-Motor gemacht, das war OK.
Bei mehreren Dutzend kHz macht man das besser komplett in Hardware,
sprich, der Komparator setzt ein externes RS-FlipFlop zurück, welches
erst mit der neuen PWM-Periode wieder eingeschaltet wird. Einige moderne
uCs haben das in Hardware bereits komplett eingebaut, z.B. der
PICCOLO.
>Oder gibt es dafür einfachere Varianten?
Noch einfacher? Nö.
Stefan U. schrieb:> Beim Anlaufen zieht jeder Motor ein vielfaches des normalen> Stroms, und auch während des Betriebes sind kurze spitzen normal.>> Ich würde daher die Messwerte integrieren (meinetwegen auch analog mit> Tiefpass) und nur dann abschalten, wenn der Strom länger als 2 Sekunden> über dem Limit ist.>> Bei großen Konstruktionen (z.B. Waschmaschine, Schleifstein) könnte> sogar mehr Zeit erforderlich sein.
Kann man machen, wenn es um den Schutz des Motors vor Überlastung geht,
denn der ist thermisch limitiert und thermisch träge, S Bewertung der
Messergebnisse möglich.
Es taugt aber nicht, wenn es um Schutz der Elekrtonik geht, die ist in
Microsekunden kaputt, da muss die Überstromerkennung ratz fatz
abschalten bevor der Strom die SOA Grenze erreicht, oder ein
Schaltnetzteil vor Übrrstromabschaltung bewahrt werden soll.
>> Beim Anlaufen zieht jeder Motor ein vielfaches des normalen Stroms,> Nur dann, wenn es die Ansteuerung und Stromversorgung zuläßt.
Wenn die Ansteuerung es nicht zulässt, läuft der Motor nicht an. Obwohl,
mit einer Kurbel könnte man da was machen ...
> Quark. Das ist KEINE Strombegrenzung im Sinne einer Motorsteuerung> Kann man machen, wenn es um den Schutz des Motors vor Überlastung geht
Was jetzt: Quark, oder kann man machen?
Schauen wir nochmal, was das Ziel des TO ist:
> würde ich gerne auch ein current limiting einbauen, um eventuelle Probleme> Abzufangen, wenn der Motor zb. stecken bleibt und dadurch sehr viel mehr> Strom braucht.
Er möchte also eine mechanische Blockierung anhand der Stromstärke
erkennen. Das kann man nicht in Mikrosekunden erkennen, insbesondere
nicht beim Anlaufen.
Mein Ansatz bezieht sich genau auf diese Anforderung. Zusätzlich kann
ein Schutz vor Kurzschlüssen sinnvoll sein. Danach hat der TO aber nicht
gefragt.
Hallo und besten Dank für all eure Antworten!
1) Es soll 1x ein Motor mit Nennleistung ~120W also 12V 10A gesteuert
werden.
Und dann 2x kleinere Motoren mit ~ 20W Nennleistung.
2) Ich wäre mit der PWM Frequenz eher in Richtung 200Hz gegangen, muss
aber erst noch die Induktivität nachmessen ob das so sinn macht,
ansonsten muss ich eventuell über den hörbaren Bereich (zumindest bei
den beiden kleinen).
3) Das heißt ihr meint eine Auslösung über einen Interrupt ist zu
langsam? Das sollte doch in wenigen Taktzyklen ~ 10 abgearbeitet sein,
oder?
4) Schutz soll sowohl für die Elektronik bestehen (Kurzschluss der
Leitung) als auch für den Motor selbst (stecken bleiben). Aber kann ich
nicht mit einer Cycle by Cycle Strombegrenzung beide Fehler abdecken?
Sollte der Motor stecken, wird der Strom doch auch zu hoch ansteigen,
oder nicht? Werde das noch nachmessen bei einem Test. Ansonsten müsste
ich über eine längere Zeit über einen ADC integrieren und abschalten -
sollte auch kein Problem sein.
5) Ich hatte mir überlegt entweder 2x P - Channel FETs für die High Side
zu verwenden, und nur die beiden N - Channel zu Takten oder aber High
Side Treiber zu spendieren und auch für die schaltung der postiven
Spannung (wird ja nur bei Richtungswechsel umgeschalten) einen N -
Channel zu verwenden, da natürlich weniger RdsOn.
Andere µC möchte ich eigentlich vermeiden, ich denke die AtMega sollten
doch ausreichend sein für diese recht "simple" Anwendung. Könnte mir
auch vorstellen, je Motor einen µC zu verwenden, sollte ich mit Timings
oder Hardware Ports nicht zu recht kommen.
Danke!
Rick
Schau Dir den Anlaufstrom an. Dann wirst du sehen, dass du Kurzschluss
und Blockierung unterschiedlich behandeln musst.
Deine Rückfragen kann man nicht ernsthaft beantworten, weil es zu einer
Rekursion führen würde. Deine Fragen wurden bereits diskutiert und somit
geklärt.
Rick schrieb:> Schutz soll sowohl für die Elektronik bestehen (Kurzschluss der Leitung)
Dann rechne mal aus, wie lange es dauert, bis nach dem Moment des
Kurzschlusses der Strom durch den Transistor den Maximalstrom laut
Datenblatt überschreitet.
Gar nicht lange, nicht mal 1ps weil keine Induktivität den Stromanstieg
begrenzt. Uups, Transistor kaputt.
Immerhin haben Zuleitungen ein wenig Induktivität, 30cm hin, 30cm
zurück, vielleicht 1uH, bei 12V steigt der Strom in 1us also um 12A,
damit könnte 1us ausreichen, ein 16MHz AVR kann aus Komparatorinterrupt
so schnell einen Ausgang abschalten, bleibt der MOSFET-treiber der mit
1A das Gate von 10nF umlädt um 10V, also 0.1us, ohne Treiber mit den
20mA eines uC Ausgangs kannst du das vergessen, in 5us ist der Strom
über 60A höher und dein MOSFET kaputt.
Es lohnt sich, vor den MOSFET eine Induktivität von wenigen uH zu
basteln, damit der Stromanstieg im Kurzschlussfall verlangsamt wird und
beherrschbar wird.
Stefan U. schrieb:>>> Quark. Das ist KEINE Strombegrenzung im Sinne einer Motorsteuerung>> Kann man machen, wenn es um den Schutz des Motors vor Überlastung geht>> Was jetzt: Quark, oder kann man machen?
Quark ist lediglich deine Art zu zitieren.
@Rick (Gast)
>1) Es soll 1x ein Motor mit Nennleistung ~120W also 12V 10A gesteuert>werden.
Der hat locker das 5-10fache an Anlauf bzw. Blockierstrom. Da MUSS man
die Endstufe im Mikrosekundenbereich abschalten können (aka cycle by
cycle current limiting)
>2) Ich wäre mit der PWM Frequenz eher in Richtung 200Hz gegangen, muss>aber erst noch die Induktivität nachmessen ob das so sinn macht,
Tu das.
>3) Das heißt ihr meint eine Auslösung über einen Interrupt ist zu>langsam?
Bei 200 Hz PWM mag es gerade noch gehen, bei mehreren kHz eher nicht.
> Das sollte doch in wenigen Taktzyklen ~ 10 abgearbeitet sein,>oder?
In Assembler, C braucht da meist noch mal 10-20 Takte mehr.
>4) Schutz soll sowohl für die Elektronik bestehen (Kurzschluss der>Leitung) als auch für den Motor selbst (stecken bleiben). Aber kann ich>nicht mit einer Cycle by Cycle Strombegrenzung beide Fehler abdecken?
Ja.
>ich über eine längere Zeit über einen ADC integrieren und abschalten ->sollte auch kein Problem sein.
Schützt dir aber nicht deine Endstufe.
>Andere µC möchte ich eigentlich vermeiden, ich denke die AtMega sollten>doch ausreichend sein für diese recht "simple" Anwendung.
Ist er auch, aber ein wenig Zusatzhardware ist nötig, um es gescheit zu
machen.
> Könnte mir>auch vorstellen, je Motor einen µC zu verwenden, sollte ich mit Timings>oder Hardware Ports nicht zu recht kommen.
Nicht sinnvoll.
Endstufe fuer DC Motor mit PWM zu betreiben ist einfach : 1
MOSFET,1Diode.
Kurzschlussfest, Ueberlast geschuetz usw da zeigt sich der wahre
Künstler !
Beste Prüfmethode : Besenstiel in die Mechanik !
Da zeigt sich ob das Zeugs ordentlich funktioniert !
MikroController ist immer zu langsam um den schnellen FET zu jagen....
Hallo Leute,
danke für Eure konstruktiven Rückmeldungen!
Ich habe nun eine Schaltung "ersonnen" die wie ich meine ein schnelles
cycle-by-cycle current limiting bereitstellt.
Siehe Anhang. Habe es nur schnell skizziert, ohne auf exakte Werte oder
Bauteile rücksicht zu nehmen.
Ich vermute jetzt kommen wieder ein paar rhetorische Ohrfeigen, aber
dessen muss ich mich stellen ;).
Was mir aber nach wie vor unklar ist, ist die Erkennung von "Motor
blockiert". Kann ich nun mit der cycle by cycle current limiting Methode
auch diesen Zustand abfangen, oder nicht?
Meines Erachtens müsste er doch so auch in eine Art Stromquellenmodus
übergehen.
Falk B. schrieb:>>ich über eine längere Zeit über einen ADC integrieren und abschalten ->>sollte auch kein Problem sein.>> Schützt dir aber nicht deine Endstufe.
Aber lässt den µC den Zustand "Motor blockiert" erkennen, oder?
@MaWin: Du schreibst es macht Sinn eine kleine Induktivität in die
Leitung zum Motor zu schalten, habe das bislang bei noch keinen
Schaltungen gesehen, ist das eine gängige Methode zum Schutz, oder eine
Art Notlösung?
Rick schrieb:> Ich habe nun eine Schaltung "ersonnen
Wenn man die Polarität der Signale beachtet, entspricht das dem
handelsüblichen.
Rick schrieb:> ist das eine gängige Methode
Nein, die meisten Entwickler haben Angst davor, Streuinduktivitäten
einzubauen, obwohl genau die die korrekte Lösung sind, wenn man ihre
induktive Spitze abfängt (bzw. tolerieren kann).
Hallo,
ich habe mit den Halbbrücken von Infineon, also zb BTS7960 gute
Erfahrungen gemacht, ggf mal Datenblatt anschaen wegen max Strom und
eingebauter Begrenzung etc
@ Rick (Gast)
> cyclebycycle.png>Ich vermute jetzt kommen wieder ein paar rhetorische Ohrfeigen, aber>dessen muss ich mich stellen ;).
Nicht ganz. Am Ausgang von IC1A fehlt ein Pull-Up Widerstand, denn der
ist ein Open Kollektor Typ. Zwischen R1 und IC1A fehlt ein RC-Filter,
mit dem man diversen Dreck und vor allem den Einschaltpuls vom Gate
filtern kann.
Du brauchst kein IC3, das FlipFlop kann das allein. Einschalten per
Takt, Ausschalten per asynchronem CLR. Dazu muss D nur auf HIGH gelegt
werden. Damit hat man auch positive Logik und muss nicht immer um die
Ecke denken.
CLR bzw. PRE dürfen NICHT in der Luft hängen!
>Was mir aber nach wie vor unklar ist, ist die Erkennung von "Motor>blockiert".
Ist nahezu identisch mit Einschaltstrom.
>Kann ich nun mit der cycle by cycle current limiting Methode>auch diesen Zustand abfangen,
Ja.
>Meines Erachtens müsste er doch so auch in eine Art Stromquellenmodus>übergehen.
Richtig.
>> Schützt dir aber nicht deine Endstufe.>Aber lässt den µC den Zustand "Motor blockiert" erkennen, oder?
Ja.
>@MaWin: Du schreibst es macht Sinn eine kleine Induktivität in die>Leitung zum Motor zu schalten,
Genauer. Zwischen MOSFET und Ausgangssteckverbinder. Damit kann ein
harter Kurzschluß der Leitung abgefangen werden.
> habe das bislang bei noch keinen>Schaltungen gesehen, ist das eine gängige Methode zum Schutz, oder eine>Art Notlösung?
Naja, es ist streng genommen die bessere Lösung. Praktisch braucht man
es dann nicht, wenn die Abschaltung WIRKLICH in wenigen Mikrosekunden
(1-10) funktioniert, solange halten die meisten Leistungshalbleiter
einen harten Kurzschluß aus. Siehe SOA-Diagramm.
https://www.mikrocontroller.net/articles/FET#SOA_Diagramm
Wenn die Stromversorgung (Netzteil/Batterie) nicht mehr Strom liefert,
als der Transistor kurzzeitig aushält, kann man sich den Aufwand mit dem
Flipflop sparen.
@ Stefan Us (stefanus)
>Wenn die Stromversorgung (Netzteil/Batterie) nicht mehr Strom liefert,>als der Transistor kurzzeitig aushält, kann man sich den Aufwand mit dem>Flipflop sparen.
So wie deine immer hemdsärmeligeren Kommentare. Mann O Mann!
Der OP will was SOLIDES bauen und nicht auf gummiweiche
Stromversorgungen setzen!
Die Arduino und 10x10 cm SolarPanel Generation
kennt eben nur ''gummiweiche'' Spielzeuge.....
Die Induktivitaet zwischen Fet und Ausgangsklemme
habe ich in einer 'Qualitätsendstufe' gesehen.Ich
kann bestätigen, dass das eine wirksame Loesung ist.
Stefan U. schrieb:> Wenn die Stromversorgung (Netzteil/Batterie) nicht mehr Strom liefert,> als der Transistor kurzzeitig aushält, kann man sich den Aufwand mit dem> Flipflop sparen.
Selbst wenn das Netzteil dauerhaft nicht den Strom liefern kann, ein
Peak Strom in einiger ms kann den Stellglied gnadenlos killen.
Unter Umständen reicht z.B ein Elko von 470 µF an der Stromversorgung
für den Motor.
Na klar, die Strombegrenzung müsste schon von irgendwelchen
Innenwiderständen kommen (vom Elko, den kabel, oder so).
> So wie deine immer hemdsärmeligeren Kommentare. Mann O Mann!
Von industriellen Anlagen habe ich in der Tat noch nicht viel gesehen,
wohl aber von Sachen im Consumer Bereich. Und das es den auch mit
erheblicher Stückzahl gibt, kannst auch du nicht leugnen.
> Die Arduino und 10x10 cm SolarPanel Generation> kennt eben nur ''gummiweiche'' Spielzeuge> Es soll 1x ein Motor mit Nennleistung ~120W also 12V 10A gesteuert> werden. Und dann 2x kleinere Motoren mit ~ 20W Nennleistung.
Kleiner Hinweis nebenbei: Die Motoren von Modellautos nehmen
üblicherweise kurzzeitig deutlich mehr Strom auf. Und dort wird
tatsächlich der Innenwiderstand des Akkus und der Leitungen zur
Strombegrenzung verwendet.
Auch die Leistungsregelung der mir bekannten Elektrowerkzeuge kommt ohne
Kurzschluss-Schutz aus.
Stefan U. schrieb:> Kleiner Hinweis nebenbei: Die Motoren von Modellautos nehmen> üblicherweise kurzzeitig deutlich mehr Strom auf. Und dort wird> tatsächlich der Innenwiderstand des Akkus und der Leitungen zur> Strombegrenzung verwendet.>> Auch die Leistungsregelung der mir bekannten Elektrowerkzeuge kommt ohne> Kurzschluss-Schutz aus.
Daher geht deren Motortreiber auch kaputt, wenn die Motorzuleitungen
durch irgendeinen unglücklichen Umstand einen Kurzschluss haben. Kann
man bei Jubelelektronik so machen.
Hallo Rick!
Du bist in deinem Vorhaben bestimmt schon weitergekommen.
Ich habe mal vor Jahren eine kleine Arduino Motorsteuerung
mit 6KHz PWM Signal, DC12V-4A Motor bauen müssen.
Habe den LMD18200 Statt L298 Verwendet, da dieser MOSFET
Ausgangsstufe hat. Die Spannungsabfall an ihm ist geringer
wie bei Bipolargegner L298 und dadurch die verlustleistung
auch geringer. War wichtig wegen der Kühlung in dem Gehäuse!
Nun die Strombegrenzung wurde bei mir mit OP-Integrator und
nachgeschaltetem Komparator realisiert. Der Sensor ist ein gewöhnlicher
Schunt von 0,22Ohm, bzw bei LMD18200 eingebaut, siehe Datasheet!
In diesem Zusammenhang möchte ich Dir ein Projektarbeit (aus dem Web)
über einem Class-D Verstärkerentwicklung zeigen.
Class D benutzt als leistungsteil mit H-Brücke und mosfets, mit
Schuntwiderstand als Stromsensor.
Auf der Seite 20 ist die Überstromerkennung beschrieben.
http://www.widatec.com/CAE.pdf
Viel Spaß!