电动变焦镜头的控制驱动分析
电动变焦镜头的控制
1. 简介
1.1 VD_FZ
1.1.1 VD_FZ的功能
1.1.2 VD_FZ的频率 (50Hz/60Hz与视频帧同步)
1.2 控制电机的速度
1.3 64 细分 128 细分 256 细分的区别
1.3 MS41xx的输入频率(OSCIN)
1.4 SPI的通信速度
2. MS41928M
2.1 关键寄存器
2.1.1 微型步进输出PWM的频率(分频)
2.1.2 起始点等待时间
2.1.3 起始点激励等待时间
2.1.3 相位矫正
2.1.4 设置驱动能力(最大占空比、峰值脉冲宽度、电流大小)
2.1.5 电机转动方向
2.1.6 电机刹车状态
2.1.7 电机Enable/Disable
2.1.8 电机正弦波分频数
2.1.9 电机运动总步数
2.1.10 一步的时长
3. 计算马达驱动参数
3.1 计算PWM频率
3.2 计算运动步数和运动速度
3.2.1 前提设定
3.2.2 计算转动次数和转动速度
3.2.3 实例 ( 计算PSUMxx[7:0]和INTCTxx[15:0])
3.2.4 细分总步数及每一步所需时间
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}}
f
PWM
=
V
PWMMODE
∗2
3
∗V
PWMRES
f
OSCIN
当f O S C I N f_{OSCIN}f
OSCIN
=27MHz时,输出的PWM的频率如下表(其单位为kHz):
2.1.2 起始点等待时间
DT1[7:0]设置数据写入系统的延时时间(起始点等待时间)
电机可以精确地在起始点等待时间从“1”到“0”翻转后被激活。启示点等待时间从视频同步信号(VD_FZ)的上升沿开始计算。
下表基于f O S C I N f_{OSCIN}f
OSCIN
=27Mhz
DT1[7:0] 起始点等待时间
0 禁止
1 303.4us
255 77.4ms
n nx8192/27MHz
2.1.3 起始点激励等待时间
DT2A[7:0]和DT2B[7:0]设置α电机和β电机开始转动前的等待延迟时间。
电机在起始点激励等待时间从“1”到“0”翻转后开始转动。等待延迟时间从视频同步信号(VD_FZ)的上升沿开始计算。
下表基于f O S C I N f_{OSCIN}f
OSCIN
=27Mhz
DT2A[7:0] / DT2B[7:0] 起始点激励等待时间
0 禁止
1 303.4us
255 77.4ms
n nx8192/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)
MDC
x
=PPW
x
/(V
PWMMODE
∗8)
x ∈ A , B , C , D x \in {A, B, C, D}x∈A,B,C,D
当P P W x PPW_xPPW
x
= 时,驱动电流为0,即电机静止
当M D C x MDC_xMDC
x
超过100%时,正弦波峰值点会被削去
举例:
当PWMMODE = 10,PPWx = 96
M D C x MDC_xMDC
x
= 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}}}
f
PWM
=
V
PWMMODE
∗2
3
∗2
V
PWMRES
f
OSCIN
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}f
OSCIN
= 27MHz
f V D _ F Z f_{VD\_FZ}f
VD_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}f
spin
:转动频率
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=f
OSCIN
/f
spin
第二步:计算转动次数(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=f
OSCIN
/f
VD_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]=f
OSCIN
/(f
spin
∗768)
=27MHz/(100Hz∗768)=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]=f
OSCIN
/(f
VD_FZ
∗24∗INTCTxx[15:0])
=27MHz/(60Hz∗24∗352)=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]=f
OSCIN
/(f
VD_FZ
∗PSUMxx[7:0]∗24)
=27MHz/(60Hz∗53∗24)=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间隔时间,否则最后一步还没有运动完又开始新的一步导致丢步。
————————————————
版权声明:本文为CSDN博主「Arrow」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/MyArrow/article/details/127762589
