Forum: Mikrocontroller und Digitale Elektronik 6x3Channel Encoder an Mikrocontroller - nicht genug External Interrupts am STM32F4


von Tobias K. (jayrock1987)


Lesenswert?

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

von chris (Gast)


Lesenswert?

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.

von Tobias K. (jayrock1987)


Lesenswert?

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.

von chris (Gast)


Lesenswert?

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.

von Tobias K. (jayrock1987)


Lesenswert?

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.

von Stephan H. (stephan-)


Lesenswert?

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.

von Tobias K. (jayrock1987)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@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.

von m.n. (Gast)


Lesenswert?

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"

von Stephan H. (stephan-)


Lesenswert?

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.

von Stefan K. (stefan64)


Lesenswert?

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

von m.n. (Gast)


Lesenswert?

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.

von Tobias K. (jayrock1987)


Lesenswert?

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
Noch kein Account? Hier anmelden.