4、AF驱动芯片与接口:驱动芯片(DW9714、AK7311等)、I2C协议详解、PWM控制模式、DAC精度与步进
驱动芯片,说白了就是镜头和主控之间的“翻译官”。主控说“往左走10步”,驱动芯片就得精确地告诉马达该怎么动。我这些年经手过的项目里,DW9714和AK7311是出场率最高的两位选手。今天咱们就聊聊它们,顺便把I2C、PWM这些接口协议掰开揉碎了讲清楚。
4.1 驱动芯片选型:DW9714 vs AK7311
先说说这两款芯片的定位。DW9714是韩国动运(Dongwoon)的经典款,10位DAC精度,支持I2C和PWM双模式。AK7311则是AKM家的,同样是10位DAC,但内部集成了EEPROM,可以存校准参数。我个人习惯是:量产项目用DW9714,成本低、供货稳;研发验证用AK7311,调试方便。
核心参数对比:
| 参数 | DW9714 | AK7311 |
|---|---|---|
| DAC位数 | 10位 | 10位 |
| 接口 | I2C / PWM | I2C / PWM |
| 内部EEPROM | 无 | 有(64字节) |
| 工作电压 | 2.3V - 3.6V | 2.5V - 3.6V |
| 典型应用 | 手机摄像头 | 高端模组 |
嗯,这里要注意:AK7311的EEPROM虽然方便,但写入次数有限(约10万次)。我曾经有个项目,产线反复烧写参数,结果芯片挂了。后来改成只在出厂前烧一次,问题就解决了。
4.2 I2C协议详解:别被时序图吓到
I2C协议,很多新手一看时序图就头大。其实没那么复杂。说白了就是两根线:SCL(时钟)和SDA(数据)。主控发时钟,从设备(驱动芯片)跟着节奏走。
标准I2C写操作流程是这样的:
- 主控发START信号(SCL高时SDA从高拉低)
- 发7位设备地址 + 写位(0)
- 等待从设备ACK(拉低SDA)
- 发寄存器地址(8位)
- 等待ACK
- 发数据(8位)
- 等待ACK
- 主控发STOP信号(SCL高时SDA从低拉高)
举个例子,给DW9714写0x1F寄存器:
// 伪代码示例
I2C_Start();
I2C_SendByte(0x18 << 1 | 0); // 设备地址0x18 + 写位
I2C_WaitAck();
I2C_SendByte(0x1F); // 寄存器地址
I2C_WaitAck();
I2C_SendByte(0x80); // 写入数据
I2C_WaitAck();
I2C_Stop();
避坑指南:我曾经遇到过I2C通信偶尔失败的问题。查了半天,发现是上拉电阻阻值不对。4.7kΩ是标准值,但总线电容大时得换成2.2kΩ。你想想看,信号都变形了,通信能稳定才怪。
4.3 PWM控制模式:简单粗暴但有效
PWM模式,就是用占空比来控制镜头位置。驱动芯片内部有个低通滤波器,把PWM信号转成直流电压。占空比越高,电压越高,镜头伸得越远。
为什么会有PWM模式?其实是为了兼容老平台。有些主控没有I2C接口,或者I2C总线被占满了,这时候PWM就派上用场了。我建议:能用I2C尽量用I2C,精度更高,调试也方便。
PWM的关键参数:
- 频率:典型值32kHz - 100kHz。太低会有 audible noise(人耳能听到的噪声),太高了驱动芯片可能跟不上。
- 占空比范围:0% - 100%,对应DAC输出0V到VDD。
- 分辨率:受限于PWM定时器的位数。8位PWM只有256级,10位有1024级。
注意:PWM模式下,驱动芯片的响应速度比I2C慢。因为内部RC滤波器有建立时间。我曾经测过,从占空比变化到镜头稳定,大约需要5-10ms。做快速对焦时得把这个延时算进去。
4.4 DAC精度与步进:10位到底够不够?
DAC精度,直接决定了镜头能走多细。10位DAC,意味着有2^10 = 1024个步进。假设驱动电压范围是0V到2.8V,那么每一步对应的电压变化是:
2.8V / 1024 ≈ 2.73mV
这个精度够用吗?分情况。对于普通VCM马达,2.73mV的步进已经足够细腻了。但对于压电马达或者高精度模组,可能得用12位甚至14位的驱动芯片。
我个人的经验是:10位DAC配合闭环控制,效果完全够用。但如果是开环控制,建议留点余量。比如目标位置是500步,实际可能跑到498或502步。这就是DAC的非线性误差在作怪。
步进计算小技巧:
实际项目中,我们通常不会直接用DAC值。而是先做标定:
// 标定示例
// 近端(0cm)对应DAC值:50
// 远端(无穷远)对应DAC值:950
// 那么中间位置(10cm)对应的DAC值:
DAC_value = 50 + (950 - 50) * (1 / (1 + 10/焦距))
嗯,这里用了反比关系。实际曲线可能更复杂,但原理是一样的。
4.5 实战中的那些坑
最后分享几个我踩过的坑:
- I2C地址冲突:DW9714的地址是0x18(7位),但有些厂商会做成0x1C。买芯片前一定确认好。
- PWM频率选择:别用20kHz以下的频率,否则你会听到镜头在“唱歌”。
- DAC初始化:上电后先写一次默认值,别直接跳到目标位置。我遇到过上电瞬间镜头猛冲到底的情况,吓出一身冷汗。
- 多片驱动芯片:如果模组里有多个驱动芯片(比如双摄),I2C总线要加缓冲器,否则信号会衰减。
好了,关于驱动芯片和接口协议,今天就聊这么多。这些东西看着琐碎,但每一个细节都可能决定项目成败。下次调试时遇到问题,不妨回头看看这些基础点。