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
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.
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.
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
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
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.
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.
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
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
@ 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
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.
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.
@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.
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
Du wirst ganz anders vorgehen müssen. http://www.sainsmart.com/zen/documents/20-019-209/ST-M5045%20Instruction%20manual.pdf
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
@ 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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.