使用 STM32F4 系列并配置 CubeMx 处于输出比较模式的 TIMx CHx

问题描述 投票:0回答:1

我想在输出比较模式下配置特定定时器TIMx的CHx(可以是CH1、CH2、CH3或CH4)。我想利用 CCRx(单个通道的捕获/比较寄存器)来生成脉冲。

使用 CCRx 的主要原因是获得对生成脉冲的 Ton 周期的控制,因为我的目标是针对 Ton 周期的特定持续时间。

唯一令我困惑的部分是理解预分频器、ARR(32 位)和脉冲(32 位值)的计算。

我想了解这些值是如何计算的,并且我知道有些值应该是假设的。我参考了很多材料,但最终总是陷入公式中,因为它们的种类繁多。

我能够使用以下配置生成 10 微秒的输出脉冲: 我的 SYSCLK 运行 @100 MHz APB1/APB2 = 100 MHz 预分频器 (PSC) = 9,周期 (ARR) = 99,脉冲 = 0

但是,当我使用网络上提供的公式和概念验证选择值背后的原因时,我注意到它们的值与结果不符。

我尝试改变脉冲值,但它不会影响脉冲持续时间,除非我更改 PSC 值。我想在 OC 模式下配置多个通道,在这种情况下,我想保持 PSC 值不变,只改变与各个通道关联的脉冲值,以控制输出生成脉冲各自的脉冲持续时间。

您的建议将不胜感激。

/////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////// /////////////////////////////////////////////////////////// ///////////////////////////

编辑1:-我做了以下计算

实现持续时间为 10 微秒的连续脉冲。 我参考了以下计算。

预分频器输出 (CNTx_CLK) = (TIMx_CLK) / (PSC+1)

我的SYSCLK = 100MHz 由于我想生成 10 微秒的输出脉冲,因此定时器时钟频率为 = 1/10 微秒。 = 100KHz 或 100,000 Hz。

根据上述公式,

100kHz = 100MHz/(PSC+1) 所以,PSC = 999。

现在,我在找到PSC值后还发现了一个计算ARR值的公式。 (参考:- STM32 编程书籍)

ARR = [(fxi)/(PSC+1)] - 1,其中 f = SYSCLK (100 MHz),i = 所需脉冲持续时间(10 微秒),我们有 PSC = 999 结果是 ARR = 0。

这就是我目前陷入困境的地方。

/////////////////////////////////////////////////////////////////////////////////////// /////////////////////////

编辑 2:- 为了生成 Ton = 1 us 的输出脉冲串,我能够使用以下公式正确计算周期 (ARR) 和预分频器值:-

我最初使用 PSC = 9 并使用公式 -> ARR = [(SYSCLK * Interval)/(PSC+1)] - 1。 我得到 ARR = 9,导致脉冲宽度为 1 us (Ton = 1us)。

注意:- 我仍然没有在 OC 模式下配置的特定通道的脉冲字段中加载任何值。

但是,现在,如果我想在 OC 模式下配置另一个通道(例如 CH2)并生成持续时间(例如 1 ms)的脉冲串,那么我应该如何使其工作?我已经配置了 PSC 和 ARR 以在 CH1 上生成 1 us 的脉冲。

timer embedded compare stm32f4 stm32cubeide
1个回答
0
投票

正如 @pmacfarlane 在评论中已经说过的那样,(TIMx_ARR + 1)确定 PWM period,TIMx_CCRx 确定 pulse lenght(因此它们一起确定占空比),并且两者都乘以(TIMx_PSC + 1),从而确定粒度,即step,其中periodpulse length都可以调整。通常,您希望将 TIMx_PSC 保持得尽可能低,但这受到大多数 STM32 定时器都是 16 位这一事实的限制(通常 TIM2 和 TIM5 除外)。例如,对于 100MHz 定时器时钟,16 位定时器中的最大period 为 655.35us;如果你想要更长的周期,你需要相应地增加PSC。

每个定时器只有一个计数元件,因此一个定时器的四个通道的周期始终相同,只能单独设置其脉冲长度。换句话说,您无法从一个定时器的不同通道生成不同频率的 PWM。

此外,在“F4 定时器”中,您也无法在具有随机相移的不同通道上生成 PWM,其中一个脉冲边沿始终在所有通道上对齐在一起,因为它是由更新事件(溢出)生成的;或者在上下模式下,所有脉冲的中间对齐在一起(较新的 STM32 型号确实具有可以规避此限制的模式)。

© www.soinside.com 2019 - 2024. All rights reserved.