roboforum.ru

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

Модуль для управления сервами с интерфейсом I2C

Обсуждение и примеры готовых и самосборных компонент для построения роботов.

Модуль для управления сервами с интерфейсом I2C

Сообщение blindman » 30 май 2008, 22:05

Проектирую двунога на сервах. На первом этапе хочу сделать только ноги с 4 степенями свободы, потом добавить руки (3-4 DOF), и, возможно, увеличить число степеней свободы ног до 5-6. Встал вопрос, как всем этим хозяйством управлять, с помощью AVR -- по причине доступности, распространенности, да и просто потому, что нет сейчас желания изучать что-то еще. Рассмотрел варианты:

  • Чисто программная генерация импульсов, по одному за раз - наихудший вариант, отброшен сразу
  • Чисто аппаратная генерация импульсов -- с точки зрения точности , отличный вариант, но можно получить не более 6 каналов с чипа
  • Задание длительности импульса с помощью одного таймера для всех каналов, с последовательным перебором ( см. SERVO - управление по i2c через ATmega8). Недостаток тот же - ограниченное число каналов.
  • Чисто программная генерация импульсов, с предварительным заполнением таблицы, и затем с выводом из нее в порт. Преимущество метода в том, что за один проход можно обработать до 8 каналов. Недостаток - сильная загрузка контроллера, остается очень мало времени для общения с "внешним миром".
Победителем был признан последний метод :). Осталось решить проблему - как дать процессору достаточно времени для приема команд. Решил использовать второй контроллер, который будет принимать команды с шины I2C и сохранять их в буфере, а когда у первого контроллера есть время, он будет получать информацию через SPI. При частоте внешней шины I2C 100 КГц нагрузка на нее будет небольшой.

Получилось вот что: при тактовой частоте 16 МГц и 1МГц на SPI, можно получить до 40 каналов (если конешно у контроллера хватит ног :) ). Если же увеличить период импульсов до 25мс, то можно на ATMEGA128 сделать 48 каналов. Зачем так много? ну, просто потому что это круто :). Хотя, может пригодиться для кокой-нибудь гусеницы.

Для моих целей, для рук и ног хватит 20 каналов на руки и ноги. Если использовать AtMega32, получается 28 каналов (32 минус 4 для SPI) - остается запас для головы и кистей рук.

Выкладываю файлы в формате протеуса (схема + плата) и AVR studio (прошивки для 2 контроллеров). Хотелось бы услышать:
- предложения по оптимизации кода
- замечания по разводке платы. Опыта у меня очень мало. Не уверен насчет разводки SPI.

В настоящий момент, реализован простой протокол для управления по I2C:
[ S addr command number (position speed ) + P ]

S - старт-состояние
command - код комманды. В настоящее время поддерживается только 0x01 - задание порядкового номера сервы.
number - порядковый номер сервы
position - положение, в которое установить серву. Задается в микросекундах.
speed - скорость, с которой двигаться к заданному положению. Задается в микросекундах за период (20 мс). Ноль - немедленное изменение положения
P - стоп-состояние

position и speed могут повторяться, при этом каждая последующая комбинация соответствует следующей по порядку серве

position и speed -- двухбайтный значения, сначала младший байт.

В планах -- добавить команды для перехода на управление в градусах, и установки индивидуальных характеристик серв (длительность импульса в центральном положении, соответствие между углом поворота и длительностью импульса и т.п.)
Вложения
servo.rar
(77.26 КиБ) Скачиваний: 75
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

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

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

Re: Модуль для управления сервами с интерфейсом I2C

Сообщение Сергей » 31 май 2008, 19:50

Из мухи сделал слона. Управление сервами проще всего сделать на с помощью микрух cd4015B. Вот тебе сцылки для размышления http://www.allaboutcircuits.com/vol_4/chpt_12/4.html, http://paparazzi.enac.fr/wiki_images/Tiny_v1-1_schematic_1.png. При этом используется только один таймер для управления около 24-мя сервами, короче смотри сцылки, поймешь.
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Re: Модуль для управления сервами с интерфейсом I2C

Сообщение avr123.nm.ru » 31 май 2008, 20:34

blindman писал(а): Чисто аппаратная генерация импульсов -- с точки зрения точности , отличный вариант, но можно получить не более 6 каналов с чипа


Можно столько сколько ног свободных.

Вот вам пример - управление 8 servo
http://avr123.nm.ru/z13.htm

А вот ATmega8 управляет 32 !!! Servo - контроллер SSC-32
http://www.active-robots.com/products/m ... ervo.shtml

Схема и исходники под CVAVR.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Модуль для управления сервами с интерфейсом I2C

Сообщение blindman » 31 май 2008, 21:41

avr123.nm.ru писал(а):
blindman писал(а): Чисто аппаратная генерация импульсов -- с точки зрения точности , отличный вариант, но можно получить не более 6 каналов с чипа


Можно столько сколько ног свободных.


Под чисто аппаратной генерацией имеется в виду задание ширины импульса таймером с ШИМ, когда вся работа программы заключается в записи 1-2 регистров.

avr123.nm.ru писал(а):Вот вам пример - управление 8 servo
http://avr123.nm.ru/z13.htm

А вот ATmega8 управляет 32 !!! Servo - контроллер SSC-32
http://www.active-robots.com/products/m ... ervo.shtml

Схема и исходники под CVAVR.


SSC-32 использует как раз внешние регистры -- на фото хорошо видно.

Конечно, ступил я конкретно :cry: Сергей, спасибо большое. Одно радует - что не успел сделать все это в железе :)
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

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

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

Re: Модуль для управления сервами с интерфейсом I2C

Сообщение Сергей » 31 май 2008, 22:35

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


Вернуться в Готовые модули

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

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

cron