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
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.
So, ich hoffe der Timer0 ist jetzt in Ordnung
Allerdings dreht sich der Schrittmotor immer noch nicht.
Wahrscheinlich ist die Frequenz zu hoch, sollte nach meinen Erkenntnissen z.Z. bei 62500 Hz liegen, oder? Laut einem Beitrag, ziemlich am Anfang meines Problems, sollte der Schrittmotor 200 Hz vertragen können, d.h. ich lasse den Timer0 von 62300 an zählen und habe somit eine Frequenz von 200 Hz. So meine Annahme, aber trotzdem dreht sich der Schrittmotor immer noch nichtL
Was läuft falsch?
Hier noch einmal das geänderte Programm:
Hat jemand einen Tipp?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_direction Alias Portc.1 Config Pinc.2 = Output ' Stiftleiste JP 2, Pin 5; PC2 Stepper1_enable Alias Pinc.2 Config Pinc.3 = Output ' Stiftleiste JP 2, Pin 6; PC3 Stepper1_step Alias Pinc.3 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_direction = 1 Stepper1_enable = 0 ' Stepper1 on '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Config Timer0 = Timer , Prescale = 256 ' Stiftleiste JP 1; Pin 26 Enable Timer0 On Timer0 Timer_irq Enable Interrupts Timer0 = 62300 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Do Toggle Led Waitms 70 Loop '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' End 'Dies ist der Programmteil, der in dem von ihnen gewählten 'Intervall aufgerufen wird Timer_irq: Timer0 = 62300. Stepper1_step = 0 : Waitus 1 : Stepper1_step = 1 Return
Vielen Dank.
Lesezeichen