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.
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.
Ich glaub, da hast du was durcheinandergebracht.
Den Timer0 kannst du nur bis 255 einstellen, Timer1 geht bis 65535.
Wenn du dann den Timer auf 62300 stellst, zählt er von da an bis 65535 und läuft dann über. Macht 3236 Zeiteinheiten. Bei 16Mhz Taktfrequenz hast du eine Taktzeit von 0,0625µs, multipliziert mit dem Prescaler ist eine Zeiteinheit des Timers 16µs. 3236*16µs ergibt einen Takt von 51,776ms, ergo eine Frequenz von eta 19,3 Hz. Eigentlich müsste der Schrittmotor damit schon langsam laufen. Ich schätze mal, wenn du Timer1 verwendest, sollte das laufen, vorrausgesetzt natürlich, du hast den Treiber richtig angeschlossen![]()
Aha, gut. Dann stell ich morgen früh mal auf Timer1 um. Kannst du mir noch einmal erklären wie du auf folgende Werte kommst:
Taktzeit 0,0625µs
Zeiteinheit des Timers 16µs
von 51,776 ms auf 19,3 Hz
Vielen Dank für deine Mühe![]()
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?
Lesezeichen