Только недавно начал работать с шаговыми двигателями, в качестве двигателя использую Nema17 17he15-1504S 1,5А, 200 spr, 42N*cm. В качестве драйверов использовал несколько вариантов а4988, tb6600. Использую ИБП на 24В. Скетч до боли прост:
Хронология следующая, первое время использовал a4988, выставил ток в пол, тк было все равно на момент, опробовал код, писал свою библиотеку для дальнейшей работы. Со временем начал проектировать кинематику, возник спрос на момент, начал настраивать а4988, выставил ток на 1 ампер, чтобы и драйвер пощадить и движки сильно не греть на время испытаний. Момент безусловно вырос, но возникла проблемы, начался сильный тремор двигателя, пытался и программно фиксить и уменьшал скорость и ускорения. Изменял ток на а4988, в общем Vref выставил на 0.25-0.28В и тремор пропал, НО значение момента не устроило. Заменил драйвера на tv6600, выставил switch на 1А без микрошага, ситуация лучше не стала, двигатель безусловно замечательно показывает себя на больших оборотах, движение с постоянной скоростью как и торможение отрабатывает на 100 из 100 (но мне необходимо плавный разгон и торможение). Программу запускал как с ESP32, так и с Arduino Nano. Грешил что 3.3В логику ESP32 не видят драйвера, но картина при 5В логики была идентична, код банален до нельзя (взят из example). Где-то в интернете натыкался, что высокое напряжение нет смысла юзать при небольших оборотах, счел что может быть проблема как раз в ибп, собрал лиионки на 12.7 В, включил в схему, лучше не стало. В общем решил обратиться к людям знающим, опытным. Тема очень актуальна, фидбэк буду давать в течении нескольких часов.
C++:
#include <AccelStepper.h>
AccelStepper stepper(AccelStepper::DRIVER, 27, 26);
int pos = 2000;
void setup()
{
stepper.setMaxSpeed(1500);
stepper.setAcceleration(150);
}
void loop()
{
if (stepper.distanceToGo() == 0) {
pos= -pos;
stepper.moveTo(pos);
}
stepper.run();
}