hallo,
ich versuch gerade das Input Capture bsp der FW library entsprechend
meiner bedürfnisse zu adaptieren.
ich arbeite dabei mit dem stm32 discovery kit.
folgende fragen/probleme:
wenn ich den timer(und auch die restliche periph) mit 24Mhz takte kann
ich maximal 12mHz messen, richtig ?
was ist aber die kleinste zu messende frequenz ?
am trigger input pin eines pulsgenerators hängt ein gpiopin(der den
trigger für den generator liefert). der pulsgenerator gibt dann
verzögert einen puls aus, diesen zeitlichen abstand möchte ich messen.
dabei sollte der wert(watch locals fenster KEIL) ja ca gleich groß sein.
nur egal wie groß/klein ich die delaytime od pulsweite(generator) wähle,
weichen hintereinander gemessene werte stark von einander ab.
und wie gesagt der teil im programm(interrupts) welcher den
"gecapturten" wert berechnet wurde 1:1 vom bsp übernommen !
hats das was mit dem überlauf der zuständigen register ?
hier der quelltext aus der "schuldigen" stm32f10x_it.c
1 | __IO uint16_t IC3ReadValue1 = 0, IC3ReadValue2 = 0;
|
2 | __IO uint16_t CaptureNumber = 0;
|
3 | __IO uint32_t Capture = 0;
|
4 | extern uint32_t TIM3Freq=0;
|
5 |
|
6 |
|
7 |
|
8 | void TIM3_IRQHandler(void)
|
9 | {
|
10 | if(TIM_GetITStatus(TIM3, TIM_IT_CC2) == SET)
|
11 | {
|
12 | /* Clear TIM3 Capture compare interrupt pending bit */
|
13 | TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);
|
14 | if(CaptureNumber == 0)
|
15 | {
|
16 | /* Get the Input Capture value */
|
17 | IC3ReadValue1 = TIM_GetCapture2(TIM3);
|
18 | CaptureNumber = 1;
|
19 | }
|
20 | else if(CaptureNumber == 1)
|
21 | {
|
22 | /* Get the Input Capture value */
|
23 | IC3ReadValue2 = TIM_GetCapture2(TIM3);
|
24 |
|
25 | /* Capture computation */
|
26 | if (IC3ReadValue2 > IC3ReadValue1)
|
27 | {
|
28 | Capture = (IC3ReadValue2 - IC3ReadValue1);
|
29 | }
|
30 | else
|
31 | {
|
32 | Capture = ((0xFFFF - IC3ReadValue1) + IC3ReadValue2);
|
33 | }
|
34 | /* Frequency computation */
|
35 | TIM3Freq = (uint32_t) SystemCoreClock / Capture;
|
36 | CaptureNumber = 0;
|
37 |
|
38 | }
|
39 | }
|
40 | }
|
danke !