OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1346|回复: 1

三相无刷直流电机启动问题

[复制链接]

2

主题

2

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2017-8-10
在线时间
5 小时
发表于 2018-11-7 16:58:16 | 显示全部楼层 |阅读模式
电机给PWM的占空比一般适中上电就会转,占空比较低的时候会初始卡死状态,占空比较高的时候需要手动拨一下才会转,请问什么情况,谢谢!


以下是PWM配置的代码

void Timer1_Init(u16 zkb)
{
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;
TIM_BDTRInitTypeDef TIM_BDTRInitStructure;

PWM_GPIO_Init();   
HALL_GPIO_Init();  
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

Pwm_period_num=(SystemCoreClock /3600) - 1;   

DC1    = (unsigned short int) (((unsigned long) zkb * (Pwm_period_num   - 1)) / 1000);   
  DC2    = (unsigned short int) (((unsigned long) zkb * (Pwm_period_num   - 1)) / 1000);
  DC3    = (unsigned short int) (((unsigned long) zkb * (Pwm_period_num   - 1)) / 1000);

//³õʼ»¯TIM1
TIM_TimeBaseStructure.TIM_Period = Pwm_period_num;
TIM_TimeBaseStructure.TIM_Prescaler =0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);


TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM1, &TIM_OCInitStructure);  


TIM_OC2Init(TIM1, &TIM_OCInitStructure);  

TIM_OC3Init(TIM1, &TIM_OCInitStructure);

TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  
TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);  
TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);  
TIM_Cmd(TIM1, ENABLE);



TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;         
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
TIM_OCInitStructure.TIM_Pulse = DC1 ;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState  =  TIM_OCIdleState_Set;  
  TIM_OCInitStructure.TIM_OCNIdleState =  TIM_OCNIdleState_Set;
  TIM_OC1Init(TIM1, &TIM_OCInitStructure);

  TIM_OCInitStructure.TIM_Pulse = DC2 ;   
  TIM_OC2Init(TIM1, &TIM_OCInitStructure);

  TIM_OCInitStructure.TIM_Pulse = DC3 ;  
  TIM_OC3Init(TIM1, &TIM_OCInitStructure);
   
   

TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
  TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
  TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;   
  TIM_BDTRInitStructure.TIM_DeadTime = 0x01;                 
  TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;        
  TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;
  TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Disable;
  TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);   
   
               
TIM_CCPreloadControl(TIM1, ENABLE);   
TIM_ITConfig(TIM1, TIM_IT_COM, ENABLE);
TIM_Cmd(TIM1, ENABLE);
  TIM_CtrlPWMOutputs(TIM1, ENABLE);  
}

以下是换相函数
     switch(HALL_Value)   //¸ù¾Ýת×ÓλÖ㬾ö¶¨CCERÊä³öÏàλºÍת×Ó×ÖÆ«ÒÆÁ¿
    {
     case 0x06: //     BA
            /*  Channel2 configuration */
            TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1);  //ͨµÀ2²úÉúPWM²¨ÐΠ T3¹Ü×Ó
            TIM_CCxCmd(TIM1, TIM_Channel_2,  TIM_CCx_Enable);      //¿ªÆôͨµÀ2   
            TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable);    //¹Ø±ÕͨµÀ2N
   
            /*  Channel1 configuration */
      TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);      //¹Ø±ÕͨµÀ1
      TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Enable);     //¿ªÆôͨµÀ1N   T4
      TIM_ForcedOC1Config(TIM1,TIM_ForcedAction_Active);     //»î¶¯
  
      /*  Channel3 configuration */   
      TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable);      //¹Ø±ÕͨµÀ3
      TIM_CCxNCmd(TIM1, TIM_Channel_3,TIM_CCxN_Enable);      //¿ªÆôͨµÀ3N  
      TIM_ForcedOC3Config(TIM1,TIM_ForcedAction_InActive);   //²»»î¶¯
        
        TIM_GenerateEvent(TIM1, TIM_EventSource_COM);
  


         break;
     case 0x04: //      CA
        /*  Channel3 configuration */
        TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1);  //ͨµÀ3²úÉúPWM²¨ÐΠ T5¹Ü×Ó
      TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Enable);
      TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable);
  
      /*  Channel1 configuration */
      TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);
      TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Enable);     //  T4
      TIM_ForcedOC1Config(TIM1,TIM_ForcedAction_Active);
      /*  Channel2 configuration */
      TIM_CCxCmd(TIM1, TIM_Channel_2,  TIM_CCx_Disable);
      TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Enable);      
      TIM_ForcedOC2Config(TIM1,TIM_ForcedAction_InActive);
   
          TIM_GenerateEvent(TIM1, TIM_EventSource_COM);
     

           break;      
      case 0x05: //     CB
   
       /*  Channel3 configuration */
     TIM_SelectOCxM(TIM1, TIM_Channel_3, TIM_OCMode_PWM1);   //ͨµÀ3²úÉúPWM²¨ÐΠ T5¹Ü×Ó
     TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Enable);
     TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Disable);
     /*  Channel2 configuration */
     TIM_CCxCmd(TIM1, TIM_Channel_2,  TIM_CCx_Disable);
     TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Enable);     //  T6
     TIM_ForcedOC2Config(TIM1,TIM_ForcedAction_Active);
  
     /*  Channel1 configuration */
     TIM_CCxCmd(TIM1, TIM_Channel_1,  TIM_CCx_Disable);
     TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Enable);
     TIM_ForcedOC1Config(TIM1,TIM_ForcedAction_InActive);  
          TIM_GenerateEvent(TIM1, TIM_EventSource_COM);
   

       break;
     case 0x01: //   AB
      
      /*  Channel1 configuration */
      TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1);   //ͨµÀ1²úÉúPWM²¨ÐΠ T1¹Ü×Ó
     TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Enable);
     TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Disable);

     /*  Channel2 configuration */
     TIM_CCxCmd(TIM1, TIM_Channel_2,  TIM_CCx_Disable);
     TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Enable);       //   T6
     TIM_ForcedOC2Config(TIM1,TIM_ForcedAction_Active);
  
     /*  Channel3 configuration */
     TIM_CCxCmd(TIM1, TIM_Channel_3,  TIM_CCx_Disable);
     TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Enable);
     TIM_ForcedOC3Config(TIM1,TIM_ForcedAction_InActive);  
          TIM_GenerateEvent(TIM1, TIM_EventSource_COM);

          break;
     case 0x03: //      AC
   
       TIM_SelectOCxM(TIM1, TIM_Channel_1, TIM_OCMode_PWM1);  //ͨµÀ1²úÉúPWM²¨ÐΠ T1¹Ü×Ó
      TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Enable);
      TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable);
      /*  Channel3 configuration */
      TIM_CCxCmd(TIM1, TIM_Channel_3,  TIM_CCx_Disable);
      TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Enable);      // T2
      TIM_ForcedOC3Config(TIM1,TIM_ForcedAction_Active);
      /*  Channel2 configuration */
      TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Disable);
      TIM_CCxNCmd(TIM1, TIM_Channel_2,TIM_CCxN_Enable);
      TIM_ForcedOC2Config(TIM1,TIM_ForcedAction_InActive);
   
        TIM_GenerateEvent(TIM1, TIM_EventSource_COM);
      

     
          break;
     case 0x02: //   BC
      
       /*  Channel2 configuration */
         TIM_SelectOCxM(TIM1, TIM_Channel_2, TIM_OCMode_PWM1 );   //ͨµÀ2²úÉúPWM²¨ÐΠ T3¹Ü×Ó
     TIM_CCxCmd(TIM1, TIM_Channel_2, TIM_CCx_Enable);
     TIM_CCxNCmd(TIM1, TIM_Channel_2, TIM_CCxN_Disable);
  
     /*  Channel3 configuration */
     TIM_CCxCmd(TIM1, TIM_Channel_3, TIM_CCx_Disable);
     TIM_CCxNCmd(TIM1, TIM_Channel_3, TIM_CCxN_Enable);         //  T2
     TIM_ForcedOC3Config(TIM1,TIM_ForcedAction_Active);
  
     /*  Channel1 configuration */   
     TIM_CCxCmd(TIM1, TIM_Channel_1,  TIM_CCx_Disable);
     TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Enable);
     TIM_ForcedOC1Config(TIM1,TIM_ForcedAction_InActive);
   
      TIM_GenerateEvent(TIM1, TIM_EventSource_COM);

         break;
     default:break;
    }  



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
191
金钱
191
注册时间
2018-9-18
在线时间
33 小时
发表于 2018-11-8 20:02:20 | 显示全部楼层
能配上原理图,就更容易分析你提出的问题。大家与你一起研究。三相无刷直流电机启动问题牵扯到硬件和软件,有没反馈,欠压过流是否保护
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 21:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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