Как определить минимальный и максимальный угол для дешевых сервоприводов?
У меня есть несколько дешевых сервоприводов KY66 (кажется, клон SG90).
Когда я поворачиваю их на 0°, сервопривод пытается двигаться и двигаться, но фактически не достигает 0°. Я читал, что они достигают конечной точки, но встроенный потенциометр показывает 0.
Изменив код и поэкспериментировав с углом, я обнаружил, что минимум для одного конкретного сервопривода составляет 25°.
Сейчас я пытаюсь понять, как Arduino может автоматически определить это значение. я пробовал
servo.write(0);
delay(3000);
int direction = servo.read();
и ожидал получить значение около 25, но вместо этого было 0. Таким образом, результат read()
выглядит не как фактическое чтение, а скорее как "последнее известное" заданное значение.
Я также пытался расслабить сервопривод, прежде чем читать:
servo.write(0);
delay(3000);
int direction = servo.read();
без лучшего результата.
Мне нравится вычислять минимальный и максимальный угол сервопривода
- потому что мне не нравится, когда сервопривод издает много шума (на самом деле это звучит нездорово)
- без необходимости пользователю самостоятельно разбираться и перепрограммировать Arduino.
Я знаю, что эти дешевые сервоприводы имеют только 3 контакта. 2 контакта предназначены только для питания, поэтому остался только 1 контакт.
Мои вопросы:
- Является ли вывод данных однонаправленным (выход ШИМ от Arduino к сервоприводу)?
- Удастся ли когда-нибудь реализовать то, что я хочу, без дополнительного оборудования?
- Как люди решают эту проблему? Имеют ли более дорогие сервоприводы лучшую калибровку для фактического перехода от 0 ° до 180 °, или они позволяют считывать показания потенциометра с помощью другого штифта?
@Thomas Weller, 👍2
2 ответа
Лучший ответ:
Является ли вывод данных однонаправленным (выход ШИМ от Arduino к сервоприводу)?
Как вы узнали, стандартные сервоприводы имеют только три контакта. И да, два из них обеспечивают землю и питание, а третий — однонаправленный сигнал.
Этот сигнал обычно представляет собой импульс длительностью от 1 мс до 2 мс, повторяющийся каждые 20 мс.
Поэтомуservo.read()
может возвращать только последнее значение, заданное servo.write()
.
Удастся ли когда-нибудь реализовать то, что я хочу, без дополнительного оборудования?
Я так не думаю.
Вы можете вставить шунт в линию электропередачи и измерить ток. Если он остается высоким в течение длительного времени, это означает, что сервопривод все еще питает свой двигатель. Но это может быть верно и по другим причинам, кроме собственного механического предела.
Как люди решают эту проблему? Имеют ли более дорогие сервоприводы лучшую калибровку для фактического перехода от 0° до 180°, или они позволяют считывать показания потенциометра с помощью другого штифта?
Поскольку сервоприводы используются как закрытая (под)система, я не думаю, что они открыты для считывания показаний их потенциометра. И даже если вы это сделаете, вы можете повлиять на внутреннюю работу сервопривода.
Несмотря на то, что я построил несколько моделей самолетов с конца 70-х годов и использовал разные сервоприводы, у меня нет никакого представления о калибровке дешевых или дорогих сервоприводов. IIRC в некоторых таблицах данных задокументировал диапазоны всего +/- 45 °.
Поэтому значения от 0
до 180
для servo.write()
— это просто сопоставление от 1 мс до 2 мс.
Короче говоря, я понятия не имею, как люди решают эту проблему.
Вы можете ограничить свой диапазон некоторыми "здоровыми" значениями или попросить пользователя помочь с калибровкой. Результаты калибровки можно сохранить в EEPROM, перепрограммировать Arduino не нужно.
Если вам нужно, чтобы голова робота поворачивалась от 0 ° до 180 °, рассмотрите возможность использования некоторого механизма, чтобы сервоприводу нужно было просто перемещаться, скажем, от 30 ° до 150 °. Так идут моделисты.
Я думаю, у вас есть два варианта: либо измерять и сохранять для каждого из них по отдельности, либо найти наихудший случай для всех и кодировать, исходя из этого.
Вам действительно нужно полное путешествие? Если вы используете сервопривод для толкания/тяги, конечные точки сервопривода в любом случае будут довольно слабыми.
Я хотел, чтобы робот смотрел влево и вправо, что составляет 0° или 180°.
Возможно, вы сможете компенсировать ограниченный угловой ход сервопривода соединением между ним и платформой камеры.
- Tower Pro MG996R сервопривод с высоким крутящим моментом 180 °, управляющий с помощью Arduino
- Как заставить сервопривод вращаться на угол больше 180°
- Пповорот сервопривода на 90 градусов
- Как синхронно управлять двумя сервоприводами?
- Ошибка "Servo" does not name a type
- Библиотека плавного сервоуправления
- Подключение Arduino к сервоприводу с внешним источником питания
- Мой сервопривод не работает плавно
На самом деле я хотел, чтобы робот смотрел влево и вправо, что составляет 0° или 180°. 25° это совсем немного. Но, кажется, мне нужно подумать об этом., @Thomas Weller