Точность сервопривода MG995

evildevel
Offline
Зарегистрирован: 13.05.2018
Всем привет. Я новичок и у меня возникла проблема с которой не могу справиться уже несколько дней. От безысходности пишу помощи у опытных товарищей. Постараюсь максимально точно описать проблему.
 
Имеется:
 
- Arduino UNO
- Блок питания 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 вольт подавать - результат одинаковый.
sadman41
Offline
Зарегистрирован: 19.10.2016

Если вам нужна предсказуемость - сразу смотрите на шаговые двигатели. Дешевые сервы (а тем более - дешевые клоны дешевых серв) - они не для точного поградусного движения. Более того - нет никакой гарантии, что они будут двигаться на разные градусы с одной и той же скоростью.

evildevel
Offline
Зарегистрирован: 13.05.2018

sadman41 пишет:

Если вам нужна предсказуемость - сразу смотрите на шаговые двигатели. Дешевые сервы (а тем более - дешевые клоны дешевых серв) - они не для точного поградусного движения. Более того - нет никакой гарантии, что они будут двигаться на разные градусы с одной и той же скоростью.

Хм.. Читал, вроде как цифровые сервы как раз используют для максимальной точности (а эта серва цифровая, судя по спецификации). Хотя, эту серву я покупал за 400 рублей. Есть в продаже сервы и за 2k, наверное точностью (в том числе) они и отличаются.

Т.е. это 100% серва такая неточная?

sadman41
Offline
Зарегистрирован: 19.10.2016

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

Но, по опыту могу сказать, что желание получить точные поградусные движения от сервы такого класса перетекает в  длительный наладочный процесс, часто оканчивающийся разочарованием. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

1. evildevel, если серва цифровая - какой смысл было подбирать опытным путем ширину импульса?

2. В приведенном Вами дэйташите черным по белому написано 120 градусов, почему Вы пытаетеся запустить ее на 180? Вы явно попадаете вне допустимого диапазона, где никто никаких гарантий не дает. Т.е. нет гарантий даже что ее вообще можно туда установить, не говоря уже о точности установки. Либо используйте в пределах 120, либо меняйте серву на ту, в которой гарантируется 180.

evildevel
Offline
Зарегистрирован: 13.05.2018

andriano пишет:

1. evildevel, если серва цифровая - какой смысл было подбирать опытным путем ширину импульса?

А как тогда? Объясните плз.

andriano пишет:

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 градусов. Кому верить?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

1. evildevel, насколько я понимаю, цифровое устройство отличается именно тем, что оно управляется цифрой, притом, вполне однозначно, а не каким-либо параметром, который надо подбирать эксперментально.

2. Я никогда не интересовался этим сервоприводом. Лишь заглянул в pdf, который именно Вы выложили. Я сравниваю лишь Ваши требования к устройству с приведенной Вами же документацией. И обнаружил несоотсветствия. На что обратил Ваше внимание. 

sadman41
Offline
Зарегистрирован: 19.10.2016

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

 

evildevel
Offline
Зарегистрирован: 13.05.2018

Товарищи, подскажите какие сервы подойдут для мойе задачи? Или варианты как можно адаптировать MG995 или SG90 для точной установки угла. Пока попробую шаговый двигатель, но мне кажется, что сервы - это то, что нужно, для решения моей задачи.

sadman41
Offline
Зарегистрирован: 19.10.2016

Мы задачи вашей не знаем.  Может вы там высокоточный ЧПУ конструируете на SG90.

 

evildevel
Offline
Зарегистрирован: 13.05.2018

sadman41, задача простая. Крутим первую серву от 0 до 180 градусов в цикле и делаем замер с лазерного дальномера. 

При каждом повотроте на один градус вычисляем радиан

rad=servoAngle*3.1415926535/180

далее на основе дистанции и радиана вычисляем координаты

x=dist*cos(rad);
y=dist*sin(rad);

Казалась бы, простая задача, но сервы ведут себя непредсказуемо и очень хотелось бы сделать точное устройство, которое делает поворот ровно на один градус в диапазоне 0-180.

Далее есть вторая серва, которая поворачивается после полного цикла первой сервы и на основе полученных данных будет вычисляться координата по Z оси, но это уже не столь важно, так как нужно на этом этапе решить вопрос с точностью повотрота сервоприводов.

Буду рад комментариям. Спасибо.

evgta
Offline
Зарегистрирован: 02.09.2016

Есть у меня такая серва, внутри для обратной связи обычный резистор + люфы. Не получится из этой сервы точности. Так как нагрузки на привод практически нет, и большая угловая скорость не нужна с задачей легко справится 28byj48 передаточное отношение подобрать по вкусу. Ну или искать сервы с оптическим энкодером в качестве обратной связи.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

evildevel пишет:

andriano пишет:

1. evildevel, если серва цифровая - какой смысл было подбирать опытным путем ширину импульса?

А как тогда? Объясните плз.

andriano пишет:

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 напихайте..

evildevel
Offline
Зарегистрирован: 13.05.2018

Arhat109-2 пишет:

Смотря что конкретно приобрели, тому и верить. Брали оригинал - берите даташит производителя, и это всегда можно сделать через продавца, в т.ч. Если он конечно легально продает и оригинал. Брали у косоглазых/косоруких мастеров подделок - спрашивайте у них даташит, приличный китаец его точно также ОТДАЕТ вполне нормально.

Логично. Спасибо за инфу.

Arhat109-2 пишет:

По моему опыту с этими сервами с Алиэкспресса: поворот несколько больше 180*, мертвое время в заявленные 5мксек - выдерживается. Усилие на валу 10-15кг*см - соответствует. Что там конкретно получается у Вас - не знаю. У меня они все двигаются вполне плавно. Ровно на градус или иначе - не проверял ни разу, ибо мне было незачем. И вообще, позиционирование серв идет в микросекундах .. при чем тут ваши градусы .. делайте управление в попугаях сервы и будет вам щастье.. Вы ещё туда float напихайте..

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

sadman41
Offline
Зарегистрирован: 19.10.2016

Мое мнение совпадает с мнением evgta: самое дешевое решение тут - шаговый мотор с редуктором. Почему с редуктором? Потому что все широкораспространенные у модельщиков NEMA XX имеют шаг некратный градусу. Соответственно - выводить его точно на градус можно через понижайку с соотв. коэффициентом. Если механизм садить на вал - никакие программные ухищрения не помогут.

Можно поискать моторы с кратными градусу шагами. 

В качестве обратной связи нужны энкодеры с разрешением не менее 360 позиций на круг. В противном случае можно потенциально получить через час сканирования размазанную и искаженную картинку. Или же делать прецизионный механизм поворота датчика...

Моторы с интегрированными энкодерами на 1024 позиции начинаются от 150 баксов в забугорье...

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Если серва гудит и потребляет ток - это значит что она достигла своего физического крайнего положения.
И оно, конечно, не совпадает с вашим програмным.
И вообще-то подобные сервы разрабатывались для радио игрушек где основное положение - колёса (рули, элероны) прямо,
то есть 90 градусов по вашему, и никогда не используются повороты 0-180 за их ненадобностью.

Modsley
Offline
Зарегистрирован: 14.01.2018

sadman41 пишет:

можно потенциально получить через час сканирования размазанную и искаженную картинку

 

Возникает вопрос, а как же 3D  принтер часами печатает и ничего не размазывается?

Зачем энкодер? Установили в ноль и погнали. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Гоните, не запрещаю.

Если нужна гарантированная точность - требуется обратная связь. Если пофигу на пропуск шагов и их неравномерность на микрошаге - обратная связь не нужна. 

Modsley
Offline
Зарегистрирован: 14.01.2018

sadman41 пишет:

гарантированная точность - требуется обратная связь

Тут не поспоришь. 

ВН
Offline
Зарегистрирован: 25.02.2016

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

т.е. в долгосрочной перспективе току от нее, как уже здесь сказали, без внешнего энкодера точно не будет. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

sadman41 пишет:

Гоните, не запрещаю.

Если нужна гарантированная точность - требуется обратная связь. Если пофигу на пропуск шагов и их неравномерность на микрошаге - обратная связь не нужна. 

Концевик - тоже разновидность обратной связи.