无刷直流电机(无传感器)学习 (2)

一.内容
此次学习主要完成了无霍尔传感器的电机的工作原理及对应程序的学习。
二.知识点
1.无感无刷直流电机
经过前面的学习,了解到了有传感器的工作原理。简单的来说,就是通过通断更改绕组的磁场,使得永磁转子会随着磁场的变换为变换,但是要想让电机随着一个方向变换的话,那么三个绕组的磁场变换也要按照一定的规律来发生变化,这里就需要提前知道转子的方向,才能够进一步有目的的去改变绕组的磁场,使其来引导转子转动,而且由于惯性,为了追求效益,往往我们需要提前更改磁场方向。所以说,转子的位置的获取成为了电机转动必不可少的处理部分,而霍尔传感器就可以很好的实现这个功能,也就是我们之前所学习的有感无刷电机。
但是霍尔传感器的存在,也导致了无刷直流电机的重量和尺寸的增加,同时也使得无刷直流电机更加依赖于霍尔传感器,而传感器本身的不易安装和维护,使得无刷电机无法在一次恶劣的环境中使用,所以导致了无感BLDC的出现。
2.基本原理
在对有霍尔传感器电机的研究中发现,反电动势的检测总在第三相未通电绕组,检测过零点时,再延时30°进行换相。那么在无感无刷直流电机的检测当中,可以使用这条规律,那么无感无刷直流电机的位置检测可以转换成反电动势过零点的检测。
3. 原理图分析与学习
3.1电机控制

首先看电机控制模块,分别对比有传感器和无传感器的模块,如图1,图2所示。
无刷直流电机(无传感器)学习 (2)_第1张图片无刷直流电机(无传感器)学习 (2)_第2张图片
他们的输入信号都是由芯片输出的PWM通过IR2136三相桥驱动集成电路而输出的信号,整体结构略有不同,但实现的功能相差无几。对比我们可以发现无感无刷直流电机比有感无刷直流电机的电机控制模块多了状态数字采样模块,这个模块也是全数字反电动势法的核心所在,这个模块的输出信号接到了芯片的ADC通道,进行模数转换。
3.2电源模块电源模块
用对应的芯片,将24V电压转换为5V,15V,再由5V转换成3.3V,以供在其他模块使用,如图3所示。
无刷直流电机(无传感器)学习 (2)_第3张图片
3.3三相集成驱动电路
三相集成驱动模块如图4所示。
无刷直流电机(无传感器)学习 (2)_第4张图片
IR2136芯片可以根据输入的PWM信号来控制输出电流的通断情况,输出的电流就是三相电机的输入电流,也就是通过IR2136来实现对电机三个绕组的电流通断的控制,引导电机转动。
3.4 按键模块
按键模块如图5所示。
无刷直流电机(无传感器)学习 (2)_第5张图片
按键是轻触式,当按键按下时,电路导通,便有电流通过,输出的电流信号导向芯片的ADC模块,芯片对于收到的信号再进行相应的操作。
4. 程序分析与学习
4.1 按键模块按键部分的程序如下所示:

while(1)    {
	          if(KEY_Read(KEY1))	
				 {
				 Delay1Us();		
				 if(KEY_Read(KEY1))		
				 	{		 
					 My_PWM=250;					 
				 	TIM_Configuration1();		 
				 	TIM_Configuration2();//Tim1定时器初始化 		
					 }
				 }	
				 if(KEY_Read(KEY2))	
				 	{			
				 	Delay1Us();
				 	if(KEY_Read(KEY2))		
				 		{		
				 	   	BLDC_Stop();					
				 	  	  if(ucT10S>=1) //每秒的事件处理	 
				 	  	  	 {						      																						       
				 	  	  	 My_PWM=250;
				 	    		if(ClockDir==1)ClockDir=0;		
				 	    		else ClockDir=1;	    
				 	    		ucT10S=0;	
				 	    		}	
				 	    	}	
				 	    }			
				 	   Timeproc();		
		}	

从程序中我们可以发现,程序中起到作用的只有两个按键,作用分别是启动电机和停止电机。然后就是电机的加速减速函数Timeproc()。这里面控制电机速度并不是通过按键来实现的,而是通过几个参数实现的,但是现在还没有研究透彻,对于这几个参数还需要进一步的学习和认识。Timeproc()函数如下所示:

void Timeproc()
	{	
		if (fgT10Ms ==0)	
			 {		 
			 return;	
			  }	 
		  fgT10Ms = 0;	
		   ucT100ms++;	 
		   ucT1S++;	
		    if(ucT100ms>=10)	
		    	 {		
		    	 if((My_PWM<1000)&&(flag == 0))		
		    	 	{		
		    	 	My_PWM=My_PWM+10;		
		    	 	}		
		    	 	if(My_PWM>=1000)
		    	 	 flag = 1;		
		    	 	 if(My_PWM>=200)		
		    	 	 {		
		    	 	 	if(flag == 1)	
		    	 	 	My_PWM=My_PWM-10;		
		    	 	 	}		
		    	 	 	else		
		    	 	 	{						
		    	 	 	flag = 0;		
		    	 	 	}		
		    	 	 	MENON();		
		    	 	 	ucT100ms=0;	
		    	 	 	 }	  
		    	 	 	 if(ucT1S>=100) //每秒的事件处理	
		    	 	 	  {	  	
		    	 	 	  speed_1=My_PWM;//计算速度	  	
		    	 	 	  ShowMenuMain();//菜单显示		
		    	 	 	  ucT10S++;		
		    	 	 	  ucT1S=0;	  
		    	 	 	  }		
		    	 	 	   if(ucT10S>=10) //每秒的事件处理	 
		    	 	 	    {	   
		    	 	 	     ucT10S=0;		
		    	 	 	     }
		    	}

4.2 反电动势检测
由于没有了霍尔传感器,这里程序对转子位置的判断需要通过反电动势过零点来测量运算来实现。主要代码如下图所示。

unsigned long BEMF(void)
	{    
	unsigned long dir = 0;	
	if (ucMotorStep!=MotorA.Step)	
		{		
		ucMotorStep=MotorA.Step;		
		ucMotorAD=0;	
		}    
	switch (MotorA.Step)    
	{   
	 case 0:   VoltBEMF[ucMotorAD] = ADCConvertedValue_2[2];  dir = 1;  break;    
	 case 1:  VoltBEMF[ucMotorAD] = ADCConvertedValue_2[1]; break;  
	 case 2:  VoltBEMF[ucMotorAD] = ADCConvertedValue_2[0]; dir = 1;break;   
	 case 3: VoltBEMF[ucMotorAD] = ADCConvertedValue_2[2];  break;    
	 case 4: VoltBEMF[ucMotorAD] = ADCConvertedValue_2[1]; dir = 1;  break;   
	 case 5: VoltBEMF[ucMotorAD] = ADCConvertedValue_2[0]; break;   
	 default: break;  
	 }	
	 if(ucMotorAD<2) 	
	 {		
	 ucMotorAD++;	
	 }	
	 else	
	 {		
	 if (((dir == 1)&&(ClockDir==0))||((dir == 0)&&(ClockDir==1))) //下降            //PWM-OFF检测BEMF,过零点标志是BEMF电压为0    	
	 {				
	 if((VoltBEMF[0]>0)&&(VoltBEMF[1]==0))				
	 	{					
	 	usOZTimeS++;					
	 	return 1;				
	 	}		 	    	
	 }    	
	 else    	
	 {				
	 if ((VoltBEMF[0]==0)&&(VoltBEMF[1]>0))				
	 	{				
	 	usOZTimeS++;				
	 	return 1;			
	 	}       	
	 }		
	 VoltBEMF[0]=VoltBEMF[1];		
	 VoltBEMF[1]=VoltBEMF[2];	
	 }    
	 return 0;
}

这个程序中也用到了多个参数来实现整个程序的运行,但是目前掌握情况并不理想,还需要深入学习。
三、学习总结
这半个月对无感无刷直流电机的学习并没有实现一个整个过程的系统的学习,程序这块理解还存在着诸多的问题,理解上来并不是很清楚,需要进一步的讨论与研究。同时在程序的学习过程中也反映出了自己对原理的掌握也不是很透彻,只是大概了解了前因后果,整个过程的公式和硬件的原理都需要在深入的学习。

你可能感兴趣的:(电力电子-电机)