🚀write in front🚀
🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝💬本系列哔哩哔哩江科大STM32的视频为主以及自己的总结梳理📚
🚀Projeet source code🚀
💾工程代码放在了本人的Gitee仓库:iPickCan (iPickCan) - Gitee.com
引用:
STM32入门教程-2023版 细致讲解 中文字幕_哔哩哔哩_bilibili
Keil5 MDK版 下载与安装教程(STM32单片机编程软件)_mdk528-CSDN博客
STM32之Keil5 MDK的安装与下载_keil5下载程序到单片机stm32-CSDN博客
0. 江协科技/江科大-STM32入门教程-各章节详细笔记-查阅传送门-STM32标准库开发_江协科技stm32笔记-CSDN博客
【STM32】江科大STM32学习笔记汇总(已完结)_stm32江科大笔记-CSDN博客
江科大STM32学习笔记(上)_stm32博客-CSDN博客
STM32学习笔记一(基于标准库学习)_电平输出推免-CSDN博客
STM32 MCU学习资源-CSDN博客
术语:
英文缩写 | 描述 |
GPIO:General Purpose Input Onuput | 通用输入输出 |
AFIO:Alternate Function Input Output | 复用输入输出 |
AO:Analog Output | 模拟输出 |
DO:Digital Output | 数字输出 |
内部时钟源 CK_INT:Clock Internal | 内部时钟源 |
外部时钟源 ETR:External clock | 时钟源 External clock |
外部时钟源 ETR:External clock mode 1 | 外部时钟源 Extern Input pin 时钟模式1 |
外部时钟源 ETR:External clock mode 2 | 外部时钟源 Extern Trigger 时钟模式2 |
外部时钟源 ITRx:Internal trigger inputs | 外部时钟源,ITRx (Internal trigger inputs)内部触发输入 |
外部时钟源 TIx:external input pin | 外部时钟源 TIx (external input pin)外部输入引脚 |
CCR:Capture/Comapre Register | 捕获/比较寄存器 |
OC:Output Compare | 输出比较 |
IC:Input Capture | 输入捕获 |
TI1FP1:TI1 Filter Polarity 1 | Extern Input 1 Filter Polarity 1,外部输入1滤波极性1 |
TI1FP2:TI1 Filter Polarity 2 | Extern Input 1 Filter Polarity 2,外部输入1滤波极性2 |
正文:
0. 概述
从 2024/06/12 定下计划开始学习下江协科技STM32课程,接下来将会按照哔站上江协科技STM32的教学视频来学习入门STM32 开发,本文是视频教程 P2 STM32简介一讲的笔记。
定时器共四个部分,分为八个小节笔记。本小节为第一部分第一节。
🌳在第一部分,是定时器的基本定时的功能:定时中断功能、内外时钟源选择
🌳在第二部分,是定时器的输出比较功能,最常见的用途是产生PWM波形,用于驱动电机等设备
🌳在第三部分,是定时器的输入捕获功能和主从触发模式,来实现测量方波频率
🌳在第四部分,是定时器的编码器接口,能够更加方便读取正交编码器的输出波形,编码电机测速
1. 🚢输入捕获
1.1 输入捕获简介
输入捕获,即Input Capture,英文缩写为IC。输入捕获模式下,当通道输入引脚出现指定电平跳变瞬间(可以定义为上升沿、下降沿),当前CNT的值将被锁存到CCR中(检测电平跳变,然后执行动作(作用和外部中断差不多,只不过外部中断执行的动作是向CPU申请中断,输入捕获执行的是控制后续电路)),可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数。在这里,脉冲间隔和频率差不多、电平持续时间和占空比也是互相对应的关系。
每个高级定时器和通用定时器都拥有4各输入捕获通道,且二者没有区别。基本定时器没有输入捕获的功能。
输入捕获模块可以配置为PWMI(PWM输入)模式和主从触发模式。PWMI模式是PWM的输入模式,专门用来同时测量PWM波形的频率和占空比的。主从触发模式可以实现对频率或占空比的硬件的全自动测量。把这两个功能结合起来,测量频率和占空比就是硬件全自动执行,软件不需进行任何干预,也不需进中断,需要测量的时候,直接读取CCR寄存器就行了,使用非常方便且极大地减轻了软件的压力。
如下图,左边为输入捕获电路,4个输入捕获和输出比较通道,共用4个CCR寄存器,另外它们的CH1到4的4个通道引脚也是共用的,所以对于同一个定时器,输入捕获和输出比较只能使用其中一个,不能同时使用。
🌿输入捕获对比输出比较:
- 🌿输出比较,引脚是输出端口,根据CNT和CCR的大小关系来执行输出动作
- 🌿输入捕获,引脚是输入端口,接收到输入信号执行CNT锁存到CCR的动作
1.2输入捕获的各部分电路
🌿从左向右依次进行电路分析:
🌿最左边是四个通道的引脚,参考引脚定义表,就指导引脚是复用在哪个位置
🌿然后引脚进来,有一个三输入的异或门,这个异或门的输入接在了通道1、2、3端口,异或门的执行逻辑是,当三个引脚的任何一个有电平翻转时,输出引脚就产生一次电平翻转,3个引脚电平都相同为0,3个引脚中有高有低为1。
🌿然后输出通过数据选择器,到达输入捕获通道1,数据选择器如果选择上面一个,那输入捕获通道1的输入就是三个引脚的异或值;若选择下面一个,异或门就没有用。设计异或门,其实还是为了三相无刷电机服务的,无刷电机有三个霍尔传感器检测转子的位置,可以根据转子的位置来进行换相。
🌿输入信号来到了输入滤波器和边沿检测器(极性选择)。输入滤波器可以对信号进行滤波,避免一些高频的毛刺信号误触发;边沿检测器就是和外部中断一样,可以选择高电平触发或者低电平触发,当出现指定的电平时,边沿检测电路就会触发后续电路执行动作。设计了两套滤波和边沿检测电路,第一套电路经过滤波和极性选择得到TI1FP1(TI1 Filter Polarity 1),输入给通道1的后续电路。第二套电路,经过另一个滤波和极性选择,得到TI1FP2(TI1 Filter Polarity 2),输入给通道2的后续电路,同理,下面TI2信号进来,也经过两套滤波和极性选择得到TI2FP1输入通道1和TI2FP2输入通道2。
可以进行交叉连接,例如CH1引脚输入给通道2,CH2引脚输入给通道1,进行交叉连接的目的是两个:
- 🌿1.一个通道灵活切换两个引脚,可以灵活切换后续捕获电路的输入,
- 🌿2.两个通道同时捕获一个引脚,可以把一个引脚的输入,同时映射到两个捕获单元,这也是PWMI模式的经典结构,实现两个通道(IC)对一个引脚(CH)进行捕获,就可以同时测量频率和占空比。可以选择各自独立连接,也可以选择进行交叉连接。另外还有一个TRC信号,也可选择作为捕获部分的输入,TRC信号来源于最上面,设计也是为了无刷电机的驱动。
🌿然后来到了预分频器。每个通道各有一个预分频器,可以选择对前面的信号进行分频,分频之后的触发信号,就可以触发电路进行工作了,每来一个触发信号,CNT的值就会向CCR转运一次,转运的同时会发生一个捕获事件,这个事件会在状态寄存器置标志位,同时也可以产生中断,如果需要在捕获的瞬间,处理一些事情的话,就可以开启这个捕获中断。比如,可以配置上升沿触发捕获,每来一个上升沿,CNT转运到CCR一次,又因为CNT计数器是由内部的标准时钟驱动的,所以CNT的数值可以用来记录两个上升沿之间的时间间隔(周期)再取倒数就是测周法测量的频率了,在一次捕获后将CNT清零(可以用主从触发模式来自动完成CNT清零)
🌿输入捕获通道1的详细框图如下所示:(如下是上面框图的一个细化结构,基本功能都是一样的)
如上图,电路细节内容如下
- 🌾引脚进来,先经过一个滤波器,滤波器的输入是TI1就是CH1的引脚,输出的TI1F就是滤波后的信号
- 🌾FDTS是滤波器的采样时钟来源
- 🌾CCMR1寄存器里的ICF位可以控制滤波器的参数
- 🌾滤波器的工作原理就是:以采样频率对输入信号进行采样,当连续N个值都为高电平,输出才为高电平,当连续N个值都为低电平,输出才为低电平,如果信号出现高频抖动,导致连续采样N个值不全都一样,那输出就不会变化,这样就可以达到滤波的效果。采样频率越低,采样个数N越大,滤波效果就越好。在实际应用中,如果波形噪声比较大,就可以把IC1F位参数设置大一点来过滤噪声。
- 🌾滤波之后的信号通过边沿检测器。捕获上升沿或者下降沿
- 🌾CCER寄存器里的CC1P位可以进行极性选择
- 🌾最终得到TI1FP1触发信号
- 🌾通过数据选择器,进入通道1后续的捕获电路
🌾当然还有一套一样的电路得到TI1FP2触发信号,连通到通道2的后续电路,上图并没有画出来,同样,通道2有TI2FP1连通到通道1的后续,通道2也有TI2FP2连通到通道2的后续,总共有四种连接方式,然后经过数据选择器,进入后续捕获部分电路
🌾CCMR寄存器的CC1S位可以对数据选择器进行选择
🌾之后,CCMR寄存器的ICPS位可以配置分频器,可以选择不分频、2分频、4分频、8分频
🌾CCMR寄存器的CC1E位,控制输出使能或失能。如果使能了输出,输入端产生指定边沿信号,经过层层电路,就可以最后将CNT的值转运到CCR里来,每捕获一次CNT的值,都要把CNT清0一下,以便于下一次的捕获,从模式控制器就可以在捕获之后自动完成CNT的清零工作
🌾TI1FP1信号和TI1F_ED边沿信号,都可以通向从模式控制器,比如TI1FP1信号的上升沿触发捕获,还可以同时触发从模式,这个从模式里就有电路,可以自动完成CNT的清零。从模式就是完成自动化操作的利器
1.3 输入捕获的主模式、从模式、触发源选择(简称:主从触发模式)
- 🌾CCR对CNT进行捕获之后,需要对CNT进行一次清0操作,这样每次捕获得到的值才是测周法,两个上升沿(下降沿)之间的时间间隔。这个清0操作,就需要用到主从触发模式来自动完成。由输入捕获通道1的详细框图可得:经过滤波和极性选择的TI1FP1信号和经过滤波的边沿信号TI1F_ED都可以通向从模式控制器,之后便可以通过硬件电路自动完成CNT的清0操作。
- 🌾主从触发模式,即主模式、从模式和触发源选择三个功能的简称。
🌵主模式可以将定时器内部的信号映射到TRGO引脚,用于触发其他外设的操作;
🌵从模式可以接收其他外设或自身外设的一些信号,用于触发自己的一些操作(定时器的运行);
🌵触发源选择,即选择从模式的触发信号源功能,也可以认为它是从模式的一部分。- 🌾在从模式下,可以通过触发源选择功能选择一个信号产生TRGI信号,之后去触发从模式,从模式可以在上面列表中选择一项操作来自动执行。关于主从模式的详细说明可以参见手册:
1.4 输入捕获和PWMI基本结构
1.4.1输入捕获基本结构
下图是输出捕获模式测频率的基本结构图。
上图清晰地展示了输入捕获模式测量频率的过程,同时也是编程的逻辑基础。在这里我们只使用了一个通道,所以它只能测量频率。
- 🌾首先,配置时基单元,启动寄存器,则CNT就会在预分频之后的时钟驱动下不断自增。测周法用CNT来计数,间接实现计时的功能。经过预分频后的时钟频率,就是测周法的标准频率fc。
- 🌾之后,GPIO输入一个待测的方波信号,经过经过滤波器和边沿检测选择TI1FP1为上升沿触发,
- 🌾之后数据选择器选择直连通道,分频器选择不分频。
- 🌾当TI1FP1出现上升沿之后,CNT的值就会被CCR1转运捕获;同时触发源选择模块选择TI1FP1为触发信号,从模式选择复位操作,触发CNT清零
(先后顺序是:先转运CNT的值到CCR,再触发从模式给CNT清零。或者是非阻塞的同时转移:CNT的值转移到CCR,同时0转移到CNT里面去,总之是先捕获,再清零)- 🌾当电路不断工作时,CCR1中的值始终是最新一个周期的计数值,即测周法的计次数 N。所以,当我们想读取信号的频率时,只需要读取CCR1得到N,再计算fc/N就得到频率了。当不需要读取时,整个电路全自动的测量,不需要占用任何软件资源。
2、🚢频率的测量方法
如上图是频率逐渐降低的方波波形,越往左频率越高,越往右频率越低,这里信号都是只有高低电平的数字信号,对于STM32测频率而言,它也是只能测量数字信号的。如果需要测量一个正弦波则需要搭建一个信号预处理电路,最简单的就是用运放搭建一个比较器,把正弦波转换为数字信号再输入给STM32就行了;如果你测量的信号电压非常高,那还要考虑隔离的问题,比如使用隔离放大器、电压互感器等元件,隔离高压端和低压端,保证电路的安全。总之,经过处理最终输入给STM32的信号是如上图的高低电平信号,高电平3.3v,低电平0v。
为了测量频率,有两种方法可以选择:测频法、测周法
测频法:定时器中断,并记录捕获次数;测周法:捕获中断,并记录定时器次数。