Hallo Ich erfasse die zurückgelegten Pulse von einem Motor über einen Encoder mit dem Timer3 im Encoder Mode. Die Signale liegen an Pin 6 und 7 des Ports C. Das funktioniert. Um die Ist- Geschwindigkeit ermitteln zu können, möchte ich an Pin 6 einen externen Interrupt auslösen und dann einen Timer laufen zu lassen zwischen den Interrupts. Jetzt meine Frage, kann ich beim STM32F405 einen Eingang PC6 als Encoder Eingang und gleichzeitig als externer Interrupt Sourcepin einsetzen? Bis jetzt sind meine alle gescheitert. Danke und Gruss MC Bu
Gast
#3670256
Wann soll der Interrupt denn ausgelöst werden? Das habe ich nicht genau verstanden
Jedesmal bei einer positiven Flanke an PC6. Dazwischen messe ich mittels Timer die Zeit zwischen den Interrupts. Incrementenauflösung des Encoders nach Datenblatt 100 Pulse pro Umdrehung. Danke und Gruss MC Bu
Init des externen Interupts
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
GPIO Init
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
Interrupt Handler (Testphase)
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
wenn der Encoder funktioniert, warum dann nochmal einen externen Interrupt benutzen ? du kannst doch zyklisch (mit einem Timer) den aktuellen Encoderwert auslesen und die Differenz zum letzten Wert bilden, damit hast du die Drehzahl ermittelt Gruss Uwe
Ich versuchte dies in einem Thread (all 10ms), dies ist jedoch zu ungenau. Mit einem Timer quasi anstelle eines externen Interrupts ein Event? Das schau ich ich mir mal an. Danke für den Tipp. Gruss MC Bu
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.