一、内容
1.无传感无刷直流马达控制原理
2.无传感无刷直流马达开发板部份硬件电路剖析
3.无传感无刷直流马达部份代码剖析与运行结果
二、知识点1.无传感无刷直流马达控制原理1.1无传感无刷直流马达相比于有传感的优势:
①硬件上,降低了马达本身的质量和规格,不易安装与维护,且霍尔传感本身存在着一定的磁不敏感区;
②应用上,霍尔传感安装的精度和灵敏度会影响马达的运行性能,且传感不能挺好的适应恶劣的工作环境。
1.2反电动势法——检测定子位置信息进行换相
直流电动机最初起动时,电枢定子构建一个磁场,集电极电压形成另一个磁场,两磁场互相作用,起动电动机运行。定子定子在磁场中旋转,因而形成发电机效应。实际上旋转定子形成一个感应电动势,与定子电流极性相反,这些自感应电动势称为反电动势。同理,在无刷直流马达中,受定子定子形成的合成磁场的作用,定子顺着一定的方向连续转动。马达绕组上放有电刷定子。因而,定子一旦旋转,都会在空间产生导体切割磁力线的情况。依据电磁感应定理可知,导体切割磁力线会在导体中形成感应电势。所以,在定子旋转的时侯才会在转子定子中形成感应电势,即反电动势。
同有传感无刷直流马达一样,无传感无刷直流马达也采用六步换相控制,每一个换相周期,将有一相定子处于不导通状态。因而通过测量第单相反电动势讯号,可测量到定子微极在该定子经过的时刻。反电动势检查原理图右图所示反电动势,在AB定子通电时应检查C相反电动势电流。
1.3反电动势法过零点检查
对于120°有传感无刷直流马达,其反电势和传感讯号右图所示,须要注意的点如下:
①有传感和无传感无刷直流马达的控制都采用六步换相控制;
②使用无传感无刷直流马达控制,当测量到过零点时,须要提早30个角度再换相。
1.4无传感无刷直流马达三段式启动
无传感无刷直流马达须要采用三段式启动的缘由:
①硬件上,对于小功率马达,直接上电启动时电压是特别大的,容易造成硬件电路漏电或则降低电子元件的寿命;电压过大容易造成过热去磁问题,容易造成马达启动失败;启动过快就会造成机械负载的冲击等。
②应用上,电枢定子的反电动势同马达的怠速成反比,也就是说,当马达未上电时,未能按照反电动势检查定子的状态,也就难以达到马达的控制疗效。
三段式启动包括:定子预定位、加速和运动状态转换三步反电动势,三段式启动的用处是,可以是马达达到可控疗效,提升马达控制的稳定性,同时也是对马达本身的一种合理应用,降低其使用周期。下边是对三段式启动的具体剖析:
1)定子预定位
刚开始马达在静止情况下,并且开始不晓得定子的情况下,可以进行通过对单相马达的其中两相通电,等待一段时间,之后再对马达相邻状态的两相通电,此时定子会转动,但是会转动到当前两相合成磁场的所在的位置。注意预定位中pwm以及的通电的等待时间,须要依照实际情况选定。
2)加速运行阶段
pwm的开始信噪比,应当从克服外界负载的最小扭力开始,逐步提升,pwm信噪比的减小作用似乎等效于加在通电两相的电流减小,逐步提升马达换相的频度,此时马达才会加速上去。常见加速有三种形式,恒频升压法恒压升频法,升频升压法。
①恒频升压法:马达换相频度不变,马达供电的电流逐步提升,借此达到加速疗效。
②恒压升频法:马达供电的电流不变,马达换相时间逐步提升,借此达到加速疗效。
③升压升频法:马达供电的电流与马达换相频度都渐渐进行提升,达到加速疗效。
升压升频法实现上去相比上面两种方式实现较为复杂。须要协调好电流与频度的递增,换相信号的频度须要依照实际马达的马达极对数以及马达相内阻等其他原生参数确定。换相频度太低,马达加速不上去;换相频度太高,马达运行上去容易失步,造成加速失败。
3)运动状态转换——开环切入闭环
当马达加速到一定速率,最好直至当前速率下马达反电动势要呈矩形波,可以用示波器观察。当反电动势测量通过ADC连续稳定采集到3个过零点的情况,说明当前马达的运行速率达到无位置传感的运行要求。此时可以切入到闭环状态。当注意的一个细节是,相同pwm信噪比马达在开环时对应的速率与步入闭环时对应的速率相差越小,切换成功的概率越大,并且切换的也越平滑。
值得注意的是,马达从开环切入闭环的过程是马达启动最为困难的一个阶段,难度系数比较高。并且这个环节是马达启动最重要的一个阶段,它决定着马达是否能步入旁边的闭环操作。
1.5PID控制原理
将误差的比列()、积分()和微分()通过线性组合构成控制量,用这一控制量对被控对象进行控制,这样的控制器称PID控制器。在模拟控制系统中,控制器常用的控制规律是PID控制。右图所示是一个小功率直流马达的调速原理图。给定速率与实际怠速进行比较,其差值经过PID控制器调整后输出电流控制讯号,经过功率放大后,驱动直流电动机改变其怠速。
常规的模拟PID控制系统原理框图右图所示。该系统由模拟PID控制器和被控对象组成。图中,r(t)是给定值,y(t)是系统的实际输出值,给定值与实际输出值构成控制误差e(t),有:e(t)=r(t)-y(t)。
e(t)作为PID控制的输入,u(t)作为PID控制器的输出和被控对象的输入。所以模拟PID控制器的控制规律为:
u(t)=Kp[e(t)+1/Ti∫0te(t)dt+Td*de(t)/dt]
其中:Kp为控制器的比列系数、Ti控制器的积分时间,俗称积分系数、Td控制器的微分时间,俗称微分系数。
PID控制系统物理表达式如下:
①比例部份的物理式表示是:Kp*e(t)
②积分部份的物理式表示是:Kp/Ti∫0te(t)dt
③微分部份的物理式表示是:(t)/dt
2.无传感无刷直流马达开发板部份硬件电路剖析(无霍尔传感)2.1电源及变压部份
首先,借助变压器使220V交流电转化为24V直流电,通入马达开发板,按照马达开发板上各个模块的电流需求(如芯片、按键模块须要3.3V供电),通过系列芯片,以及芯片,依次实现直流电源24V到15V、15V到12V、12V到5V、5V到3.3V的转换,达到供电疗效。其中,各个电流转换电路原理图右图所示。
2.2主控芯片
马达开发板所使用的主控芯片为,其引脚为64个,flash为128kb。主控芯片原理图右图所示,图中包括晶振、复位键、程序下载口等部件。另外,主控芯片的部份引脚与相对应的模块相联接,控制着马达的运动、运动状态监测等功能。
2.3反电动势法马达控制电路
同有传感无刷直流马达相比,无传感无刷直流马达的控制电路只多了一个状态数字取样模块,即右图中红框部份。状态数字取样模块是反电动势法马达控制的核心,它的主要作用在于测量定子的位置信息,并通过PB11/口返回给主控芯片,使其对其运动状态进行控制,因而取代传感的工作疗效。
3.无传感无刷直流马达部份代码剖析与运行结果3.1主函数代码及注释
首先对中断、时钟、IO口、A/D端口、按键及定时器等模块进行初始化,并给相关参数赋终值,在如下主程序中,实现的功能是通过判定key1的状态,控制马达转动,判定key2的状态,控制马达停止,其对应的主控芯片端口为PC5、PC15,另外,通过调用()函数,控制马达转动的加减速。马达转动实物图右图所示。
int main (void )
{
//ClockDir=0;
ClockDir=1;
SystemInit();
NVIC_Configuration();//中断设置
RCC_GetClocksFreq(&RCC_Clocks);
GPIO_Configuration();//GPIO 初始化
ADC_Configuration();//模拟端口初始化
TIM_Configuration2();//Tim1定时器初始化
BLDC_Init();
KEY_Init();
ShowMenu_init();
//My_PWM=1250;
My_PWM=250;
BEMF_Cnt = 0;
BEMF_ADC_Cnt = 0;
MotorA.Step = 0;
ucMotorStep=MotorA.Step;
ucMotorAD=0;
//BLDC_SwitchStep();//采用6步法驱动BLDC
MENOFF();
MENON();//芯片端使能
LcdReset();
fgDispMode=1;
while(1)
{
if(KEY_Read(KEY1))
{
//CoTickDelay(5);
Delay1Us();
if(KEY_Read(KEY1))
{
//BLDC_Init();
My_PWM=250;
TIM_Configuration1();
TIM_Configuration2();//Tim1定时器初始化
}
}
if(KEY_Read(KEY2))
{
//CoTickDelay(5);
Delay1Us();
if(KEY_Read(KEY2))
{
BLDC_Stop();
if(ucT10S>=1) //每秒的事件处理
{
My_PWM=250;
if(ClockDir==1)ClockDir=0;
else ClockDir=1;
ucT10S=0;
}
}
}
Timeproc();
}
}
3.2反电动势法相关代码
unsigned long
BEMF(void)
{
// unsigned short VoltBEMF = 0;
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
{
//ucMotorAD=0;
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;
}
3.3马达加减速相关代码
void Timeproc()
{
if(fgT10Ms ==0)
{
return;
}
//SendFrame();
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;//计算速度
//aim_speed=0;
ShowMenuMain();//菜单显示
//ShowMenu_init();
ucT10S++;
ucT1S=0;
}
if(ucT10S>=10) //每秒的事件处理
{
//if(flag11== 1)flag12 = 1;
//ShowMenuMain();//菜单显示
//ShowMenu_init();
ucT10S=0;
}
}
三、总结
这半个月以来,主要是在学习了有传感无刷直流马达相关内容的基础上,对无传感无刷直流马达相关内容进行一个学习。其中,学习的成果主要是对无传感无刷直流马达控制原理有了较为深刻认识,而且比较了有、无传感在马达控制上的不同,加深了硬件原理图部份的理解,并且在程序方面,还没有完全吃透,须要进一步的学习。