Почему сервопривод дергается arduino
Перейти к содержимому

Почему сервопривод дергается arduino

  • автор:

roboforum.ru

Серва дергается при включении (подачи питания)

Шестерни и колёса, тяги и тросики. Каркасы, скелеты .
Сообщений: 19 • Страница 1 из 21 , 2

Серва дергается при включении (подачи питания)

Ivon86 » 14 янв 2011, 12:06

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

Re: Серва дергается при включении (подачи питания)

Myp » 14 янв 2011, 12:08

ну да, при падаче питания серва дёргается.
это кагбы её нормальное состояние, у меня все 3 штуки так дёргаются.

при подаче импульсов управления она встаёт в нужное положение без проблем.

На вопросы отвечает Бригадир Телепатов!
Всё уже придумано до нас!

Re: Серва дергается при включении (подачи питания)

Ivon86 » 14 янв 2011, 12:26

мне почему то и в голову не пришло что это ее нормальное состояние

Re: Серва дергается при включении (подачи питания)

$ilent » 14 янв 2011, 14:31

А какая вообще разница дёргается она или нет. Да пусть хоть на 138° уезжает при подаче питания. Дай ей после этого команду повернуться на ноль и всё.

$ilent

Re: Серва дергается при включении (подачи питания)

=DeaD= » 14 янв 2011, 14:40

Вообще разница конечно же есть. Можно и механику повредить в конструкции от таких резких движений.
Проект [[Open Robotics]] — Универсальные модули для построения роботов

  • Сайт
  • ICQ

Re: Серва дергается при включении (подачи питания)

Grem » 14 янв 2011, 14:42

Дай ей после этого команду повернуться на ноль и всё.

В 0 разве сами не ставятся?

«There is nothing better than sliding down snow and flying through the air» (с) Shane McConkey .
Lieber ein Brett am Fuß als eins vorm Kopf, aber lieber ein Brett vorm Kopf als zwei am Fuß.

Grem Сообщения: 1530 Зарегистрирован: 16 май 2009, 12:50 Откуда: Россия прог. языки: Java, C

Re: Серва дергается при включении (подачи питания)

$ilent » 14 янв 2011, 14:45

С чего бы? Это тупое устройство, где бросили качалку в «прошлый раз» там и нашли при включении.
$ilent

Re: Серва дергается при включении (подачи питания)

avr123.nm.ru » 14 янв 2011, 14:53

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

Ivon86 писал(а): может кто салкивался с данной проблемой?

Если серва не цифровая то дерганье устраняется плавной подачей питания — полевик и RC цепочка в затвор + диод на разряд С при выключении.

  • Сайт
  • ICQ

Re: Серва дергается при включении (подачи питания)

$ilent » 14 янв 2011, 15:38

Усложнять схему нужно лишь при использовании всяких таймеров типа 555 серии, в противном случае проще добавить «три строчки» кода в программу.

$ilent

Re: Серва дергается при включении (подачи питания)

Radist » 23 фев 2014, 17:15

А тема-то актуальная. Итак, серва NXT900. Написал программу ее калибровки, занимаюсь исследованиями конкретной сервы. Середина у нее на 1500 мкс, один край не на 1000, а на 722 мкс, второй край не на 2000, а на 2300 мкс. Однако эффект из названия темы налицо. Эксперименты показали следующее:
1. Если серва стоит посередине (моей найденной), и импульсы идут сразу при включении, то серва немного отклоняется в одну сторону (всегда в одну и ту же), потом становится посередине.
2. Если серва стоит не посередине, и импульсы идут сразу при включении, то серва немного отклоняется в одну сторону (всегда в одну и ту же), потом становится посередине.
3. Если серва стоит посередине (моей найденной), и импульсы идут не сразу при включении (пауза секунда), то серва немного отклоняется в одну сторону (всегда в одну и ту же), затем пауза секунда, потом становится посередине.
4. То же самое при другом начальном положении сервы.
То есть серва всегда при включении поворачивается на небольшой угол в одну сторону. Если дергать питанием, то можно загнать серву к одному краю. Гуглил кто как борется, программный способ не нашел, нашел способ плавной подачи питания, но проверить его пока не могу. Так все-таки, это врожденный недостаток дешевой сервы или же кто-то смог побороть это явление?
ЗЫ. Импульсы генерю микроконтроллером.
ЗЫЫ. Изменил фузы с запуска +64мс на +4мс — угол уменьшился, но не исчез полностью. Это намекает, что сперва надо подавать импульсы, а потом питание, но электронику переделывать ради этого не хочется.

Radist Сообщения: 2241 Зарегистрирован: 01 июл 2009, 08:59 Откуда: Екатеринбург прог. языки: асемблер AVR

Re: Серва дергается при включении (подачи питания)

Myp » 23 фев 2014, 19:14

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

На вопросы отвечает Бригадир Телепатов!
Всё уже придумано до нас!

Re: Серва дергается при включении (подачи питания)

Radist » 25 фев 2014, 21:23

Мысль проверена. Подтянул сигнальный к земле через 5 кОм — эффект не изменился.

Radist Сообщения: 2241 Зарегистрирован: 01 июл 2009, 08:59 Откуда: Екатеринбург прог. языки: асемблер AVR

Re: Серва дергается при включении (подачи питания)

solegs » 26 фев 2014, 23:56

У меня похожая ситуёвина, правда, не всегда связана с подачей питания — дёргаются и при инициализации (юсб)ком-порта прогой с компа, причём бывает и очень размашисто дёргаются. Пока вижу только один выход — делать подачу питания на сервы управляемым. Да, надо менять схему — вводить какой-нить ключ по питанию. Да, надо жертвовать одну ногу контроллера под это. Да, код увеличится. Но зато не будет, надеюсь, этих доставших дёрганий! ))

solegs Сообщения: 4 Зарегистрирован: 29 май 2013, 23:34

Re: Серва дергается при включении (подачи питания)

Radist » 27 фев 2014, 07:33

Мысль понятна. Проверю ее так: серву подключу через переходник, в котором провод питания пущу через тумблер. Меня смущает вот что: не будет ли через управляющий провод паразитного питания? Не сожгется ли таким образом нога МК?

Radist Сообщения: 2241 Зарегистрирован: 01 июл 2009, 08:59 Откуда: Екатеринбург прог. языки: асемблер AVR

Re: Серва дергается при включении (подачи питания)

solegs » 27 фев 2014, 19:50

Не сожгётся, если предохраниться ))) — поставить ограничительный резистор 1. 2кОм — и вуа-ля, нога не выгорит!

Да, ещё могут быть поблемы из-за проседания питания при запуске, надо тоже проверять. Оптимально — питать сервы вообще отдельным плюсом, мощным и стабильным. Земли только объединить с контроллером. Это тоже проверю, если задержка питания не даст желаемого результата.

Форум arduino.ua

Всем доброго времени суток.
Пожалуйста, помогите правильно прописать команду servo.detach();
Передатчик:

#include #include "nRF24L01.h" #include "RF24.h" RF24 radio(9, 10); byte address[][6] = ; //возможные номера труб byte potent0 = 0; // потенциометр на 0 аналоговом byte potent1 = 1; // byte transmit_data[2]; // массив, хранящий передаваемые данные void setup() < Serial.begin(9600); //открываем порт для связи с ПК radio.begin(); //активировать модуль radio.setAutoAck(0); //режим подтверждения приёма, 1 вкл 0 выкл radio.setRetries(1, 15); //(время между попыткой достучаться, число попыток) radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал radio.setPayloadSize(64); //размер пакета, в байтах radio.openWritingPipe(address[0]); //мы - труба 0, открываем канал для передачи данных radio.setChannel(0x5f); //выбираем канал (в котором нет шумов!) radio.setPALevel (RF24_PA_LOW); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS //должна быть одинакова на приёмнике и передатчике! //при самой низкой скорости имеем самую высокую чувствительность и дальность!! radio.powerUp(); //начать работу radio.stopListening(); //не слушаем радиоэфир, мы передатчик >void loop() < transmit_data[1] = map(analogRead(potent1), 0, 1023, 10, 164); // получить значение // в диапазоне 0..1023, перевести в 0..180, и записать на 1 место в массиве transmit_data[0] = map(analogRead(potent0), 0, 1023, 10, 164); radio.write(&transmit_data, sizeof(transmit_data)); // отправить по радио >
#include #include "nRF24L01.h" #include "RF24.h" #include RF24 radio(9, 10); // byte recieved_data[2]; // массив принятых данных byte servo = 3; // сервопривод на 3 цифровом byte servo2 = 5; // Servo myservo1; Servo myservo2; byte address[][6] = ; //возможные номера труб void setup() < Serial.begin(9600); //открываем порт для связи с ПК myservo1.attach(servo); myservo2.attach(servo2); radio.begin(); //активировать модуль radio.setAutoAck(0); //режим подтверждения приёма, 1 вкл 0 выкл radio.setRetries(1, 15); //(время между попыткой достучаться, число попыток) radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал radio.setPayloadSize(64); //размер пакета, в байтах radio.openReadingPipe(1, address[0]); //хотим слушать трубу 0 radio.setChannel(0x5f); //выбираем канал (в котором нет шумов!) radio.setPALevel (RF24_PA_LOW); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS //должна быть одинакова на приёмнике и передатчике! //при самой низкой скорости имеем самую высокую чувствительность и дальность!! radio.powerUp(); //начать работу radio.startListening(); //начинаем слушать эфир, мы приёмный модуль >void loop() < byte pipeNo; while ( radio.available(&pipeNo)) < // слушаем эфир со всех труб radio.read( &recieved_data, sizeof(recieved_data) ); // чиатем входящий сигнал //то бишь 0 или 1 myservo1.write(recieved_data[1]); // повернуть серво на угол 0..180 // значение получено с 1 элемента массива myservo2.write(recieved_data[0]); // сигнал // в соответствии с принятыми данными со 2 места массива, диапазон 0. 180 >Serial.print(recieved_data[1]); Serial.print(" "); Serial.println(recieved_data[0]); delay(1); >

#2 2017-07-13 14:20:53

vvr Учасник Зареєстрований: 2015-04-12 Повідомлень: 874

Re: Дребезжат сервы.

вам же вроде на arduino.ru подсказали.

#3 2017-07-13 14:29:28

Женя_7 Учасник Зареєстрований: 2017-07-13 Повідомлень: 7

Re: Дребезжат сервы.

вам же вроде на arduino.ru подсказали.

На Амперке, Вы мне советовали, я спросил как прописать, Вы так и не ответили )

#4 2017-07-14 07:56:25

vvr Учасник Зареєстрований: 2015-04-12 Повідомлень: 874

Re: Дребезжат сервы.

но вы же и не попробовали

#5 2017-07-14 09:32:02

Женя_7 Учасник Зареєстрований: 2017-07-13 Повідомлень: 7

Re: Дребезжат сервы.

но вы же и не попробовали

Я вам ещё на Амперке написал что пробовал, + В инете искал по ключевым словам. Нашёл ТРИ абсолютно разных по реализации скетча, которые делают то же, что и мой скетч.
Человек учится на примерах, я вас попросил привести пример, вы промолчали.

#6 2017-07-14 09:37:42

Женя_7 Учасник Зареєстрований: 2017-07-13 Повідомлень: 7

Re: Дребезжат сервы.

но вы же и не попробовали

Я решил проверить, может быть сервы дребезжат потому что они принимают такой дребезжащий искажёный сигнал. Прописал на приемнике Serial.print, а он все показания в одну строку выдаёт, получается каша. Я пол дня потратил, что бы написать код, что бы выводило в ДВЕ строки!

Вот часть кода, зацените:

Serial.print(recieved_data[1]); Serial.print(" "); Serial.println(recieved_data[0]); delay(1);

А вы говорите что не пробовал..

#7 2017-07-14 09:57:09

vvr Учасник Зареєстрований: 2015-04-12 Повідомлень: 874

Re: Дребезжат сервы.

а какое отношение к джиттеру ваших серв имеют эти строчки кода.
вам дали направление куда копать что куда прописать.
осталось завести переменные на отслеживание положения сервы для её отключения при достижении нужного положения.
вы не сделали.

#8 2017-07-14 11:34:53

Женя_7 Учасник Зареєстрований: 2017-07-13 Повідомлень: 7

Re: Дребезжат сервы.

а какое отношение к джиттеру ваших серв имеют эти строчки кода.
вам дали направление куда копать что куда прописать.
осталось завести переменные на отслеживание положения сервы для её отключения при достижении нужного положения.
вы не сделали.

1, Я уже писал — Я решил проверить, может быть сервы дребезжат потому что они принимают такой дребезжащий искажённый сигнал.
Вы наверно не заметили, что я убрал из скетча строки отвечающие за энергосбережение. Потому что с ними приёмник получал данные рывками.
2, Как я заведу переменные на отслеживание положения сервы для её отключения при достижении нужного положения если я никогда этого НЕ делал, и НЕ представляю как это сделать! Примеров нет..

#9 2017-08-06 23:27:26

ВАлерий99 Учасник Зареєстрований: 2017-08-06 Повідомлень: 4

Re: Дребезжат сервы.

Я вообще начинающий, делаю первый прект.
Для прикола создал свою программу управления сервами на беспилотник
Может кому интересно, а дрожания не было
Смысл в том, что все импульсы на сервы стартуют сразу, потом до 700мкс я вычисляю требуемые длительности импульсов с учётом перегрузок, угловых скоростей и тд, в цикле считываю время и сравниваю с требуемым для каждого импульса.После того как счётчик посчитал прекращение всех 4 импульсов программа идёт дальше.
Если я отключал коррекции по параметрам движения самолёта, то сервы практичеси не дёргались
А в стандартном варианте самолёт должен парировать резкие движения неопытного пилота, коим я и являюсь
Стабилизатор дифференциальный, ибо нет элеронов на крыльях

void servoAUT() volatile unsigned long TG, Tr;
// Serial.print(«R=»);Serial.println(srvR);///ЭТО ОТ ПРЕДИДУЩЕГО ЦИКЛА
// Serial.print(«K=»);Serial.println(srvK);
// Serial.print(«L=»);Serial.println(srvL);
TG=micros();
byte s1=1,s2=1,s3=1,s4=1;
digitalWrite(8, HIGH);// установили 1 -начало импульса
digitalWrite(7, HIGH);//
digitalWrite(6, HIGH);//
digitalWrite(5, HIGH);//

А может сервы дёргаются из-за нестабильного питания на передатчике и соответственно опорного напряжения на потенциометрах джойстиков?
Осциллографом я наблюдал импульсные помехи в питании до 0,3 вольта.

Остання редакція ВАлерий99 (2017-08-06 23:34:24)

#10 2017-08-07 20:08:21

ВАлерий99 Учасник Зареєстрований: 2017-08-06 Повідомлень: 4

Re: Дребезжат сервы.

Вячеслав Азаров пише:
ВАлерий99 пише:

Я вообще начинающий, делаю первый прект.
Для прикола создал свою программу управления сервами на беспилотник
Может кому интересно, а дрожания не было
Смысл в том, что все импульсы на сервы стартуют сразу, потом до 700мкс я вычисляю требуемые длительности импульсов с учётом перегрузок, угловых скоростей и тд, в цикле считываю время и сравниваю с требуемым для каждого импульса.После того как счётчик посчитал прекращение всех 4 импульсов программа идёт дальше.
Если я отключал коррекции по параметрам движения самолёта, то сервы практичеси не дёргались
А в стандартном варианте самолёт должен парировать резкие движения неопытного пилота, коим я и являюсь
Стабилизатор дифференциальный, ибо нет элеронов на крыльях

void servoAUT() volatile unsigned long TG, Tr;
// Serial.print(«R=»);Serial.println(srvR);///ЭТО ОТ ПРЕДИДУЩЕГО ЦИКЛА
// Serial.print(«K=»);Serial.println(srvK);
// Serial.print(«L=»);Serial.println(srvL);
TG=micros();
byte s1=1,s2=1,s3=1,s4=1;
digitalWrite(8, HIGH);// установили 1 -начало импульса
digitalWrite(7, HIGH);//
digitalWrite(6, HIGH);//
digitalWrite(5, HIGH);//

srvR=3000-pals[2]-GY/9+GX/10-80*AY -100*AX;
srvR=constrain(srvR,830,2100);
srvK=pals[3]+GZ/20;
srvK=constrain(srvK,830,2100);
srvL=pals[2]+GY/9+GX/10-80*AY+100*AX;
srvL=constrain(srvL,830,2100);

unsigned long Tp1=TG+srvK;// руль . от крена.
unsigned long Tp2=TG+pals[1];// газ
unsigned long Tp3=TG+srvR; // тангаж прав
unsigned long Tp4=TG+srvL;// тангаж лев .

do <
Tr=micros();
if(Tr>Tp1 && s1==1) // руль, ножка 6
if(Tr>Tp2 && s2==1) // газ,
if(Tr>Tp3 && s3==1) //
if(Tr>Tp4 && s4==1) // левый, ножка 7
>
while((s1+s2+s3+s4)>0);
>

А может сервы дёргаются из-за нестабильного питания на передатчике и соответственно опорного напряжения на потенциометрах джойстиков?
Осциллографом я наблюдал импульсные помехи в питании до 0,3 вольта.

Наврядли из-за питания, скорее из-за неправильных вычислений и/или формирования управляющих сигналов. Почитайте ТАУ, может поможет.

читал, читал.
Мне кажется, Вы меня спутали с инициатором темы, но моя система работает нормально, если выключаю ОС,метания рулей нет нет.
Включаю-на земле стоящий самолёт начинает качать, как и положено, от дёрганья рулей, которое передаётся всему самолёту
Ибо ОС, собственная частота, моменты инерции продольный поперечный и тд и тп

Остання редакція ВАлерий99 (2017-08-07 20:21:45)

Arduino.ru

Проблема с сервомашинкой. При включении дёргается и замирает.

  • Войдите на сайт для отправки комментариев

Сб, 26/05/2018 — 16:25
Зарегистрирован: 26.05.2018

Добрый день! Простите за мой вопрос, я совсем новичко в этом деле, но сейчас пытаюсь учиться управлять arduino с помощью Youtube. Возникла проблема, ничего не нашёл по этому поводу в интернете.

При включении в сеть сервопривод MG995 дёрается в сторону ограничителя на большой шестерне выходного вала и замирает.
Сначала использовал эту прошивку:

#include Servo servo; void setup() < servo.attach(9); servo.write(0); >void loop()

Думал, что дело в прошивке, посмотрел, что можено прописывать импульсами (думал, что начальное положение шестерни не было правильным, или как ещё можно сказать)ю
Нашёл такую прошивку:

#include // для дальнейшей работы назовем 9 пин как servoPin #define servoPin 9 // 544 это эталонная длина импульса при которо мсервопривод должен принять положение 0° #define servoMinImp 544 // 2400 это эталонная длина импульса при котором сервопривод должен принять положение 180° #define servoMaxImp 2400 Servo myServo; void setup() < myServo.attach(servoPin, servoMinImp, servoMaxImp); // устанавливаем пин как вывод управления сервоприводом, // а также для работы сервопривода непосредственно в диапазоне углов от 0 до 180° задаем мин и макс значения импульсов. // импульсы с большей или меньшей длиной восприниматься не будут. // для сервоприводов даже одной партии значения длин импульсов могут отличаться, может быть даже и 584-2440. // поэкспериментируйте и найдите идеальные длины импульсов конкретно для вашего сервопривода. >void loop() < // устанавливаем качалку сервопривода в положение 0°(т.к.импульс равен 544мкс) myServo.writeMicroseconds(servoMinImp); delay(2000); // в данной функции можно задавать длины импульсов непосредственно числами. // 90°(т.к.vимпульс равен 1520мкс) myServo.writeMicroseconds(1520); delay(2000); // 180°(т.к. импульс равен 2400мкс) myServo.writeMicroseconds(servoMaxImp); delay(2000); >

Обе выдают одинакувую картину. Подключал к БП с 5v 350mAh и 500mAh, думал, что не хватает питания.
Земля ардуино и серво соеденины. Помогите, пожалуйста, не знаю, как решить эту проблему.

  • Войдите на сайт для отправки комментариев

Сервы Дергаются И Клинят

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

Поделиться

Последние посетители 0 пользователей онлайн

  • Ни одного зарегистрированного пользователя не просматривает данную страницу

Сообщения

У автора ЭПС-метр имеется, пускай выясняет, кого и почему пучит. Может, за год в этом БП уже такие метаморфозы произошли, что фото годичной давности остается только на гвоздик повесить.

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

He3haika

Вот с отзывами.
Кто подскажет на что лучше клеить подвесы (резина) на 88 или на момент класик универсал.

bigmanlav

А по Вашей вообще в мой НП не доставляется . Это уже нюансы

BARS_

Не ток, а напряжение. Ток зависит от напряжения на обмотке. Чем оно выше, тем ток больше. Брать регулируемый БП и повышать напряжение. Как соленоид начнет греться — значение +/- максимальное для него. Можно, подняв напряжение. Да, сгорит. Надо ставить MOSFET

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *