Guten Tag.
Ich habe einen Motor mit Drehgeber. jetzt möchte ich die Pulse zählen,
die er "zurücklegt". ich habe die Leitung des Drehgebers an den Pin PD13
geführt. Im Datenblatt vom Motor steht:
6 Impulse pro Umdrehung - Pullup Spannung max. 6VDC - open drain
So habe ich den Pin entsprechen initialisiert:
1 | GPIO_InitTypeDef GPIO_InitStructurePB;
|
2 | GPIO_InitTypeDef GPIO_InitStructure;
|
3 | //
|
4 | EXTI_InitTypeDef EXTI_InitStructure;
|
5 | NVIC_InitTypeDef NVIC_InitStructure;
|
6 |
|
7 | RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); // Enable the Clock for Port D
|
8 |
|
9 | // Configure PD.13 FG -------------------------
|
10 | GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
|
11 | GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
|
12 | GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
|
13 | GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
|
14 | GPIO_Init(GPIOD, &GPIO_InitStructure);
|
15 |
|
16 | EXTI_InitStructure.EXTI_Line = EXTI_Line13; // External Interrupt on Line 5
|
17 | EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; // Set the Interrupt Mode
|
18 | EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; // Set the Interrupt trigger Mode
|
19 | EXTI_InitStructure.EXTI_LineCmd = ENABLE; // Enabele the Interrupt Line
|
20 | EXTI_Init(&EXTI_InitStructure);
|
21 |
|
22 | NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
|
23 | NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
|
24 | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
|
25 | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
26 | NVIC_Init(&NVIC_InitStructure);
|
27 | NVIC_EnableIRQ(EXTI15_10_IRQn);
|
Der Interrupt Handler sieht dann so aus:
1 | void EXTI15_10_IRQHandler(void)
|
2 | {
|
3 | int cnt = 0;
|
4 | cnt = get_Mot_FG_CNT();
|
5 | set_Mot_FG_CNT(cnt++);
|
6 | EXTI_ClearITPendingBit(EXTI_Line13);
|
7 | }
|
Das seltsame ist, der Interrupt Handler wird auch ausgeführt, wenn ich
gar nichts am Pin angeschlossen habe. Auch dann wenn ich den Enable gar
nie freigebe.
Das andere Problem ist, dass ich gar keine Pulse am Drehgeber habe. Kann
es sein, dass der Interne Pullup ca. 40kOhm zu klein ist? Habe
zusätzlich einen 50kOhm vom Pin auf 3.3V geschlossen, funktionierte
ebenfalls nicht.
Ich habe sonst niergends Interrupts auch der Pin PD13 ist auf dem
MCBSTM32F400er Board nicht andersweitig belegt.
Vielleicht hat jemand von euch eine Idee?
Vielen Dank und Grüsse
MC Bu