目录
前言
本期我们继续学习TIM定时器的其他功能也就是输出比较波形的功能,在我们学习51的时候就学习过了这一部分的相关知识点,也就是单片机驱动电机调档转向等。同样的我们这次就用stm32的定时器来实现这部分功能,本期主要是进行理论知识的讲解,下一期就进行项目实操。(视频:[6-3] TIM输出比较_哔哩哔哩_bilibili)
PWM输出比较
1.输出比较简介
- OC(Output Compare)输出比较
- 输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形
- 每个高级定时器和通用定时器都拥有4个输出比较通道
- 高级定时器的前3个通道额外拥有死区生成和互补输出的功能
如下图所示,圈起来的是通用定时器的输出比较的区域,这里有四个并行的输入输出口(CH1, CH2, CH3, CH4),其中输入输出是同一个线路的,所以当我们要使用输入的时候那么输出功能就无法使用,反之。
2.PWM简介
- PWM(Pulse Width Modulation)脉冲宽度调制
- 在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速等领域
- PWM参数:
频率 = 1 / TS 占空比 = TON / TS 分辨率 = 占空比变化步距
根据PWM的输出比较,在输出的同时会进行比较,比如我们设定了一个值CCR,定时器在定时的时候会进行计数,此时会比较当前的计数CNT与CCR的值,假如CNT<CCR的时候就会输出高电平,也就是输出的波形为Ton,如果CNT>=CCR的时候就会输出低电平为Toff,那么二者组合起来就是一个周期的波形了Ts,这就是PWM的输出过程。
3.输出比较通道
输出比较通道分为通用定时器输出比较通道和高级定时器输出比较通道,这里有一个输出模式控制器是用来比较CNT和RCC的值的,然后再去输出这个电平ref,再经过下一个TIMx_CCER这部分,这里还可以再次去控制当前电平的翻转功能,最后到输出使能才输出信号。大概就是以上这个流程。
通用定时器输出比较通道:
高级定时器的稍微了解一下就行了,目前没用到这里,后继再深入学习。高级定时器输出比较通道:
4.输出比较模式
如下表所示,有8种工作模式,其中冻结、匹配时置有效电平、匹配时置无效电平、强制为有效电平 这几种是不怎么用到的,看描述就知道,基本上电平是卡死的,没有什么变化。比较重要的是匹配时电平翻转、PWM模式1、PWM模式2 这三种模式,这三种是可以控制输出电平的变化的,电平翻转是实现当CNT=CCR时,REF电平翻转,高电平变为低电平,低电平变高电平。后面两个PWM模式1、PWM模式2 我们不难看出这二者是反过来的,实际上功能是一模一样的。
模式 | 描述 |
冻结 | CNT=CCR时,REF保持为原状态 |
匹配时置有效电平 | CNT=CCR时,REF置有效电平 |
匹配时置无效电平 | CNT=CCR时,REF置无效电平 |
匹配时电平翻转 | CNT=CCR时,REF电平翻转 |
强制为无效电平 | CNT与CCR无效,REF强制为无效电平 |
强制为有效电平 | CNT与CCR无效,REF强制为有效电平 |
PWM模式1 | 向上计数:CNT<CCR时,REF置有效电平,CNT≥CCR时,REF置无效电平 向下计数:CNT>CCR时,REF置无效电平,CNT≤CCR时,REF置有效电平 |
PWM模式2 | 向上计数:CNT<CCR时,REF置无效电平,CNT≥CCR时,REF置有效电平 向下计数:CNT>CCR时,REF置有效电平,CNT≤CCR时,REF置无效电平 |
5.PWM基本结构
PWM是使用到时基单元的输出功能,所以不需要去搭理中断,这部分是定时器内部的功能。下图我们就可以看出,当时基单元进行计数CNT,此时就会与CCR进行比较,根据比较结果来去输出电平,最后去通过极性选择当ref为有效电平的时候是否对ref信号进行修改(有ref保持不变输出,ref有效时取反和对ref高电平变低电平 低电平变高电平取反三种),然后GPIO口输出最后的波形。
6.参数的计算
- PWM频率: Freq = CK_PSC / (PSC + 1) / (ARR + 1)
- PWM占空比: Duty = CCR / (ARR + 1)
- PWM分辨率: Reso = 1 / (ARR + 1)
看下图示例,黄色的直线是表示CNT计数的最大值(最大为99),溢出之后就会归零,红色的直线是表示CCR的值(设置为30),也就是我们自己设置的比较值,蓝色的线就是表示CNT随着时间变化的值。当CNT小于CCR的时候,也就是CNT值为0~29之间刚好30的数,输出波形为高电平,下面绿色波形所示;当CNT大于CCR的时候输出为高电平,也就是CNT为30~99之间刚好70个数。所以我们可以看出,PWM的占空比为30 / (99+1) =30%,PWM的分辨率为 1 / (99+1) = 1%,分辨率越高那么调节的精确度就越高,当然也是比较消耗stm32性能的。
以上就是本期的全部内容了,我们下次见!
每日壁纸: