Реверс сервы с помощью Arduino

Как собрать и запрограммировать робота на Arduino(Freeduino, Roboduino, Seeduino ...). Используем Wiring и Processing.

Реверс сервы с помощью Arduino

Сообщение frwind » 24 июн 2011, 16:45

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

Отлично работает на Atmega168, а вот Atmega8 не совсем работает, центр у сервы сильно уходит вбок и относительно него и крутиться, а надо чтоб по центру все было.
Пробывал через библиотеку servo.h, результат тот же.
Причем используя библиотеку servo.h заметен паразитивный дребезг сервы, а если как написал я, то все отлично.

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

В чем может быть проблема?
Реализовывать все на Atmega168, вместо Atmega8, не предлагать, дифицит они у нас в городе.

В идеале все должно работать на Atmega8, с использованием внутреннего кварца на 8МГц

Еще вопрос, как нибудь это перенести на Attiny 13 можно?
Нужно для летательного аппарата, переключить на аппаратуре и поменять серву местами с перепайкой сервы, не предлагать.

Код: Выделить всё
int servoPin = 10;     // Control pin for servo motor
int pulse, pulse_revers;

void setup() {
 
   pinMode(9, INPUT); // Input from reciver
  pinMode(servoPin, OUTPUT);  // Set servo pin as an output pin
}
void loop() { 
pulse = pulseIn(9, HIGH); // Input from reciver
pulse_revers = (1472 - pulse)+1472; // Revers servo
    digitalWrite(servoPin, HIGH);   // Turn the motor on
    delayMicroseconds(pulse_revers);       // Length of the pulse sets the motor position
    digitalWrite(servoPin, LOW);    // Turn the motor off
    delay(20); // the time needed in between pulses
}
frwind
 
Сообщения: 27
Зарегистрирован: 03 янв 2011, 20:51

Re: Реверс сервы с помощью Arduino

Сообщение =DeaD= » 24 июн 2011, 16:54

У нас не получалось на внутреннем кварце стабильность сервы обеспечить, она дребезжала :(
Правда мы юзали ATTiny45, но разницы, наверное, никакой.

А еще можно реверс сервы сделать очень просто - разобрав её и перепаяв местами концы потенциометра :crazy:

Добавлено спустя 2 минуты 20 секунд:
И еще - библиотека servo.h вроде на таймерах сделана в последних версиях, а не на аппаратном ШИМ.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Реверс сервы с помощью Arduino

Сообщение Michael_K » 24 июн 2011, 18:51

=DeaD= писал(а):А еще можно реверс сервы сделать очень просто - разобрав её и перепаяв местами концы потенциометра :crazy:

И мотора!
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: Реверс сервы с помощью Arduino

Сообщение Дмитрий К. » 24 июн 2011, 19:09

А что такое реверсирование сервы?
Дмитрий К.
 
Сообщения: 76
Зарегистрирован: 01 июл 2010, 20:58
Откуда: Санкт-Петербург
прог. языки: Си
ФИО: Дмитрий

Re: Реверс сервы с помощью Arduino

Сообщение avr123.nm.ru » 24 июн 2011, 19:36

подумайте !
=DeaD= писал(а):можно реверс сервы сделать очень просто - разобрав её и перепаяв местами концы потенциометра
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: Реверс сервы с помощью Arduino

Сообщение frwind » 24 июн 2011, 22:17

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


avr123.nm.ru писал(а):подумайте !
=DeaD= писал(а):
можно реверс сервы сделать очень просто - разобрав её и перепаяв местами концы потенциометра


Серва стоит вклеена в планере в крыле, добраться до нее сложно, сервы на закрылки стоят, аппаратура простая, не хватает миксов и каналов настроить реверс.
Плюс серва хитрая и дорогая в случае выламывания ее из крыла, лезть в нее с паяльником не особо хочеться.
frwind
 
Сообщения: 27
Зарегистрирован: 03 янв 2011, 20:51

Re: Реверс сервы с помощью Arduino

Сообщение Scorpio » 24 июн 2011, 22:58

frwind писал(а):Еще вопрос, как нибудь это перенести на Attiny 13 можно?

На ATTiny 2313 4 PWM канала. На них надежнее будет. А реверс, я так понимаю, это перевод сервы из одного крайнего положения в другое?
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Реверс сервы с помощью Arduino

Сообщение Michael_K » 24 июн 2011, 23:00

Я, конечно, в вайринге ничего не понимаю, но программа мне кажется кривой.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: Реверс сервы с помощью Arduino

Сообщение HarryStar » 25 июн 2011, 01:10

На внутреннем кварце плохо да. Более того, на внешнем кварце могут быть сбои, нужно ставить всякие конденсаторы, обязательно заземлять корпус кварца.

Аппаратный ШИМ необязателен (его к сожалению немного), программно на таймере тоже нормально работает все, но delayMicroseconds(pulse_revers) не точно выдает задержку, лучше это делать самому, хотя как оно там в Ардуине я незнаю, я делал на 32-й меге в CVAVR.

Есть кстати готовые изделия такого типа
http://www.servocity.com/html/sr10_servo_reverser.html
Аватара пользователя
HarryStar
 
Сообщения: 995
Зарегистрирован: 15 ноя 2010, 13:56
Откуда: Нижний Новгород
прог. языки: С, С++, РНР

Re: Реверс сервы с помощью Arduino

Сообщение Michael_K » 25 июн 2011, 01:58

Имхо, внутренний генератор тут ни при чем (кстати, у тинек13 и 45 он вполне приличный).
Логика программы дурная.
Она либо входной импульс пропускает (и выходной), либо считает его не с начала...
(Если я правильно понимаю функцию pulseIn)

Выкиньте delay(20) хотя бы. А лучше используйте аппаратные таймеры.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: Реверс сервы с помощью Arduino

Сообщение frwind » 25 июн 2011, 07:52

HarryStar писал(а):Есть кстати готовые изделия такого типа
http://www.servocity.com/html/sr10_servo_reverser.html


Вот именно такой девайс мне и нужен.


Michael_K писал(а):Имхо, внутренний генератор тут ни при чем (кстати, у тинек13 и 45 он вполне приличный).
Логика программы дурная.
Она либо входной импульс пропускает (и выходной), либо считает его не с начала...
(Если я правильно понимаю функцию pulseIn)

Выкиньте delay(20) хотя бы. А лучше используйте аппаратные таймеры.


Можно пример с таймерами, неразу с ними еще не связывался.
frwind
 
Сообщения: 27
Зарегистрирован: 03 янв 2011, 20:51

Re: Реверс сервы с помощью Arduino

Сообщение =DeaD= » 25 июн 2011, 08:19

Michael_K писал(а):Имхо, внутренний генератор тут ни при чем (кстати, у тинек13 и 45 он вполне приличный).

У нас одна и та же программа на кварце стабильно держала серву на ATTiny45, а на внутреннем генераторе подергивания были :(
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Реверс сервы с помощью Arduino

Сообщение Michael_K » 25 июн 2011, 10:04

Cильно сомневаюсь, что дело было в нестабильности генератора.
Извините, Dead, но по-моему, гораздо более вероятная причина дребезга - косяки в софте/железе.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: Реверс сервы с помощью Arduino

Сообщение =DeaD= » 25 июн 2011, 10:27

Извиню :) софт тот же, только клок брался либо с кварца, либо с внутреннего генератора. Где там можно косякнуть в железе при наличии 1 восьминогого МК, 1 резистора на RESET и 1 кондёра на питании - мне неведомо :) может конечно помехи по питанию на кварц меньше влияют, ну вот соберем платки - я еще раз всё протестирую.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Реверс сервы с помощью Arduino

Сообщение Michael_K » 25 июн 2011, 10:38

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

Вы же понимаете, что работоспособность программы совсем не является критерием правильно спроектированной программы. То же самое и к железу относится.
Последний раз редактировалось Michael_K 25 июн 2011, 10:44, всего редактировалось 1 раз.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

След.

Вернуться в Arduino и другие Xduino

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

cron