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 :

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

Funktionen (für PWM mit TIM2) :

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 :

//--------------------------------------------------------------
// 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

4 Antworten auf 51-InputCapture_PWM-Library (STM32F4)

  1. Johannes Hellbeck sagt:

    Vielen Dank für deine hervorragenden Librarys .
    Ich versuche auf der Basis von TIM2 auf TIM8 ein PWM in zu erreichen.
    Kompilieren geht, aber ich erhalte keine Werte für Frequenz und Duty.
    Gibt es eine Lib auch für TIM8?
    Danke,Gruß
    Johannes

    • admin_ub sagt:

      die advanced Timer TIM1 und TIM8 werden etwas anders behandelt als TIM2bis5. Genaueres steht im Referenz Manual.

    • Christian Julius sagt:

      Hi,

      ich finde Libs ja auch supi, habe mir aber angewöhnt alles inzwischen selbst zu schreiben, vor allem die Hardware betreffend. Man versteht einfach besser was dann abläuft. Die Timer sind schon recht komplex, bis auf die Basic Timer aber man kann damit tolle Sachen machen, sind voll DMA fähig usw. Bastle grad an einer Infrarot Lib herum, für meinen Lieblingsbaustein, den TSOP….

  2. Max Meyer sagt:

    Hallo,
    ich bin relativ neu auf dem Gebiet und würde gerne wissen, ob man mit dem Prinzip auch mehrere Duty Cycles über einen Timer auslesen kann?
    Danke

Hinterlasse eine Antwort

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


− drei = zwei

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>