Gast
#1717432
Guten Tag Leute Für meinen Laminator, welcher verschieden breite Platinen mit der Toner-Transfermethode "bedrucken" soll, brauche ich eine Vorschubregelung, damit die Platine homogen "bedruckt" wird. Das habe ich mit einem Quadraturencoder (HEDL 5540) und einem Mikrocontroller realisiert, was soweit auch funktioniert. Der uC (c8051f330, silabs) besitzt ein PCA Modul, welches eine Capture Funktion hat. Ich habe einen Ausgang des Encoders an den uC verbunden. Bei jeder pos. Flanke dieses Encodersignals wird ein Interrupt ausgelöst. Da wird jedesmal ein "Capture" des im Hintergrund laufenden Zählers gemacht. Danach wird die Zeitdifferenz des aktuelle und des vorhergehenden Interrupts berechnet, was mir die Zeit zwischen zwei pos. Flanken ergibt, also den Kehrwehrt der Drehfrequenz (im code 'rpm') meines Motors. Das sieht so aus:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Das scheint Ansich auch alles zu funktionieren, jedoch wenn ich diesen Wert per UART auf dem PC in einem Diagramm anzeigen lasse, habe ich ca alle 2-3 Sekunden Spikes, die manchmal den doppelten Wert anzeigen. Und genau da liegt das Problem. Diese Werte machen meine Regelung verrückt. Ich könnte die zwar filtern, aber lieber möchte ich die Ursache dieses Verhaltens ermitteln! Ich dachte zuerst, dass der Encoder zu viele Interrupts generiert und der uC nicht mehr mit Abarbeiten nachkommt. Jedoch sind diese Spikes nicht von der Drehzahl abhängig (soweit ich das beobachten konnte). Weiter dachte ich, dass es evt. ein Overflow sein könnte. Dies ist jedoch nur möglich, wenn sich die Werte an einer Bereichsgrenze aufhalten würden. Das ist leider auch nicht der Fall. Des weiteren habe ich versucht, alles anderen Interrupts abzuschalten. Das half leider auch nichts. Hat sowas auch schon jemand gehabt? Gibt es sonst noch Sachen, die ich austesten / beachten sollte? Den kompletten Code könnte ich nachrücken, falls erwünscht, jedoch denke ich, dass es etwas grundlegenderes ist, was ich noch nicht verstanden habe. Viele Grüsse, yoshi

