roboforum.ru

Технический форум по робототехнике.

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

Реверс сервы с помощью 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
}

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

=DeaD= » 24 июн 2011, 16:54

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

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

Добавлено спустя 2 минуты 20 секунд:
И еще - библиотека servo.h вроде на таймерах сделана в последних версиях, а не на аппаратном ШИМ.

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

Michael_K » 24 июн 2011, 18:51

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

И мотора!

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

Дмитрий К. » 24 июн 2011, 19:09

А что такое реверсирование сервы?

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

avr123.nm.ru » 24 июн 2011, 19:36

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

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

frwind » 24 июн 2011, 22:17

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


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


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

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

Scorpio » 24 июн 2011, 22:58

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

На ATTiny 2313 4 PWM канала. На них надежнее будет. А реверс, я так понимаю, это перевод сервы из одного крайнего положения в другое?

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

Michael_K » 24 июн 2011, 23:00

Я, конечно, в вайринге ничего не понимаю, но программа мне кажется кривой.

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

HarryStar » 25 июн 2011, 01:10

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

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

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

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

Michael_K » 25 июн 2011, 01:58

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

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

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

frwind » 25 июн 2011, 07:52

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


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


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

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


Можно пример с таймерами, неразу с ними еще не связывался.

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

=DeaD= » 25 июн 2011, 08:19

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

У нас одна и та же программа на кварце стабильно держала серву на ATTiny45, а на внутреннем генераторе подергивания были :(

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

Michael_K » 25 июн 2011, 10:04

Cильно сомневаюсь, что дело было в нестабильности генератора.
Извините, Dead, но по-моему, гораздо более вероятная причина дребезга - косяки в софте/железе.

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

=DeaD= » 25 июн 2011, 10:27

Извиню :) софт тот же, только клок брался либо с кварца, либо с внутреннего генератора. Где там можно косякнуть в железе при наличии 1 восьминогого МК, 1 резистора на RESET и 1 кондёра на питании - мне неведомо :) может конечно помехи по питанию на кварц меньше влияют, ну вот соберем платки - я еще раз всё протестирую.

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

Michael_K » 25 июн 2011, 10:38

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

Вы же понимаете, что работоспособность программы совсем не является критерием правильно спроектированной программы. То же самое и к железу относится.
Последний раз редактировалось Michael_K 25 июн 2011, 10:44, всего редактировалось 1 раз.


Rambler\'s Top100 Mail.ru counter