2 wuyagnhuxi wuyagnhuxi 于 2014.07.02 11:54 提问

51单片机通过TB6560控制两相步进电机

控制时步进电机能频率问题include

#define uchar unsigned char
#define uint unsigned int

uchar pwm,adjustment=100;
uint num,num2;
sbit CLK=P2^0; //脉冲正负端 有脉冲时电机运行,无脉冲时自动进入所设定的半流状态,锁定电机
sbit CW=P2^1; //方向正负端 低电平或悬空时正传,高电平反转
sbit EN=P2^2;
sbit CLK1=P0^0;
sbit CW1=P0^1;
sbit EN1=P0^2;
sbit k1=P3^0;
sbit k2=P3^1;
sbit led=P1^0; //使能正负端 低电平或悬空时工作,高电平为脱机状态
void keyscand(); //按键检测函数
void delay_ms(unsigned int ms_number) // ms延时函数 (AT89C51 @ 11.0592MHz)
{
unsigned int i;
unsigned char j;
for(i=0;i<ms_number;i++)
{
for(j=0;j<200;j++);
for(j=0;j<102;j++);
}

}
void T0_init() //定时器初始函数
{
TMOD=0X01; //选择定时器0工作方式
TH0=(65536-adjustment)/256;

TL0=(65536-adjustment)%256; //定时;装初值
EA=1;
ET0=1;
TR0=1;

}
void main()
{
EN=1;
CW=1;

keyscand();

}
void T0_timer() interrupt 1 //定时器0方式1
{

TH0=(65536-adjustment)/256; //2600一转每秒

TL0=(65536-adjustment)%256;
CLK=~CLK;

// num++;
// num2++;
// if(num==20)
// { EN=0;
// }

// if(num==4000)
// {
//

// EN=0;

// }
// if(num=200)
// { CW=0;
// EN=1;
// }
// if(num==120)
// { EN=0;
//// num=0;

// }

}
void keyscand()
{
if(k1==0)
{
delay_ms(5);
if(k1==0)
{

// T0_init();
while(1)
{

delay_ms(50);
led=1;
TR0=1;
EN=0;
delay_ms(500);
led=0;
TR0=0;
EN=1;
}

}

    }

// if(k2==0)
// {
//

// delay(100);
// if(k2==0)
// {
//
// EN=~EN;

// }

// }
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!