#include <Arduino.h>
const byte STEP_PIN = 4; // PUL+ на TB6600, STEP на A4988 у Wokwi
const byte DIR_PIN = 3; // DIR+ на TB6600
const int STEPS_PER_REV = 200; // Повний крок: 1,8° на крок
const unsigned int PAUSES_US[] = {6000, 3000, 1500}; // Менша пауза — швидше
void stepOnce(unsigned int pauseUs) {
digitalWrite(STEP_PIN, HIGH); // Короткий імпульс — один крок
delayMicroseconds(10);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(pauseUs);
}
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
Serial.begin(115200);
}
void loop() {
for (byte s = 0; s < 3; s++) {
Serial.print("Pause between steps, us: ");
Serial.println(PAUSES_US[s]);
for (int i = 0; i < STEPS_PER_REV; i++) {
stepOnce(PAUSES_US[s]);
}
delay(1000);
}
}
Очікуваний результат
Пауза 6000 мкс — оберт за 1,2 с, 3000 — за 0,6 с, 1500 — за 0,3 с.
Перевір себе
Оберти за хвилину = 60 000 000 / (200 × пауза в мкс). Для 1500 мкс — 200 об/хв.
Що можна змінити
Додай значення 1000 у масив і зміни 3 на 4 у циклі.
Якщо не працює
Усі оберти однакові — перевір, що stepOnce() отримує PAUSES_US[s].
2. Плавний розгін
Ротор має вагу. Якщо одразу дати високу частоту, він не встигає за полем і пропускає кроки. Тому починаємо повільно й з кожним кроком скорочуємо паузу, а перед фінішем так само гальмуємо.
Заміни код скетчем кроку 2.
Запусти симуляцію.
Стеж за стрілкою на старті й фініші.
Підключення
Контакт
Куди з’єднати
Uno D4
A4988 STEP
Uno D3
A4988 DIR
A4988 RESET
A4988 SLEEP
A4988 VDD
Uno 5V
A4988 GND
Uno GND
A4988 2B і 2A
Двигун A− і A+
A4988 1A і 1B
Двигун B+ і B−
Файли для Wokwi
Відкрий новий Arduino Uno. Заміни sketch.ino і diagram.json файлами кроку. Бібліотеки не потрібні. Натисни ▶.
#include <Arduino.h>
const byte STEP_PIN = 4; // PUL+ на TB6600, STEP на A4988 у Wokwi
const byte DIR_PIN = 3; // DIR+ на TB6600
const int STEPS_PER_REV = 200; // Повний крок: 1,8° на крок
const unsigned int START_US = 6000; // Повільний старт
const unsigned int RAMP_US = 25; // На скільки коротшає пауза з кожним кроком
unsigned int fastUs = 1500; // Найкоротша пауза на повній швидкості
void stepOnce(unsigned int pauseUs) {
digitalWrite(STEP_PIN, HIGH); // Короткий імпульс — один крок
delayMicroseconds(10);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(pauseUs);
}
void moveSmooth(long steps) {
digitalWrite(DIR_PIN, steps > 0 ? HIGH : LOW);
long total = abs(steps);
for (long i = 0; i < total; i++) {
long nearest = min(i, total - 1 - i); // Відстань до старту або фінішу
long pauseUs = START_US - nearest * RAMP_US;
if (pauseUs < (long)fastUs) {
pauseUs = fastUs;
}
stepOnce(pauseUs);
}
}
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
Serial.begin(115200);
}
void loop() {
Serial.println("Smooth: 4 turns forward");
moveSmooth(4L * STEPS_PER_REV);
delay(1000);
Serial.println("Smooth: 4 turns back");
moveSmooth(-4L * STEPS_PER_REV);
delay(1000);
}
Очікуваний результат
Стрілка рушає повільно, розганяється, 4 оберти, плавно зупиняється. Потім 4 оберти назад.
Перевір себе
Розгін триває (6000 − 1500) / 25 = 180 кроків.
Що можна змінити
RAMP_US: 50 — коротший розгін, 10 — довший.
Якщо не працює
Двигун одразу мчить без розгону — перевір START_US більший за fastUs.
3. Шукаємо межу швидкості
Скетч з розгоном пробує дедалі коротші паузи: від 3000 до 650 мкс. У Wokwi двигун ідеальний, а справжній на якійсь швидкості почне гудіти й пропускати кроки.
Заміни код скетчем кроку 3.
Запусти симуляцію.
Стеж за числами в моніторі.
Підключення
Контакт
Куди з’єднати
Uno D4
A4988 STEP
Uno D3
A4988 DIR
A4988 RESET
A4988 SLEEP
A4988 VDD
Uno 5V
A4988 GND
Uno GND
A4988 2B і 2A
Двигун A− і A+
A4988 1A і 1B
Двигун B+ і B−
Файли для Wokwi
Відкрий новий Arduino Uno. Заміни sketch.ino і diagram.json файлами кроку. Бібліотеки не потрібні. Натисни ▶.