Guten Tag werte Mikrocontroller Gemeinde,
nach vielem Suchen habe ich leider noch keine Antworten für meine Fragen
gefunden. Daher versuche ich es jetzt doch mit einem Beitrag.
Die Situation stellt sich folgendermaßen dar :
Ich möchte einen Getriebemotor selber als Servo benutzen. Grund hierfür
ist Platzmangel bzw. die Bauform.
Die Regelung möchte ich auf einem Arduino umsetzen. Dabei wollte ich die
typische Kaskadenregelung (Position, Drehzahl, Strom) benutzen. Der
Grund für die Umsetzung auf dem Arduino ist, dass diese zu Lehrzwecken
von Studenten auch selber geschrieben werden soll.
Außerdem sollte die Hardware nicht zu teuer werden und so wenig Löten
wie möglich erfordern.
Der Aufbau sieht bis jetzt folgendermaßen aus:
Getriebemotor :
- https://www.pololu.com/product/994
- 6V
- 1.6A Haltestrom
- 300:1 Untersetzung
- 100 u/min Freilaufgeschwindigkeit
- 0.5 Nm Haltemoment
Motortreiber :
Hier habe ich lange gesucht bis ich einen gefunden habe, welcher meinen
Anforderungen entspricht. Falls es andere gut geeignete gibt, welche man
schon auf Platinen erwerben kann, freue ich mich über Vorschläge
- https://www.pololu.com/product/2130
- http://www.ti.com/lit/ds/symlink/drv8833.pdf
- 3V und 6V Motorspannung ("und" da auch noch ein kleinerer Motor
angesteuert werden soll)
- 2A Spitzenstrom
- Möglichkeit den Strom zu messen
- (optinal für weiter Vorschläge: Möglichkeit die
Gegeninduktionsspannung zu messen für die Geschwindigkeit, BACK-EMF)
Potentiometer :
- https://www.bourns.com/data/global/pdfs/3382.pdfDas geplante Vorgehen :
- Alle Sensormesswerte (Potentiometer, Strommessung, optional Back-EMF
Spannnung) über die ADC einlesen
- Mittels Tiefpassfilter bzw. Kalmanfilter die Größen glätten bzw.
schätzen
- Reglerkaskade Aufbauen
- Stromsollwert an Motortreiber per PWM
Das Problem mit der Stromregelung :
Ich weiß nicht genau wie das mit dem SENSE am DRV8833 funktioniert bzw.
gemeint ist. Von
http://rn-wissen.de/wiki/index.php/Getriebemotoren_Ansteuerung#Messung_der_Stromaufnahme_des_gesteuerten_Motors
weiß ich, wie ich an einem Sense Ausgang den Strom messen würde.
Nun steht jedoch in der Docu des Treibers:
"The DRV8833 can actively limit the current through the motors by using
a fixed-frequency PWM current regulation (current chopping). By default,
this carrier board connects the current sense pins to ground, disabling
the current limiting feature. To enable current limiting, you can use a
knife to cut the break points on the back of the board and then solder
some appropriate current sense resistors to the unpopulated pads on the
front, as indicated in the image below. The pads are sized for 1206
surface-mount resistors. Refer to the DRV8833 datasheet for information
on how the resistor value determines the chopping current."
Im Anhang habe ich die Übersicht der Schaltung des Treiber angefügt.
Und hier die nullte Frage :
Was gebe ich eigentlich z.B. bei einem L293D mittels PWM vor? Eigentlich
ja nur (die digitale Version) einer variablen Spannung bzw. ein gnaz
schnelles An und Aus des Motors oder? Der Strom regibt sich ja dann aus
der Geschwindigkeit und Eigenschaften des Motors.
Die erste Frage :
Bedeutet das nun, dass ich durch den Shunt wiederstand dann festlege wie
hoch der maximale Motorstrom ist und mit dem PWM vom Arduino dann
vorgebe wie viel Prozent dieses eingestellten maximalen Stroms durch den
Motor gehen? Also ich tatsächlich einen Strom vorgeben kann?
Die zweite Frage :
Kann ich an diesen Sense Ausgang dann noch die Strommesschaltung mit OPV
anfügen ohne, dass es Auswikungen auf den Treiber hat?
Die dritte Frage :
Ist mein Ansatz überhaupt sinnvoll? Denn ich habe zwar theoretische
Grundkenntnisse aber die Praxis sieht ja nun noch etwas anders aus.
Vielen Dank schon einmal und Beste Grüße,
Christian
Noch eine vierte Frage :
Ich habe gelernt vor einer AD Wandlung stets einen analogen Tiefpass zu
schalten um Aliasing zu verhindern. Jedoch scheint das im Bereich der
Hobby Mechatronik nicht nötig zu sein oder?
Ich antworte mir mal selber, falls jemand ein ähnliches Problem hat.
Zur nullten Frage :
Die war ja eh fast überflüssig. Aber: Ja.
Zur ersten Frage :
Über den Shunt Wiederstand wird eine Strombergrenze festgelegt. Die
Formel für den benötigten Wiederstand steht im Datenblatt.
Und die Strombegrenzung funktioniert nun meines Wissens folgendermaßen:
Wenn der eingestellte maximale Strom erreicht wurde, wird die H-Brücke
kurzgeschlossen bis zum Beginn des nächsten PWM Zyklus.
Bleiben nur noch die Fragen zwei , drei und vier :
Kann ich an den Sense Ausgang eine Strommesschaltung mit OPV
anfügen ohne, dass es Auswikungen auf den Treiber hat?
Ist mein Ansatz überhaupt sinnvoll?
Braucht man immer einen analogen Tiefpass vor dem ADC?
Christian schrieb:> Wenn der eingestellte maximale Strom erreicht wurde, wird die H-Brücke> kurzgeschlossen bis zum Beginn des nächsten PWM Zyklus.
Wäre unschön. Beide Brücken arme schalten auf Ground. Damit läuft der
Motor frei und die Induktivität der Wicklung kann sich entladen -> Strom
sinkt.
Christian schrieb:> Kann ich an den Sense Ausgang eine Strommesschaltung mit OPV> anfügen ohne, dass es Auswikungen auf den Treiber hat?
Ja, Wenn die Schaltung die Spannung über dem Widerstand nicht weiter
beeinflusst. Da du aber einen OPV als Verstärker nehmen willst sollte
das passen. Du willst dir ja selbst auch nicht die Strommessung
verziehen.
Christian schrieb:> Braucht man immer einen analogen Tiefpass vor dem ADC?
Ja aber weniger wegen Antialising als wegen der PWM und den Störungen
die durch die getaktete Motorinduktivität entstehen. TP auf hälfte PWM
Frequenz ist schon mal nicht schlecht. Den musst du dann auch für den
Regelkreis beachten.
Und Strom kannst du nicht einstellen. Der stellt sich ein aufgrund der
Spannung die du im Mittel mit der PWM vorgibst. Der Motor ist n
RL-Tiefpass für den Strom.
Vielen Dank für die Antwort !
> Wäre unschön. Beide Brücken ...
Ok dann habe ich das Datenblatt falsch gelesen. Hat mich auch etwas
gewundert.
> Ja, Wenn die Schaltung die...
Super.
> Ja aber weniger wegen Antialising...
Ok, gut zu wissen. Und danke für die grobe Einstellregel.
Und jetzt ist mir eine andere Idee gekommen:
Ich habe mich gefragt, wie gut sich eine exakte Regelung tatsächlich mit
einer PWM (vorallem nur 8 Bit Auflösung im Arduino) umsetzen lässt.
Daher nun noch eine Frage :
Macht es vielleicht mehr Sinn das ganze über z.B. 12 Bit ADC und eine
analoge OPV Motoransteuerung zu machen?
Dazu würde ich dann die angehangene Schaltung verwenden.
Weil ich denke dieses ganze PWM und hin und her geschalte in den
H-Brücken sorgt nicht gerade für die beste Linearität und das beste
Systemverhalten.
Und wo liegen die Vorteile/Nachteile im Vergleich beider Varianten.
Ich habe mich jetzt mal registriert. Eigentlich um meinen Post zu
korriegieren. Das geht jedoch nicht also muss ich nochmal posten.
Ich schrieb:
> Macht es vielleicht mehr Sinn das ganze über z.B. 12 Bit ADC und eine> analoge OPV Motoransteuerung zu machen?
Ich meinte:
Macht es vielleicht mehr Sinn das ganze über z.B. 12 Bit DAC und eine
analoge OPV Motoransteuerung zu machen?
> Macht es vielleicht mehr Sinn das ganze über z.B. 12 Bit DAC und eine> analoge OPV Motoransteuerung zu machen?
Ist auf jedenfall besser als Arduino. Jedoch ist dann die
Geschwindigkeit der Positionsregelung fest, aber dafür maximal.
Wenn schon schon mit Arduiono Hardware, dann mit AVR Studio und ohne
Arduino Libs. Wenn du es mit DAC und OPV machst brauch der nutzer ja nur
noch einen DAC Wert einzustellen und das wars. Das kann man sich dann
auch ganz sparen, da lernt man ja dann doch nichts bei.
Ja genau, ich hatte eh vor Atmel Studio zu nutzen und nur die Arduino
Hardware.
> ...da lernt man ja dann doch nichts bei.
Nun ja, ich wollte ja trotzdem noch eine Strommessung und
Positionsmessung (mit Geschwindigkeitsschätzung) mit ran packen um am
Ende eine Lageregelung des Getriebemotors zu haben. Und dann in C++ über
Atmel Studio die Regelung digital im Arduino umsetzen. Da könnte man
dann ja durchaus lernen wie man eine Regelung und Kalmann Filter auf
einem Microcontroller umsetzt. Oder stehe ich gerade auf dem Schlauch?
Christian B. schrieb:> Nun ja, ich wollte ja trotzdem noch eine Strommessung und> Positionsmessung (mit Geschwindigkeitsschätzung) mit ran packen um am> Ende eine Lageregelung des Getriebemotors zu haben. Und dann in C++ über> Atmel Studio die Regelung digital im Arduino umsetzen. Da könnte man> dann ja durchaus lernen wie man eine Regelung und Kalmann Filter auf> einem Microcontroller umsetzt. Oder stehe ich gerade auf dem Schlauch?
Erstmal ist ein ATMega8 schnell genug um mit 10Bit PWM einen BLDC zu
steuern. Also geht die Gleichstommaschine mit Zeitkonstanten im ms
Bereich Locker. Da müssen sich die Studenten mal ne platte machen
schadet nicht. Eingestellte PWM und IO Register kann man ja als template
liefern. Und wenn die Copter Jungs n 6 State Kalman mit 500Hz rechnen
können auf der HW sollte n Filter mit 3 Zuständen auch möglich sein.
Da lernen die Studenten gleich wie es ist wenn man sich genau überlegen
muss womit man seine resource Rechenzeit verplempert.
Ich wage sogar zu behaupten Selbst Matlab mit der Anbindung von Arduino
erreicht mit dem Embedded Coder ausreichende Performance um den Antrieb
zu regeln. Kommt ganz auf deine Anforderungen an die Dynamik an.
Zum Thema Studenten und Lernen:
Ich bin selber Student (Physikalische Ingenieurwissenschaften) und die
Studenten, welche mit dem entwickelten Roboter arbeiten werden, werden
Maschinenbauer sein. Die Auslegung der Regelung wird außerdem nur eine
von mehreren Übungen sein. Aus diesen beiden Gründen möchte ich es nicht
extrem Aufwändig gestallten.
Tec Nologic schrieb:> Erstmal ist ein ATMega8 schnell genug um mit 10Bit PWM einen BLDC zu> steuern.
Also bist du eher für die Variante mit PWM und Mosfet Motortreiber?
Gibt es einen entscheidenden Vorteil gegenüber analoger OPV Ansteuerung?
Und dass das für Drehzahl bzw. Lageregelung gilt kann ich mir gut
vorstellen. Gilt das allerdings auch für die Stromregelung bzw. ist die
Strom-Zeitkonstante mit den 20ms gemeint oder die mechanische?
Außerdem habe ich am Arduino doch nur 8 Bit PWM oder? Und der Atmega8
hat 10 Bit?
Tec Nologic schrieb:> Und wenn die Copter Jungs n 6 State Kalman ...
Wer sind die "Copter Jungs" und was ist "HW" ?
Tec Nologic schrieb:> Ich wage sogar zu behaupten Selbst Matlab mit ...
Ja damit könnte man dann eine noch einfachere Software Schnittstelle
anbieten.
Ich tendiere nur zu DAC+OPV Schaltung, da sie dem was ich gelernt habe
irgendwie näher kommt. Also z.b. in CNC-Maschinen-Servos wird das doch
bestimmt auch nicht über PWM gemacht oder?
Christian B. schrieb:> Also bist du eher für die Variante mit PWM und Mosfet Motortreiber?> Gibt es einen entscheidenden Vorteil gegenüber analoger OPV Ansteuerung?
Ja, Die Regelung ist reine Software du musst die Schaltung nicht
anpassen.
Christian B. schrieb:> Und dass das für Drehzahl bzw. Lageregelung gilt kann ich mir gut> vorstellen. Gilt das allerdings auch für die Stromregelung bzw. ist die> Strom-Zeitkonstante mit den 20ms gemeint oder die mechanische?
Die elektrische Zeitkonstante liegt bei 1-5ms oder so. Bei 10kHz PWM
kann der Regler jedes zweite mal laufen macht ja nur PI dauert ja nix.
Drehzahl und Lageregelung dann mit 100Hz -1kHz fertig.
> Außerdem habe ich am Arduino doch nur 8 Bit PWM oder? Und der Atmega8> hat 10 Bit?
Die ATmega8 oder auch ein anderes Derivat können sogar bis 16Bit zählen
nur reicht der Takt nicht. Und selbst wenn 8Bit reichen für ne DC
Stromregelung aus. Das soll doch kein hochpräzises Industrieservo
werden. Das glättet der Motor ja auch noch mal.
Christian B. schrieb:> Wer sind die "Copter Jungs" und was ist "HW" ?
ArduCopter oder wie das Ding heißt meine ich. Und HW = HardWare.
Christian B. schrieb:> Ja damit könnte man dann eine noch einfachere Software Schnittstelle> anbieten.
Genau sieh dir das an, da kann man das Programm malen. Dann kann man
sich mehr mit dem Problem beschäftigen als mit dem Programmieren was für
Mechaniker ein nicht ganz unwesentliches Problem sein könnte.
Christian B. schrieb:> Ich tendiere nur zu DAC+OPV Schaltung, da sie dem was ich gelernt habe> irgendwie näher kommt. Also z.b. in CNC-Maschinen-Servos wird das doch> bestimmt auch nicht über PWM gemacht oder?
Das ist sarkastisch gemeint oder? Wenn das jemand in ner Aktuellen
Werkzeugmaschine machen will denn würde ich schlagen mit seiner
OPV-Schaltung dann tuts mehr weh. Weil die mehrere Tonnen wiegen würde
um die Leistung dadurch zu bekommen.
Mal im ernst. Jeder Umrichter im Industriebereich, selbst das Spielzeug
vom Chinamann um die Ecke macht das mit PWM. Ein Motor ist eine
Induktivelast die den Strom gleich halten will. Und der Strom bildet das
Drehmoment. Folglich mit PWM alles in Butter und wesendlich weniger
Verlustleistung -> Weniger Kupfer -> Weniger Kühlkörper usw.
Unterm Strich ist das viel billiger ohne irgend einen Nachteil gegen
über einer reinen linaren Lösung.
Tec Nologic schrieb:> Das ist sarkastisch gemeint oder?
Nein war es nicht. Aber gut, dass in meinem Studium nie die rede davon
war, dass industrielle Servos mit PWM angesteuert werden. Ich habe PWM
gerade für etwas gehalten, was nur bei geringer Anforderung an Dynamik
und Exaktheit eingesetzt wird (wie z.B. China Spielzeug).
@ Tec Nologic (tecnologic):
Was sagst du zu dem Beitrag von Uwe, der für die OPV Variante war:
uwe schrieb:> Ist auf jedenfall besser als Arduino. Jedoch ist dann die> Geschwindigkeit der Positionsregelung fest, aber dafür maximal.> Wenn schon schon mit Arduiono Hardware, dann mit AVR Studio und ohne
Also gut, dann ist mein Setup soweit klar und bleibt bei den im ersten
Post angegebenen Komponenten.
Noch zur Strommessung:
Hat jemand eine gute Idee wie ich die Strommessung mit dem OPV
ordentlich an die Platine bekomme (siehe Anhang)? Bzw. muss ich etwas
beachten, wenn ich das einfach auf so einer Prototyping Platine
zusammenlöte? Damit meine Ich Leitungswiederstand, -kapazität pder -
induktivität, was mir die Messung versauen würde?
Und vielen Dank schon Tec Nologic (tecnologic) für die Hilfe!
Quelle des Anhangs: https://www.pololu.com/product/2130
Christian B. schrieb:> Nein war es nicht. Aber gut, dass in meinem Studium nie die rede davon> war, dass industrielle Servos mit PWM angesteuert werden. Ich habe PWM> gerade für etwas gehalten, was nur bei geringer Anforderung an Dynamik> und Exaktheit eingesetzt wird (wie z.B. China Spielzeug).
Naja, der übliche Feld, Wald und Wiesen Umrichter für eine synchrones
Servomaschine. Arbeitet mit 8kHz weil die Verluste die durch das
Schalten der Leistung bei höherer Frequenz schon zu hoch werden. Und
denn noch können die ne Maschine in Postionsregelung fahren deren
mechanische Zeitkonstate in der Größenordnung der elektrischen liegt.
Christian B. schrieb:> @ Tec Nologic (tecnologic):> Was sagst du zu dem Beitrag von Uwe, der für die OPV Variante war:
Ich habe "uwe" jetzt nicht so verstanden. Anders gefragt wie stellst du
dir das Vor? Motor am Ausgang des OPV? Das ist selbst bei deinen
winzigen 2A Spitzenstrom ein riesen OPV und der wird richtig heiß.
Christian B. schrieb:> Hat jemand eine gute Idee wie ich die Strommessung mit dem OPV> ordentlich an die Platine bekomme (siehe Anhang)? Bzw. muss ich etwas> beachten, wenn ich das einfach auf so einer Prototyping Platine> zusammenlöte? Damit meine Ich Leitungswiederstand, -kapazität pder -> induktivität, was mir die Messung versauen würde?
Sieh dir bitte Schaltungen zur Lowside Strommessung mit einem
Instrumentenverstärker bei Linear oder anderen Firmen an.
An sonsten achte darauf das die Kabel zwischen deinem OPV zum verstärken
der Strommessung und den Shunts(die Strommesswiderstände)
möglichst kurze Leitungen führen oder diese zumindest geschirmt sind.
Dann sollte das für deine Anwendung schon passen.
Tec Nologic schrieb:> Anders gefragt wie stellst du> dir das Vor? Motor am Ausgang des OPV?
Ja genau so. Im Datenblatt des TCA 0372 DP1 (bis zu 1A) ist sogar eine
Schaltung dafür abgebildet.
Siehe Post:
Autor: Christian (Gast)
Datum: 02.04.2015 13:13
Und als Vin hätte ich den Ausgang des DAC genommen.
Mit 2A habe ich diesen hier gefunden:
http://www.ti.com/lit/ds/symlink/opa569.pdf wobei ich nicht weiß was
"has rail-to-rail swing on the
input and output. Typical output swing is within 150mV of the
supply rails, with output current of 2A" bedeuten soll.
Zu dem Rest: Wieder vielen Dank für die nützlichen Infos!
Christian B. schrieb:> "has rail-to-rail swing on the> input and output. Typical output swing is within 150mV of the> supply rails, with output current of 2A" bedeuten soll
Unter Rail-to-Rail versteht man das der OP am Ausgang seinen kompletten
Versorgungsspannungsbereich abdecken kann. Schwingend kann der OP das
aber nicht Konstant. ergo kommen bei 0V Eingang 0.15V am Ausgang raus.
Bei 100mOhm Innenwiderstand des Motors dreht der damit schon los.
Machs mit der PWM. Wie jeder andere auch.