Уважаемые пользователи форума.
К сожалению, с использованием различных скетчей двигатель так и не заработал.
Прошу вас, подскажите, где же моя ошибка? Поменял arduino (предыдущий, кстати, стал сильно греться и перестал прошиваться), решил использовать новый скетч:
Код: Выделить всё
const uint8_t pin_ENA = 5; // Вывод Arduino подключённый к входу драйвера ENA+.
const uint8_t pin_DIR = 6; // Вывод Arduino подключённый к входу драйвера DIR+.
const uint8_t pin_PUL = 7; // Вывод Arduino подключённый к входу драйвера PUL+.
// Вывод GND Arduino соединён с входами драйвера ENA-, DIR-, PUL-.
uint32_t f = 1000; // Определяем частоту следования микрошагов от 1 до 200'000 Гц.
// Чем выше частота, тем выше скорость вращения вала.
void setup(){ //
pinMode( pin_ENA, OUTPUT ); // Конфигурируем вывод Arduino как выход.
pinMode( pin_DIR, OUTPUT ); // Конфигурируем вывод Arduino как выход.
pinMode( pin_PUL, OUTPUT ); // Конфигурируем вывод Arduino как выход.
} //
//
uint32_t t = 1000000/f/2; // Определяем длительность импульсов t3 и пауз t4 в мкс.
//
void loop(){ //
// Готовимся к движению вала: //
digitalWrite( pin_ENA, 0 ); // Разрешаем работу двигателя.
delayMicroseconds(5); // Выполняем задержку t1 (см. график STEP/DIR).
digitalWrite( pin_DIR, 0 ); // Выбираем направление вращения.
delayMicroseconds(5); // Выполняем задержку t2 (см. график STEP/DIR).
// Поворачиваем вал на 2 оборота: //
for(int i=0; i<1600; i++){ // Выполняем 1600 проходов цикла (1 оборот = 800 тактов, 2 оборота = 1600).
digitalWrite( pin_PUL, 1 ); // Устанавливаем на выводе PUL состояние логической «1».
delayMicroseconds(t); // Выполняем задержку t3 (см. график STEP/DIR).
digitalWrite( pin_PUL, 0 ); // Устанавливаем на выводе PUL состояние логического «0».
delayMicroseconds(t); // Выполняем задержку t4 (см. график STEP/DIR).
} //
// Останавливаем вал удерживая его: // Двигатель не вращается, если на вывод PUL не поступают импульсы.
delay(5000); // Ждём 5 секунд. В это время двигатель остановлен, его вал удерживается.
// Меняем направление движения вала: //
digitalWrite( pin_DIR, 1 ); // Меняем логический уровень вывода DIR с 0 на 1.
delayMicroseconds(5); // Выполняем задержку t2 (см. график STEP/DIR).
// Поворачиваем вал на 2 оборота: //
for(int i=0; i<1600; i++){ // Выполняем 1600 проходов цикла (1 оборот = 800 тактов, 2 оборота = 1600).
digitalWrite( pin_PUL, 1 ); // Устанавливаем на выводе PUL состояние логической «1».
delayMicroseconds(t); // Выполняем задержку t3 (см. график STEP/DIR).
digitalWrite( pin_PUL, 0 ); // Устанавливаем на выводе PUL состояние логического «0».
delayMicroseconds(t); // Выполняем задержку t4 (см. график STEP/DIR).
} //
// Останавливаем вал без удержания: //
digitalWrite( pin_ENA, 1 ); // Запрещаем работу двигателя, отключаем токи в обмотках.
delay(5000); // Ждём 5 секунд. В это время двигатель отключен, его вал свободен.
} //
И вот такой скетч:
Код: Выделить всё
int PUL=7;
int DIR=6;
int ENA=5;
void setup() {
pinMode (PUL, OUTPUT);
pinMode (DIR, OUTPUT);
pinMode (ENA, OUTPUT);
}
void loop() {
for (int i=0; i<6400; i++) // Вперед на 5000 шагов
{
digitalWrite(DIR,LOW);
digitalWrite(ENA,HIGH);
digitalWrite(PUL,HIGH);
delayMicroseconds(50);
digitalWrite(PUL,LOW);
delayMicroseconds(50);
}
for (int i=0; i<6400; i++) // Назад на 5000 шагов
{
digitalWrite(DIR,HIGH);
digitalWrite(ENA,HIGH);
digitalWrite(PUL,HIGH);
delayMicroseconds(50);
digitalWrite(PUL,LOW);
delayMicroseconds(50);
}
}
При этом в обоих случая двигатель крепко стоял без движения (как мне показалось).
Однако изменение значений для ENA: с "digitalWrite( pin_ENA, 0)" на "digitalWrite( pin_ENA, 1)" (для первого скетча из этого поста), но положительного результата не добился, вращения у двигателя не случилось.
Отсутствие успеха конечно же укрепляет мое мнение о моих способностях... но и снова начинаю задумываться, исправны ли компоненты. Прошу подскажите, что может быть не так?