Запутанная реакция степпера на увеличение 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 В.
Итак, почему, когда я увеличиваю задержку, она работает быстрее? Это какая-то проблема с тактированием/синхронизацией?
@DrBwts, 👍0
1 ответ
Лучший ответ:
При использовании dt = 500
вы получаете один шаг в миллисекунду. Вероятно, это слишком быстро для комбинации двигатель/драйвер. Когда привод пытается выполнить следующий шаг, пока предыдущий не будет полностью выполнен валом двигателя (что требует некоторого времени из-за инерции валов), магниты будут смещены и ток катушки текущего шага не приведет к правильному выполнению. вращение вала. Некоторые импульсы случайно совпадают с положением вала двигателя и могут привести к правильному шагу. Таким образом, двигатель пропускает часть импульсов из-за своей инерции. Увеличение напряжения увеличит силу катушек двигателя, которые приводят в движение вал. Таким образом, можно легче преодолеть описанные проблемы (вал движется быстрее за счет силы одного импульса, чем раньше)
Увеличение до dt = 1000
дает двигателю достаточно времени для выполнения каждого шага. Вы не теряете шагов, потому что магниты и катушки двигателя всегда выравниваются правильно.
- Шаговый двигатель не работает с платой A4988
- Шаговый двигатель работает медленно при чтении с датчика MPU 6050
- Справка по библиотеке AccelStepper - Одновременное управление двигателем
- Как позволить шаговому двигателю вращаться постоянно?
- Неодновременное управление несколькими шаговыми двигателями
- Двигатель не вращается плавно (даже на высокой скорости)
- Как правильно использовать микрошаговый драйвер с шаговым двигателем более низкого напряжения
- arduino 28BYJ-48 stepper только жужжит, не вращается