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
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.
Nur Formalität: Quelle des Bildes im Anhang: https://cdn-reichelt.de/documents/datenblatt/A200/TCA0372%23MOT.pdf
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.
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.