定时器输出比较
STM32的定时器输出比较(Output Compare,OC)功能是其定时器模块的重要特性之一,主要用于生成特定波形(如PWM)、触发事件或控制外部设备。有以下主要功能
-
波形生成:通过比较定时器计数器(CNT)和预置的比较寄存器(CCR),生成PWM信号或特定频率的方波。
-
事件触发:当计数器与CCR匹配时,触发中断、DMA请求或其他外设操作。
-
引脚控制:直接控制引脚电平的翻转、置高或置低。
波形生成
PWM脉冲宽度调制信号
- 脉冲宽度调制:通过调整方波信号中高电平(脉冲)的持续时间(宽度),改变一个周期内高电平与低电平的时间比例(占空比),从而控制输出的平均电压。
- 占空比计算:占空比(Duty Cycle)= 高电平时间 / 周期时间 × 100%。例如,50%占空比表示高电平和低电平时间各占一半。
我们可以利用PWM输出模拟信号,实时调整占空比可以对应模拟信号波形
在信号强的位置占空比大,信号弱的位置占空比小。
如何输出一个PWM信号
假如我们要输出一个占空比为50%的PWM信号,我们进行如下操作
首先我们做如下设置,定时器输入时钟源选择RCC(8MHz),预分频器PSC=799,自动重装寄存器ARR=9,计时器NCT选择上计数,重复计时器RCR=0。
计时器的实际运行如下
我们设置CCR1寄存器(CCR1(Capture/Compare Register 1)是一个与定时器(Timer)模块密切相关的关键寄存器)为4,当CNT的值大于CRR1时CRR1会拉高电平向外输出高电平,当CRR1的值小于CNT时CRR1会拉低电平向外输出低电平。如下生成了占空比为50%的PWM信号。
同理我们改变CRR1的值就会得到我们需要的PWM信号
所以形成PMW是由时基单元和CCRx共同完成的,其中时基单元决定波的周期,CCRx寄存器决定占空比。
输出比较
输出比较(Output Compare) 是定时器(Timer)模块的核心功能之一,用于在特定时间点控制引脚电平变化、触发中断或DMA请求。其内部结构图如下
输出比较的核心原理
基本机制:
定时器计数器(CNT)持续递增(或递减),并与预先写入的比较寄存器(CCRx,如CCR1) 进行实时比较。当 CNT 和 CCRx 的值发生不同比较时,触发比较匹配事件,根据配置改变输出引脚电平、生成中断或启动DMA传输。
输出比较有8种模式可以选择,我们常用PWM1和PWM2模式
节点2后的结构如图
输出的信号是互补的,当CH1输出高电平时,CH1N输出低电平,其中CH1N不是每个TIM都有的,在使用的时候一定要注意
极性选择
在极性选择中选择不同的极性也会对输出波形有较大的改变,如下