Forum: Mikrocontroller und Digitale Elektronik Schrittmotor + Arduino + Verständnisproblem?


von Re M. (lremal)


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

von Daniel M. (erfolgstyp)


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.

von Karl (Gast)


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.

von Re M. (lremal)


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

von Re M. (lremal)


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

von Peter II (Gast)


Lesenswert?

Re M. schrieb:
> der aus dem Netzteil gezogen wird steigt auf 1,6A an.

Der Motor ist je Phase mit Peek 2.8A angegeben, damit scheint das gar 
nicht so falsch zu sein.

von Daniel M. (erfolgstyp)


Lesenswert?

Da deine Treiberkarte über kine Stromregelung verfügt darfst du die 
Spannung nur so weit aufdrehen, das weniger als der Nennstrom der Karte 
fließt (2A) dabei muss die Spannung aber mindestens 7V betragen.

Dann macht das mit den 2 Umdrehungen ja Sinn.

von Re M. (lremal)


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

von Ulrich F. (Gast)


Lesenswert?

Re M. schrieb:
> Ich versteh das nicht so recht...
Was sagt denn das Datenblatt zum Motor?


Ich glaube, du suchst für deinen Motor einen solchen Treiber ebay: 
320933135098 oder 221402577273
Ist nur ein Beispiel, es gibt dutzende weitere/verschiedene

von Re M. (lremal)


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

: Bearbeitet durch User
von Jan H. (jan_m_h)


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.

von Daniel M. (erfolgstyp)


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.

von Falk B. (falk)


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.

von Re M. (lremal)


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

von Ulrich F. (Gast)


Lesenswert?


von MaWin (Gast)


Lesenswert?

Re M. schrieb:
> - Motortreiber VMA03 von Vellemann
> - Motor: QSH6018-65-28-210 von Trinamic

Ein 2.8Arms (4A) Motor an einem 500mA Treiber, lustich.

http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.10

von Falk B. (falk)


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.

von Karl (Gast)


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

von m.n. (Gast)


Lesenswert?

Wenn Du Testroutinen für einen ordentlichen Treiber suchst: 
Beitrag "Schrittmotoransteuerung mit A4982 und ATmega328"
Für Arduino Uno sind auch Routinen dabei, die auch auf einem Mega laufen 
können.

Den Motor kannst Du auch mit 500 mA betreiben. Er hat zwar nicht das 
max. Drehmoment, dreht sich aber dennoch und ist dabei auch leise.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.