Hallo,

ich bin bei Konfiguration TIM2 als Compare Capture Timer.

Genau diesen Timer habe ich ausgewählt, weil:

"These Timers (TIM1, TIM2, and TIM3) are capable of handling quadrature (incremental) encoder signals and the digital outputs from 1 to 3 hall-effect sensors. Page 19"

SUPER!!! Genau das brauche ich, denn ich einen incremntal-Drehgeber steuern möchte.

Also dieser Timer - soweit ich richtig verstanden habe- kann als Capture Compare Unit verwendet werden.

Er besitzt 4-Chanels jeweils Counter und Compare/Capture_Register (CCR).

Wird es funktionieren, wenn ich:

1) Den Counter von CH-2 stelle ich so ein, dass er 65535 up-countet (16-Bit). sein PSC stelle ich auf 24 ein, somit ist der Counter_Clock 1MHz (24/24).Demzufolge countet der Counter pro 1µs. so braucht er ca. 65536*1µ= 65ms.

2) Der Capture Eingang ist über Signalleitung mit dem Geber_Pulssignal verbunden. Den konfiguriere ich so, dass er die Steigende Flanke captures. Hinter her stelle den PSC auf 4. So werden 4 steigende Flanken gecaptured, ist der Psc Voll danach wird den Counter-Stand ausgelesen und in CCR kopiert.

3) 1und 2 widerhole ich für den zweiten CH nämlich CH_3 mit dem Unterschied, dass der Capture die Fallende Flanke erwischen soll.

4) am Ende habe ich zwei Value (Zeit der 4-Steigende Flanke und Zeit der 4_Fallende Flanke), die werden durch den Copmare vergleichen und den sich daraus ergebenden Wer wird durch Interrupt im Main Program abgegeben.

So der Counter zählt ganz normal.
Der Capture beobachtet den Eingagnssignal(bei dem soll ich nur einstellen was soll er erfassen (steigende oder fallende) oder gibt noch was einzustellen?)
und der Compare vergleicht die Werte die sich im CCR befinden.

Den Code habe ich Wie geschrieben:

Hier ist die Konfiguration des Counters:

TIM2_Configuration.TIM_CounterMode= TIM_CounterMode_Up;
TIM2_Configuration.TIM_Prescaler= 24;// 24 MHz dividiert durch 24MHz ist 1MHz
TIM2_Configuration.TIM_Period=65535;// Counter zählt bis 65535
TIM2_Configuration.TIM_ClockDivision= 0X0;
TIM2_Configuration.TIM_RepetitionCounter= 0x0;
TIM_TimeBaseInit(TIM2,&TIM2_Configuration);

Hier sind die Configuration für Input Capture:

Input_Capture.TIM_Channel= TIM_Channel_2;// an ch_2 von Tim_2 ist der Drehsignal angeschlossen
Input_Capture.TIM_ICPolarity= TIM_ICPolarity_Rising;// bei Steigender Flanke wird erfasst
Input_Capture.TIM_ICSelection = TIM_ICSelection_DirectTI;
Input_Capture.TIM_ICPrescaler = TIM_ICPSC_DIV4;// jede Vier Flanke
Input_Capture.TIM_ICFilter = 0x0;

TIM_ICInit(TIM2, &Input_Capture);
TIM_Cmd(TIM2, ENABLE);// Der Counter von Tim2 wird eingeschaltet

Hier ist die CC_Interrupt

TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE);

Schließlich kommt die nested vector Tabelle.

/* Enable the TIM2 global Interrupt */

NVIC_InitStructure.NVIC_IRQChannel= TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriori ty=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
NVIC_InitStructure.NVIC_IRQChannelCmd= ENABLE;
NVIC_Init(&NVIC_InitStructure);

Ich bin jedem sehr DANKBAR, der mir weiter helfen kann.

LG.