3、开环控制策略:DAC直接驱动、PWM转电压、线性度校准、温度补偿初探
开环控制,说白了就是“只管发命令,不管看结果”。在镜头驱动里,我们给马达一个电压,它就动一下。至于它到底动没动到位?我们暂时不关心。听起来有点粗糙,对吧?但很多场景下,开环控制成本低、响应快,用好了其实很可靠。
我个人习惯把开环驱动分成三种主流玩法:DAC直接驱动、PWM转电压,以及线性度校准与温度补偿。今天咱们就一个一个拆开聊。
3.1 DAC直接驱动:最“干净”的模拟信号
DAC(数模转换器)直接输出一个模拟电压,送到VCM(音圈马达)的驱动芯片。这是最直接的方式。信号几乎没有纹波,噪声也低。
我在项目中遇到过一个问题:用了一颗12位的DAC,分辨率4096级,理论上控制精度很高。但实际对焦时,画面总在某个位置轻微抖动。后来发现是DAC的参考电压Vref纹波太大。你想想看,参考电压不稳,输出自然不准。
DAC直接驱动的典型电路结构如下:
MCU (SPI/I2C) → DAC芯片 → 运放(可选) → VCM驱动 → 镜头
这里有个关键点:DAC的输出阻抗通常不低,如果直接驱动VCM,可能会拉低电压。我建议在DAC后面加一级电压跟随器(运放),提高驱动能力。
| 参数 | DAC直接驱动 | PWM转电压 |
|---|---|---|
| 纹波/噪声 | 低(<1mV) | 较高(需滤波) |
| 分辨率 | 高(12~16位) | 受PWM频率和滤波限制 |
| 成本 | 较高(需额外DAC芯片) | 低(MCU自带PWM) |
| 响应速度 | 快(微秒级) | 中等(受滤波时间常数影响) |
| 适用场景 | 高精度、低噪声要求 | 成本敏感、精度要求一般 |
3.2 PWM转电压:低成本的主流方案
大部分嵌入式MCU都自带PWM模块。用PWM加RC滤波,就能得到一个近似直流的电压。成本几乎为零。但这里有个坑——纹波。
PWM的频率越高,滤波后的纹波越小。但频率太高,MCU的功耗和切换损耗也会增加。我一般选20kHz~50kHz,人耳听不到,纹波也能控制在可接受范围。
举个例子:
PWM频率: 25kHz
RC滤波: R=10kΩ, C=0.1μF
截止频率: f_c = 1/(2πRC) ≈ 159Hz
纹波: 约10~20mV(取决于PWM占空比和负载)
嗯,这里要注意。RC滤波的截止频率要远低于PWM频率,但又不能太低,否则响应太慢。我见过有人把截止频率设到10Hz,结果镜头对焦像“慢动作”,用户体验极差。
3.3 线性度校准:让“命令”和“动作”对齐
开环控制最大的问题是什么?非线性。
你给DAC写一个值,理论上镜头应该移动对应的距离。但实际上,VCM的位移-电压曲线不是完美的直线。尤其是在行程的两端,非线性特别明显。
我习惯的做法是:先做一次线性度标定。
- 从0到满量程,每隔10%取一个点。
- 记录每个点对应的实际位移(可以用激光测距仪,或者用图像清晰度评估)。
- 拟合出一条校准曲线,存成查找表(LUT)。
- 运行时,根据目标位移反查DAC值。
下面是一个典型的线性度校准流程:
校准之后,线性度通常能从原来的±10%提升到±1%以内。效果很明显。
3.4 温度补偿初探:别让温度“偷走”精度
VCM的线圈电阻会随温度变化。温度升高,电阻变大,同样的电压下电流变小,推力变小,镜头位移就少了。这就是为什么同一个DAC值,冬天和夏天拍出来的对焦位置不一样。
我做过一个简单的温度补偿方案:
- 在VCM附近贴一颗NTC热敏电阻,或者直接用驱动芯片内置的温度传感器。
- 标定出不同温度下的位移-电压曲线。
- 运行时,根据当前温度查表,修正DAC值。
举个例子:
// 伪代码:温度补偿
uint16_t dac_value = target_position; // 目标位置对应的DAC值
int16_t temp = read_temperature(); // 读取当前温度
// 温度补偿系数:每摄氏度修正0.3%
float compensation = 1.0 + (temp - 25.0) * 0.003;
dac_value = (uint16_t)(dac_value * compensation);
// 限幅
if (dac_value > DAC_MAX) dac_value = DAC_MAX;
if (dac_value < DAC_MIN) dac_value = DAC_MIN;
write_dac(dac_value);
嗯,说到温度补偿,我踩过一个坑。有一次产品在高温环境下测试,镜头对焦位置飘了将近20μm。我以为是温度补偿没做好,查了半天,结果发现是驱动芯片的参考电压温漂太大。换了颗低温漂的参考电压芯片,问题就解决了。所以,先排查硬件,再优化软件,这个顺序不能乱。
3.5 小结:开环控制的核心要点
开环控制虽然简单,但要做好并不容易。我总结了几条经验:
- DAC驱动:信号干净,但成本高,适合高端产品。
- PWM转电压:成本低,但要注意纹波和频率选择。
- 线性度校准:必须做,否则精度没法保证。
- 温度补偿:初探阶段,先做简单的线性补偿,后续再优化。
开环控制是基础。下一层,我们会进入闭环控制的世界。但那是后话了。先把今天的内容消化掉,动手试试看。