增量编码器输出方式

增量型编码器的输出电路包括集电极输出(Collector Output)型、电压输出(Voltage Output)型、推挽输出(Push-Pull Output)型及线驱动输出(Line Driver Output)型
输出电路的核心元器件是三极管。我们知道三极管有三个极:基极(Base)、发射极(Emitter)和集电极(Collector)。编码器的集电极输出电路是以三极管的发射极为公共端,信号从集电极输出的电路。由于三极管分为PNP和NPN两种,相应的,编码器的集电极输出电路也分为PNP和NPN两种。

下面这张图是欧姆龙E6B2-CWZ5B编码器的集电极输出电路(PNP型),可以看到编码器的电源(+12V或+24V)通过一个3.3欧姆的电阻连接到三极管的发射极上,而脉冲信号(A/B/Z)则是从集电极进行输出:
在这里插入图片描述

NPN型集电极输出电路与之类似,只不过发射极(公共端)连接的是0V,如下面的E6B2-CWZ6C输出电路:

在这里插入图片描述

电压输出型是在NPN型三极管的集电极与电源之间连接一个上拉电阻,这样集电极的输出电压会被钳制在一个稳定的范围。如下面这张图是欧姆龙E6B2-CWZ3E的电压输出电路:
在这里插入图片描述

推挽输出(Push-Pull Output)电路由两个三极管组成,比如下面这张图的T1和T2。
在这里插入图片描述

推挽输出的两个三极管分别接受输入信号和该信号的反相信号,当输入信号(Input Signal)为1时,T1导通,此时输入信号的反相为0,因此T2截止;同样的,当输入信号为0时,T1截止,此时输入信号的反相为1,因此T2导通;可见推挽式输出电路可以输出信号的正反两相(比如A和A补),其抗干扰能力比较强,适合较远距离的传输。

线驱动输出(Line Driver Output)电路是使用专用输出芯片,输出符合RS422标准的差分信号,抗干扰能力更强,适合用于传输速度较高、距离较远的场合。下面这张图,是欧姆龙E6B2-CWZ1X的线驱动输出电路:
在这里插入图片描述

参考资料链接

TTL(transistor transistor logic)
TTL信号是数字信号的基础,通常我们采用二进制来表示数据。TTL电平信号规定,+5V等价于逻辑“1”,0V等价于逻辑“0”。这样的数据通信及电平规定方式,被称做TTL(晶体管-晶体管逻辑电平)信号系统。这是计算机处理器控制的设备内部各部分之间通信的标准技术。TTL更多的是用于电路设计,各种芯片单片机的输入输出是TTL信号,它是相对于外部电缆传输的较高电平HTL信号的低电平(5V),定义的数据1(5V)和0(0V)的逻辑电平信号。

长线驱动信号(line driver)
是指发送端与接收端有一对配对的长线驱动器,它们各自有正负两个管脚,当发送端正管脚为高电平往外推送信号电流时,接收端的正管脚为低电平往里拉信号电流(推拉式)。此时电流的方向与信号流的方向一致,视为逻辑1。

当发送端正管脚为低电平时,接收端的正管脚为高电平,发送端相当于往里拉电流,电流方向与信号流方向是反的,此时视为逻辑0。

TTL:晶体管-晶体管逻辑(transistor-transistorlogic)
HTL:高压晶体管逻辑(high-transistor logic)

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
增量编码器是一种常用的传感器,用于测量旋转运动或线性运动的位置和方向。如果你想在Arduino上使用增量编码器,你需要连接编码器输出信号线到Arduino的数字引脚上,并使用相应的代码来读取编码器的数据。以下是一个简单的示例代码: ```cpp // 定义编码器引脚 const int encoderPinA = 2; const int encoderPinB = 3; // 定义变量 volatile int encoderPos = 0; int encoderPinALast = LOW; // 中断服务程序 void encoderInterrupt() { int encoderPinAState = digitalRead(encoderPinA); if (encoderPinAState != encoderPinALast) { if (digitalRead(encoderPinB) != encoderPinAState) { encoderPos++; } else { encoderPos--; } } encoderPinALast = encoderPinAState; } void setup() { // 设置编码器引脚为输入 pinMode(encoderPinA, INPUT); pinMode(encoderPinB, INPUT); // 启用编码器引脚的中断 attachInterrupt(digitalPinToInterrupt(encoderPinA), encoderInterrupt, CHANGE); // 初始化串口通信 Serial.begin(9600); } void loop() { // 读取编码器的位置 int currentPosition = encoderPos; // 输出位置到串口 Serial.println(currentPosition); // 延迟一段时间 delay(100); } ``` 这段代码使用了Arduino的中断功能来读取编码器的数据。编码器的引脚A连接到Arduino的引脚2,引脚B连接到引脚3。中断服务程序根据编码器引脚A和B的状态变化来更新编码器的位置。在主循环中,我们读取编码器的位置并通过串口输出。 请注意,这只是一个简单的示例代码,你可能需要根据你的具体编码器和需求进行适当的调整。希望对你有帮助!如果你有更多问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值