So, dann werde ich den Schrittmotor mal anklemmen. Allerdings stellt sich die Frage, welches Kabel auf welchen Pin? Der Schrittmotor hat die Kabelfarben gelb, rot, grün und blau. Hat jemand einen Tip? In den Dokus steht nichts.
Druckbare Version
So, dann werde ich den Schrittmotor mal anklemmen. Allerdings stellt sich die Frage, welches Kabel auf welchen Pin? Der Schrittmotor hat die Kabelfarben gelb, rot, grün und blau. Hat jemand einen Tip? In den Dokus steht nichts.
Die Kabelfarben unterscheiden sich von Motor zu Motor erheblich und folgen keinem festen Schema. Musst du wohl oder übel durchmessen, welche Kabel miteinander verbunden sind. Da du 4 Kabel hast, ist der Motor mit Sicherheit bipolar und die Kabelpaare sollten sich so problemlos mit Widerstandsmessung herausfinden lassen.
Die Kabelpaare habe ich gefunden: Gelb und Blau, sowie Grün und Rot. Ich habe einfach mit dem Voltmeter getestet, bei welchen beiden Kabel ein Durchfluss war.
Wie messe ich den Wiederstand und was sagt mir das Ergebnis?
Mit Widerstandsmessung hätte man das auch herausfinden können, braucht man halt keine extra Spannungsquelle. Mit den Widerstandswerten kannst du auch nicht viel anfangen, da die ja nur statisch sind. Die dynamischen Anteile sollten überwiegen, lassen sich aber schlecht messen. Wichtig ist erstmal, die Spulen herausgeunden zu haben.
Wie find ich denn jetzt heraus welches Kabelpaar auf 1A und 1B und welches 2A und 2B kommt? Ich meine das ist egal, oder?
Würde folgendes gehen?
Erstes Paar:
Gelb auf 1A
Blau auf 1B
Zweites Paar:
Grün auf 2A
Rot auf 2B
Für die grundsätzliche Funktion ist nur entscheidend, daß du jede Wicklung an eine eigene H-Brücke anschließt und nix über Kreuz.
Die Drehrichtung kannst du umkehren jeweils durch umpolen !einer! Wicklung.
Werden beide Wicklungen umgepolt, dann ist das wie ein doppeltes Minus und hebt sich auf.
So wie du vorschlägst, ist es erstmal OK.
Ich habe jetzt sämtliche Kabelpositionen durchprobiert Gelb auf 1A, 1B, usw. , der Schrittmotor dreht sich nicht. Er zuckt jedesmal kurz, wenn ich den Strom einschalte.
Woran kann es liegen. Hier mein Programm. Gibts da evtl. einen Fehler?
Code:' PWM Testprogram
'''''$prog , 255 , &B11011100,
$prog , 255 , &B11011001,
$regfile = "m2560def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 68 '44
$crystal = 16000000 'Quarzfrequenz
$baud = 19200
Config Pind.5 = Output
Led Alias Portd.5
Config Pinc.0 = Output ' Stiftleiste JP 2; Pin 3; PC0
Stepper1_reset Alias Portc.0
Config Pinc.1 = Output ' Stiftleiste JP 2; Pin 4; PC1
Stepper1_rotational_direction Alias Portc.1
Config Pinc.2 = Output ' Stiftleiste JP 2, Pin 5; PC2
Stepper1_enable Alias Pinc.2
Dim Stepper1_speed As Integer
Echo Off
' Bei dem Motortreiber 18V15 von Pololu liegt die PWM Frequenz (kHz) bei max. 40 kHz, siehe Doku des Motorboard auf Seite 3
' Formel zur kHz-Berechnung: Ausgangsfrequenz = (Quarzfrequenz/Prescale ) /(Timerauflösung*2)
' Quarzfrequenz = $crystal = 16000000
' Bei 16 Bit Timer: Prescale = 1, 8, 64, 256, 1024 für Timer1 Seite 164 der Doku für ATMEGA2560
' Bei 8 Bit Timer/ Counter2: Prescale = 1, 8, 32, 64, 128, 256 , 1024
' Timerauflösung = Bit, bzw. Pwm = 8, Bit ist dann 8. Mit dem Wert Bit wird die Zahl 2 hochgenommen => 2 hoch 8 = 256
' (16000000:1024):(256*2) = 30,517578125 kHz
' Timer1 ist ein 16 Bit Timer, wird in diesen Fall auf 8 Bit gesetzt.
'Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1024 ' Stiftleiste JP 1; Pin 24
' (16000000:1024):(256*2) = 30,517578125 kHz
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1024 ' 3,814697265625 ' Stiftleiste JP 1; Pin 24
Timer1 = 16
Led = 0 ' LED einschalten
Stepper1_enable = 1 ' Stepper1 ausschalten
Wait 1
Stepper1_enable = 0 ' Stepper1 einschalten
Wait 1
Stepper1_reset = 1
Waitms 1
Stepper1_reset = 0
Waitms 1
Stepper1_reset = 1
Stepper1_rotational_direction = 1
Stepper1_speed = 100
Wait 5
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Do
Toggle Led
Waitms 250
' Der max. Wert von Compare1a liegt bei 2 hoch Bit-Wert => 2 hoch 8 = 256. Da ab 0 gezählt wird, ist der max. Wert für einen 8 Bit-Timer 255
Compare1a = Stepper1_speed ' Stiftleiste JP 1; Pin 24
Loop
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End
Was willst du überhaupt mit PWM? Der Schrittmotorcontroller reagiert nur auf steigende oder fallende Flanken (je nach Treiber), und die kommen bei PWM in der konstanten PWM-Frequenz. Du brauchst aber veränderliche Frequenz, da jeden Puls einen Schritt weiterbewegt wird. Piept der Motor denn? Sieht nämlich so aus, als ob die PWM-Frequenz so hoch ist, dass der Schrittmotor nicht hinterher kommt. Ich verwende zum Testen von Schrittmotortreibern gerne einen einfachen Inverter-Taktgeber, dessen Frequenz sich mit nem Poti verändern lässt und setz den an den Takteingang vom Treiber. An Richtung kann man dann einen Umschalter mit Anschlüssen nach H und L setzen.
Das mit dem Taktgeber wäre eine Alternative. Ich bin im Moment allerdings im Hotel und kann von hier aus nichts bestellen:-(
Ich habe das Programm geändert: PWM habe ich jetzt ausgebaut und anstelle einen Timer definiert.
Allerdings dreht sich nix. Ich habe alle möglichen Kabelpositionen mit den Kabelpaaren ausprobiert.
Folgende Pins habe ich an den Controller angeschlossen:
Dir
Step
Enable
VMOT
GND
2B
2A
1A
1B
VDD
GND
Hier noch einmal das geänderte Programm:
Ist das Programm so in Ordnung?Code:' Stepper Testprogram
$prog , 255 , &B11011001,
$regfile = "m2560def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 68 '44
$crystal = 16000000 'Quarzfrequenz
$baud = 19200
Config Pind.5 = Output
Led Alias Portd.5
Config Pinc.0 = Output ' Stiftleiste JP 2; Pin 3; PC0
Stepper1_reset Alias Portc.0
Config Pinc.1 = Output ' Stiftleiste JP 2; Pin 4; PC1
Stepper1_rotational_direction Alias Portc.1
Config Pinc.2 = Output ' Stiftleiste JP 2, Pin 5; PC2
Stepper1_enable Alias Pinc.2
Dim Stepper1_speed As Integer
Dim I1 As Integer
Echo Off
Led = 0 ' LED einschalten
Stepper1_enable = 1 ' Stepper1 off
I1 = 0
Do
Toggle Led
Waitms 75
I1 = I1 + 1
Loop Until I1 = 20
Wait 5
Stepper1_rotational_direction = 1
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Do
Toggle Led
Waitms 200
Stepper1_enable = 0 ' Stepper1 on
Config Timer0 = Timer , Prescale = 256 ' Stiftleiste JP 1; Pin 26
Timer0 = 131
Loop
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End
Vielen Dank.
Wenn ich das richtig sehe, wird nirgends der Timer definiert, nirgends eingeschaltet und nirgends die zugehörige Sub aufgerufen. Lies dir mal das hier durch, dann wird dir hoffentlich klar, wie der Timer funktioniert.