?>

Hard Copy World

HCW

Q&A

Home > Forum >

Q&A

안녕하세요. 스텝모터 질문이있어서 왔습니다.

페이지 정보

작성자 안녕하세요 메일보내기 이름으로 검색 작성일14-12-04 16:07 조회1,302회 댓글1건

본문

가변저항을 활용해서 스텝모터의 방향을 조절하고 싶습니다.

가변저항을 왼쪽으로하면 스텝모터가 왼쪽으로 돌고 오른쪽으로 하면 오른쪽으로 돌게끔 말이죠...

 

왼쪽의 코드는 스텝모터가 한방향으로 빨리갔다 천천히갔다 하는 코드입니다. 

왼쪽의 코드를 활용해서 오른쪽으방법으로 변경을 해보았지만... 시계방향으로는 잘돌아가는데

반시계방향으로 돌아가질 않습니다... 

혹시... 어떻게 하면 될지 답변 해주실수 있으신가요? 죄송합니다...

#define MAXSPEED 500 // microseconds between steps = max speed control
#define ACCDEACC 1600 // accelration and deacceleration steps, also min speed

int DirPIN = 8;   // DIRECTION PIN
int StepPIN = 9;  // CLOCK PIN
int SyncPIN = 10; // SYNC PIN

long counter=0;


void setup() 

 pinMode(DirPIN, OUTPUT);
 pinMode(StepPIN, OUTPUT); 
 pinMode(SyncPIN, OUTPUT);
 digitalWrite(SyncPIN, HIGH);  

void motorstep(long howmany,int direc)
{
 if(direc==0)
 {
   digitalWrite(DirPIN, HIGH);
   delayMicroseconds(5);
 }
 if(direc==1)
 {
   digitalWrite(DirPIN, LOW);
   delayMicroseconds(5);
 }
 int i=ACCDEACC;
 counter=0;
 while(counter<howmany)
 {
   if(counter<ACCDEACC)
   {
     if(i>MAXSPEED)
     {
       i=i-1;  
     }
   }
   if(howmany-counter<ACCDEACC)
   {
     if(i<ACCDEACC);
     {
       i=i+1;
     }
   }
   digitalWrite(SyncPIN, LOW);
   digitalWrite(StepPIN, HIGH);
   delayMicroseconds(5);
   digitalWrite(StepPIN,LOW);
   digitalWrite(SyncPIN, HIGH);
   delayMicroseconds(i);   
   counter=counter+1; 
 }
}

void loop()  

 motorstep(3000,1);
 delay(100);

 motorstep(10000,0);
 delay(100);

 motorstep(400,1);
 delay(100);

 motorstep(200,0);
 delay(100);

 motorstep(200,1);
 delay(100);

 motorstep(10000,1);
 delay(100);

 motorstep(400,0);
 delay(100);

}

                       

#define MAXSPEED 500
#define ACCDEACC 1600

int DirPIN = 4;
int StepPIN = 3;
int SyncPIN = 10;
long counter = 0;


int const potPin = A0;
int potVal = 0;
int dir = 0;
int val = 0;
void setup()
{
  pinMode(DirPIN, OUTPUT);
  pinMode(StepPIN, OUTPUT);
  pinMode(SyncPIN, OUTPUT);
  digitalWrite(SyncPIN, HIGH);
  Serial.begin(9600);
}

void motorstep(long howmany, int direc)
{
  if(direc==0)
  {
    digitalWrite(DirPIN, HIGH);
    delayMicroseconds(5);
  }
  if(direc==1)
  {
    digitalWrite(DirPIN, LOW);
    delayMicroseconds(5);
  }
  int i = ACCDEACC;
  counter = 0;
  while(counter < howmany)
  {
    if(counter < ACCDEACC)
    {
      if(i > MAXSPEED)
      {
        i = i-1;
      }
    }
    if(howmany-counter < ACCDEACC)
   {
     if(i<ACCDEACC);
     {
       i=i+1;
     }
   }   
    digitalWrite(SyncPIN, LOW);
    digitalWrite(StepPIN, HIGH);
    delayMicroseconds(5);
    digitalWrite(StepPIN, LOW);
    digitalWrite(SyncPIN, HIGH);
    delayMicroseconds(i);
    counter = counter+1;
  }
}

void loop(){
  potVal = analogRead(potPin);
  
  val = map(potVal,0,1023,0,10000);
 
  if (val>=5000)
  {
    
    val = val - 5000;
    dir = 0;
    motorstep(val,dir);
    Serial.println(val);
    Serial.println(dir);
   
  }
  else if(val<5000)
  { 
    val = abs((val)-5000);
    dir = 1;
    motorstep(val,dir);
    Serial.println(val);
    Serial.println(dir);
    
  }
  

 
  delay(100);
}

                                                             

 

댓글목록

하드카피님의 댓글

하드카피 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

제가 곧 해외로 갈 예정이라 스텝모터를 테스트 해보기는 힘들것 같습니다. 다른 분들의 답변을 위해 자세한 스텝모터 종류, 회로 연결 등을 올려주셔야 할 것 같습니다.