Robofun 機器人論壇

標題: 步進馬達-外部中斷 [打印本頁]

作者: milk1152    時間: 2013-3-25 16:46
標題: 步進馬達-外部中斷
各位大家好:最近在寫Arduino控制兩顆馬達時,碰到一些小問題,我想用極限開關使馬達訊號中斷,是否應該使用attachInterrupt()函數來寫?
還有我對Arduino的函示庫也不是很瞭解,我的程式裡面"steps"是指馬達每轉一圈所需的步數,不知道我這樣說是否有誤?
但如果我已經接了一顆馬達驅動器,而馬達驅動器可以切的步數是500步,那兩個之間是否有衝突?若我將steps改成500會造成馬達左右晃動。
還是說有接馬達驅動器的話,用Arduino的函式庫來寫根本就是錯的?
而我要加極限開關,使用attachInterrupt()函數,其中stateChange()裡的程式該如何編寫?
在我用parseInt()函數時,我輸入兩個數字並且用逗號隔開會有一個問題,當我輸入200,100時,Arduino串口會讀不到數值,當我輸入200,100,時,多一個逗號Arduino,就能讀到輸入之數值,為什麼會有這樣子的情況?
以下是我的程式碼:
#include <Stepper.h>
const int steps = 200;
int step1,step2;
Stepper myStepper1(steps,8,9);
Stepper myStepper2(steps,5,6);
const int sensorPin = 0;
const int limitPin = 0;
const int ledPin = 13;
volatile int limitState ;
void setup(){
  pinMode(limitPin,INPUT);
  Serial.begin(9600);
attachInterrupt(limitPin,stateChange,CHANGE);
}
void loop(){
  int value = analogRead(sensorPin);
  limitState = analogRead(limitPin);
  int motorSpeed = map(value,0,1023,0,100);
  if (motorSpeed > 0 ){
    myStepper1.setSpeed(motorSpeed);
    myStepper2.setSpeed(motorSpeed);
        while ( Serial.available() > 0){
        step1 = Serial.parseInt();
        delay(2);
        step2 = Serial.parseInt();
        delay(2);
      if (Serial.read() == ','){     
         myStepper1.step(step1);
         myStepper2.step(step2);


      Serial.println(step1);
      Serial.println(step2);
      }
      }      
  }
  }


void stateChange(){
  step1=0;
  step2=0;


}


謝謝大家幫忙!
作者: vegewell    時間: 2013-3-31 12:41
回復 1# milk1152


   >> 碰到一些小問題,我想用極限開關使馬達訊號中斷,是否應該使用attachInterrupt()函數來寫?
如果是用極限開關使馬達切斷電源,是不需要使用attachInterrupt()函數來寫
有關步進馬達請看我發表的文章用Arduino控制一顆步進馬達!
http://www.robofun.net/forum/viewthread.php?tid=6893
------------------------------------
用Arduino控制三顆步進馬達!
http://www.robofun.net/forum/viewthread.php?tid=6905




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2