Сервопривод можно перемещать только с шагом в пару градусов

У меня есть сервопривод Feetech FS5323M с примером кода Sweep с сайта Arduino, он работает нормально, поворачивается от 0 до 180 градусов и обратно, как и ожидалось.

Проблема возникает, когда я пытаюсь установить положение сервопривода. Я добавил простой servo.write(90); в настройки для сброса положения сервопривода, но это не сработало (writeMicroseconds(1500); также не удалось) .

Покопавшись немного, я обнаружил, что могу повернуть сервопривод только на пару градусов от его текущего физического положения.

Если сервопривод находится на 140 градусов, я могу перемещать его вперед и назад только до 7 градусов, значение больше этого приведет к тому, что сервопривод останется в своем текущем положении. Поэтому, если я хочу переместить его на 180 градусов, я должен сделать цикл и перейти к этому положению с шагом 1-7 градусов (с задержкой = 15 * градус).

Я подключил к цепи внешнее питание 2А и заземлил. Это не решило проблему. Схема очень простая, просто сервопривод подключен к выводу 3, больше ничего. Я также попытался добавить конденсатор 300 мкФ между питанием и землей.

Обновление 1: Я проверил контакты 9 и 10, и то же самое. К сожалению, у меня нет возможности проверить это на какой-либо другой плате, потому что у меня есть только одна, то же самое касается сервопривода. Я загрузил пример развертки с размером шага 10, сервопривод не двигался и даже не дергался. Я пробовал как с задержкой 15, так и со 150.

Обновление 2: Я протестировал программу только с одним оператором servo.write(90);, но проблема не была решена. Я попробовал это в настройке, а затем в цикле, в обеих программах был только один оператор write.

, 👍-1

Обсуждение

Довольно интересно, происходит ли это на нескольких платах Arduino (или других контактах?), И происходит ли это на других сервоприводах (того же или другого типа)?, @Paul

начните с примера sweep ..... измените размер шага на 10 и загрузите новый код ..... он все еще терпит неудачу?, @jsotola


2 ответа


0

Проблема возникает, когда я пытаюсь установить положение сервопривода. я добавил простой servo.write(90); в настройках, чтобы сбросить положение сервопривода, но это не сработало

Помните, что метод «setup()» в парадигме Arduino запускается только один раз после включения питания или сброса. Любой код в «setup()», который позиционирует сервопривод, будет немедленно перезаписан кодом, который позиционирует сервопривод в методе «loop()». Скорее всего это происходит так быстро, что сервопривод даже не отреагирует на строку "servo.write(90);".

,

0

По данным спецификации на этой странице. Если вы питаете его от Arduino, вполне вероятно, что он снижает напряжение питания Arduino настолько, чтобы выключить процессор, но вам может сойти с рук это для очень коротких перемещений.

,