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

📄 motor.c

📁 arm7 实验箱 关于步进直流电机驱动程序和步进电机的一些应用
💻 C
字号:
/****************************************Copyright (c)**************************************************/
/**                                
;**                                 西南科技大学计算机科学学院
;**                                   
;**                                http://www.cs.suswt.edu.cn
;**            
;**             日期:  2007/09/21 
;**             描述:  Motor.h 西南科技大学计算机学院CS-II型实验板电机驱动工作程序
;**             作者:
;**
;**--------------Motor.c文件
;**------------------------------------------------------------------------------------------------------*/

/**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#define _MOTOR_C_
#ifdef  _MOTOR_C_

/************************************************
 *          Header File                         * 
 ***********************************************/
 #include"motor.h"
 #include"config.h"
 
 
/******************************************************************************
 * Function Name: void MOTORInit(void)                                        *
 * Description  : 步进电机、直流电机参数初始化程序          				  *
 *****************************************************************************/
 void MOTORInit(void)
 {
 	PINSEL2 &= MOTOR_PINSEL;                                        //引脚设置,这里是选择P2.19-23,包括步进电机和直流电机引脚,设置为GPIO
 	
 	IO2DIR |= DCMOTOR_SWITCH;                                       //直流电机初始化
 	IO2SET = DCMOTOR_SWITCH;
 	
 	IO2DIR |= STEP_PHASE_A;                                         //步进电机初始化
 	IO2DIR |= STEP_PHASE_B;
 	IO2DIR |= STEP_PHASE_C;
 	IO2DIR |= STEP_PHASE_D; 	
 	IO2SET = STEP_PHASE_A;
 	IO2SET = STEP_PHASE_B;
 	IO2SET = STEP_PHASE_C;
    IO2SET = STEP_PHASE_D;	
 }
 
 /**--------------------------------------------------------------------**/
 //								直流电机                                 //
 /**--------------------------------------------------------------------**/

 #ifdef MOTOR_DC_ENABLE
 uint8 uc_dcmotor_delay = 0;                                        //让直流电机延时转动
/******************************************************************************
 * Function Name: void DCMOTORRun(uint8 speed)                                *
 * Description  : 直流电机驱动函数,其中入口参数speed代表直流电机的转动速度, *
 *                这里将其速度等级设置16个,即0x00~0x0f,0x0f最快。          *
 *****************************************************************************/ 
 void MOTORDCRun(uint8 speed) 
 {
 	if(uc_dcmotor_delay < speed)                                    //speed是直流电机的转动速度,含义相当于在一定的时间周期内有多少时间让电机转动
 	{	
 		IO2CLR = DCMOTOR_SWITCH;                                    //驱动直流电机转动
 	}
 	else if(uc_dcmotor_delay > speed)
 	{
 		IO2SET = DCMOTOR_SWITCH; 		                            //停止直流电机转动
 	}
 	uc_dcmotor_delay++;
    if(uc_dcmotor_delay == DCMOTOR_SPEED_GRADE) 	
 	{
 		uc_dcmotor_delay = 0;
 	}
 }
 #endif
 
 
 /**--------------------------------------------------------------------**/
 //								步进电机                                 //
 /**--------------------------------------------------------------------**/
 #ifdef MOTOR_STEP_ENABLE
  
 uint8 uc_stepmotor_delay = 0;                                      //让步进延时
 uint8 uc_phasenumber = 0;                                          //控制相位
 
/******************************************************************************
 * Function Name: void MOTORStepRun(uint8 speed)                              *
 * Description  : 步进电机驱动程序。入口参数speed为步进电机的速度控制参数,速 *
 *                度级别0x00-0x0f,其中0x00最快,当速度级别为0x00时转一周约需  *
 *                8.19s(放在1ms中断一次的定时器0中)相应的如果速度级别增加1,*
 *                转一圈的时间增加一倍                                        * 
 *****************************************************************************/
void MOTORStepRun(uint8 speed,uint8 direction)  
 {
 	if(uc_stepmotor_delay == speed)
 	{
 		if(direction == CLOCKWISE)                                  //如果设置方向为顺时针方向
 		{   		
	 		switch(uc_phasenumber++)                                //相位转动顺序为A->B->C->D
	 		{
	 			case 0:  IO2CLR = STEP_PHASE_A;
	 			         IO2SET = STEP_PHASE_B;
	 			         IO2SET = STEP_PHASE_C;
	 			         IO2SET = STEP_PHASE_D;
	 			         break;	 			
	 			
	 			case 1:  IO2CLR = STEP_PHASE_B;
	 			         IO2SET = STEP_PHASE_A;
	 			         IO2SET = STEP_PHASE_C;
	 			         IO2SET = STEP_PHASE_D; 
	 			         break;	 			         
	 			
	 			case 2:  IO2CLR = STEP_PHASE_C;
	 			         IO2SET = STEP_PHASE_A;
	 			         IO2SET = STEP_PHASE_B;
	 			         IO2SET = STEP_PHASE_D;
	 			         break;	 			         
	 			
	 			case 3:  IO2CLR = STEP_PHASE_D;
	 			         IO2SET = STEP_PHASE_A;
	 			         IO2SET = STEP_PHASE_C;
	 			         IO2SET = STEP_PHASE_B;
	 			         break;	 			         
	 			
	 		    default: break;
	 		} 
	 	}
	 	else                                                        //如果设置方向为顺时针方向
	 	{
	 		switch(uc_phasenumber++)                                //相位转动顺序为A->B->C->D
	 		{
	 			case 0:  IO2CLR = STEP_PHASE_A;
	 			         IO2SET = STEP_PHASE_B;
	 			         IO2SET = STEP_PHASE_C;
	 			         IO2SET = STEP_PHASE_D;
	 			         break;
	 			         
	 			case 1:  IO2CLR = STEP_PHASE_D;
	 			         IO2SET = STEP_PHASE_A;
	 			         IO2SET = STEP_PHASE_C;
	 			         IO2SET = STEP_PHASE_B; 
	 			         break;
	 			         
	 			case 2:  IO2CLR = STEP_PHASE_C;
	 			         IO2SET = STEP_PHASE_A;
	 			         IO2SET = STEP_PHASE_B;
	 			         IO2SET = STEP_PHASE_D;
	 			         break;	 			
	 			
	 			case 3:  IO2CLR = STEP_PHASE_B;
	 			         IO2SET = STEP_PHASE_A;
	 			         IO2SET = STEP_PHASE_C;
	 			         IO2SET = STEP_PHASE_D;
	 			         break;	 			         
	 			
	 		    default: break;
	 		} 
	 	}		
 		if(uc_phasenumber == 4)                                     //相位控制
 		{
 			uc_phasenumber = 0;
 		} 
 		uc_stepmotor_delay = 0;		
 	}
 	else 
 	{
 		uc_stepmotor_delay++;
 	}
 	
 }
 #endif

#endif
/*****************************************************************************
 *                         End of Entire File                                *
 ****************************************************************************/

 

⌨️ 快捷键说明

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