Hi brundle,
Normalerweise brauchst Du nur einen Puls an die Steuerkarte zu geben um den Motor einen Step weiter zu drehen, die Karte erledigt den Rest. Damit der Motor permanent dreht, must Du permanent Pulse geben. Die Frequenz mit der Du die Pulse gibst, bestimmt die Geschwindigkeit des Motors. Wenn die Pulse zu schnell kommen, kommt der Motor nicht mehr mit, d.h. er verliert Pulse und wir kraftlos. Ich hab die Vmax meiner Motoren einfach experimental ermittelt. (ausprobiert)
Der Trick bei der Ansteuerung von Schrittmotoren ist, diese Pulse in einem timergesteuerten Interruptprogramm zu erzeugen. Dadurch kommen die Pulse immer gleichmäßig und du brauchst im Hauptprogramm nicht auf das timing zu achten.
Als Beispiel hier mal die wichtigsten Teile aus meinen Programm. (hoffe ich hab beim Zusammenkürzen nichts wichtiges weggekürz)
Die "waitms 10" im Hauptprogramm sind nur geschätzt, keine Ahnung ob der Motor damit ruckfrei beschleunigt/bremst.
Code:'################################################### ' Schrittmotorsteuerung '################################################### $crystal = 8000000 'Quarzfrequenz 'Konfiguration Schrittmotoren Config Pinc.5 = Output 'linker Schrittmotor Drehrichtung 0=links / 1=rechts Config Pinc.3 = Output 'linker Schrittmotor Impuls Config Pinc.4 = Output 'rechter Schrittmotor Drehrichtung 0=links / 1=rechts Config Pinc.2 = Output 'rechter Schrittmotor Impuls ' Timer0 Impulse für die Motoren Config Timer0 = Timer , Prescale = 64 On Ovf0 Motoren 'Bei Überlauf wird das Unterprogramm "Motoren" ausgeführt Enable Timer0 'Timer aktivieren Stop Timer0 'Timer anhalten Enable Interrupts 'Interrupts anschalten 'Variable Dim Vl As Byte 'Geschwindigkeit Linker Schrittotor Dim Vr As Byte 'Geschwindigkeit rechter Schrittotor Dim Vzl As Word 'Zähler Geschwindigkeit links Dim Vzr As Word 'Zähler Geschwindigkeit rechts Dim Schrittelinks As Word 'Zähler Schritte links Dim Schritterechts As Word 'Zähler Schritte rechts Dim I As Byte 'Schleifenzähler '************************************************************************* ' +++++++++++++ Hauptprogramm ++++++++++++++ '************************************************************************* ' ' Die Variablen Vl und Vr bestimmen die Geschwindigleit der Motoren ' je kleiner der Wert ist, desto schneller dreht der Motor ' Wie klein der Wert maximal werden darf, hängt von den Motoren, ' der Taktgeschwindigkeit der Prozessors und der Einstellung des Interrupttimers ab ' (bei mir ist Vmax=30) ' Vl bzw. Vr =0 stopt den Motor '------------------------------------------------------------------------- Start Timer0 Portc.5 = 1 'Drehrichtung der Motoren Portc.4 = 0 For I = 80 To 30 Step -1 'Beschleunigen Vl = I Vr = Vl Waitms 10 Next I Schrittelinks = 0 'Fahren Do Loop Until Schrittelinks = 1000 For I = 30 To 80 'Bremsen Vl = I Vr = Vl Waitms 10 Next I Wait 1 Stop Timer0 End 'end program '************************************************************************* ' ------------------ Subs ------------------- '************************************************************************* Motoren: Timer0 = 220 If Vl > 0 Then If Vzl = 0 Then Vzl = Vl If Portc.3 = 0 Then Portc.3 = 1 Incr Schrittelinks Else Portc.3 = 0 End If Else Decr Vzl End If End If If Vr > 0 Then If Vzr = 0 Then Vzr = Vr If Portc.2 = 0 Then Portc.2 = 1 Incr Schritterechts Else Portc.2 = 0 End If Else Decr Vzr End If End If Return '===========================================







)
Zitieren

Lesezeichen