3、振镜扫描系统:振镜工作原理、驱动控制、扫描轨迹分析
振镜扫描,在红外搜索系统里是个绕不开的核心部件。说白了,它就是一面可以快速摆动的反射镜,靠电机驱动,把入射的红外光束反射到不同的空间角度上。我最早接触振镜是在一个机载红外告警项目里,当时被它的响应速度惊到了——几毫秒就能完成一次大角度偏转。
3.1 振镜工作原理
振镜的核心结构其实不复杂:一个永磁体转子,上面粘着一面反射镜,外面绕着驱动线圈。给线圈通电,转子就会带着镜片偏转。偏转角度和电流大小成正比——这是最基本的线性关系。
但这里有个坑:振镜不是直流电机,它工作在“有限转角”模式下。什么意思?就是它只能在±15°、±20°这样的范围内摆动,不能像普通电机那样连续旋转。我见过有人拿普通电机改扫描器,结果惯性太大,根本停不住。
振镜关键参数
- 扫描角度范围:通常 ±10° ~ ±25°
- 响应时间:从静止到满偏转,一般 1~5 ms
- 位置分辨率:可达 1 μrad 级别(取决于编码器)
- 重复定位精度:优于 10 μrad
振镜的反射镜面也有讲究。红外波段用的镜片,表面要镀金或镀银,反射率得做到 98% 以上。我有个项目就因为镜片镀膜没做好,导致透过率损失了 3%,整机灵敏度直接掉了 0.5 dB。
3.2 驱动控制
振镜的驱动控制,核心是一个闭环伺服系统。你给它一个位置指令,它就得让镜片精确地转到那个角度。我习惯把驱动控制分成三个层级:
- 电流环:最内层,控制线圈电流,响应最快(几十微秒)
- 速度环:中间层,控制转子角速度,抑制抖动
- 位置环:最外层,控制镜片实际角度,决定扫描精度
位置反馈通常靠电容式传感器或光学编码器。电容式的优点是分辨率高、没有机械磨损,但容易受温度和湿度影响。光学编码器更稳定,但分辨率受限于刻线密度。
我的经验:在红外搜索系统里,我推荐用电容式位置传感器。因为系统工作环境温度变化大,电容式传感器可以通过差分结构抵消温漂。我在一个车载项目里试过光学编码器,结果夏天高温时热膨胀导致读数偏差,后来换回电容式才解决。
驱动器的选型也很关键。振镜驱动器本质上是一个高带宽的功率放大器,输出电压和电流都要能跟上指令变化。带宽不够,扫描波形就会失真。我一般要求驱动器带宽至少是扫描频率的 10 倍以上。
3.3 扫描轨迹分析
振镜的扫描轨迹,取决于你给它什么样的驱动信号。常用的有三种波形:正弦波、锯齿波、三角波。每种波形都有它的脾气。
3.3.1 正弦波扫描
正弦波扫描,就是让振镜按照正弦规律来回摆动。它的好处是加速度连续变化,没有突变,所以机械振动小、噪声低。但缺点也很明显——扫描速度不是匀速的,中间快、两头慢。
为什么会这样?你想想看,正弦函数在过零点时斜率最大,在峰值时斜率为零。所以镜片在视场中心扫得快,在边缘扫得慢。这就导致图像在中心区域被拉伸,边缘被压缩。做图像拼接时,你得做非均匀校正。
正弦扫描特点
- 加速度连续,机械冲击小
- 扫描速度不均匀,需做校正
- 适合对振动敏感的系统(如机载)
3.3.2 锯齿波扫描
锯齿波扫描,是让振镜快速回扫、慢速正扫。正扫时速度恒定,回扫时速度极快。这种波形的好处是扫描速度均匀,图像在正扫方向上没有畸变。
但问题来了:回扫时加速度很大,对振镜和驱动器的冲击都很大。我曾经在一个项目里用锯齿波,结果回扫时振镜过冲,导致回扫结束后还要等几十微秒才能稳定下来。这几十微秒的“死区时间”,直接浪费了扫描效率。
避坑指南:我曾经在锯齿波回扫时没加阻尼控制,结果振镜在回扫终点处来回震荡了 3 个周期才稳定。后来我在驱动算法里加了速度前馈和位置 PID 的联合控制,才把稳定时间压到 100 μs 以内。
3.3.3 三角波扫描
三角波扫描,可以看作是锯齿波的对称版本——正扫和回扫速度一样。它的加速度在波峰和波谷处有突变,但比锯齿波的回扫冲击小一些。
三角波的好处是正反两个方向都能成像,扫描效率高。但缺点也很明显:两个方向的扫描速度相同,但图像方向是相反的。做拼接时,你得把反向扫描的图像翻转回来。
| 波形类型 | 速度均匀性 | 机械冲击 | 扫描效率 | 图像校正难度 |
|---|---|---|---|---|
| 正弦波 | 不均匀 | 低 | 中等 | 高(需非均匀校正) |
| 锯齿波 | 正扫均匀 | 高(回扫冲击) | 高 | 低(正扫无畸变) |
| 三角波 | 双向均匀 | 中等 | 最高 | 中等(需翻转图像) |
实际工程中怎么选?我个人习惯:
- 如果系统对振动敏感(比如机载、车载),优先用正弦波,配合非均匀校正算法
- 如果追求扫描效率(比如快速搜索),用锯齿波,但要做好回扫阻尼控制
- 如果系统空间大、对效率要求高,用三角波,但要处理好图像翻转
3.4 扫描轨迹的数学描述
写代码控制振镜时,你得把波形离散化。下面是我常用的三种波形生成代码(伪代码风格):
// 正弦波扫描
for (t = 0; t < T; t += dt) {
angle = A * sin(2 * PI * f * t);
dac_output(angle);
}
// 锯齿波扫描(正扫慢、回扫快)
for (t = 0; t < T; t += dt) {
phase = (t / T) % 1.0;
if (phase < 0.9) {
angle = A * (phase / 0.9); // 正扫:90% 时间
} else {
angle = A * (1 - (phase - 0.9) / 0.1); // 回扫:10% 时间
}
dac_output(angle);
}
// 三角波扫描
for (t = 0; t < T; t += dt) {
phase = (t / T) % 1.0;
if (phase < 0.5) {
angle = A * (phase / 0.5); // 正扫
} else {
angle = A * (1 - (phase - 0.5) / 0.5); // 回扫
}
dac_output(angle);
}
嗯,这里要注意:实际工程中不能直接用这些理想波形。因为振镜有惯性,你给一个阶跃信号,它会有过冲和振荡。所以驱动信号要加“预补偿”——比如在锯齿波回扫前加一个反向脉冲,抵消惯性。
我的技巧:我习惯在驱动信号里加一个“S 型加速”曲线。就是让加速度从零开始逐渐增大,再逐渐减小到零。这样振镜的机械冲击最小,寿命也最长。代价是计算量大了点,但现在的 DSP 完全扛得住。
3.5 振镜扫描系统知识体系
下面这张图,是我自己总结的振镜扫描系统知识结构。你可以把它当作一个快速索引:
这张图把振镜扫描系统的三个核心模块串起来了。你从任何一个节点切入,都能找到上下游的关系。我个人习惯在设计阶段先画这种图,把每个模块的输入输出理清楚,再动手写代码。
好了,振镜扫描这部分就讲到这里。记住一句话:振镜是红外搜索系统的“眼睛”,它怎么动,系统就怎么看。选对波形、调好驱动、做好补偿,你的扫描系统就成功了一大半。