[技术讨论] CW32L011直流无刷电机驱动无霍尔测试

[复制链接]
934|0
地瓜patch 发表于 2025-9-23 18:24 | 显示全部楼层 |阅读模式
, , , pi, AC
本帖最后由 地瓜patch 于 2025-9-27 12:21 编辑


#申请原创#
@21小跑堂

有幸拿到了武汉芯源的CW32L011直流无刷电机驱动开发板。
产品参数:
主控MCU:CW32L011K8T6 LQFP32(7*7)
PCBA:7.4 * 11.6 cm 黑色沉金工艺
驱动能力:12~72V 800W MAX; 需要与电容\场效应管参数配合;大功率使用建议安装散热器;有配套铝合金外壳。
外接栅极驱动器FD6288驱动直流无刷电机。支持有感/无感方波/FOC驱动,可驱动400W以内的任何一款低压三相无刷直流电机。





CW32L011就最小系统,可以实现换向,调速,开关使能等控制


栅极驱动器外围电路


驱动FET及电压电流采样电路



官方提供的测试例程有两个,分别是有霍尔传感器和无霍尔传感器的两个版本。手头上的电机是无传感器的3205。

拿到板卡的第一时间,就是写入程序,让电机转起来。
就是这个转起来的过程不是很顺利,开始想用StlinkV2,下载程序。但是一直失败,能够识别下载器,但是不能识别目标元件。
考虑到StlinkV2是优化过的,又用ST官方Nucleo开发板板载下载器测试,同样不能识别目标元件。

咨询厂家技术,该芯片推荐DAPlink下载器。又买了一个DAP下载器。到货后,连接目标板,出现同样的问题。

几经周折还是不能测试。各种测量都结束了,只能是主控芯片的问题了。
下单买了几片。
到货,吹掉,焊接,齐活




用stlink连接测试,同样找不到目标芯片。
用DAPlink连接测试,能识别芯片并下载程序。下载后,接入电机,通电后电机抖动三五下就停止了。
将CW32L011和FD6288全部点焊后,再次通电,电机终于正常转动了。

这个项目的图纸和代码,厂家已经开源。
图纸都已经看明白,代码看了个大概,还有几处细节没明白。

无刷电机的极对数可以在程序中修改对应的宏定义#define   MPolePairs  7

void MotorStartCheck(void)
{        
        unsigned int dd=0;
        
        if(MOTORSTATE==STATEERROR)return;
               
        if(SetSpeed>0&&(GPIO_ReadPin(EN_GPIO_PORT,EN_GPIO_PIN)==GPIO_Pin_SET))
        {               
               
                   for(dd=0;dd<100;dd++);
                         if(GPIO_ReadPin(EN_GPIO_PORT,EN_GPIO_PIN)==GPIO_Pin_SET)
                                                           SampleSpeed();
                         if(SetSpeed>0)
                                {
                                
                                   if(GPIO_ReadPin(DR_GPIO_PORT,DR_GPIO_PIN)==GPIO_Pin_SET)//·½Ïò¶ÁÈ¡
                                                {
                                                                 for(dd=0;dd<500;dd++);
                                                                 if(GPIO_ReadPin(DR_GPIO_PORT,DR_GPIO_PIN)==GPIO_Pin_SET)
                                                                 { Dir=0;  }
                                                }
                                                else if(GPIO_ReadPin(DR_GPIO_PORT,DR_GPIO_PIN)==GPIO_Pin_RESET)
                                                {
                                                                 for(dd=0;dd<500;dd++);
                                                                 if(GPIO_ReadPin(DR_GPIO_PORT,DR_GPIO_PIN)==GPIO_Pin_RESET)
                                                                 { Dir=1;}
                                                }
           
               MOTORSTATE=STATESTARTDELAY;TargS1=0;TimeCountSTDelay=0;            
                                }
}
}



void MotorStartOPEN(void)
{               
        if(MOTORSTATE==STATEERROR)return;
                  
          if(TImeUP<100)TImeUP=100;//100ms×îµÍ
                SpeedD=TImeUP/100; //Ôö¼Ó1%Õ¼¿Õ±ÈÐèÒªµÄʱ¼ä
          HALL_MOTOR_START();                        
                MOTORSTATE=STATERUNOPEN;  
}


void MotorRunOPEN(void)
{        
        if(MOTORSTATE==STATEERROR)return;
        if(SetSpeed==0)
        {         
                MOTORSTATE=STATESTOP;        
        }        
        
        if(TimeCountPID>=SpeedD)
                        {
                          TimeCountPID=0;
                                
                                if(TargS1<SetSpeed)
                                 {
                                         TargS1++;
                                         if(TargS1>=SetSpeed)TargS1=SetSpeed;
                                         OutPwmValue=TargS1*OnepercentPWM;         
                                         UPPWM();
                           }
                                 else if(TargS1>SetSpeed)
                                 {
                                         TargS1=SetSpeed;
                                         OutPwmValue=TargS1*OnepercentPWM;         
                                         UPPWM();
                           }
                        }
}        


void MotorStop(void)
{
        if(MOTORSTATE==STATEERROR)return;
        Motor_Start_F=0;
        MOTOR_STOP0();
  
        if(SampleData[3]<180)  //·´µç¶¯ÊÆ´ïµ½Ðü¿ÕÖµ
        {
                                        RealS1=0;TimeCountTemp=0;Sta=0;
                                }
               
                if(RealS1==0||RealS==0)
      {                                
                                  TimeCountTemp=0;
                                  while(TimeCountTemp<500);
                                        Sta=0;
                                        MOTORSTATE=STATESTARTCHECK;        
                        }                                 
}        

void MotorError(void)
{
        MOTOR_STOP0();
        Motor_Start_F=0;
        MOTORSTATE=STATEERROROVER;
}

void MotorErrorOver(void)
{
        unsigned char times=0;
        
        LEDOFF;TimeCountTemp=0;
        while(TimeCountTemp<200);
        while(1) //ָʾµÆÉÁ˸
        {                 
                if(times<ErrorCode)
                {
                        if(TimeCountTemp<200){LEDON;}
                  else if(TimeCountTemp<=400)//LED flashing
                        {
                                LEDOFF;
                        }
                  else if(TimeCountTemp>400)
                  {
                          if(times<ErrorCode)
                          {
                                 times++;TimeCountTemp=0;
                                 if(times>=ErrorCode);
                                 else LEDOFF;
                          }
             }
          }
                else if(TimeCountTemp<500);
                else {times=0;TimeCountTemp=0;}               
               
                //if(ErrorCode==10)
                { //ÉϵçµçλÆ÷û¹éÁãʱ£¬ÐèÒª¼ì²âµçλÆ÷Êý¾Ý£¬¹éÁãÔòÇå¹ÊÕÏ£¬È»ºó¿ÉÒÔÆô¶¯µç»ú
                        SampleSpeed();
                        if(SetSpeed==0)
                        {
                                ErrorCode=0;LEDON;MOTORSTATE=STATWAITSTART;  break;
                        }
                }
        }
}


测试视频如下


测试中感觉不方便的主要有以下两点
1.在Keil中StLink下载器不能识别CW32L011。
2.接入12V时,DAPlink不能仿真程序。断掉12V,用DAPlink供电,可以仿真。







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

本版积分规则

个人签名:出一块TI-PLABS-AMP-EVM

1926

主题

15206

帖子

31

粉丝
快速回复 在线客服 返回列表 返回顶部