?? 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 + -