📄 motor.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 + -