Шаговый двигатель вращается неожиданно медленно
Я хочу управлять шаговым двигателем с помощью ESP32 и USB-подключения. Кажется, мне сложно понять, почему шаговый двигатель работает так медленно. Подозреваю, что это связано с тем, что питание на двигатель каким-то образом подаётся через плату ESP32.

Используя эту настройку и осторожно используя очень консервативные настройки тока на TMC2209 (примерно 50–100 мА), шаговый двигатель вращается очень медленно.
Наблюдения:
- При использовании внешнего источника питания двигатель вращается, как и ожидалось, довольно быстро.
- Когда я отключаю/подключаю питание 20 В от платы питания PD к TMC2209, он снова вращается в соответствии со скоростью внешнего источника питания после первоначального медленного вращения.
- подача питания/заземления на контакты MS1/MS2 не оказывает никакого влияния на это
Аппаратное обеспечение)
- Стандартная плата ESP32 devkit с cp2101
- tmc2209 — это V3 (с дурацкими неправильными маркировками) отсюда
- питание — плата триггера PD с AliExpress (кажется, обеспечивает стабильные 20 В)
- переменный понижающий преобразователь — это это
Программное обеспечение) Для библиотеки TMC2209 я использую этот пример скетча с использованием одного кабеля UART.
Вопросы)
- Почему двигатель вращается быстрее при использовании внешнего источника питания (подключенного непосредственно к TMC2209)?
- Какой дизайн был бы лучше или что можно улучшить в этой установке?
- Как не сжечь больше плат ESP32 / драйверов шаговых двигателей?
Этот код, из примеров
#include <TMC2209.h>
// Этот пример не будет работать на платах Arduino без портов HardwareSerial,
// такие как Uno, Nano и Mini.
//
// Более подробную информацию см. в этой ссылке:
// https://www.arduino.cc/reference/en/language/functions/communication/serial/
//
// Чтобы заставить эту библиотеку работать с этими платами, обратитесь к этому примеру библиотеки:
// примеры/Однонаправленная связь/Программный последовательный порт
HardwareSerial & serial_stream = Serial2;
const int TX_PIN = 17;
const int RX_PIN = 16;
const long SERIAL_BAUD_RATE = 115200;
const int32_t RUN_VELOCITY = 10000;
const int32_t STOP_VELOCITY = 0;
const int RUN_DURATION = 2000;
const int STOP_DURATION = 1000;
// текущие значения могут потребоваться уменьшить, чтобы предотвратить перегрев в зависимости от
// конкретное напряжение двигателя и источника питания
const uint8_t RUN_CURRENT_PERCENT = 100;
// Создать экземпляр TMC2209
TMC2209 stepper_driver;
bool invert_direction = false;
void setup()
{
// stepper_driver.setup(serial_stream);
stepper_driver.setup(serial_stream, SERIAL_BAUD_RATE, TMC2209::SERIAL_ADDRESS_0, RX_PIN, TX_PIN);
stepper_driver.setRunCurrent(RUN_CURRENT_PERCENT);
stepper_driver.enableCoolStep();
stepper_driver.enable();
}
void loop()
{
stepper_driver.moveAtVelocity(STOP_VELOCITY);
delay(STOP_DURATION);
if (invert_direction)
{
stepper_driver.enableInverseMotorDirection();
}
else
{
stepper_driver.disableInverseMotorDirection();
}
invert_direction = not invert_direction;
stepper_driver.moveAtVelocity(RUN_VELOCITY);
delay(RUN_DURATION);
}
@user2305193, 👍-1
Обсуждение1 ответ
Действительно, это была проблема со значением по умолчанию.
stepper_driver.setMicrostepsPerStep(1);
или
stepper_driver.setMicrostepsPerStep(8);
Проблема решена. Не уверен, где именно в библиотеке находится строка кода, которая инициализирует MicrostepsPerStep на 256, что обеспечивает чрезвычайно точное, но медленное движение. Возможно, это связано с версией tmc2209 или tmc2209, которую я использую.
- esp32, platformio A fatal error occurred: Packet content transfer stopped (received 8 bytes) *** [upload] Error 2
- Драйверы для чипа последовательного порта CH9102X
- Контакты RX и TX на esp32
- Как выбрать альтернативные контакты I2C на ESP32?
- Как я могу использовать степпер для определенной степени?
- ESP32 - "Детектор Браунаута был активирован" при запуске Wi-Fi
- Как преобразовать форматированный оператор print в строковую переменную?
- Питание esp32cam от аккумулятора
Честно говоря, скорее всего, это как-то связано со значениями библиотеки по умолчанию, поскольку при правильной инициализации вращается медленно. Но если сбросить питание, то работает. Правда, это не объясняет, почему он работает с внешним источником питания с тем же напряжением, что и при запуске..., @user2305193