编码器是科技发展的结果,是应用广泛的工业设备了,但是编码器具体有哪些作用?编码器应用在哪些行业?我想还有很多工业新手们还不能熟知的,现在就让编码器生产厂家时硕电子(gdshishuo.com)小编在这里简单为大家介绍一下吧!结合了一些帖子以及应用的过程中出现的一些问题,然后归纳出来的一个总结吧。
第一,编码器概述
编码器是一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感器,我们可以通过编码器测量到底位移或者速度信息。编码器从输出数据类型上分,可以分为增量式编码器和绝对式编码器。
从编码器检测原理上来分,还可以分为光学式、磁式、感应式、电容式。常见的是光电编码器(光学式)和霍尔编码器(磁式)。
第二,编码器原理
光电编码器是一种通过光电转换将输出轴上的机械几何位移转换为脉冲或数字量的传感器。光电编码器由光码盘和光电检测装置组成。光码盘是一个具有一定直径的圆盘,并均匀地开有若干个矩形孔。由于光电编码器与电机同轴,当电机转动时,检测装置检测并输出若干个脉冲信号。为了判断旋转方向,一般输出两组具有一定相位差的方波信号。
霍尔编码器是一种通过磁电转换将输出轴上的机械几何位移转换为脉冲或数字量的传感器。霍尔编码器由霍尔码盘和霍尔元件组成。霍尔码盘在一定直径的圆盘上以不同的磁极等距排列。霍尔码盘与电机同轴。当电机转动时,霍尔元件检测并输出几个脉冲信号。为了判断旋转方向,一般输出两组具有一定相位差的方波信号。
第三、电机编码器接线
然后这里是平衡车上的编码器。
轮子上有一根线,最靠边的两根是电机电源线,由tb6612驱动,可以用来控制电机的速度和转向。然后中间四个是编码器接口。
注意~使用的两个编码器接反了。如果测试时轮子同向旋转,计数值相反,只需改变AB相即可。或者在读取的其中一个数字前加一个减号。
然后编码器电源是5v,电源问题,这个是增量输出霍尔编码器。编码器有AB相输出,不仅能测速度,还能判别旋转方向。根据上图中的接线说明,我们可以看到,我们只需要给编码器电源提供5V的电压,电机转动时就可以通过AB相输出方波信号。编码器自带上拉电阻,无需外接上拉,直接接单片机IO读取即可。
当然,这并不意味着编码器必须使用定时器作为接口。有些微控制器没有编码器接口的功能,也可以用外部中断代替。将编码器A相的输出接到单片机的外部中断输入口,这样可以通过跳变沿触发中断,然后在相应的外部中断服务函数中,再用B相的电平来判断正向和反向旋转。当A相当于一个过渡沿时,B相的高电平为正转,低电平为反转。那么普通的io口也可以处理。
但是使用stm32作为编码器接口的好处是计数更智能,允许接口抖动而不影响结果。而且配置代码很多,拉过来用就行了。所以下面介绍stm32定时器作为编码器接口
第四、定时器作为编码器接口的配置方法
1.计数模式
对应上面两张图 现在,显然用T1和T2一起计数更准确,也就是达到“四倍频”
2、过滤级别
3、计数重载值
是给“
TIM_TimebaseStructure.TIM_Period”赋值,
这些都写在代码的注释里
第五、Encoder应用注意点
1、编码器有速度上限。如果超过这个上限,它将无法正常工作。这是硬件限制。原则上,线数越多,速度越低。选择类型时应注意这一点。编码器的输出一般是漏极开路的,所以单片机的io必须上拉输入状态。
2、定时器初始化后,任何时候CNT寄存器的值就是编码器的位置信息。正向旋转时增加,反向旋转时减少。这部分不需要软件干预。初始化时给定的TIM_Period的值应该是码盘整圈的刻度值,经过减法溢出后会自动修正为这个数。如果添加的值超过此值,它将返回到 0。
3、如果要扩展到多圈计数,需要一个溢出中断。
4、编码器各定时器的输入引脚可由软件设置和过滤
5、如果应用中没有绝对位置信号或者初始化完成后没有收到绝对位置信号前的计数,只能是相对计数。接收到绝对位置信号后,再次修改CNT 的值。编码器一般都有零位信号,可以结合定时器捕捉输入。上电后,需要来回移动才能找到这个位置。
6、即使有过滤器计数值,偶尔也会出现错误。一圈多数或少数是正常的,尤其是速度比较高的时候,有绝对位置信号进行修正是非常有必要的。绝对位置信号不需要在零位点,接收到该信号后将CNT修正为固定值即可。
7、编码器启动定时器的输入中断可达每个步数都被处理,但在高速运行期间您可能无法处理它。
光电编码器是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。光电编码器是由光码盘和光电检测装置组成。光码盘是在一 定直径的圆板上等分地开通若干个长方形孔。由于光电码盘与电动机同轴,电动机旋转时,检测装置检测输出若干脉冲信号,为判断转向,一般输出两组存在一 定相位差的方波信号。
霍尔编码器是一种通过磁电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器。霍尔编码器是由霍尔码盘和霍尔元件组成。霍尔码盘是在一 定直径的圆板上等分地布置有不同的磁极。霍尔码盘与电动机同轴,电动机旋转时,霍尔元件检测输出若干脉冲信号,为判断转向,一般输出两组存在一定相位差的方波信号。
三,电机编码器接线
然后这下面就是讲的平衡车上的编码器啦。
车轮上有根线,最边上的两根是电机电源线,配合tb6612驱动,可用来控制电机的转速和转向。然后中间四根是编码器接口。
要注意哦~用的是两个编码器是反过来的,如果测试时车轮同向转,计数值互为相反数,就把AB相调换一下就好啦。或者把其中一个读到的数前面加个符号。
然后编码器供电是5v,供电问题,这是一款增量式输出的霍尔编码器。编码器有 AB 相输出,所以不仅可以测 速,还可以辨别转向。根据上图的接线说明可以看到,我们只需给编码器电源5V 供电,在电机转动的时候即可通过 AB 相输出方波信号。编码器自带了上拉电阻,所以无需外部上拉,可以直接连接到单片机 IO 读取。
当然不是说编码器就一定要用定时器做接口,有些单片机没有编码器接口的功能,也是可以用外部中断来代替。把编码器 A 相输出接到单片机的外部中断输入口,这样 就可通过跳变沿触发中断,然后在对应的外部中断服务函数里面,然后通过 B 相的电平来确定正转反转。A相当于一个跳变沿的时候,B相高电平就为是正转,低电平就为是反转。然后,普通io口也是可以处理的。
but用stm32做编码器接口的好处是计数比较智能,容许接口出现抖动而不影响结果。而且配置的代码超级多,拉过来就可以用啦。所以下面就是stm32定时器做编码器接口的介绍啦
四,定时器做编码器接口的配置方式
1,计数模式
如上两张图对应着来看呐,显然用T1,T2共同计数比较精确,也就是实现了“四倍频”
2,滤波等级
3,计数重装载值
就是对“
TIM_TimebaseStructure.TIM_Period”赋值,
这些都有写在代码的注释里面
六,编码器应用注意点
1.编码器有个转速上限,超过这个上限是不能正常工作的,这个是硬件的限制,原则上线数越多转速就越低,这点在选型时要注意,编码器的输出一般是开漏的,所以单片机的io一定要上拉输入状态。
2.定时器初始化好以后,任何时候CNT寄存器的值就是编码器的位置信息,正转他会加反转他会减这部分是不需要软件干预的,初始化时给的TIM_Period 值应该是码盘整圈的刻度值,在减溢出会自动修正为这个数。加超过此数值就回0.
3.如果要扩展成多圈计数需要溢出中断像楼主说的,程序上圈计数加减方向位就行了。
4.编码器每个定时器的输入脚可以通过软件设定滤波
5.应用中如果没有绝对位置信号或者初始化完成后还没有收到绝对位置信号前的计数只能是相对计数。收到绝对位置信号后重新修改一次CNT的值就行了。码盘一般都有零位置信号,结合到定时器捕获输入就行。上电以后要往返运动一下找到这个位置。
6.即便有滤波计数值偶尔也会有出错误的情况,一圈多计一个或少计一个数都是很正常的特别是转速比较高的时候尤其明显,有个绝对位置信号做修正是很有必要的。绝对位置信号不需要一定在零位置点,收到这个信号就将CNT修正为一个固定的数值即可。
7.编码器开启定时器的输入中断可以达到每个步计数都作处理的效果,但是高速运转的时候你可能处理不过来。