你打印的光学编码器黑白码盘,为什么红外传感器读不出来?
首发于公众号「如是有为」 · 查看原文

很多年轻创客第一次做机器人小车、轮速测量、云台控制,都会遇到一个看起来很简单的问题:我能不能自己打印一个光学编码器码盘?
听起来当然可以。画一个黑白相间的圆盘,打印出来,贴到轮子上;旁边放一个反射式光电传感器,比如 QRD1114、TCRT5000 或者 QTR 系列模块;白色区域反光强,黑色区域反光弱,传感器输出高低电平。轮子转一圈,数一下脉冲,就知道速度和位置。
逻辑非常完美,直到你接上示波器或者逻辑分析仪,发现波形乱得一塌糊涂:黑区读不黑,白区也不够白,轮子慢慢转还能凑合,转快一点就开始丢脉冲。
这时候很多人的第一反应是怀疑代码。是不是中断写错了?是不是阈值没调好?是不是电机干扰太大?是不是 PID 参数太烂?
这些都有可能。
但还有一个更基础、更隐蔽的问题:你眼里的黑色,不一定是传感器眼里的黑色。
代码没错,也许是“黑色”骗了你
一个最常见的创客方案是这样的:画一个黑白相间的圆盘,打印出来,贴在轮子上;旁边放一个反射式光电传感器。白色区域反光强,黑色区域反光弱,传感器输出高低电平。轮子转一圈,数一下脉冲,就知道速度和位置。
这个逻辑没有问题。
问题在于,反射式光电传感器并不是在判断“颜色”,它判断的是目标波长下的反射强弱。
人眼看到的黑白,主要来自可见光波段。一个东西看起来黑,是因为它在可见光下反射少。可是很多反射式光电传感器用的是红外 LED,常见工作波长可能在 850 nm 或 940 nm 附近。这个波段,人眼基本看不见。
所以你用眼睛验码盘,验的是“可见光下黑不黑”;传感器验码盘,验的是“红外下反不反光”。
这两件事不是一回事。
一个黑色油墨,在你眼里可能黑得很漂亮;到了红外传感器眼里,它可能只是深灰,甚至和白区差不了多少。
于是你以为自己做的是黑白码盘,传感器看到的却是灰灰灰灰灰。
那它当然读不出来。
你眼里的黑,在红外眼里可能只是灰
为什么会这样?
因为油墨、纸张、塑料、涂层这些材料的吸收和反射,本来就和波长有关。
喷墨打印机打出来的黑色,主要是为了让人眼觉得黑。它只要在可见光下吸收得够多,就能完成“视觉黑色”的任务。
但红外光不一定买账。
有些黑色油墨在可见光下吸收强,到了近红外波段吸收能力下降。红外光可能穿过油墨层,打到底下的纸张或塑料基材上,再反射回来。
这时候就出现了一个很反直觉的现象:肉眼看到的是黑区,红外传感器看到的却可能是反光区。
很多人会尝试把黑色打印得更深,比如重复打印两遍、三遍。这个方法有时有效,有时没用。关键不在于它肉眼看起来有没有更黑,而在于它在传感器工作波长下有没有真正变成低反射。
换句话说,你要解决的不是“黑给人看”的问题,而是“黑给传感器看”的问题。
这就是光学编码器里最朴素、也最容易被低估的一句话:
码盘不是画黑白格子那么简单。
打印三遍也没用:黑给人看,不等于黑给传感器看
这个问题不是凭空想象出来的。早年 Parallax 论坛上有一个很典型的创客案例:有人用 QRD1114 反射式红外传感器做自制光学编码器码盘,图案是喷墨打印的黑白条纹。他在台架上测试时发现,传感器和图案本身看起来都没问题,示波器上也能看到变化,但喷墨打印出来的黑区“不够黑”,无法可靠地让传感器关断;他还提到,黑色电工胶带做的图案在高速下工作很好,而喷墨打印在卡纸上的“黑色”被传感器看得像白色一样,因为它依然反射大量红外。

这个案例很适合拿来理解反射式编码器的第一层问题。
你以为你在调代码,实际上你可能在跟油墨的光谱特性较劲。
你以为你在做数字电路,实际上你前面还有一个小型光学系统。
你以为传感器读的是黑白,实际上它读的是反射率。
这也是为什么有时候换一张纸、换一种打印机、换一卷黑色胶带,效果会比改半天程序还明显。
真正决定波形的,不是颜色,是反射对比度
反射式编码器真正需要的,不是“看起来黑白分明”,而是白区和黑区在目标波长下有足够高的反射差异。
可以用一个简单公式理解:
这里的 (C) 是对比度, 是白区反射率, 是黑区反射率。
假设白区反射率是 0.8,黑区反射率是 0.1:
这个对比度就比较舒服。传感器看到的黑白差异很明显,波形幅值大,边沿也比较利索。
但如果白区还是 0.8,黑区反射率升到 0.4:
这时候肉眼可能还能看出黑白,传感器看到的差异已经小很多了。
差异小,会带来一串麻烦:信号幅值变小,边沿变慢,阈值更容易漂,环境光更容易干扰,轮子转快时更容易丢脉冲。
所以不要只问:“这个码盘看起来黑不黑?”
真正应该问的是:
在我的传感器工作波长下,黑区反射率到底够不够低?
调阈值之前,先拿万用表测一下黑区
很多自制编码器的问题,最后都绕回到一个很朴素的动作:拿实际使用的传感器,测一下材料。
把传感器固定好,距离不要乱动,分别对准白区和黑区,测输出电压。有万用表,就看静态电压差;有示波器,就看波形幅值和边沿;有逻辑分析仪,就看高速旋转时有没有毛刺和丢脉冲。
可以拿几种材料做对比:普通喷墨打印黑块、激光打印黑块、黑色电工胶带、黑色记号笔、哑光黑喷漆、白纸。
这个实验很有意思,因为结果经常和肉眼判断不完全一致。肉眼最黑的材料,不一定是传感器输出最低的材料;看起来普通的黑色胶带,反而可能比某些喷墨黑块更适合红外传感器。
再往下排查,还可以看传感器距离、安装角度、遮光结构和码盘贴装。反射式传感器对几何位置很敏感,太近、太远、角度偏了,都会让白区和黑区差别变小。环境光也会参与进来,尤其太阳光里有红外成分,一个简单的遮光罩,有时能让波形干净很多。
这些动作不复杂,但很有效。
它们会把问题从“感觉哪里都不对”,变成“到底是材料、距离、光照还是代码”。
小车只是抖一下,工业现场可能就是报警
在创客小车上,码盘读不稳,最多是速度估计抖一下,PID 难调一点,轮子跑得不太直。
但到了工业编码器,这个问题会被放大很多倍。
工业光学编码器不是简单数黑白格子。尤其是高分辨率编码器,读头往往不是只输出一个高低电平,而是要从码盘图案里提取高质量的模拟信号,比如正弦、余弦、索引信号、多轨 Nonius 信号,再交给后级电路或算法做插值和绝对位置解算。
这时候,码盘上的黑白图案不再只是“看起来清不清楚”的问题。
它会变成一整套系统工程问题:目标波长下的反射率,明暗对比度,边沿锐度,光斑尺寸,线宽和读头阵列周期匹配,码盘偏心和倾斜,材料批次一致性,温湿度老化,污染和油雾,装配公差。
创客项目里,看到的是“脉冲丢了”。
工业现场里,看到的可能是“相位误差”“插值噪声”“周期性谐波”“速度波纹”“客户设备报警”。
同一个物理问题,放在不同产品层级里,后果完全不一样。
到了 PNH3348 这类产品,问题不再是“有没有脉冲”
这里可以看一个成熟工业产品例子:iC-Haus 的 iC-PNH3348。

公开资料里,iC-PNH 系列被定义为 Phased Array Nonius Encoder,面向紧凑型高分辨率绝对编码器,可通过 Nonius 插值实现很高的单圈分辨率,并使用单片 3 通道 HD Phased Array 来获得较好的信号匹配。PNH3348 相关资料还明确把它列为 EncoderBlue® Phased Array Nonius Encoder。
这就和创客常用的 QRD1114 完全不是一个层级了。
QRD1114 那类玩法,本质上是“黑白差异足够大,我就输出高低电平”。
PNH3348 这类高分辨率光学编码器方案,关心的是从码盘图案里采出来的正余弦信号够不够干净:幅值是否一致,偏置是否可控,相位是否稳定,谐波是否够低,不同 Nonius 轨道之间的相位关系是否可靠。
换句话说,创客项目问的是:
“有没有脉冲?”
工业高分辨率编码器问的是:
“这个相位可信吗?”
这两个问题,中间隔着一整套光学、模拟电路、信号处理和量产工艺。
高分辨率编码器最怕的,是“差一点”的码盘
在低分辨率脉冲计数场景里,码盘差一点,有时还能靠阈值硬扛。
但在高分辨率光学编码器里,最怕的恰恰是“差一点”。
不是完全不能用,而是波形看起来还能跑,但相位已经不干净了。
黑区不够暗,会降低调制度;白区反射不稳定,会造成幅值波动;边沿不锐,会引入高次谐波;码盘图案线宽误差,会改变正余弦波形;不同半径轨道的工艺误差,会破坏 Nonius 轨道之间的相位关系。
这些问题最后都会进入插值算法。
而插值算法不是魔法。它可以补偿一部分偏置、增益和相位误差,但如果前端光学信号本身已经畸变得很厉害,后端算法只能把问题算得更精细,不能把一个差码盘变成好码盘。
这就是成熟产品和创客项目最大的区别。
创客项目里,信号不好,很多时候还能调阈值。
工业编码器里,信号不好,调阈值往往不够。
因为它要的不是“过没过门限”,而是“相位有没有被污染”。
蓝光不是换个 LED,码盘也要跟着换脑子
PNH3348 还有一个很值得注意的点:它不是前面 QRD1114 例子里那种红外小传感器。
公开资料把 PNH3348 放在 EncoderBlue® 路线下。很多人一听“光学编码器”,脑子里默认就是红外,但成熟工业产品不一定都用红外。有的用红外,有的用红光,有的用蓝光。

波长一变,码盘材料的判断标准也要变。
前面讲喷墨黑色在红外下可能不黑;到了蓝光方案,问题就变成:码盘材料在蓝光波段下的反射、吸收、散射和边沿成像是否满足要求。
蓝光波长更短,理论上有利于提高空间分辨能力,对高线数码盘和高 CPR 方案有吸引力。但它也会带来新的工程约束:码盘表面粗糙度对散射的影响可能更明显,油墨、镀膜、基材在蓝光下的反射率必须重新验证,污染、划伤、胶层、保护膜可能改变蓝光响应,LED 光谱分布、光电二极管响应、码盘反射谱都要匹配。
所以,从红外换到蓝光,不是简单地“把 LED 换个颜色”。
整个码盘工艺、材料选择、检测规范都要跟着变。
这才是工业编码器的真实难度。
阵列能救局部缺陷,救不了系统性材料错误
PNH3348 这类 Phased Array 架构,有一个很重要的产品价值:它不是一个孤零零的光电点在看码盘,而是一组单片集成的光电传感器阵列在对周期图案做空间采样。
这类架构可以带来两个好处。
第一,它能平均掉一部分局部缺陷。比如码盘上某个小污点、微小划伤,不一定立刻让整个信号崩掉。
第二,它能改善一部分装配容差。通过阵列采样、差分结构和相位信息处理,系统对一定范围内的偏心、倾斜、距离变化会更有韧性。
但这里有一个前提:
码盘图案本身必须在目标波长下足够可控。
如果码盘材料批次变化导致反射谱整体变了,或者边沿扩散整体变严重,那么阵列采到的就不是理想周期信号,而是带畸变的周期信号。
阵列可以缓解局部随机缺陷。
但阵列救不了系统性材料错误。
这句话,放在工业编码器里非常重要。
因为很多量产问题不是某一片码盘有脏点,而是一整批材料的光谱响应变了;不是某一条线有瑕疵,而是整个工艺窗口偏了;不是一个点坏了,而是所有点都“差一点”。
这类问题最难,因为它还能跑。
但跑出来的信号已经不干净。
真正难的,不是把信号读出来,而是让它一直可信
做编码器久了以后,我越来越觉得,光学编码器最有意思的地方,不是某一个器件有多复杂,而是它把很多看似不起眼的东西绑在了一起。
一颗 LED 的波长,一层油墨的吸收,一片码盘的表面粗糙度,一个读头的安装高度,一点点偏心,一点点灰尘,最后都会落到同一个地方:
信号质量。
在创客项目里,这个信号质量可能表现为“脉冲有没有读稳”。
在工业编码器里,它会变成更细的东西:正余弦幅值是否一致,相位是否稳定,Nonius 轨道之间的关系是否可靠,插值之后的角度噪声是否还能接受。
所以,QRD1114 那个论坛案例和 PNH3348 这类高分辨率产品,看起来隔得很远,其实底层问题有点像。
一个是在桌面上问:
这个黑白码盘为什么读不出来?
另一个是在产品里问:
这套光学链路出来的相位,能不能长期相信?
前者靠万用表、示波器、换材料,很快就能看到差异。
后者要靠材料规范、光谱测试、结构公差、老化验证和批次追溯,把这些差异控制在量产范围内。
它们的工具不一样,代价不一样,但起点是一样的:
不要只相信肉眼看到的黑白,要回到传感器真正工作的那个波长。
传感器不相信颜色,传感器只相信物理
很多人第一次做光学编码器,会把它理解成一个“黑白识别”问题。
这当然没错,但只说对了一半。
更准确地说,它是一个小型光学测量系统。里面有光源、材料、几何结构、光电转换、电路阈值、算法处理和机械误差。肉眼看到的黑白,只是这个系统里最直观、也最容易骗人的一层。
QRD1114 会遇到这个问题。
TCRT5000 会遇到这个问题。
到了 PNH3348 这类成熟高分辨率光学编码器方案里,它不会消失,只会换一种更专业、更昂贵的形式出现:幅值不一致、相位误差、谐波、插值噪声、批次漂移。
这也是我觉得光学编码器很有意思的地方。
它表面上很简单,就是一片码盘、一束光、一个传感器。
但真正做进去以后会发现,传感器看到的从来不是“黑白格子”。
它看到的是反射率、相位、噪声和误差。
所以,当一个自制码盘读不稳时,代码当然要查,电路当然也要查。但别忘了拿同一个传感器,照一下黑区和白区。
有时候答案会很直接:
不是黑区画错了。
是它在传感器眼里,根本没那么黑。

关注公众号「如是有为」
微信扫一扫,新文章先在公众号发出。