红外信号基础:红外光特性、红外传感器选型、红外发射与接收电路原理
各位同学,欢迎来到第二章。上一章我们聊了点钞机防伪的整体框架,今天咱们深入一个具体环节——红外信号。
说实话,红外在点钞机里是个老面孔了。但你别小看它,很多钞票的防伪特征,恰恰就藏在红外波段里。我当年刚入行时,总觉得红外就是简单的“有光没光”,直到被一个项目狠狠教育了一顿……嗯,咱们慢慢聊。
2.1 红外光特性:你看不见,但它真实存在
红外光,说白了就是波长比可见光长、人眼看不见的电磁波。它的波长范围大概在 0.75μm 到 1000μm 之间。点钞机里常用的,是近红外波段,也就是 0.85μm 到 0.94μm 这个区间。
为什么选这个波段?两个原因:
- 穿透性强:红外光能穿透纸张的纤维层,但遇到油墨、防伪线等物质时,吸收和反射特性会明显变化。钞票上的红外防伪特征,就是利用这个原理。
- 与钞票油墨匹配:人民币、美元等主流货币,其红外防伪油墨的吸收峰正好落在 850nm 和 940nm 附近。这不是巧合,是设计好的。
核心知识点:红外防伪检测,本质上是检测钞票对特定波长红外光的吸收率差异。真钞的某些区域会吸收红外光,而假钞往往不会,或者吸收特性完全不同。
我在项目中遇到过一件事:有批假钞,可见光下几乎以假乱真,但一过红外检测就露馅了。因为假钞用的普通油墨,对红外光几乎不吸收。你看,这就是红外防伪的价值所在。
2.2 红外传感器选型:别只看参数,要看场景
传感器选型,是很多新手容易踩坑的地方。我建议你从三个维度来考虑:
| 参数 | 推荐值 | 为什么 |
|---|---|---|
| 峰值波长 | 850nm 或 940nm | 与钞票防伪油墨吸收峰匹配 |
| 响应时间 | ≤ 10μs | 点钞机速度很快,传感器要跟得上 |
| 暗电流 | ≤ 10nA | 暗电流大了,信噪比会变差,误判率上升 |
| 封装形式 | 贴片或插件 | 看你的PCB布局,我个人偏爱贴片,省空间 |
常见的红外接收管有两大类:
- 光电二极管:响应快、线性度好,适合高速检测。缺点是输出电流小,需要加运放放大。
- 光电三极管:增益高,输出信号强,但响应速度慢一些。点钞机里用得不多,因为速度跟不上。
我的个人习惯:点钞机红外通道,我一般选光电二极管 + 跨阻放大器(TIA)的方案。虽然电路复杂一点,但信噪比和速度都能兼顾。你想想看,一张钞票从传感器前飞过可能只有几毫秒,响应慢了根本来不及采样。
2.3 红外发射与接收电路原理:从原理图到实战
好了,理论说完了,咱们看看电路怎么搭。我直接给你一个我常用的电路结构。
2.3.1 发射电路
红外发射管,本质上就是一个LED,只是发的是红外光。驱动电路很简单:
// 红外发射管驱动(PWM调光)
// 使用定时器产生38kHz方波,驱动红外LED
void IR_LED_Init(void) {
// 配置GPIO为推挽输出
// 配置定时器PWM模式,频率38kHz,占空比50%
TIM_OCInitTypeDef oc;
oc.TIM_OCMode = TIM_OCMode_PWM1;
oc.TIM_Pulse = 50; // 占空比50%
oc.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM2, &oc);
}
void IR_LED_On(void) {
TIM_Cmd(TIM2, ENABLE); // 开启PWM输出
}
void IR_LED_Off(void) {
TIM_Cmd(TIM2, DISABLE); // 关闭PWM输出
}
为什么要用38kHz调制?两个原因:
- 抗环境光干扰。环境光(比如日光灯)含有大量红外成分,如果不调制,接收端会把环境光当成信号。
- 提高信噪比。接收端用带通滤波器只提取38kHz成分,其他频率一概滤除。
注意:红外发射管的电流不能太大。一般控制在 20mA ~ 50mA 之间。电流太大,管子会发热,寿命急剧下降。我曾经见过一个项目,为了追求发射功率,把电流调到100mA,结果用了三个月,发射管全烧了。嗯,这个坑我替你们踩过了。
2.3.2 接收电路
接收电路稍微复杂一点。我常用的方案是:光电二极管 + 跨阻放大器 + 带通滤波器 + 比较器。
// 接收信号处理流程(伪代码)
uint16_t Read_IR_Signal(void) {
// 1. 读取ADC值(跨阻放大器输出)
uint16_t adc_val = ADC_GetValue(IR_CHANNEL);
// 2. 数字带通滤波(38kHz中心频率)
// 使用IIR滤波器,系数预先计算好
static float filter_state[2] = {0};
float filtered = IIR_Bandpass(adc_val, filter_state);
// 3. 判断是否有红外反射
if (filtered > THRESHOLD_IR) {
return 1; // 有反射(真钞特征)
} else {
return 0; // 无反射(假钞特征)
}
}
这里有个关键点:阈值怎么设?
不能拍脑袋定。我建议你这样做:
- 拿100张真钞,采集红外信号值,记录最大值和最小值。
- 拿100张假钞(或者普通纸),同样采集一遍。
- 阈值设在真钞最小值与假钞最大值之间,取中间值。
避坑指南:我曾经遇到过一个问题——新钞和旧钞的红外反射率不一样。旧钞因为磨损,表面纤维变薄,红外穿透率会变化。后来我在软件里加了一个自适应阈值算法,根据钞票新旧程度动态调整阈值。效果还不错。
2.4 实战中的几个小细节
最后,分享几个我在项目中积累的经验:
- 发射管和接收管要配对:波长要一致。850nm的发射管配850nm的接收管,别混用。
- 注意光路设计:发射管和接收管之间要有遮光结构,防止直射光干扰。我见过一个方案,发射管和接收管装得太近,结果接收管直接被发射管的光饱和了,根本检测不到钞票反射回来的信号。
- 温度补偿:红外管的特性随温度变化。夏天和冬天,同一个电路测出来的值可能差20%。建议加一个温度传感器,做软件补偿。
好了,这一章就到这里。红外信号看起来简单,但真正做好,需要你对传感器特性、电路设计、信号处理都有深入理解。下一章咱们聊聊紫外信号,那个更有意思——因为紫外光会“骗人”。
有什么问题,欢迎在课程群里讨论。咱们下章见。