Schrittmotor, kurze Ruckler in der Beschleunigungphase

Gast #5016562
Lesenswert?
• ▲
▼
Werte Schrittmotor Freunde,

Problem: Bei der linearen Beschleunigung eines Schrittmotors sind 
leichte Ruckler hörbar. Verwendet wird ein 
ATMEGA16+OrientalmotorTreiber+Nema23

Ich bastel aktuell an einer Rohrpoliermaschine. Hauptsächlich des 
bastelns wegen ;-)
In meinem aktuellen Code ist der Beschleunigungsalgorithmus aus 
folgenden 2 Dokumenten integriert:
- AVR446 Application Note von ATMEL
- David Justin: Generate stepper motor speed profiles in real time.

Das Geschwindigkeitsprofil wird in Echtzeit berechnet. Der Timer läuft 
im CTC-Modus, der OCR1A-Wert wird ständig neu berechnet und definiert 
die Taktung. Steuerung des Motors über Takt + Richtung.
Nun läuft der Motor eigentlich smooth an, es sind jedoch ab und an 
"Ruckler" drin. Die Ruckler treten nach dem Zufallsprinzip auf, ich 
erkenne kein Muster. Das Problem ist mit einer anderen billigen 
Treiberstufe sowie einem anderen Schrittmotor (China Nema 17) 
reproduzierbar. Ich schließe Treiber+Motor demnach als Grund aus.

Ich weiß, dass man auch vorberechnete Arrays mit den Timerwerten für 
eine Beschleunigung hinterlegen könnte, ich möchte die Rampe aber 
bewusst in Echtzeit berechnen.
Ich könnte mir vorstellen man braucht tiefe Hardwareprogrammierkentnisse 
um das Problem zu lösen. Und genau da setzts bei mir aus...
Den Code hab ich hinterlegt. Aktuell beschleunigt der Motor bei 
Tastendruck und stoppt apprupt (ohne Decel-Rampe) wenn die Taste 
losgelassen wird.

Evtl. hat jemand nützliche Tips, wäre echt super :-)

Grüße, Tom
Angehängte Dateien:
Gast #5016661
Lesenswert?
• ▲
▼
Servus,
welche Treiber hast du jetzt? Die chinesischen machen oftmals Probleme.

Um Softwarefehler auszuschließen, würde ich einfach mittels Debugger 
prüfen oder einfach eine Tabelle anlegen (uart und co.)

unsigned int min(unsigned int x, unsigned int y) geht auch kürzer:
1
unsigned int min(unsigned int x, unsigned int y){
2
   return (x<y) ? x : y;
3
}
Gast #5016710
Lesenswert?
• ▲
▼
Tom schrieb:
> der OCR1A-Wert wird ständig neu berechnet

Kannst du dir diese Werte nicht zur Kontrolle ausgeben lassen (z.B. über 
serielle Schnittstelle), ob da ungewollte Stufen drin sind? Oder 
andersrum mal nach Tabelle hochfahren, wie schon vorgeschlagen.

Für eine lineare Rampe folgen die Timer-Werte einer 1/x-Funktion.

Georg
Gast #5020498
Lesenswert?
• ▲
▼
Servus Zusammen,

danke für die schnellen Antworten!
@aSma:
- kürzeren Code implementiert, Danke für den Tipp!
- Verwende die Treiberplatine von Orientalmotor CVD228. Der Chinesische 
Treiber hat nen THB7128 Chip drauf. Bei beiden Triebern verhält sich der 
Motor gleich. Ich schließe den Treiber als Problemursache demnach aus.
- ich werd mal ne vorberechnete Tabelle implementieren. Mal schaun wie 
da das Verhalten ist.

@Georg:
- hab die Rampe mal in Excel abgebildet. Astreine Kurve, ohne Stufen 
oder dgl.
Wie auch aSma meinte werde ich das mit der vorberechneten Tabelle mal 
implementieren. Werde auch mal mit UART rumspielen, hab da noch keine 
Erfahrung.

Ich meld mich wenn es wieder Neuigkeiten gibt.

Tom

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.