1. 引言
随着工业社会的逐渐形成,社会工业化程度日渐提高,各式各样的金属制品层出不穷,导致金属分拣工作益加繁忙,金属的识别愈发重要起来。在金属识别领域,电涡流传感器有着重要的地位[1]。利用电磁感应的原理,交流电通过的线圈,产生迅速变化的磁场,这个磁场能在金属物体内部能感生涡电流,涡电流又会产生磁场,倒过来影响原来的磁场,最终影响电流系数的变化。通过桥电路的方式,将电流系数的变化通过电压来表现出来。使用WL01电涡流传感器对金属的识别中发现不同金属之间的差异较小,如果直接连接单片机使用ADC读取传感器输出值,会出现金属识别的误判,从而降低正确率。因此在涡流传感器与单片机连接处加上了运算放大器,将涡流传感器的输出电压进行放大,放大不同金属之间的差异,提升金属识别的准确率。
2. 解决方式
本文采用运算放大电路对电涡流传感器的输出信号进行放大处理,并采用直流偏置的方式将运算放大电路的输出电压稳定在合适范围。INPUT连接电涡流传感器,运算放大器的输入口使用M级的电阻大小,降低在电阻上消耗的电阻。BIAS1为偏置电压输入口,BIAS1连接单片机的PWM (脉宽调制)输出口,通过R13与C2建立的一阶滤波器,稳定3号角的输入电压。ADC连接单片机的ADC引脚读取电压。运算放大电路原理图见图1。
INPUT连接电涡流传感器,BIAS1为偏置电压输入口,BIAS1连接单片机的PWM (脉宽调制)输出口,通过R13与C2建立的一阶滤波器,稳定3号角的输入电压。ADC连接单片机的ADC引脚读取电压。
选择LM358芯片作为运算放大器,由于其内部的阻抗巨大,在实际电路中几乎没有电流通过2,3引脚流入运算放大器中,存在虚断现象[2],在电路中的实际表现为,
,
。上图中的电路通过INPUT与R18形成深度负反馈电路,符合运算放大器虚短特性的条件,在上图中的电路表现为运算放大器2号脚和3号脚的电压相同
。通过该电路的特性我们可以列出方程:
(1)
Figure 1. Arithmetic amplification circuit
图1. 运算放大电路
通过对方程进行化简最终得出:
(2)
WL01电涡流传感器理论上的输出电压为0~1.8 V,在实际电路使用中WL01在空载状态下的输出电压为1.98 V。将测试金属放置在传感器中,传感器输出的电压开始下降,由此我们可以得出传感器输出电压的最大值为2 V左右徘徊[3]。我们使用传感器进行了多种金属的测试,发现常见的金属在测试中传感器的输出电压都大于0.5 V。最终得出INPUT的输出范围为0.5 V~2 V。INPUT的输出极差为1.5 V,而单片机可识别的电压极差为3.3 V,因此选择该运算放大倍率为2。通过(2)式,不难看出VINPUT与VADC的比例关系由R17和R18相决定。因此选择R17 = 1.5 M,R18 = 3 M,使得放大倍率为2。最终方程变化为:
(3)
通过(3)式,不难看出运算放大器的输入电压VINPUT与输出电压VADC呈负相关。当VBIAS = 0的状态下,可以发现无论VINPUT在区间内如何改变,VADC的输出值始终无法为正数。因此采用升高VBIAS偏置电压,在不影响放大倍率的情况下,将运算放大的输出电压向上抬高,使得在
的条件下,尽可能将VINPUT的量程包含在其中。使用公式(2)解算方程,得出在VBIAS = 1.4 V的情况下,为相对最优解。在此状态下,当VADC = 3.3 V的情况下,VINPUT = 0.45 V,当VADC = 0 V,VINPUT = 2.1 V。及再此状态下VINPUT的输入范围为0.45~2.1 V,符合WL01电涡流传感器的输出电压范围。
3. 软件滤波
本系统使用WL02涡流传感器对金属进行识别,将输出信号通过运算放大电路的处理传输到单片机中。采用stm32单片机作为系统微处理器单元。使用stm32单片机ADC功能读取来自运算放大电路的输出,通过滤波处理的方式将所金属特征值传输至电脑上位机。系统设计见图2。
本装置采用stm32f103c8t6单片机作为核心控制芯片,软件设计即单片机程序设计,是用程序代码控制单片机的过程设计[4]。
使用定时器time2与ADC功能进行传感器空载时的数据,等待系统发出命令之后,快速启动对金属的扫描,读取传感器负载数据,作差获得样本数据,最终识别金属,通过OLED显示,并传至上位机。
stm32中的ADC1模块进行电压的读取,一次读取16个数值,通过DMA通道直达存储器中。
由于运算放放大器的输出震荡,在使用ADC + DMA一次读取16个数据后,发现16个数据呈现依次上升趋势。因此采用定时器time1中断,及在一次测量后每10 ms后再次测量。反复测量10次获得相对稳定的数据,再通过算法滤波的方式对读取数值进行处理,获得更加精准的电压测量值。假设aij为第i次测量中的第j位,并列下下面矩阵
Figure 2. System design
图2. 系统设计
将传感器空载时的矩阵作为基准矩阵A,将传感器的负载状态(待测金属放置在传感器中)下的数据矩阵作为采集矩阵B,将采集矩阵和基础矩阵做差,即为当前待测金属的样本矩阵C。
(4)
此时因为运算放大器的输出震荡而产生的系统误差几乎可以被消除,可以将样本矩阵作为我们所需的矩阵。最终对样本举证中的所有元素做平均值处理。在处理时,直接将所有数进行求和会超出单片机的最大数值,因而出现乱码。因此本文使用差和的方式进行求解。
把C矩阵中c11作为基准值,将矩阵中的所有元素与基准值作差。所得差除以元素个数,此数即为基准值对平均值的偏差,将偏差与基础值相加得到平均值:
(5)
此平均值即为待测样本的金属特征值。通过查表的方式获得最终的金属。基础代码详见附录图A1。
4. 系统测试
对于一些不同的金属发现,电涡流传感器的输出变化较小,如果直接连接单片机使用ADC读取传感器输出值,会出现金属识别的误判,或者几乎分别不出金属。比如铜和铝,在直接将电涡流传感器的输出与单片机,一些金属之间差异几乎分辨不出。将运算放大器将金属中的差异放大,可放大金属之间的差异。
本系统stm32单片机ADC读取范围为0~3.3 V,单片机ADC读取电压值,将0~3.3 V电压分为2048份,转换后的二进制数X代表真实电压的计算方法为:
(6)
本装置首先读取传感器空载状态下,通过运算放大电路的输出,软件处理作为ADC基准值。将待测金属放置在WL02涡流传感器金属铜圈中心,开始测试,获得金属样本值,计算出result金属特征值。
本文在测量对比时,选取大小为1 cm × 1 cm × 1 cm的不同金属的小方块作为测量样本,减少由于其他因素对测量的影响。选取常见的Al,Cu,Zn,Fe,Ni元素对系统进行评估:
Table 1. Effect of no-load values on metal detection
表1. 空载值对金属探测的影响
空载值 |
385 |
401 |
363 |
399 |
354 |
Cu |
57 |
56 |
55 |
58 |
54 |
Al |
43 |
46 |
42 |
41 |
42 |
Table 2. Comparison of the results before and after addition amplification
表2. 加运算放大前后结果比较
元素 |
Al |
Cu |
Zn |
Fe |
Ni |
无运算放大差值 |
12 |
9 |
47 |
53 |
26 |
有运算放大差值 |
43 |
57 |
71 |
223 |
146 |
通过表1对比可以看出:通过软件滤波处理,不同环境下,及电涡流传感器空载状态下输出值不同的情况下,金属的特征值有且仅有2~5的误差值。因此可以看出通过软滤波处理,获得的金属特征值几乎稳定在一定的范围内上下波动。
通过表2,不难观测出样本Al与Cu的金属差异只有各位数,在实际测量中可能会被当作误差而直接舍去,而加入运算放大器之后,Al与Cu的误差来到了两位数,运算放大器将Al与Cu之间的差异进行了放大,增加了金属识别的准确性,到达了设计时的初始预期。
5. 总结
本文为了解决该问题,将电涡流传感器与单片机连接部分,加入了运算放大电路,使得单片机可以获得更细致的输出电压。采用直流偏置技术,通过一阶低通滤波器将单片机输出的PWM信号,转化为模拟信号,输入到运算放大器,作为偏置电压。将运算放大电路的输出值抬升至正数范围内,并且满足涡流传感器的输出范围,单片机ADC的读取量程。运算放大器的添加,将传感器的输出进行放大,通过软件滤波的算法很好地取消由于运算放大电路的输出震荡而产生的误差,最后将电涡流传感器金属负载值与空载值进行作差处理,可以有效解决了环境因素对传感器的影响。最终不仅达到放大金属的差异,更加精确地识别不同的金属,提高识别正确率,而且可以有效地对环境进行一定的适应。
附 录
Figure A1. Matrix filtering
图A1. 矩阵滤波