【手机马达共振导致后主摄马达声音异常】

发布于:2024-10-13 ⋅ 阅读:(15) ⋅ 点赞:(0)

手机马达共振导致后主摄马达声音异常

问题根因

当手机马达的震动频率和摄像头AF马达的一二阶震动频率处于共振频段的时候,手机马达震动时候有很大概率会干扰到后置摄像头的对焦马达正常工作,可能出现的影响有出现滋滋杂音,相机预览画面水波纹或抖动导致的成像质量问题。

摄像头AF(自动对焦)马达的一二阶震动频率通常是指马达在进行自动对焦操作时,其机械结构可能产生的振动频率。这些频率与马达的设计、材料和控制算法有关。一阶震动频率通常是指马达在正常工作时可能产生的基本振动频率,而二阶震动频率则可能是一阶频率的倍频或者是由于马达内部结构的复杂性而产生的其他振动频率。
在实际应用中,马达的震动频率可能会受到多种因素的影响,包括马达的驱动方式、控制算法、以及马达与摄像头模块的集成方式等。例如,使用形状记忆合金(SMA)的马达可以通过控制电流的方式实现对焦和防抖功能,而超声波马达(PZT)则利用压电陶瓷在特定频率下产生谐振运动来带动镜头。对于具体的一二阶震动频率数值,通常需要通过实验测量或者马达制造商提供的技术规格来确定。这些数据对于摄像头模块的设计和优化至关重要,因为它们直接关系到摄像头的对焦速度、稳定性和图像质量。

在实际的工作中,有些同事进行音频调试的时候遇到过摄像头抖动得跟得了帕金森一样得共振现象,这个问题涉及到结构,音频,影像等多个领域。如果遇到以上问题,常需要拉通各个模块来分析解决。

解决方案

编号 方案 可行性
1 更改整机马达振动频率(通过驱动调整工作电压)避开摄像头马达一二阶频率 可行,修改工作电压需要平衡desence等其他测试项目
2 更改摄像头马达弹片K值,进一步改变摄像头马达一二阶振动频率,从而避开与整机马达共振频段 需要更改摄像头模组,周期长,一般不考虑
3 在软件上做拍照时屏蔽来电震动方案,即直接切换为静音模式 1.实际验证来电震动及闹钟模式下已切换为静音模式,无相机异响及画面抖动情况:拍照场最有效,非拍照场景存在风险,2.相机非工作场景出现整机振动时异响仍高概率会复现,风险无法规避:
4 相机待机场最下的驱动适配规避,原理为当整机马达下发指令即将工作之前将预启动结果反馈给相机相关层,此时相机层开始进行驱动适配即对后主摄AF模块开始供电并控制摄像头镜头固定在预期位置,从而降低共振带来的撞击影响,降低就完全规避异响声音大小 音频验证2pcs之前严重异响机器结果OK,继续加大样本验证:

一般说来,为了节省成本,物料基本上都是复用的量产物料,上述1和2方案都不会被考虑,哪怕是低概率问题,通过收紧手机马达的门限来卡出不良品的方法也会因为成本和良率而被放弃,因此,往往都需要选择成本最低的软件优化方法。

其他易混淆

马达异响,可能是SIM卡托顶杆异响

软件方案

现在我们着重介绍软件方案
1.打开后主摄相机,然后使用如下指令可以手动推动马达

adb root
adb remount
adb shell setenforce 0
adb shell setprop vendor.debug.ae_mgr.enable 1
adb shell setprop vendor.debug.af_motor.disable 1
adb shell setprop vendor.debug.af_motor.position 5
adb shell sleep 0.5
adb shell setprop vendor.debug.ae_mgr.lock 1
adb shell setprop vendor.debug.af_motor.position 1000

手动开启手机马达震动步骤:
1.先设置马达震动时长
adb shell “echo 15000000 > /sys/class/leds/vibrator/duration”
2.开启震动
adb shell “echo 1 > /sys/class/leds/vibrator/activate”
设置手机马达震动时长

adb shell "echo 1500000 > /sys/class/leds/vibrator/duration"

开启手机马达震动

adb shell "echo 1 > /sys/class/leds/vibrator/activate"

手动挪动相机马达位置:马达DAC行程是从0到1023的10位数字值
1.首先打开后置相机,然后执行脚本MOVE_AF_pos.bat
2.然后就可以使用如下命令设置dac值了
比如,我想将马达位置设置为DAC行程1020的位置
adb shell setprop vendor.debug.af_motor.position 1020

以上方法可以手动调试合适的相机马达位置。然后再在代码中实现。

代码实现