ST意法半导体
直播中

杨春林

7年用户 887经验值
私信 关注
[问答]

如何将TIM1_BDTR的最后LS3位设置为4?

我使用的 MCU 是 STM32F103C8,我需要 2 个 PWM 信号,它们相互完成到 %100 占空比。(即:PWM1=%60 和 PWM2 =%40)。当一个 PWM 通道为高时,另一个需要为低,反之亦然。
重要的是,这两个 PWM 信号不应同时为高电平。所以我想在相反的 PWM 模式下使用 2 个通道。然而,占空比会发生变化,并且它们在整个代码中不会相同,因此在更改这些通道的 CCR 值时,我相信模式可能会被打破并且这些信号可能会同时变高,即使是很短的时间。
有没有一种我可以遵循的方法来维持完成的 PWM 信号而不会同时使它们变高,并且是否有预防措施或安全措施来防止它们同时变高?
编辑:
我需要将死区时间设置为 50 ns 左右,我的时钟周期为 13.8 ns 我需要将 tiM1_BDTR 寄存器的 DTG 位设置为 0x04。(这些是 BDTR 寄存器的 [0-7] 位)。我不想更改 [8-15] 位。但我不确定如何访问和更改 STM32 中的各个位。我想我以前在 PIC 中使用的方法在 STM 中不起作用。
所以我想我可以像这样一点一点地改变每一点:
  • TIM1_BDTR= (0<<0);
  • TIM1_BDTR= (0<<1);
  • TIM1_BDTR= (1<<2);
但这似乎是错误的。如何将 TIM1_BDTR 的最后 LS 3 位设置为 4?









回帖(1)

周雯葭

2023-2-7 10:33:26
在 STM32F103C8 中有高级定时器 TIM1,其中通道 1、2、3 具有互补输出。
阅读参考手册中的14.3.11 Complementary outputs and dead-time insertion和 TIM1 capture/compare enable register (TIMx_CCER)的描述。
如果由于某种原因不能使用 TIM1,则必须确保预加载 CCR 寄存器(为这些通道设置 TIM_CCMR*_OC*PE 位),并在一个定时器周期内更新它们,这最好在定时器更新中断。当 PWM 频率高于 ~100 kHz 时,这可能会很棘手。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分