STM32F4_TIM输入波形捕获(脉冲频率、占空比)
推荐
分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!
http://www.captainbed.net/strongerhuang
Ⅰ、概述
本文基于上一篇文章“TIM输入波形捕获(脉冲频率)”的基础上进行拓展,上一篇文章主要是捕获波形的频率,本文主要拓展捕获波形的占空比。
笔者实验测试的方法和上一篇文章一样,通过信号发生器产生PWM信号,通过串口发送频率和占空比到上位机(上位机串口助手显示其数值)。(没有信号发生器的朋友可以结合上一篇文章PWM输出做信号源;在同一块板子上也可以使用不同定时器,将PWM输出引脚接在捕获输入引脚)
实验现象:不同频率的实验现象请看上一篇文章(该文章提供的工程笔者也是进行了大量不同频率的测试,误差在几Hz属正常范围)。
1000Hz、20% - 80%占空比现象:

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

关于本文的更多详情请往下看。
Ⅱ、实例工程下载
笔者针对于初学者提供的例程都是去掉了许多不必要的功能,精简了官方的代码,对初学者一看就明白,以简单明了的工程供大家学习。
笔者提供的实例工程都是在板子上经过多次测试并没有问题才上传至360云盘,欢迎下载测试、参照学习。
提供下载的软件工程是STM32F417的,但F4其他型号也适用(适用F4其他型号: 关注微信,回复“修改型号”)。
STM32F4_TIM输入波形捕获(脉冲频率、占空比)实例:
https://yunpan.cn/cB2iknrjczWXe 访问密码
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文件下面;
和上一篇文章实例比:增加了TIM5通道4的配置。同时,分频值也改为了不分频。
“时基部分”是在前面两篇文章讲述过的,这里主要对“输入捕获”部分理解,主要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的值了。
Ⅴ、说明
这篇文章是结合前几篇文章来讲述的,可以在微信“历史消息”中查看。
关于笔者提供的软件工程实例,可关注微信,在会话框回复“关于工程”,有关于工程结构描述、型号修改等讲述。
以上总结仅供参考,若有不对之处,敬请谅解。
Ⅵ、最后
我的网站:https://www.strongerhuang.com
我的知乎:https://www.zhihu.com/people/strongerHuang.com
我的微信公众号(ID:strongerHuang)还在分享STM8、STM32、Keil、IAR、FreeRTOS、UCOS、RT-Thread、CANOpen、Modbus…等更多精彩内容,如果想查看更多内容,可以关注我的微信公众号。
STM32F4_TIM输入波形捕获(脉冲频率、占空比)的更多相关文章
- STM32F4_TIM输入波形捕获(脉冲频率)
Ⅰ.概述 本文在前面文章“STM32基本的计数原理”的基础上进行拓展,讲述关于“定时器输入捕获”的功能,和上一篇文章“定时器比较输出”区别还是挺大的.在引脚上刚好相反:一个输入.一个输出. 本文只使用 ...
- hal 编码器做用户输入时捕获初值的设置
uint16_t encoderDirection = __HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3); uint16_t encoderValue = __HA ...
- 基于STM32F429和Cube的主从定时器多通道输出固定个数的PWM波形
主从定时器的原理已在上篇博文: 基于STM32F429+HAL库编写的定时器主从门控模式级联输出固定个数PWM脉冲的程序 讲解了,这篇重点就讲如何实现多通道的PWM级联输出. 1.软件环境 Keil5 ...
- Windows PCM音频捕获与播放实现
在WINDOWS下,音频函数有多种类型,如MCI.多媒体OLE控制.高级音频等,使用方法都比较简单.但如果想编写一个功能较强大的音频处理程序,那就必须使用低级音频函数和多媒体文件I/O来控制音频设备的 ...
- 基于SincNet的原始波形说话人识别
speaker recognition from raw waveform with SincNet Mirco Ravanelli, Yoshua Bengio 作为一种可行的替代i-vector的 ...
- 使用Graph工具观察FFT波形
2014年8月1日,经过很长时间的上网查阅资料,走了很多弯路,终于可以成功使用Graph工具仿真波形了,虽然这个的确很简单,但是经过自己摸索出来的,兴奋之情难于言表. 明天就是七夕了,刚和女朋友分手的 ...
- 增量式PID的stm32实现(转)
源:增量式PID的stm32实现,整定过程 首先说说增量式PID的公式,这个关系到MCU算法公式的书写,实际上两个公式的写法是同一个公式变换来得,不同的是系数的差异. 资料上比较多的是: 还有一种是: ...
- 【雕爷学编程】Arduino动手做(57)---四档矩形波模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...
- Modelsim初级使用教程
来源 http://blog.sina.com.cn/s/blog_6c7b6f030101ctlh.html 一. Modelsim简介 Modelsim仿真工具是Model公司开发的.它支持Ver ...
随机推荐
- mysql5.7.x 编译安装
一.卸载mariadb [root@mysql5 ~]# rpm -qa mariadb* mariadb-libs--.el7.centos.x86_64 [root@template tools] ...
- Git系列二之数据管理
1.Git基本管理 git常用的基本操作 1.1提交数据 我们可以简单的把工作目录理解成是一个被Git服务程序管理的目录,Git会时刻的追踪目录内文件的改动,另外在安装好了Git服务程序后,默认就会创 ...
- eclipse安装pydev
eclipse是常用的用来写java代码的IDE,但是其实也可以用来写python代码,只需要配置好pydev即可. 第一步 打开eclipse,点击Help,install new sofeware ...
- 机器学习-Confusion Matrix混淆矩阵、ROC、AUC
本文整理了关于机器学习分类问题的评价指标——Confusion Matrix.ROC.AUC的概念以及理解. 混淆矩阵 在机器学习领域中,混淆矩阵(confusion matrix)是一种评价分类模型 ...
- LeetCode OJ Minimum Depth of Binary Tree 递归求解
题目URL:https://leetcode.com/problems/minimum-depth-of-binary-tree/ 111. Minimum Depth of Binary T ...
- shell的浮点运算
参考: https://www.linuxquestions.org/questions/linux-software-2/multiply-floats-in-bash-script-618691/ ...
- sdut 3-7 类的友元函数的应用
3-7 类的友元函数的应用 Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 通过本题目的练习能够掌握类的友元函数的定义和使用方法 要求设计一个点类Poin ...
- linux经常使用文字处理命令总结
linux grep命令 作用 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正則表達式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressio ...
- Android布局属性集合
<!-- android:id —— 为控件指定相应的ID android:text —— 指定控件当中显示的文字,需要注意的是,这里尽量使用strings.xml文件当中的字符串 andro ...
- Maven版本的ssm框架项目常见依赖pom.xml
<properties> <junit.version>4.12</junit.version> <spring.version>4.3.1.RELEA ...