wuyagnhuxi 2014-07-02 03:54
浏览 3464

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;

// }

// }
}

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 程序不包含适用于入口点的静态Main方法
    • ¥15 素材场景中光线烘焙后灯光失效
    • ¥15 请教一下各位,为什么我这个没有实现模拟点击
    • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
    • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
    • ¥20 有关区间dp的问题求解
    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置
    • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
    • ¥15 ubuntu子系统密码忘记