ich kenne mich im Microcontrolling (noch) leider gar nicht aus und hoffe, keinen totalen Quatsch zu fragen:
ich möchte einen Motor nutzen um einen Greifarm millimetergenau auf Knopfdruck oder in voreingestellten Zeitintervallen vor- und zurück zu bewegen. Dabei sollte die Bewegungszeit möglichst kurz sein und die Bewegungsposition möglichst exakt! Das Gewicht des Greifarms ist etwa 10g also sehr gering.
Kann ich das mit folgendem Setup realisieren oder würdet ihr mir andere Produkte empfehlen. Speziell beim Servo würde ich mich über eine Empfehlung freuen. Wie gesagt er sollte klein/schnell/genau sein - und darf ruhig etwas kosten also gerne ein Premiumprodukt
Arduino UNO Platine 65139
Arduino Motor Shield R3 65189
Modelcraft (WG90MG) Mini-Servo WG-90MG
da Du mehrmals die gewünschte Genauigkeit betonst habe ich so meine Zweifel, dass das mit einem Servo machbar ist. Ich kenne zwar das spezielle von Dir angesprochene Servo nicht aus eigener Erfahrung, aber die Servos die ich benutze (Graupner) wären nicht "supergenau". Wenn es wirklich auf den Millimeter ankommt, musst Du wahrscheinlich über einen Schrittmotor nachdenken.
Schrittmotoren wurden schon genannt. Aber bei "möglichst exakt" und "Premiumprodukt" fallen mir in der Größenklasse auch noch DC-Motoren mit Encoder, Getriebe und Positioniersteuerung ein
Gute Servos können das schon-im Prinzip.
Es gibt da aber nen weiteres Problem, auf das noch nicht eingegangen wurde: von welchem Hebelarm reden wir?
DER ist hier das Mass der Dinge, da ein viertel Grad Servoungenauigkeit (richtig gute können es noch besser) je nach Hebelarm weniger als 1mm, aber auch 15mm sein kann.
Auch die Kraft nimmt mit der Länge des Armes natürlich ab.
Die gute Nachricht: nen Motorshield ist dazu unnötig- das Steuersignal fürs Servo kann direkt vom Arduino geholt werden und die Stromversorgung muss eh extra.
Im Roboterbereich fangen "brauchbare" Servos so ab 35€ an, alles andere ist (meist, kommt ja auch drauf an, ob man es so präzise überhaupt braucht) eher Gerümpel.
Bei nem 3cm-Hebel schaffts allerdings auch ein Billigservo.
vielen Dank für den wertvollen Input. Habe mich jetzt für einen Schrittmotor entschieden! Denke damit fahre ich am besten - gerade auch im Hinblick auf Positionstreue.
Es wäre toll wenn sich die Experten nochmal mein Setup anschauen könnten ob das Sinn macht und ob ich mir das so kaufen sollte:
kann ich mit dem BigEasy Board auch kleine 5V Motoren betreiben? Oder brauche ich dafür das kleine EasyDriver Board (gleicher Hersteller). Würde sonst halt das größere nehmen falls ich irgendwann auf einen stärkeren Motor umsteigen möchte.
Ist der Motor für meinen Zweck geeignet? Minimale Last (max 50g) exakt positionieren; Hebelarm 10 cm; Zeitraum unter 1 Sek? Falls nicht wäre ich über ganz konkrete Produktempfehlungen sehr dankbar. Brauche ich vielleicht einen stärkeren Motor?
Kann ich in meinem sketch später den zeitlichen delay durch einen Taster-Befehl tauschen? Also ich möchte, dass die Hin- bzw. Rückbewegung nicht nach der Zeit x abläuft sondern nach einem Knopfdruck die Hinbewegung, nach einem zweiten Knopfdruck die Rückbewegung, nach einem dritten Knopfdruck wieder ein Hinbewegung usw. Ist das machbar?
Passt der R3 Arduino Motor shield eigentlich auch auf das Arduino UNO Board?
Danke schön
Carmen
/*Titel: Kapitel 3.4.2: Der Schrittmotor
Teil 1 EasyDriver & BigEasyDriver
Autor: Julian Steffen
Datum: 7.09.2012*/
int pinDir = 11;
int pinStep = 12;
//Ergänzung !!
//Big Easy Driver
// 16 Mikroschritte
// also Schrittwinkel 1,8 = (200 Schritte)
//200 * 16 = 3200 Schritte für eine volle Umdrehung
//Easy Driver
// 8 Mikroschritte
// also 200* 8 = 1600 Schritte für eine volle Umdrehung
void setup()
{
pinMode(pinDir, OUTPUT);
pinMode(pinStep, OUTPUT);
}
void loop()
{
drehen(500,200);
delay(1000);
drehen(-500,200);
delay(1000);
}
void drehen(int schritte, int tempo)
{
if(schritte > 0)
digitalWrite(pinDir,HIGH);
else
digitalWrite(pinDir,LOW);
schritte = abs(schritte);
for(int i=0; i < schritte; i++)
{
digitalWrite(pinStep, HIGH);
delayMicroseconds(tempo);
digitalWrite(pinStep, LOW);
delayMicroseconds(tempo);
}
}
Teil 2: Motorshield & Stepper Library
/*Titel: Kapitel 3.4.2: Der Schrittmotor
Teil 2 Motorshield und Stepper Library
Autor: Julian Steffen
Datum: 7.09.2012*/
#include <Stepper.h>
int pinPWM_A = 3;
int pinPWM_B = 11;
int pinDir_A = 12;
int pinDir_B = 13;
// 360 / Schrittwinkel
int schritte_def = 48;
Stepper motor(schritte_def, pinDir_A, pinDir_B);
void setup()
{
motor.setSpeed(50);
digitalWrite(pinPWM_A,HIGH);
digitalWrite(pinPWM_B,HIGH);
}
void loop()
{
motor.step(48);
delay(1000);
motor.step(-48);
delay(1000);
}
Der BIGEASY Driver hat einen A4988 Treiberchip. der den Motor miStrom Steuert. Damit die Stromsteuerung gut funktioniert braucht es eine viel höhere Spannung. Würde für den genannten Motor etwas zwischen 18V und 24V wählen. Du mußt den Strom auf dem Treiber einstellen.
Die Positionsgeschwindigkeit hängt vom Weg, der zurückgelegt werden muß, ab, aber ich glaube Du wirst Probleme bekommen weil Du Massen beschleunigen und abbremsen mußt.
den Sketch kannst Du jederzeit verändern wie Du willst.
4)Paßt drauf, weiß dann nicht was Du mit dem Motorshield machen willst.
gibt deine Aussage nur für den speziellen BigEasy Treiber oder sollte man diesen Motor generell bei 18 - 24 V betreiben? ich meine die ausgewiesene Betriebsspannung lautet ja 4,5 V da finde ich das schon etwas verwirrend. Wie sähe es mit dem EasyDriver 4.4 aus? Welche Voltzahl würdest du mir für den oben genannten Motor empfehlen wenn ich diesen Treiber nutzen würde?
Kenne mich nicht aus aber ich hoffe einfach mal nicht da ich nur eine minimale Masse zu bewegen habe (an einem Greifarm geführt von Führungsschienen).
Danke für die info
ad 4) Das Arduino Motor Shield ist einfach als alternativer Treiber gedacht und auch um etwas rumprobieren zu können /flexibel zu sein. Schön zu hören, dass das passt - danke!
Noch eine neue Frage: Mir ist aufgefallen, dass ich für hohe Positionstreue eine Art "Ausgangsstellung/Grundzustand" brauche. zB falls der Strom mal ausfällt oder so. Also einfach einen Zustand, der bei Initiierung zuerst erreicht wird (Ausgangsstellung) und von der ausgehend der Motor dann auf Knopfdruck oder nach definiertem delay eine definierte Schrittzahl in eine bestimmte Richtung drehen soll. Ist das realisierbar? Gibt es Beispiele für solch eine Steuerung? Hat das jemand schonmal gemacht?
zu 1
Die 4,5V ist die Nennspannung des Motors. wenn Du den Motor mit Spannung steuerst dann mußt Du ihm diese Spannung geben. Der A4988 auf dem Big Easy Driver ist aber ein Stromtreiber. Er gibt dem Motor einen konstanten Strom der dem Nennstrom entsprechen sollte ( wenn der Motor dase größte mögliche Drehmoment im Dauerbetrieb erreichen soll) . Da der Motor aber eine Induktanz ist die den Stom bei angelegter Spannung langsam ansteigen läßt und das Drehmoment des Motors proportional zum Strom ist will man den strom schneller ansteigen lassan. Dies erricht man indem man den Motor mit einer höheren Spannung ansteuert. wenn der Nennstrom erreicht ist regelt der Motortreiber automatisch die Spannung runter und der Motor wird nicht überlastet.
Die 18-24V braucht es für diesen Motor mit allen Stromtreibern.
Das Motorshield ist kein Stromtreiber sondern ein Spannungstreiber und hat eine Zusatzlogik die Für die Ansteuerung von 2 Gleichstrommotoren ausgelegt ist. Ein schrittmotor kann nur über umwege angesteuert werden. Der Motor müßte mit ca 6V angesteuert werden ( 4,5V für den Motor und ca 1,5V Spannungsabfall am Treiberbaustein).
"(an einem Greifarm geführt von Führungsschienen)."
Da sehe ich Probleme. Du hast ganz schön viel Masse die Du beschleunigen mußt.
Der Schrittmotor hat keine definierte Anfangsposition. Die mußt Du erst erzeugen indem Du einen Sensor ( Lichtschranke, Endschalter, Magnetsensor und Magnet, Reedkontakt und Magnet) verwendest um eine bestimmte Position zu erkennen, oder langsam eine Endanschlag anfährst. So erhälst Du eine Position von der aus dann relativ die anderen Positionen angefahren werden.
Carmen83:
Noch eine neue Frage: Mir ist aufgefallen, dass ich für hohe Positionstreue eine Art "Ausgangsstellung/Grundzustand" brauche. zB falls der Strom mal ausfällt oder so. Also einfach einen Zustand, der bei Initiierung zuerst erreicht wird (Ausgangsstellung) und von der ausgehend der Motor dann auf Knopfdruck oder nach definiertem delay eine definierte Schrittzahl in eine bestimmte Richtung drehen soll.
Dafür brauchst du einen Endschalter/Referenzschalter. Sowas:
Dann lässt man den Motor am Anfang erst mal in den Endschalter fahren und weiß dann genau wo man ist
Wie gesagt sind auch Lichtschranken oder Reedkontakte möglich um kontaktlos zu schalten. Aber die Endschalter mit diesen Hebeln lösen sehr leicht aus.
Bei einem Arm sehe ich auch etwas Probleme. Schrittmotoren sind meistens nicht so gut was das Drehmoment betrifft. An der Achse selbst ist natürlich Kraft vorhanden, aber die nimmt dann sehr schnell ab wenn man da was dranhängt.