STM32F4_TIM输入波形捕获 (脉冲频率、占空比)

发布者:meirong最新更新时间:2023-08-01 来源: elecfans关键字:STM32F4  TIM  输入波形捕获  脉冲频率  占空比 手机看文章 扫描二维码
随时随地手机看文章

Ⅰ、概述

本文基于上一篇文章“TIM输入波形捕获(脉冲频率)”的基础上进行拓展,上一篇文章主要是捕获波形的频率,本文主要拓展捕获波形的占空比。


笔者实验测试的方法和上一篇文章一样,通过信号发生器产生PWM信号,通过串口发送频率和占空比到上位机(上位机串口助手显示其数值)。(没有信号发生器的朋友可以结合上一篇文章PWM输出做信号源;在同一块板子上也可以使用不同定时器,将PWM输出引脚接在捕获输入引脚)


实验现象:不同频率的实验现象请看上一篇文章(该文章提供的工程笔者也是进行了大量不同频率的测试,误差在几Hz属正常范围)。

1000Hz、20% - 80%占空比现象:


1000Hz、51% - 58%占空比现象:


关于本文的更多详情请往下看。


Ⅱ、实例工程下载

笔者针对于初学者提供的例程都是去掉了许多不必要的功能,精简了官方的代码,对初学者一看就明白,以简单明了的工程供大家学习。

笔者提供的实例工程都是在板子上经过多次测试并没有问题才上传至360云盘,欢迎下载测试、参照学习。

提供下载的软件工程是STM32F417的,但F4其他型号也适用(适用F4其他型号:关注微信,回复“修改型号”)。

STM32F4_TIM输入波形捕获(脉冲频率、占空比)实例:

https://yunpan.cn/cB2iknrjczWXe 访问密码 764c

STM32F4资料:

https://yunpan.cn/cR2pxqF5x2d9c 访问密码 53e7


Ⅲ、原理描述

笔者将捕获PWM波形简单画了一个示意图:


从上面的示意图可以看得出来我们需要捕获三个值(两个上升沿和中间的下降沿)。两个上升沿用于计算一个波形的周期(也就是可以计算其频率),因为捕获的“周期差值”就是脉冲数,而通过配置,我们可以知道每一个脉冲数的时间,这样就知道整个“周期差值”的时间。得到了“占空比差值”和“周期差值”,波形的占空比就得到了。


笔者将TIM分为三大块:时基部分、比较输出和输入捕获,请看下面截图“通用TIM框图”。


前面的文章已经将“时基部分”的一些基础知识讲述过了,“时基部分”的功能是比较有用的,它除了可以用来延时(定时)之外,它还可以拿来触发其他一些功能,如:触发DA转换、AD采集等。


上一篇文章讲述的就是图中比较输出部分,比较输出部分功能相对比较简单。


该文主要讲述“输入捕获”部分,这部分输入的通道1与2、通道3与4可以相互协作。该文只使用了TIM5的通道3,捕获输入信号频率。

通用TIM框图:


上面两图截取“STM32F4x5、x7参考手册”建议下载手册参看。


Ⅳ、源代码分析

笔者以F4标准外设库(同时也建议初学者使用官方的标准外设库)为基础建立的工程,主要以库的方式来讲述。

源代码很多地方都是和上一篇文章源代码相同,只修改了几个地方(其实主要就是增加了一路捕获占空比相关的配置):输入引脚的配置、TIM捕获配置及其中断、中断函数处理、主函数发送数据。

RCC、NVIC等这些容易忘记配置的地方都一样。

1.TIM输入捕获引脚配置


该函数位于timer.c文件下面;

主要增加了一路引脚。

注意2点:

A.引脚与通道对应:这个需要参看“数据手册”,该文TIM5通道3对应的引脚就是PA2.

B.复用配置:GPIO_PinAFConfig(GPIOA,GPIO_PinSource2, GPIO_AF_TIM5);

这个地方对于F1转F0、F4等的朋友需要注意,更加芯片系列及库的不同,他们之间存在一定的差异。

2.TIM输入捕获配置


该函数位于timer.c文件下面;

“时基部分”是在前面两篇文章讲述过的,这里主要对“输入捕获”部分理解,主要5个参数:

捕获通道:就是我们捕获的通道;

捕获极性:就是我们捕获脉冲的高还是低电平

捕获选择:是直接捕获该通道,还是上面说的1,2通道协助捕获;

捕获分频:对捕获的脉冲分频;

捕获滤波:过滤掉波形;

3.计算捕获波形频率原理


该函数位于stm32f4xx_it.c文件下面;

该函数是TIM捕获波形的中断函数,同一个(TIM5)中断入口,有两个通道通道,也是计算频率和占空比重要的函数;

结合原理描述中“示意图”可以知道,我们需要捕获3个值:V0、V2和V1。

V0和V2是在通道3捕获:

capture_value0 = (uint32_t)(TIM5->CCR3);

capture_value2 = (uint32_t)(TIM5->CCR3);

V1在通道4捕获:
capture_value1 = (uint32_t)(TIM5->CCR4);

其中有一个标志位flag_capture是用于标志我们捕获的状态,我们捕获了V0将flag_capture= 1就是告诉程序我们要捕获V1 和 V2的值了。


关键字:STM32F4  TIM  输入波形捕获  脉冲频率  占空比 引用地址:STM32F4_TIM输入波形捕获 (脉冲频率、占空比)

上一篇:STM32F0xx_看门狗 (独立+窗口)配置详细过程
下一篇:UCOS2_STM32_任务间信号量通信(一)_ 应用实例描述

推荐阅读最新更新时间:2024-10-28 12:41

高亮度LED驱动器的设计优化
在各种不同类型的光源中,高亮度 LED (发光二极管)目前增长势头良好,正开始替代白炽灯、卤素灯、荧光灯、HID氙气灯等其它种类的光源。过去,由于受到光线输出的限制,LED只适用于仪器发光。近年来, 高亮度LED (HBLED)开始用于建筑照明、装饰照明,以及标识牌照明等。HBLED亦成为CCFL(冷阴极荧光灯)光源的有力替代品,用作液晶电视和显示器的背光照明。随着HBLED技术的不断发展,HBLED发光效率可以达到35至50lm/W(流明/瓦),已经超过了白炽灯和卤素灯,并可以与荧光灯相媲美。如果HBLED技术进一步改善,发光效率将高达100lm/W,从而超过荧光灯,并最终与HID灯一决高下。    应当指出,HB
[电源管理]
高亮度LED驱动器的设计优化
STM32F429串口IDLE中断+DMA接收串口数据
#define Rec_GPS_DATA_Unfinish 0; #define Rec_GPS_DATA_Finish 1; extern unsigned char GPS_DATA ; extern unsigned char Rec_GPS_DATA_Flag; int main(void)//主函数 { SysTick_Init(); NVIC_Configuration(); Debug_USART_Config(); macUART4_Config(); DMA_Config(); while(1) { if(Rec_GPS_DATA_Flag) {
[单片机]
基于STM32F4x9的LCD显示
随着人机界面(GUI)在医疗、工业以及消费电子各应用领域需求的日益增长,高集成度、高性能的TFT 液晶显示方案成为电子产品设计开发的重要组成部分。在无内置液晶控制器的情况下,单片机与具有内置控制器的液晶板之间往往采用串行或并行的总线接口连接,受限于连接总线的数据传输速度,难以支持较高的显示分辨率和画面质量。 意法半导体推出了基于ARM Cortex-M4 内核的STM32F4x9 微处理器,借助内置的LCD-TFT 显示控制器和Chrom-ARM 图形加速器,使SVGA 高分辨率和高品质显示画面质量成为可能。本文围绕STM32F4x9 微控制器完成了液晶显示的硬件设计,并介绍了基于这一硬件平台以及STemWin 的软件应用开发
[单片机]
基于<font color='red'>STM32F4</font>x9的LCD显示
ZDS2022示波器百集实操视频之42:正占空比的测量
对于屏幕上这样一个窄脉冲,如何计算它的正占空比呢?我们将水平时基调大到200us/div,可以观察到它的两个周期,由于脉冲太窄了,用传统的光标手动测量并不是最佳的选择,ZDS2022可以给您提供什么样的方法呢? ZDS2022示波器拥有51种参数测量统计功能。其中就包括正占空比的自动测量,按下【Measure】键,在测量项选择中可看到51种测量参数,在时间范畴内旋转旋钮B,短按旋钮B选中正占空比,返回到主界面即可见到占空比的测量结果,原来是占空比为万分之一的窄脉冲,我们调小时基,放大脉冲,这时您可能会疑惑为什么没有测量结果了呢?那是因为占空比的存在是与周期密切联系的,当至少有一个周期出现时,才会存在占空比,所以当屏幕上只出现一
[测试测量]
ZDS2022示波器百集实操视频之42:正<font color='red'>占空比</font>的测量
Proteus8.9 仿真STM32407ZGT6系列009_PWM多路可调占空比输出
一,打开文件(可以随文下载放置在文档中打开)。(如下图1所示) 图1 二,调整虚拟器件,另存工程文件。(如下图2,3,4所示) 图2 图3 图4 三,点击Source Code标签。(如下图5所示) 图5 四,编辑main.c,timer.c,timer.h, key.c,key.h, led.c,led.h 代码如Proteus8.9 仿真STM32407ZGT6系列001(如下图6所示) 图6 五,Main.c 代码: /* Main.c file generated by New Project wizard * Author: Ziegler Yin * Created: 周四 一月
[单片机]
Proteus8.9 仿真STM32407ZGT6系列009_PWM多路可调<font color='red'>占空比</font>输出
STM8S TIM1库函数应用
个人觉得ST的库函数用起来还是挺不错的,之前都是使用自己写的函数,容易改出错,以下是验证过的,TIM1定时100微妙中断一次。 void TIM1_TimeBaseInit(u16 TIM1_Prescaler, TIM1_CounterMode_TypeDef TIM1_CounterMode, u16 TIM1_Period, u8 TIM1_RepetitionCounter) { /* Check parameters */ assert_param(IS_TIM1_COUNTER_MODE_OK(TIM1_CounterMode));
[单片机]
STM32F0xx_TIM基本延时配置详细过程
前言 关于定时器大家都应该不会陌生,因为处理器都有这个功能。今天总结的F0系列芯片的定时器根据芯片型号不同,数量也不同。定时器分类:基本定时器、通用定时器和高级定时器。计数位数也有不同,有16位的,有32位的。当然,有的芯片功能强大一点,上面功能都有。有的功能很简单,32位,基本定时器这些都没有。所以,根据自己项目需求原则合适型号的芯片很重要。 今天总结的工程是“TIM基础延时”,也就是基本定时器TIM6的延时功能,主要是针对基本定时器来总结。这里有点需要注意的就是F0系列的芯片有些小容量(FLASH)的芯片没有TIM6基本定时器(如:F030、F070小容量芯片)。因此,在使用今天提供的软件工程时一定要注意这一点,否则程序会有问
[单片机]
STM32F0xx_<font color='red'>TIM</font>基本延时配置详细过程
STM32F4移植FAT32系统出现的问题归纳总结
返回值 FR_OK (0) 函数成功,该文件对象有效。 FR_NO_FILE 找不到该文件。 FR_NO_PATH 找不到该路径。 FR_INVALID_NAME 文件名无效。 FR_INVALID_DRIVE 驱动器号无效。 FR_EXIST 该文件已存在。 FR_DENIED 由于下列原因,所需的访问被拒绝: 以写模式打开一个只读文件。 由于存在一个同名的只读文件或目录,而导致文件无法被创建。 由于目录表或磁盘已满,而导致文件无法被创建。 FR_NOT_READY 由于驱动器中没有存储介质或任何其他原因,而导致磁盘驱动器无法工作。 FR_WRITE_PROTECTED 在存储介质被写保护的情况下,以写模式打开或创建文件对象。
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved