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

BLDC, 三相无刷直流电机驱动-STC32G-无HALL 或 带HALL,例子打板测试已OK

  [复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-7-8 11:44:37 | 显示全部楼层
激*** 发表于 2024-7-8 10:57
梁工,“BLDC, 三相无刷直流电机驱动-STC32G-无HALL 或 带HALL,例子打板测试已OK”下,恒电流环控制功能 ...

不控制电流,控制电流环那是FOC的驱动,我这个就是方波驱动。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:232
  • 最近打卡:2025-04-30 11:43:15

26

主题

67

回帖

1184

积分

金牌会员

积分
1184
发表于 2024-7-8 13:35:45 | 显示全部楼层
梁*** 发表于 2024-7-8 11:44
不控制电流,控制电流环那是FOC的驱动,我这个就是方波驱动。

谢谢
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2024-07-26 11:18:03

0

主题

8

回帖

68

积分

注册会员

积分
68
发表于 2024-7-9 17:17:02 | 显示全部楼层
test*** 发表于 2024-4-3 13:55
梁工,MOS驱动还可以试试fd6288,我参考您的stc8h的方案,做了一款无刷电调,使用的就是fd6288,集成度更高 ...

你好,你是用的官网的stc8h的代码吗?是否是完全没有更改。我哦也是用的官网的代码,用来驱动自己绕的低压的13万转的吹风机电机,驱动不了,异响。用的电路是改了fd6288q的。看到信息麻烦指点一二,谢谢。

点评

你手上有别的三相电机吗?有的话,可以换一个电机试试。 自己改绕的高速电机,可以用手转动一下(当三相发电机用,用另一个电机比如钻机带动更好)、示波器看一下输出的三相电动势是否均匀对称。  详情 回复 发表于 2024-7-22 17:09
回复 支持 反对

使用道具 举报 送花

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

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-7-22 17:09:25 | 显示全部楼层
zzbi*** 发表于 2024-7-9 17:17
你好,你是用的官网的stc8h的代码吗?是否是完全没有更改。我哦也是用的官网的代码,用来驱动自己绕的低 ...

你手上有别的三相电机吗?有的话,可以换一个电机试试。
自己改绕的高速电机,可以用手转动一下(当三相发电机用,用另一个电机比如钻机带动更好)、示波器看一下输出的三相电动势是否均匀对称。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2024-07-26 11:18:03

0

主题

8

回帖

68

积分

注册会员

积分
68
发表于 2024-7-23 09:15:48 | 显示全部楼层
梁*** 发表于 2024-7-22 17:09
你手上有别的三相电机吗?有的话,可以换一个电机试试。
自己改绕的高速电机,可以用手转动一下(当三相 ...

用来驱动其他航模电机启动正常,运转也正常。我找机会按你说的试试,看看,手转动电机输出的波形。不过我用商用的电调驱动这个自己绕的电机正常运转,启动也正常。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2024-09-02 12:13:36

0

主题

12

回帖

54

积分

等待验证会员

积分
54
发表于 2024-7-23 13:47:20 | 显示全部楼层
test*** 发表于 2024-4-3 13:55
梁工,MOS驱动还可以试试fd6288,我参考您的stc8h的方案,做了一款无刷电调,使用的就是fd6288,集成度更高 ...

大神  用FD6288Q 做预驱  软件需要改吗

点评

只要逻辑相位没改变,换什么驱动芯片都不用改程序。  详情 回复 发表于 2024-7-23 15:13
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:148
  • 最近打卡:2025-04-30 11:21:00

4

主题

129

回帖

241

积分

中级会员

积分
241
发表于 2024-7-23 14:22:33 | 显示全部楼层
支持国产!
回复

使用道具 举报 送花

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

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2024-7-23 15:13:29 | 显示全部楼层
38301*** 发表于 2024-7-23 13:47
大神  用FD6288Q 做预驱  软件需要改吗

只要逻辑相位没改变,换什么驱动芯片都不用改程序。
回复 支持 反对

使用道具 举报 送花

3

主题

27

回帖

201

积分

中级会员

积分
201
发表于 2024-7-23 17:02:14 | 显示全部楼层
梁工,
    我是用STC408AS写的无刷电机程序,最近有开发一个低速版本,客户在使用时候,发现有偶尔不能启动问题。
产品都已经灌胶了,我直接在比较器中断和定时器中断插入~LED看下波形。
   现在问题是启动后运行一段时间,波形是正常的。但是刚开始的波形有些奇怪。宽窄相差很大。
开始时候,我观察刚一个两个step大概是6ms,我设置开始PhaseTimeTmp[i]都是2000ms賦值。
下面这段程序,应该每次只赋值PhaseTimeTmp【】,应该对整体影响不大?为啥开始运行的时候宽窄差异这么大?
程序哪里写的不对?
***********************************

PhaseTimeTmp[TimeIndex] = PhaseTime;        //保存一次换相时间
                if(++TimeIndex >= 8)        TimeIndex = 0;        //累加8次
                  PhaseTime=0;

********************************************

        if(motor_start_flag==1)        //马达启动
      {
          run_time_period=0;//清零运行阶段的相位波形计数
          motor_start_flag=0;
           B_start=1;
        StartMotor();
                          for(i=0; i<8; i++)        PhaseTimeTmp[i] = 2000;
                motor_lockedtime=0;        TH0 = 0;        TL0 = 0;        //启动赋值一个换相为400ms,换相时间不能太长,会和启动程序后面波形叠加                            
                        low_speed_number=0;        PWM_Value_flag=0;//重置低速计数                       
                                 motor_RUN=1;         XiaoCiCnt = 0;                //初始进入时
                                CMPCR1 &= ~0x40;
                                Delay100us();
                                B_start=0;          // 清除中断标志位
                                if(Step%2==0)        CMPCR1 =0x9C;                //下降沿中断
                                else                        CMPCR1 =0xAC;                //上升沿中断
                               

       }

*****************************************

void CMP_INT(void) interrupt 21
{
                u8        i;
        CMPCR1 &= ~0x40;        // 需软件清除中断标志位
        Red_LED=~Red_LED;

if(XiaoCiCnt == 0)
    {

                TR0=0;        // Timer0停止运行
                if( motor_lockedtime==1 )        //切换时间间隔(Timer0)有溢出,中断间隔:32ms
                {
                        motor_lockedtime = 0;
                        PhaseTime =6000; //0.4漆包线PhaseTime=5000 ,0.3漆包线PhaseTim=6000
                }
                else
                {
                        PhaseTime = (((u16)TH0 << 8) + TL0) >> 1;        // Time0 12T的一个时钟为0.5us, 定时器时间换算单位为us,定时器时间/2  
                        if(PhaseTime >= 6000)PhaseTime=6000;// 一圈360度所用时间= 500us*6 (相数)*2 (2对极/四级转子)=6ms, rpm=1000ms/6ms*60(分钟)=10000,超过转速会保护   
                }
                       
                TH0 = 0;        TL0 = 0;
                TR0=1;        // Timer0运行                                                                                                  
                PhaseTimeTmp[TimeIndex] = PhaseTime;        //保存一次换相时间
                if(++TimeIndex >= 8)        TimeIndex = 0;        //累加8次
                  PhaseTime=0;
                for(i=0; i<8; i++)        PhaseTime += PhaseTimeTmp[i];        //求8次换相时间累加和
                PhaseTime = PhaseTime >> 4;                // >>4 = 值/16 ,求8次换相时间的平均值的一半, 即30度电角度
                PhaseTime_average = PhaseTime <<1; // 单次相位平均时间
            if(PhaseTime_average<=over_speed_limit )over_speed_number++; //限速详见over_speed_limit定值
                if( PhaseTime >= 150)        PhaseTime -= 50;        //修正由于滤波电容引起的滞后时间,50us的滤波电容滞后时间
                else
                        PhaseTime  = 150;
                AUXR &=~0x10;        //Timer2停止运行
                PhaseTime  = PhaseTime  << 1;        // 2个12T 时钟为计数1us
                PhaseTime = 0 - PhaseTime;
                T2H = (u8)(PhaseTime >> 8);                //装载30度角延时
                T2L = (u8)PhaseTime;
                AUXR |=0x10;        //Timer2开始运行,
                XiaoCiCnt = 1;                //1:需要消磁, 2:正在消磁, 0已经消磁
               
        }
  }                                                                                     


*********************************
void CMP_INT(void) interrupt 21
{
                u8        i;
        CMPCR1 &= ~0x40;        // 需软件清除中断标志位
        Red_LED=~Red_LED;





03 55T启动波形 .BMP
0.3 55T 正常运行波形.BMP
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:4
  • 最近打卡:2024-09-02 12:13:36

0

主题

12

回帖

54

积分

等待验证会员

积分
54
发表于 2024-8-2 19:22:08 | 显示全部楼层
梁*** 发表于 2024-7-23 15:13
只要逻辑相位没改变,换什么驱动芯片都不用改程序。

好的 谢谢大神
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-1 19:53 , Processed in 0.884417 second(s), 119 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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