如何通过步进电机中的arduino获得固定数量的延迟?

时间:2014-12-22 10:43:49

标签: arduino arduino-uno uistepper

我必须停止步进电机一定次数(一次完整旋转),延时作为停止参数。假设我的要求是停止电机20次,以便我的延迟值应该均匀分布在此之间完成一次旋转的数字(20)。我为这些停靠点使用了一个for循环(20),但是我得到了超过20的delys。下面给出了arduino的代码,其中8000是一次旋转中的步数:

    #include <Stepper.h>

    const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
    // for your motor

    // initialize the stepper library on pins 8 through 11:
    Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);

    void setup() {
    // set the speed at 60 rpm:
    myStepper.setSpeed(60);
    // initialize the serial port:
    Serial.begin(9600);
    }

   // step one revolution  in one direction:
   void loop() {
   int noi=20;// set the no of images here
   for(int i=0;i<=noi;i++){
    delay(8000/noi);
    }
    Serial.println("clockwise");
    myStepper.step(stepsPerRevolution);

    }

1 个答案:

答案 0 :(得分:1)

你的问题仍然令人困惑,但比以前更清楚。

看起来你有一个可以驱动转盘的步进电机。电机需要200步才能旋转一圈,但需要8000步才能将转盘旋转一圈。

从某种意义上说,重要的是数字8000.要使表暂停,您需要将8000分成相等的部分,因为它看起来像您尝试过的那样。但你错放了}

void loop() {
    int noi=20;// set the no of images here
    for(int i=0;i<=noi;i++){
        delay(8000/noi);
    } <<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVE
    Serial.println("clockwise");
    myStepper.step(stepsPerRevolution);

} 

void loop() {
    int noi=20;// set the no of images here
    for(int i=0;i<=noi;i++){
        delay(enough_delay_to_take_image);  // or trigger image here?
        Serial.println("clockwise");
        myStepper.step(8000/noi);
    }   
} 

stepsPerRevolution = 200唯一重要的地方在于计算移动的速度,以及myStepper.setSpeed(60);。你真的希望桌子快速移动吗?它可能会导致物体摇晃太多。

      myStepper.setSpeed(1);

会导致图像间的移动需要3秒钟。如果那太慢了,

      myStepper.setSpeed(3);

会导致图像间的移动需要1秒钟。