Hallo,
ich habe einen Schrittmotor KP4M2-203, dazu einen Arduino nebst
Schrittmotoransteuerungsshield auf Basis eines L298P.
Die Spulen des Motors habe ich wahrscheinlich richtig angeschlossen,
denn er dreht sich ja und die zugehörigen LED's leuchten auf plausible
Weise. Höchstens könnte die Richtung einer Spule vertauscht sein - was
aber unwahrscheinlich ist, denn am Verhalten des Motors ändert sich
nichts.
Mein Problem: der Motor läuft nicht, wie lt. Programm vorgesehen. Er
sollte eine Umdrehung im Uhrzeigersinn und dann wieder zurück machen.
Tatsächlich dreht er ruckweise in kleineren und größeren Schritten im
Uhrzeigersinn und gelegentlich kleine Stücke zurück.
Ich habe die Ansteuerung der Ports bzw. Spulen nicht ehrlich
programmiert, sondern eine fertige library aus dem Arduino-Umfeld
benutzt. Arduino unterstützt bekanntermaßen die Faulheit seiner
Benutzer.
Nun müßte ich aus den eingebundenen Dateien stepper.h bzw. stepper.cpp
herausfinden, w o die Spulen in der falschen Reihenfolge angesteuert
werden. Was aber schwierig ist, denn wenn sich der Motor ca um 100°
normal bewegt, dann sind das vielleicht 70 richtige Abläufe. Daß danach
die Reihenfolge der Spulenansteuerung eine Weile daneben geht und dann
wieder richtig ist, wäre eigenartig.
Oder ob es an etwas Anderem liegt?
Ich füge das Programm mal an, vielleicht kann jemand mit einem Blick die
Schwachstelle finden oder mir sonst wie einen guten Rat geben.
Vielen Dank schon mal.
1
// _stepper_oneRevolution
2
/*
3
Stepper Motor Control - one revolution
4
5
This program drives a unipolar or bipolar stepper motor.
6
The motor is attached to digital pins 8 - 11 of the Arduino. - nein, 4,5,6,7
7
8
The motor should revolve one revolution in one direction, then
9
one revolution in the other direction.
10
11
12
Created 11 Mar. 2007
13
Modified 30 Nov. 2009
14
by Tom Igoe
15
16
*/
17
#include<Arduino.h>
18
#include<Stepper.h>
19
20
constintstepsPerRevolution=200;// change this to fit the number of steps per revolution
21
// for your motor
22
23
// initialize the stepper library on pins 8 through 11: Auf dem Shield sind D4,D5,D6,D7 angeschlossen (Brücken gesetzt)
24
SteppermyStepper(stepsPerRevolution,6,5,7,4);//6574 , wobei 7 u. 4 untere Anschlüsse sind
25
26
voidsetup(){
27
28
for(inti=1;i<=10;i++){//For Arduino Motor Shield // u.U. sind in Stepper.h / cpp die dort nicht genannten
29
pinMode(i,OUTPUT);//set pin 4,5,6,7 to output mode // Ports nicht als Ausgänge gesetzt?
Hallo Alexander,
Alexander Schmeil schrieb:> Mein Problem: der Motor läuft nicht, wie lt. Programm vorgesehen. Er> sollte eine Umdrehung im Uhrzeigersinn und dann wieder zurück machen.> Tatsächlich dreht er ruckweise in kleineren und größeren Schritten im> Uhrzeigersinn und gelegentlich kleine Stücke zurück.
Das hört sich sehr nach zu schneller Ansteuerung an. Ohne
Beschleunigungs-Rampe sind Schrittmotoren recht lansam. Kann es sein,
dass Du den setSpeed-Parameter falsch interpretierst?
Grüße, Kurt
Oder die Schaltung funktioniert nicht richtig und es wird nur eine Spule
richtig bestromt. Dann ist das Anlaufverhalten eher zufällig. Wenn der
Motor einmal läuft, dreht er meist auch weiter. Aber natürlich nicht mit
vollem Drehmoment.
Mit freundlichen Grüßen
Thorsten Ostermann
Ich beschäftige mich im Moment auch mit diesem Thema und kann dir mal
das foglende empfehlen:
#include <AccelStepper.h>
// Define a stepper and the pins it will use
AccelStepper stepper(AccelStepper::DRIVER, 13, 12); // 13-PUL,12-DIR
void setup()
{
stepper.setAcceleration(80000);
stepper.setCurrentPosition(0);
stepper.setMaxSpeed(4000);
}
long current_position;
void loop()
{
current_position = stepper.currentPosition();
if(current_position>=50000){
stepper.moveTo(0);
}
if(current_position<=0){
stepper.moveTo(50000);
}
stepper.run();
}
Hier kannst du die Bib downloaden:
https://github.com/adafruit/AccelStepper
Ich hoffe das bringt dich weiter :)
Ist der Motor eingebaut? Ohne Last, auf dem Tisch liegend ist das ganz
normal. Auf eine schwere Platte schrauben und mit 1/10 des Nennstroms
versuchen.
Kein Name schrieb:> Ist der Motor eingebaut? Ohne Last, auf dem Tisch liegend ist das ganz> normal. Auf eine schwere Platte schrauben und mit 1/10 des Nennstroms> versuchen.
Er lag lose auf dem Tisch. Ich habe ihn jetzt in den Schraubstock
gespannt und die Spannung am Netzgerät heruntergedreht. Außerdem habe
ich anschließend, wie Kurt schreibt, an myStepper.setSpeed gedreht und
den Wert wieder heruntergesetzt auf 10-15.
Nun läuft er f a s t normal: in Uhrzeigerrichtung dreht er normal eine
Umdrehung, dann ruckelnd etwa eine halbe Umdrehung zurück.
Er läuft schlechter, wenn man die Spannung wieder erhöht.
@ Thorsten, es sieht in der Tat etwas merkwürdig aus. Es gibt für jede
Spule zwei LED's, wobei jeweils eine deutlich dunkler leuchtet.
@Cihan7515 werde ich mal probieren!
Ich werde wohl noch einige Zeit brauchen, bis ich mit dem Motor aus der
Bastelkiste zurecht komme.
Freundliche Grüße
Alexander
Hallo Forum
Das Problem mit dem Steppern ist ganz einfach.
1. Ungenaugikeiten bei den Berechnungen der float Variablen.
2. Ist leider das größere Problem. Die Stepper haben mehrere
Resonanz-frequenzen. Wenn der Stepper bei seiner Beschleunigung und
Verzögerung durch diese Frequenzbereiche läuft verhält sich der Stepper
nicht normal. Schritten gehen verloren und es ist möglich dass die
Stepper zum Stillstand gekommen sind und brummen.
Die Resonantfrequenzberiche sind durch diverse Faktoren abhängig.
Zum mechanische Unwucht, Chopper-Frequenz bei Treiber/Endstufen, die
Trägheit des Stepper und die Betriebsspanung (höhere Ub ist von
Vorteil).
Bei www.goetz-automation.de/Schrittmotor/Resonanzen.htm ist es gute
verständlich Erklärt.
Einfache Lösung ist das schnelle durchfahren der
Resonanzfrequenzbereiche.
Ihr könnten mit setMaxSpeed und setAcceleration experimentieren.
Gruß Thorsten
Nach über 3 Jahren ohne Rückmeldung wird dem Alexander das schon
gelungen sein oder die Motoren liegen in der Tonne.
Und mit einem L298 muss man sich heute auch nicht mehr rumquälen wo es
die billigen Pololu & Co. Treiber an jeder Ecke gibt.