Hallo zusammen, ich möchte 6 Encoder mit jeweils 3 Channeln (also 18 Leitungen) an den STM32F4(168Mhz) anschließen. Allerdings stehen mir dafür nicht genug external interrupts zur verfügung. Was gibt es sonst für Möglichkeiten? Einfach die Pins in einer Dauerschleife auslesen und mit dem letzten Zustand vergleichen um Flanken zu detektieren? Die max. Drehzal führt zu ca. 20000 Flankenwechseln pro Sekunde. Müsste also die Eingänge mit ca. 40KHz abfragen wenn ich auf der sicheren Seite sein möchte. Wie lange dauert denn das auslesen eines Eingangs ungefähr? Ich will nur die Flankenwechsel zählen...die Zeiten dazwischen sind mir nicht wichtig. Oder gibt es externe Bausteine die direkt mit einem Encoder verbunden werden können und z.B. über SPI oder ähnliches vom Mikrocontroller ausgelesen werden können? Gruß Tobi
Tobias K. schrieb: > 6 Encoder mit jeweils 3 Channeln Was sind das für Encoder? Für normale Quadraturencoder mit 2 Anschlüssen besitzen die STM32-Timer bereits ein integriertes Encoder-Interface, so dass direkt der Timer vom Encoder "betätigt" wird.
Danke, ja es sind normale Quadraturencoder. Allerdings brauche ich wie gesagt keine Timer. Die Timer sind leider auch schon anderweitig belegt. Ich will nur die Pulse zählen.
Aber wieso hast du nicht genug externe Interrupts? Es ist doch jeder Pin interruptfähig. Ansonsten kannst du ja ein paar kleinere STMs per SPI o.ä. ankoppeln, welche die Encoder auswerten und den Wert an den Haupt-µC weitergeben.
Jup jeder ist interrupt fähig. Aber alle mit der gleichen Nummer sind zum gleichen IT Handler durchgeroutet. z.B. PC0 ist die gleiche Leitung wie PB0 oder PA0. Da kann man dann nicht mehr unterscheiden wos herkommt.
Tobias K. schrieb: > Danke, ja es sind normale Quadraturencoder. Allerdings brauche ich wie > gesagt keine Timer. Die Timer sind leider auch schon anderweitig belegt. > Ich will nur die Pulse zählen. dann hast Du was grundlegend falsch geplant oder programmiert. Timer kann man durchlaufend benutzen. Zählen mit ext. Interrupts ? Suche mal hier nach Peters Routine. Es gibt unzählige Beiträge zu dem Thema.
Hab glaube das von Peters Routine gefunden. Wenn ich das richtig sehe liest er auch ständig aus oder zählt die Flanken mit interrupts. Das integriertes Encoder-Interface vom STM ist zwar super geht aber meines Wissens nach nur mit Timer2-5. Aber so könnte ich den Rest auf externe interrupts legen.
@Tobias K. (Firma: fruitcore) (jayrock1987) >Hab glaube das von Peters Routine gefunden. Wenn ich das richtig sehe <liest er auch ständig aus oder zählt die Flanken mit interrupts. Mit einem TIMER-Interrupt! Nicht mit einem Pin Change Interrupt! Siehe Drehgeber. >Das integriertes Encoder-Interface vom STM ist zwar super geht aber >meines Wissens nach nur mit Timer2-5. Aber so könnte ich den Rest auf >externe interrupts legen. Falsch! Nimm einen 40 kHz Timer-Interrupt und taste dort die Eingänge ab.
Tobias K. schrieb: > Oder gibt es externe Bausteine die direkt mit einem Encoder verbunden > werden können und z.B. über SPI oder ähnliches vom Mikrocontroller > ausgelesen werden können? Beitrag "mini Quadraturdekoder + 32 Bit Zähler + TWI, Attiny25"
sorry Michael, den hatte ich nicht im Visier. :-) Würde aber gut passen als "Workaround" Da sieht man mal wieder das 32-bit nicht alles ist ... wenn man die Grundlagen nicht beherrscht. C zu lernen ist eben doch einfacher als Hardware zu verstehen.
Mach es so wie Falk vorgeschlagen hat und nimm einen Timer-Interrupt, in dem Du alle 6 Encoder behandelst. Bei 168Mhz belastet das den M4 nicht nennenswert, wenn Du nicht viel falsch machst. Externe Chips sind bei dieser Aufgabe nur überflüssiger Aufwand. Viele Grüße, Stefan
Stephan H. schrieb: > sorry Michael, den hatte ich nicht im Visier. :-) > Würde aber gut passen als "Workaround" Keine Ursache, aber wie Du siehst, ist ein Blick über den Tellerrand manchmal nicht so einfach ;-) Stefan K. schrieb: > Externe Chips sind bei dieser Aufgabe nur überflüssiger Aufwand.
Danke für die Tipps. hört sich alles gut an. Klasse Forum hier ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.