51-InputCapture_PWM-Library (STM32F4)

Um die Frequenz und den Tastgrad (Dutycycle) von einem PWM-Signal messen zu können, habe ich diese Librarys erstellt.
(es gibt auch noch eine extra LIB wenn nur die Frq gemessen werden soll)

Es gibt für die Timer “TIM2, TIM3, TIM4, TIM5″ je eine Library.

Die Timer werden im PWM-InputCapture-Mode betrieben, mit MasterSlave und Autoreset. Die Interrupt-Funktion wird bei jeder Hi-Flanke vom Signal ausgelöst und ermittelt die Periodendauer und die Impulslänge vom Signal.

Pro Timer kann in diesem Mode nur ein Signal gemessen werden. Und es stehen auch nur die Kanäle 1 oder 2 zur Verfügung.

Der Kanal und Port-Pin der benutzt werden soll, muss im C-File eingetragen werden.

Im H-File wird die Takt-Frequenz vom Timer eingestellt. Diese beeinflusst die Auflösung und die minimale Frequenz die gemessen werden kann.

Hinweis : die Funktion zum auslesen der Frequenz übergibt nur den Timerwert der Periodendauer. Das umrechnen in eine Frequenz muss, wenn notwendig, extra gemacht werden. Falls kein Signal anliegt (oder die Messung noch nicht fertig ist) ist der Rückgabewert = 0. Damit kann ein fehlendes Signal erkannt werden.

Bild :

pwm_in

Voraussetzungen :

1
2
Benutzte Module der CooCox-IDE : GPIO, TIM, MISC
Benutzte Librarys : keine

Funktionen (für PWM mit TIM2) :

1
2
3
void UB_ICPWM_TIM2_Init(void);         // um die PWM-Messung mit TIM2 zu initialisieren
uint16_t UB_ICPWM_TIM2_ReadFRQ(void);  // zum auslesen der gemessenen Frequenz
uint16_t UB_ICPWM_TIM2_ReadDUTY(void); // zum auslesen vom gemessenen Dutycycle

Beispiel :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//--------------------------------------------------------------
// File     : main.c
// Datum    : 20.07.2013
// Version  : 1.0
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.0
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der InputCapture PWM-Library
// Hinweis  : Diese zwei Files muessen auf 8MHz stehen
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------
 
#include "main.h"
#include "stm32_ub_icpwm_tim2.h"
 
int main(void)
{
  uint32_t messwert=0,freuqenz=0,impuls=0;
 
  SystemInit(); // Quarz Einstellungen aktivieren
 
  // Init vom Timer2 zur PWM-Messung
  UB_ICPWM_TIM2_Init();
 
  while(1)
  {
    // gemessene FRQ an PA1 auslesen
    messwert=UB_ICPWM_TIM2_ReadFRQ();
    if(messwert>0) {
      // wenn Messwert gueltig
      // frequenz ausrechnen
      freuqenz=(1000000/messwert);
      // impuls auslesen
      impuls=UB_ICPWM_TIM2_ReadDUTY();
    }
  }
}

Hier die Library zum Download :

ub_stm32f4_ic_pwm_v100

Hier der komplette CooCox-Projektordner zum Download :

Demo_51_PWM_IN


Wie hat Dir dieser Artikel gefallen?

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (Noch keine Bewertungen)
Loading...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.