Schrittmotoren

Funktion


Der Modul vereinfacht die Ansteuerung von Schrittmotoren. Er erzeugt alle Signale zur Ansteuerung des Motortreiber Bausteins L298 von ST Microelectronik und die Regelung des Phasenstroms. Die verwendete Schaltung ist auch für den Mikroschrittbetrieb geeignet. Getestet wurde hauptsächlich mit Motoren des Typs ECM243-S1.0A(external link) von EC Motion aber auch mit einer Reihe anderer Modelle. Die Spannung am Motortreiber wurde dabei mit 30V eingestellt und der Motor hat sich nur leicht erwärmt. Der Strom wird immer im zulässigen Bereich geregelt. Im Programm muss nach der Initialisierung nur die Anzahl der auszuführenden Schritte und der Start eingestellt werden. Die Beschleunigung und das Abbremsen werden vom Modul automatisch entsprechend der Initialisierung organisiert. Beim erreichen des TOP-Speed, beim Start des Bremsvorganges und der Stop-Position kann ein Interrupt ausgelöst werden.

Bei der Verwendung des Moduls wird mit den maximal möglichen Schrittfrequenz im Mikroschritt Betrieb gearbeitet, wodurch die sonst üblichen Geräusche von Schrittmotoren nicht entstehen. In dieser Betriebsart benötigen die verwendeten Motoren 1600 Schritte pro Umdrehung. Dabei sind 8 Mikroschritte ein Vollschritt. Für 1600 Motor Umdrehungen (2560000 Mikroschritte) werden nur 35 Sekunden benötigt. Der Mikrokontroller hat in dieser Zeit nichts zu tun, wodurch die Ansteuerung mehrerer Schrittmotoren von einem Kontroller möglich ist.

Register bei 5 Beschleunigungsphasen (Die Anzahl der Phasen ist generierbar)


Die Rampe wird dabei mit RAMP_INT_CNT=5 Beschleunigungswerten und RAMP_INT_CNT-1=4 Drehzahlschwellen konfiguriert. Die Adresse von RAMP_CONF_END_ADR berechnet sich zu (RAMP_CONF_BASE_ADR + RAMP_INT_CNT * 2 - 2) = (1 + 5*2 -2) = 9.

Offset Register Funktion Zugriff
0 STARTSPEED_ADR Anfangsgeschwindigkeit read/write
1 RAMP_CONF_BASE_ADR = ACC_0 Beschleunigungswert 1 read/write
2 TRESHOLD_0 Drehzahlschwelle 1 read/write
3 ACC_1 Beschleunigungswert 2 read/write
4 TRESHOLD_1 Drehzahlschwelle 2 read/write
5 ACC_2 Beschleunigungswert 3 read/write
6 TRESHOLD_2 Drehzahlschwelle 3 read/write
7 ACC_3 Beschleunigungswert 4 read/write
8 TRESHOLD_3 Drehzahlschwelle 4 read/write
9 RAMP_CONF_END_ADR = ACC_4 Beschleunigungswert 5 read/write
10 TOPSPEED_ADR maximale Geschwindigkeit read/write
11 STEP_MSB_ADR Auszuführende Schritte (high word) read/write
12 STEP_LSB_ADR Auszuführende Schritte (low word) read/write
13 MODE_ADR Status und Kommandobits read/write
14 SPEED_ADR momentane Geschwindigkeit read
15 ACC_ADR momentane Beschleunigung read


Aufbau des MODE Registers


Bit Nummer Funktion
0 Startet den Bewegungsvorgang
1 aktiviert Notstopp
2 bestimmt Drehsinn
3 Ruhestromabsenkung 0
4 Ruhestromabsenkung 1
5 Motorstatus (1 Motor steht, 0 Motor in Bewegung)


Signale des Moduls


Signale Anzahl Richtung Bedeutung
stpr_drv 4 Ausgang Motorsignale zur Ansteuerung mit dem Drehfeld
stpr_en 2 Ausgang Freigabe der beiden Treiber des L298
isense_comp 2 Eingang Eingang zur Messung des Phasenstromes in den beiden Treibern des L298
vref_pwm 2 Ausgang Ausgang zur Regelung des Phasenstromes in den beiden Treibern des L298
opt_enc 1 Eingang Eingang für eine Lichtschranke an einer Schlitzscheibe des Motors


Funktionen für den Anwender aus der Datei "stepper.h"

Um alle Funktionen auch für mehrere Stepper in einem System nutzen zu können, beginnen alle Funktionen jetzt mit einem zusätzlichen Parameter. Dies ist ein Zeiger auf die Registerstrucktur des anzusprechenden Stepper Moduls. Wird im jConfig der Standart Name "microstepper_0" beibehalten, dann hat der Zeiger den Namen "MICROSTEPPER_0".

Funktion Parameter Bedeutung
void init_stepper(struct stepper *stepper0, unsigned int startfrequency, unsigned int topfrequency, unsigned int time) Startfrequenz, Topfrequenz, Rampenzeit Initialisierung des Interface
void set_idle_pwr(struct stepper *stepper0, unsigned int pwr_down_sel) 0 = NO_IDLE_PWR Betriebsart für den Ruhestrom einstellen
1 = QUARTER_IDLE_PWR
2 = HALF_IDLE_PWR
3 = FULL_IDLE_PWR
void init_motion(struct stepper *stepper0, unsigned int steps_msb, unsigned int steps_lsb, unsigned int direction) Anzahl der Schritte in 36 Bit und Drehrichtung einstellen.
void go(struct stepper *stepper0) Start der Bewegung.
void estop(struct stepper *stepper0) Sofort die Bewegung anhalten.
unsigned int is_moving(struct stepper *stepper0) aktueller Status der Motorsteuerung.




SpartanMC