梁工 发表于 2024-7-8 11:44:37

激流 发表于 2024-7-8 10:57
梁工,“BLDC, 三相无刷直流电机驱动-STC32G-无HALL 或 带HALL,例子打板测试已OK”下,恒电流环控制功能 ...

不控制电流,控制电流环那是FOC的驱动,我这个就是方波驱动。

激流 发表于 2024-7-8 13:35:45

梁工 发表于 2024-7-8 11:44
不控制电流,控制电流环那是FOC的驱动,我这个就是方波驱动。

谢谢

zzbinfo 发表于 2024-7-9 17:17:02

test_tmp 发表于 2024-4-3 13:55
梁工,MOS驱动还可以试试fd6288,我参考您的stc8h的方案,做了一款无刷电调,使用的就是fd6288,集成度更高 ...

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

梁工 发表于 2024-7-22 17:09:25

zzbinfo 发表于 2024-7-9 17:17
你好,你是用的官网的stc8h的代码吗?是否是完全没有更改。我哦也是用的官网的代码,用来驱动自己绕的低 ...

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

zzbinfo 发表于 2024-7-23 09:15:48

梁工 发表于 2024-7-22 17:09
你手上有别的三相电机吗?有的话,可以换一个电机试试。
自己改绕的高速电机,可以用手转动一下(当三相 ...

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

383015160 发表于 2024-7-23 13:47:20

test_tmp 发表于 2024-4-3 13:55
梁工,MOS驱动还可以试试fd6288,我参考您的stc8h的方案,做了一款无刷电调,使用的就是fd6288,集成度更高 ...

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

潘豆豆 发表于 2024-7-23 14:22:33

支持国产!

梁工 发表于 2024-7-23 15:13:29

383015160 发表于 2024-7-23 13:47
大神用FD6288Q 做预驱软件需要改吗

只要逻辑相位没改变,换什么驱动芯片都不用改程序。

fisholive 发表于 2024-7-23 17:02:14

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

PhaseTimeTmp = 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 = 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 = PhaseTime;        //保存一次换相时间
                if(++TimeIndex >= 8)        TimeIndex = 0;        //累加8次
                  PhaseTime=0;
                for(i=0; i<8; i++)        PhaseTime += PhaseTimeTmp;        //求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;





383015160 发表于 2024-8-2 19:22:08

梁工 发表于 2024-7-23 15:13
只要逻辑相位没改变,换什么驱动芯片都不用改程序。

好的 谢谢大神
页: 1 2 3 4 5 6 [7] 8 9 10 11 12 13 14 15 16
查看完整版本: BLDC, 三相无刷直流电机驱动-STC32G-无HALL 或 带HALL,例子打板测试已OK