先给你三相的,个不用驱动芯片弯差灶的步进电机程序。(驱动电路自己做)
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uint time
void timer1(void) interrupt 1 using 1{ //定时器0中断,定时1ms//
TH0=(65536-1000)/256
TL0=(65536-1000)%256
time++
}
void delay(uint n){ //一般延时
while(--n)
}
void delay(uint dtime){ //延时
TR0=1
while(time<=dtime)
time=0
TR0=0
}
void moto(bit cf,uchar n,uint dtime){ //电机驱动子程序,
uchar idata zhpai[4]={0x78,0xb8,0xd8,0xe8}
uchar idata fpai[4]={0xe8,0xd8,0xb8,0x78}
uchar i,l=0
if(cf==0) //正转,A-B-C-A
for(i=0i<ni++){
P1=zhpai[l]//P1.7~1.4为输出口,分别为A、B、C、D
l++
delay(dtime)
if(l==4)l=0
}
else{ //反转,C-B-A-C
for(i=0i<ni++){
P1=fpai[l]
l++
delay(dtime)
if(l==4)l=0
}
}
}
void main(){
TMOD=0x01
TH0=(65536-1000)/256
TL0=(65536-1000)%256
EA=1
ET0=1
while(1){
moto(0,4,70)//正转,转四相,每相间隔70ms
delay(10000)
moto(1,4,70)//反转,转四相,每相间隔70ms
delay(10000)
}
}
步进电机可以通过三种方式实现电机的调速:1、选择脉冲控制型的驱动器,可以通过改变控制脉冲的频率实现步进电机的调速;2、选择内置控制脉冲的步进驱动器,可以通雀旅兆过拨码开关或电位器或模拟信号实镇册现电机的调速;3、带通讯控制功能,可以通过控制指令顷租直接改变电机得到运行速度。sbit K1=P1^0sbit K2=P1^1
char y=0
while(1)
{
pangduan()
for(i=0i<4i++) //4相
{
/*P1=F_Rotation[i] //输出对应的相 可以自行换成反宽察转表格
Delay(500)//改变这个参数可以调整电机转速
Delay(5000)*/
P1=B_Rotation[i]
Delay(265+y)
P1=F_Rotation[i]
Delay(265+y)
}
}
void pangduan()
{
if(K1==0)
{ y++ //加
while(~k1)
}
if(K2==0)
{ y--
while(~k2)//减
}
}
}
没有下上限要是仔物调的话 需慎戚茄要判断显示延时时间
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)