Pages: [1]   Go Down
Author Topic: (Motor)Positionen erlernen  (Read 707 times)
0 Members and 1 Guest are viewing this topic.
Germany
Offline Offline
Full Member
***
Karma: 2
Posts: 171
... has much to learn
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo!
Ist wieder mal eine etwas allgemeinere Frage, tut mir Leid.

Wie wird das gemacht, dass Motoren die Positionen die sie anfahren sollen, "lernen".

Wenn mich nicht alles täuscht, dann wird das bei manchen Robotern gemacht. Die werden in den "Lernmodus" versetzt, dann bewegt jemand den Arm zu den entsprechenden Positionen und dabei "lernt" der Controller wie er zur Endposition fahren soll.

Ist so etwas aufwändig zu realisieren oder geht das sogar mit den Bordmitteln eines Arduino bzw. eines Servomotors?

Besten Dank und Gruß!
Logged

Beste Grüße
Florian

http://www.flomei.de

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 234
Posts: 20195
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Du speicherst für jede Position in einer Variablen oder im EEprom einen Referenzwert.
Beispiel (Zahlen sind zufällig und für einen Servo über PWM gesteuert)
Motor1: 0 Grad = PWM 23
Motor1: 180Grad = PWM 230
Motor2: 0 Grad = PWM 18
Motor2: 180Grad = PWM 199

Daraus kannst Du dan für jeden Winkel die Ansteuerung ausrechnen, unabhängig von den Tolleranzen und Ungenauigkeit der Mechanik und Elektronik.

Oder Du machst eine Tabelle mit den Ansteuerungswerten für jede der Positionen die der Motor einnimmt.
Motor1 Position1 = PWM 40
Motor1 Position2 = PWM 67
Motor1 Position3 = PWM 123
Motor1 Position4 = PWM 160
Motor1 Position5 = PWM 200
ecc

Das gleiche gilt für Schrittmotore oder Gleichstrommotore mit Encoder; da arbeitest Du halt mit Schritten.
Grüße Uwe
    
« Last Edit: May 02, 2011, 09:46:35 am by uwefed » Logged

Germany
Offline Offline
Edison Member
*
Karma: 44
Posts: 2261
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Um es ganz allgemein zu halten: Man definiert für jedes Stellglied, egal ob Motor, Schrittmotor oder Servo, eine Grundposition. Eine Endposition soll programmiert werden, folglich muss irgendwo reproduzierbar abgelegt werden, wo sich diese Position befindet und wie sie agefahren werden muss.
Für einen Servo ist das recht trivial, dem übermittelt man ja direkt die Anfahrposition. Bei Schrittmotoren definiert man im einfachsten Fall eine bestimmte Anzahl von Schritten. Hierbei muss man natürlich beachten, dass bei hohen Schrittverluste auftreten können, die es durch geeignete Maßnahmen auszuschalten gilt. Das könnte man wie bei "normalen" Elektromotoren machen, indem man die Umdrehungen der Motor- bzw. einer Getriebeachse misst. Das geht beispielsweise kontaktlos mit Lichtschranken oder Hallsensoren.
Um diese "Lernphase" zu programmieren, die anzufahrende Position also unabhängig von einer neuen Programmierung zu machen, müssen im Quelltext zwei Modi erstellt werden: ein normaler Betriebsmodus und ein Lernmodus. Wird dieser ausgeführt, muss die abstrakte Positionsvariable (Anzahl Schritte, Winkel beim Servo etc.) in einem nichtflüchtigen Speicher abgelegt werden. Hier bietet sich das interne oder ein externes EEPROM an. Auch kann man hier ablegen, wie diese Position angefahren werden soll, beispielsweise mit Zeitangaben oder über Rampen.
Bei mehreren zeitgleichen Bewegungen wird das ganze natürlich ungleich komplexer.
« Last Edit: May 02, 2011, 09:58:15 am by sth77 » Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Deutschland, Ruhrpott
Offline Offline
Jr. Member
**
Karma: 1
Posts: 78
Arduino rocks Amiga rocks RC Truck rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,

wenn das ganze Professionell gemacht werden soll kann ich nur eine Lösung mit einem INKREMENTALGEBER empfehlen. Zur Erläuterung habe ich diesen Link gefunden. http://www.cncplayer.com/forum/quadratur-inkremental-encoder-mit-firmware-im-arduino-t7.html
Logged

Gruesse
big-maec

Gurkengraeber
Guest
 Bigger Bigger  Smaller Smaller  Reset Reset

.. und den Inkrementalgeber mit dem Motor koppeln. ( Input benötigt Output = 2 Werte  -> die wiederum verarbeitet werden müssen )

Man könnte aber auch Schrittmotoren ( wie in Disketten-Laufwerken ) dazu nötigen, eine bestimmte Umdrehung zu machen. ( Input sagt, was Output zu machen hat = 1 Wert )
Und der Geber weiß, wo der Motor steht.

MfG
Logged

Pages: [1]   Go Up
Jump to: