Hallo an alle Interessierten und Helfer! Aktuell beschäftige ich mich zum ersten mal mit einem Schrittmotor bzw. Schrittmotortreiber. Ich verwende den Allegro A4988 (bis 1A Phasenstrom) dem man bequem den Schrittmodus und den Takt vorgeben kann und dieser sich dann um die Signalgenerierung für die Schrittmotor selbst kümmert. Außerdem verwendet ich den ATmega128A bei 14,7456 Mhz. Meine ersten Versuche den Schrittmotor linear zu beschleunigen bzw. zu verzögern waren nicht sehr erfolgreich, vor allem weil ich den stepmode (also Voll, Halb, Viertel, Achtel- oder Sechzehntelschrittbetrieb) und einige andere Parameter flexibel halten möchte. Daher habe ich micht mit der Atmel AppNote zum Thema Schrittmotoren linear Beschleunigen/Verzögern beschäftigt (AVR446: Linear speed control of stepper motor, siehe Anhang). Nun läuft der Code auch wunderbar, aber ich bekomme immer wieder ein seltsames Verhalten des Motors. Mal verzögert er zwischendurch um dann wieder zu Beschleunigen usw. Um mir eine Übersicht bzgl. der Größe der verwendeten Variablen und gegebenfalls Überfläufe zu detektieren die ich nicht erwarte habe ich mal ein Excel-File angelegt, siehe Anhang. Hier sind alle Formeln aus der AppNote bzw. aus dem Atmel-Code umgesetzt und man kann mit den Werten spielen. Vielleicht erfreut sich ja noch der ein oder andere darüber, der diesen Beispielcode von Atmel auch verwendet. Irgendetwas scheint aber noch nicht korrekt zu sein. Der OCR1A-Wert srd.step_delay wird irgendwann negativ die Restfunktion habe ich noch nicht wirlich gecheckt...Nach Diagramm1 sieht der Geschwindigkeitsverlauf wirklich schön linear aus. Diagramm2 zeigt dass da aber an der Berechnung doch noch irgendwas falsch sein muss. Ich würde mich freuen, wenn sich jemand dafür interessiert und das Dokument (und damit evtl auch der Code) korrigiert und verbessert werden kann! Mathematisch akzeptiert aber den Ansatz noch nicht verstanden habe ich die den Ansatz zur cn-berechnung nach der Taylorreihe. Taylorapproximation ist mir schon klar aber wie bzw. welche spezielle Reihe da verwendet wird und weshalb, das ist mir nicht klar...jemand mathematisch versiert und Lust mir das näher zu bringen? Nächste Woche teste ich mal diverse Einstellungen die ich davor zuerst mit dem Excel-File simuliert habe und sehe mir an was der Schrittmotor macht. Ich freue mich über Feedback. Viele Grüße, Daniel
Zur Info: Die Formeln werden in der PDF beschrieben und ich habe sie aus dem Beispielcode übernommen. Im Anhang: - Zip-File (AVR446.zip) mit komplettem Atmel-Beispiel-Projekt zur Schrittmotoransteuerung - direkt relevante Dateien "speed_cntr.c" und "speed_cntr.h" aus dem Atmel-Code-Beispiel
Und wie sieht dein Programm aus, in dem du die Atmel-Routinen verwendest?
Die Berechnung in meinem Fall ist praktisch identisch zu dem Beispiel von Atmel. Einzige Änderung: Statt in der ISR wie Atmel eine Funktion zu starten die über eine Tabelle die Phasen des Schrittmotors ansteuert, erzeuge ich hier einen kurzen Impuls als Clock-Signal für den Schrittmotortreiber.. Es geht mir prinzipiell darum was in der Berechnung falsch sein könnte bzw. wo die Berechnung an ihre Grenzen stößt..und was man da verbessern könnte.
Update: Excel Tool zur Hilfe und Visualisierung der Schrittmotor-Geschwindigkeitsberechnung nach Atmel Application Note "AVR446: Linear speed control of stepper motor" ist korrigiert. Ihr findet es im Anhang. Durch die große Anzahl der Daten und Diagramme ist das Excel-File relativ groß geworden. Für Kritik oder Anregungen bin ich natürlich offen :) Ich hoffe es hilft denjenigen die sich sich auch mit diesem Thema auseinander setzen bei der erfolgreichen Implementierung des Codes. Ob es in der Anwendung tatsächlich so funktioniert wie in Excel simuliert teste ich nächste WOche. Viele Grüße, Daniel
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.