Passend zum L297/298 Kompletttreiber gibts natürlich auch einen programmierbaren Controller .
Dieser verfügt auch über eine RS232 mit der angesteuert werden kann. .
Darwin
Das File habe ich in den Download-Bereich verschoben
https://www.roboternetz.de/phpBB2/dl...le&file_id=163
DEMO für Schrittmotoransteuerung:
Das Proggi läuft 10 verschiedene zufällige Positionen an, verharrt dann
an dieser kurz und läuft die komplette Strecke zurück. Dort "zittert der Motor kurz (Positio = 0) und das ganze Spiel geht von vorne Los.
Geschrieben für Bascom und AT90S2313 (8MHz) mit L297-298_4A-Driver.zip
https://www.roboternetz.de/phpBB2/viewtopic.php?t=2777
Das Proggie eignet sich auch gut gür einen Dauertest
Bascom Source:
Code:
'*******************************************************************************
' "Protobed-AT90S2313" mit
' "2A Stepper Motor Controller / Driver (Platine L297-L298_V1.35) an Port B
'*******************************************************************************
$regfile = "2313def.dat"
$crystal = 8000000
Config Portb = Output
' Hier Anpassung vornehmen:
' Schritt an den verwendeten Motor anpassen
Const M_schritt = 1.8 ' Winkel für einen Schritt
' =======
Const M_pusdauer = 5000 ' Drehgeschindigkeit
Const M_completeturn = 360 / M_schritt
' Alias für die Ports
M_cw Alias Portb.0 ' Richtung: 1 = CW - 0 = CCW
M_clk Alias Portb.1 ' Schritt (Negativer Puls)
M_halfstep Alias Portb.2 ' Schritt: 0=voll; 1=halb
M_noreset Alias Portb.3 ' 0 für Reset
M_enable Alias Portb.4 ' 1 für Enable, 0 für Disable
M_cyl Alias Portb.5 ' Rückmeldung 1 Zyklus
Dim X As Integer
Dim Y As Integer
Dim Spd As Long
Dim Awayfromhome As Integer
Dim Homehelp As Integer
Dim Rndwert As Long
Dim Rndrichtung As Long
' Ports schalten
Reset M_halfstep
Set M_noreset
Set M_cw
Reset M_cyl
Set M_clk
Set M_enable
' MAIN() ***********************************************************************
Print "Motor mit " ; M_completeturn ;
Print " Schritten für eine Umdrehung (" ;
Print M_schritt ; "°/Schritt)."
Print
Wait 1
Gosub Startup
Wait 1
Gosub Indicate
Waitms 250
Gosub Indicate
Wait 3
Do
Gosub Zufall
Wait 1
Gosub Heimatposition
Wait 1
Gosub Indicate
Wait 3
Loop
End 'end program
' SUBs *************************************************************************
Zufall:
Awayfromhome = 0
For X = 1 To 10
Rndrichtung = Rnd(1000)
Rndwert = Rnd(m_completeturn)
If Rndrichtung > 500 Then
Print "Pos: " ; Awayfromhome ; " + " ; Rndwert
Awayfromhome = Awayfromhome + Rndwert
Set M_cw
Else
Print "Pos: " ; Awayfromhome ; " - " ; Rndwert
Awayfromhome = Awayfromhome - Rndwert
Reset M_cw
End If
For Y = 1 To Rndwert
Pulseout Portb , 1 , M_pusdauer
Next Y
Print "- Awayfromhome = " ; Awayfromhome
Waitms 250
Next X
Return
End 'end program
Heimatposition:
If Awayfromhome > 0 Then
Reset M_cw
Do
Pulseout Portb , 1 , M_pusdauer
Awayfromhome = Awayfromhome - 1
Loop Until Awayfromhome = 0
Else
Set M_cw
Do
Pulseout Portb , 1 , M_pusdauer
Awayfromhome = Awayfromhome + 1
Loop Until Awayfromhome = 0
End If
Return
Startup:
' Ganze Umdrehung
Set M_cw ' Clockwise
For X = 1 To M_completeturn
Pulseout Portb , 1 , M_pusdauer
Next X
' Ganze Umdrehung
Reset M_cw ' Counter Clockwise
For X = 1 To M_completeturn
Pulseout Portb , 1 , M_pusdauer
Next X
Pulseout Portb , 3 , 100000 'RESET
Awayfromhome = 0
Return
Indicate:
Reset M_cw ' Clockwise
For Y = 1 To 5
Pulseout Portb , 1 , M_pusdauer
Next Y
For X = 1 To 5
Set M_cw
' Clockwise
For Y = 1 To 10
Pulseout Portb , 1 , M_pusdauer
Next Y
Reset M_cw ' Counter Clockwise
For Y = 1 To 10
Pulseout Portb , 1 , M_pusdauer
Next Y
Next X
Set M_cw ' Clockwise
For Y = 1 To 5
Pulseout Portb , 1 , M_pusdauer
Next Y
Return
End 'end program[/color][/size]
Viel Spaß beim Spielen.
Lesezeichen