Gast
#2539039
Hallo liebe µC-Freunde, ich hoffe hier nicht gleich auf andere Beiträge verwiesen zu werden weil das Thema schon so oft durchgekaut wurde aber ich bin leider nicht fündig geworden. Also versuch ich´s mal. Für eine Projektarbeit soll ein Schrittmotor (1,8°) über ein Joystick angesteuert werden welcher eine Lineareinheit über einen Zahnriemen antreibt. Zur Positionserfassung ist auf dem Stepper ein Encoder (500Imp/U) montiert. Als Ansteuerung des Leistungsteils kommt ein Freescale (Motorola) HCS12 (16Mhz) zum Einsatz. Dieser besitzt einen 16bit Timer mit 8 Kanälen den Kanal 0 benutzen wir zur Takterzeugung für den Treiber über den entsprechenden Timerausgang (Toggle) und den Kanal 1 zur Erfassung des Encoders mit dem Code vom Herrn Dannegger. Beide Kanäle lösen einen Compare Interrupt aus, wobei der für die Erfassung immer min. doppelt so schnell als der für den Treiber ist. Wenn wir nun die Referenzfahrt starten und die Impulse der gesammten Strecke aufnehmen, bei ca. 300Hz, läuft alles nach "Plan" doch sobald wir die Mittenpos. mit normaler Geschwindigkeit ca.6khz anfahren wollen werden die Takte zwar ausgegeben aber der Timer-Ausgang bleibt in unregelmäßigen Abständen entweder auf High oder Low (Oszi). Die Zeit der Ausetzer bewegt sich so um die 66ms. Ich kann ja nachvollziehen das der ein oder andere Interrupt verschluckt wird da die aufaddierten Comparewerte mit dem aktuellen Timer zufällig mal aufeinander treffen aber gehen mir dann gleich 66ms flöten??? Ich hoffe ich konnte es einigermaßen nachvollziehbar rüber bringen wenn nicht werde ich es ja an der nicht folgenden Reaktion merken ;) . Ansonsten einfach nochmal nachfragen. Wäre echt nett wenn sich jemand erbarmen würde und uns evtl ein Tipp geben kann. Vielen Dank im Vorraus Yorom