找回密码
 立即注册
楼主: 神农鼎

便宜的车规-FOC,24万转@STC32G12K128-24A车规,STC-FOC 新算法库,4/1更新

 火... [复制链接]
  • 打卡等级:常住居民II
  • 打卡总天数:85
  • 最近打卡:2026-06-29 17:07:31

1

主题

13

回帖

355

积分

中级会员

积分
355
发表于 2025-11-16 07:21:18 | 显示全部楼层
梁*** 发表于 2025-11-15 16:24
磁极对数可以是单或双,1对、2对、3对。。。
磁极数才是双数。

明白了,感谢梁老师
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:132
  • 最近打卡:2026-04-25 10:41:00

11

主题

171

回帖

308

积分

中级会员

积分
308
发表于 2025-11-18 08:27:55 | 显示全部楼层
请教一个问题,我现在想用外部PWM(1Khz)的占空比来控制电机转速。目前使用的是P00的输入捕获功能,同时测量外部PWM的频率和占空比,程序如下。我调试了好久都无法实现,请问是哪边设置有问题吗?

void PWM_Config(void)
{

        PWMB_ARRH = (u16)(1000 >> 8);                                                
        PWMB_ARRL = (u16)(1000);




        PWMB_PSCRH = (u16)(23>> 8);                               
        PWMB_PSCRL = (u16)(23);       


        PWMB_CCER1 = 0x00;                                                                                               
                                                                                                                                                                               
        PWMB_CCMR1 = 0x01;                                                                                                
        PWMB_CCER1 |= 0x01;                                                                                               
        PWMB_CCMR2 = 0x02;                                                                                               
        PWMB_CCER1 |= 0x30;                                                                                               
        PWMB_PS = 0x02;                                                                                                        
        PWMB_IER = 0x06;                                                                                                        
        P00 = 1;
        P01 = 1;



        PWMB_CR1 |= 0x01;                                                                                                
}



void PWMB_ISR() interrupt 27                                                                                                                                                                       
{
        if (PWMB_SR1 & 0X02)                                                                                                                                                       
        {       
                PWMB_SR1 &= ~0X02;                                                                                                                                                       
                cap1 =(PWMB_CCR1H << 8) + PWMB_CCR1L;                                                                               
        }
        if(PWMB_SR1 & 0x04)                                                                                                                                                               
        {
                PWMB_SR1 &= ~0x04;                                                                                                                                                       
                cap2 =(PWMB_CCR2H << 8) + PWMB_CCR2L;                                                                               
        }
       
        F_Inpwm_Done = 1;                                                                                                                                                                       
        Inpwm_Down_Count = 0;
}



程序中的cap1即周期计数,cap2即高电平计数,请问是这样吗?
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:21
  • 最近打卡:2026-01-29 19:59:41
已绑定手机

0

主题

29

回帖

268

积分

中级会员

积分
268
发表于 2025-11-18 10:59:52 | 显示全部楼层
微信图片_20251118110052_12_211.jpg 王*** 发表于 2025-9-8 12:452025年11月13日 新 更新 STC-FOC库,提供完整的项目程序

u.jpg w.jpg v.jpg


可以正常转动,但是三相的波形怎么不一样呢,

点评

无刷电机三相驱动本来就是相差120度的 他要一样那还能转嘛,那不就电平一致等效没通电了  详情 回复 发表于 2025-11-18 12:41
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:748
  • 最近打卡:2026-07-23 12:57:53
已绑定手机
已实名认证

140

主题

3692

回帖

9529

积分

超级版主

积分
9529
发表于 2025-11-18 12:41:33 | 显示全部楼层
ct1*** 发表于 2025-11-18 10:59
可以正常转动,但是三相的波形怎么不一样呢,

无刷电机三相驱动本来就是相差120度的
他要一样那还能转嘛,那不就电平一致等效没通电了
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2026-06-29 14:19:58
已绑定手机

0

主题

11

回帖

212

积分

中级会员

积分
212
发表于 2025-11-18 15:37:26 | 显示全部楼层
王工 !无刷电机启动一瞬间会抖动,有时候会正常运行,有时候电机启动不成功。而且电机在启动一瞬间电流在0.5A左右,请问这个应该怎么解决呢?附件是我的电机照片。谢谢
_cgi-bin_mmwebwx-bin_webwxgetmsgimg__&MsgID=8793555595422032975&skey=@crypt_fb26.jpg
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2026-06-29 14:19:58
已绑定手机

0

主题

11

回帖

212

积分

中级会员

积分
212
发表于 2025-11-18 16:18:18 | 显示全部楼层
何*** 发表于 2025-11-18 15:37
王工 !无刷电机启动一瞬间会抖动,有时候会正常运行,有时候电机启动不成功。而且电机在启动一瞬间电流在0 ...


// 电机参数相关:开环强拖参数、退磁等待时间,参考参数
#define Ref_MIN_PWM 300UL           // 开始强拖PWM值
#define Ref_MAX_PWM 350UL           // 结束强拖PWM值
#define Ref_MAX_FREQ 25UL           // 单位:us,每次切换角度间隔时间起始
#define Ref_MIN_FREQ 3UL           // 单位:us,每次切换角度间隔时间结束(从150us到1us)
#define Ref_DTIME 10000UL           // 细分步进,整个开环需要细分成多少个片进行变化
#define Ref_MOTO_DE_TIME_uS 20 // 电机退磁时间(32位无符号),如果出现换向异常可以调整这个数据,避开退磁脉冲
#define Ref_OVER_TIME 2                   // 超时时间(单位:32.768ms),用于判断B_Timer3_OverFlow的值是否超过此阈值,超过后即认为堵转,水泵类可调大此阈值


通过修改这里 启动的概率会有提高,但是还是会有启动不成功的时候,而且启动电流比较大,在12V的情况下电流达到2A左右。

点评

可以使用最新的库函数 电流过大可以调低一点pwm的值 开环启动参数调整请看最新版程序里面的文档,有讲如何调整  详情 回复 发表于 2025-11-19 12:03
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:748
  • 最近打卡:2026-07-23 12:57:53
已绑定手机
已实名认证

140

主题

3692

回帖

9529

积分

超级版主

积分
9529
发表于 2025-11-19 12:03:59 | 显示全部楼层
何*** 发表于 2025-11-18 16:18
// 电机参数相关:开环强拖参数、退磁等待时间,参考参数
#define Ref_MIN_PWM 300UL           // 开始强拖PWM ...

可以使用最新的库函数
电流过大可以调低一点pwm的值
开环启动参数调整请看最新版程序里面的文档,有讲如何调整
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:132
  • 最近打卡:2026-04-25 10:41:00

11

主题

171

回帖

308

积分

中级会员

积分
308
发表于 2025-11-19 12:39:33 | 显示全部楼层
王工你好,我现在使用外部中断来检测外部PWM输入的频率和占空比了,但是引入外部中断貌似会干扰原本库的正常运行导致电机运行过程中产生顿挫,请问有什么改进方法吗?

点评

频率比较高的话,就是会反复进入中断 这个可以使用pwmb的输入捕获来实现  详情 回复 发表于 2025-11-19 15:20
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:748
  • 最近打卡:2026-07-23 12:57:53
已绑定手机
已实名认证

140

主题

3692

回帖

9529

积分

超级版主

积分
9529
发表于 2025-11-19 15:20:47 | 显示全部楼层
HUHU*** 发表于 2025-11-19 12:39
王工你好,我现在使用外部中断来检测外部PWM输入的频率和占空比了,但是引入外部中断貌似会干扰原本库的正 ...

频率比较高的话,就是会反复进入中断
这个可以使用pwmb的输入捕获来实现
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:132
  • 最近打卡:2026-04-25 10:41:00

11

主题

171

回帖

308

积分

中级会员

积分
308
发表于 2025-11-19 16:11:08 | 显示全部楼层
王*** 发表于 2025-11-19 15:20
频率比较高的话,就是会反复进入中断
这个可以使用pwmb的输入捕获来实现 ...

王工,我原先是想用PWMB的捕获输入来写的,但是没有成功。我的程序如下,麻烦帮我看看哪里设置有问题。请教一个问题,我现在想用外部PWM(1Khz)的占空比来控制电机转速。目前使用的是P00的输入捕获功能,同时测量外部PWM的频率和占空比,程序如下。我调试了好久都无法实现,请问是哪边设置有问题吗?

void PWM_Config(void)
{

        PWMB_ARRH = (u16)(1000 >> 8);                                                
        PWMB_ARRL = (u16)(1000);




        PWMB_PSCRH = (u16)(23>> 8);                              
        PWMB_PSCRL = (u16)(23);      


        PWMB_CCER1 = 0x00;                                                                                               
                                                                                                                                                                              
        PWMB_CCMR1 = 0x01;                                                                                                
        PWMB_CCER1 |= 0x01;                                                                                               
        PWMB_CCMR2 = 0x02;                                                                                               
        PWMB_CCER1 |= 0x30;                                                                                               
        PWMB_PS = 0x02;                                                                                                        
        PWMB_IER = 0x06;                                                                                                        
        P00 = 1;
        P01 = 1;



        PWMB_CR1 |= 0x01;                                                                                                
}



void PWMB_ISR() interrupt 27                                                                                                                                                                       
{
        if (PWMB_SR1 & 0X02)                                                                                                                                                      
        {      
                PWMB_SR1 &= ~0X02;                                                                                                                                                      
                cap1 =(PWMB_CCR1H << 8) + PWMB_CCR1L;                                                                              
        }
        if(PWMB_SR1 & 0x04)                                                                                                                                                               
        {
                PWMB_SR1 &= ~0x04;                                                                                                                                                      
                cap2 =(PWMB_CCR2H << 8) + PWMB_CCR2L;                                                                              
        }
      
        F_Inpwm_Done = 1;                                                                                                                                                                       
        Inpwm_Down_Count = 0;
}



程序中的cap1即周期计数,cap2即高电平计数,请问是这样吗?

点评

不是这样的,建议你先在一个开发板上尝试捕获的程序,成功以后再移植过去 计算占空比需要做减法和除法运算,这个捕获值只是捕获时刻的PWM计数器计数值 需要自己另外计算才能得到占空比,是无法直接得到占空比的 这部  详情 回复 发表于 2025-11-19 17:48
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-7-23 16:24 , Processed in 0.081585 second(s), 94 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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