高级定时器TIM1、TIM8

高级定时器在通用定时器的基础上增加了一些功能,如:重复计数器、带死区控制的互补输出通道、断路输入等。

捕获/比较通道的输出部分(通道1至3)

捕获/比较通道的输出部分(通道4)

①重复计数器RCR

基本和通用定时器发生溢出时,会直接生成更新时间。但高级定时器(重复计数器的定时器)并不完全这样,定时器发生溢出时,重复计数器值会减1,当重复计数器的值为0时,再发生一次溢出才会生成定时器更新事件。如果RCR值为N,那么更新事件在发生N+1次溢出时发生。RCR也有影子寄存器,在更新事件发生时,才会转移到影子寄存器中,生效。

②输出比较

高级定时器输出比较部分比通用定时器多了带死区控制的互补输出功能。

TIMx_CH1N、TIMx_CH2N、TIMx_CH3N分别是定时器通道1、2、3的互补输出通道,通道4没有互补输出通道。

DTG是死区发生器,死区时间由DTG[7:0]位配置。

如果不使用互补通道和死区时间控制,那么高级定时器 TIM1 和 TIM8 和通用定时器的输出比较部分使用方法基本一样,只是要注意 MOE 位得置 1 定时器才能输出。

了解下互补输出,如下图,黄色线和绿色线正好高低电平相反,形成互补。

了解下带死区控制的互补输出中的死区,如下图,绿线和黄线高低电平不完全对称,这个错开的时间就是死区控制的时间。

③刹车功能

断路功能也称刹车功能,一般用于电机控制的刹车。

刹车源既可以是刹车输入引脚又可以是一个时钟失败事件。时钟失败事件由复位时钟控制器中的时钟安全系统产生。系统复位后,刹车电路被禁止,MOE位为低。

设置TIMx_BDTR寄存器中的BKE位可以使能刹车功能,刹车输入信号的极性可以通过配置同一个寄存器中的BKP位选择。BKE和BKP可以同时被修改。当写入BKE和BKP位时,在真正写入之前会有1个APB时钟周期的延迟,因此需要等待一个APB时钟周期之后,才能正确地读回写入的位。

带死区控制的互补输出

带死区控制的互补输出经常被用于控制电机的 H 桥中,下面是一个H桥简图

上图H桥用的是NPN,基极为高电平时导通。

如果 Q1和 Q4 三极管导通,那么电机的电流方向是从左到右(假设电机正转);如果 Q2 和 Q3 三极管

导通,那么电机的电流方向是从右到左(假设电机反转)。上述就是 H 桥控制电机正反转的逻

辑原理。但是同一侧的三极管是不可以同时导通的,否则会短路,比如:Q1 和 Q2 同时导通或

者 Q3 和 Q4 同时导通,这都是不可取的。

这个模式的输出,通过H桥刚好就可以控制电机的正反转。我们来看看, OC1N 输出高电平的时候,OC1 输出就是低电平,刚好Q2 和 Q3 导通,电机的电流方向是从右到左(假设电机反转);反之,OC1 输出高电平的时候,

OC1N 输出就是低电平,刚好 Q1 和 Q4 导通,电机的电流方向是从左到右(假设电机正转)。实际上,由于元器件的有延迟特性,比如控制信号从OC1传导至电机,要经过一段时间才能作用到,就会导致直接使用互补输出信号驱动 H 桥时存在短路现象。为了避免这种情况,于是就有了带死区控制的互补输出来驱动 H 桥电路。死区时间就是为了解决元器件延迟特性的。

死区时间计算,通过TIMx_CR1的CKD[1:0]位和TIMx_BDTR的DTG[7:0]位来设置。如下图

TIM1/TIM8寄存器,用到的寄存器

1)控制寄存器1 (TIMx_CR1)

位 7(APRE)用于控制自动重载寄存器是否进行缓冲;

CKD[1:0]位指示定时器时钟(CK_INT)频率与死区发生器以及数字滤波器(ETR、TIx)所使用的死区及采样时钟(tDTS)之间的分频比。我们设置 CKD[1:0]位为 10,结合高级定时器时钟源频率等于 APB2 总线时钟频率,即 72MHz,可以得到 tDTS=55.56ns。

CEN 位,用于使能计数器的工作,必须要设置该位为 1,才可以开始计数。

2)获/比较模式寄存器 1/2(TIMx_CCMR1/2)

TIMx_CCMR1 控制 CH1 和 CH2,而 TIMx_CCMR2 控制 CH3和 CH4。

我们用到了定时器 1 输出比较的通道 1,所以我们需要配置 TIM1_CCMR1 模式设置位 OC1M[2:0],我们使用的是 PWM 模式 1,所以这 3 位必须设置为 110。

3)捕获/比较使能寄存器(TIMx_ CCER)

捕获/比较1输出使能CC1E位置1。

要实现互补输出,还需要把CC1NE位置1,使能互补通道。

CC1P和CC1NP分别时通道1输出和通道1互补输出的极性设置位,这里我们把CC1P 和 CC1NP 位都置 1,即输出极性为低,就可以得到互补的 PWM。

4)捕获/比较寄存器 1/2/3/4(TIMx_CCR1/2/3/4)

改变该寄存器的值来改变 PWM 的占空比。

5)断路和死区寄存器(TIMx_ BDTR)

用到断路输入功能,BKE位置1使能断路输入。

BKP位选择断路输入信号有效电平极性。我们选择高电平有效,即BKP置1。

位 AOE 是自动输出使能位,如果使能 AOE 位,那么在我们输入刹车信号后再断开了刹车信号,互补的 PWM 会自动恢复输出,如果失能 AOE 位,那么在输入刹车信号后再断开了刹车信号,互补的 PWM 就不会恢复输出,而是一直保持刹车信号输入时的状态。为了方便观察,我们使能该位,即置 1。

cpp 复制代码
HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig);//用于初始化定时器的断路(即刹车)和死区时间。
HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);//该函数用于启动定时器的互补输出

高级定时器 PWM 输入模式

上图,配置按照

以通道 1(CH1)输入 PWM,设置 IC1 捕获边沿为上升沿捕获,IC2 捕获边沿为下降沿捕获。

选择 TI1FP1 为触发输入信号,从模式选择:复位模式。复位模式的作用是:在出现所选触发输入 (TRGI) 上升沿

时,重新初始化计数器并生成一个寄存器更新事件。

CCR1 寄存器的值+1 就是 PWM 周期内计数器的计数个数,CCR2 寄存器的值+1 就是PWM 高电平期间计数器的计数个数。

TI1上升沿发生,计数器的值被复位,IC1和IC2都发送捕获事件,然后下降沿到来时,IC2发生捕获事件,计数器的值被锁存在CCR2中,该值就是高电平期间的计数个数CCR2+1;然后上升沿来时,IC1发生捕获事件,计数器的值被锁存在CCR1中,该值就是PWM周期内计数的个数CCR1+1。

所以计算PWM占空比 = (2+1)/ (4 + 1) = 3/5 即60%

相关推荐
嵌入式仿真实验教学平台5 小时前
深入探索IIC-OLED显示技术:嵌入式仿真平台如何重塑高校教学范式——深圳航天科技创新研究院技术赋能新一代工程教育
科技·单片机·gd32·嵌入式仿真·iic-oled显示技术
十碗阳春面6 小时前
TI 毫米波雷达走读系列—— 3DFFT及测角
单片机·嵌入式硬件·毫米波雷达·mmwave radar·awr/iwr系列
CPETW6 小时前
同旺科技 USB TO SPI / I2C适配器(专业版)--EEPROM读写——C
c语言·开发语言·科技·stm32·单片机·嵌入式硬件·电子
keke107 小时前
PLC入门【6】计时器、计数器、存储器
嵌入式硬件
小智学长 | 嵌入式10 小时前
Arduino入门教程:4-1、代码基础-进阶
嵌入式硬件·物联网·arduino
国科安芯11 小时前
【AS32系列MCU调试教程】调试工具:Eclipse调试工具栏与窗口的深入分析
单片机·嵌入式硬件·eclipse
nuannuan2311a11 小时前
9N65-ASEMI照明系统应用专用9N65
单片机·嵌入式硬件
腾飞的信仰11 小时前
举例说明单片机,主循环和中断资源访问冲突的案例
单片机·嵌入式硬件·mongodb
腾飞的信仰1 天前
单片机,主循环和中断资源访问冲突的案例
单片机·嵌入式硬件