haiming8685
发表于 2024-12-28 18:49:50
电机说明是6极电机,转速为20rps-70rps,我的从串口看到最大转速显示
haiming8685
发表于 2024-12-28 18:51:37
不知道显示这个转速是不是电机的真是转速
haiming8685
发表于 2024-12-28 18:55:17
这一句也不明白请梁工帮解释一下,谢谢!
haiming8685
发表于 2024-12-28 18:56:35
这个数值是怎么得来的
haiming8685
发表于 2024-12-28 19:00:50
这是最高转素时相输出波形
梁工
发表于 2024-12-28 22:40:50
haiming8685 发表于 2024-12-28 18:55
这一句也不明白请梁工帮解释一下,谢谢!
有3个转速计算:
用于PID计算的当前转速:转/秒
position = 190476.19f * SampleCnt / PhaseTimeSum; //计算当前位置(转速),
SampleCnt为采样次数,PhaseTimeSum为SampleCnt次采样8次换相时间的累加和,例子使用电机为7个磁极对。
当前位置(转速)=1/(7*t*3/4), 7为磁极对,t为8次换相时间之和,t*3/4为6次换相时间之和,则电机转一圈的时间为(7*t*3/4)。
换相时间单位为us,为了单位对齐,当前位置(转速)=1000000/(7*t*3/4)。本例t=PhaseTimeSum/SampleCnt,则转速:
position = 1000000 / (7*PhaseTimeSum/SampleCnt *3/4) = 190476.19 * SampleCnt / PhaseTimeSum,这个速度给PID计算用的,单位:Hz,即转/秒。
用于OLED显示的当前转速:转/秒
if(B_RUN) j = (u16)(1904761.9f * SpeedSumCnt / SpeedSum); // 计算当前转速(0.0转/秒)
原理同上,但是显示是带一位小数的,则将上述数据放大10倍,换相时间使用计算周期内的平均值,这样显示稳定。
当前转速(转/秒)=10*1000000/(7*t*3/4),本例t=SpeedSum/SpeedSumCnt,SpeedSum为计算周期内SpeedSumCnt次采样的8次换相时间之和。
则当前转速(转/秒)=10*1000000/(7*SpeedSum/SpeedSumCnt*3/4)=1904761.9f * SpeedSumCnt / SpeedSum,单位0.1Hz,即0.1转/秒。
用于OLED显示的当前转速:转/分
if(B_RUN) j = (u16)(11428571.4f * SpeedSumCnt / SpeedSum); // 计算当前转速(转/分)
同理,就是上述“用于OLED显示的当前转速:转/秒”一样的计算,不过是乘以60:
当前转速(转/分)=60*1000000/(7*t*3/4)=60*1000000/(7*SpeedSum/SpeedSumCnt*3/4)=11428571.4 * SpeedSumCnt / SpeedSum,单位转/分。
梁工
发表于 2024-12-28 22:42:59
haiming8685 发表于 2024-12-28 18:51
不知道显示这个转速是不是电机的真是转速
跟磁极对有关,我的例子是针对7对磁极的,如果你的电机不是7对磁极的,则要改下计算式子的磁极对数。
梁工
发表于 2024-12-28 22:45:06
haiming8685 发表于 2024-12-28 19:00
这是最高转素时相输出波形
波形很好,对称,可以看到明显的退磁线(就是线圈反电动势,注意不是电机反电动势)。
haiming8685
发表于 2024-12-29 09:25:28
谢谢梁工!解释的很详细。
haiming8685
发表于 2024-12-29 09:27:04
我再修改一下程序调试一下看看,多谢梁工。
页:
1
2
3
4
5
6
7
8
9
[10]
11
12