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

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条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥60 版本过低apk如何修改可以兼容新的安卓系统
    • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
    • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
    • ¥50 有数据,怎么用matlab求全要素生产率
    • ¥15 TI的insta-spin例程
    • ¥15 完成下列问题完成下列问题
    • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
    • ¥15 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!
    • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?