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

📄 drv_s_motor.c

📁 uCOS2 for 51系列
💻 C
📖 第 1 页 / 共 3 页
字号:
/*********************************************************************************************************
**				                         uC/OS 2 FOR TI TMS320240X
**                                   The Real-Time Kernel(For CCS2.2)
**
**                                  
**                                                V0.00.1
**
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: Drv_StepStepMotor.C
**创   建   人: 龚树强
**版        本: V0.01.3
**最后修改日期: 2005年5月10日
**描        述: 步进电机控制函数源文件
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 龚树强
** 版  本: V0.01.3
** 日 期: 2005年3月10日
** 描 述: 原始版本
**
**------------------------------------------------------------------------------------------------------
** 修改人: 
** 版  本: 
** 日 期: 
** 描 述: 
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/

#include "..\source\includes.h" 

/*******************************************************************************
*********************			常	量	定	义			************************
********************************************************************************/

const 	INT8U	name_stepmotor[] = "smotor";

const	struct	obj_operation	StepMotorOperation 	= 	{
														StepMotorIOCtrl,	/*	void 	(*ioctrl)(void *,INT8U *)	*/
														StepMotorLoad,		/*	void 	(*load)(void *,INT8U *)		*/
														StepMotorUnLoad,	/*	void 	(*unload)(void *,INT8U *)	*/
														StepMotorSet,		/*	void 	(*set)(void *,INT8U *)		*/
														StepMotorTest,		/*	void 	(*test)(void *,INT8U *)		*/
														NULL				/*	void 	(*deamon)(void *,INT8U *)	*/	
													};  

/*******************************************************************************
*********************			变	量	定	义			************************
********************************************************************************/  

STEPMOTOR_CTRL			StepMotor0_Ctrl;
OS_STK 					STK_StepMotor0[TASK_STK_SIZE];

STEPMOTOR_CTRL			StepMotor1_Ctrl;
OS_STK 					STK_StepMotor1[TASK_STK_SIZE];



/*
INT16U		I_KP;              	//电流调节比例系数
INT16U		I_KI;                	//电流调节积分系数
INT16U		I_KC;             	//电流调节积分饱和修正系数
INT16U		I_REF;               	//电流参考值

INT16U		I_EK;               	//电流偏差
INT16U		I_RK;               	//电流第K次积分调节累计
INT16U		I_U;                	//电流调节输出
INT16U		I_ELPI;            	//电流极限偏差
INT16U		I_MIN;               	//电流最小值
INT16U		I_MAX;              	//电流最大值

*/

/*******************************************************************************
*********************		功	能	函	数	定	义		************************
********************************************************************************/  


/*********************************************************************************************************
** 函数名称: StepMotor_Init
** 功能描述: StepMotor初始化函数
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 龚树强
** 日 期: 2005年4月22日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/  
 
		void 	StepMotor0_Init(void * pData,INT8U * err)
{
	MCRA |= B13_MSK;			//STEP_PWM (T2PWM)
	MCRA &= (~(B12_MSK));		//STEP_SIG (T1PWM)
	PBDATDIR |= B12_MSK;	
	MCRC &= (~(B3_MSK));		//STEP_DIR (PWM9)
	PEDATDIR |= B11_MSK;	
	

	ISR_Reg( T2PINT_ISR ,ISR_StepMotor0 , err);

 	T2CON = TMODE0|TENCMP;							/*连续增减计数模式,不预分频,使能定时器比较操作,定时器比较寄存器在计数值为0时重装载*/ 
  	
  	GPTCONA |= TCOMPOE|T2PIN1;                 		/*使能通用定时器比较输出*/
  	
  	EVAIFRB |= T2PINT_FLAG;
	
  	EVAIMRB |= T2PINT_ENA;							/*允许周期中断*/
  	
//  	T2PER = (( SYSCLK / OS_TICKS_PER_SEC ) * 2 + 1 ) / 2;
  	
  	T2CON |= TENABLE;
  	
  	IMR |= INT3MASK;		
}

/*********************************************************************************************************
** 函数名称: StepMotorIOCtrl
** 功能描述: StepMotorIO函数
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 龚树强
** 日 期: 2005年4月22日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/  
 
		void 	StepMotorIOCtrl(void * pData,INT8U * err)
{

}


/*********************************************************************************************************
** 函数名称: StepMotorLoad
** 功能描述: StepMotor任务装载函数
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 龚树强
** 日 期: 2005年4月22日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/  
 
		void 	StepMotorLoad(void * pData,INT8U * err)
{
	INT8U	para_num;
	INT8U	i;
	
	INT8U	selected_obj;
	INT8U	temp_para;
	
	para_num = ((PARAMETER_PACKAGE *)pData)->para_num;
	selected_obj = NULL;
	
	for(i = 0; i<para_num ;i++)
	{
		temp_para = ((PARAMETER_TBL *)((PARAMETER_PACKAGE * )pData)->ppara)->para_name[i];
		
		switch(temp_para)
		{
			case	STEPMOTOR_SELECT_0	:   	
				selected_obj |= STEPMOTOR0_SELECTED;
				break;
    	 		case	STEPMOTOR_SELECT_1	:   	
				selected_obj |= STEPMOTOR1_SELECTED;
				break;
    	 		default	:	
				break;
    		}
    	}
    
    	if(selected_obj == NULL)
    	{
    		selected_obj |= STEPMOTOR0_SELECTED;
		selected_obj |= STEPMOTOR1_SELECTED;	
    	}
    
    	if(selected_obj & STEPMOTOR0_SELECTED)
    	{	
    		if(StepMotor0_Ctrl.api.ObjLoaded != OBJ_LOADED)
    		{
		    	StepMotor0_Ctrl.api.Mbox = OSMboxCreate((void *)0);
		    	StepMotor0_Ctrl.api.MboxSem = OSSemCreate(1);
		    	StepMotor0_Ctrl.api.ObjLoaded = OBJ_LOADED;
		    	
		    	StepMotor0_Ctrl.property.mode = STEPMOTOR_HALT;
		    	StepMotor0_Ctrl.property.Vm = 0;
		    	StepMotor0_Ctrl.property.Vt = 0;
		    	StepMotor0_Ctrl.property.St = 0;
		    	StepMotor0_Ctrl.property.Sr = 0;
		    	
		    	
		    	StepMotor0_Ctrl.func.SetVelocity = StepMotor0SetVelocity;
		    										
		    	OSTaskCreate( 	Task_StepMotor,                        		//create a task	
		    					(void *)(&StepMotor0_Ctrl),          		//parameter	
		    					&STK_StepMotor0[0],                 		//BOS
		    					STEPMOTOR_0_PRIO		                	//task prio	
		    				);
		    	StepMotor0_Init((void *)NULL,NULL);
		}
		else
		{
			* err = ERROR_CMD_REJECTED;
			return;
		}
	}
	
/*	if(selected_obj & STEPMOTOR1_SELECTED)
    {	
    	if(StepMotor1_Ctrl.api.ObjLoaded != OBJ_LOADED)
    	{
	    	StepMotor1_Ctrl.api.Mbox = OSMboxCreate((void *)0);
	    	StepMotor1_Ctrl.api.MboxSem = OSSemCreate(1);
	    	StepMotor1_Ctrl.api.ObjLoaded = OBJ_LOADED;
	    										
	    	StepMotor1_Ctrl.property.mode = 0;
	    										
	    	//StepMotor1_Ctrl.func.led_on = Led_DS2_On;
	    	//StepMotor1_Ctrl.func.led_off = Led_DS2_Off;
	    										
	    	OSTaskCreate( 	Task_StepMotor,                        	//create a task	
							(void *)(&StepMotor1_Ctrl),  	        //parameter		
							&STK_StepMotor1[0],            	     	//BOS			
							STEPMOTOR_1_PRIO           		    	//task prio		
						);
		}
		else
		{
			* err = ERROR_CMD_REJECTED;
			return;
		}
	}
*/											
	StepMotorSet(pData,err);
	
	return;
	                 
}

/*********************************************************************************************************
** 函数名称: StepMotorUnLoad
** 功能描述: StepMotor任务卸载函数
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 龚树强
** 日 期: 2005年4月22日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/  
 
		void 	StepMotorUnLoad(void * pData,INT8U * err)
{   
	INT8U	para_num;
	INT8U	i;
	
	INT8U	selected_obj;
	INT8U	temp_para;
	
	para_num = ((PARAMETER_PACKAGE *)pData)->para_num;
	selected_obj = NULL;

	for(i = 0; i<para_num ;i++)
	{
		temp_para = ((PARAMETER_TBL *)((PARAMETER_PACKAGE * )pData)->ppara)->para_name[i];
		
		switch(temp_para)
		{
			case	STEPMOTOR_SELECT_0	:   	
				selected_obj |= STEPMOTOR0_SELECTED;
				break;
    	 		case	STEPMOTOR_SELECT_1	:   
				selected_obj |= STEPMOTOR1_SELECTED;
				break;
    	 		default	:	
				break;
		}
	}
	
	if(selected_obj == NULL)
	{
		selected_obj |= STEPMOTOR0_SELECTED;
		selected_obj |= STEPMOTOR1_SELECTED;
	}

	if(selected_obj & STEPMOTOR0_SELECTED)
	{
		if(StepMotor0_Ctrl.api.ObjLoaded != OBJ_UNLOADED)
		{
			OSSemPend(SysBufSem_2,0,err);
			pData = (INT8U * )OSMemGet(SysBuf_2,err);
												
			*((INT8U *)pData + POINTER_LENGTH) = STEPMOTOR_KILL_TASK ;
			OSMboxPost(StepMotor0_Ctrl.api.Mbox,pData);
		}
		else
		{
			*err = ERROR_CMD_REJECTED;
			return;
		}
	}
	
/*	if(selected_obj & STEPMOTOR1_SELECTED)
    {	

⌨️ 快捷键说明

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