2014-12-22 3 views
0

Я должен останавливать шаговый двигатель определенное количество раз (для одного полного вращения) с задержками в качестве параметров остановки. Предположим, что мое требование - остановить двигатель 20 раз, чтобы значение задержки было равномерно распределено между этим числом (20) для полного поворота. Я использовал петлю для этих остановок (20), но я получаю значения более 20. Ниже приведен код для ардуино, где 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); 

    } 
+0

Непонятно, что вы хотите сделать. Пожалуйста, переформулируйте вопрос. Прямо сейчас, цикл() задерживается на 8 секунд, затем один раз поворачивает двигатель. Переменная 'noi' ничего не делает. – UncleO

+0

На самом деле мы создали платформу, которая будет вращаться в соответствии с шагами шагового двигателя. Мы будем держать объект на этой платформе и делать образы (20) того же, вращая его 20 раз (или любое число), чтобы покрыть полные 360 градусов , Как я должен установить значение задержки, чтобы охватить всего 360 градусов для 20 изображений. – user3327290

ответ

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 секунды.

 Смежные вопросы

  • Нет связанных вопросов^_^