■ 接近开关
在一个丝杠上面的行程开关 SN04-N 属于非接感应式行程开关。
▲ 行程开关的外形
- Brown wire: 10 ~ 30 VDC (+Ve).
- Blue wire: 0 V (GND).
- Black wire: signal.
▲ 丝杠单轴平台
01更换接口
为了能够制作与已有的步进驱动平台相同的接口,需要对于SN04-N接近开关进行改装。 相关的步进驱动平台包括:
- 单轴步进驱动模块SH-20403
- DRV8825步进电机驱动控制模块以及双轴平台
- 基于ESP8266WiFi步进电机控制
- SH-20403AXIS12双轴蓝牙移动框架
- - [ ] 基于ESP8266 WiFi控制的步进升降机械平台
1.原来的接口
传感器原有的接口为下图所示的三芯接头。对应的引线定义:
▲ 三芯接口的管脚
PIN1 | PIN2 | PIN3 |
---|---|---|
Brown | Black | Blue |
+VCC | SIGNAL | GND |
2.修改后的接口定义
▲ 修改后的3PIN接口
02测试开关动作
1.基本功能测试
给传感器施加+12V的工作电源。使用不锈钢尺靠近感应开关,可以看到在5mm之内,开关就会动作。
- 传感器的工作电流:1 ~ 2mA
- 输出端口:平时+12V; 不锈钢尺接近之后,输出:0.6V左右。
▲ 使用钢尺靠近开关检测开关的功能
2.工作电源测试
测试一下电压都能够工作。
- 最低电压:5V
- 高电压:+24V
03测量电磁感应信号
1.测量方法
使用 工字型电感 来测量行程开关外部的交变磁场。
▲ 使用工字型电感(10mH)测量传感器外部的交变电磁场
2.测量波形
在相距5mm左右,测量得到的电压幅值:Vp-p=5.5V。频率:273.7kHz。
▲ 测量行程开关顶部的交变电磁场信号
改变距离,幅值改变较大,频率也随着做变化,变化频率大约4kHz左右。
使用万用表测量输出信号的波形出现较大的变化。
3.不同工作电压下波形
(1) 处理方法分析
使用DS6104数字示波器采集信号波形。然后通过补零进行FFT,求取信号中最大谐波的幅度和频谱。
下面是传感器工作在3V下,使用工字电感(10mH)检测到的外部的磁场的波形。
▲ 使用DS6104采集到的信号波形(工作电源3V)
通过补充99倍的零之后的FFT的频谱为。
▲ 补充99倍零之后FFT的幅度谱
▲ 频谱在0-5000的频谱波形
寻找到最大的频谱的幅值: Vp=380.85,位置:Np=3832
ymax = amax(yfftabs[0:int(len(x) * 100 / 3)])
yid = where(yfftabs[0:int(len(x) * 100 / 3)] == ymax)[0][0]
示波器采集仪帧数据的时间 T 1 = 140 × 1 0 − 6 s T_1 = 140 \times 10^{ - 6} s T1=140×10−6s。补充100倍的零之后的时间长度为: T 100 = 140 × 1 0 − 4 s T_{100} = 140 \times 10^{ - 4} s T100=140×10−4s。对应FFT每个频谱之间的频谱间隔为: f 100 = 1 T 100 = 1 140 × 1 0 − 4 = 71.429 H z f_{100} = {1 \over {T_{100} }} = {1 \over {140 \times 10^{ - 4} }} = 71.429Hz f100=T1001=140×10−41=71.429Hz
那么上面峰值Np对应的基波频谱为: f b = f 100 × N p = 71.429 × 3832 = 273715 H z f_b = f_{100} \times N_p = 71.429 \times 3832 = 273715Hz fb=f100×Np=71.429×3832=273715Hz
上面的频率值与示波器读出的读出的频率是一致的。
采集到的数据个数 N = 1400 N = 1400 N=1400,根据Vp可以计算出信号的有效值为: V r m s = V p 1400 × 2 2 = 380.85 1400 × 2 = 0.385 V V_{rms} = {{V_p } \over {1400}} \times {2 \over {\sqrt 2 }} = {{380.85} \over {1400}} \times \sqrt 2 = 0.385V Vrms=1400Vp×22=1400380.85×2=0.385V
这个数值与示波器读取的信号有效值0.391V是相近的。
(2) 计算公式
通过DS6104读取的N=1400个数据,通过补99倍的零,然后进行FFT计算,搜索幅度谱的最高值Vp,以及对应的位置Np。信号的幅值
V
r
m
s
V_{rms}
Vrms以及频率
f
b
f_b
fb分别是:
V
r
m
s
=
V
p
1400
×
2
V_{rms} = {{V_p } \over {1400}} \times \sqrt 2
Vrms=1400Vp×2
f b = N p × 71.429 H z f_b = N_p \times 71.429Hz fb=Np×71.429Hz
(3) 测量数据
下面测量工作电压从3V变化到24V测量磁场的幅值变化。需要说明的是,当电压大于17V之后,输出幅值变化变缓是由于输出波形的幅值超过的示波器显示的上下限,出现采集饱和造成的原因。
▲ 不同工作电压测量信号的幅值
通过上面实验基本上可以判断振荡的信号强度与工作电压之间呈现线性关系。
(4) 外部金属片对于振荡信号影响
- 当外部金属品接近传感器,震荡性信号消失。
- 能够触发动作的金属经过测试: 铜箔、钢尺、铝散热器等。
▲ 能够引起传感器动作的金属
※ 结论
通过改装和测量SN04-N 接近无接触行程开关。
- 接口定义为3PIN:+5V,GND,OUT
- 工作电源:+5V ~ 24V
- 输出接口: 平时输出电压VCC;接近开关动作后,输出+0.6V .
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY -- by Dr. ZhuoQing 2020-09-18
#
# Note:
#============================================================
from headm import *
from tsmodule.tsvisa import *
import meas
dp1308open()
ds6104open()
#------------------------------------------------------------
vset = linspace(3, 24, 100)
vrmsdim = []
fbdim = []
for v in vset:
dp1308p25v(v)
time.sleep(1)
x, y = ds6104readcal()
vrms, fb = meas.waveampf(x,y)
printf(vrms, fb)
vrmsdim.append(vrms)
fbdim.append(fb)
tspsave('work', vset=vset, vrms=vrmsdim, fb=fbdim)
#------------------------------------------------------------
plt.plot(vset, vrmsdim)
plt.xlabel("Work Voltage(V)")
plt.ylabel("Output Voltage(V)")
plt.grid(True)
plt.tight_layout()
plt.show()
#------------------------------------------------------------
# END OF FILE : TEST1.PY
#============================================================
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# MEAS.PY -- by Dr. ZhuoQing 2020-09-18
#
# Note:
#============================================================
from headm import *
def waveampf(x, y):
y00 = zeros(len(x) * 1)
y00[0:len(x)] = y
yfftabs = abs(fft.fft(y00))
ymax = amax(yfftabs[0:int(len(x) * 100 / 3)])
yid = where(yfftabs[0:int(len(x) * 100 / 3)] == ymax)[0][0]
return ymax*sqrt(2) / 1400, yid*71.429
if __name__ == "__main__":
x, y = tspload('measure', 'x', 'y')
vrms, fb = waveampf(x, y)
printf(vrms, fb)
plt.plot(x,y)
plt.xlabel("Time(s)")
plt.ylabel("Voltage(V)")
plt.grid(True)
plt.tight_layout()
plt.show()
#------------------------------------------------------------
# END OF FILE : MEAS.PY
#============================================================
■ 相关文献链接: