Полтергейст в работе сервы

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

Долго не мог понять, почему у меня не работает вместе библиотека Servo и Motor shield с шимом на 9 и 10 ноге после того как я Шилд снял с Ардуинки и не разместил отдельно, кинув на него все необходимые провода. Шим взял с 3 и 5 пина, чтоб не конфликтовать с либой сервы.

Наконец понял, что серва перестает работать как я втыкаю ИК дальномер Шарп на разъем Тройка Шилда в аналоговый порт.

Взял простой пример Sweep:


#include <Servo.h> 
 
Servo myservo; 
 
int pos = 0;    // variable to store the servo position 
 
void setup() 
{ 
  myservo.attach(A1, 900, 2100);  // attaches the servo on pin 9 to the servo object 
} 
 
 
void loop() {
 
 
  for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
  for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees 
  {                                
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
  
}

Серва работает отлично! Потом просто втыкаю дальномер в Тройку на любой свободный разъем аналогового порта. Обращаю внимание, что с дальномером в коде нет вообще никаких действий.

Серва начинает судорожно дергаться, истерить (по другому и не скажешь), как будто ей быстро меняют углы, а время на отработку не дают. Немного подергавшись, поворачивается на отметку 180 градусов и притворяется не живой.

Выдергиваю дальномер - оживает.

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

Серва - FS12MG - http://www.servodatabase.com/servo/feetech/fs12mg

Дальномер - SHARP GP2Y0A21 - http://amperka.ru/collection/proximity-sensors/product/infrared-range-me...

Что за хрень-то?

dedov
Offline
Зарегистрирован: 21.01.2014

опять же, скорее всего недостаток питания.

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

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

На всякий случай сменил акк., но замена ничего не дала.

 

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

Дальномер потребляет 30 мА, на серву не нашел тока, но она оч. маленькая - микро. Больше оборудования в скетче не используется. Дунька должна тянуть....

dedov
Offline
Зарегистрирован: 21.01.2014

именно очень маленькая серва у меня например с питанием от usb!!!от компа вполне себе глючилась и вешала ардуину, пока не воткнул внешний 9 вольт. так что всякое бывает.

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

Надо транспарант написать - серву питать от отдельного источника и общая земля. Об этом уже сто раз писали. Читайте форум http://arduino.ru/forum/obshchii/prezhde-chem-sprosit-pro-servomashinku-servo-posmotri-tut

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

vvadim пишет:

Надо транспарант написать - серву питать от отдельного источника и общая земля.

Я тоже так думал до недавнего времени... Но недавно пришлось вот эту серву

http://www.ebay.com/itm/Nx-3-7g-Mini-Micro-Servo-for-RC-Helicopter-Car-B...

подключать к ПРО МИНИ , задача была двигать тумблер туда-сюда инфраредом , нагрузки почти никакой,

на всякий случай  поставил BODLEVEL на 2.7 Вольта и ничего,  полгода обе коробки работают, питаются с компа по полутораметровому USB принтерному кабелю.

Так что 3.7 граммовые можно. Главное их в упоры не загонять. И не грузить сильно.

 

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

Продавец пишет:

Микросервопривод FS12MG может быть подключен непосредственно к микроконтроллеру, без силового драйвера. Для этого от него идёт шлейф из трёх проводов. http://amperka.ru/collection/servo/product/servo-fs12mg

Пусть даже он потребляет 200мА, в чем я очень сомневаюсь, плюс дальномер - 30мА, Ардуинка может выдать пусть не 500, но 400мА.

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

Отпишусь.

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

Как и предполагалось, отдельное питание на серву ничего не дало!

4 аккумулятора АА по 2700мА, общая земля. Свежезаряжены, без нагрузки показывают 5,35В + С нагрузкой сервой - 5,3 В

Серва работает, а как только втыкаю дальномер - дергается.

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

Более того, залил полный скетч с дальномером, сервой, езда на 4-х ДПТ, светодиодная иллюминация (от 4 до 8 диодов одновременно с усилением на ULN 2003). Все работает пока физически не подключаю дальномер. Вся цепь и серва при этом работает от Ардуинки. На мотор шилд отдельное питание 7,2В. (Так же пробовал и тут серве дать отдельное питание).

Хрена ей надо? Уже псих разбирает...

Может ей кондер по питанию поставить, какой только? Хотя тоже сомневаюсь, питание-то отдельно подавал.

Может чего с дальномером? Хоть сам и работает, но может как-то влияет на цепь?

Не работают вместе серва именно с дальномером. По отдельности вся схема работает.

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

Я разбирал серву, думал гикнулась. Обратил внимание, что ограничитель в крайних положениях (при управлении 900-2100мкс) даже не касается упоров. То есть теоритически управлением видимо можно расширить угол более чем на 120 паспортных градусов. Но я к этому не прибегаю.

Так что в упоры она не упирается, а нагружена по оси только дальномером, а это копейки для ее момента 1,8 кг×см при 6 В

Проверил через монитор порта какое управление подается на серву при сбоях:

0
18
36
54
72
90
108
126
144
162
180
0
18
36
54
72
90
108
126
144
162
180

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

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

Народ! Вообще ничего не понимаю!

Решил на отдельное питание посадить Дальномер. Включаю - серва дергается. Это я ожидал. НО!!!

Беру и с разъема дальномера выдергиваю питание от акк. Дергается! Ниче не понимаю, выдергиваю сигнальный провод - ДЕРГАЕТСЯ!!!! На одной земле! Проверял несколько раз, в разные разъемы.

От дальномера идет в схему ТОЛЬКО земля и вносит помехи. Как такое может быть???? Где искать барабашку?

Только сигнальный провод дальномера не портит работу, будучи оставленным одним в разъеме.

И земля и питание вместе и по-одиночке сбоят серву.

Клапауций
Offline
Зарегистрирован: 10.02.2013

vadim.tusur пишет:

От дальномера идет в схему ТОЛЬКО земля и вносит помехи. Как такое может быть???? Где искать барабашку?

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

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

Клапауций, согласен, но делать-то чё?

Использую расширитель Тройка-шилд, на него уже подумал, но потом вспомнил, одна серва-то работает. А дальномер - так вообще, всегда работает и сервой и без нее. Потом обнаружил фокус с землей...

Клапауций
Offline
Зарегистрирован: 10.02.2013

vadim.tusur пишет:

Клапауций, согласен, но делать-то чё?

Использую расширитель Тройка-шилд, на него уже подумал, но потом вспомнил, одна серва-то работает. А дальномер - так вообще, всегда работает и сервой и без нее. Потом обнаружил фокус с землей...

мне эти названия - "съужитель/расширитель" ничего не говорят.

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

*при правильной разводке питания такого быть не должно, так же нужно обратить внимание на фьюз контроллера BODLEVEL, BODEN - установлен, не установлен, на какое напряжение установлен.

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

а как посмотреть?

Клапауций
Offline
Зарегистрирован: 10.02.2013

vadim.tusur пишет:

а как посмотреть?

я так смотрю - внешним программатором, в строке всё понятно - дуде, контроллер, программатор, считается в текстовые файлы.

avrdude -p ATtiny2313 -c stk500v2 -U lfuse:r:lfuse.txt:h -U hfuse:r:hfuse.txt:h

организацию правильного питания здесь можно почитать http://www.myrobot.ru/articles/mc_stab.php

*мне вот это интересно - питаем халабуду нестабилизированным напряжением?

>4 аккумулятора АА по 2700мА, общая земля. Свежезаряжены, без нагрузки показывают 5,35В + С нагрузкой сервой - 5,3 В

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

Тройка шилд - http://amperka.ru/collection/troyka/product/arduino-troyka-shield

Просто разводка портов с землей и питанием для удобства подключения датчиков. Садится сверху ардуинки

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

питание акк. 7,2В 2600мА Подаю параллельно на вход дуни и мотор шилда.У них же свои стабилизаторы есть. Мотор шилд стоит отдельно, а не сверху.

В файле boards.txt, что в каталоге Ардуины нашел:

##############################################################

atmega328.name=Arduino Duemilanove w/ ATmega328

atmega328.upload.protocol=arduino
atmega328.upload.maximum_size=30720
atmega328.upload.speed=57600

atmega328.bootloader.low_fuses=0xFF
atmega328.bootloader.high_fuses=0xDA
atmega328.bootloader.extended_fuses=0x05
atmega328.bootloader.path=atmega
atmega328.bootloader.file=ATmegaBOOT_168_atmega328.hex
atmega328.bootloader.unlock_bits=0x3F
atmega328.bootloader.lock_bits=0x0F

atmega328.build.mcu=atmega328p
atmega328.build.f_cpu=16000000L
atmega328.build.core=arduino
atmega328.build.variant=standard
 

 

Это не то?

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

Клапауций, посмотрел ссылку по питанию, вопрос - это актуально при автономном использовании контроллеров с самостоятельным обвесом? На плате Ардуино же есть стабилизация и подавать питание через штырьковый разъем на плате рекомендуют в пределах 7-12 В.

Вроде так и сделал...

А по USB разве не сбалилизированное питание идет? В этом случае тоже сбоит.

Клапауций
Offline
Зарегистрирован: 10.02.2013

vadim.tusur пишет:

А по USB разве не сбалилизированное питание идет? В этом случае тоже сбоит.

по USB идёт стабилизированное 5V.

получается так, что тебе достаточно дотронуться отвёрткой к земле дуино, что бы вызвать странное?

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

Отверткой дотрагиваюсь - все нормально, а "землей" дальномера - вызывается странное. При том, что два других вывода дальномера висят в воздухе.

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

Сейчас вообще все снял с дуньки, серву включил на порт А1, питание с дуино. Тыкаю землей дальномера - все повторяется...

То есть осталось Ардуино УНО (328Р) и серва.

Клапауций
Offline
Зарегистрирован: 10.02.2013

vadim.tusur пишет:

Отверткой дотрагиваюсь - все нормально, а "землей" дальномера - вызывается странное. При том, что два других вывода дальномера висят в воздухе.

дальномер можно продавать отдельным шильдом - "убийца дуино".

хорошо, а если электролит на примерно 20мкФ и керамику на 0,1 мкФ на питание дальномера навесить?

Клапауций
Offline
Зарегистрирован: 10.02.2013

vadim.tusur пишет:

Сейчас вообще все снял с дуньки, серву включил на порт А1, питание с дуино. Тыкаю землей дальномера - все повторяется...

То есть осталось Ардуино УНО (328Р) и серва.

на питание сервы керамику 0,1 мкф.

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

так питания-то как такового нет у него. Один же провод?

Клапауций
Offline
Зарегистрирован: 10.02.2013

vadim.tusur пишет:

так питания-то как такового нет у него. Один же провод?

да пофиг - может оно как детекторный приёмник работает и черпает энергию из твоего вайфая или элекромагнитную составляющую электрической сети 220 вольт.

конденсаторы по питанию должны присутсвовать на всех блоках халабуды.

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

сделал. Блин серва подергалась и рванула в крайнее положение 180 гр. и похоже, стопором своим заклинила об шестерню...

Теперь включаю питание, гудит, но не выходит из этого положения

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

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

Клапауций
Offline
Зарегистрирован: 10.02.2013

vadim.tusur пишет:

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

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

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

Я понял, что фраза: "хорошо, а если электролит на примерно 20мкФ и керамику на 0,1 мкФ на питание дальномера навесить?" означает, что надо кондеры пряно на входе питания дальномера поставить.

Поэтому и написал, что у него питания как такового нет.

Так куда надо поставить - на аккумулятор?

Клапауций
Offline
Зарегистрирован: 10.02.2013

мне надоели эти препирательства - читаем ссылку о питании до полного просветления.

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

да я и не препирался, объяснил почему не так понял.

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

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

Попробовал поставить кондеры электролит 22мФ и керамический 0,1мФ в параллель на аккумулятор, потом прямо на разъемы питания сервы и дальномера. Уносил поделку в подземный гараж, где не ловят сотовые, нет вай-фая, а из электричества - одна лампа накаливания 200Вт; попробовал перецепить серву на цифровой шим-порт 3.

Ничего не помогает. Есть у кого-нибудь идеи? Просто уже выхода не вижу...

Клапауций
Offline
Зарегистрирован: 10.02.2013

vadim.tusur пишет:

Просто уже выхода не вижу...

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

*про детекторный приёмник - это шутка была.

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

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

Я и сам в антенну не верил, просто проверять уже нечего.

А схемы уже никакой и нет. Есть литиевый аккумулятор 7,2В на 2600мА в разъеме внешнего питания контроллера, Ардуино УНО и серва с дальномером.

Серва подключена на порт А1, загружен пример Sweep из среды Ардуино ИДЕ.

Вот и всё. Работает. Соединяю ждампером землю из разъема дальномера с любой землей Ардуино, или целиком фтыкаю разъем дальномера в любой аналоговый порт, всё - жопа.

Дальномер отдельно и со взбешенной сервой показывает правильные расстояния.

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

Сейчас взял другую плату Ардуино УНО (попросил на время) - поведение аналогичное. Вообще на столе проводил опыт отдельно от бота, питал по USB.

Клапауций
Offline
Зарегистрирован: 10.02.2013

vadim.tusur пишет:

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

Я и сам в антенну не верил, просто проверять уже нечего.

А схемы уже никакой и нет. Есть литиевый аккумулятор 7,2В на 2600мА в разъеме внешнего питания контроллера, Ардуино УНО и серва с дальномером.

Серва подключена на порт А1, загружен пример Sweep из среды Ардуино ИДЕ.

Вот и всё. Работает. Соединяю ждампером землю из разъема дальномера с любой землей Ардуино, или целиком фтыкаю разъем дальномера в любой аналоговый порт, всё - жопа.

Дальномер отдельно и со взбешенной сервой показывает правильные расстояния.

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

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

как сюда вставить рисунок? Раньше пробовал - не получилось, пришлось ссылку давать.

Клапауций
Offline
Зарегистрирован: 10.02.2013

vadim.tusur пишет:

как сюда вставить рисунок? Раньше пробовал - не получилось, пришлось ссылку давать.

"Отправить комментарий", иконка редактора комментариев "Изображение"

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

Че то мне яндекс диск не дает прямую ссылку на файл.

Можно посмотреть тут http://yadi.sk/d/MVGwEZwjHrbyu

Клапауций
Offline
Зарегистрирован: 10.02.2013

перерисуй схему из "принципиально-сферической в вакууме" в монтажную - с разводкой питания, подробным указанием номеров пинов - какой провод к чему конкретно подключен(номер пина платы)

*не понятно - что от чего питается.

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

А у вас на А1 шим?

Может пора всё нормально подключить и залить нормальный код. И за 40 комментов уже можно было бы опубликовать и вашу схему (ПОЛНУЮ)  и залитый код. Удивляюсь выдержке Клапауция.

Кстати, в библе Servo по умолчанию myservo.attach(9);

Клапауций
Offline
Зарегистрирован: 10.02.2013

vvadim пишет:

А у вас на А1 шим?

Может пора всё нормально подключить и залить нормальный код. И за 40 комментов уже можно было бы опубликовать и вашу схему (ПОЛНУЮ)  и залитый код. Удивляюсь выдержке Клапауция.

Кстати, в библе Servo по умолчанию myservo.attach(9);

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

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

vvadim пишет:

А у вас на А1 шим?

Может пора всё нормально подключить и залить нормальный код. И за 40 комментов уже можно было бы опубликовать и вашу схему (ПОЛНУЮ)  и залитый код. Удивляюсь выдержке Клапауция.

Кстати, в библе Servo по умолчанию myservo.attach(9);

Какой ШИМ для серво?

В библиотеке Servo никакого умолчания нет, 9 порт используется в примере Sweep этой библиотеки, поскольку допускает инструкцию analogWrite. С этим же успехом можно пользоваться и аналоговым портом. Но я пробовал на 3 порту, он тоже с ШИМом, поскольку 9-й у меня был тогда занят. Что касается исходного кода, то я уже писал, что использую стандартный пример Sweep

// Sweep
// by BARRAGAN <http://barraganstudio.com> 
// This example code is in the public domain.


#include <Servo.h> 
 
Servo myservo;  // Создание экземпляра объекта для сервы
                // a maximum of eight servo objects can be created 
 
int pos = 0;    // Позиция сервы 
 
void setup() 
{ 
// pinMode(3, OUTPUT);
  myservo.attach(A1, 900, 2100);  // Назначение пина А1 для сервы и диапазона управления
} 
 
 
void loop() {
  
  for(pos = 0; pos < 180; pos += 18) // Сканирование всего диапазона сервы 
  {                                   
    myservo.write(pos);              // Установка позиции сервы
    delay(45);                       //  Пауза для отработки позиции 
  } 
  for(pos = 180; pos>=1; pos-=18)     // goes from 180 degrees to 0 degrees 
  {                                
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(45);                       // waits 15ms for the servo to reach the position 
  } 
  
  delay(500);
} 

Схему сейчас доработаю. (Как, кстати, с яндекс диска получить ссылку не на страницу с файлом, а на сам файл?)

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

Упёртость - это как подвиг!  Вперёд и с песней!

А http://arduino.ru/forum/obshchii/prezhde-chem-sprosit-pro-servomashinku-servo-posmotri-tut наверное принципиально не читал.

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

vvadim пишет:

Упёртость - это как подвиг!  Вперёд и с песней!

Сейчас попробовал на другой ардуинке на порту 9. Ничего не поменялось - опять одна серва работает, при приземлении дальномера дергается.

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

На что ещё стоит обратить внимание, так это на путаницу в терминологии. Часто способ управления сервоприводами называют PWM/ШИМ (Pulse Width Modulation) или PPM (Pulse Position Modulation). Это не так, и использование этих способов может даже повредить привод. Корректный термин — PDM (Pulse Duration Modulation). В нём крайне важна длина импульсов и не так важна частота их появления. 50 Гц — это норма, но сервопривод будет работать корректно и при 40, и при 60 Гц.

Клапауций
Offline
Зарегистрирован: 10.02.2013

vadim.tusur пишет:

Сейчас попробовал на другой ардуинке на порту 9. Ничего не поменялось - опять одна серва работает, при приземлении дальномера дергается.

"заземление дальномера" - это что значит?

берём девайс и подключаем одним проводом(земляным) к дуино? и, откуда дуино по одному проводу узнаёт, что это дальномер, что бы заглючить?

*ну, что за?..

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

Клапауций пишет:

vadim.tusur пишет:

Сейчас попробовал на другой ардуинке на порту 9. Ничего не поменялось - опять одна серва работает, при приземлении дальномера дергается.

"заземление дальномера" - это что значит?

берём девайс и подключаем одним проводом(земляным) к дуино? и, откуда дуино по одному проводу узнаёт, что это дальномер, что бы заглючить?

*ну, что за?..

Все началось того, что я выяснил, постепенно отключая переферию, что глючит серва из-за дальномера (когда они остались вдвоем). Подключаю дальномер - глючит, отключаю - не глючит (при этом в коде дальномера уже не было). Я его переключал на другие пины. Потом отключил у него джампер с +5. все равно глючит. Потом выяснил, что даже одна землю дает помеху.

Вы еще пошутили насчет антенны. При чем если коснуться земли отверткой или воткнуть один джампер на землю - ничего не происходит.

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

То есть глючит и полностью подключенный и частично. Только подключенные сигнальный провод не дает помех. Питание или земля или все вместе - да.

vadim.tusur
Offline
Зарегистрирован: 04.01.2014

Поправил схему http://yadi.sk/d/DJrdjDZhHrthN