接近开关,光耦

本文介绍了一种NPN接近开关与FPGA的接口设计方案,包括两种实现方法:光电隔离和直接连接,并提供了FPGA程序示例。此外,文章还详细解释了NPN与PNP型传感器的工作原理及其区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

型号:中国沪工集团  LJ18A3-8-Z/CX   (四线制   NPN  常开-常闭)

目的:将接近开关的信号赋给蜂鸣器,但是接近开关一般接24VDC,假如有高电平的输出,那么不能直接接到FPGA引脚或者单片机的IO口上,我知道的有两种方法:

方法一:光电隔离

           我这里采用的是TLP-521-4

           电路图如下:

           

方法二:http://bbs.21ic.com/icview-167011-1-1.html

joyme的话:(自己去理解)

段落一:没有必要那么复杂,传感器信号无非是高电平或低电平,所以检测时只考虑把IO拉低就好,高电平阻止进入MCU
如果NPN是OC(集电极开路输出)则直接接到MCU IO口,IO口上拉一个电阻就好了
如果NPN输出不是OC,接一个二极管阻止24V串入MCU就好

段落二:有什么干扰?为什么24V对单片机会毁灭性打击?

1、接近开关既没有大电流、高电压,又没有高频切换,何来你说的那么严重的干扰?

2、24V是接近开关的电源,你也不会傻到直接把24V连到单片机上吧

我前面的帖子说了,接近开关多数为OC输出,即只会拉低,不会主动输出高电平(估计也是考虑设计兼容性),所以只需加上拉电阻到单片机电源就可以把信号直接接MCU的IO口
即使不是OC输出,高电平是24V,也可以用我说的另一种方式加一个二极管阻止高电平到IO口就搞定了

 

FPGA程序(很简单):

`timescale 1ns/1ns
module clk_ctrl(clk,rst_n,clk_out,signal_in,signal_out);
input clk;//50MHZ,T=20ns
input rst_n;
input signal_in;
output clk_out;
output signal_out;

reg clk_out_reg;//T=2*(50000*20)=2000000ns,即500HZ
reg[15:0] cnt;
reg signal_out;
reg signal_reg;

always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
cnt <= 16'b0;
end
else
if(cnt == 16'b1100_0011_0101_0000)
cnt <= 16'b0;
else
cnt <= cnt + 1'b1;
end

always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
clk_out_reg <= 1'b0;
end
else if(cnt == 16'b1100_0011_0101_0000)
begin
clk_out_reg <= ~clk_out_reg;
end
end

assign clk_out = clk_out_reg;

always@(posedge clk or negedge rst_n)
begin
signal_reg = signal_in;
signal_out = signal_reg;
end

endmodule

其中:signal_in是信号输入(黑色线),signal_out绑定蜂鸣器的引脚。

 

关于NPN接近开关的简单介绍:

PNP与NPN型传感器根本的区别在哪?

PNP与NPN型传感器其实就是利用三极管的饱和和截止,输出两种状态,属于开关型传感器。但输出信号是截然相反的,即高电平和低电平。NPN输出是低电平0,PNP输出的是高电平1。

   

    PNP与NPN型传感器(开关型)分为六类:

    1、NPN-NO(常开型)

    2、NPN-NC(常闭型)

    3、NPN-NC+NO(常开、常闭共有型)

    4、PNP-NO(常开型)

    5、PNP-NC(常闭型)

    6、PNP-NC+NO(常开、常闭共有型)

    PNP与NPN型传感器一般有三条引出线,即电源线VCC、0V线,out信号输出线。

    1、PNP类

    PNP是指当有信号触发时,信号输出线out和电源线VCC连接,相当于输出高电平的电源线。

    对于PNP-NO型,在没有信号触发时,输出线是悬空的,就是VCC电源线和out线断开。有信号触发时,发出与VCC电源线相同的电压,也就是out线和电源线VCC连接,输出高电平VCC。

    对于PNP-NC型,在没有信号触发时,发出与VCC电源线相同的电压,也就是out线和电源线VCC连接,输出高电平VCC。当有信号触发后,输出线是悬空的,就是VCC电源线和out线断开。

    对于PNP-NC+NO型,其实就是多出一个输出线OUT,根据需要取舍。

    2、NPN类

    NPN是指当有信号触发时,信号输出线out和0v线连接,相当于输出低电平,ov。

    对于NPN-NO型,在没有信号触发时,输出线是悬空的,就是0v线和out线断开。有信号触发时,发出与OV相同的电压,也就是out线和0V线连接,输出输出低电平OV。

    对于NPN-NC型,在没有信号触发时,发出与0V线相同的电压,也就是out线和0V线连接,输出低电平0V。当有信号触发后,输出线是悬空的,就是0V线和out线断开。

    对于NPN-NC+NO型,和NPN-NC+NO型类似,多出一个输出线OUT,及两条信号反相的输出线,根据需要取舍。

 

集电极开路输出的结构OC门(理解)

我们先来说说集电极开路输出的结构。集电极开路输出的结构如图1所示,右边的那个三极管集电极什么都不接,所以叫做集电极开路(左边的三极管为反相之用,使输入为“0”时,输出也为“0”)。对于图1,当左端的输入为“0”时,前面的三极管截止(即集电极C跟发射极E之间相当于断开),所以5V电源通过1K电阻加到右边的三极管上,右边的三极管导通(即相当于一个开关闭合);当左端的输入为“1”时,前面的三极管导通,而后面的三极管截止(相当于开关断开)。

我们将图1简化成图2的样子。图2中的开关受软件控制,“1”时断开,“0”时闭合。很明显可以看出,当开关闭合时,输出直接接地,所以输出电平为0。而当开关断开时,则输出端悬空了,即高阻态。这时电平状态未知,如果后面一个电阻负载(即使很轻的负载)到地,那么输出端的电平就被这个负载拉到低电平了,所以这个电路是不能输出高电平的。

再看图三。图三中那个1K的电阻即是上拉电阻。如果开关闭合,则有电流从1K电阻及开关上流过,但由于开关闭和时电阻为0(方便我们的讨论,实际情况中开关电阻不为0,另外对于三极管还存在饱和压降),所以在开关上的电压为0,即输出电平为0。如果开关断开,则由于开关电阻为无穷大(同上,不考虑实际中的漏电流),所以流过的电流为0,因此在1K电阻上的压降也为0,所以输出端的电压就是5V了,这样就能输出高电平了。但是这个输出的内阻是比较大的(即1KΩ),如果接一个电阻为R的负载,通过分压计算,就可以算得最后的输出电压为5*R/(R+1000)伏,即5/(1+1000/R)伏。所以,如果要达到一定的电压的话,R就不能太小。如果R真的太小,而导致输出电压不够的话,那我们只有通过减小那个1K的上拉电阻来增加驱动能力。但是,上拉电阻又不能取得太小,因为当开关闭合时,将产生电流,由于开关能流过的电流是有限的,因此限制了上拉电阻的取值,另外还需要考虑到,当输出低电平时,负载可能还会给提供一部分电流从开关流过,因此要综合这些电流考虑来选择合适的上拉电阻。

如果我们将一个读数据用的输入端接在输出端,这样就是一个IO口了(51的IO口就是这样的结构,其中P0口内部不带上拉,而其它三个口带内部上拉),当我们要使用输入功能时,只要将输出口设置为1即可,这样就相当于那个开关断开,而对于P0口来说,就是高阻态了。

对于漏极开路(OD)输出,跟集电极开路输出是十分类似的。将上面的三极管换成场效应管即可。这样集电极就变成了漏极,OC就变成了OD,原理分析是一样的。

另一种输出结构是推挽输出。推挽输出的结构就是把上面的上拉电阻也换成一个开关,当要输出高电平时,上面的开关通,下面的开关断;而要输出低电平时,则刚好相反。比起OC或者OD来说,这样的推挽结构高、低电平驱动能力都很强。如果两个输出不同电平的输出口接在一起的话,就会产生很大的电流,有可能将输出口烧坏。而上面说的OC或OD输出则不会有这样的情况,因为上拉电阻提供的电流比较小。如果是推挽输出的要设置为高阻态时,则两个开关必须同时断开(或者在输出口上使用一个传输门),这样可作为输入状态,AVR单片机的一些IO口就是这种结构。

试验图片如下:

 

 

 

 

   

 

转载于:https://www.cnblogs.com/chasing/p/3647346.html

### 接近开关单片机的连接方法及电路设计 接近开关是一种用于检测物体是否存在或距离的传感器。当将其应用于单片机系统时,通常需要完成信号采集并由单片机处理这些数据。以下是关于如何将红外接近开关连接到单片机上的具体方法以及相关电路设计。 #### 1. 硬件接口设计 红外接近开关一般具有三个主要端子:VCC、GND 和 OUT。其中 VCC 是供电正极,GND 是接地端,OUT 则是输出信号端。为了实现接近开关的功能并与单片机通信,可以按照以下方式连接: - **VCC 连接**:将接近开关的 VCC 脚接到单片机系统的电源电压上,通常是 3.3V 或 5V[^2]。 - **GND 连接**:将 GND 脚连接至单片机的地线。 - **OUT 输出脚连接**:此脚位提供逻辑电平输出(高/低),应连接到单片机的一个 GPIO 输入引脚。该引脚需配置为输入模式以便读取状态变化。 对于 STM32 开发板而言,其硬件连接图如下所示: ```plaintext +------------------+ +--------------------+ | | | | | STM32开发板 |------>| 红外接近开关 | | | | | | IO口(Pin X) -----+----->| OUT | | GND ---------------+---->| GND | | 3.3V / 5V --------+---->| VCC | | | | | +------------------+ +--------------------+ ``` #### 2. 电气特性匹配 由于不同型号的接近开关可能有不同的工作电压范围和电流需求,在实际应用前务必查阅产品规格书确认参数一致性。如果接近开关的工作电压高于目标 MCU 的耐受水平,则应在两者之间加入分压电阻网络或者使用光耦隔离来保护设备安全运行。 另外需要注意的是,某些类型的接近开关可能会带有拉载能力有限的情况,因此建议增加外部下拉电阻以稳定信号传输质量。 #### 3. 单片机程序编写要点 在完成了上述物理层面的连线之后,还需要通过固件代码设置相应的功能模块才能让整个系统正常运作起来。这里给出一段简单的伪代码作为参考实例说明如何利用定时器轮询机制监测接近开关的状态改变事件: ```c #include "stm32fxxx_hal.h" #define APPROACH_SWITCH_PIN GPIO_PIN_X #define APPROACH_SWITCH_PORT GPIOX void ApproachSwitch_Init(void){ // 初始化GPIO管脚为输入模式... } uint8_t Read_Approach_Switch_Status(){ return HAL_GPIO_ReadPin(APPROACH_SWITCH_PORT, APPROACH_SWITCH_PIN); } ``` 以上片段展示了初始化过程以及获取当前接近开关状态的方法。开发者可以根据项目特定的需求进一步扩展业务逻辑部分的内容。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值