Точность сервопривода MG995
- Войдите на сайт для отправки комментариев
Вс, 13/05/2018 - 15:20
Всем привет. Я новичок и у меня возникла проблема с которой не могу справиться уже несколько дней. От безысходности пишу помощи у опытных товарищей. Постараюсь максимально точно описать проблему.
Имеется:
- Arduino UNO
- Сервопривод MG995 (http://www.electronicoscaldas.com/datasheet/MG995_Tower-Pro.pdf)
- Блок питания 5/6/6.5/7V
Все это подключаю по схеме:

Опытным путем подобрал ширину импульса в микросекундах, соответствующую минимальному положению сервопривода (угол 0 градусов) и ширину импульса в микросекундах, соответствующую максимальному положению сервопривода (угол 180 градусов). 600 и 2170 соответственно.
Заливаю сл. скэтч и наблюдаю, как серва в начале устанавливается ровно в ноль, далее крутит ровно на 180 градусов, после чего возвращается ровно в ноль.
#include <Servo.h>
Servo servo;
#define servoPin 9
#define servoMinImp 600
#define servoMaxImp 2170
void setup() {
Serial.begin(9600);
servo.attach(servoPin, servoMinImp, servoMaxImp);
servo.write(0);
delay(3000);
}
void loop() {
delay(3000);
for (int pos = 1; pos <= 180; pos += 1) {
servo.write(pos);
Serial.println(servo.read());
delay(25);
}
delay(5000);
for (int pos = 180; pos >= 0; pos -= 1) {
servo1.write(pos);
delay(25);
}
}
И вроде бы все гуд, но... Модифицирую скэтч, для того, чтобы шаги от 0 до 180 были с задержкой в 3 секунды.
#include <Servo.h>
Servo servo;
#define servoPin 9
#define servoMinImp 600
#define servoMaxImp 2170
void setup() {
Serial.begin(9600);
servo.attach(servoPin, servoMinImp, servoMaxImp);
servo.write(0);
delay(3000);
}
void loop() {
delay(3000);
for (int pos = 1; pos <= 180; pos += 1) {
servo.write(pos);
Serial.println(servo.read());
delay(3000); // Установил задержку 3 секунды
}
delay(5000);
for (int pos = 180; pos >= 0; pos -= 1) {
servo1.write(pos);
delay(25);
}
}
Программа запускается, серва уходит в ноль, далее в цикле при установке угла 1-5 градусов она НЕ ДВИГАЕТСЯ и начинает движение только после 5 градусов и далее двигается вроде как нормально. Для меня важно настроить движение сервы ровно по градусу за один шаг, а получается, что первые 1-5 шагов от нуля она стоит на месте (гудит, трещит) и после чего с рывком продолжает движение. В крайнее положение серва не загоняется при нуле. Что уже только не пробовал, как только не выставлял servoMinImp и servoMaxImp.
Самое инстересное, что ИНОГДА серва работает корректно, тоесть с нуля она ровно по одному градусу шагает, а иногда нет. Кроме того, она не всегда после полного цикла 0-180 возвращается РОВНО на ноль (на глаз она останавливается как раз примерно на 5 градусах).
Ребята, подскажите куда копать, ну просто уже не знаю что делать. Мне крайне важна такая точность. Неужели эта серва такая неточная? Не верится. Пробовал напряжение на серву от 5-7 вольт подавать - результат одинаковый.
Если вам нужна предсказуемость - сразу смотрите на шаговые двигатели. Дешевые сервы (а тем более - дешевые клоны дешевых серв) - они не для точного поградусного движения. Более того - нет никакой гарантии, что они будут двигаться на разные градусы с одной и той же скоростью.
Если вам нужна предсказуемость - сразу смотрите на шаговые двигатели. Дешевые сервы (а тем более - дешевые клоны дешевых серв) - они не для точного поградусного движения. Более того - нет никакой гарантии, что они будут двигаться на разные градусы с одной и той же скоростью.
Хм.. Читал, вроде как цифровые сервы как раз используют для максимальной точности (а эта серва цифровая, судя по спецификации). Хотя, эту серву я покупал за 400 рублей. Есть в продаже сервы и за 2k, наверное точностью (в том числе) они и отличаются.
Т.е. это 100% серва такая неточная?
Точен конкретный экземпляр или неточнен - это можно сказать при испытаниях. Если вы брали ее на Ali, или у российского перепродавца, то гарантий никаких нет вообще. Можно и задорого купить фигню.
Но, по опыту могу сказать, что желание получить точные поградусные движения от сервы такого класса перетекает в длительный наладочный процесс, часто оканчивающийся разочарованием.
1. evildevel, если серва цифровая - какой смысл было подбирать опытным путем ширину импульса?
2. В приведенном Вами дэйташите черным по белому написано 120 градусов, почему Вы пытаетеся запустить ее на 180? Вы явно попадаете вне допустимого диапазона, где никто никаких гарантий не дает. Т.е. нет гарантий даже что ее вообще можно туда установить, не говоря уже о точности установки. Либо используйте в пределах 120, либо меняйте серву на ту, в которой гарантируется 180.
1. evildevel, если серва цифровая - какой смысл было подбирать опытным путем ширину импульса?
А как тогда? Объясните плз.
2. В приведенном Вами дэйташите черным по белому написано 120 градусов, почему Вы пытаетеся запустить ее на 180? Вы явно попадаете вне допустимого диапазона, где никто никаких гарантий не дает. Т.е. нет гарантий даже что ее вообще можно туда установить, не говоря уже о точности установки. Либо используйте в пределах 120, либо меняйте серву на ту, в которой гарантируется 180.
Да, странно. Вот тут http://www.towerpro.com.tw/product/mg995/ нет информации про угол поворота (зато есть инфа, что это цифровой сервопривод, "MG995 is a digital metal gear high torque servo"). Я так понял, что это сайт производителя. Тут http://arduino-diy.com/arduino-MG995-servo написано про 120 градусов, а вот тут http://www.avrobot.ru/product_info.php?products_id=1008 фигурирует цифра в 180 градусов. Кому верить?
1. evildevel, насколько я понимаю, цифровое устройство отличается именно тем, что оно управляется цифрой, притом, вполне однозначно, а не каким-либо параметром, который надо подбирать эксперментально.
2. Я никогда не интересовался этим сервоприводом. Лишь заглянул в pdf, который именно Вы выложили. Я сравниваю лишь Ваши требования к устройству с приведенной Вами же документацией. И обнаружил несоотсветствия. На что обратил Ваше внимание.
В цифровой серве с Али в обратной связи скорее всего стоит точно такой же шумящий потенциометр, как и в аналоговой. Так что точная подстройка на угол что в аналоговой, что в цифровой будет погуливать.
Товарищи, подскажите какие сервы подойдут для мойе задачи? Или варианты как можно адаптировать MG995 или SG90 для точной установки угла. Пока попробую шаговый двигатель, но мне кажется, что сервы - это то, что нужно, для решения моей задачи.
Мы задачи вашей не знаем. Может вы там высокоточный ЧПУ конструируете на SG90.
sadman41, задача простая. Крутим первую серву от 0 до 180 градусов в цикле и делаем замер с лазерного дальномера.
При каждом повотроте на один градус вычисляем радиан
далее на основе дистанции и радиана вычисляем координаты
Казалась бы, простая задача, но сервы ведут себя непредсказуемо и очень хотелось бы сделать точное устройство, которое делает поворот ровно на один градус в диапазоне 0-180.
Далее есть вторая серва, которая поворачивается после полного цикла первой сервы и на основе полученных данных будет вычисляться координата по Z оси, но это уже не столь важно, так как нужно на этом этапе решить вопрос с точностью повотрота сервоприводов.
Буду рад комментариям. Спасибо.
Есть у меня такая серва, внутри для обратной связи обычный резистор + люфы. Не получится из этой сервы точности. Так как нагрузки на привод практически нет, и большая угловая скорость не нужна с задачей легко справится 28byj48 передаточное отношение подобрать по вкусу. Ну или искать сервы с оптическим энкодером в качестве обратной связи.
1. evildevel, если серва цифровая - какой смысл было подбирать опытным путем ширину импульса?
А как тогда? Объясните плз.
2. В приведенном Вами дэйташите черным по белому написано 120 градусов, почему Вы пытаетеся запустить ее на 180? Вы явно попадаете вне допустимого диапазона, где никто никаких гарантий не дает. Т.е. нет гарантий даже что ее вообще можно туда установить, не говоря уже о точности установки. Либо используйте в пределах 120, либо меняйте серву на ту, в которой гарантируется 180.
Да, странно. Вот тут http://www.towerpro.com.tw/product/mg995/ нет информации про угол поворота (зато есть инфа, что это цифровой сервопривод, "MG995 is a digital metal gear high torque servo"). Я так понял, что это сайт производителя. Тут http://arduino-diy.com/arduino-MG995-servo написано про 120 градусов, а вот тут http://www.avrobot.ru/product_info.php?products_id=1008 фигурирует цифра в 180 градусов. Кому верить?
Смотря что конкретно приобрели, тому и верить. Брали оригинал - берите даташит производителя, и это всегда можно сделать через продавца, в т.ч. Если он конечно легально продает и оригинал. Брали у косоглазых/косоруких мастеров подделок - спрашивайте у них даташит, приличный китаец его точно также ОТДАЕТ вполне нормально.
По моему опыту с этими сервами с Алиэкспресса: поворот несколько больше 180*, мертвое время в заявленные 5мксек - выдерживается. Усилие на валу 10-15кг*см - соответствует. Что там конкретно получается у Вас - не знаю. У меня они все двигаются вполне плавно. Ровно на градус или иначе - не проверял ни разу, ибо мне было незачем. И вообще, позиционирование серв идет в микросекундах .. при чем тут ваши градусы .. делайте управление в попугаях сервы и будет вам щастье.. Вы ещё туда float напихайте..
Смотря что конкретно приобрели, тому и верить. Брали оригинал - берите даташит производителя, и это всегда можно сделать через продавца, в т.ч. Если он конечно легально продает и оригинал. Брали у косоглазых/косоруких мастеров подделок - спрашивайте у них даташит, приличный китаец его точно также ОТДАЕТ вполне нормально.
Логично. Спасибо за инфу.
По моему опыту с этими сервами с Алиэкспресса: поворот несколько больше 180*, мертвое время в заявленные 5мксек - выдерживается. Усилие на валу 10-15кг*см - соответствует. Что там конкретно получается у Вас - не знаю. У меня они все двигаются вполне плавно. Ровно на градус или иначе - не проверял ни разу, ибо мне было незачем. И вообще, позиционирование серв идет в микросекундах .. при чем тут ваши градусы .. делайте управление в попугаях сервы и будет вам щастье.. Вы ещё туда float напихайте..
В микросекундах конечно же тоже пробовал выставлять позицию. Результат тот же.
Мое мнение совпадает с мнением evgta: самое дешевое решение тут - шаговый мотор с редуктором. Почему с редуктором? Потому что все широкораспространенные у модельщиков NEMA XX имеют шаг некратный градусу. Соответственно - выводить его точно на градус можно через понижайку с соотв. коэффициентом. Если механизм садить на вал - никакие программные ухищрения не помогут.
Можно поискать моторы с кратными градусу шагами.
В качестве обратной связи нужны энкодеры с разрешением не менее 360 позиций на круг. В противном случае можно потенциально получить через час сканирования размазанную и искаженную картинку. Или же делать прецизионный механизм поворота датчика...
Моторы с интегрированными энкодерами на 1024 позиции начинаются от 150 баксов в забугорье...
Если серва гудит и потребляет ток - это значит что она достигла своего физического крайнего положения.
И оно, конечно, не совпадает с вашим програмным.
И вообще-то подобные сервы разрабатывались для радио игрушек где основное положение - колёса (рули, элероны) прямо,
то есть 90 градусов по вашему, и никогда не используются повороты 0-180 за их ненадобностью.
можно потенциально получить через час сканирования размазанную и искаженную картинку
Возникает вопрос, а как же 3D принтер часами печатает и ничего не размазывается?
Зачем энкодер? Установили в ноль и погнали.
Гоните, не запрещаю.
Если нужна гарантированная точность - требуется обратная связь. Если пофигу на пропуск шагов и их неравномерность на микрошаге - обратная связь не нужна.
гарантированная точность - требуется обратная связь
Тут не поспоришь.
у меня такая серва прорабола года полтора более менее нормально, потом резистор износился и пришлось ее переделать.
т.е. в долгосрочной перспективе току от нее, как уже здесь сказали, без внешнего энкодера точно не будет.
Гоните, не запрещаю.
Если нужна гарантированная точность - требуется обратная связь. Если пофигу на пропуск шагов и их неравномерность на микрошаге - обратная связь не нужна.
Концевик - тоже разновидность обратной связи.