单片机控制步进电机程序详解(单片机控制步进电机的工作原理)

单片机控制步进电机程序(含电路原理图和程序)

1、设计电路:

主要元件:与门AND_5(5路),ULN2003A(放大电压用来驱动电机),AT89C52,步进电机MOTOR-STEPPER

单片机控制步进电机程序详解(单片机控制步进电机的工作原理)

步进电机连接电路图

2、编写程序:

#include
#define uint unsigned int
#define uchar unsigned
#include #define uint unsigned int #define uchar unsigned char int state = 0; 
char int state = 0; //定义电机的状态 state = 1 正转 state = -1电机反转 state = 0 电机停止 
uint time = 50; //定义延时时间

int step[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//每一步的通电顺序 
//几个控制开关量
sbit drive = P3^5; 
sbit stop = P3^6; 
sbit re_drive = P3^7; 
sbit add = P3^1; 
sbit reduce = P3^0;

//延时程序 x*10ms 
void Delay_xms(uint x)
{ 
	uint i,j; 
	for(i=0;i<x;i++) 
		for(j=0;j<112;j++);//10ms 
} 

//反转 
void Move_reverse(uint time)
{ 
	uint i; 
	for(i= 0;i < 8;i++)
	{	 
		P2 = step[i]; 
		Delay_xms(time); 
	} 
} 

//正转 
void Move(uint time)
{ 	
	int i; 
	for(i= 7;i >= 0;i--)
	{ 
		P2 = step[i]; 
		Delay_xms(time); 
	} 
}
//定义外部中断INT0的中断函数 开关量变化时做出反应 
void ChangeState() interrupt 0
{
	if(!drive)
	{ 
		state = 1;
		drive = 1; 
	} 
	if(!stop)
	{ 
		state = 0;
		stop = 1;
	 } 
	if(!re_drive)
	{ 
		state = -1;
 		re_drive = 1;
	 }
	if(!add)
	{ 
		time -= 10;
		add = 1;
 		if(time <= 10)
			time = 10; 
  	} 
 	 if(!reduce)
 	{
		time += 10;
		reduce = 1;
		if(time >= 100)
			time = 100; 
	}
}

void main()
{
	EA = 1; //EA (IE.7), CPU中断允许(总允许)位。 
	EX0 = 1; //EX0(IE.0),外部中断0允许位 IE0(TCON.1),外部中断0中断请求标志位。
	IT0 = 1; //定义下降沿触发
  
	while(1)
  {
		switch(state)
    {
      	case 1: Move(time); 
                	break; 
      	case 0: Delay_xms(10); 
                  break; 
     	 	case -1: Move_reverse(time);
                  break; 
		} 
	} 
}
// 由于编辑器排版问题,没办法做到代码对齐

3、运行结果:

单片机控制步进电机程序详解(单片机控制步进电机的工作原理)

运行结果

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论