роботы
робототехника
микроконтроллеры
Главная
Как сделать робота
Новости
Спорт
Статьи
Wiki
Форум
Downloads
Ссылки
Контакты  

BEAM-РОБОТЫ
Создание BEAM-роботов - это не просто технологический процесс или увлекательное хобби. BEAM - это целая культура, со своей философией и эстетикой.  

Патч от myROBOT
WinAVR Patch устраняет проблему совместимости WinAVR с Windows 10, Windows 8.1.  

Обзор подходов к созданию роботов с элементами самосознания
Корнеллский робот. Робот университета Мейдзи. Эволюционное моделирование самосознания.

ШИМ на ПЛИС, или Как сделать 16-ти канальный ШИМ-контроллер

ШИМ (PWM) - Широтно-Импульсная Модуляция (Pulse-Width Modulation)

Широтно-Импульсная Модуляция - это способ кодирования аналогового сигналa путём изменения ширины (длительности) прямоугольных импульсов несущей частоты. С помощью ШИМ можно менять скорость обычного электродвигателя или управлять серводвигателем.


Автор статьи: Predator

В предыдущей статье было описано, как создать проект на ПЛИС, получить и отладить прошивку и зашить её в микросхему. Теперь перейдем ближе к робототехническим делам. Самым распространенным робототехническим делом является получение информации от сенсоров и управление механизмами. Вот управлению механизмами эта статья и посвящена. Обычно робототехнические механизмы построены на основе электродвигателей, шаговых двигателей, соленоидов, сервомашинок. Управлению двигателями и соленоидами ПЛИС сильно не помогут (об этом писать не будем), а вот сервомашинки - великолепное поле деятельности для ПЛИС. Сервомашинки бывают "аналоговые" и "цифровые", аналоговым на вход нужно подать напряжение; цифровым - поток ШИМ-импульсов. В принципе это несложно сделать с помощью контроллера, особенно того, у которого есть встроенный модуль ШИМ, но при применении цифровых сервомашинок возникает нюанс: для большинства машинок скважность должна быть от 20 и более. То есть от 256 шагов модуля ШИМ контроллера остается порядка 16 шагов, что не всегда приемлемо. Кроме того, для построения, например, шагающего робота приходится применять несколько сервомашинок (иногда до десятка и более). Все эти казусы приводят к тому, что приходится делать программную ШИМ, и котроллер только и занимается её генерацией (не говоря уже о сложности кода). Вот для решения этих проблем я и предлагаю применить ПЛИС.

О создании проекта и схемы уже написано, перейдем сразу к делу: ядром системы является счетчик импульсов и компаратор (рис. 1).


Счетчик импульсов и компаратор

Рис. 1
(рисунок кликабелен для увеличения, откроется в новом окне)


Сия система работает следующим образом: счетчик считает (неожиданно, не так ли?) импульсы clk, досчитывает до константы, поданной на порт "B" компаратора (в нашем случае она равна 0000 1010 0000 0000 =2560), сбрасывается в 0, и так по кругу. Одновременно со сбросом счетчика взводится в 1 один из выходов ШИМ и стоит в 1, пока счетчик не досчитает до значения, записанного в регистр, после этого сбрасывается в 0. Регистр у нас 8-битный, поэтому записать туда можно от 0 до 255 - получаем модуль ШИМ - на диапазон от 1/2560 до 256/2560. Осталось, собственно, положить значение в регистр. Значение мы планируем получать извне, посредством, например, SPI-интерфейса (рис. 2).


Xilinx ISE Webpack

Рис. 2
(рисунок кликабелен для увеличения, откроется в новом окне)


Здесь простой регистр сдвига на 12 бит и 4-битный дешифратор канала ШИМ (не ради одного канала мы это затеяли). 4 старших разряда, первыми попавшие в SPI- канал, представляют собой адрес канала ШИМ, куда прописываются младшие 8 разрядов. Разрешение на запись в канал выставляется после снятия сигнала SPI_CE, а если вернемся на рис. 1, то можем заметить, что запись в регистр выполняется по такту SPI_CLK - это потребует еще одного такта SPI_CLK, но нам это несложно. Можно, конечно, записать по такту CLK, но, во-первых, это заставит переписывать значение каждый такт (в принципе ничего страшного, просто электричество дополнительно будет кушать), а во-вторых, приведет к соревнованию фронтов сигнала WE(x), генерируемого на тактовой SPI_CLK и самого CLK. Симулируем 1 канал (рис. 3). Чтобы убедиться, что он в принципе работает, прописываем через SPI нужное значение (я прописал 255), смотрим на тайминги ШИМ и видим необходимую скважность (с точностью до установки курсоров).


Xilinx ISE Webpack

Рис. 3
(рисунок кликабелен для увеличения, откроется в новом окне)


Пришло время добавить каналов в схему. Для этого придется увеличить размер страницы: Edit -> Change Sheet Size. Берем группу из регистра, компаратора и выходного триггера и клонируем (с помощью копи-паста), поправляем наименования цепей - 16-ти канальный ШИМ-контроллер готов (рис. 4).


Xilinx ISE Webpack

Рис. 4
(рисунок кликабелен для увеличения, откроется в новом окне)





Исходники:
plis_pwm.zip - исходные файлы проекта

Автор:
Predator

13.01.2013


Cм. также:
Как начать работать с программируемыми логическими интегральными схемами (ПЛИС)












Copyright © myrobot.ru, 2005-2023


Яндекс.Метрика   Рейтинг@Mail.ru