Помогите с сервоприводом

Добрый день. Нужна помощь вот в каком вопросе.

Есть шаговик, управляю без digitalWrite, напрямую. Иначе задержка и нужных оборотов не набрать. Условно так:

void setup(){
	pinMode(10, OUTPUT); 
}
 
void loop(){
	PORTB |= (1<<2);
	delayMicroseconds(1000);
	PORTB &= ~(1<<2);
}

Поменяли на сервопривод, вот такой iHSS57-36-20
и работать перестало (
Если поставить digitalWrite - крутит нормально, но медленно. Ставишь вывод порт - просто не реагирует, при этом другие шаговики (простые без енкодеров) на соседних пинах работают.

Разница во времени работы digitalWrite около 20 мкс. При 1000 мкс задержки разницы с прямой записью заметить трудно.

1000 мкс условно и там не один шаговик.
писать в порт - мера вынужденная, digitalWrite не справляется.
да и просто интересно почему не работает ))

А что, шаговик и серво это одно и то же?

ну по сути он называется только сервопривод, по факту шаговик со встроеным драйвером и энкодером.

Ну так сравнить, что за драйвер у первого двигателя, как управляется новый…

у первого самый обычный tb6600
у второго (псевдо серво)


встроенный

Возможно, новый двигатель не такой “шустрый”, не успевает.
Для проверки, сразу пoсле записи в порт, добавьте delayMicroseconds(10);

PORTB |= (1<<2);
delayMicroseconds(1000);
PORTB &= ~(1<<2);
delayMicroseconds(10);

это плохо?

Спросил Perplexity, получил ответ который вполне похож на правду.

`

Функция digitalWrite генерирует “стандартный” фронт, который подходит большинству драйверов. Он дольше и “мягче”, чем портовые транзакции, создавая не мгновенный, а более протяжённый фронт.
При прямом управлении портом фронты не только быстрые, но и напряжение/ток может быть недостаточным для “прокачки” входной оптопары драйвера iHSS57. Особенно если она рассчитана на подтяжку к +5/24В и ожидает не столько изменения фронта, сколько определённого уровня мощности в цепи. Так работают многие промышленные драйверы для оптопар.

`

В новом моторе действительно входы через опторазвязку.
Пока видится вариант подключить через доп. транзистор.

UPD: Посмотрел код digitalWrite нашел интересный коммент

// If the pin that support PWM output, we need to turn it off
// before doing a digital write.

и дальше

if (timer != NOT_ON_TIMER) turnOffPWM(timer);

у 10 пина как раз ШИМ. Попробую перевесить этот мотор на другой.

)))))

Бред какой! У tb6600 так же на входе оптроны стоят.

У iHSS57-36-20 дикий микрошаг- до 51200(при 6400 у tb6600 ) Может поставить такой же как и у старого?

конечно поставлены одинаковые, крутит медленно как раз из-за задержки которую дает digitalWrite

ну это нейросеть, можно простить, идея то понятна

Ну да. Никакой разницы по фронтам не можт быть.

А вы уверены? По паспорту частота у iHSS57-36-20 до 250кГц супротив 100 у tb6600. Что то у вас явно не так с микрошагом.

там так же выставляется свичами значение.
плюс другие шаговики тормозят как только появляется digitalWrite в любом месте loop

Не верю! ((с) Станиславский)
digitalWrite выполняется 5-7 мкс, при задержке 1000 мкс никакой разницы быть не может.
И совет на будущее: если хотите, чтобы Вас не обвиняли во вранье, приводите описакние именно для того кода, который помещаете в сообщение, ибо очень большое подозрение, что “не роаботает” у Вас один код, а процитировали Вы совершенно другой. Тем более, что “соседние пины” в приведенном Вами коде не фигурируют.

А у них превалирующее значение перед настроенными через RX/TX?

Не верите чему именно?
Что можно отдельно создать скетч, и на нем проверить как работает а как нет?

Мы тут не обсуждаем как что лучше в порт или digitalWrite для большого скетча.
Мы тут обсуждаем почему одно работает, а другое нет в конкретном скетче на 9 строк.

И про вранье как то неприятно. В чем именно я по Вашему солгал?