Viktor
03.10.2007, 13:33
Hallo,
ich habe ein kleines Problem mit der Ansteuerung eines Schrittmotors mit 1/16 Mikroschritt.
Also meine Schaltung ist folgendermaßen aufgebaut.
Ich verwende 2x L6203, die an den L6506 angeschlossen sind. Vom L6506 gehen vier Leitungen an den ATmega8. Über diese Leitungen werden Phasen beider L6203 umgeschaltet bzw. umgepolt.
An dem Atmega8 ist ein SPI 2xDAC (MAX549A) angeschlossen. Mit dem DAC erzeuge ich um 90° versetzte Spannungen (cos und sin).
Nun zum eigentlichen Problem.
Ich habe absolut keine Idee wie ich das mit dem Umschalten der Phasen in bestimmten Phasenlagen in C hinkriege.
Da ich noch ein Anfänger in Sachen C bin, habe ich systematisch einzelne Funktionen die ich programmiert habe getestet und sichergestellt, dass diese auch wirklich funktionieren.
Ich habe bisher folgendes geschafft:
1. Ansteuerung des S-Motors im Halb- und Vollschrittbetrieb.
2. Ansteuerung des DACs über SPI (mit zwei Arrays für cos und sin) überprüft mit einem Oszilloskop.
3. Interruptsteuerung (da ich HW Interrupt (INT1) benutze um den S-Motor einen Schritt weiter zu bewegen).
Ich habe 3 Arrays angelegt:
1. mit 8 Werten für Halb-/Vollschritt (bei Mikroschritt benötige ich nur Vollschritt um Phasen Phasen A und B umzuschalten)
2. mit Cos-Werten für 360°
3. mit Sin-Werten für 360°
Nach je 90° (in sin/cos Tabelle) muss ich 1 bzw. 2 Schritt(e) in der ersten Tabelle gehen. (zwei Schritte deshalb, weil nur bei jeder 2-er Position in der ersten Tabelle beide Phasen aktiv sind.
Wie gesagt, ich weiß leider nicht wie ich in C diese Phasen Umschaltung/ Umpolung am schnellsten und einfachsten realisieren kann.
Ich möchte nicht zig If-Abfragen einbauen, denn ich möchte gerne möglichst hohe Frequenzen erreichen.
Kann mir jemand bei diesem Problem weiterhelfen oder vielleicht einen kleinen Tipp geben wie ich das machen kann?
besten Dank im Voraus für eure Hilfe!!!
=========================================
Edit:
Ich hab das Problem gelöst!
Die Steuerung funktioniert.
Folgende Modi wurden implementiert:
Voll-/ Halb-/ Viertel-/ Achtel-/ Sechszehntel-Schritt
ich habe ein kleines Problem mit der Ansteuerung eines Schrittmotors mit 1/16 Mikroschritt.
Also meine Schaltung ist folgendermaßen aufgebaut.
Ich verwende 2x L6203, die an den L6506 angeschlossen sind. Vom L6506 gehen vier Leitungen an den ATmega8. Über diese Leitungen werden Phasen beider L6203 umgeschaltet bzw. umgepolt.
An dem Atmega8 ist ein SPI 2xDAC (MAX549A) angeschlossen. Mit dem DAC erzeuge ich um 90° versetzte Spannungen (cos und sin).
Nun zum eigentlichen Problem.
Ich habe absolut keine Idee wie ich das mit dem Umschalten der Phasen in bestimmten Phasenlagen in C hinkriege.
Da ich noch ein Anfänger in Sachen C bin, habe ich systematisch einzelne Funktionen die ich programmiert habe getestet und sichergestellt, dass diese auch wirklich funktionieren.
Ich habe bisher folgendes geschafft:
1. Ansteuerung des S-Motors im Halb- und Vollschrittbetrieb.
2. Ansteuerung des DACs über SPI (mit zwei Arrays für cos und sin) überprüft mit einem Oszilloskop.
3. Interruptsteuerung (da ich HW Interrupt (INT1) benutze um den S-Motor einen Schritt weiter zu bewegen).
Ich habe 3 Arrays angelegt:
1. mit 8 Werten für Halb-/Vollschritt (bei Mikroschritt benötige ich nur Vollschritt um Phasen Phasen A und B umzuschalten)
2. mit Cos-Werten für 360°
3. mit Sin-Werten für 360°
Nach je 90° (in sin/cos Tabelle) muss ich 1 bzw. 2 Schritt(e) in der ersten Tabelle gehen. (zwei Schritte deshalb, weil nur bei jeder 2-er Position in der ersten Tabelle beide Phasen aktiv sind.
Wie gesagt, ich weiß leider nicht wie ich in C diese Phasen Umschaltung/ Umpolung am schnellsten und einfachsten realisieren kann.
Ich möchte nicht zig If-Abfragen einbauen, denn ich möchte gerne möglichst hohe Frequenzen erreichen.
Kann mir jemand bei diesem Problem weiterhelfen oder vielleicht einen kleinen Tipp geben wie ich das machen kann?
besten Dank im Voraus für eure Hilfe!!!
=========================================
Edit:
Ich hab das Problem gelöst!
Die Steuerung funktioniert.
Folgende Modi wurden implementiert:
Voll-/ Halb-/ Viertel-/ Achtel-/ Sechszehntel-Schritt