STM32F4编码器测速

 使用外部时钟模式进行电机测速。


定时器配置

我使用的是TIM3的外部时钟模式1。      

使用外部时钟源模式,由于CubeMX的配置并不起作用,所以我自己对照参考手册自己配置寄存器。如下图

 

STM32F4编码器测速_第1张图片(外部时钟模式1)

STM32F4编码器测速_第2张图片(外部时钟模式2)

配置代码如下

  TIM3->SMCR |= 0x07;           // 选择外部时钟模式1
  TIM3->CCMR1 |= 0x01;  
  TIM3->CCMR1 &= ~0x02;         // TIM3_CCMR1 CC1S = 01, CC1 -> TI1
  TIM3->CCMR1 &= ~(0x0F << 4);  // TIM3_CCMR1 IC1F = 0000, 不滤波
  TIM3->CCER &= ~(0x01 << 1);   // TIM3_CCER CC1P = 0
  TIM3->CCER &= ~(0x01 << 3);   // TIM3_CCER CC1NP = 0, 上升盐
  TIM3->SMCR |= 0x07;           // TIM3_SMCR  SMS = 111, 外部时钟模式1
  TIM3->SMCR |= 0x05 << 4;
  TIM3->SMCR &= ~(0x01 << 5);   // TIM3_SMCR TS = 101, TI1FP1
  TIM3->CR1 |= 0x01;            // TIM3_CR1 CEN = 1, 开始计数

注意要根据自己的电机转速设置分频系数,可以直接设置PSC进行分频。


速度获取

可以使用一个另一个定时器中断读取计数器来获取单位时间内转速,从而计算出电机实际转速。(这部分程序在定时器中断里)

  speed = TIM3->CNT;
  TIM3->CNT = 0;

记得读完后计数器清零。

 

你可能感兴趣的:(STM32)