Hallo,
bin gerade bei der Auswertung von Winkel und Winkelgeschwindigkeit eines
Incremental Encoders. Nutze dafür beim STM32F4 Disc. den Encoder
Interface Mode, der bis dato funktioniert.
main.c:
1 | #include "ch.h"
|
2 | #include "hal.h"
|
3 | #include "test.h"
|
4 |
|
5 | #define ARM_MATH_CM4
|
6 | #include "arm_math.h"
|
7 |
|
8 | /*
|
9 | * Application entry point.
|
10 | */
|
11 | int main(void) {
|
12 |
|
13 | halInit();
|
14 | chSysInit();
|
15 |
|
16 | // ENCODER STUFF
|
17 | /* Enables Encoder Input on CH1 for Timer 3 on PB4 */
|
18 | palSetPadMode(GPIOB, GPIOB_PIN4, PAL_MODE_ALTERNATE(2));
|
19 | /* Enables Encoder Input for CH2 Timer 3 on PB5 */
|
20 | palSetPadMode(GPIOB, GPIOB_PIN5, PAL_MODE_ALTERNATE(2));
|
21 | /* Enables Zero Mark Indicator from Encoder Input for CH3 Timer 3 on PC8 */
|
22 | palSetPadMode(GPIOC, GPIOC_PIN8, PAL_MODE_ALTERNATE(2));
|
23 | GPIOC->PUPDR |= GPIO_PUPDR_PUPDR8_1;
|
24 |
|
25 | // Encoder Stuff
|
26 | encoder_tim3_init();
|
27 |
|
28 | while (true) {
|
29 | }
|
30 | }
|
In "encoder_tim3_init" nehme ich die Einstellungen nach Reference Manual
0090 vor. Habe ein Input capture 1,2,3 filter vorgesehen. Der
Inkrementalencoder liefer mir 4096 Inkremente/Umdrehung und 6600
Umdrehungen je Minute ergeben 450k Imkremente/Sekunde, 2.2µs je
Inkrement, Timer 3 mit 42MHz -> 92 Takte je Inkrement.
Einstellung für IC1F und IC2F 0011: fSAMPLING=fCK_INT, N=8
Für IC3F reicht 0010: fSAMPLING=fCK_INT, N=4
Für die weiteren Berechnungen werde ich die Zählrichtung, Registerzeit
und den Nullldruchgang brauchen. Werte stehen in folgenden Registern.
1 | // Direction
|
2 | (TIM3->CR1 & TIM_CR1_DIR)>>(TIM_CR1_DIR-1);
|
3 | // RegisterTime
|
4 | TIM3->CCR4;
|
5 | // ZeroMark
|
6 | TIM3->CCR3;
|
Wie soll ich die Auswertung von Winkel und Winkelgeschwindigkeit am
besten bewerkstelligen? Mit einem Circular Buffer, oder über Interrupts?
Für die Winkelgeschwindigkeit muss ich Differenzenbildung anwenden
(vermutlich). Hat da jemand von euch Erfahrung drin, bzw. kann mir
weiterhelfen? Bin über jegliche Hilfe dankbar.
Lg Gabriel