定时器中心对齐模式频率计算

普通PWM输出的频率计算:假设系统时钟SYSCLK=168Mhz,APB2总线时钟84Mhz,使用TIM8,时钟为APB2的两倍,向上计数时,从0计数到ARR,向下计数时,从ARR计数到0;则频率为: f = 168M / (ARR+1)∗(PSC+1)。

ARR(自动重装载寄存器) 是一个 16 位的寄存器,这里面装着计数器能计数的最大数值。当计数到这个值的时候,如果使能了中断的话,定时器就产生溢出中断。

PSC是预分频值,将定时器预分频,便于计算。

先以向上计数模式为例:

  htimx.Instance = TIM8;
  htimx.Init.Prescaler = 0; //psc = 0
  htimx.Init.CounterMode = TIM_COUNTERMODE_UP;//向上计数
  htimx.Init.Period = 4200-1; //ARR = 4200 - 1
  htimx.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1; //不分割时钟
  htimx.Init.RepetitionCounter = 0; //进入中断后下次计数值到了又立即进入中断
  HAL_TIM_PWM_Init(&htimx);

以上配置频率为 f = 168000000 / 4200 = 40000(Hz)

而中心对齐模式时,向上计数到ARR-1,再向下计数。

即为:一个周期内计数从0->ARR-1,然后又从ARR-1->0;来回计数了2次。注意此时计数到ARR-1,而非ARR了,所以相同的设置参数,中心对齐的PWM频率是: f = (168M / (ARR)∗(PSC+1))* 2 = 168000000/4199*2 = 80019(Hz)

如果将配置改为htimx.Init.Period = 4200,则频率为80000Hz,刚好为边沿对其模式的两倍。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在STM32F103系列微控制器中,定时器的编码器模式是通过两个输入通道(通常称为A相和B相)来读取旋转编码器的输入信号。编码器通常是一种用于测量转动位置和速度的设备。 在编码器模式下,定时器通过检测A相和B相的脉冲信号的变化来计算转动方向和计数值。下面是STM32F103定时器编码器模式的工作原理: 1. 定时器设置: - 定时器配置为边沿对齐模式(TIM_CounterMode_Up),计数值在每个周期内递增。 - 选择合适的预分频因子(TIM_Prescaler)来控制计数频率。 - 设置适当的计数周期(TIM_Period)来确定计数器溢出前的计数范围。 2. 编码器模式配置: - 使用TIM_EncoderInterfaceConfig函数将定时器配置为编码器模式。 - 选择合适的编码器模式(TIM_EncoderMode_TI1或TIM_EncoderMode_TI2)。 - 设置A相和B相输入通道的极性(上升沿、下降沿或双边沿)。 3. 读取编码器计数值: - 使用TIM_GetCounter函数读取编码器的当前计数值。 - 编码器计数值的变化表示旋转方向和步长。 当旋转编码器的A相和B相输入信号发生变化时,定时器将根据输入信号的状态变化自动更新计数器的值。通过读取定时器的计数值,可以获得编码器的当前位置和速度信息。 需要注意的是,具体的编码器模式配置和计数值解释可能因不同的编码器类型和应用而有所不同。以上是一般的工作原理,具体实现时还需参考相关的编码器规格和STM32F103系列微控制器的参考手册。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值