mega128单片机控制光驱上的步进电机

 从废旧的光驱上拆除了几个电机,发现其中有个四线步进电机,拆下来后控制着玩了玩,挺好玩,这东西用在机器人上的话感觉会很牛逼。。。

四线步进电机不介绍了,网上有海量的资料,用万用表查出来相序,

驱动电路用的L298N,本来用这块板子做我的水下机器人玩的,暂时拆下来用用。。。

单片机用的atmega128,实验室还有DSP,哥还不会用。。。快哭了

好了,先上代码:用ICC编译环境

 

/*==================================
文件:stepMotor
功能:测试步进电机
===================================*/
#include <iom128v.h>
#include <macros.h>

#define STEP_NUM 8
char stepRun[STEP_NUM]={0x01,0x05,0x04,0x06,0x02,0x0a,0x08,0x09};
/*==================================
函数:延时
功能:
===================================*/
void delay_gh(unsigned char times)
{
	unsigned char i,k;
	for(i=0;i<0xff;i++)
		for(k=times;k>0;k--);
}


/*==================================
函数:正转函数
功能:
入口参数:正转速度级别,圈数(若圈数为负,则永远转下去)
===================================*/
void run_clockwise(unsigned char speed,signed char sicleNUM)
{
	unsigned char i,round=0;
	if(sicleNUM<0)
		{
			while(1)
				{
					for(i=0;i<STEP_NUM;i++)
						{
							PORTC=stepRun[i];
							delay_gh(speed);
						}
				}
		}
	else 
		{
			while(round++<sicleNUM)
				{
					for(i=0;i<STEP_NUM;i++)
						{
							PORTC=stepRun[i];
							delay_gh(speed);
						}
				}
		}


}

/*==================================
函数:反转函数
功能:
入口参数:反转速度级别,圈数(若圈数为负,则永远转下去)
===================================*/
void run_unclockwise(unsigned char speed,signed char sicleNUM)
{
	unsigned char i,round=0;
	if(sicleNUM<0)
		{
			while(1)
				{
					for(i=STEP_NUM-1;i>0;i--)
						{
							PORTC=stepRun[i];
							delay_gh(speed);
						}
				}
		}
	else 
		{
			while(round++<sicleNUM)
				{
					for(i=STEP_NUM-1;i>0;i--)
						{
							PORTC=stepRun[i];
							delay_gh(speed);
						}
				}
		}


}
/*==================================
函数:void portInit(void)
功能:端口初始化
===================================*/
void portInit(void)
{
	DDRC|=(1<<PC0)|(1<<PC1)|(1<<PC2)|(1<<PC3);//stepMotor 连接的PC口设置为输出
}


/*==================================
函数:main()
功能:
===================================*/
int main()
{
	
	while(1)
		{
			portInit();
			//正转
			run_clockwise(0xf,58);
			delay_gh(0xff);
			//返转
			run_unclockwise(0x3f,58);
			delay_gh(0xff);
		}
}


还有视频,呵呵,看网上很多大牛分享自己的图片啊,视频啊,那个把我眼馋的。。。mlgb的,咱也这样玩玩。。。

视频马上传。。。

下一步想把这东西弄到arm上,让linux控制步进电机,控制出速度、转角,把加速度计和步进电机结合起来肯定会很好玩

你可能感兴趣的:(mega128单片机控制光驱上的步进电机)