#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
#define SMG P0
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;
void delay(u16 a)
{while(a--);}
u8 school_number[12]={0x5b,0x5b,0x06,0x06,0x6d,0x06,0x3f,0x66,0x3f,0x5b,0x3f,0x7f};//我的学号
void smg_choice()
{
u8 i=0;
for(i=0;i<15;i++)
{
switch(i)//选位
{
case 0: LSC=1;LSB=1;LSA=1;SMG = school_number[i];break;
case 1: LSC=1;LSB=1;LSA=0;SMG = school_number[i];break;
case 2: LSC=1;LSB=0;LSA=1;SMG = school_number[i];break;
case 3: LSC=1;LSB=0;LSA=0;SMG = school_number[i];break;
case 4: LSC=0;LSB=1;LSA=1;SMG = school_number[i];break;
case 5: LSC=0;LSB=1;LSA=0;SMG = school_number[i];break;
case 6: LSC=0;LSB=0;LSA=1;SMG = school_number[i];break;
case 7: LSC=0;LSB=0;LSA=0;SMG = school_number[i];delay(50000);break;//显示完前八位,停一会
case 8: LSC=1;LSB=1;LSA=1;SMG = school_number[i];break;
case 9: LSC=1;LSB=1;LSA=0;SMG = school_number[i];break;
case 10:LSC=1;LSB=0;LSA=1;SMG = school_number[i];break;
case 11:LSC=1;LSB=0;LSA=0;SMG = school_number[i];break;
case 12:LSC=0;LSB=1;LSA=1;SMG = 0xFF;break;
case 13:LSC=0;LSB=1;LSA=1;SMG = 0xFF;break;
case 14:LSC=0;LSB=1;LSA=1;SMG = 0xFF;break;
case 15:LSC=0;LSB=1;LSA=1;SMG = 0xFF;break;
}
delay(100);
SMG=0x00;
}
}
int main()
{
while(1)
{void smg_choice();}
}
对于无刷电机来说,电机的运转是靠电子开关控制换相,如果想要电机正常高效的运转,就必须要知道转子的位置之后才能正常的换相,问题来了,电机没有传感器也没有转起来,所以转子的位置就不得而知了,所以无感电机的启动就要自转启动,先让电机以一定速率自转,在电机自转的过程中,我们通过检测反电动势来得知转子的位置,从而得到正确的换相的相位。