Der Schrittmotor, eine Homepage von Georg Sauer

Steuerung

Wir haben uns mit der Steuerung von Schrittmotoren über einen Programmierbaren Microcontroller den wir in in der Prgrammiersprache ABEL programmierten beschäftigt!


Die Steuereinheit inklusive Schrittmotor von der Seite...

... und von der Oben!

Wir haben den Motor im Voll- und im Halbschrittbetrieb angesteuert was man mit volgender Codefolge ereicht (siehe dazu auch Funktionsweise):

Schritt L3 L2 L1 L0
voll 1 0 0 1
halb 1 0 0 0
voll 1 0 1 0
halb 0 0 1 0
voll 0 1 1 0
halb 0 1 0 0
voll 0 1 0 1
halb 0 0 0 1



Wir haben den Schrittmotor über die Pins 58,59,60 und 61 angesteuert.

schrittmotor_v_1_0.abl:

MODULE schrittmotor

TITLE 'Schrittmotorsteuerung'

// Autor: Georg Sauer Datum: 28.06.2010
// Funktion: der Schritmotor wird im Vollschrittbetrieb entweder vorwaerz oder Rueckwaets laufen gelassen.
// Dies wird durch die stellung des Schalters "vor" auf pin 31 gesteuert, vor==1->Rechtsdrehung, vor==0->Linksdrehung.
// Die geschwindigkeit wird durch den Tackt auf pin 88 gesteuert der durch ein Pitentiometer gesteuerd werden kann!

vor,Takt PIN 31,88;
Q1,Q0 NODE ISTYPE 'REG';
D,C,B,A PIN 61,60,59,58 ISTYPE 'COM';


EQUATIONS
[Q1..Q0].clk=Takt;
TRUTH_TABLE // Zähler
([vor,Q1,Q0]:>[Q1,Q0]);
[ 0, 0, 0]:>[ 1, 1]; // Linksdrehung
[ 0, 0, 1]:>[ 0, 0];
[ 0, 1, 0]:>[ 0, 1];
[ 0, 1, 1]:>[ 1, 0];

[ 1, 0, 0]:>[ 0, 1]; // Rechtsdrehung
[ 1, 0, 1]:>[ 1, 0];
[ 1, 1, 0]:>[ 1, 1];
[ 1, 1, 1]:>[ 0, 0];

TRUTH_TABLE // Codeumsetzer
([Q1,Q0]->[D,C,B,A]); // (Ausgangsschaltnetz)
[ 0, 0]->[1,0,1,0];
[ 0, 1]->[1,0,0,1];
[ 1, 0]->[0,1,0,1];
[ 1, 1]->[0,1,1,0];

END

schrittmotor_v_1_1.abl:

MODULE schrittmotor

TITLE 'Schrittmotorsteuerung'

// Autor: Georg Sauer Datum: 28.06.2010
// Funktion: der Schritmotor wird im Halbschrittbetrieb entweder vorwaerz oder Rueckwaets laufen gelassen.
// Dies wird durch die stellung des Schalters "vor" auf pin 31 gesteuert, vor==1->Rechtsdrehung, vor==0->Linksdrehung.
// Die geschwindigkeit wird durch den Tackt auf pin 88 gesteuert der durch ein Pitentiometer gesteuerd werden kann!

vor,Takt PIN 31,88;
Q1,Q0 NODE ISTYPE 'REG';
D,C,B,A PIN 61,60,59,58 ISTYPE 'COM';



EQUATIONS
[Q2..Q0].clk=Takt;

TRUTH_TABLE // Zähler
([vor,Q2,Q1,Q0]:>[Q2,Q1,Q0]);
[ 0, 0, 0, 0]:>[ 1, 1, 1]; // Linksdrehung
[ 0, 0, 0, 1]:>[ 0, 0, 0];
[ 0, 0, 1, 0]:>[ 0, 0, 1];
[ 0, 0, 1, 1]:>[ 0, 1, 0];
[ 0, 1, 0, 0]:>[ 0, 1, 1];
[ 0, 1, 0, 1]:>[ 1, 0, 0];
[ 0, 1, 1, 0]:>[ 1, 0, 1];
[ 0, 1, 1, 1]:>[ 1, 1, 0];

[ 1, 0, 0, 0]:>[ 0, 0, 1]; // Rechtsdrehung
[ 1, 0, 0, 1]:>[ 0, 1, 0];
[ 1, 0, 1, 0]:>[ 0, 1, 1];
[ 1, 0, 1, 1]:>[ 1, 0, 0];
[ 1, 1, 0, 0]:>[ 1, 0, 1];
[ 1, 1, 0, 1]:>[ 1, 1, 0];
[ 1, 1, 1, 0]:>[ 1, 1, 1];
[ 1, 1, 1, 1]:>[ 0, 0, 0];

TRUTH_TABLE // Codeumsetzer
([Q2,Q1,Q0]->[D,C,B,A]); // (Ausgangsschaltnetz)
[ 0, 0, 0]->[1,0,1,0];
[ 0, 0, 1]->[1,0,0,0];
[ 0, 1, 0]->[1,0,1,0];
[ 0, 1, 1]->[0,0,1,0];
[ 1, 0, 0]->[0,1,1,0];
[ 1, 0, 1]->[0,1,0,0];
[ 1, 1, 0]->[0,1,0,1];
[ 1, 1, 1]->[0,0,0,1];

END
© 2010 Georg Sauer, Löhliswälderstraße 63 77746 Schutterwald