Forum: Mikrocontroller und Digitale Elektronik Getriebemotor Servo, Stromregelung, Current Chopping, DRV8833


von Christian (Gast)


Angehängte Dateien:

Lesenswert?

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.pdf

Das 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

von Christian (Gast)


Lesenswert?

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?

von Christian (Gast)


Lesenswert?

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?

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

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.

von Christian (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Christian (Gast)


Lesenswert?

Nur Formalität:
Quelle des Bildes im Anhang:
https://cdn-reichelt.de/documents/datenblatt/A200/TCA0372%23MOT.pdf

von Christian B. (christ_ian)


Lesenswert?

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?

von uwe (Gast)


Lesenswert?

> 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.

von Christian B. (christ_ian)


Lesenswert?

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?

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

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.

von Christian B. (christ_ian)


Lesenswert?

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?

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

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.

von Christian B. (christ_ian)


Angehängte Dateien:

Lesenswert?

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

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

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.

von Christian B. (christ_ian)


Lesenswert?

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!

von Alex E. (tecnologic) Benutzerseite


Lesenswert?

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.

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
Noch kein Account? Hier anmelden.