Добрый день подскажите пожалуйста. у меня есть плата расширения для шагового двигателя на плате есть переключатель шагов приложил фото и отметил как ими можно упровлять электроно через UNO или ее выпаять и какойто компонент подключить мне нужно что бы я мог включать на шаг 1/16.
Тебе нужно включить программно или механически? Если механически то подвигай белые клювики в нужное положение.
Добрый вечер мне их нужно включать програмно может мне нужно их выпаять и какойто компонент поставить
Просто у меня не получается управлять двигателем у меня есть код для ардуино к нему подключены две кнопки одно отвечает за быстрые обороты двигателя а вторая за медленные как на демонстрационом столике. но при нажатии медленых оборотов двигатель врашаеться медлено но его тресет что я уже не перепробывал и даже с помошью ИИ непомогает а вот когда я преключаю эти тумблеры на шаги 1/16 тогда медленое врашение работает плавно а вот быстроее нет
Нужно входы MSn драйвера завести на ардуину и подавать на них микроконтроллером HI/LO , выставляя микрошаг.
можно не выпаивать. Отключить и к 3 ногам уны подпаять к тем концам которые к микросхеме идут. Но проще по уарт одним проводом если драйвер TMC2209 - и программно и всего 1 нога.
драйвер у меня А4988 как это на нем сделать поможете? если не сложно по подробней просто навичок и не могу понять
На сколько отличаются обороты медленно и быстро? И программу можно увидеть?
Первый же рисунок показывает как подключить.
// Пины управления шаговиком
#define STEP_PIN 2
#define DIR_PIN 3
#define ENABLE_PIN 4
// Пины кнопок
#define NORMAL_BUTTON 6
#define SLOW_BUTTON 7
// Параметры для нормального режима
#define MAX_FREQUENCY_NORMAL 320 // Минимальное время между импульсами в мксек (максимальная скорость), уменьшено на 10%
#define MIN_FREQUENCY_NORMAL 1200 // Максимальное время между импульсами в мксек (минимальная скорость)
#define RAMP_UP_STEPS_NORMAL 40 // Количество шагов для плавного набора скорости
#define STEP_SIZE_NORMAL 10 // Шаг изменения частоты для плавности
// Параметры для медленного режима
#define MAX_FREQUENCY_SLOW 1944 // Минимальное время между импульсами в мксек (максимальная скорость), уменьшено на 160%
#define MIN_FREQUENCY_SLOW 7776 // Максимальное время между импульсами в мксек (минимальная скорость)
#define RAMP_UP_STEPS_SLOW 80 // Количество шагов для плавного набора скорости
#define STEP_SIZE_SLOW 5 // Шаг изменения частоты для плавности
// Логические флаги для рабочего режима
bool normal_is_running = false; // Флаг включения двигателя в нормальном режиме
bool slow_is_running = false; // Флаг включения двигателя в медленном режиме
bool is_ramping_up_normal = true; // Флаг набора скорости для нормального режима
bool is_ramping_up_slow = true; // Флаг набора скорости для медленного режима
// Частоты импульсов
unsigned int current_frequency_normal = MIN_FREQUENCY_NORMAL;
unsigned int current_frequency_slow = MIN_FREQUENCY_SLOW;
void setup() {
pinMode(NORMAL_BUTTON, INPUT_PULLUP); // Подтягиваем основную кнопку к питанию
pinMode(SLOW_BUTTON, INPUT_PULLUP); // Подтягиваем кнопку медленного режима к питанию
pinMode(STEP_PIN , OUTPUT); // Настраиваем пины управления
pinMode(DIR_PIN , OUTPUT);
pinMode(ENABLE_PIN , OUTPUT);
digitalWrite(ENABLE_PIN , HIGH); // Выключаем мотор, чтобы не грелся
}
void loop() {
int normal_button_state = digitalRead(NORMAL_BUTTON); // Состояние нормальной кнопки
int slow_button_state = digitalRead(SLOW_BUTTON); // Состояние кнопки медленного режима
if (!normal_button_state) { // Если нажали на нормальную кнопку
normal_is_running = !normal_is_running; // Переключить состояние двигателя
delay(50); // Задержка для предотвращения дребезга контактов
}
if (!slow_button_state) { // Если нажали на кнопку медленного режима
slow_is_running = !slow_is_running; // Переключить состояние двигателя
delay(50); // Задержка для предотвращения дребезга контактов
}
if (normal_is_running) { // Если включена нормальная кнопка
digitalWrite(ENABLE_PIN , LOW); // Включить двигатель
digitalWrite(DIR_PIN , HIGH); // Задать направление вращения
if (is_ramping_up_normal && current_frequency_normal > MAX_FREQUENCY_NORMAL + STEP_SIZE_NORMAL) {
// Набор скорости
current_frequency_normal -= STEP_SIZE_NORMAL;
} else {
// Достигли максимальной скорости
is_ramping_up_normal = false;
}
// Выполнить шаг
digitalWrite(STEP_PIN , HIGH);
delayMicroseconds(current_frequency_normal);
digitalWrite(STEP_PIN , LOW);
delayMicroseconds(current_frequency_normal);
} else if (slow_is_running) { // Если включена кнопка медленного режима
digitalWrite(ENABLE_PIN , LOW); // Включить двигатель
digitalWrite(DIR_PIN , HIGH); // Задать направление вращения
if (is_ramping_up_slow && current_frequency_slow > MAX_FREQUENCY_SLOW + STEP_SIZE_SLOW) {
// Набор скорости
current_frequency_slow -= STEP_SIZE_SLOW;
} else {
// Достигли максимальной скорости
is_ramping_up_slow = false;
}
// Выполнить шаг
digitalWrite(STEP_PIN , HIGH);
delayMicroseconds(current_frequency_slow);
digitalWrite(STEP_PIN , LOW);
delayMicroseconds(current_frequency_slow);
} else {
digitalWrite(ENABLE_PIN , HIGH); // Выключить двигатель
// Сбрасываем все флаги и параметры после выключения двигателя
normal_is_running = false;
slow_is_running = false;
is_ramping_up_normal = true;
is_ramping_up_slow = true;
current_frequency_normal = MIN_FREQUENCY_NORMAL;
current_frequency_slow = MIN_FREQUENCY_SLOW;
}
}
Программа написана кривенько.
digitalWrite(STEP_PIN , HIGH);
delayMicroseconds(current_frequency_slow);
digitalWrite(STEP_PIN , LOW);
delayMicroseconds(current_frequency_slow);
попробуй поменять в 2 местах.
digitalWrite(STEP_PIN , HIGH);
delayMicroseconds(20);
digitalWrite(STEP_PIN , LOW);
delayMicroseconds(current_frequency_slow);
и
digitalWrite(STEP_PIN , HIGH);
delayMicroseconds(20);
digitalWrite(STEP_PIN , LOW);
delayMicroseconds(current_frequency_normal);
Если что - 4мс хватить должно для переключения.
Да. По паспорту 1мкс. Но это с запасом, тем более что там вообще до 7 мс были.
Действительно. Давно я даташиты не открывал…
Что это значит?