roboforum.ru

Технический форум по робототехнике.
Текущее время: 02 дек 2024, 08:16

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: ATMEGA + серва: банальнейший трабл
СообщениеДобавлено: 06 июн 2011, 02:54 
Не в сети

Зарегистрирован: 05 янв 2010, 23:07
Сообщения: 283
Откуда: Красноармейск
Skype: dmitry.vladimirivich
ФИО: Дима.В.
Может это тут и обсуждалось уже, лично я конкретного решения моё пробелмы не нашел.

Конфигурация железа -

ATmega1280 и китайския серва. Из под Ардуины прекрасно работающая.

И я пытаюсь её поднять на чистом Си

Пытаюсь управлять сервой от ШИМа OC2B - порт PB4.

8 бит, перескейлер выставлен на 256

врубаю программку, постепенно увеличуващую значение, записывающиеся в OC2B, от 0 до 255 и смотрю как при этом себя ведет серва. Дергаясь из стороны в сторону, серва, медленно, но уверенно, движется от примерно 30го градуса до 160го. Что за фигня?

Я эту проблему объясняю тем, что регистр ШИМа, вместе с длинной импульсов меняет и период.

Соотвественно не у всех временных интервалов он 20 мс, и серва на это реагирует неадекватьно.

Кто нибудь сталкивался с этой проблемой?

Как заставить ШИМ правильно работать?

Его можно на 16 бит перевести. Только непонятно как это поможет.

:)

_________________
#define TRUE FALSE


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA + серва: банальнейший трабл
СообщениеДобавлено: 06 июн 2011, 03:04 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Удивительно как-то, а каким импульсом вы пытаетесь рулить сервой ???

Серво управление servo на AVR автономно или через ПК простой сервоконтроллер
www.proavr.narod.ru/z13.htm

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA + серва: банальнейший трабл
СообщениеДобавлено: 06 июн 2011, 03:22 
Не в сети

Зарегистрирован: 05 янв 2010, 23:07
Сообщения: 283
Откуда: Красноармейск
Skype: dmitry.vladimirivich
ФИО: Дима.В.
Каким импульсом - понятия не имею =)

То что таймер выдает

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

А вообще - может кто подскажет в инете какой-нибудь пример кода которому можно скормить желаемый угол поворота качалки сервы, прикрутить его к таймеру и он уже его заставит работать как надо, выдавать нужные импульсы?

_________________
#define TRUE FALSE


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA + серва: банальнейший трабл
СообщениеДобавлено: 06 июн 2011, 03:45 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
ссылка выше в инете. там пример кода.

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA + серва: банальнейший трабл
СообщениеДобавлено: 06 июн 2011, 12:52 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Да уж, гениально. Арифметика с плавающей точкой тут как раз в тему.

--
Какой то глюк у форума (или сервера?) Я свое сообщение постил в ответ на это : forum2/topic10150.html#p208802

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA + серва: банальнейший трабл
СообщениеДобавлено: 06 июн 2011, 13:07 
Код:
void servo_new_position (uint16_t angle)
{
   OCR1A = (((angle/10)*11.5)-48);
}

void init_timer1 (void)
{
   sreg = SREG;
   TCNT1 = 0xB800;
   ICR1 = 0x0900;

   TCCR1A = _BV(COM1A1) | !_BV(COM1A0)            //   Both PWM outputs set at TOP,
         | _BV(COM1B1) | !_BV(COM1B0)         //   clear on compare match
         | !_BV(FOC1A) | !_BV(FOC1B)            //   PWM mode, can't force output
         | !_BV(WGM11) | !_BV(WGM10);            //   Fast PWM, TOP = ICR1

   TCCR1B = !_BV(ICNC1) | !_BV(ICES1)            //   Disable input capture noise canceler,
                                       //   edge select to negative.
         | _BV(WGM13) | !_BV(WGM12)            //   Fast PWM, TOP = ICR1
         | !_BV(CS12) | _BV(CS11) | _BV(CS10);   //   clk(i/o) / 64
   SREG = sreg;
}


Вернуться к началу
  
 
 Заголовок сообщения: Re: ATMEGA + серва: банальнейший трабл
СообщениеДобавлено: 06 июн 2011, 16:29 
Не в сети

Зарегистрирован: 05 янв 2010, 23:07
Сообщения: 283
Откуда: Красноармейск
Skype: dmitry.vladimirivich
ФИО: Дима.В.
רגוזין רומאן , спасибо огромное за код!

все работает, так как надо, серва не дергается!

Оказывается все дело в одной гениальной строчке

OCR1A = (((angle/10)*11.5)-48);

_________________
#define TRUE FALSE


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA + серва: банальнейший трабл
СообщениеДобавлено: 08 июн 2011, 16:55 
Не в сети
Аватара пользователя

Зарегистрирован: 05 июн 2007, 12:20
Сообщения: 196
Откуда: Киев
прог. языки: C/C++, ASSEMBLER
Я бы умножил числитель и знаменатель на 2 и ушел от floating point.
Не мучался бы да сделал на К155ЛА:)

_________________
Глюк по-немецки означает "счастье"...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA + серва: банальнейший трабл
СообщениеДобавлено: 28 дек 2013, 22:26 
Не в сети
Аватара пользователя

Зарегистрирован: 27 окт 2011, 22:32
Сообщения: 133
Откуда: Ростов-на-Дону
Skype: skyzi007
прог. языки: Python, Си (МК)
ФИО: Святослав Игоревич
Не стал новую тему создавать.
Добрый вечер форумчане. Подскажите,как бы код модифицировать от avr123.nm.ru чтобы 3-4 сервака, вращались хотя бы на 150-160град?

_________________
Project "Hexxx" (in progress...)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA + серва: банальнейший трабл
СообщениеДобавлено: 29 дек 2013, 13:51 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
подправить диапазон изменения импульсов. там же все исходники с комментариями даны http://www.proavr.narod.ru/z13.htm только не все сервы могут так крутиться.

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA + серва: банальнейший трабл
СообщениеДобавлено: 29 дек 2013, 15:20 
Не в сети
Аватара пользователя

Зарегистрирован: 27 окт 2011, 22:32
Сообщения: 133
Откуда: Ростов-на-Дону
Skype: skyzi007
прог. языки: Python, Си (МК)
ФИО: Святослав Игоревич
Если бы комментарии были понятны, я не задавал вопроса.
1500 (127) - это середина у сервы, но она явно сильнее проворачивается чем крайние положения (1/254)

_________________
Project "Hexxx" (in progress...)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA + серва: банальнейший трабл
СообщениеДобавлено: 29 дек 2013, 16:00 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
SkyZi, если уверены, что тайминги правильные, так калибруйте серву.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA + серва: банальнейший трабл
СообщениеДобавлено: 30 дек 2013, 09:50 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Что же я там непонятного написал? Посмотрите: // Вычислить длину имп. для сервы и вписать в OCR1A

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA + серва: банальнейший трабл
СообщениеДобавлено: 30 дек 2013, 12:57 
Не в сети
Аватара пользователя

Зарегистрирован: 27 окт 2011, 22:32
Сообщения: 133
Откуда: Ростов-на-Дону
Skype: skyzi007
прог. языки: Python, Си (МК)
ФИО: Святослав Игоревич
Angel71 писал(а):
SkyZi, если уверены, что тайминги правильные, так калибруйте серву.

а поточнее можно?
p.s. с армии вернулся. чуток разучился в программирование, сильно не "бейте"), и так не "ас" был)

_________________
Project "Hexxx" (in progress...)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ATMEGA + серва: банальнейший трабл
СообщениеДобавлено: 30 дек 2013, 19:51 
Не в сети
Аватара пользователя

Зарегистрирован: 18 апр 2009, 22:18
Сообщения: 10668
как так не бить ногами? не не не, так не пойдёт. :) шучу. под калибровкой в данном случае понимается нахождение каким управляющим импульсам соответствуют крайние положения сервы. нашли, что у неё крайние 500-2250 или 700-2400 или ещё какие, сможете подсчитать каким импульсам соответствует середина. при управлении каждой сервой потом используете эти значения для корректировки + если в крайнем положении это оно физически в ограничитель упирается, то очень желательно сделать запас хотя бы на 50, что бы серву не клинило.
а с управляющими импульсами... самый простой вариант - это просто посмотреть даталоггером и если нужно, то уже искать где косяк. проверить фьюзы, код, как вы там прерывания настраиваете, что у вас вообще в коде. кварц, кондёры и т.д. на плате. может проблема в электроинке сервы. в общем много вариантов что и как можно проверять.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO