Controllertakt: 16000000 Hz -> 1/Takt=0,0625 µs
0,0625 µs * 265 (Prescaler) = 16 µs
Alternativ kannst du auch den Controllertakt durch den Prescaler Teilen und dann das Reziproke daraus bilden, kommt aufs selbe hinaus.
1/51,776ms = 19,3 Hz
Controllertakt: 16000000 Hz -> 1/Takt=0,0625 µs
0,0625 µs * 265 (Prescaler) = 16 µs
Alternativ kannst du auch den Controllertakt durch den Prescaler Teilen und dann das Reziproke daraus bilden, kommt aufs selbe hinaus.
1/51,776ms = 19,3 Hz
Vielen Dank!
Ich habe den Timer1 eingebaut und jeweils ein 20 Hz und 200 Hz starkes Signal erzeugt.
Leider dreht sich der Schrittmotor immer noch nicht
Hier noch einmal das Programm mit 200 Hz, ein Fehler erkenn ich nicht. Wenn ich an dem Ausgangspin Pin 6 eine LED anschließe blinkt sie wunderbar.
Sollte das Programm in Ordnung sein, kann der Fehler an folgender Stelle liegen: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 Timer1 = Timer , Prescale = 64 ' Stiftleiste JP 1; Pin 26 Enable Timer1 On Timer1 Timer_irq Enable Interrupts Timer1 = 64286 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Do Toggle Led Waitms 200 Loop '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' End 'Dies ist der Programmteil, der in dem von ihnen gewählten 'Intervall aufgerufen wird Timer_irq: Timer1 = 64286. Stepper1_step = 0 : Waitus 1 : Stepper1_step = 1 Return
Falsche Frequenz bei der Schrittmotoransteuerung
Falscher Kabelanschluss
Defekt beim Schrittmotor
Defekt beim Treiber
Hat jemand noch einmal eine Idee, vielleicht hat jemand den gleichen Schrittmotor?
Mercury Motor
SM-42BYG011-25
48/2011
http://www.sparkfun.com/products/9238
Hast du den Treiber schonmal getestet? Reicht ja ein einfacher Taktgeber für Step und ein Schalter für Direction. Dann kann man da schonmal die Fehler ausschließen.
Outputs werden übrigens so konfiguriert:
Config Portc.0 = Output
aber
Config Pinc.0 = Input
So kann man da zumindest nichts falsch machen.
Solche Sachen wie Stepper1_enable und Stepper1_reset würde ich erstmal auch aus dem Code nehmen, um es übersichtlicher zu halten. Zum Testen ist es dann meist einfacher, diese Anschlüsse mit Kabel auf High oder Low zu legen. Weißt du denn schon, welche Pegel an diesen Anschlüssen die Richtigen sind?
An der Frequenz kann es jedenfalls nicht liegen. Wäre die zu hoch, würde er zumindest Geräusche machen.
Ich kann wirklich nur raten, sich erstmal mit dem Treiber vertraut zu machen, bevor man mit dem µC da ran geht. Wenn man zu viel auf einmal macht, findet man die Stelle mit dem Problem nicht mehr so leicht. Musst versuchen, den Fehler systematisch einzukreisen.
Jetzt, wo ich es sehe: Pin 6 ist das Äquivalent zu Stepper1_step, richtig? Wenn der richtig umgeschaltet wird, kann das Problem schonmal nicht da liegen. Ich tippe mal auf Reset (kommt das im Code überhaupt irgendwo vor, außer in der Definition?) oder Enable. Oder mal ne ganz banale Frage: Am Treiber ist auch die Leistugsversorgung angeschlossen?
Übrigens, für wenig Geld gibt es die Platine StepRocker von Trinamic. Ich habe mich für Ics dieses deutschen fabless Herstellers entschieden. Mit der kostenlosen IDE kann man man sehr einfach testen, durch Eingabe der Schrittezahl. Lässt man also nur einen Schritt jeweils machen, so kann man die Pegel an den Leitungen zum Motor messen und so sehen ob man den Motor richtig versorgt. Die Platine ist so klein, dass ihr Einsatz auch als Alternative zu den Produkten von Robotikhardware.de gesehen werden kann, bzw. sollten die es ins Programm aufnehmen. Das Bauteil besitzt neben der Unterstützung von Mikroschritten auch Logik zur Erkennung von Schrittfehlern. Hier der Link bei Conrad.
MfG
Hellmut
Lesezeichen