ok, also radabstand (mitte-mitte) zu achslänge (mitte reifen) ist 270/330. Die achslänge wird ja auch durch die adapter zwischen rad und Schrittmotor mit-bestimmt, die lassen sich im notfall auch noch etwas länger drucken...
- - - Aktualisiert - - -
Werbung
ok, also radabstand (mitte-mitte) zu achslänge (mitte reifen) ist 270/330. Die achslänge wird ja auch durch die adapter zwischen rad und Schrittmotor mit-bestimmt, die lassen sich im notfall auch noch etwas länger drucken...
- - - Aktualisiert - - -
Geändert von inka (21.10.2019 um 17:43 Uhr)
gruß inka
Die Batterie beschäftigt mich etwas. Der Spitzenstrom ist i.O.. Aber wenn Dauerstrom max. 5A sind, dann kann man die Leistung für die Motoren wohl nicht ausnutzen. Die brauchen ca. 1.5 bis 1.7A pro Motor, bei voller Leistung. Hier könnte man 2 Packs verbauen, falls es nicht ausreicht. Zunächst kann man aber über die Treiber den Strom auf 1A pro Motor drosseln. Muss man dann schauen, wie es um die Kraft bestellt ist. Evtl. an die Kühlkörper für die Treiber denken (z.B.: https://www.amazon.de/gp/product/B07...?ie=UTF8&psc=1)
Es gibt auch noch andere Treiber, die mehr Leistung zur Verfügung stellen (8825): https://www.amazon.de/AZDelivery-DRV...al&sr=1-7&th=1
MfG
Geändert von Moppi (21.10.2019 um 20:04 Uhr)
die anderen treiber haben die gleichen abmessungen und die gleichen anschlüsse, wie mir scheint. Also auch zum späteren zeitpunkt einsetzbar, denke ich. Aber danke für die ausführungen![]()
Ein zweiter akku hätte natürlich auch platz im gehäuse...
Was mich aber im moment beschäftigt sind die Stepper und treiber ( A4988 ) und deren behandlung im sketch:
den ersten code habe ich mit der accelstepper lib geschrieben, komme damit aber nicht so gut zurecht
Vorher verwendete ich die customstepper lib, allerdings mit dem stepper_28BYJ_48 und ULN2003 treiber. Geht die customstepper auch mit den NEMA17 Schrittmotoren und den A4988 treibern? Da gibt es ja nur die pinns "step" und "dir". Wie mache ich das? Zum beispiel die richtungsangabe (CW / CCW). Da finde ich den zugang dazu irgendwie nichtCode:// https://www.makerguides.com/a4988-st...uino-tutorial/ /*Example sketch to control a Stepper motor with A4988 Stepper motor driver, AccelStepper library and Arduino: acceleration and deceleration. More info: https://www.makerguides.com */ // Include the AccelStepper library: #include <AccelStepper.h> uint8_t idx; enum stepper_e { stepper_VL, stepper_HL, stepper_VR, stepper_HR, stepper_MAX }; AccelStepper stepper[stepper_MAX] { AccelStepper(1, 2, 3), AccelStepper(1, 4, 5), AccelStepper(1, 6, 7), AccelStepper(1, 8, 9) }; void setup() { Serial.begin(115200); Serial.println("code---- /home/georg/Arduino/outdoor_robo/stepper/test_vier_stepper/vier_stepper_acceleration_and_decceleration_1"); for (idx = stepper_VL; idx < stepper_MAX; idx++) { stepper[idx].setMaxSpeed(400); stepper[idx].setAcceleration(30); // stepper[idx].setDirection(CCW); // stepper[idx].rotate(1); } } void loop() { vorwaerts(); delay(1000); rueckwaerts(); delay(1000); } void vorwaerts(void) { // rotate_li = true; for (idx = stepper_VL; idx < stepper_MAX; idx++) { stepper[idx].moveTo(600); stepper[idx].runToPosition(); stepper[idx].setSpeed(300); // stepper[idx].rotate(1); } /* for (idx = stepper_VR; idx < stepper_MAX; idx++) { stepper[idx].moveTo(600); stepper[idx].runToPosition(); // stepper[idx].setDirection(CW); // stepper[idx].rotate(1); }*/ } void rueckwaerts(void) { // rotate_li = true; for (idx = stepper_VL; idx < stepper_MAX; idx++) { stepper[idx].moveTo(0); stepper[idx].runToPosition(); stepper[idx].setSpeed(300); // stepper[idx].rotate(1); } /* for (idx = stepper_VR; idx < stepper_MAX; idx++) { stepper[idx].moveTo(0); stepper[idx].runToPosition(); // stepper[idx].setDirection(CW); // stepper[idx].rotate(1); }*/ }![]()
gruß inka
Deswegen hatte ich das erwähnt, falls Du später evtl. ein Problem haben solltest, dass Du gleich einen Ausweg parat hast. Allerdings ist es so, dass meine NEMA17, die ich zuhause habe (heute Morgen nochmals ins Datenblatt geschaut) 1.5A Nennstrom haben, bei 2.xV (2.5 .. 2.8V). Die Spannung am Treiber soll möglichst hoch sein, damit bei schnellen Umdrehungen viel Kraft aufgebaut werden kann. 24V wären da evtl. überlegenswert.
Um nochmal einen Tip zu der Treibersteuerung zu geben:
Die ist wirklich sehr, sehr einfach. Einfach die Steuerpins eines Treibers mit Pins vom Arduino verbinden und Quellen zur Ansteuerung durchlesen und programmieren. Ich würde keine LIB von jemand anderem verwenden. Ich hatte Dir ja schon Quellen geschickt.
Step und Dir brauchst Du ja auch nur, um einen Schritt (Step) in die eingestellte Richtung (Dir) zu machen. Ansonsten kannst Du noch Vollschritt, Halbschritt, 16tel Schritt etc. über die Steuerpins einstellen (damit kann mal herumprobieren - ist recht interessant aber nicht "überlebenswichtig").
Ich sehe gerade: runToPosition();
Ein Stepper ist ja kein Servo. Eine bestimmte Position anzufahren, ist mit einem Stepper nur möglich, wenn Du die Ausgangslage kennst. Der kann soundsoviele Schritte pro Umdrehung machen (steht in der Doku wieviele), das ist alles.
Vieles oder einiges wirst Du schon wissen ... nur nochmal so erwähnt.
Ich habe mir nochmals Mühe gemacht und die essentiellen Sachen zur Steppersteuerung, mit dem 4988, aus meinem Blog kopiert, um zu ermutigen:
Code://----------------------------------------------------------------------------- //A4988 #define Dir 8 #define Step 9 #define Sleep 10 #define MS3 11 #define MS2 12 #define MS1 13 //----------------------------------------------------------------------------- //Ausgänge für Motortreiber pinMode(Dir, OUTPUT); pinMode(Step, OUTPUT); pinMode(Sleep, OUTPUT); pinMode(MS3, OUTPUT); pinMode(MS2, OUTPUT); pinMode(MS1, OUTPUT); //----------------------------------------------------------------------------- //Den Schrittmodus am Motortreiber einstellen: //----------------------------------------------------------------------------- void StepMode(byte mode){ switch(mode){ case 0: digitalWrite(MS1, LOW); digitalWrite(MS2, LOW); digitalWrite(MS3, LOW); break; case 1: digitalWrite(MS1, HIGH); digitalWrite(MS2, LOW); digitalWrite(MS3, LOW); break; case 2: digitalWrite(MS1, LOW); digitalWrite(MS2, HIGH); digitalWrite(MS3, LOW); break; case 3: digitalWrite(MS1, HIGH); digitalWrite(MS2, HIGH); digitalWrite(MS3, LOW); break; case 4: digitalWrite(MS1, HIGH); digitalWrite(MS2, HIGH); digitalWrite(MS3, HIGH); } } //----------------------------------------------------------------------------- //einen Schritt machen: digitalWrite(Step, HIGH); delayMicroseconds(i); //i bestimmt die Pause zwischen den Signalflanken und damit die Geschwindigkeit (abhängig vom eingestellten Step-Mode) digitalWrite(Step, LOW); delayMicroseconds(i); //----------------------------------------------------------------------------- //Richtung bestimmen: digitalWrite(Dir,LOW); //digitalWrite(Dir,HIGH); //----------------------------------------------------------------------------- //Die Motor Start-/Stopfunktionen. Wie man sieht, wird hier nur der Treiber schlafen geschickt; damit wird der Motorstrom abgeschaltet. //Wird der Motor hier "gestartet", wird er unter Strom gesetzt, dreht sich aber noch nicht. void power_a4988_disable(){ digitalWrite(Sleep, LOW); } void power_a4988_enable(){ digitalWrite(Sleep, HIGH); }
MfG
Geändert von Moppi (22.10.2019 um 09:22 Uhr)
auch wegen Steuerung und Odometriefähigkeit halte ich Stepper für den Antrieb für suboptimal, denn zusätzlich zum Schlupf kommen auch noch verschluckte Steps und passive Verdrehungen unter Last als Problem dazu, sodass man die aktuelle Drehposition noch unzuverlässiger ermitteln kann als bei DC-Motoren mit Rotationsencodern.
gutes beispiel aus Deinem blog, danke für deine mühe, ich habe es aber rein zufällig entdeckt, weil ich selten nach hinten blätere, so entgehen einem die nachträglichen editierungen... Wäre schade drum gewesen...
Eine durchaus interessante möglichkeit der direkten programmierung ohne eine lib. Ich finde das aber nicht unbedingt übersichtlicher als eine lib bzw. die befehle aus einer lib:
hier sehe ich spätestens auf den zweiten blick was da passiert und muss mich nicht unbedingt mit der "hintergrundaktivität auf bitebene" belasten...Code:void vorwaerts(void) { for (idx = stepper_VL; idx < stepper_VR; idx++) { stepper[idx].runSpeed(); stepper[idx].move(-100); } for (idx = stepper_VR; idx < stepper_MAX; idx++) { stepper[idx].runSpeed(); stepper[idx].move(100); } }
gruß inka
inzwischen drehen die Stepper brav alle gleichzeitig und gleichmässig vor sich hin... Jetzt habe ich das teil hochgebockt und betreibe es mit einem steckernetzteil, weil ja der akku noch fehlt...
Wie war das noch mal mit der strombegrenzung an den treibern?
gruß inka
Ich experimentiere immer noch ohne den akku, also mit einem streckernetzteil. Das handling damit ist warscheinlich schuld daran, dass die dinger bei mir wie die fliegen sterben! Einmal hab ich sogar alle vier auf einmal geschafft, ich weiss nicht wie. Die waren alle schon "richtig " an der seitenwand befestigt, allerdings gab es etwas druck auf den kühlkörper und damit den treiberbaustein. Die waren sachte angeklemmt. Kann das die ursache sein? Wie macht ihr eigentlich die dinger fest?
gruß inka
Die Frage lässt sich so nicht beantworten. NEMA17 beschreibt nur das Flanschmass des Motors. Über die elektrischen Eigenschaften wie Strom, Spannung, Leistung Uni oder Bipolar sagt der NEMA-Wert nichts aus. Nema 17 bedeutet der Motor hat eine Front mit 42x42mm und die Befestigungslöcher haben einen Abstand von 31mm. Das hat mit dem Treiber alles nichts zu tun.
Ist doch recht einfach. Für jeden Puls am step-Eingang dreht der Motor um einen Schritt. Und in welcher Richtung bestimmt das direction, das Richtungs-Signal. Dabei kann der Motor ClockWise also rechtsrum wie die Uhr oder CounterClockWise, linksrum drehen. Amis kürzen das halt gern ab.
MfG Klebwax
Strom fließt auch durch krumme Drähte !
Lesezeichen