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.