roboforum.ru

Технический форум по робототехнике.
Текущее время: 17 фев 2025, 08:04

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




Начать новую тему Ответить на тему  [ Сообщений: 39 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: SERVO - управление по i2c через ATmega8
СообщениеДобавлено: 24 апр 2008, 02:11 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
http://OpenServo.org - как переделать серву для индивидуального управления с обратной связью по i2c

Было создано много тем и много вопросов по поводу "А как управлять сервой?" или "А как сделать управление сервой на прерываниях?". Ну всё, положим этому конец! Написал программу на скорую руку, управление 7-ю сервами по TWI( i2c ) на прерываниях с использованием ATmega8. Сразу скажу, что можно сделать и больше серв, но эта программа для обучения. Кто захочет - сделает больше. Также приведен проект в Протеусе.

Пакет для управления сервами по i2c такой:
[ S | addr | A | num | A | angle | A | speed | A | P ], где
S - start состояние,
A - ACK(подтверждение),
num - номер сервы от 0 до 6,
angle - угол в который нужно поставить серву ( от 0 до 90 град , а центральное положение 45 град),
speed - скорость с которой следует повернуть серву ( от 1 до 255 ),
{ Внимание, скорость НЕ выражена в чем либо. Чтобы выставлять скорость в, к примеру, рад/сек, нужно производить расчеты. }
P - Стоп.

Пример пакета для протеуса( с помощью i2c-debugger):
S 04 A 0x05 A 0x10 A 0x0A A P, где выставляем серву под номером 5 на 16 градусов, со скоростью 10. (см. приложенную картинку)
Еще пример:
S 04 A 0x01 A 0x10 A 0x0A A 0x02 A 0x10 A 0x0A A 0x03 A 0x10 A 0x0A A 0x04 A 0x10 A 0x0A A P, где на выставили такиеже значения как и в предыдущем примере, только на сервы 1, 2, 3, 4. Таким образом, можно слать пакеты по 3 байта либо кратные трем..

Также можно отлаживать программу с помощью графика, см. рисунок.
Внимание, чтобы отсимулировать график - вам необходимо выставить галочки "Exclude from simulation" на каждой серве, иначе выдаст ошибку. Для обычного симулирования - галки нужно убрать.

ЗЫ:
Программу не успел еще откомментировать, потом сделаю.
Все вопросы по программе задавайте, отвечу.


Вложения:
avr_servo_i2c_build_005.rar [40.75 КиБ]
Скачиваний: 453
servo_2.JPG
servo_2.JPG [ 50.75 КиБ | Просмотров: 25728 ]
servo_1.JPG
servo_1.JPG [ 100.2 КиБ | Просмотров: 26322 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SERVO как управлять по i2c - пример на ATmega8
СообщениеДобавлено: 24 апр 2008, 09:26 
Не в сети
Аватара пользователя

Зарегистрирован: 21 дек 2006, 19:56
Сообщения: 4468
Откуда: Украина, г.Одесса
прог. языки: Delphi и С
Скачал :o
А где main.hex и чем компилить? И че так много файлов? А сервами рулить с ПК?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SERVO группа - управление по i2c через ATmega8
СообщениеДобавлено: 24 апр 2008, 09:45 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
если там есть мэйк файл
то можно сделать однозначный вывод в чём это компилить :)

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SERVO группа - управление по i2c через ATmega8
СообщениеДобавлено: 24 апр 2008, 10:14 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Вот откомпилил ( архив в прицепе ниже ) в WinAVR - viewtopic.php?f=2&t=3928

Включил в PROTEUS симуляцию по .COF - работает, но исходник Си не показывает при паузе симуляции. Симуляция по .HEX - тоже работает. В архиве оригинальный Мэйкфайл и новый.

Как настройть мэйкфайл WinAVR - http://avr123.nm.ru/04.htm

Master писал(а):
А сервами рулить с ПК ?


C любого устройства которое выдает сигналы i2c - микроконтролер и ПК тоже подойдут.

Пример програмного i2c (может быть выведен на разные ножки чипа) для AVR в папке C:CVAVRexamplesTHERM75
Аппаратный i2c (только на определенных ногах МК) называется в AVR TWI и настраивается тоже мастером кода и библиотеки есть в хелпе CVAVR.

Сергей писал(а):
angle - угол на который нужно повернуть серву ( от 0 до 90 )


Это точно угол НА который повернуть ? Или это угол в который поставить серву ?
Тогда 45 градусов середина - 1500 мкС ?

=======
и рисуночек симуляции перекомпановал
Изображение


Вложения:
servo_7_i2c.rar [73.89 КиБ]
Скачиваний: 228
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SERVO группа - управление по i2c через ATmega8
СообщениеДобавлено: 24 апр 2008, 13:08 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
avr123.nm.ru писал(а):
Это точно угол НА который повернуть ? Или это угол в который поставить серву ?
Тогда 45 градусов середина - 1500 мкС ?

Извиняюсь. Это угол В который поставить серву. К примеру: севра находилась в 45 град. Переслали ей пакет, и она, с принятой скоростью будет двигатся до заданного угла. :oops:

Управление Сервоприводом от PIC18F2455
http://www.instructables.com/id/Use-a-P ... bby-Servo/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SERVO - управление по i2c через ATmega8
СообщениеДобавлено: 23 май 2008, 15:04 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Почему _twi_module_switch()вызывается только после отработки всех серв? Программа очень долго удерживает линию SCL -- отработка команды для одной сервы займет до 100 мс, жуткие тормоза на шине. Есть какие-то причины не вызывать _twi_module_switch()в цикле внутри main() ? Время отработки одной команды снизится до ~400 мкс

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

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



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SERVO - управление по i2c через ATmega8
СообщениеДобавлено: 24 май 2008, 13:44 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
Вызываеца после обработки серв в период 20мс. Я не наблюдал тормоза. У меня обработка занимала несколько мс. И причина не вызывать в main() - снизица эффективность управления сервами, тк здесь все управляеца одним таймером. Вообще странно что тормоза, где и как ты их заметил?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SERVO - управление по i2c через ATmega8
СообщениеДобавлено: 24 май 2008, 19:50 
Не в сети
Аватара пользователя

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

На графиках прекрасно все видно. Первый -- оригинальный код, второй -- вызов _twi_module_switch() перенесен в главный цикл. Конечно, если этот контроллер -- единственное устройство на шине, и положение серв изменяется нечасто, тормоза могут быть и незаметны. А представь, что на шине висят еще несколько датчиков, плюс сервы должны одновременно выполнять какие-то сложные манипуляции -- тут тормоза и вылезут. Интересно, как ты померял эти несколько миллисекунд? "Несколько" просто не может быть, потому что слэйв хавает 1 байт с шины раз в 20 миллисекунд, а одна команда -- минимум 4 байта.

PS. Форум переставил картинки в обратном порядке
PPS. Сделал картинки поменьше

<V>: есть же кнопка [вставить в текст сообщения] - ставишь в нужном порядке, вот и все.


Вложения:
Комментарий к файлу: Первый
proteus1.png
proteus1.png [ 5.67 КиБ | Просмотров: 38164 ]
Комментарий к файлу: Второй
proteus2.png
proteus2.png [ 4.04 КиБ | Просмотров: 38128 ]

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

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

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SERVO - управление по i2c через ATmega8
СообщениеДобавлено: 24 май 2008, 23:52 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
А, понял, спасибо. Код поправлю


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SERVO - управление по i2c через ATmega8
СообщениеДобавлено: 14 июл 2008, 23:33 
Не в сети

Зарегистрирован: 14 июл 2008, 21:27
Сообщения: 2
а в железе кто-нибудь пробовал это сделать? Что-то i2c не фурычит... Как я понял mega8 - slave reciever. Почему тогда в коде идет настройка скорости TWBR = ((CPU_FREQ / TWI_FREQ) - 16) / 2 ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SERVO - управление по i2c через ATmega8
СообщениеДобавлено: 15 июл 2008, 00:29 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
Я смотрел работу в протеусе, до железа не дошло пока, тк задача поменялась
А насчет скорости, а что должно быть вместо?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SERVO - управление по i2c через ATmega8
СообщениеДобавлено: 19 июл 2008, 11:47 
Не в сети

Зарегистрирован: 14 июл 2008, 21:27
Сообщения: 2
Насколько я знаю, в слейве не должно быть настройки скорости - это дело мастера.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SERVO - управление по i2c через ATmega8
СообщениеДобавлено: 20 июл 2008, 20:20 
Не в сети

Зарегистрирован: 29 дек 2004, 23:15
Сообщения: 3744
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей
Если модуль переключаеца в режим мастера то ему нужна эта настройка. Но ничего страшного не будет если в слейве это будет настроено.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SERVO - управление по i2c через ATmega8
СообщениеДобавлено: 26 апр 2009, 14:05 
Не в сети
Аватара пользователя

Зарегистрирован: 25 апр 2009, 12:03
Сообщения: 169
Откуда: Москва
прог. языки: С
ФИО: Клесник Станислав Владимирович
А сами сервы I2C есть у кого? Там на проекте плата выложена, та она 4-х слойная! ЛУТ не пройдет. Пытаюсь вот на заводе сделать хотя бы платы.

_________________
Сон разума рождает чудовищ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: SERVO - управление по i2c через ATmega8
СообщениеДобавлено: 26 апр 2009, 14:25 
Не в сети
Аватара пользователя

Зарегистрирован: 06 окт 2004, 18:01
Сообщения: 24218
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов
OpenServo вроде на 2-слойке? Если вообще не на 1 стороне...

_________________
Проект [[Open Robotics]] - Универсальные модули для построения роботов


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

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


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

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


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

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