四极管:步进电机 AVR之 L298

主函数:

四极管:主函数文件(main.c)

#ifndef  MAIN_C
#define  MAIN_C

#include <avr/io.h>
#include <move.h>
#include <move_1.h>

//===========================================
int main(void)
{
   DDRC=0X00;
 
	while(1)
	{
      if( XmotorStepNum<100)	
      {
       x_up();
       }
	   
	  
	  //step(200);
                  //拍数模式
	  /*engine_port=0x66;     //调用RR()前先给一个初值以便电机启动
	  RR();*/
	
	}
}

#endif


步进电机驱动  晕。。。当时不知道怎么想的··写到.h里面了··不过为了保留完整性,以便以后自己留作菜鸟纪念,上传源码不再做任何修改。

四极管:步进电机驱动文件(move.h)

#ifndef  MOVE_H
#define  MOVE_H
/***********************************
 函数功能:步进电机控制程序
 函数说明:四线方式,数据输出线:engine_port
          
 使用环境:    硬件: MCU: ATmega32L 
                      F_CPU = 16000000
                      外部:16000000 
 接线方法:4线				  
 编译环境:WinAVR-20080610	
 模式说明:
          半拍模式 精度高
		  单拍模式 速度快
		  双拍模式
 包含文件 :<util/delay.h>				  
 日期:2009年7月31日
 修改者: 杨琦			   	(日期:  )	
**************************************************************************************/
#include  <util/delay.h>
#define   engine_port PORTC
uint64_t  XmotorStepNum=0;  //注意:XmotorStepNum的值决定拍数;双拍、单拍步进为1.8°;单拍步进为0.9°
uint64_t  YmotorStepNum=0;  //注意:XmotorStepNum的值决定拍数;双拍、单拍步进为1.8°;单拍步进为0.9°
//---------------------------------------------

unsigned int XmotorPortDataPiont=0;   
unsigned int YmotorPortDataPiont=0;          
          

//const unsigned char Motor_Data[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};   //半拍模式 精度高//步进角度  0.9度/步;现在是半步驱动。
const unsigned char Motor_Data[]={0x08,0x04,0x02,0x01};//0001,0010,0100,1000   //单拍模式 速度快
//const unsigned char Motor_Data[]={0x0c,0x06,0x03,0x09};//0001,0010,0100,1000  //双拍模式  
/****************************************
** 函数名:x_up(void)
** 功能  :接低位————按X轴方向顺时针旋转
** 子函数:_delay_ms()
** 变量  :无
****************************************/
void x_up(void)
{  

	engine_port&=0xF0;
	engine_port|=Motor_Data[XmotorPortDataPiont++];
	XmotorStepNum+=1;  //可计算圈数,备用~~~
	if(XmotorPortDataPiont==4)XmotorPortDataPiont=0;
	_delay_ms(5);
}
/****************************************
** 函数名:x_down(void)
** 功能  :接低位————按X轴方向逆时针旋转
** 子函数:_delay_ms()
** 变量  :无
****************************************/
void x_down(void)
{
	engine_port&=0xF0;
	engine_port|=Motor_Data[3-(XmotorPortDataPiont++)];
	if(XmotorPortDataPiont==4)XmotorPortDataPiont=0;
	XmotorStepNum+=1;  //可计算圈数,备用~~~
	_delay_ms(100);
}
/****************************************
** 函数名:y_up(void)
** 功能  :接高位————按y轴方向顺时针旋转
** 子函数:_delay_ms()
** 变量  :无
****************************************/
void y_up(void)
{
	engine_port&=0x0F;
	engine_port|=(Motor_Data[YmotorPortDataPiont++]<<4); 
	if(YmotorPortDataPiont==4)YmotorPortDataPiont=0;
	YmotorStepNum-=1;  //可计算圈数,备用~~~
	_delay_ms(100);
}
/****************************************
** 函数名:y_down(void)
** 功能  :接高位————按y轴方向逆时针旋转
** 子函数:_delay_ms()
** 变量  :无
****************************************/
void y_down(void)
{
	engine_port&=0x0F;
	engine_port|=(Motor_Data[3-(YmotorPortDataPiont++)]<<4); 
	if(YmotorPortDataPiont==4)YmotorPortDataPiont=0;
	YmotorStepNum+=1;  //可计算圈数,备用~~~
	_delay_ms(100);
}
/****************************************
** 函数名:x_stop(void)
** 功能  :停止接低位的电机
** 子函数:无
** 变量  :无
****************************************/
void x_stop(void)
{
	PORTC&=0XF0;
}
/****************************************
** 函数名:y_stop(void)
** 功能  :停止接高位的电机
** 子函数:无
** 变量  :无
****************************************/
void y_stop(void)
{
	PORTC&=0X0F;
}
/****************************************
** 函数名:all_stop(void)
** 功能  :全部停止
** 子函数:无
** 变量  :无
****************************************/
void all_stop(void)
{
	x_stop();
	y_stop();
}

#endif


还有一个

/***********************************
 函数功能:步进电机控制程序
 函数说明:四线方式,数据输出线:engine_port
          
 使用环境:    硬件: MCU: ATmega32L 
                      F_CPU = 16000000
                      外部:16000000 
 接线方法:4线				  
 编译环境:WinAVR-20080610	
 模式说明:
          循环左右移动,简洁模式
 包含文件 :<util/delay.h>				  
 日期:2009年7月31日
 修改者: 杨琦			   	(日期:  )	
**************************************************************************************/

unsigned char i,j;
uint32_t count=0;
/****************************************
** 函数名:RR(void)
** 功能  :接低位————按X轴方向顺时针旋转
** 子函数:_delay_ms()
** 变量  :无
****************************************/
void RR(void)
{
	for(i=0;i<8;i++)   //此循环实现的功能是循环右移
	  {
	  	j=engine_port&0x01;
		j<<=7;
	  	engine_port>>=1;
		engine_port|=j;
		_delay_ms(10);
		count++;                  //用于计算角度,备用~~~~
	  }
}
/****************************************
** 函数名:RL(void)
** 功能  :接低位————按X轴方向逆时针旋转
** 子函数:_delay_ms()
** 变量  :无
****************************************/
void RL(void)
{
	for(i=0;i<8;i++)   //此循环实现的功能是循环左移
	  {
	  	j=engine_port&0x80;
		j>>=7;
	  	engine_port<<=1;
		engine_port|=j;
		_delay_ms(10);    
		count++;          //用于计算角度,备用~~~~
	  }
}



 

转载请注明出处。作者:四极管。广西师范大学 电子工程学院大学生科技创新基地 邮箱: yangxingbo-0311@163.com




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值