stm32 Input Capture

Gast #2206153
Lesenswert?
• ▲
▼
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 !

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.