MATLAB/Simulink 生成BLDC电机6步换相代码

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

BLDC六步换向法控制原理资料参考:
https://zhuanlan.zhihu.com/p/609517326

提示:以下是本篇文章正文内容,下面案例可供参考

一、模型介绍

模型介绍
因为电路及输出信号由主板及电机输出,所以不包含在代码中。只需要生成处理Hall信号部分的代码
hall部分

仿真结果
Hall_B /Hall_C 和电角度对比

二、代码生成

在这里插入图片描述

三、代码移植

一、按键控制正反转

tatic void key_init(void){

 	GPIO_InitTypeDef GPIO_InitStructure;
 	EXTI_InitTypeDef EXTI_InitStructure;
 	NVIC_InitTypeDef NVIC_InitStructure;
    
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE); 
    

	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_6;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  
    GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
 	GPIO_Init(GPIOE, &GPIO_InitStructure); 
    

  	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource6);

  	EXTI_InitStructure.EXTI_Line=EXTI_Line6;	
  	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	
  	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  	EXTI_Init(&EXTI_InitStructure);	 	
    
	NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;			
  	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;	//抢占优先级2 
  	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;					//子优先级0 
  	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//使能外部中断通道
  	NVIC_Init(&NVIC_InitStructure);  	  //根据N
    
}


void EXTI9_5_IRQHandler(void){
    
    if(EXTI_GetITStatus(EXTI_Line6)){//PE6
       
      if(Control_U.Direction){
          
        Control_U.Direction=0;
          
      }else{
          
       Control_U.Direction=1;
      }
    
      EXTI_ClearITPendingBit(EXTI_Line6); 

    }     
}

二、模型运行

void run_init(void){

    Control_initialize();//初始化模型

}

//以10K的频率运行。可优化项:上管以PWM波形开启,同时使用CC4作为ADC的触发,可以同时采集电压等信息
void TIM1_UP_IRQHandler(void){
    
      Control_U.Halleffectsignalh_a=Hall_U_get;
      Control_U.Halleffectsignalh_b=Hall_V_get;
      Control_U.Halleffectsignalh_c=Hall_W_get;
    
      Control_step();//运行模型
    if(Array_comparison()){//判断读取当前的霍尔状态是否是上一个状态
         PWM_AH_L; PWM_BH_L;PWM_CH_L;
         PWM_AL_L; PWM_BL_L;PWM_CL_L;
          
        if(Control_Y.Gates[0]){
            PWM_AH_H;
        }
        if(Control_Y.Gates[1]){
            PWM_AL_H;
        }      
        if(Control_Y.Gates[2]){
            PWM_BH_H;
        }
        if(Control_Y.Gates[3]){
            PWM_BL_H;
        }
        if(Control_Y.Gates[4]){
            PWM_CH_H;
        }
        if(Control_Y.Gates[5]){
            PWM_CL_H;
        }
          Bit_cop();//拷贝当前的霍尔状态,下一次再用来对比
      } 
    
     TIM_ClearITPendingBit(TIM1, TIM_IT_Update);    
}

四、验证代码

在这里插入图片描述
用手转动电机,测试信号。没有发现上下管同时开启的情况(手速不稳定,波形比较难看)。

五、测试结果

转动图片
在这里插入图片描述
电流
在这里插入图片描述
下管波形
在这里插入图片描述
上管波形
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值