Как я могу использовать степпер для определенной степени?

Я новичок в использовании Arduino. Я использую приведенный ниже код, но не понимаю, что такое stepper.step(num) и STEPS в Stepper stepper(STEPS, 2,3,4, 5), и я хочу использовать степпер для определенной степени, и я не знаю, что я могу сделать. например, если я хочу использовать степпер на 40 градусов, что такое STEP и num?

#include <Stepper.h>

// изменить это на количество шагов на вашем двигателе
#define STEPS 100

// создаем экземпляр класса степпера, указав
// количество шагов мотора и его контакты
// прикреплен к
Stepper stepper(STEPS, 2,3,4,5);

// предыдущее чтение с аналогового входа
int previous = 0;

void setup()
{
  // установить скорость двигателя на 30 об/мин
  stepper.setSpeed(100);
}

void loop()
{
  // получаем значение датчика
  //целое значение = AnalogRead(0);

  // переместиться на количество шагов, равное изменению
  // показания датчика
  //stepper.step(val - предыдущий);
  stepper.step(25);
  delay(1000000);
 // stepper.step(-5);


  // запоминаем предыдущее значение датчика
  //предыдущий = val;
}

-------------------------- РЕДАКТИРОВАТЬ #2--- -------------------------- мой степпер первый в этой ссылке: https://grahamwideman.wikispaces.com/file/view/28byj48_models_table.jpg/ 538898220/604x265/28byj48_models_table.jpg ( Я думаю! ) и я не знаю, что это значит? -------------------------------------------------------- РЕДАКТИРОВАТЬ № 3----- ----------------------- Большое спасибо, я видел ссылку.

Угол шага (8 шагов: только внутренний двигатель): 5,625° (64 шага). за оборот)

и я запускаю этот код для 45deg :

#include <Stepper.h>

#define STEPS_PER_MOTOR_REVOLUTION 32   
#define STEPS_PER_OUTPUT_REVOLUTION 32 * 64  //2048
Stepper small_stepper(STEPS_PER_MOTOR_REVOLUTION, 2, 3, 4, 5);

int  Steps2Take;

void setup()   
{

}

void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{

  Steps2Take  =  STEPS_PER_OUTPUT_REVOLUTION / 8.11;          
  small_stepper.setSpeed(100);   
  small_stepper.step(Steps2Take);
  delay(10000);
}

потому что я понимаю, что каждый ход состоит из 2048 шагов, например, если я хочу иметь 1/2 хода, мне нужно иметь num=1024 ( 2048/2). хорошо, Итак, для 45 градусов это 1/8 оборота, поэтому я должен установить num = 2048/8. а например для 33 градусов что делать? Я думал число = 33 * 5,61 поэтому для 45 градусов я использую num=45*5.61 вы знаете, что у нас много операций с плавающей запятой, и я не уверен, что мы делаем это правильно. верно? Я немного запутался.

, 👍3


1 ответ


Лучший ответ:

4

stepper.step(num)используется для вращения двигателя с числовым шагом. т.е. num=25, тогда вызов stepper.step заставит ваш двигатель выполнять 25-шаговый.

ШАГИ — это количество шагов на оборот для вашего двигателя. Это будет зависеть от двигателя, который вы использовали. Дополнительную информацию можно найти здесь.

Вы должны проверить разрешение шагового двигателя. Самый распространенный шаговый двигатель имеет 200 шагов на оборот, что означает, что 1 шаг равен 360/200 = 1,8 градуса. Если вы попробуете Stepper.step(1), ваш двигатель повернется на 1,8 градуса.

Итак, в вашем случае, если вы уже узнали разрешение вашего шагового двигателя, просто выполните простую задачу преобразования:

const float resolution  = xx.xx; // поместите здесь разрешение вашего шага
int step_degree(float desired_degree){
    return (desired_degree/resolution);}

Это можно использовать, позвонив

stepper.step(step_degree(40)); //повернуть на 40 градусов.

--ИЗМЕНИТЬ--
Вы можете проверить эту ссылку, поскольку она (возможно) использует тот же шаговый двигатель (24BYJ48)

На основе 24BYJ48 техническое описание, имеет разрешение 5,625 градусов / 64 шага на оборот.

,

Вы имеете в виду, что 1 шаг равен 360/200 = 1,8 градуса?, @Mark Smith

https://grahamwideman.wikispaces.com/file/view/28byj48_models_table.jpg/538898220/604x265/28byj48_models_table.jpg, @Fazeleh

Я отправил ссылку, первая - мой степпер. но я не знаю какие они. Скажите, пожалуйста, какое у меня разрешение?, @Fazeleh

Я установил 200 и ожидаю, что с num=1 я должен увидеть 1,8 градуса, но это не так., @Fazeleh

Вместо того, чтобы комментировать, будет лучше, если вы отредактируете свой вопрос, чтобы другие могли его быстро заметить :), @dhimaspw

Спасибо, я редактирую, но не знаю, как правильно, @Fazeleh