找回密码
 立即注册
楼主: 梁工

三相无刷电机驱动-32G系列-无HALL-PID控制-OLED显示-串口绘图

  [复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-05-01 15:23:22

0

主题

73

回帖

586

积分

高级会员

积分
586
发表于 2024-12-28 18:49:50 | 显示全部楼层
电机说明是6极电机,转速为20rps-70rps,我的从串口看到最大转速显示
截图202412281849461400.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-05-01 15:23:22

0

主题

73

回帖

586

积分

高级会员

积分
586
发表于 2024-12-28 18:51:37 | 显示全部楼层
不知道显示这个转速是不是电机的真是转速

点评

跟磁极对有关,我的例子是针对7对磁极的,如果你的电机不是7对磁极的,则要改下计算式子的磁极对数。  详情 回复 发表于 2024-12-28 22:42
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-05-01 15:23:22

0

主题

73

回帖

586

积分

高级会员

积分
586
发表于 2024-12-28 18:55:17 | 显示全部楼层
这一句也不明白请梁工帮解释一下,谢谢!
截图202412281855094506.jpg

点评

有3个转速计算: 用于PID计算的当前转速:转/秒 position = 190476.19f * SampleCnt / PhaseTimeSum; //计算当前位置(转速), SampleCnt为采样次数,PhaseTimeSum为SampleCnt次采样8次换相时间的累加和,例子使用电  详情 回复 发表于 2024-12-28 22:40
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-05-01 15:23:22

0

主题

73

回帖

586

积分

高级会员

积分
586
发表于 2024-12-28 18:56:35 | 显示全部楼层
这个数值是怎么得来的
截图202412281856344206.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-05-01 15:23:22

0

主题

73

回帖

586

积分

高级会员

积分
586
发表于 2024-12-28 19:00:50 | 显示全部楼层
这是最高转素时相输出波形
截图202412281900477037.jpg

点评

波形很好,对称,可以看到明显的退磁线(就是线圈反电动势,注意不是电机反电动势)。  详情 回复 发表于 2024-12-28 22:45
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-12-28 22:40:50 | 显示全部楼层
haimin*** 发表于 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,单位转/分。  
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-12-28 22:42:59 | 显示全部楼层
haimin*** 发表于 2024-12-28 18:51
不知道显示这个转速是不是电机的真是转速

跟磁极对有关,我的例子是针对7对磁极的,如果你的电机不是7对磁极的,则要改下计算式子的磁极对数。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-12-28 22:45:06 | 显示全部楼层
haimin*** 发表于 2024-12-28 19:00
这是最高转素时相输出波形

波形很好,对称,可以看到明显的退磁线(就是线圈反电动势,注意不是电机反电动势)。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-05-01 15:23:22

0

主题

73

回帖

586

积分

高级会员

积分
586
发表于 2024-12-29 09:25:28 | 显示全部楼层
谢谢梁工!解释的很详细。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-05-01 15:23:22

0

主题

73

回帖

586

积分

高级会员

积分
586
发表于 2024-12-29 09:27:04 | 显示全部楼层
我再修改一下程序调试一下看看,多谢梁工。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:35 , Processed in 0.182411 second(s), 108 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表