Серва гудит.

uscr
Offline
Зарегистрирован: 17.08.2012

Здраввствуйте. Сервомотор Micro Servo SG90 подключён к vin, gnd и 11 пину arduino UNO. Есть джойстик (+5, gnd, A0), его показания отображаются на серву. Вопрос: если серва шумит - это нормально? Шуметь она начинает пр  возвращении джойстика в среднее положение из любого другого, и шумит при повороте джойстика в крайнее ненулевое положение. Шумит около 5-10 секунд, потом прекращает. Вал заметно не дёргается во время шума.

"Дребезг" джойстика убрал - это вижу в консольном выводе (цифры бегут действительно только тогда, когда двигаю джойстик). Кстати, мой метод удаления "дребезга" тоже требует критики. Вот код:

 

#include <Servo.h> 

Servo myservo; 

int potpin = 0;
int val;

int x = 0;
int lastx = 0;

void setup() {
  Serial.begin(9600);
  myservo.attach(11);
}

void loop() {
  x = analogRead(0);
  if ( x != lastx ) {
    if ( (lastx-5 > x) or (lastx+5 < x) ) { 
      Serial.print("X: ");
      Serial.println(x);
      Serial.println("");
      lastx = x;
      if ( x > 1000 ) { x = 1000; }
      myservo.write(map(x, 0, 1000, 0, 179));
    }
  }
  delay(100);
}

 

uscr
Offline
Зарегистрирован: 17.08.2012

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

leshak
Offline
Зарегистрирован: 29.09.2011

 Это нормально. Внутри сервы - тоже стоит потенциометр. Которым она определяет свое текущие положение. Если оно отличается от того что "скомандовали" в виде PWM - доворачивает в нужноую сторону. И этот потенциометр -  тоже "шумит". Вот она и совершат "микро-микро-движения".

Если это "мешает-раздражает", можно програмно, если видите что с джостика какое-то время не меняется сигнал (или меняется меньше какой-то дельты) - делать серве detach - это ее выключит. И "жужать" она перестанет. А когда нужно будет ее повернуть - опять делаете attach.

Но.... раз вы ее выключите, то сопротивлятся внешним помехам - она перестанет. Если на ней висит какой-то груз - он может ее "провернуть". Если же для удрежания позиции ей не требуется прикладывать усилия - смело можно выключать (detach). Еще и на электричестве съекономите :)

leshak
Offline
Зарегистрирован: 29.09.2011

 

uscr пишет:

Кстати, мой метод удаления "дребезга" тоже требует критики.

Кстати - особо не требует. Работает - да и ладно.

Ну разве проверка в 18-то строке - лишняя. Не мешает, но и смысла не имеет. Она является частным случаем следующей проверки. При х==lastx условие в 19-той строке никогда выполнится не сможет. Следовательно проверять в 18-той строки - лишняя работа.

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

Ну и 19-то строке можно слегка более понятной проверку сделать if(abs(x-lastx)>5)

Но... это все уже сугубо потому что вы сказали "требует". Без вашего требования - особо придиратся тут не к чему.

P.S. Ну если уж докапыватся, то еще delay глаз режет. Плохая штука это в реальных задачах. Нет, нет да по лбу и врежет. Тем более что не понятно нафига он тут вообще. Кроме как "давать тупняки" - пользы от него не видно.

Lakki
Offline
Зарегистрирован: 19.02.2015

Не стал создавать специальную тему, вопрос вот в чем. Пришли мне 2 китайских сервопривода MG946R скачал код (стандартный, вроде на всех ресурсах примерно одно и тоже) загрузил его, подключил серву услышил гул она дернулась и встала, вал вроде не вращался или я просто незаметил. Попытки сменить код ни к чему не привели, разобрал ее смотрю она стоит в крайнем положении и вращению мешает ограничитель, а в обратную сторону она не вращается только вправо. Вытащил среднюю шестеренку и стал подавать питание сам двигатель вращается при подаче питания и потом встает. Как я понял сигнал который идет с ардуино серва не воспринимает. Нашел одну статью в интернете где описано что сервоприводы с правым вращением надо переделать перепаять мстами провода идущие к мотору и потенциометру. Может у меня такая же проблема и серву переделать надо, или может как то програмно можно это сделать?

vvadim
Offline
Зарегистрирован: 23.05.2012

Я не встречал серв с правым или левым вращением, оказывается есть такие...

http://arduino.ru/forum/obshchii/prezhde-chem-sprosit-pro-servomashinku-...

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

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

Vладимир
Offline
Зарегистрирован: 27.01.2015

не по теме просто вспомнилось .а ёщё с помощью одной сервы можно управлять другой (режим копира)простой перекомутацией контролирующих потенциометров 

Lakki
Offline
Зарегистрирован: 19.02.2015

Смена полярности результата не принесла, еще конструктив немного смущает шестеренки некоторые клинят. Вообще на мысль о неправильной полярности натолкнула вот эта статья http://habrahabr.ru/post/167441/. Хотел уточнить а как правильно подключать серву от внешнего БП  http://www.cyberforum.ru/attachments/379601d1395508969  вот так? есть аккумулятор на 6 вольт я подсоединял питание сервы к нему а управление на ардуино смотрю тут еще минус надо вместе соединить? Соединить так как на схеме? стабилитрона и конденсаторов нет, но наверно если используется акумулятор 6в то стабилитрон не обязательно? Собственно почему спрашиваю 1 серва при таком подключении задымила. причем задымила именно когда минусы вместе объеденил. :) теперь вместо одной сервы просто двигатель.