国产红外测距模块选型:四大路线、低功耗设计与标定实战
2026/9/19 19:37:59 网站建设 项目流程

1. 先把四条技术路线分清,选型这件事就不会跑偏

“红外测距模块”这五个字看着简单,真落到选型上,坑比想象中多。前阵子帮做智能卫浴的朋友选料,需求是检测人体靠近、量程 5 到 30 厘米、电池供电要撑一年以上,我前后拿了七八个不同原理的模块,在暗室、白炽灯下、正午窗边轮着测了两周,最后定下来的那颗单价不到三块五。这件事让我确认了一点:大多数人搜“国产短距离低功耗红外测距模块选型推荐”的时候,脑子里其实混着四种完全不同的东西——红外测距模块这个大类底下,藏着反射式光电对管、三角测距 PSD、红外 ToF、遮断式对射四条完全不同技术路线。原理不同,量程差一个数量级,功耗差两个数量级,价格差十倍。选错路线,不是调参能救回来的,只能推倒重来。

所以我不打算一上来就甩型号清单,那种东西换个批次就失效。下面按“先分路线、再算功耗、然后动手做、最后标定和排障”的顺序讲,每一步都带上我实际算过的参数和踩过的坑。无论你是做消费电子、小家电、工业限位,还是纯 DIY 创客项目,只要涉及近距离非接触检测,这些内容基本可以直接抄作业。

1.1 反射式光电对管:0 到 30 毫米的性价比之王

TCRT5000 这类器件的本质,是把一只红外发射管和一只光敏三极管封在同一个塑料支架里,中间用黑色隔墙物理分开。发射管发光,前方有物体就把光反射回来,接收管导通,集电极电压下降。就这么朴素。

它的优势集中在三处。成本极低,国产兼容料单价可以压到几毛钱。静态功耗接近于零,因为可以只在采样瞬间给发射管供电,其余时间整个器件是死的。接口简单,接收管输出直接接 GPIO 做阈值判断,或者接 ADC 做粗测距,不需要任何协议栈。

它的短板也很明确。量程短,常规型号有效区间是 0.5 到 25 毫米,超过 3 厘米信号基本埋进噪声。输出与目标表面特性强相关,白纸和黑绒布在同一距离下的读数可以差两三倍,这是反射率差异决定的物理事实,不是电路问题。环境光干扰明显,尤其是 850nm 波段的阳光和白炽灯,直接淹没信号。

适合它的场景是:打印机纸张检测、扫地机悬崖识别、编码器码盘、机械限位开关、透明管液位检测。这些场景的共同点是“只关心有没有、不太关心多远”。

1.2 三角测距 PSD:5 到 150 厘米的模拟量老将

原理是发射一束红外光打在被测物上形成光斑,反射光经过接收透镜成像在 PSD(位置敏感探测器)上。目标越远,光斑在 PSD 上的成像位置越偏,PSD 两端输出电流的比值对应距离。夏普的 GP2Y0A21YK0F 是这条路线最出名的型号,量程 10 到 80 厘米,模拟电压输出。

国产这条路线目前以模块厂做兼容品和定制模组为主,同量程下的价格能做到进口料的二分之一到三分之一,具体差异主要落在透镜一致性和温漂控制上。用这类模块必须接受一件事:输出不是线性的,本质是 1/距离 关系,近端电压高、远端电压低,而且近端有死区,5 厘米以内读数会乱跳,必须查表或做曲线拟合才能用。

优点是量程正好覆盖 2 厘米到 1.5 米这个“中间地带”,这个区间反射式够不着、ToF 又偏贵;抗环境光比反射式强,因为加了透镜汇聚和调制;对目标颜色不敏感。缺点是功耗偏高,连续工作几十毫安、峰值上百毫安是常态;刷新率低,一般 10 到 60Hz;透镜需要空间,整体体积压不下来。

1.3 红外 ToF 模组:可编程、抗干扰,价格已经打下来了

ToF 靠调制红外光的往返相位差或飞行时间直接算距离,输出就是毫米数,走 I2C 或 UART。进口的 VL53L0X 系列大家熟,国产这两年追得很快,1 到 200 厘米段已经有多家可选。它的核心竞争力是数字输出、线性度好、抗环境光强(窄带滤光片加高频调制)、帧率能到 30 到 60Hz,而且带串扰补偿和盖片校准,省掉大量标定工作。

代价是单价仍然高于前两种,低功耗版本待机电流能做到几十微安,但单次测量瞬间是毫安级。更麻烦的是结构设计门槛——窗口必须做光学处理,盖片要选透红外的材质,不能随便拿块亚克力糊上去;强光直射下量程会明显缩水,户外场景要额外加遮光筒。

1.4 遮断式对射:精度最高,但物体必须“经过”

发射管和接收管面对面分开装,物体从中间穿过挡住光路就触发。量程由机械间距决定,几毫米到几十厘米都能做。精度极高、响应极快、几乎不受颜色和表面材质影响,因为根本没有反射路径这个变量。

缺点同样鲜明:必须有机械结构让物体穿过去,做不了“看前方有没有东西”。典型应用是光电门测速、流水线计数、行程限位、液滴检测。

一句话总结这四条路线的分界线:测“有没有靠近”用反射式,测“有多远”用三角或 ToF,测“有没有经过”用对射。下面这张表是我自己选型时用的速查版。

路线典型量程输出形式平均功耗量级单件成本最适合的场景
反射式光电对管0.5-30 mm数字/模拟几微安到几十微安极低有无检测、限位、码盘
三角测距 PSD20-1500 mm模拟电压几十毫安中距离粗测距
红外 ToF10-2000 mmI2C/UART几十微安到几百微安中高需要精确毫米值的测距
遮断式对射1-500 mm数字几十微安计数、限位、光电门

2. 低功耗怎么算:别只看规格书上那一行“工作电流”

低功耗设计,最常见的误区是盯着规格书的“工作电流 20mA”就下结论说这个方案不能用。红外方案的功耗优势恰恰在于它是脉冲式的,真正决定续航的是平均电流,不是峰值电流。

2.1 平均电流的计算公式与占空比设计

平均电流的基本关系是:

I_avg = I_peak × D + I_sleep × (1 - D),其中 D = t_on / T

举个实测过的例子。发射管峰值电流 150mA,每次点亮 30µs,采样周期 100ms,那么:

  • 占空比 D = 30µs / 100ms = 3×10⁻⁴,也就是万分之三
  • 发射侧平均电流 = 150mA × 3×10⁻⁴ = 45µA
  • MCU 深度睡眠按 1.5µA 算(华大 HC32L196 这类低功耗国产 MCU 的深度睡眠档就在这个数量级)
  • LDO 静态电流按 2µA 算
  • 合计约 48.5µA

用一颗 2000mAh 的锂亚电池供电,理论续航 = 2000mAh / 0.0485mA ≈ 41237 小时 ≈ 4.7 年。当然实际要打对折再对折,因为电池自放电、温度、负载突变都会吃掉一部分,但撑一年半到两年是没问题的。这就是为什么很多电池供电的检测方案宁愿用“笨”的反射式,也不用看起来更高级的 ToF。

对照一下 ToF:工作电流 20mA,单次测量耗时 5ms,1Hz 采样,平均电流 = 20mA × 5ms / 1000ms = 100µA。数据上也不算差,但要注意它内部有电荷泵和振荡器,实际平均电流往往比理论值高 30% 到 50%,而且做不到“想测才测”那么灵活。

注意:绝对不要让红外发射管常亮。常亮的发热会改变 Vf,进而改变驱动电流,形成正反馈;同时功耗直接崩掉。也不要拿 GPIO 直接驱动大电流发射管,绝大多数 MCU 的单脚灌电流上限是 20mA,超了就是烧引脚或者拉低整颗芯片的电源。

2.2 波长的取舍:850nm 还是 940nm

850nm 和 880nm 的好处是发射效率高,硅光敏管的响应峰值就在 850 到 900nm 之间,灵敏度最好,同样的驱动电流能拿到更强的回波信号。缺点是能看到红暴(微弱红光),而且太阳光在这个波段的能量大,户外抗干扰差。

940nm 几乎不可见,避开了可见光的主要能量区,还落在水汽吸收带附近,抗日光干扰明显更好。代价是同电流下辐射功率低 20% 到 40%,硅管在这个波长的响应也只有峰值的 60% 左右。要用 940nm,要么提高驱动电流(注意发热和寿命),要么提高接收端增益。

实际选型我会这样定:室内、成本敏感、对红暴无要求,用 850nm;面板外露、用户能直接看到、或者有阳光照射风险,用 940nm,同时配一片中心波长 940nm、半宽 30 到 50nm 的带通滤光片,成本多几毛钱,信噪比提升非常明显。

2.3 环境光抑制的三层武器

第一层是光学:滤光片、遮光筒、收窄接收管的视场角。这一层最便宜也最有效,结构设计阶段就要留位置,后期补不上。

第二层是电气:脉冲驱动加亮/暗差分采样。先点亮发射管采一次,再关掉采一次,两次相减。环境光在两次采样之间基本不变,相减就被消掉了。这招几乎零成本,只要 MCU 支持连续 ADC 采样。

第三层是算法:载波调制解调,比如用 38kHz 方波调制发射,接收端用带通放大只取这个频率,环境光的直流和低频成分全被滤掉。代价是需要额外电路(调制源 + 带通放大器 + 检波),BOM 和调试成本都上去了。短距离低成本场景一般用不到,但强光环境下这是唯一可靠的办法。

2.4 主控与接口的匹配

反射式对管只需要 GPIO 或一路 ADC,随便哪颗 8 位 MCU 都能干。要算平均功耗,主控的睡眠电流就成了主导项,这时候国产低功耗 MCU 值得重点看:华大 HC32L196、HC32L110,兆易 GD32L233,国民技术 N32L4 系列,中微爱芯的低功耗线,深度睡眠基本都在 1 到 3µA 区间,唤醒时间几十微秒,够用。

三角测距模块输出模拟电压,需要一路 12 位 ADC 加查表逻辑,对 MCU 的算力要求也不高。

ToF 模组走 I2C,这里有个容易忽略的坑:不少 ToF 模组的 IO 电平是 2.8V 甚至 1.8V,直接接 3.3V 的 MCU 长期工作会损伤模组。要么选 3.3V 兼容版本,要么加电平转换,别省这两毛钱。

3. 硬件设计与实操:把参数一个个算出来

这一节是全文最“干活”的部分。我按发射侧、接收侧、结构、供电四块分开讲,每块都给出计算过程和取值理由。

3.1 发射侧:限流电阻和驱动级怎么算

红外发射管是电流驱动器件,必须串限流电阻。公式是:

R = (Vcc − Vf − Vce_sat) / If

取一组实际参数:Vcc = 3.3V,940nm 发射管在 100mA 下的 Vf = 1.25V,驱动三极管用 MMBT3904 或国产 S8050,饱和压降 Vce_sat = 0.15V,目标 If = 100mA。

R = (3.3 − 1.25 − 0.15) / 0.1 = 19Ω,取标准值 18Ω。

接着算电阻功率:P = If² × R = 0.01 × 18 = 0.18W。0805 封装额定 0.125W,不够,会发烫甚至漂移。稳妥做法是用 1206 封装(0.25W),或者两个 36Ω 的 0805 并联,成本差不多还更散热。

再强调两个容易翻车的点。第一,Vf 有负温度系数,大约 −1.5mV/°C 到 −2mV/°C。温度升高时 Vf 下降,同样的限流电阻会导致电流上升,形成恶性循环。批量产品要么用恒流驱动,要么在软件里根据温度反馈调整占空比。第二,脉冲驱动可以超过直流额定电流,但要严格看规格书的峰值允许条件。比如某国产发射管标注直流 100mA、峰值 1A(脉宽 100µs、占空比 1%),那就意味着峰值拉到 500mA 完全安全,只是脉宽和占空比要守住。

驱动级选型上,小电流(<50mA)用 NPN 三极管就行;电流大或者要极低静态功耗,用 N 沟道 MOSFET,栅极加 100kΩ 下拉电阻防止悬空误导通。MOSFET 的选型重点是栅极阈值电压要低,3.3V 驱动下 Vgs(th) 必须明显小于 1.5V,否则关不断。

3.2 接收侧:光敏三极管还是光敏二极管

光敏三极管内部有增益(hFE 通常 100 到 1000),负载电阻取 10kΩ 到 100kΩ 就能把光电流放大成毫伏到伏级信号,直接进 ADC,电路极简。代价是响应慢(上升时间 15µs 到 100µs)、线性差、温度系数大。

光敏二极管线性好、速度快(纳秒级)、温度稳定,但光电流只有纳安到微安级,必须配跨阻放大器。运放可以选国产的 3PEAK、圣邦微 SGM 系列或思瑞浦的低失调型号,注意输入偏置电流要小,否则微安级信号会被吃掉。

短距离、低功耗、低成本场景,我的默认选择是光敏三极管 + 100kΩ 负载 + ADC,够用且便宜。

采样时序是这块的灵魂,顺序错了数据全是垃圾:

// 单次测量时序,周期 100ms,由 RTC 唤醒 led_on(); // t0: 打开发射管 delay_us(15); // t0+15us: 等 LED 上升沿稳定并等待接收管建立 adc_val_light = adc_sample(); // 采"亮"值 led_off(); // 关闭发射管 delay_us(50); // 等接收管恢复暗态 adc_val_dark = adc_sample(); // 采"暗"值 signal = adc_val_light - adc_val_dark; // 差分,扣掉环境光

为什么要等 15µs?因为接收管的响应时间常数 τ = R_load × C_total。100kΩ 乘以约 20pF 的结电容和布线电容,τ 大约是 2µs,工程上取 5 到 10 倍 τ 才能进入稳定区,所以 10 到 20µs 是合理区间。等太短读数偏低,等太长白白浪费电。

3.3 光串扰:最容易翻车的地方

光串扰指的是发射光没经过目标,直接通过封装缝隙、PCB 表面、结构件内壁反射到接收管。后果是近距离饱和、盲区变大、动态范围被吃掉一大截。

解法有四个层次:

  • 封装层:选带内置隔墙的封装,比如插件式的反射式光电开关,中间那堵黑色墙不是装饰,是核心功能件。
  • PCB 层:发射和接收焊盘之间挖一条槽(V-cut 或铣槽),切断 PCB 表面的光路。这一步在打板时就要规划,后期改不了。
  • 结构层:发射管和接收管各加一个独立的遮光筒,筒壁做哑黑处理。外壳用不透红外的黑色 ABS 或 PC。
  • 光轴层:把发射管和接收管的光轴故意错开 5 到 15 度,让两束光的交叉点落在 5 到 20 毫米的位置。这样近端的直接串扰被压低,有效盲区能做到 2 毫米以内。这个技巧我用过很多次,效果比堆结构件好。

注意:普通白色 ABS 对 940nm 红外光其实是半透的。如果你的外壳是白色的,内部串光会非常严重,必须在发射和接收之间加黑色挡墙。需要透红外的窗口,用黑色透红外 PC 或亚克力板,它能挡可见光同时让红外通过,外观还是黑的,一举两得。

3.4 供电与去耦:脉冲驱动的隐藏成本

发射管脉冲点亮时,瞬间从电源抽取上百毫安,会在 Vcc 上产生尖锐的跌落和振铃。处理不好,ADC 参考跟着抖,读数自然乱。

具体做法:在发射管驱动回路近端并一颗 10µF 到 100µF 的低 ESR 钽电容或陶瓷电容,位置离发射管不超过 5 毫米;ADC 参考电压单独用 100nF 加 1µF 去耦;模拟地和数字地单点连接,别做成大面积共地环路。

如果整机是电池供电,还要算上 LDO 的静态电流。选静态电流 1µA 级别的低压差稳压器,别用那种静态 50µA 的老型号,否则前面辛苦省下的几十微安全白费了。

4. 标定与实测:把读数做准的完整流程

硬件做完只是开始,红外测距最耗时间的环节是标定。原因很简单,发射管的辐射功率批次离散度能到 ±30%,接收管增益离散度也有 ±20%,两颗料凑一起,同距离下的原始 ADC 值可能差一倍。

4.1 两点标定加分段查表

最省事的方案是分段线性查表。先采集一组已知距离的 ADC 值,减去暗电平得到有效信号,存成查找表。比如 0 到 30 毫米每 2 毫米一个点,共 16 个点,用 12 位 ADC 分 16 段查表加线性插值,MCU 开销几乎为零,比多项式拟合省算力也更好调。

生产线上再做一次单点标定:让产品对着固定的标准反射板(比如 10 毫米处的白卡纸),测出有效信号值,和黄金样品的比值作为增益系数存进 Flash。运行时所有读数乘以这个系数,一致性就能拉回来。

4.2 温漂补偿的三种思路

温度每升高 10°C,红外发射管的辐射功率下降大约 5% 到 8%,光敏三极管的增益变化可达 ±20%,两者叠加出来的温漂很可观。补偿思路按成本从低到高排:

  1. 软件查表:加一颗 NTC 采环境温度,按温度区间乘不同系数。成本几分钱,能压掉大部分漂移。
  2. 参考接收管差分:在发射管旁边固定一颗接收管,只看发射管自身的发光强度,作为参考通道。目标通道除以参考通道,发射管的温漂和老化被同时消掉。增加一颗管子的成本,效果最好。
  3. 恒流驱动:从根上锁住发射电流,温度变化时电流不变。代价是恒流电路本身要消耗功耗,对低功耗方案不友好。

4.3 一组实测数据供参考

下面这组数据来自某国产反射式对管,工作条件为 3.3V 供电、If = 100mA、占空比 0.03%、12 位 ADC(3.3V 参考)、采样距离从 2 毫米到 50 毫米,目标分别是白纸、18% 灰卡和黑绒布。数据只代表量级,不同批次会漂。

距离 (mm)白纸 ADC灰卡 ADC黑绒布 ADC现象说明
2395036202100接近饱和,白纸已溢出
5320029001450工作区上段
1021001850720一致性最好的区间
201050880260黑绒布信噪比开始变差
3052043095黑绒布接近噪声底
501209520基本埋在噪声里

这张表能直接读出三个结论。第一,反射率对读数的影响巨大,白纸和黑绒布在 20 毫米处差了四倍,所以任何声称“固定阈值就能判断距离”的方案都是在赌目标材质。第二,有效工作区在 2 到 20 毫米,30 毫米以上只有高反射目标勉强可用。第三,黑绒布这类低反射目标在 30 毫米处信号只剩 95 个 LSB,噪声一冲就没了,这类场景要么提高发射功率,要么换技术路线。

5. 常见问题与排查速查表

调红外模块,八成问题集中在三类。我把这些年遇到的典型现象整理成表,方便对着查。

5.1 硬件类问题

现象可能原因排查方法解决手段
上电就没信号发射管极性接反用手机摄像头看是否有微弱发光交换发射管两极
读数整体偏低限流电阻偏大或驱动管未完全导通串电流表测 If重算电阻,换低 Vgs(th) 的 MOS
近距离一直饱和光串扰严重遮住目标,看暗电流是否偏高加隔光墙、挖槽、错开光轴
读数随机跳电源纹波大示波器看 Vcc 脉冲跌落近端加 10-100µF 低 ESR 电容
发热明显电阻功率不够或发射管常亮摸电阻温度,测占空比换 1206 封装,检查软件时序

5.2 软件与算法类问题

现象可能原因排查方法解决手段
白天正常晚上乱未做差分采样对比亮值和暗值加亮/暗两次采样相减
读数缓慢漂移温漂未补偿用手加热模块观察加 NTC 查表或参考通道
不同样机差异大未做单点标定多台对照同一目标产线标定,存增益系数
强光下完全失效环境光饱和接收管手电筒照射测试换 940nm 加带通滤光片
采样值间歇为 0ADC 采样在 LED 未稳定时缩短延时对比延长等待时间到 15-20µs

5.3 结构与装配类问题

现象可能原因排查方法解决手段
装壳后性能骤降外壳透红外造成内部串光拆壳对比测试内部加黑色挡墙
窗口起雾后失效窗口材料吸水或透红外差换材料对比用黑色透红外 PC
侧面目标误触发接收管视场角过大转角度测试加遮光筒收窄 FOV
长时间后灵敏度下降窗口积灰、发射管老化清洁后复测窗口做疏油涂层,软件加自校准

实操心得:调试阶段先别装外壳。裸板测出基准曲线,再装壳测一遍,两次的差值就是结构带来的串光和遮挡损耗。我遇到过装壳后近距离增益掉了 40% 的情况,最后发现是白色外壳内壁把发射光反射到了接收管上,换黑色材料立刻恢复正常。

6. 国产供应链与三套典型方案组合

最后聊聊国产化这条路怎么走。做产品这几年最大的变化是,短距离红外这条线上,几乎所有环节都能找到国产选项,而且价格和交期都比进口稳。

6.1 器件层面的国产可选方向

器件类别关键参数国产可选方向选型注意
红外发射管850/940nm,辐射强度,视角国星光电、鸿利智汇、瑞丰光电、旭宇光电关注批次辐射强度离散度,要求供应商给分档
光敏三极管响应峰值、hFE、上升时间国内多家封装厂有兼容料hFE 离散度大,产线必须标定
光敏二极管响应度、结电容、暗电流同上暗电流要小,否则弱信号被淹没
驱动 MOSFETVgs(th)、Rds(on)、Ciss韦尔、长电、捷捷微3.3V 驱动必须选逻辑电平管
运放/比较器输入偏置电流、失调3PEAK、圣邦微、思瑞浦跨阻放大要低偏置电流型号
低功耗 LDO静态电流、PSRR南芯、圣邦微静态电流要 1µA 级别
低功耗 MCU深度睡眠电流、唤醒时间华大 HC32L196/HC32L110、兆易 GD32L233、国民技术 N32L4看清唤醒后外设恢复时间
ToF 模组量程、帧率、接口电平奥比中光、芯视界、北醒等必须确认 IO 电平和盖片要求

有一点必须提醒:光敏管的 hFE 离散度是所有参数里最难控的,我见过同一批货里差三倍的情况。所以产线单点标定不是可选项,是必选项。省掉这一步,售后返修率会教你做人。

6.2 三套可直接复制的方案

方案 A:超低成本有无检测(0 到 15 毫米)

反射式对管 + 8 位 MCU + 数字阈值输出。发射管脉冲驱动,占空比 0.05%,接收管接比较器直接出高低电平。BOM 控制在 1 元出头,适合打印机、玩具、简单限位。缺点是阈值固定,换目标材质要重调。

方案 B:电池供电低功耗测距(0 到 30 毫米,2Hz)

反射式对管 + 华大 HC32L196 + 100kΩ 负载 + 12 位 ADC 差分采样。发射管按 3.1 节参数配 18Ω/1206 限流电阻,MOS 高侧开关控制。周期 500ms,单次点亮 30µs,实测平均电流约 50µA,2000mAh 电池能撑一年半以上。加 NTC 做温漂补偿,产线做单点标定。这套方案我用在智能卫浴项目上,量产一致性没问题。

方案 C:中距离精确测距(20 到 800 毫米)

两条路可选。预算紧的用三角测距模块加 ADC 查表,成本几块钱,但功耗高、刷新率低、近端有死区。要求高精度和数字输出的,直接上国产 ToF 模组走 I2C,量程和线性度都好,代价是单价上去了,而且结构上必须认真做光学窗口。

6.3 选型时的四个自问

每次有人问我“帮我推荐个型号”,我都会先反问四件事,回答完基本自己就能定了。

第一,量程的真实下限是多少?很多人报“0 到 30 厘米”,实际只要 5 到 15 厘米这一段,那选型范围立刻缩小一半。记住所有光学测距模块在近端都有死区。

第二,目标是固定的还是变化的?反射率会不会变?如果被测物有黑色、镜面、透明三种,反射式基本没戏,得换三角或 ToF。

第三,平均功耗预算是多少?先算出电池容量除以期望续航,得到允许的平均电流,再反推能不能用这个方案。这一步能砍掉一大半不靠谱的选项。

第四,结构上有没有空间做遮光?如果产品已经定死,只留了一个 3 毫米的孔,那再好的模块也发挥不出来。结构必须和电路一起定。

说到底,红外测距模块的选型从来不是挑一颗最好的料,而是在量程、精度、功耗、成本、结构空间这五个约束里找那个唯一可行的交点。我自己的习惯是先拿现成模块搭一个最小验证板,在真实光照和真实目标下测两天,数据不对再换路线,比在选型表上纠结一周有用得多。另外提醒一句,调试期一定把暗电平和亮电平都记录下来,这两个数字能帮你在后面几乎所有异常里快速定位原因——是环境光变了,还是发射侧衰减了,一看差分值就知道。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询