Pages: [1]   Go Down
Author Topic: Hilfe, mein Roboterarm hat Pakinson  (Read 764 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 3
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,

ich steuer die DC-Motoren von meinem Roboterarm mit dem Arduino über einen LM317 an. An den Motoren sind Potis, die die Stellung des Arms feststellen können. Über meinen PC gebe ich dann eine Stellung vor. Die Motoren drehen dann solange, bis sie diese Stellung erreicht haben. Dabei fragt das Arduino immer die Stellung des Potis ab. Um die Stellung zu halten, habe ich das Arduino so programmiert, dass es immer eine Spannung auf den Motor gibt, wenn dieser von der vorgegeben Stellung abweicht. Der Motor hält zwar dann ungefähr diese Stellung aber leider führt dass dazu, dass er extrem zittert, da er ja ständig die vorgegebene Stellung verlässt.

Hat jemand eine Idee, wie man dieses Problem beheben kann?

Logged

Weinsberg, Germany
Offline Offline
God Member
*****
Karma: 3
Posts: 773
A Coder's Tale
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Zuallererst würd ich mal gucken, warum er zittert.

Ist es, weil die Mechanik schwingt? Oder hat die Spannung, die von den Potis kommt, Störspitzen? Oder ist die A/D-Verarbeitung im Arduino nicht sauber?

Wenn dann alle drei Größen auf ein Minimum reduziert sind und es immer noch zittert, dann würd ich mal schauen, ob ich mit Grenzwerten arbeiten kann. So in der Art von "bei x aufhören zu Drehen, und wenn ich bei x+2 bin, dann zurückdrehen, aber nicht vorher". Quasi ein "Fenster" aufmachen: Wenn man innerhalb des Fensters ist dann kann der Arm so stehen bleiben.

Geht aber natürlich nur innerhalb der geforderten Toleranz...
« Last Edit: March 24, 2010, 08:03:29 am by Joghurt » Logged

CH
Offline Offline
God Member
*****
Karma: 19
Posts: 704
Book Writer "Arduino Praxiseinstieg"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Dein Arduino versucht die vorgebene Position zu regeln. Sobald eine Abweichung vorhanden ist, wird mittels Steuersignal der Motor aktiviert um die Position zu korrigieren. Das ist Regelungstechnik in der Praxis.

Ich würde auch mittels Toleranzfenster die Regelung zu stabilisieren. Eventuell kannst du in der Hauptschlaufe eine Verzögerung einbauen und so die Unruhe zu vermindern.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 4
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das wichtigste wurde ja schon geschrieben. Der Arduino versucht zu regeln. Ich vermute einfach mal eine mechanische 'Fehlkonstruktion' im Arm, d.h., er hält die Stellung einfach nicht von alleine. Sonst würdest du auch den Motor nicht weiterregeln lassen, wenn die geforderte Position erreicht ist. Jetzt hast du zwei Möglichkeiten, dass ganze auszugleichen. Einmal das 'Fenster', eine s.g. Hysterese. Was dann passiert ist aber folgendes: Die Stellung wird erreicht, der Motor stoppt. Der Arm entwickelt sofort eine Eigendynamik und ändert die Stellung, fällt auch nach kurzer Zeit aus dem Fenster heraus und hüpft mit einem Satz wieder auf die geforerte Stellung. Das Spiel wiederholt sich. Also nicht so ganz die tricky Lösung vermute ich.
Zweite Möglichkeit wäre, dem Arduino eine Regelung zu ermöglichen. Mir ist da eine PID-Library aufgefallen, die sollte funktionieren. Dann lässt der Arduino den Arm aus seiner Stellung gleiten, fängt ihn sanft ab, bevor er das Fenster verlässt und bringt ihn sanft wieder in die Ausgangsposition.

Alternativen wären dann noch Motoren mit Bremse, Zahnräder zur Stabilisierung, oder, falls das Problem vom POTI-Signal und nicht vom Motor herrührt, ein Inkrementalgeber. Aber vorher würd ichs mit der PID-Library versuchen. Irgendwann muss ich mir die auch mal vornehmen.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 3
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Danke für die Antworten. Ich hab das Problem jetzt relativ gut in den Griff bekommen. Das Programm funktioniert jetzt so, dass die Motoren stärker gegensteuern, wenn der Arm weiter nach unten sinkt. Dadurch ist er schon relativ ruhig. Aber ganz werde ich das Zittern auch nicht wegkriegen, weil der Poti nicht sehr hoch "aufgelöst" ist.
Logged

CH
Offline Offline
God Member
*****
Karma: 19
Posts: 704
Book Writer "Arduino Praxiseinstieg"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Den erwähnte Library für einen PID-Regler gibts hier:

http://code.google.com/p/arduino-pid-library/

http://www.arduino.cc/playground/Code/PIDLibrary
Logged

AREA COLOGNE
Offline Offline
Edison Member
*
Karma: 21
Posts: 1141
I am 1 of 10 who understands binary
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das Problem könnte auch noch ein anders sein uns zwar wäre es wahrscheinlich mit einem Filter vorteilhafter das man die akutellen gelesenen Werten etwas "niedriger" bewertet damit auch eventuelle Fehlerwerte oder große Sprünge nicht sofort zu 100% auf die regelung "durchschlagen". Wir machen das bei Analogwerten in der SPS genauso ich habe das auch in einem meiner Programme genutzt sieher hier:
Code:
int get_LD(){                                // Funktion Einlesen Ladedruck
  int LDY;
  int LDX;
  int LDact;
  int LDdis;
  LDact=analogRead(LDin);                    // Einlesen des Ladedruckistwertes
  LDX=LDact*0.1;              // Filter neue Lesewert einfluß ca 10% pro Zyklus
  LDY=LDlast*0.9;             // Filter alter Wert hat einen einfluss von 90%
  LDdis=LDX+LDY;             // Alter + neuer wert ist gefilterter neuer wert
  LDlast=LDdis;                 // "neuer wert ist dann der alte wert für die nächste Runde
  return LDdis;
!!!! Achtung der LDlast ist global deklaiert !!!!

Bei diesem Filter "dauert" es ca 18-20 Zyklen (Waren bei mit ca 10ms) bis der neue gelesene wert 99,99999% Integriert ist. passt du jetzt die multiplikatoren noch an, also den neuen gelesenen Wert etwas höher "bewerten"  dann sind es weniger Zyklen also die integration ist schneller bis du zu einem Schönen ergebniss kommst. Wichtig die Summe beider Multiplikationsfaktoren muss 1 Sein also 100%.  
« Last Edit: March 25, 2010, 04:28:27 pm by volvodani » Logged

So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

Pages: [1]   Go Up
Jump to: