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 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. |