stm32编码器正交解码代码,c文件和h文件加入程序即可使用,寄存器编写,方便移植
部分源码预览:
- #include "Speed_Sensor.h"
- int Drum_Speed=0,Axial_Speed=0;
- void SpeedSensor_Init(void)
- {
- SpeedSensor_Init_TIM2();
- SpeedSensor_Init_TIM3();
- }
- /**************************************************************************
- 函数功能:把TIM2初始化为编码器接口模式
- 入口参数:无
- 返回 值:无
- **************************************************************************/
- void SpeedSensor_Init_TIM2(void)
- {
- RCC->APB1ENR|=1<<0; //TIM2时钟使能
- RCC->APB2ENR|=1<<2; //使能PORTA时钟
- GPIOA->CRL&=0XFFFFFFF0;//PA0
- GPIOA->CRL|=0X00000004;//浮空输入
- /* 把定时器初始化为编码器模式 */
- TIM2->PSC = 71;//预分频器
- TIM2->ARR = SpeedSensor_TIM_PERIOD-1;//设定计数器自动重装值
- TIM2->CCMR1 |= 1<<0; //输入模式,IC1FP1映射到TI1上
- TIM2->CCMR1 |= 0xF<<4; //输入滤波器
- TIM2->CCER |= 0<<1; //IC1不反向
- TIM2->SMCR |= 7<<0; //SMS='011' 所有的输入均在上升沿和下降沿有效
- TIM2->SMCR |= 5<<4; //
- TIM2->CR1 |= 0x01; //CEN=1,使能定时器
- }
- /**************************************************************************
- 函数功能:把TIM4初始化为编码器接口模式
- 入口参数:无
- 返回 值:无
- **************************************************************************/
- void SpeedSensor_Init_TIM3(void)
- {
- RCC->APB1ENR|=1<<1; //TIM3时钟使能
- RCC->APB2ENR|=1<<2; //使能PORTA时钟
- GPIOA->CRL&=0XF0FFFFFF;//PA6
- GPIOA->CRL|=0X04000000;//浮空输入
- /* 把定时器初始化为编码器模式 */
- TIM3->PSC = 71;//预分频器
- TIM3->ARR = SpeedSensor_TIM_PERIOD-1;//设定计数器自动重装值
- TIM3->CCMR1 |= 1<<0; //输入模式,IC1FP1映射到TI1上
- TIM3->CCMR1 |= 0xF<<0; //输入滤波器
- TIM3->CCER |= 0<<1; //IC1不反向
- TIM3->SMCR |= 7<<0; //SMS='011' 所有的输入均在上升沿和下降沿有效
- TIM3->SMCR |= 5<<4; //
- TIM3->CR1 |= 0x01; //CEN=1,使能定时器
- }
- /**************************************************************************
- 函数功能:单位时间读取编码器计数
- 入口参数:定时器
- 返回 值:速度值
- **************************************************************************/
- void Read_SpeedSensor(void)
- {
- Axial_Speed= (short)TIM2 -> CNT; TIM2 -> CNT=0;
- Drum_Speed= (short)TIM3 -> CNT; TIM3 -> CNT=0;
- }
复制代码
完整代码下载:
编码器单路捕获.rar
(1.02 KB, 下载次数: 73)
|