6x3Channel Encoder an Mikrocontroller - nicht genug External Interrupts am STM32F4

OP #4649633
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
Gast #4649669
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.
#4649684
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.
OP #4649711
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.
#4649715
@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.
#4649876
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.
#4649940
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.