限时福利领取


背景痛点

传统金属探测器常面临两大难题:

  • 电路复杂:需要高频信号发生器、相位比较器等分立元件,调试门槛高
  • 环境敏感:LC振荡电路易受温度漂移和电磁干扰影响,导致误报率高

金属探测器线圈绕制示意图

原理剖析

BFO(Beat Frequency Oscillator)原理核心是:

  1. 参考振荡器产生固定频率$f_1=\frac{1}{2\pi\sqrt{L_1C_1}}$
  2. 探测线圈振荡器频率$f_2$会因金属靠近改变(涡流效应)
  3. 两路信号混频后产生可听频段的差频信号$\Delta f=|f_1-f_2|$

相比传统LC检测,BFO优势在于:

  • 差频信号更易被MCU捕获
  • 可通过软件算法消除温漂影响

硬件实现

关键元件选型

  • 线圈:0.3mm漆包线绕制直径15cm/120匝(电感量约400μH)
  • 电容:NP0材质的100pF+可调电容(温度系数±30ppm/℃)
  • 比较器:LM393(响应时间1.3μs)

接线规范

Arduino Nano   LM393
D2     →      OUT
5V     →      VCC
GND    →      GND

电路连接示意图

核心代码

频率差检测(带IIR滤波)

// 二阶IIR滤波器系数
const float alpha = 0.2; 

float detectFrequency() {
  static float filteredFreq = 0;
  unsigned long pulseWidth = pulseIn(2, HIGH, 100000);
  float instantFreq = 1e6 / (2 * pulseWidth); // 单位kHz

  // 一阶低通滤波
  filteredFreq = alpha * instantFreq + (1-alpha) * filteredFreq;
  return filteredFreq;
}

自适应阈值

void autoThreshold() {
  float baseline = 0;
  for(int i=0; i<100; i++) {
    baseline += detectFrequency();
    delay(10);
  }
  threshold = baseline / 100 + 0.5; // 设置0.5kHz裕量
}

性能优化

实测数据(线圈直径15cm)

| 金属类型 | 检测距离(cm) | |----------|-------------| | 铁钉 | 8-12 | | 硬币 | 5-8 | | 铝箔 | 3-5 |

抗干扰方案

  1. 使用双绞线连接线圈
  2. 在LM393输入端并联100nF电容
  3. 电池供电避免共地干扰

避坑指南

  • 线圈Q值:用粗线径(>0.3mm)降低电阻,Q值应>50
  • PCB布局
  • 振荡电路远离数字线路
  • 铺地铜箔屏蔽干扰

延伸思考

进阶方案可采用FFT分析频谱特征,实现金属分类:

  1. 铝材:频偏大但衰减快
  2. 铁质:频偏小但持续时间长
  3. 铜质:中等频偏伴谐波

不同金属的频谱特征

通过本次实践,用不到50元成本实现了商用探测器80%的灵敏度,关键是通过软件算法补偿了硬件不足。建议初学者先用示波器观察振荡波形,再逐步添加滤波算法。

Logo

音视频技术社区,一个全球开发者共同探讨、分享、学习音视频技术的平台,加入我们,与全球开发者一起创造更加优秀的音视频产品!

更多推荐