Сервы дергаются и клинят

liosha
Offline
Зарегистрирован: 25.10.2012

Добрый день.

Я не так давно приобрел себе ардуино и решил сделать робота.

Но столкнулся с проблемой - сервы дергаются и в итоге вообще клинят в одну сторону.

Если причину дерганья я вроде понимаю, то почему клинят вообще не ясно.

Я снял это на видео чтоб было понятно о чем я говорю. 

Думаю с такой проблемой должны были сталкиваться те, кто делал паука или что-то подобное.

Прошу подсказать советом.

Видео на ютубе.

Дурачёк
Дурачёк аватар
Offline
Зарегистрирован: 25.11.2012

А в коде ты тупо даешь им положение?
Они в него приходят? или просто ползут до края?
Есть подозрение что в коде косяк, хотя бывают и проблеммы со стабильностью питания серв, но тут в упор непонятно чего ты от них хочешь и какими методами.

Вход сервы шим, когда она получает значения, она стабилизируется, когда вход молчит, она расслабленна.
Если значения приходят с большим интервалом, а серва под нагрузкой, то она может успеть убежать от значения, и будет дёргаться.

 

liosha
Offline
Зарегистрирован: 25.10.2012
#include <Servo.h>

const int balance = A0;
const int rBedro = A1; // Right bedro
const int lBedro = A2; // Left bedro
const int lKoleno = A3; // Left koleno
const int rKoleno = A4; // Right koleno
const int lStup = A5; // Left stupnya
const int rStup = A6; // Right stupnya

Servo balanceServo;
Servo rBedroServo;
Servo lBedroServo;
Servo lKolenoServo;
Servo rKolenoServo;
Servo lStupServo;
Servo rStupServo;

void setup()
{
	Serial.begin(9600);

	balanceServo.attach(balance);	// 1
	rBedroServo.attach(rBedro);		// 2
	lBedroServo.attach(lBedro);		// 3
	lKolenoServo.attach(lKoleno);	// 4
	rKolenoServo.attach(rKoleno);	// 5
	lStupServo.attach(lStup);		// 6
	rStupServo.attach(rStup);		// 7

	// Init
	balanceServo.write(85);
	rBedroServo.write(75);
	lBedroServo.write(75);
	lKolenoServo.write(23);
	rKolenoServo.write(155);
	lStupServo.write(120);
	rStupServo.write(120);
}

void loop()
{
}

Код выглядит так. Все что было еще, было закоментировано и я его удалил. В данный момент я пытаюсь вывести все сервы в такое положение, в котором мой "робот" будет стоять. Сервы если подключены 2, 3 - то приходят в нужное положение, если увеличивать их количество, то где-то на 5ти в нужное положение они вроде приходят, но начинают дергаться около него. И через какое-то время просто клинят в одну сторону.

То-есть сейчас я просто хочу чтоб сервы заняли определенное положение и замерли.  Нагрузки пока нет никакой - "робот" лежит. 

maksim
Offline
Зарегистрирован: 12.02.2012

Явный признак нехватки питания или точнее "кривого" питания. А счего вы взяли, что ваш блок питания на 1А? Подключите нормальный блок питания и проблема исчезнет.

liosha
Offline
Зарегистрирован: 25.10.2012

Блок питания на 1 ампер я покупал специально для ардуино. Продавцу так и сказал, мне нужен блок питания на 1 ампер. На самом блоке питания написано 1 ампер 12 вольт. Единственное что подключаю я его к сервам через такую штуку: Питание для макетной платы 5/3.3В  и сейчас только подумал что не знаю ее характеристик. Неужели эта плата не в состоянии потянуть 3 сервы? сейчас попробую запитать их напрямую от ардуино. Думаю от 3х серв ардуино не сгорит.

liosha
Offline
Зарегистрирован: 25.10.2012

Запитал 4 сервы от  ардуино, вроде не дергаются. Больше серв подключать к ардуино боязно. Подскажите тогда такую вещь, у меня блок питания на 12 вольт, как мне понизить напряжение до допустимого для серв? может их как-то попарно последовательно подключить? Хотя мне кажется будут помехи.

maksim
Offline
Зарегистрирован: 12.02.2012

Вот именно про эту штуку я и говорил, на ней стоит маленький стабилизатор на 5 вольт, миллиампер на 300 наверное, если не на 100. Так что от вашего блока питания на 1А без нормального стабилизатора или преобразователя  толку мало.

liosha
Offline
Зарегистрирован: 25.10.2012

ок, спасибо за помощ.