概述
项目上使用了一款(瑞盟MS41929 )电机驱动芯片,使用了一段时间,在这写些个人心得,个人能力有限,理解可能有误,其它地方还是需要自己看datasheet。在这做一下记录,方便以后查阅。
只需对寄存器来操作即可。高性价比MS41929国产镜头电机驱动IC,完美替代 AN41908A马达驱动IC。讲解对应的手册是《MS41929说明书2.0_24MHz晶振版.pdf》
电机:功率 = 扭矩*角速度
(注:PPS 是pulse per second 的简写,即每秒的脉冲数,所以pps=Hz , 不用换算。)
科普知识,PWM:
1、频率
1)频率是指1秒内有多少个变化周期,如:1个周期内有一开一关/高低电平形成。例如100Hz,那么也就是1秒内开关(高低电平)100次。
通过示波器看出横坐标是时间,比如:1格是5毫秒,可以看到当前一个周期占用两格,也就是10毫秒,1秒等于1000毫秒,1000除以10就是100Hz,
2)通过上图看出1个周期的时间长度变为4格,也就是1个周期变成20毫秒,1000除以20等于50Hz
3)通过上图看出1个周期的时间长度变为1格,也就是1个周期变成5毫秒,1000除以5等于200Hz
以上3点简述就是频率概念。
2、占空比概念
1)、占空比就是1个周期中高低电平所占用的时间比例,如果把高电平理解为“开”,低电平理解为“关”,那么占空比可以简单理解为“开”的时间百分比。
比如上图,“开”与“关”的时间各占一半,那么占空比就是50%,
2)通过上图可知,“开”的时间明显变长,“关”的时间变短
3)通过上图可知,占空比为100%,波形变成一条高电平直线,意思就是一直处于“开”着,一直处于高电平状态。
4)比如当占空比为30%时,“开”的时间占30%,“关”的时间占70%
5)当占空比为0%时,波形为0伏直线。代表完全处于低电平状态,可以理解为全关。
3、通过以上几点得出结论:
1)占空比越大,高电平的时间越长,输出的功率也就越大
2)占空比越小,高电平的时间越短,输出的功率也就越小
开关电源调压,电机调速,LED灯亮度调节,就是利用以上的原理。
科普一下步进电机知识:
1-2-Phase
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
A | + | + | + | _ | _ | _ | _ | _ |
/A | _ | _ | _ | _ | + | + | + | _ |
B | + | _ | _ | _ | _ | _ | + | + |
/B | _ | _ | + | + | + | _ | _ | _ |
对应的就是8拍,转一周(在不细分的情况下)
2-2-Phase
1 | 2 | 3 | 4 | |
A | + | _ | _ | + |
/A | _ | + | + | _ |
B | + | + | _ | _ |
/B | _ | _ | + | + |
对应就是4拍,转一周(在不细分的情况下)
假设:
2-2 Phase:一步 = 18°C
电机转一圈
360°C / 18°C = 20步
假设 1s, 100Hz
通过上面表得知:1周期 = 4步,求在多少个,100Hz/s 转1周(圈)
也就是100Hz = 100pps,分别4步走完1周(圈),所以就是100pps * 4 = 400pps。
只需要给它400pps脉冲,电机就可以转1圈。
step(1-2 Phase) 步数(电机1圈的行程:长度)
step(2-2 Phase) 步数(电机1圈的行程:长度)
2-2 Phase 电机
正弦频率 Hz = (pps / 4) -> 对应1~256细分
pps(1-2 Phase) 速度
pps(2-2 Phase) 速度
INTCTxx[15:0] × 768 = OSCIN 频率 / 转动频率
INTCTxx[15:0] × PSUMxx[7:0] × 24 = OSCIN 频率 / VD 频率
转动频率 = 800pps / 8 = 100Hz 8细分
因为对应的是1-2相位的Phase
举例说明 OSCIN 频率 = 24 MHz,VD 频率 = 60Hz
INTCTxx[15:0] × 768 = 24 / 100
INTCTxx[15:0] = 24000 / 100 / 768 = 312
PSUMxx[7:0] = OSCIN 频率 / VD 频率 / (INTCTxx[15:0] × 24) = 24 / 60 / (312 * 24) = 53
INTCTxx[15:0] = OSCIN 频率 / VD 频率 / (PSUMxx[7:0] × 24) = 24/60/(53*24) = 314
PSUMxx[7:0] = 1/(100Hz)×24MHz/ (39 ×24) = 256
16384 + (x - 25) * 8 = 16736
(x - 25) * 8 = 16736 - 16384
(x - 25) = 16736 - 16384 / 8
x-25 = 44
x=69
INTCTxx[15:0] × PSUMxx[7:0] × 24 = OSCIN 频率 / VD 频率
INTCTxx[15:0] × 768 = OSCIN 频率 / 转动频率
通过以上两个公式,得出以下公式:
INTCTxx[15:0] × PSUMxx[7:0] × 24 = 24 / 60
INTCTxx[15:0] = 1 / 60 / PSUMxx[7:0]
PSUMxx[7:0] = 1 / 60 / INTCTxx[15:0] = 53
INTCTxx[15:0] = 24MHz / (100Hz × 768) =312
INTCTxx[15:0] × PSUMxx[7:0] × 24 = 24 / 60
INTCTxx[15:0] = 24 /60 / (53 * 24) = 314
PWM频率 = 系统时钟48MHZ/48/10000 = 100HZ
占空比 = 脉宽值(Pulse)/装载值(Period)*100% = 4999/9999 * 100% = 49.9%
PWM 频率 = OSCIN 频率 / ((PWMMODE × 23 ) × 2PWMRES )
PWM 频率 = 24 / ((1 × 8 ) × 1 ) = 3 * 10^3
PWM 频率 = 24 / ((1 × 8 ) × 2 ) = 1.5 * 10^3
PWM 频率 = 24 / ((1 × 8 ) × 4 ) = 0.75 * 10^3
驱动器 X 最大占空比 = PPWx/ (PWMMODE × 8)
最大占空比 = 200 / (28*8) = 0.89
通过结论 PWMMODE不能大于PPWx,不然占空比会超过100%
当 PWMMODE = 10, PPWx = 96
最大占空比 = 96 / (10*8) = 1.2*10^3 = 120%
步距角=360/(2*相数*转子齿数);
360/(2*2*5) = 18°C
VSM08142电机
18°c步距角
转一圈需要多少个脉冲
360°C / 18°C = 20pps
通过公式推导得出结果:(如有错误请及时指出谢谢!)
20pps 就走了18°C。
1)那么1°C是多少pps
20pps / 18°C = 1.11pps,那么1°C是1.11pps。
2)那么1pps走了多少°C
18°C / 20pps = 0.9°C,那么1pps走了0.9°C。
64细分等分
18 / 64= 0.28125,得出每一个细分就是0.2°C
通过上面可以得出,1°C / 0.2°C = 5;
0.2°C * 5 = 1°C = 1.11pps
那么:一个细分是多少pps?
1.11 / 5 = 0.222pps
各个放大100倍:
20°C = 22pps
128细分等分
18 / 128= 0.140625,得出每一个细分就是0.14°C
通过上面可以得出,1°C / 0.14°C = 7.14285
0.14°C * 7.142 = 1°C = 1.11pps
那么:一个细分是多少pps?
1.11 / 7.142 = 0.155pps
各个放大100倍:
14°C = 15pps
256细分等分
18 / 256 = 0.0679,得出每一个细分就是 0.067°C
通过上面可以得出,1°C / 0.067°C = 14.9253
0.067°C * 14.9253 = 1°C = 1.11pps
那么:一个细分是多少pps?
1.11 / 14.9253 = 0.0743pps
各个放大100倍:
6°C = 7pps
360/(2*2*10) = 9°C
VSM08161电机
9°c步距角
转一圈需要多少个脉冲
360°C / 9°C = 40pps
补充部分:可能和上面介绍有小部分重复内容,自行辨识
t = n×8192/24MHz
n = 24/t/8192
PWM 频率 = OSCIN 频率 / ((PWMMODE × 2^3 ) × 2^PWMRES )
推导出:
PWM 频率 = 24 / ((1 × 2^3 ) × 2^0 ) = 3000
PWM 频率 = 24 / ((2 × 2^3 ) × 2^1 ) = 1500
PWM 频率 = 24 / ((3 × 2^3 ) × 2^2 ) = 250
寄存器:0x22
PHMODAB[5:0](相位矫正α电机)
PHMODCD[5:0](相位矫正β电机)
000000 | 0° | ||
000001 | 0.7° | ||
011111 | 21.8° | ||
100000 | -22.5° | ||
111111 | -0.7° | ||
减幅单位 | 360° / 512 = 0.70° |
步进电机线圈之间的相位差一般为 90°。但是,因为电机的不同,或者工艺偏差,相位差也会偏
移出 90°。因此,即使驱动波形电流的相位差 90°,但是电机本身不是相差 90°,也会产生转矩
纹波,噪声还是存在的。
这个设置主要是减少由于电机变化时产生的转矩纹波。
寄存器 0x23
最大占空比由下式进行计算:
驱动器 X 最大占空比 = PPWx/ (PWMMODE × 8)
当 PPWA[7:0] = 200,PWMMODE[4:0] = 28,最大占空比为
200/28/8=0.89=89%
96/10/8=120%
PSUMAB[7:0](α电机步进数)
PSUMCD[7:0](β电机步进数)
如果要停止电机转动,设置 PSUMXX[7:0]=0.
寄存器值 | 总步数 | |||
64 细分模式 | 128 细分模式 | 256 细分模式 | ||
0 | 0 | 0 | 0 | |
1 | 500ns | 250ns | 125ns | |
max | 32.8ms | 16.4ms | 8.2ms | |
n | 12n/24MHz | 6n/24MHz | 3n/24MHz |
BRAKEAB(α电机刹车状态)CCWCWAB(α电机转动方向)
CCWCWCD(β电机转动方向)
方向定义:
设置值 电机转动方向
0 正向
1 反向
BRAKECD(β电机刹车状态)
刹车定义:
设置值 α电机刹车
0 正常状态
1 刹车状态
ENDISAB(α电机 Enable/Disable)
ENDISCD(β电机 Enable/Disable)
ENDISAB 和 ENDISCD 分别设置α电机和β电机的输出控制。
当 ENDISxx = 0 时输出高阻态。然而,内部的激励位置计数器在 ENDISxx = 0 仍然保持计数。
因此,当在正常状态下想要停止电机,设置 PSUMxx[7:0] = 0,而不是设置 ENDISxx = 0.
设置值 电机输出状态
0 输出关闭(高阻态)
1 输出打开
MICROAB(α电机正弦波分频数)
MICROCD(β电机正弦波分频数)
MICROAB 和 MICROCD 分别设置α电机和β电机的正弦波分频数。
64 分频的波形如第 26 页所示。
MICROAB | 分频数 |
00 | 256 |
01 | 256 |
10 | 128 |
11 | 64 |
INTCTAB[15:0]和 INTCTCD[15:0]分别设置α电机和β电机的一个步进的周期。
INTCTAB(α电机 1 个步进周期)
INTCTCD(β电机 1 个步进周期)
寄存器值 | 总步数 | |||
64 细分模式 | 128 细分模式 | 256 细分模式 | ||
0 | 0 | 0 | 0 | |
1 | 500ns | 250ns | 125ns | |
max | 32.8ms | 16.4ms | 8.2ms | |
n | 12n/24MHz | 6n/24MHz | 3n/24MHz |
当 INTCTAB[15:0]=0,只要 pwm 最大占空比不为 0,电机就保持在释放时状态。
举例说明:
当 INTCTAB[15:0]=400 时,64 细分下每步周期
12*400/24MHz=0.2ms
因此,每个正旋波周期为 12.8ms(78.1Hz);同样计算,128 细分与 256 细分下也为 12.8ms。
对应的芯片手册:下载连接,当然也可以去官网:下载链接
总结:想控制步进电机,首先需要花时间去了解电机的运作原理,其次再去了解驱动电机芯片,电机这个学问还是有点深度,还是需要花点时间揣摩才行。好了,废话有点多,本篇只要是给自己做个记录。