3. 紫外信号基础:紫外光特性、紫外荧光效应、紫外传感器与激发光源

好,咱们进入紫外信号的部分。

说实话,紫外防伪在点钞机里是个老技术了,但也是最容易被忽视的一环。我见过不少工程师,把红外搞得很溜,一到紫外就翻车。为什么?因为紫外光的物理特性跟可见光、红外完全不一样,你得重新理解它。

3.1 紫外光特性:你看不见,但它真实存在

紫外光,波长在10nm到400nm之间。点钞机里常用的,是365nm和254nm这两个波段。

为什么选这两个?说白了,是因为人民币上的荧光物质,对这两个波长的激发效率最高。我早期做过一个项目,用了395nm的紫外LED,结果荧光信号弱得可怜,后来一查资料才发现,激发波长偏了那么一点点,效率就差了十倍。

关键参数:

  • UVA(长波紫外):315-400nm,点钞机主力,常用365nm
  • UVC(短波紫外):100-280nm,254nm用于特殊防伪
  • 穿透力:紫外穿透力极弱,一张纸就能挡住大部分
  • 安全性:UVC对皮肤和眼睛有伤害,操作时要注意

紫外光还有个特点——它容易散射。你想想看,在点钞机狭小的空间里,紫外LED一开,整个机壳内部都在发光。这就是为什么我总强调,紫外传感器的安装位置要远离光源,最好加个遮光罩。不然你测到的不是荧光,是漏光。

3.2 紫外荧光效应:钞票上的隐形密码

荧光效应,说白了就是「吃进紫外,吐出可见光」。人民币上的防伪纤维、油墨里掺了荧光物质,紫外一照,它们就发出蓝、绿、黄的光。

这里有个坑,我踩过。不同面额、不同版本的钞票,荧光物质的配方不一样。有的荧光粉衰减很快,用个两三年就变弱了。我遇到过一台老点钞机,客户说验钞不准,拆开一看,紫外LED的光衰已经超过50%。换了个新LED,立马恢复正常。

我的经验:紫外荧光信号不是一成不变的。新钞和旧钞的荧光强度能差30%以上。所以阈值不能设死,得做自适应。我习惯用滑动窗口取平均值,动态调整判断门限。

荧光信号的时序特征也很重要。紫外光一照,荧光几乎是瞬间激发,但关掉紫外后,荧光会有一个衰减过程,这叫余辉。真钞的余辉时间一般在几毫秒到几十毫秒。假钞呢?有的根本没余辉,有的余辉长得离谱。这个特征可以用来做二次验证。

3.3 紫外传感器:选对器件,事半功倍

紫外传感器,市面上常见的有三种:

类型 响应波段 灵敏度 成本 典型应用
光敏二极管(UV PD) 200-400nm 通用点钞机
光电倍增管(PMT) 100-650nm 极高 高端验钞设备
紫外增强型硅光电二极管 200-1100nm 多光谱点钞机

我个人习惯用紫外增强型硅光电二极管。为什么?因为它的响应范围宽,一个传感器能同时覆盖紫外和可见光,做多光谱分析时省事。但要注意,它也会响应红外,所以前面必须加紫外带通滤光片。

避坑指南:我曾经在一个项目里,为了省成本,没加滤光片。结果环境光一强,传感器直接饱和,输出全是噪声。后来老老实实加了365nm带通滤光片,信噪比提升了20dB。记住,紫外传感器的前置光学设计,比传感器本身还重要。

传感器输出的是微弱电流信号,一般在nA到μA级别。所以后面必须接跨阻放大器(TIA)。我常用的运放是AD8605,噪声低、偏置电流小,适合做光电信号的前端处理。

// 紫外传感器信号采集示例(伪代码)
uint16_t read_uv_sensor(void) {
    // 开启紫外LED
    GPIO_WriteLow(UV_LED_PIN);
    delay_ms(5);  // 等待荧光稳定
    
    // 读取ADC值(12位分辨率)
    uint16_t adc_val = ADC_Read(UV_SENSOR_CH);
    
    // 关闭紫外LED
    GPIO_WriteHigh(UV_LED_PIN);
    
    return adc_val;
}

3.4 激发光源:LED还是灯管?

紫外激发光源,现在主流是LED。以前用紫外灯管,寿命短、发热大、启动慢。LED就不一样了,即开即用,寿命能到几万小时。

但LED也有坑。我遇到过一批紫外LED,标称365nm,实际测出来峰值在370nm。差了5nm,荧光效率就掉了40%。所以买回来的LED,一定要用光谱仪测一下,别信规格书。

选型要点:

  • 波长精度:±5nm以内,最好用窄带LED
  • 光功率:5-20mW,太强会灼伤钞票,太弱信号不够
  • 驱动方式:恒流驱动,避免电流波动导致光强不稳
  • 散热:紫外LED发热量大,需要良好的散热设计

驱动电路方面,我习惯用恒流源。简单的可以用一个三极管加稳压管,要求高的用专用LED驱动芯片。记住,紫外LED的Vf(正向电压)比普通LED高,一般在3.5-4.5V,供电电压要留够余量。

// 紫外LED恒流驱动示例(简化版)
// 使用PWM控制亮度,实现自适应调节
void uv_led_set_brightness(uint8_t level) {
    // level: 0-255
    TIM_SetCompare1(TIM3, level);
}

嗯,紫外这块内容不少,但核心就三点:理解紫外光的特性、选对传感器和光源、做好光学隔离。下一节咱们讲紫外信号的采集与处理,到时候会结合具体的电路和算法,把今天讲的理论落地。