{"id":425,"date":"2017-11-24T23:16:46","date_gmt":"2017-11-24T22:16:46","guid":{"rendered":"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=425"},"modified":"2017-12-30T19:36:31","modified_gmt":"2017-12-30T18:36:31","slug":"49-inputcapture_frq-library-stm32f4","status":"publish","type":"page","link":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/49-inputcapture_frq-library-stm32f4\/","title":{"rendered":"49-InputCapture_Frq-Library (STM32F4)"},"content":{"rendered":"<p><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-previous\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/48-usb_hid-library-stm32f4\/\" title=\"48-USB_HID-Library (STM32F4)\"><span class=\"meta-nav\">\u2190<\/span> 48-USB_HID-Library (STM32F4)<\/a><\/div><\/div><!-- #nav-below --><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-next\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/50-sram-library-stm32f4\/\" title=\"50-SRAM-Library (STM32F4)\">50-SRAM-Library (STM32F4) <span class=\"meta-nav\">&rarr;<\/span><\/a><\/div><\/div><!-- #nav-below --><\/p>\n<p>Um eine (odere mehrere) externe Frequenzen mit dem STM32F4 messen zu k\u00f6nnen, kann diese Library(s) benutzt werden.<br \/>\n<em><em>(es gibt auch noch eine extra LIB wenn noch der Dutycycle gemessen werden soll)<\/em><\/em><\/p>\n<p>Ich habe wie bei der PWM-Lib f\u00fcr die vier Timer \u201cTIM2, TIM3, TIM4, TIM5\u2033 je eine Library geschrieben.<\/p>\n<p>Die Timer werden im Input-Capture-Mode betrieben. Die Interrupt-Funktion wird also nur einmal pro Hi-Flanke vom externen Signal aufgerufen. Nach zwei Hi-Flanken wird der zeitliche Abstand zwischen den Flanken ermittelt und abgespeichert. Dieser Wert entspricht dann der Periodendauer.<\/p>\n<p>Pro Timer k\u00f6nnen bis zu 4 verschiedene Eingangs-Signale gemessen werden.<\/p>\n<p>Die Anzahl und Namen der Kan\u00e4le die benutzt werden sollen, m\u00fc\u00dfen im H-File deklariert und im C-File den entsprechenden Port-Pins zugeordnet werden.<br \/>\n(bei den Beispielen hab ich immer nur zwei Kan\u00e4le pro Timer aktiviert)<\/p>\n<p>Im H-File wird auch die Takt-Frequenz vom Timer eingestellt. Dieser gilt dann f\u00fcr alle Kan\u00e4le und beeinflusst die Aufl\u00f6sung und die minimale Frequenz die gemessen werden kann.<\/p>\n<p><em>Hinweis : die Funktion zum auslesen der Frequenz \u00fcbergibt 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\u00fcckgabewert = 0. Damit kann ein fehlendes Signal erkannt werden.<\/em><\/p>\n<p><strong>Bild :<\/strong><\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/07\/frq_in.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-2170\" src=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/07\/frq_in-300x116.jpg\" alt=\"frq_in\" width=\"300\" height=\"116\" \/><\/a><\/p>\n<p><strong>Voraussetzungen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">Benutzte Module der CooCox-IDE : GPIO, TIM, MISC\r\nBenutzte Librarys : keine<\/pre>\n<p><strong>Enumerationen (f\u00fcr FRQ mit TIM2) :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">typedef enum \r\n{\r\n  ICFRQ_T2_PB11 = 0,  \/\/ FRQ-Messung per TIM2 an PB11\r\n  ICFRQ_T2_PA2  = 1   \/\/ FRQ-Messung per TIM2 an PA2\r\n}ICFRQ_TIM2_NAME_t;<\/pre>\n<p><strong>Funktionen (<strong>f\u00fcr FRQ mit TIM2<\/strong>) :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">void UB_ICFRQ_TIM2_Init(void);                           \/\/ um die FRQ-Messung mit TIM2 zu initialisieren\r\nuint32_t UB_ICFRQ_TIM2_ReadFRQ(ICFRQ_TIM2_NAME_t vname); \/\/ zum auslesen der gemessenen Frequenz<\/pre>\n<p><strong>Beispiel :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">\/\/--------------------------------------------------------------\r\n\/\/ File     : main.c\r\n\/\/ Datum    : 10.07.2013\r\n\/\/ Version  : 1.0\r\n\/\/ Autor    : UB\r\n\/\/ EMail    : mc-4u(@)t-online.de\r\n\/\/ Web      : www.mikrocontroller-4u.de\r\n\/\/ CPU      : STM32F4\r\n\/\/ IDE      : CooCox CoIDE 1.7.0\r\n\/\/ Module   : CMSIS_BOOT, M4_CMSIS_CORE\r\n\/\/ Funktion : Demo der InputCapture FRQ-Library\r\n\/\/ Hinweis  : Diese zwei Files muessen auf 8MHz stehen\r\n\/\/              \"cmsis_boot\/stm32f4xx.h\"\r\n\/\/              \"cmsis_boot\/system_stm32f4xx.c\"\r\n\/\/--------------------------------------------------------------\r\n\r\n#include \"main.h\"\r\n#include \"stm32_ub_icfrq_tim2.h\"\r\n\r\nint main(void)\r\n{\r\n  uint32_t messwert=0,freuqenz=0;\r\n\r\n  SystemInit(); \/\/ Quarz Einstellungen aktivieren\r\n\r\n  \/\/ Init vom Timer2 zur FRQ-Messung\r\n  UB_ICFRQ_TIM2_Init();\r\n\r\n  while(1)\r\n  {\r\n    \/\/ gemessene FRQ an PB11 auslesen\r\n    messwert=UB_ICFRQ_TIM2_ReadFRQ(ICFRQ_T2_PB11);\r\n    if(messwert&gt;0) {\r\n      \/\/ wenn Messwert gueltig\r\n      \/\/ frequenz ausrechnen\r\n      freuqenz=(1000000\/messwert);\r\n    }\r\n  }\r\n}\r\n<\/pre>\n<p>Hier die Library zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/07\/ub_stm32f4_ic_frq_v100.zip\">ub_stm32f4_ic_frq_v100<\/a><\/p>\n<p>Hier der komplette CooCox-Projektordner zum\u00a0<strong>Download :<\/strong><\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2013\/07\/Demo_49_FRQ_IN.zip\">Demo_49_FRQ_IN<\/a><\/p>\n<h3 id=\"comments-title\">7 Antworten auf <em>49-InputCapture_Frq-Library (STM32F4)<\/em><\/h3>\n<ol class=\"commentlist\">\n<li id=\"li-comment-1346\" class=\"comment even thread-even depth-1\">\n<div id=\"comment-1346\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/f2cb9a36a7597a4418c1d14d26cb3552?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Simn<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">5. Februar 2014 um 10:16<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hallo,<\/p>\n<p>ich hab ein Problem in meinem Projekt.<br \/>\nIch messe \u00fcber Chanel 2 und Chanel 3 je eine Frequenz,<br \/>\nklappt alles auch prima.<br \/>\nABER: Ab und zu bricht die Frequenz ein f\u00fcr eine kurze Zeit und der Messwert wird verf\u00e4lscht, also mess ich bsp. 200 Hz passiert es unregelm\u00e4\u00dfig und kurz dass ich f\u00fcr einen Moment nur bsp. 20 Hz messe und dann direkt wieder 200 Hz.<\/p>\n<p>Kann das problem an dem Interrupt liegen? Muss ich den Interrupt irgendwo dissablen??<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1347\" class=\"comment odd alt depth-2\">\n<div id=\"comment-1347\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/f2cb9a36a7597a4418c1d14d26cb3552?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Simn<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">5. Februar 2014 um 11:44<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Thema erledigt,<\/p>\n<p>musste einfach die Priorit\u00e4t des Input-Capture Interrupt h\u00f6her stellen as die Priorit\u00e4t des USART Interrupt!!<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1349\" class=\"comment byuser comment-author-admin_ub bypostauthor even depth-3\">\n<div id=\"comment-1349\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">5. Februar 2014 um 19:33<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>ja, das ist ein Problem mit meinen Librarys. Ich kann nicht alle Kombinationen auf Funktion pr\u00fcfen, da mu\u00df man schon selbst durch.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li id=\"li-comment-1505\" class=\"comment odd alt thread-odd thread-alt depth-1\">\n<div id=\"comment-1505\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/de7f75c2fcb7aca1a81747a754f14ec7?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">A_min<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">28. M\u00e4rz 2014 um 17:20<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Hallo,<\/p>\n<p>ich m\u00f6chte f\u00fcr ein Projekt Rechtecksignale mit Frequenzen zwischen 1 \u2013 2 MHz messen.<br \/>\nBei Tests mit einem Frequenzgenerator waren Frequenzen bis zu ca. 300 kHz messbar. Ist es m\u00f6glich das Programm dahin gehend anzupassen?<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1506\" class=\"comment even depth-2\">\n<div id=\"comment-1506\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/b894d67379dd0647dd316009f47155d2?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">Joerg B.<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">28. M\u00e4rz 2014 um 20:41<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Du musst im -h file nur den prescaler weiter herunter setzen.<\/p>\n<p>Man muss sich nur mal ansehen was man benutzen will.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1515\" class=\"comment odd alt depth-3\">\n<div id=\"comment-1515\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/1.gravatar.com\/avatar\/de7f75c2fcb7aca1a81747a754f14ec7?s=40&amp;d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">A_min<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">31. M\u00e4rz 2014 um 16:35<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>Das mit dem prescaler habe ich schon probiert.<br \/>\nDoch auch bei einem prescaler von 1 wird ab einer Frequenz von ca. 500kHz nur die halbe Frequenz angezeigt (darunter passen die Werte). Ab ca. 1 MHz geht dann nichts mehr.<br \/>\nIch benutze zus\u00e4tzlich noch die UART-Librarys um mir das ganze auf dem PC anzuschauen. Das mit der Interrupt Priorit\u00e4t habe ich beachtet.<br \/>\nKann es sein, dass bei so hohen Frequenzen nicht mehr h\u00e4ufig genug abgetastet wird?<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/p>\n<ul class=\"children\">\n<li id=\"li-comment-1521\" class=\"comment byuser comment-author-admin_ub bypostauthor even depth-4\">\n<div id=\"comment-1521\">\n<div class=\"comment-author vcard\"><img loading=\"lazy\" decoding=\"async\" class=\"avatar avatar-40 photo\" src=\"http:\/\/0.gravatar.com\/avatar\/67426419ead44d5afa132e92685bb460?s=40&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D40&amp;r=G\" alt=\"\" width=\"40\" height=\"40\" \/><cite class=\"fn\">admin_ub<\/cite> <span class=\"says\">sagt:<\/span><\/div>\n<p><!-- .comment-author .vcard --><\/p>\n<div class=\"comment-meta commentmetadata\">1. April 2014 um 20:41<\/div>\n<p><!-- .comment-meta .commentmetadata --><\/p>\n<div class=\"comment-body\">\n<p>falls du nur einen Eingang messen willst, w\u00fcrde ich alles aus der ISR rauswerfen was nicht gebraucht wird. (jede IF-Abfrage usw) die Berechnung der Differenz kannst du auch au\u00dferhalb der ISR machen (das kostet auch Zeit)\u2026also versuch den IRQ_Handler so kurz wie m\u00f6glich zu machen.<br \/>\nEine andere M\u00f6glichkeit ist das ganze komplett anderes zu machen : einen Counter per externem Clock (deinem Messisgnal) z\u00e4hlen lassen und diesen Counterwert zyklisch mit einem Timer auslesen (z.B. alle 1ms). Damit sollten \u201cbeliebig\u201d gro\u00dfe Frequenzen messbar sein.<\/p>\n<\/div>\n<\/div>\n<p><!-- #comment-## --><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Um eine (odere mehrere) externe Frequenzen mit dem STM32F4 messen zu k\u00f6nnen, kann diese Library(s) benutzt werden. (es gibt auch noch eine extra LIB wenn noch der Dutycycle gemessen werden soll) Ich habe wie bei der PWM-Lib f\u00fcr die vier &hellip; <a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/stm32f4\/komplette-library-liste-stm32f4\/49-inputcapture_frq-library-stm32f4\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":144,"menu_order":49,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[128],"tags":[9,7,55],"class_list":["post-425","page","type-page","status-publish","hentry","category-stm32f4","tag-library","tag-stm32f4","tag-timer"],"_links":{"self":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/425","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/comments?post=425"}],"version-history":[{"count":3,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/425\/revisions"}],"predecessor-version":[{"id":1588,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/425\/revisions\/1588"}],"up":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/pages\/144"}],"wp:attachment":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/media?parent=425"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/categories?post=425"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-json\/wp\/v2\/tags?post=425"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}