io_with_plc

Tue, 2023-07-11
本文最后修改于 Thu, 2023-08-17
io_with_plc

2023-08-17 update: summary 中添加开关状态

Intro

在阅读之前有一点需要注意的是,我们的输出、输入,和 PLC 的输出、输入不一样,PLC 的输出和输入是带着电源的,我们的不带电源。这点对输入很好理解,但是对于输出,不能理解成我们输出电压,我们的输出只是一个开关。

Input

input

一些标记

  • 左侧
    • OP_IN0:外部看到的 IN0
    • COMIN1:外部看到的 IN 口的 COM
  • 右侧
    • ⏚ :地 GND
    • GPIO1_C0_Z:连到上级芯片(主芯片)。
  • 中间
    • PS2805:光耦,如果 1 2 引脚间有电压差,就会发光,会激发 3 4 引脚间的光敏二极管,即 3 4 导通,也就是 有电压差,开关闭合
    PS2805

右(内)侧电路

先说简单的:

  • 工作状态:3 4 引脚间的光敏二极管导通,GPIO1_C0_Z 的电压等于 3 引脚的 GND,低电平
  • 停止工作状态:3 4 引脚间的光敏二极管开路断开,GPIO1_C0_Z 的电压等于 VCC_1V8_S0,高电平

左(外)侧电路

  • COMIN1 高电平
    • OP_IN0 低电平,1 2 之间电压差,中间的光耦工作。
    • OP_IN0 高电平,1 2 之间电压差,中间的光耦不工作。
  • COMIN1 低电平,OP_IN0=11 2 之间有电压差,中间的光耦工作
    • OP_IN0 低电平,1 2 之间电压差,中间的光耦不工作。
    • OP_IN0 高电平,1 2 之间电压差,中间的光耦工作。

整体电路

定义:

  • COMIN1COM
  • OP_IN0IN
  • GPIO1_C0_ZGPIO
  • 高电平为 1, 低电平为 0

那么:

IN = 1IN = 0
COM = 1GPIO = 1GPIO = 0
COM = 0GPIO = 0GPIO = 1

\(\text{GPIO} = \text{IN} \odot \text{COM}\) 同或关系(相同为1)

上升沿和下降沿看的是 IN,所以:

  • 如果 COM 口 是高电平,\(\text{GPIO} = \text{IN}\)
  • 如果 COM 口 是低电平,\(\text{GPIO} = \overline{\text{IN}}\),那么实际的上升沿和输入到系统的上升沿是反的

  • COM 口 高电平对应的 PLC 类型是 NPN
  • COM 口 低电平对应的 PLC 类型是 PNP
IN = 1IN = 0to soc
NPN COM = 1GPIO = 1GPIO = 0No reverse
PNP COM = 0GPIO = 0GPIO = 1Reverse

With PLC side

为了理解输出我们需要看完整的电路情况

Simple View

COM = 1COM = 0
input_com_pinput_com_n

值:

IN = 1 (PLC 开关断开)IN = 0 (PLC 开关闭合)to soc
NPN COM = 1GPIO = 1GPIO = 0No reverse
PNP COM = 0GPIO = 0GPIO = 1Reverse

延触发:

NPNCOM=1

开关状态IN外部的沿光耦间电压差GPIOto soc
断开->闭合1->0下降沿无->有1->0下降沿
闭合->断开0->1上升沿有->无0->1上升沿

PNPCOM=0

开关状态IN外部的沿光耦间电压差GPIOto soc
断开->闭合0->1上升沿无->有1->0下降沿
闭合->断开1->0下降沿有->无0->1上升沿

Full View

相对更完整的视图

COM = 1, NPNCOM = 0, PNP
input_with_npn_plcinput_with_pnp_plc

输出端:

output

一些标记

  • 右(外)侧
    • OP_OUT0:外部看到的 OUT0
    • COMOUT0:外部看到的 OUT 口的 COM
    • BCX55:NPN 三极管
  • 左(内)侧
    • RJ45_3V3:3.3V
    • OUT0_V:连到上级芯片(主芯片),被控制的引脚。
  • 中间
    • PS2805 同 INPUT

左(内)侧电路

  • OUT0_V 低电平,1 2 之间电压差,中间的光耦工作。
  • OUT0_V 高电平,1 2 之间电压差,中间的光耦不工作。

右(外)侧电路

如开始所说,我们的输出的外侧需要接外部电源。由于中间的三极管是 NPNe极需接低电平,c极需接高电平,所以,COMOUT0 需要连低电平,OP_OUT0 = 1 需要连接高电平。

  • 停止工作状态:3 4 引脚间的光敏二极管开路断开,三极管NPNb 极电平等于COMOUT0=0,三极管截止,OP_OUT0 电压等于外部电压也就是 0
  • 工作状态:3 4 引脚间的光敏二极管导通,三极管NPNb 极电平等于OP_OUT0=1,三极管导通,OP_OUT0 的电压等于 COMOUT0 + 三极管分压 ~0(有个问题:为什么不是 COMOUT0 的电压等于 OP_OUT0 的电压?这个问题需要考虑负载,但是通常,COM 口会直连电源的正负极,负载会在 OP_OUT0 和电源之间,所以这里是 OP_OUT0 电平被拉到和 COMOUT0 一致。有点绕,因为这里没有地)
3 4 光敏二极管NPNb 极电压三极管状态OP_OUT0 电压
断开等于COMOUT0=0截止初始电压 0
导通等于OP_OUT0 =1然后略大于 0导通拉低 ~0+(三极管分压)

整体电路

定义:

  • COMOUT0COM
  • OP_OUT0OUT
  • OUT0_VGPIO
  • 高电平为 1, 低电平为 0

那么:

COM = 0
GPIO = 1OUT = 1
GPIO = 0OUT = 0

With PLC side

output_wit_plc

COM=0

GPIO光耦间电压差开关状态OUT外部的沿
1->0无->有断开->闭合1->0下降沿
0->1有->无闭合->断开1->0上升沿

Others

最开始说的我们的输出和输入是不带源的,那么如果想让我们的 Output 输出到 Input,需要做的就是外加一个电源。

output_to_input

Summary

由于很多机构只关注自己的开关型号和是否有输出(即上文所述的开关的状态)。而我们的软件给的是电平,所以这里也给出相应的结论:

Input

外部 PLC NPNCOM=1

开关状态外部的沿to soc
按下下降沿下降沿
松开上升沿上升沿

外部 PLC PNPCOM=0

开关状态外部的沿to soc
按下上升沿下降沿
松开下降沿上升沿

Output

GPIO“开关状态”外部的电平
0按下(有输出)0
1松开(无输出)1
  • 当然我们自己的板子是没有所谓的开关状态的,就是方便和外部对状态。
  • Kenexs 软件中的输出高低电平是和外部的电平统一的
avatar
除非注明,本博客所有文章皆为原创。
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。