梁工
发表于 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
我再修改一下程序调试一下看看,多谢梁工。
haiming8685
发表于 2024-12-29 12:23:37
梁工您好!按照您说的我做了修改,电机运行正常转速也能上到3000转了,还有个问题想请教您,我目前是用电位器控制电机的启动及速度调节的,启动时电位器调整电压不能太大,我测量了应该在0.3V-0.35V,要是启动时电位器调整电压太高电机就无法启动并咔咔响。我试着转为串口控制,电机启动时咔咔响无法启动,请问要修改哪些参数可以解决串口启动问题。
haiming8685
发表于 2024-12-29 12:41:46
梁工您好!我把启动参数修改调试,现在可以串口启动了
梁工
发表于 2025-2-1 19:21:15
hhhhhht 发表于 2025-2-1 12:56
有了这个功能,STC单片机调试方便很多了。这个是要再程序里发送吗?有没有像ARM单片机一样,编译生成一个.a ...
使用中断发送,占用很少CPU的时间,如果使用DMA发送,占用时间可忽略。
haiming8685
发表于 2025-2-26 09:55:59
梁工您好!三相无刷电机驱动-32G系列-无HALL-PID控制-OLED显示-串口绘图程序,驱动电机正常工作,也会出现启动不起来的现象,请问能否将程序更改一下,在启动失败后停止一定时间再次启动。
梁工
发表于 2025-2-26 11:57:56
haiming8685 发表于 2025-2-26 09:55
梁工您好!三相无刷电机驱动-32G系列-无HALL-PID控制-OLED显示-串口绘图程序,驱动电机正常工作,也会出现 ...
我程序里有失效重启的代码,可能不是很可靠,要结合电流来做判断,我还没有这方面的代码,你可以自己研究一下。
页:
1
2
3
4
5
6
7
8
9
[10]
11
12
13