⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 两相5、6线步进电.c

📁 自己单片机板c程序
💻 C
字号:
//两相5、6线步进电机,分为四拍和八拍,这里介绍输出八拍方式:A-AC-C-CB-B-BD-D-DA
//四拍:A-C-B-D,因此在八拍的基础上减去中间的就可以了,不过步距角要大一倍
#include <reg51.h>
#include <intrins.h>

sbit la=P2^0;		//定义两相电机的四组线,从板上设计来分配,选择P2口的低四位输出,相应的输出也可以反应在LED灯上
		//P2。0为A相,P2。1为B相,P2。2为C相,P2。3为D相
sbit lb=P2^1;
sbit lc=P2^2;
sbit ld=P2^3;

#define uchar unsigned char
code unsigned int lhj[]={1,50,100,1,50,80,1,100,50,0,120,40,0,30,80,0,50,100,
						1,50,120,0,200,80,1,400,20,1,50,130,0,200,90,0,50,150};
						//定义电机动作的参数,每三个数为一组,第一个是方向(1、正转,0、反转)
						//第二个是步进量,第三个是转速
unsigned char key();//键盘动作,这里的键盘扫描只用到四个按键有效(板上标的0,4,8,C)
unsigned char right(unsigned int Speed,unsigned int road);	//正转
unsigned char left(unsigned int Speed,unsigned int road);	//反转
void mDelay(unsigned int DelayTime);		//延时函数


void main()
{  
	uchar i=0;
	while(1){
		if(key()==0xde){//8的按键按下
			for(i=0;i<34;i+=3){//循环输出我们定义好的动作数据
				if(lhj[i])			//调入数组,先判断正反转
					right(lhj[i+1],lhj[i+2]);	//两个参数代表步进量和转速
				else
					left(lhj[i+1],lhj[i+2]);
				if(key()==0xee)//C的按键按下
				break;
			}			
		}
	}
		
}
unsigned char right(unsigned int Speed,unsigned int road)//两个参数代表步进量和转速
{
	//步进节拍:A-AC-C-CB-B-BD-D-DA
	while(1){
		if(!Speed)	//判断步进量走完没?以下都是,每走一步,判断一次
			break;
		ld=1;
		la=0;		//a
		mDelay(road);//这里的延时就可控制转速
		if(!Speed--)
			break;
		lc=0;		//ac
		mDelay(road);
		if(!Speed--)
			break;
		la=1;		//c
		mDelay(road);
		if(!Speed--)
			break;
		lb=0;		//cb
		mDelay(road);
		if(!Speed--)
			break;
		lc=1;		//b
		mDelay(road);
		if(!Speed--)
			break;
		ld=0;		//bd
		mDelay(road);
		if(!Speed--)
			break;
		lb=1;		//d
		mDelay(road);
		if(!Speed--)
			break;
		la=0;		//da
		mDelay(road);
		Speed--;
	}
	P3=P3|0x0f;//将四个脚输出置高
}
unsigned char left(unsigned int Speed,unsigned int road)//两个参数代表步进量和转速
{
		//步进节拍

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -