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条回答

    报告相同问题?

    悬赏问题

    • ¥50 h5唤醒支付宝并跳转至向小荷包转账界面
    • ¥15 算法题:数的划分,用记忆化DFS做WA求调
    • ¥15 chatglm-6b应用到django项目中,模型加载失败
    • ¥15 武汉岩海低应变分析软件,导数据库里不显示波形图
    • ¥15 CreateBitmapFromWicBitmap内存释放问题。
    • ¥30 win c++ socket
    • ¥15 C# datagridview 栏位进度
    • ¥15 vue3页面el-table页面数据过多
    • ¥100 vue3中融入gRPC-web
    • ¥15 kali环境运行volatility分析android内存文件,缺profile