. .
编码器是什么玩意呢,它可是一个好玩的东西,做小车测速必不可少的玩意,下面,我将从编码器的原理讲起,一直到用stm32的编码器接口模式,测出电机转速与方向。
1.编码器
图1 编码器示意图
图1为编码器的示意图,中间是一个带光栅的码盘,光通过光栅,接收管接收到高电平,没通过,接收到低电平。电机旋转一圈,码盘上有多少光栅,接受管就会接收多少个高电平。371电机中的码盘就是这样的,他是334线码盘,具有较高的测速精度,也就是电机转一圈输出334个脉冲,芯片上已集成了脉冲整形触发电路,输出的是矩形波,直接接单片机IO就OK。 增量式旋转编码器通过部两个光敏接受管转化其角度码盘的时序和相位关系,得到其角度码盘角度位移量增加(正方向)或减少(负方向)。下图为编码器的原理图:
图2 增量式旋转编码器
A,B两点对应两个光敏接受管,A,B两点间距为 S2 ,码盘的光栅间距分别为S0和S1。S0+S1的距离是S2的四倍。这样保证了A,B波形相位相差90度。旋转的反向不同,锯齿波A,B先到达高电平的顺序就会不同,如上图左侧所示,顺序的不同,就可以得到旋转的方向。
2.stm32编码器接口模式(寄存器)
stm32的编码器接口模式在STM32中文参考手册中有详细的说明,在手
册273页,14.3.12节。程序是完全按照 下图方式,设置寄存器的。 请到本文尾下载STM32中文参考手册
页脚
. .
图3
从图3中可以看出,TI1波形先于TI2波形90°时,每遇到一个边沿变
化是,计数器加1(可以通过寄存器设置加减),可以看出一个光栅,被计数了4次。TI1波形后于TI2波形90°时 ,每遇到一次边沿变化,计数器减1。
1. 2. 3. 4. 5. 6. 7. 8. 9.
//TIM2_Encoder_Init,Tim2_CH1(PA0);Tim2_CH2(PA1) //arr:自动重装值 0XFFFF
//psc:时钟预分频数 ,不分频 void TIM2_Encoder_Init(u16 arr,u16 psc) {
RCC->APB1ENR|=1<<0; //TIM2时钟使能
RCC->APB2ENR|=1<<2; //使能PORTA时钟
GPIOA->CRL&=0XFFFFFF00; //PA0、PA1 清除之前设置
10. GPIOA->CRL|=0X00000044; //PA0、PA1 浮空输入 11.
12. TIM2->ARR=arr; //设定计数器自动重装值 13. TIM2->PSC=psc; //预分频器 14.
页脚
. .
15. TIM2->CCMR1 |= 1<<0; //输入模式,IC1FP1映射到TI1上 16. TIM2->CCMR1 |= 1<<8; //输入模式,IC2FP2映射到TI2上 17. TIM2->CCER |= 0<<1; //IC1不反向 18. TIM2->CCER |= 0<<5; //IC2不反向
19. TIM2->SMCR |= 3<<0; //所用输入均在上升沿或下降沿有效 20. TIM2->CR1 |= 1<<0; //使能计数器 21. }
复制代码
3 硬件
用到的模块有STM32核心板、L298电机驱动、371带编码器电机(1:34)。这里主要介绍一下电机,1:34指的是电机轴转动34圈,电机输出1圈。1:X,X值越小,电机的输出转速也就越快,扭矩也就越小;反之,X值越大,电机的输出转速越慢,扭矩也越大。
图4 电机实物图
左边两根黄线是电机两极。绿线和白线是脉冲输出线,分别接编码器的接收管A、B,用一根可以测得速度,两根同时用可测出电机速度与转向。红线和黑线是编码器电源接线,红正黑负,电压3.3V-5V,不不可接反。
页脚