• 电动变焦镜头的控制


    1. 简介

    • 电动变焦镜头的驱动控制器:
      • AN41908A (Panansonic,参考代码)
      • MS41xx (其MS41908M与AN41908A完全兼容)
    • VD_FZ:Focus zoom sync. signal input (调焦变焦同步信号输入, 马达控制开始信号)
    • VD_IS: Iris video sync. signal input (光圈控制图像同步信号输入, 光圈控制开始信号)
    • PLS1: Pulse 1 output (脉冲1 输出)
    • PLS2: Pulse 2 output (脉冲2 输出)
    • INTCTxx[15:0]:设置每一步的时间(相应的,即转动速度)
    • PSUMxx[7:0]:每个VD_FZ 时段内转动总步数
    • 1-2相是半步:每个正弦周期分成8步
    • 2-2相是整步:整步步数是半步的一半, 即每个正弦周期分成4步
    • 无论2-2相,还是1-2相,PSUMxx的值 每8对应电机的一个整步, 比如 PSUM=16 走完后就刚好是电机的2个整步角

    1.1 VD_FZ

    1.1.1 VD_FZ的功能

    • VD_FZ 是 MS419XX 芯片的马达驱动控制部分的开始控制信号(一般上升沿触发表示开始,使用普通 IO 控制即可),当 VD_FZ 上升沿到来时,芯片会根据寄存器的配置来驱动电机走相应的步数。
    • 要将写入马达驱动控制部分的寄存器的值生效,都要用 VD_FZ 信号来触发。这个信号关系到与设置的电机转动时间匹配问题,所以要保证信号的稳定、准确。
    • VD_FZ信号的周期不能比设置电机转动时间短,否则会出现电机没转完设置走的步数就重新开始走下一个 VD_FZ 触发的设置走的步数了,电机没走的步数就被取消了,这样就“丢步”了;
    • VD_FZ 信号的周期也不要比电机转动时间长太多,间隔太长会影响转速较高的情况下的转动效果,会有较明显的停顿感,电机转动的相电流波形也会比较差。建议 VD_FZ 信号周期时间比设置的电机转动时间长 10 到 20us,这样在高速下也会有好的转动效果。

    1.1.2 VD_FZ的频率 (50Hz/60Hz与视频帧同步)

    • 如果 MS41 系列是用来驱动镜头做对焦建议 VD_FZ 信号和视频帧频同步, 如果不同步可能在一帧视频中间位置电机在两个 VD 间停止时间比较长时可能会引起视频卡顿现象。
    • VD 周期最小是多少? 由于每次 VD 后都要延时 DT1+DT2 的时间, DT1+DT2 在27MHz 时钟下设置成 1 的最小延时都是 303.4uS DT1+DT2=303.4+303.4=606.8us , 如果时钟频率低此延时还会更大,理论上 VD 间隔 607us 就可以正常工作,但实际测试对加减速要求比较高的一般设置 2-5ms 已经足够,一般情况下10-20ms 加减速都可以,具体情况要根据系统负载等参数计算。

    1.2 控制电机的速度

    • 通过 INTCTxx[15:0] 寄存器设置每 STEP 走动的时间来控制电机的速度。

    1.3 64 细分 128 细分 256 细分的区别

    • 一个正弦波分成 64 步走和分成 256 步走效果是有差异的,分成 256 步走更加精准和平稳。

    1.3 MS41xx的输入频率(OSCIN)

    • MS41xx 系列输入的频率范围 15MHz-30MHz 都可以,输入不同的时钟时计算好内部寄存
      器值是同样的效果。 频率不能太高不建议超过 30MHZ,也不能太低建议不要低于 15MHZ,
      时钟来源可以是有源晶振,可以是主芯片的时钟输出,只要保证 50%的占空比时钟频率在
      这范围都可以正常工作。

    1.4 SPI的通信速度

    • MS41 系列的 SPI 通信速度是 1MHz-5MHz,按照 2MHz 的通信速度计算操作一个寄存器大
      概需要 12uS 的时间。不建议低于 1MHz,理论上也可以工作,但更新数据速度较慢。

    2. MS41928M

    2.1 关键寄存器

    在这里插入图片描述

    • α \alpha α电机寄存器:22H~25H
    • β \beta β电机寄存器:27H~2AH

    2.1.1 微型步进输出PWM的频率(分频)

    在这里插入图片描述

    • PWMMODE=0与PWMMODE=1的输出值一样
    • OSCIN:系统时钟
    • PWM频率的计算公式:
      f P W M = f O S C I N V P W M M O D E ∗ 2 3 ∗ V P W M R E S f_{PWM} = \frac {f_{OSCIN}} {V_{PWMMODE} * 2^3 * V_{PWMRES}} fPWM=VPWMMODE23VPWMRESfOSCIN
    • f O S C I N f_{OSCIN} fOSCIN=27MHz时,输出的PWM的频率如下表(其单位为kHz):
      在这里插入图片描述

    2.1.2 起始点等待时间

    在这里插入图片描述

    • DT1[7:0]设置数据写入系统的延时时间(起始点等待时间)
    • 电机可以精确地在起始点等待时间从“1”到“0”翻转后被激活。启示点等待时间从视频同步信号(VD_FZ)的上升沿开始计算。
    • 下表基于 f O S C I N f_{OSCIN} fOSCIN=27Mhz
    DT1[7:0]起始点等待时间
    0禁止
    1303.4us
    25577.4ms
    nnx8192/27MHz

    2.1.3 起始点激励等待时间

    在这里插入图片描述

    • DT2A[7:0]和DT2B[7:0]设置α电机和β电机开始转动前的等待延迟时间。
    • 电机在起始点激励等待时间从“1”到“0”翻转后开始转动。等待延迟时间从视频同步信号(VD_FZ)的上升沿开始计算。
    • 下表基于 f O S C I N f_{OSCIN} fOSCIN=27Mhz
    DT2A[7:0] / DT2B[7:0]起始点激励等待时间
    0禁止
    1303.4us
    25577.4ms
    nnx8192/27MHz
    • 等待时间与VD_FZ的关系
      • 1 个VD 的时间间隔内的电机的转动次数设置PSUMAB[7:0]步进电机步进数。
      • 每次VD 脉冲输入时,电机转动所设置的次数。因此,设置次数为“0”是可以停止电机的转动。
      • 当设置的转动次数总额超过了1 个VD 脉冲的时间,超出部分会被取消。
        在这里插入图片描述

    2.1.3 相位矫正

    在这里插入图片描述

    • α电机和β电机电流的相位差分别由PHMODAB[5:0]和PHMODCD[5:0]设置。默认为90°设置1 个
      单位为0.7°同时数据可以取正反偏差
      在这里插入图片描述
    • 步进电机线圈之间的相位差一般为90°。但是,因为电机的不同,或者工艺偏差,相位差也会偏
      移出90°。因此,即使驱动波形电流的相位差90°,但是电机本身不是相差90°,也会产生转矩纹波,噪声还是存在的。
    • 这个设置主要是减少由于电机变化时产生的转矩纹波。

    2.1.4 设置驱动能力(最大占空比、峰值脉冲宽度、电流大小)

    在这里插入图片描述

    • PPWA[7:0]到PPWD[7:0]设置PWM 波的最大占空比,决定了驱动器A 到D 输出电流峰值的位置。
    • 最大占空比(MDC:MaxDutyCycle)由下式进行计算:
      M D C x = P P W x / ( V P W M M O D E ∗ 8 ) MDC_x = PPW_x / (V_{PWMMODE} * 8) MDCx=PPWx/(VPWMMODE8)
    • x ∈ A , B , C , D x \in {A, B, C, D} xA,B,C,D
    • P P W x PPW_x PPWx = 时,驱动电流为0,即电机静止
    • M D C x MDC_x MDCx超过100%时,正弦波峰值点会被削去
    • 举例:
      • 当PWMMODE = 10,PPWx = 96
      • M D C x MDC_x MDCx= 96/(10 × 8)= 120%
      • 目标电流的波形如下显示
        在这里插入图片描述

    2.1.5 电机转动方向

    在这里插入图片描述

    • 方向定义:
      在这里插入图片描述

    2.1.6 电机刹车状态

    在这里插入图片描述

    • 刹车状态下H 桥上臂桥两个PMOS 管全部打开。刹车模式在正常操作不能被使用,在紧急关断时
      才能使用。推荐在反常的状态下使用。
      在这里插入图片描述

    2.1.7 电机Enable/Disable

    在这里插入图片描述

    • ENDISAB 和ENDISCD 分别设置α电机和β电机的输出控制。
    • 当ENDISxx = 0 时输出高阻态。然而,内部的激励位置计数器在ENDISxx = 0 仍然保持计数。
    • 因此,当在正常状态下想要停止电机,设置PSUMxx[7:0] = 0,而不是设置ENDISxx = 0.
      在这里插入图片描述

    2.1.8 电机正弦波分频

    在这里插入图片描述

    • MICROAB 和MICROCD 分别设置α电机和β电机的正弦波分频数。
      在这里插入图片描述
    • 64 分频的波形如下图所示(下图中的Stap No.应为Step No.):
      在这里插入图片描述

    2.1.9 电机运动总步数

    在这里插入图片描述

    • PSUMAB[7:0]和PSUMCD[7:0]分别设置α电机和β电机的总步数 (是细分的步数)
    • 只要PWM 波最大占空比设置不为“0”,当PSUMxx[7:0]=0 时,电机都可以保持在释放时状态。
    • 如果要停止电机转动,设置PSUMXX[7:0]=0.
      在这里插入图片描述
    • 物理意义:当PSUMAB[7:0]=8 被设定,在64 细分模式下运行16 步,即16/64=1/4 个正弦波周期。同理,在128 与256 细分模式下,同样是1/4 个正弦波周期。

    2.1.10 一步的时长

    在这里插入图片描述

    • INTCTAB[15:0]和INTCTCD[15:0]分别设置α电机和β电机的一个步进的周期。
    • 通过 INTCTxx[15:0] 寄存器设置每 STEP 走动的时间来控制电机的速度
    • 当INTCTAB[15:0]=0,只要pwm 最大占空比不为0,电机就保持在释放时状态。
    • 下图中的总步数应该为:每一步所需时间
      在这里插入图片描述

    3. 计算马达驱动参数

    • 系统初始化完成之后,主要控制以下3个寄存器:
      • CCWCWxx:控制旋转方向(0:正,1:反)
      • PSUMxx[7:0]:控制运动步数
      • INTCTxx[15:0]:控制每步运动时间(即控制速度)

    3.1 计算PWM频率

    • OSCIN:系统时钟
    • PWM频率的计算公式:
      f P W M = f O S C I N V P W M M O D E ∗ 2 3 ∗ 2 V P W M R E S f_{PWM} = \frac {f_{OSCIN}} {V_{PWMMODE} * 2^3 * 2^{V_{PWMRES}}} fPWM=VPWMMODE232VPWMRESfOSCIN
    • PWM 频率建议 50-200KHz ,如果频率低于 50KHz 容易进入音频范围人耳可能听到噪音。

    3.2 计算运动步数和运动速度

    • 相关公式:
      在这里插入图片描述

    3.2.1 前提设定

    • PPS:Pulse Per Second,即每秒的脉冲数
    • 200PPS 是只每秒发送 200 个驱动脉冲。800PPS 是每秒发送 800 个驱动脉冲
    • 1-2相位:半步驱动
      • 励磁方式是A->AB->B->BC->C->CD->D->DA->A->AB如此循环
      • MS41xx芯片把这8步当成一个正弦波周期也就是 1Hz
      • 所以800PPS/8=100Hz 也就是 100 个正弦波
    • 环境设置为
      • f O S C I N f_{OSCIN} fOSCIN = 27MHz
      • f V D _ F Z f_{VD\_FZ} fVD_FZ = 60Hz
    • VD_FZ = 60Hz = (1/60)*1000 = 16.6667ms
    • 计算INTCTxx[15:0]

    3.2.2 计算转动次数和转动速度

    • 第一步:计算电机一步时间(INTCTxx[15:0])
      • f s p i n f_{spin} fspin:转动频率
        I N T C T x x [ 15 : 0 ] × 768 = f O S C I N / f s p i n INTCTxx[15:0] × 768 = f_{OSCIN}/ f_{spin} INTCTxx[15:0]×768=fOSCIN/fspin
    • 第二步:计算转动次数(PSUMxx[7:0])
      • 由INCTxx[15:0]计算PSUMxx[7:0],不能单单看PSUMxx[7:0]的值。
      • 下面的等式成立时,持续转动时间和VD 时间相同,电机才可实现均匀转动
        I N T C T x x [ 15 : 0 ] × P S U M x x [ 7 : 0 ] × 24 = f O S C I N / f V D _ F Z INTCTxx[15:0] × PSUMxx[7:0] × 24 = f_{OSCIN}/ f_{VD\_FZ} INTCTxx[15:0]×PSUMxx[7:0]×24=fOSCIN/fVD_FZ
      • 若等式左边比右侧小,转动时间比VD 时段小会引起不连续的转动
      • 若等式左边比右侧大,超过VD 时段的转动会被取消
    • 第三步:PSUMxx[7:0]设置完成后,由上式重新计算INTCTxx[15:0]

    3.2.3 实例 ( 计算PSUMxx[7:0]和INTCTxx[15:0])

    • 计算PSUMxx[7:0]和INTCTxx[15:0]使电机在800pps(1-2 相位)转动100Hz
      • 计算INTCTxx[15:0]
        I N T C T x x [ 15 : 0 ] = f O S C I N / ( f s p i n ∗ 768 ) = 27 M H z / ( 100 H z ∗ 768 ) = 352 INTCTxx[15:0] = f_{OSCIN}/ (f_{spin} * 768) \\ = 27MHz/(100Hz*768) =352 INTCTxx[15:0]=fOSCIN/(fspin768)=27MHz/(100Hz768)=352
      • 计算PSUMxx[7:0]
        P S U M x x [ 7 : 0 ] = f O S C I N / ( f V D _ F Z ∗ 24 ∗ I N T C T x x [ 15 : 0 ] ) = 27 M H z / ( 60 H z ∗ 24 ∗ 352 ) = 53 PSUMxx[7:0] = f_{OSCIN}/ (f_{VD\_FZ} * 24 * INTCTxx[15:0]) \\ = 27MHz/(60Hz * 24 * 352) = 53 PSUMxx[7:0]=fOSCIN/(fVD_FZ24INTCTxx[15:0])=27MHz/(60Hz24352)=53
      • 重新计算INTCTxx[15:0]
        I N T C T x x [ 15 : 0 ] = f O S C I N / ( f V D _ F Z ∗ P S U M x x [ 7 : 0 ] ∗ 24 ) = 27 M H z / ( 60 H z ∗ 53 ∗ 24 ) = 353.77 = 353 INTCTxx[15:0] = f_{OSCIN}/( f_{VD\_FZ} * PSUMxx[7:0] * 24 ) \\ = 27MHz / (60Hz * 53 * 24) = 353.77=353 INTCTxx[15:0]=fOSCIN/(fVD_FZPSUMxx[7:0]24)=27MHz/(60Hz5324)=353.77=353

    3.2.4 细分总步数及每一步所需时间

    • INTCTxx[15:0]=353:则每一步的时间为:

      • 64细分:12*353/27MHz = 156.8888us
      • 128细分:6*353/27MHz = 78.4444us
      • 256细分:3*353/27MHz = 39.2222us
    • PSUMxx[7:0]=53:则总步数为:

      • 64细分:实际运动了 (53*2)=106步, 总共运动时间为:106*156.8888=16.630ms
      • 128细分:实际运动了 (53*4)=212步,总共运动时间为:212*78.4444=16.630ms
      • 256细分:实际运动了 (53*8)=424步,总共运动时间为:424*39.2222=16.630ms
    • 虽然在不同细分模式下运动的步数不同,但他们运行的距离是相同的,电机转动的角度相同,且运动时间也相同

    • INTCTxx[15:0] PSUMxx[7:0] 两个参数最后计算出来的时间一定要小于VD_FZ间隔时间,否则最后一步还没有运动完又开始新的一步导致丢步。

  • 相关阅读:
    国际经济合作真题全集
    数据结构(7)树形结构——红黑树(概念、插入过程、删除过程)
    OPPO手机如何添加日程桌面插件?
    c++实现Json配置数据序列化和反序列化
    2311rust,到66版本更新
    基于python的火车票售票系统/基于django火车票务网站/火车购票系统
    Nodejs教程之让我们用 typescript 创建你的第一个 expressjs 应用程序
    热修复技术可谓是百花齐放
    MuLogin的WebRTC功能介绍与设置
    【java学习—七】单继承和多层继承(30)
  • 原文地址:https://blog.csdn.net/MyArrow/article/details/127762589