单片机学习小组
直播中

楼斌

8年用户 893经验值
私信 关注

旋转编码器如何进行编程?

旋转编码器如何进行编程?

回帖(1)

李涛

2022-1-21 09:30:54
一:学习要点:
1.手册只讲了原理,连引脚定义也没有,模块上的引脚标号也不正确。好在旋转编码器是开关量类的传感器,解决办法如下,在三个信号输出引脚上分别接上LED灯,旋转编码器观察LED灯的亮灭情况定义引脚。由此推测,开光量传感器在引脚定义不清楚时可以用这种观察方式;


2. 旋转编码器的关键就是判断K2与K3的先后顺序,加入“松手检测”语句就可以很好的解决这个问题。详见下文程序。
3.松手检测死循环语句适用情况
1)、需要检测信号的先后顺序,可在第一个信号出发后加一个松手检测,第一个信号结束后再判断第二个;
2)、等待信号到来,并计数的情况类似超声传感器中的等待到高电平的情况。
二:手册分析(基本上没用)


  • 旋转编码器可通过旋转可以计数正方向和反方向转动过程中输出脉冲的次数,旋转计数不像电位计,这种转动计数是没有限制的。配合旋转编码器上的按键,可以复位到初始状态,即从 0 开始计数。
  • 增量编码器是一种将旋转位移转换为一连串数字脉冲信号的旋转式传感器。这些脉冲用来控制角位移。在 Eltra 编码器中角位移的转换采用了光电扫描原理。读数系统通常采用差分方式,即将两个波形一样但相位差为180°的不同信号进行比较,以便提高输出信号的质量和稳定性。读数是再两个信号的差别基础上形成的,从而消除了干扰。
  • 增量编码器给出两相方波,它们的相位差 90°,通常称为 A 通道和 B 通道。其中一个通道给出与转速相关的信息,与此同时,通过两个通道信号进行顺序对比,得到旋转方向的信息。还有一个特殊信号称为 Z 或零通道,该通道给出编码器的绝对零位,
    三:编程
    1.程序功能:顺时针旋转加一,逆时针旋转减一,按下归0,并在串口输出,利用指针传址参数,直接把变量名放入参数列表就行了;
    2.程序现象如图


encoder.h
#ifndef ENCODER_H
#define ENCODER_H
#include “reg52.h”
***it SW = P2^0;
***it DT = P2^1;
***it CLK= P2^2;
void Encoder_Clockwise(unsigned int *p);
#endif
encoder.c
#include “encoder.h”
#include “delay.h”
#include “reg52.h”
/*通过目视观察现象,引脚乱标。。。。
1.顺时针旋转:DT=0->CLK=0;
2.逆时针旋转:CLK=0->DT=0;
3.按下按键后:SW=0;
*/
void Encoder_Clockwise(unsigned int *p)
{
if(0==DT)
{
while(0 == DT) ;
if (0 == CLK)
{
*p = *p + 1;
}
else
{
*p = *p - 1;
}
}
if(SW == 0)
{
while(SW ==0);
*p = 0;
}
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分