立即注册 登录
返回首页

uid:388632的个人空间

日志

基于51的步进电机控制做二维运动

热度 1已有 1161 次阅读2018-12-2 21:40 |个人分类:51

1.采用2个四相八拍步进电机,一个控制X方向,一个控制Y方向,实现二维运动。
2.5个按键控制,K1,K2,K3,K4,K5分别控制电机1正转,电机1反转,停止,电机2正转,电机2反转。
3.5个指示灯,2个绿灯表示正转,2个蓝灯表示反转,红灯表示电机不转。

硬件设计:

软件设计:

#include <reg51.h>

//四相步进电机工作与八拍方式

//正转励磁序列为A->AB->B->BC->C->CD->D->DA

unsigned char code Z1[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};

unsigned char code Z2[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};

//反转励磁序列为AD->D->DC->C->CB->B->BA->A

unsigned char code F1[]={0x09,0x08,0x0C,0x04,0x06,0x02,0x03,0x01};

unsigned char code F2[]={0x90,0x80,0xC0,0x40,0x60,0x20,0x30,0x10};

sbit K1=P3^0 ; //电机1正转

sbit K2=P3^1 ; //电机1反转

sbit K3=P3^2 ; //停止

sbit K4=P3^3 ; //电机2正转

sbit K5=P3^4 ; //电机2反转


void delay_ms(unsigned char x)

{

unsigned char t; while(x--) for (t=0;t<120;t++); //延时函数

}


//电机1正转

void STEP_MOTOR_Z1 ()

{

unsigned char i;

for(i=0;i<8;i++)           //八拍

{

if (K3==0) break;

P1=Z1[i];

delay_ms(50);  

}

}

//电机2正转

void STEP_MOTOR_Z2 ()

{

unsigned char i;

for(i=0;i<8;i++)           //八拍

{

if (K3==0) break;

P1=Z2[i];

delay_ms(50);  

}

}

//电机1反转

void STEP_MOTOR_F1 ()

{

unsigned char i;  

for(i=0;i<8;i++)

{

if (K3==0) break;

P1=F1[i];

delay_ms(50);

}

}

//电机2反转

void STEP_MOTOR_F2 ()

{

unsigned char i;  

for(i=0;i<8;i++)

{

if (K3==0) break;

P1=F2[i];

delay_ms(50);

}

}


//主函数

void main()

{

while (1)    //主循环

{

if (K1==0)       //按下按键1电机1正转4圈且D1灯亮

{

P0=0xfe;

STEP_MOTOR_Z1 ();//电机1正转

if (K3==0) break;

}

else if (K2==0)     //按下按键2电机1反转3圈且D2灯亮

{

P0=0xfd;

STEP_MOTOR_F1 ();//电机1反转

if (K3==0) break;

}

else if (K4==0)     //按下按键4电机2正转3圈且D4灯亮

{

P0=0xfB;

STEP_MOTOR_Z2 ();//电机2正转

if (K3==0) break;

}

else if (K5==0)     //按下按键5电机2反转3圈且D5灯亮

{

P0=0xf7;

STEP_MOTOR_F2 ();//电机2反转

if (K3==0) break;

}

else   //按下按键3电机停止转动且D3灯亮

{

P0=0xEF;//红灯亮 表示电机不转

P1=0x33;//电机初始状态

}

}

}



路过

鸡蛋
1

鲜花

握手

雷人

刚表态过的朋友 (1 人)

评论 (0 个评论)

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部