使用外部时钟模式进行电机测速。
定时器配置
我使用的是TIM3的外部时钟模式1。
使用外部时钟源模式,由于CubeMX的配置并不起作用,所以我自己对照参考手册自己配置寄存器。如下图
(外部时钟模式1)
(外部时钟模式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;
记得读完后计数器清零。