AVR & ATmega

Step Motor ( DC12v 용 JSM-24F, 제일엔지니어링) 구동 Program

EP 기술연구소 2007. 11. 8. 17:05

 

Motion Controller의 Step Motor Driver 출력에 JSM-24F Stepping 모터를 연결 하여 시험.

I9/I10을 누르면 각각 CW/CCW 로 Step Motor 가 회전 하게 하라....

 

상기 방법을 구현한 프로그램 입니다...

 

/* Stepping Motor Phase Excitation Unipolar Drive 데이타 단극성 2상 여자 펄스 패턴 */
const char  Steping_Table[] = { 0x02, 0x03, 0x01, 0x09, 0x08, 0x0C, 0x04, 0x06 };

 

/*****************************************************************
 Project : Sub-Routine(MotorCtl.c) of Motion Controller
 Version :
 Date    : 2007-10-17 10:59오후
 Author  : JW Park(kornanp@empal.com)
 Company : EPIANICS Co., Ltd (Electronic Utopia)
 Comments:
  1.
 
*****************************************************************/
#ifndef _MotorCtl_def_h_
#define _MotorCtl_def_h_

#define  Motor1_on  0x03
#define  Motor_CW 0
#define  Motor_CCW 1

#define  StepMotorAddr 7


bit  Motor1Flag, Motor1TurnFlag;

unsigned char MotorStep[2], MotorTurn[2];

#endif
//===============================================================
void StepMotorCtl()
{
 unsigned char i, j;
 
 mSec20Flag = 0;
 // Motor1 on/off control Routine
 if(Motor1Flag){
  if(Motor1TurnFlag){
   if(++MotorStep[0] >= 8) MotorStep[0] = 0;  // Motor Step Increment
  }
  else {
   if(--MotorStep[0] >= 0xFF) MotorStep[0] = 7; // Motor Step Decrement
  }
  i = (LoadReg[StepMotorAddr] & 0xF0);
  LoadReg[StepMotorAddr] = ( i | Steping_Table[MotorStep[0]] );
  
 }
 else MotorStep[0] &= 0xF0;
  
 PORTC = LoadReg[StepMotorAddr];  // PORTC Data out
 //if(IO_Channel == 3) PORTC = LoadReg[IO_Channel];  // PORTC Data out
 
 // 2. Channel select data set
 IO_Select(StepMotorAddr);    // Chip Select
 
 // 3. Data output Enable
 IO_Enable = 1;
 
 // 4. Input(Sensor) data Read & Save
 //if(IO_Channel < StepMotorAddr) SensorReg[IO_Channel] = ~PINA;  // Switch sensor Input & save
 //PORTG &= 0b11110001;
 
 // 5. Data Output disable
 IO_Enable = 0;     // IO Control Board(
 
 //LoadReg[IO_Channel] = SensorReg[IO_Channel];
 Test();

// Step Motor control
}