Schrittmotor + Arduino + Verständnisproblem?

OP #4205460
Lesenswert?

Hallo Forengemeinde,

ich bastel im Moment an einer kleinen Schrittmotoransteuerung und komme 
da nicht so wirklich weiter.

Zunächst meine Komponenten:

- Arduino Mega
- Motortreiber VMA03 von Vellemann 
(http://www.vellemanusa.com/downloads/0/modules/usermanual_vma03.pdf)
- Motor: QSH6018-65-28-210 von Trinamic 
(http://www.trinamic.com/products/motors/motors-stepper/qmot-qsh6018)

Testcode, den ich benutze:

https://gist.github.com/Epsilon99/2757e52e06a7d2d50221


Zu meinem Problem:

Ich habe die stepDelay Variable etwas variiert und festgestellt, dass 
der Motor bei einem Wert von ca. 3000 am ruhigsten läuft. Die 
Übergabeparameter von Step4FWD und Step4BWD habe ich jeweils auf 100(2 
Umdrehungen) gesetzt. Den Motortreiber speise ich extern mit einem 
Labornetzteil mit 4V. Die Schaltung zieht bei rotierendem Motor 
(Leerlauf) einen Strom von ca 0,2A.

Was ich jetzt nicht verstehe ist, warum kann ich die Geschwindigkeit 
nicht variieren? Ich bin eigentlich davon ausgegangen, dass ich dies 
über die Variation von der stepDelay "Zeit" machen kann. Setze ich die 
jedoch zB. auf 2500 dann ruckelt der Motor nur noch und der Strom steigt 
auf ca 0,5A an.


Kennst sich da jemand aus oder hat schonmal vor dem gleichen Problem 
gesessen? Vielleichtt bin ich auch völlig auf dem Holzweg und habe 
irgendetwas übersehen. Bin über jeden Hinweis dankbar!

Freundliche Grüße
Rema
#4205475
Lesenswert?

Im Datenblatt zu deiner Treiberplatine steht das du sie mit einer 
Spannung zwischen 7V und 46V betreiben sollst. 4V sind einfach zu wenig.

Ich kenne die Parameter Step4FWD und Step4BWD aber bist du sicher das 
der Wert 100 2 Umdrehungen sind? Vom Gefühl her würd ich sagen das das 
nur eine halbe Umdrehung ist.
Gast #4205477
Lesenswert?

Dein "Testcode" ist einfach nur Schei.. Gogglle noch ein bisschen, dann 
findest du besseres 8aber nicht gutes). Die meisten Libs arbeiten nicht 
mit den Timern und sind deshalb für höhere Anforderungen unbrauchbar.
OP #4205488
Lesenswert?

Hallo Daniel,

Danke für die schnelle Antwort!

Ja das hatte ich auch gedacht. Wenn ich die Spannung jedoch langsam 
hochdrehe zB. auf 7V dann ruckelt der Motor sehr stark und der Strom, 
der aus dem Netzteil gezogen wird steigt auf 1,6A an.

Step4FWD macht 4 Vollschritte vorwärts wenn ich das richtig verstanden 
habe. Da ich das ganze 100mal mache, bewegt sich der Motor 400 Schritte 
vorwärts. Der Motor macht 200 Schritte pro Umdrehung. Daher sollten das 
2 Umdrehungen sein.
Das kann ich optisch auch bestätigen ;)

Freundliche Grüße
Rema
OP #4205506
Lesenswert?

Hallo Karl,

Danke für deinen Hinweis.

Wie gut die Qualität des Testcodes ist kann ich nicht wirklich 
beurteilen. Für mich sah er erstmal verständlich aus. Soweit ich das 
sehe benutzt dieser Code doch gar keine libs sondern definiert sich die 
gebrauchten Funktionen selbst.
Der Timer soll hier doch die stepDealy Variable sein oder?

Freundlich Grüße
Rema
OP #4205522
Lesenswert?

Hallo Peter,

ja da hast du vollkommen recht. Ich habe den Aufbau vor mir stehen. Wenn 
ich die Spannung auf 12V hochdrehe werden schon ca 3A aus dem Netzteil 
gezogen und der verbaute IC wird sehr kurzer Zeit sehr warm :(

Ich versteh das nicht so recht...


Freundliche Grüße
Rema
OP #4205544
Lesenswert?

@ Daniel:

Ich habe die Spannung auf 7V eingestellt und den StepDelay Parameter so 
variiert, dass das Netzteil nur noch 0,2A liefern muss. StepDelay ist 
dabei auf 1500 eingestellt. Stelle ich den Parameter nun auf 2500, 
verlangsame den Motor damit also, so steigt die Stromaufnahme auf 1,3A 
an und der Motor dreht sich mit heftigen Vibrationen.

Ich dachte, dass ich über das StepDelay eine fast stufenlose 
Drehzahlregelung realisieren kann. Das ist wohl nicht der Fall.

@ Ulrich:

Im Datenblatt steht, dass der Motor eine VRated von 3,36V und einen 
IRated von 2,8A benötigt. Der Treiber kann angeblich 2,5A liefern. ich 
bin davon ausgegangen, dass sich dadurch jeglich das verfügbare 
abnehmbare Moment verringert.

Danke für den Hinweis:) Aber wie regelt man bei diesem Treiber zB. die 
Geschwindigkeit?



Freundliche Grüße
Rema
#4205572
Lesenswert?

Wenn du den Motor langsamer laufen lassen willst, musst du auch den 
Strom reduzieren, sonst hältst du ihn in jedem Schritt kurz fest, bis 
dein nächster Step ausgelöst wird. Dazu bietet sich PWM an. Leider fehlt 
dir eine Rückmeldung, ob der Motor sich so dreht wie gewünscht. Wenn die 
Last am Motor nicht schwankt kannst du das aber an ein paar Stützstellen 
interpolieren.
#4205942
Lesenswert?

Du kannst den Motor schon stufenlos in der Drehzahl variieren (in 
gewissen Grenzen natürlich).
Den Grund warum er bei niedrigen Drehzahlen Vibriert hat Jan schon 
geschrieben.

Am besten wäre es also eine neue Treiberplatine MIT Stromregelung zu 
kaufen/diese umzubauen.
Dann sollte dein Motor relativ ruhig über den gesammten Drehzahlbereich 
laufen.
#4205964
Lesenswert?

@Re Ma (lremal)

>- Motortreiber VMA03 von Vellemann
>(http://www.vellemanusa.com/downloads/0/modules/use...)

Das ist eine Minimalschaltung mit dem alten L298.

>Umdrehungen) gesetzt. Den Motortreiber speise ich extern mit einem
>Labornetzteil mit 4V. Die Schaltung zieht bei rotierendem Motor
>(Leerlauf) einen Strom von ca 0,2A.

4V sind zu wenig, der L298 braucht minimal 7V. dabei bleiben dann ca. 3V 
im Teiber hängen und es kommen ca. 4V am Motor an.

>jedoch zB. auf 2500 dann ruckelt der Motor nur noch und der Strom steigt
>auf ca 0,5A an.

Das ist alles Murks. Ein halbwegs gescheiter Schrittmotortreiber hat 
noch einen L297 davorgeschaltet und deutlich mehr Versorgungsspannung, 
als der Motor nominal braucht. Damit kann der L297 allein eine 
Stromregelung machen und den Motor schnell ansteuern. Der uC muss dann 
nur noch einen Takt mit der passenden Frequenz vorgeben, damit wird die 
Schrittgeschwindigkeit vorgegeben.
OP #4208418
Lesenswert?

Vielen Dank für eure Mühen:)

Da mein Treiber, wie von mehreren Leuten hier erwähnt, nicht geeignet 
für meine Zwecke ist, habe ich mich nun entschieden einen anderen 
Treiber zu kaufen.

Ich hatte mich zunächst für diesen Treiber entschieden, weil es 
praktisch war, diesen direkt auf meinen Mega stecken zu können.

Ulrich hat mir ja 2 Treiber vorgeschlagen, danke dafür:)
Ich finde diesen recht interessant:
http://www.ebay.de/itm/221402577273?clk_rvr_id=871901231832&rmvSB=true

Könnte ich diesen Treiber mit meinem Testcode ansteuern oder müsste ich 
da ganz anders vorgehen?

Freundliche Grüße
Rema
#4208532
Lesenswert?

@ Re Ma (lremal)

>Ich finde diesen recht interessant:
>Ebay-Artikel Nr. 221402577273

Der ist gut, der kann alles schon intern. Man muss dem nur noch die 
Richtung und den Takt vorgeben.

>Könnte ich diesen Treiber mit meinem Testcode ansteuern

Wahrscheinlich nicht. Aber das ist das kleinste Problem.
Gast #4208540
Lesenswert?

Re M. schrieb:
> Ulrich hat mir ja 2 Treiber vorgeschlagen, danke dafür:)
> Ich finde diesen recht interessant:
> Ebay-Artikel Nr. 221402577273
>
> Könnte ich diesen Treiber mit meinem Testcode ansteuern oder müsste ich
> da ganz anders vorgehen?
>
> Freundliche Grüße

Hab einen ähnlichen Treiber, nur größer. Das ganze läuft bei mir als 
PID-Regler (Die Schritmotorgeschwindigkeit wird so geregelt, dass eine 
Gemessene Kraft mit einer Sollkraft übereinstimmt). Um die Drehzahl zu 
regeln muss man einen Regelmäßigen Puls erzeugen. Dass geschieht über 
den Timer1 (Gibt es eine Lib "TimerOne.h"), die Periodendauer dt kannst 
du in Abhängigkeit der Sollgeschwindigkeit errechnen (Bei 
Vollschrittbetrieb hast du 200 Schritte/U, wenn du 10 U/min möchtsest 
bruachst du also 2000 Schritte pro Minute = 33,3 Schritte/s -> dt = 30 
ms). Im Timerinterrupt gibt man einfach einen Puls ab:

Timer1.attachInterrupt(stepper_pulse);

Timer1.initialize(30000);  // microseconds

void stepper_pulse(){       // Timer 1
  digitalWrite(pulse, HIGH);
  digitalWrite(pulse, LOW);
}

Dann brauchst du noch ggf. eine Rampe zum Beschleunigen/Bremsen

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren