【STM32】TIM定时器输出比较
1 输出比较
1.1 输出比较简介
- OC(Output Compare)输出比较;IC(Input Capture)输入捕获;CC(Capture/Compare)输入捕获和输出比较的单元
- 输出比较可以通过比较CNT与CCR寄存器值(CCR捕获/比较寄存器)的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形
- 每个高级定时器和通用定时器都拥有4个输出比较通道
- 高级定时器的前3个通道额外拥有死区生成和互补输出的功能
主要是用来输出PWM波形的,PWM波形又是驱动电机的必要条件。
这个CCR是共用的,当使用输入捕获时,它就是捕获寄存器;当使用输出比较时,它就是比较寄存器。在输出比较这里,这块电路会比较CNT和CCR的值,CNT计数自增,CCR是我们给定的一个值,当CNT大于CCR、小于CCR、等于CCR时,输出就会置1,置0,置1,置0,这样就可以输出一个电平不断跳变的PWM波形了。
1.2 PWM简介
PWM(Pulse Width Modulation)脉冲宽度调制
在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速等领域
PWM参数:
频率 = 1 / TS 占空比 = TON / TS 分辨率 = 占空比变化步距
1.3 输出比较通道
通用定时器的输出比较部分电路
对应的是
最后通过TIMx_CH1输出到GPIO引脚上。
左边是CNT计数器和CCR1第一路的捕获/比较寄存器;它俩比较,当CNT > CCR1 或者 CNT = CCR1时,就会给输出模式控制器传一个信号,然后输出模式控制器就会改变它输出OC1REF(reference参考信号)的高低电平;接下来可以把OC1REF映射到主模式的TRGO输出上去;不过REF的主要去向还是走下面。
这是一个极性选择,给这个寄存器写0,信号就会往上走,就是信号电平不反转;写1的话,信号就会往下走,信号会通过一个非门取反,输出的信号就会发生反转。最后就是OC1引脚,这个引脚是CH1通道的引脚,在引脚定义中就可以具体知道是哪个GPIO了。
输出模式控制器的工作:输出比较模式,通过寄存器来配置。
模式 | 描述 |
冻结 | 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置无效电平 |
(1)冻结模式:输出暂停;
(2)匹配时置有效电平、匹配时置无效电平、匹配时电平翻转:有效/无效电平一般是高级定时器的说法;简单理解有效电平是高电平,无效电平是低电平。
(3)PWM模式
PWM模式2是PWM模式1的取反。
1.4 PWM基本结构
左上角是时基单元和控制部分,输出PWM暂时不需要中断。下面就是输出比较单元了,总共有4路。输出比较单元的最开始,是CCR捕获/比较寄存器,CCR是我们自己设定的,CNT不断自增运行,同时它俩还在不断比较,后面是输出模式控制器(PWM模式1)。
蓝色线是CNT的值,黄色线是ARR的值,CNT(蓝色线)从0开始自增,一直增到ARR的值,之后清零继续自增。在这个过程中再设置一条红线(CCR的值),之后再执行【CNT<CCR时,REF置有效电平;CNT≥CCR时,REF置无效电平】,下面绿色部分是输出。
CNT<CCR时,REF置有效电平;CNT≥CCR时,REF置无效电平。并且它的占空比是受CCR值调控的;如果CCR设置高一些,输出占空比就大一些。
1.5 参数计算
PWM频率: Freq = CK_PSC / (PSC + 1) / (ARR + 1)
对应着计数器的一个溢出更新周期,PWM的频率等于计数器的更新频率。
PWM占空比: Duty = CCR / (ARR + 1)
PWM分辨率: Reso = 1 / (ARR + 1)
输出一个频率为1KHz,占空比可以任意调控,切分辨率为1%的PWM波形
Reso = 1 / (ARR + 1) = 1% =====》ARR = 99
Duty = CCR / (ARR + 1) = CCR / 100 =====》 CCR = [0, 100]
Freq = CK_PSC / (PSC + 1) / (ARR + 1) = 1000 =====》 CK_PSC / (PSC + 1) = 100000
1.6 舵机简介
舵机是一种根据输入PWM信号占空比来控制输出角度的装置
输入PWM信号要求:周期为20ms,高电平宽度为0.5ms~2.5ms
大概的执行逻辑:PWM信号输入到控制板,给控制板一个指定的目标角度,然后电位器会检测输出轴的当前角度;如果大于目标角度,电机就会反转;否则正转。最终使输出轴固定在指定角度。
1.6.1 舵机硬件电路
1.7 直流电机
直流电机是一种将电能转换为机械能的装置,有两个电极,当电极正接时,电机正转,当电极反接时,电机反转
直流电机属于大功率器件,GPIO口无法直接驱动,需要配合电机驱动电路来操作
TB6612是一款双路H桥型的直流电机驱动芯片,可以驱动两个直流电机并且控制其转速和方向
1.7.1 硬件电路
看图和引脚说明,很清晰。
STBY引脚是待机控制引脚。如果接GND,芯片就不工作,处于待机状态;如果接逻辑电源VCC,芯片就正常工作。
看手册
强置输出模式:CNT和CCR无效,REF强制为高和低的那两种模式
输出比较模式:CNT=CCR时,REF冻结、置高、置低、反转那四种模式
PWM 模式:CNT > CCR或者CNT < CCR时,REF置高或者置低的那两种模式。