首先介绍一下驱动部分,使用的是IR2233+6个SiC-NMOS,是个成熟电路模块,很多用户都验证过的,不作为这个问题讨论的重点电机使用的是24V/250W三相四极无刷直流电机,使用卖电机的公司自己做的驱动控制板可以各种调速正转反转
现在我希望自己用C8051F040开发一个控制程序,不需要那么多功能,最初是想实验H-PWM_L-ON控制
结果发现PWM实现起来麻烦,自己水平有限,于是想着先试试H_ON--L_ON控制
思路是查表,跟据HALL的六个状态,来对应六种输出,把输出接到驱动模块去驱动电机
主要程序如下
void main (void)
{
char SFRPAGE_SAVE = SFRPAGE;
SFRPAGE = CONFIG_PAGE;
WDTCN = 0xde; // Disable watchdog timer
WDTCN = 0xad;
Init_Device();
while (1)
{
switch(P7)
{
case 1:
P2 = 0x1E;
break;
case 3:
P2 = 0x1B;
break;
case 2:
P2 = 0x39;
break;
case 6:
P2 = 0x2D;
break;
case 4:
P2 = 0x27;
break;
case 5:
P2 = 0x36;
break;
default:
P2 = 0x00;
break;
}
} // end of while(1)
} // end of main()
但是碰到了一个问题
我主观的想法认为是:
HALL信号输入给单片机,单片机查表输出对应的六个信号,电机开始转,然后电机越转越快,HALL信号频率增加,直到达到额定最大转速,相当于PWM控制的100%占空比的情况
然后实际情况是:
开电后,电机有可能转,也有可能不转,不转的时候手去帮他动一下他就转了,这并不是主要问题
主要问题是
1.电机转得非常慢,完全没有越来越快达到额定转速的表现
2.电源电流非常大,使用电机厂商提供的控制板,3000转空载时电流只有700mA左右,而我自制的控制下,电源直接限流保护了(我设的1.5A),电压被拉低到2V多点......
请问程序上有什么问题?
感觉能量全消耗到按电机线圈的等效电阻上了,像是接的电阻负载,完全没有产生动力啊?这是为什么呢
|