51+l298n+步进电机

目标:51+298n+电机转一圈+按键检测

可以完整带动298n模块,

//*********************************************
//Developer:Saber
//Project:Motor Control
//Time:2018/4/18
//*********************************************
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
 
static unsigned int count;
static unsigned int endcount;
//八拍驱动方式正转表 A-B- --> B- --> B-A --> A --> AB --> B
// --> BA- --> A- --> A-B-
uchar upstep8_table[]={0x05,0x01,0x09,0x08,0x0A,0x02,0x06,0x04};
 
//四拍驱动方式正转表 A --> B --> A- --> B-
uchar upstep4_table[]={0x08,0x02,0x06,0x01};
 
void delay(uint ims);               //变量延时函数
void Interrupt0_Init();				//中断0初始化
void MotorSpeedOrDirection(uint var, uchar state);        //控制电机转速和方向
void ConStep(uchar var);			//步进控制器
void MotorStop(void);    			//停止
 
void main()
{
	unsigned int sum=0;
 
	P1 = 0x00;
	count = 0;
	Interrupt0_Init();
	while(1)
	{
		MotorSpeedOrDirection(1, 0);
	}
}
 
 
//******************************
//		步进电机停止函数
//作用:停止
//******************************
void MotorStop(void)
{
	P1 = 0x00;
}
 
 
//******************************
//		外部中断0初始化函数
//作用:初始化外部中断
//******************************
void Interrupt0_Init()
{
	EA = 1;
	TMOD = 0x11;
	ET0 = 1;
 
//	TH0=0xFF;
//	TL0=0x28;
	TH0=(65536-1000)/256;
	TL0=(65536-1000)%256;
 
	TR0=1;
}
 
 
//******************************
//		中断处理函数
//作用:定时器0的中断处理
//******************************
void timeint(void) interrupt 1
{
//	TH0=0xFF;
//	TL0=0x28;   //216----234us
//  定时器定时1ms
	TH0=(65536-1000)/256;
	TL0=(65536-1000)%256;
 
	count++;
}
 
 
//******************************
//
//延时i ms
//******************************
void delay(uint ims)
{
	endcount=ims;
	count=0;
	do{}while(count<endcount);
}
 
 
//******************************
//		步进电机驱动函数
//作用:通过变量var控制电动机的转速高低,通过变量state判断电动机的正反转
//			state:0 正转,state: 1 反转
//使用8拍能够实现比较平滑的转动,使用4拍时电机震动比较大。
//******************************
void MotorSpeedOrDirection(uint var, uchar state)
{
	uchar i=0;
	if(!state)
	{
		for(i=0; i<8; i++)
		{
			P1=upstep8_table[i];
			delay(var);
		}
	}else{
		for(i=7; i>0; --i)
		{
			P1=upstep8_table[i];
			delay(var);
		}
	}
}
 
 
//******************************
//		步进控制函数
//作用:通过变量var控制旋转圈速
//******************************
void ConStep(uchar var)
{
	uchar i=0,j=0,m=0,k=0;
	while(k++<var)
	{
		for(i=0;i<20;i++)
		{
			for(m=0;m<20;m++)
			{
				P1=upstep8_table[j];
				j++;
				if(j>=8)             //每8次一个循环
					j=0;
				delay(1);
			}
		}
	}
}

修改后的

//*********************************************
//Developer:Saber
//Project:Motor Control
//Time:2018/4/18
//*********************************************
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
//八拍驱动方式正转表 A-B- --> B- --> B-A --> A --> AB --> B
// --> BA- --> A- --> A-B-
uchar upstep8_table[]={0x05,0x01,0x09,0x08,0x0A,0x02,0x06,0x04};

uchar i=0;
void main()
{
    if(i<=8)
    {
        P1=upstep8_table[i];
        i++;
    }
    else
    {
	    i=0;
    }
}		
		

问题是:电机一直响,不转。

没有电机引脚初始化

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值