本研究主要完成了无霍尔传感器电机的工作原理和相应程序。 通过之前的研究,我了解了传感器的工作原理。简单地说,是通过切断改变绕组磁场,使永磁转子随磁场变化,但让电机随方向变化,所以三个绕组磁场变化也根据一定的规律,这里需要提前了解转子的方向,进一步改变绕组磁场,引导转子旋转,由于惯性,为了追求效益,我们往往需要提前改变磁场方向。因此,转子位置的获取已成为电机旋转的重要处理部分,霍尔传感器可以很好地实现这一功能,即我们以前学到的感觉无刷电机。 但霍尔传感器的存在也导致无刷直流电机重量和尺寸的增加,但也使无刷直流电机更依赖霍尔传感器,传感器本身不易安装和维护,使无刷电机不能在恶劣环境中使用,导致无刷电机BLDC的出现。 在对霍尔传感器电机的研究中发现,反电动势的检测总是在第三相未通电绕组中,检测到零点后延迟30点°换相。然后,这一规律可以用于无感无刷直流电机的检测,因此无感无刷直流电机的位置检测可以转换为反电势过零点的检测。 先看电机控制模块,比较有传感器和无传感器的模块,如图1、图2所示。 他们的输入信号由芯片输出PWM通过IR2136三相桥驱动集成电路输出的信号整体结构略有不同,但实现的功能几乎相同。相比之下,我们可以发现无刷直流电机比无刷直流电机的电机控制模块有更多的状态数字采样模块。该模块也是全数字反电势法的核心。该模块的输出信号接收芯片ADC模数转换通道。 3.2电源模块电源模块 24V电压转换为5V,15V,再由5V转换成3.3V,如图3所示,用于其他模块。
三相集成驱动模块如图4所示。
IR根据输入,可以输入2136芯片PWM信号来控制输出电流的通断情况,输出的电流就是三相电机的输入电流,也就是通过IR2136控制电机三个绕组的电流通断,引导电机旋转。 3.4 按键模块 按键模块如图5所示。
按钮是轻触式的。按键时,电路导通,电流通过,输出的电流信号导向芯片ADC模块、芯片对收到的信号进行相应操作。
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; } }
由于没有霍尔传感器,需要通过反电动势过零点来测量转子位置的判断。主要代码如下图所示。
过零标志是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]=Vo过零点标志是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;}
这个程序中也用到了多个参数来实现整个程序的运行,但是目前掌握情况并不理想,还需要深入学习。 这半个月对无感无刷直流电机的学习并没有实现一个整个过程的系统的学习,程序这块理解还存在着诸多的问题,理解上来并不是很清楚,需要进一步的讨论与研究。同时在程序的学习过程中也反映出了自己对原理的掌握也不是很透彻,只是大概了解了前因后果,整个过程的公式和硬件的原理都需要在深入的学习。