|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
#include<reg52.h>
void TurnMotor(unsigned long angle);
void main()
{
TurnMotor(360*25);
while(1);
}
void delay()
{
unsigned int i = 200;// 1s÷550=1.8ms,控制节拍刷新时间大于1.8ms , 延时2ms
while(i--);
}
void TurnMotor(unsigned long angle)
{
unsigned char temp;
unsigned char index = 0;
unsigned long beats = 0;
unsigned char code BeatCode[8]={
0x0E, 0x0C, 0x0D, 0x09, 0x0B, 0x03, 0x07, 0x06
};
beats = (angle*4076)/360;//计算需要的节拍数,4096拍对应一圈 ,八拍模式时,步进电机转过一圈是需要64个节拍, 1:64转子转64圈,64×64=4096个节拍输出轴才转过一圈,那么一个节拍转动的角度——步进角度就是360/4096
while(beats--)
{
temp = P1;//读取p1的值
temp = temp & 0XF0;
temp = temp | BeatCode[index];//即保证高四位值不变,又将第四位赋值
P1 = temp;
index++; //步进节拍递增
index = index & 0x07;//加到8归零
delay();
}
P1|=0xFF; //关闭电机所有的相
} |
|