Запутанная реакция степпера на увеличение delayMicroseconds()

Я следил за этим руководством, используя то же оборудование, драйвер TB6600, 42HS48-1704A (да, я думаю, так и должно быть) будет 42hs40, но на наклейке это не так) степпер, но я управляю через Nano.

Код

const int stepPin = 5; 
const int dirPin = 2; 
const int enPin = 8;

int num_steps = 200;
int dt = 1000;

void setup() {

  pinMode(stepPin, OUTPUT); 
  pinMode(dirPin, OUTPUT);
  pinMode(enPin, OUTPUT);
  digitalWrite(enPin, LOW);
  
}

void loop() {

  digitalWrite(dirPin, HIGH); // Позволяет двигателю двигаться в определенном направлении

  for(int x = 0; x < num_steps; x++) {

    digitalWrite(stepPin, HIGH); 
    delayMicroseconds(dt); 
    digitalWrite(stepPin, LOW); 
    delayMicroseconds(dt); 

  }

  delay(1000); // Задержка в одну секунду
  digitalWrite(dirPin, LOW); //Изменяет направление вращения

  for(int x = 0; x < num_steps; x++) {

    digitalWrite(stepPin, HIGH);
    delayMicroseconds(dt);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(dt);

  }

  delay(1000); 
}

Я добавил dt, чтобы контролировать скорость шага, но она ведет себя не так, как я ожидал.

Исходный код имеет dt = 500, для работы которого требуется 15 В & выполняет не совсем коренастое движение, но граничит с ним & чуть больше 1 оборота при num_steps = 2000

Я изменил на dt = 1000 & теперь движение стало более плавным и быстрым. делаю довольно много оборотов (слишком быстро, чтобы я мог сосчитать глазами), но если уменьшить num_steps = 200, это приведет к 1 обороту & теперь для работы требуется всего 9 В.

Итак, почему, когда я увеличиваю задержку, она работает быстрее? Это какая-то проблема с тактированием/синхронизацией?

, 👍0


1 ответ


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

2

При использовании dt = 500 вы получаете один шаг в миллисекунду. Вероятно, это слишком быстро для комбинации двигатель/драйвер. Когда привод пытается выполнить следующий шаг, пока предыдущий не будет полностью выполнен валом двигателя (что требует некоторого времени из-за инерции валов), магниты будут смещены и ток катушки текущего шага не приведет к правильному выполнению. вращение вала. Некоторые импульсы случайно совпадают с положением вала двигателя и могут привести к правильному шагу. Таким образом, двигатель пропускает часть импульсов из-за своей инерции. Увеличение напряжения увеличит силу катушек двигателя, которые приводят в движение вал. Таким образом, можно легче преодолеть описанные проблемы (вал движется быстрее за счет силы одного импульса, чем раньше)

Увеличение до dt = 1000 дает двигателю достаточно времени для выполнения каждого шага. Вы не теряете шагов, потому что магниты и катушки двигателя всегда выравниваются правильно.

,