/
Author: Кравченко А.В.
Tags: блоки обработки данных процессоры программирование микроконтроллеры компьютерные технологии
ISBN: 978-5-7931-0845-4
Year: 2011
Text
ПРАКТИКА
ИНЖЕНЕРНОЙ ЭЛЕКТРОНИКИ
Кравченко А.В.
10 практических устройств на
AVR-микроконтроллерах
А. В. Кравченко
10 практических
устройств на
AVR-микроконтроллерах
КНИГА 3
Киев, "МК-Пресс"
СПб, "КОРОНА-ВЕК"
2011
ББК 32.973-04
УДК 004.312
К78
Кравченко А. В.
К78 10 практических устройств на AVR-микроконтроллерах. Книга 3 - К.:
“МК-Пресс”, СПб.: “КОРОНА-ВЕК’, 2011. -416с., ил.
ISBN 978-5-7931-0845-4 (“КОРОНА-ВЕК’)
ISBN 978-966-8806-70-4 (“МК-Пресс”)
Вы держите в руках третью книгу из серии сборников с практическими примерами
применения микроконтроллеров AVR. В ней основной упор сделан на модели роботов.
В частности, подробно рассмотрены следующие десять завершенных устройств на базе
микроконтроллеров AVR, которые можно собрать в домашних условиях: измеритель сол-
нечной активности; простой робот на солнечных батареях; усложненный робот на солнеч-
ных батареях; солнечный миниэлектромобиль; робот “Ползун"; робот "Sumo bot"; робот-
проходчик лабиринта; светоэффект вращения; радиоуправляемый джип; робот-катер. Ка-
ждому устройству посвящена отдельная глава, где подробно описаны все этапы создания
микроконтроллерной модели и программ, начиная со структуры и блок-схемы, и заканчи-
вая самой программой и готовым рабочим кодом.
ББК 32.973-04
Кравченко Алексей Владимирович
10 практических устройств
на AVR-микроконтроллерах
КНИГА 3
Гпавный редактор: Ю. А. Шпак
Подписано в печать 03.03.2011. Формат 60 х 84 1/16. Бумага офсетная. Печать офсетная.
Усл. печ. л. 24,2. Уч.-изд. л. 15,9. Тираж 1000 экз. Заказ № 131
СПД Савченко Л.А., Украина, г. Киев, тел./факс: (044) 517-73-77; e-mail, info@mk-press.com
Свидетельство о внесении субъекта издательского дела в Государственный реестр
издателей, производителей и распространителей издательской продукции:
серия ДК №51582 от 28.11.2003г
ISBN 978-5-7931-0845-4 (“КОРОНА-ВЕК")
ISBN 978-966-8806-70-4 (“МК-Пресс")
© Кравченко А.В., текст, иллюстрации, 201
© “МК-Пресс", оформление, 2011
3
Содержание
Введение...............................................7
ГЛАВА 1. ИНСТРУМЕНТАРИЙ.................................12
Макетные платы........................................12
Вариант №1..........................................12
Вариант №2..........................................14
Вариант №3..........................................17
Вариант №4..........................................17
Пайка SMD.............................................18
Микродрель............................................22
Газовая горелка.......................................26
Тиски.................................................29
Программатор AVRDragon................................31
Связь программатора с микроконтроллерами............36
Режим программирования ISP........................37
Режим программирования JTAG.......................37
Параллельный режим программирования...............37
Технология производства односторонней платы...........40
Подготовка печатной платы...........................40
Подготовка рисунка разводки платы...................40
Нанесение трафарета.................................40
Сверление...........................................41
Нанесение рисунка...................................41
Новые технологии....................................42
Травление платы.....................................43
Проверка качества...................................44
ГЛАВА 2. “СОЛНЦЕМЕР”....................................45
Структурная схема.....................................47
Принципиальная схема..................................48
Монтажная плата.......................................50
Алгоритм работы.......................................53
Программа.............................................53
Эксплуатация..........................................63
ГЛАВА 3. ПРОСТОЙ “SOLAR ВОТ”............................64
Схема №1..............................................65
4
Схема №2...........................................67
Схема №3...........................................68
ГЛАВА 4. СОЛНЕЧНЫЙ РОБОТ “SOLAR ВОТ”.................71
Дизайн............................................:72
Структурная схема..................................73
Принципиальная схема...............................75
Алгоритм работы....................................77
Программа..........................................78
Монтажная плата....................................84
Конструкция........................................87
Сборка...........................................88
Эксплуатация.......................................90
ГЛАВА 5. СОЛНЕЧНЫЙ МИНИЭЛЕКТРОМОБИЛЬ “МУХА”...........91
Структурная схема..................................96
Принципиальная схема...............................97
Алгоритм работы....................................99
Программа.........................................100
Монтажная плата...................................106
Конструкция.......................................107
Эксплуатация......................................110
ГЛАВА 6. РОБОТ “ПОЛЗУН”.............................111
Дизайн............................................114
Структурная схема.................................115
Принципиальная схема..............................116
Алгоритм работы...................................118
Программа.........................................121
Монтажная плата...................................134
Конструкция.......................................137
Эксплуатация......................................140
ГЛАВА 7. РОБОТ “SUMO ВОТ”...........................141
Дизайн............................................143
Структурная схема.................................145
Принципиальная схема..............................147
Алгоритм работы...................................149
Программа.........................................151
Монтажная плата...................................153
5
Конструкция........................................157
Сборка...........................................162
Эксплуатация.......................................163
ГЛАВА 8. ПРОХОДЧИК ЛАБИРИНТА.........................166
Дизайн.............................................167
Структурная схема..................................168
Принципиальная схема...............................171
Монтажная плата....................................173
Математическая модель..............................179
Алгоритм работы....................................180
Программа..........................................183
Конструкция........................................201
Настройка..........................................206
Эксплуатация.......................................207
ГЛАВА 9. СВЕТОЭФФЕКТ ВРАЩЕНИЯ........................208
Теоретическое построение светоэффекта..............210
Структурная схема..................................210
Принципиальная схема...............................212
Алгоритм работы....................................214
Программа..........................................217
Монтажная плата....................................228
Выключатель питания................................230
Сборка.............................................232
Эксплуатация.......................................233
ГЛАВА 10. ПРОПОРЦИОНАЛЬНОЕ РАДИОУПРАВЛЕНИЕ............234
Структурная схема..................................235
Шифратор-передатчик радиоуправляемой модели........236
Монтажная плата передатчика........................238
Теория управления..................................240
Тестовая программа.................................241
Алгоритм тестовой программы......................243
Программа передатчика..............................256
Конструкция передатчика............................270
ГЛАВА 11. РАДИОУПРАВЛЯЕМЫЙ ДЖИП......................272
Приемник радиоуправляемой модели...................273
Монтажная плата приемника........................276
6
Настройка приемника..............................278
Схема микроконтроллерного управления..............278
Монтажная плата..................................280
Тестовая программа...............................285
Рабочая программа приемника......................297
Конструкция.......................................331
ГЛАВА 12. РОБОТ-КАТЕР...............................337
Теория ориентации.................................338
Дизайн............................................339
Принципиальная схема..............................340
Монтажная плата...................................343
Тестовые программы................................346
Tecml. Шаговый двигатель.........................347
Тест2. Антенна 1-4, автоуправление двигателем....364
Программа.........................................364
Внутрисхемное программирование...................406
Конструкция.......................................406
Эксплуатация......................................412
СПИСОК ЛИТЕРАТУРЫ...................................413
СОДЕРЖИМОЕ ПРИЛАГАЕМОГО К КНИГЕ DVD-ДИСКА.............415
7
Введение
Здравствуйте, дорогие радиолюбители. Вы держите в руках очеред-
ную книгу, описывающую десять практических примеров разработки
моделей на микроконтроллерах, имеющих отношение к робототехнике.
В основу этого материала заложены современные идеи моих авторских
радиолюбительских устройств, а также проверенные мною концепции
моделей из мировой практики радиоэлектроники. Модели рассматрива-
ются по принципу “от простого к сложному”.
Основная идея книги: “Роботы — наше будущее”. Все чаще в сред-
ствах массовой информации раскрываются новейшие разработки в об-
ласти робототехники. Начальная стадия развития этой сферы широко
спонсируется и стимулируется в США, Канаде, Великобритании, Евро-
пе, и особенно развита в Японии. Разработка и производство, начиная
с игрушек и художественного подражания, и заканчивая действующими
моделями роботов, охватили весь мир. При этом воплощается в жизнь
лозунг: «Кто первый, тот всегда победит». Впрочем, даже если и не
быть первым, а хотя бы стремиться к первенству, то можно достичь вы-
соких показателей.
В США в области робототехники работает около 80 предприятий,
в Японии — около 40. Сегодня высокие технологии, подобно спорту,
требуют особого внимания, неимоверных усилий, умственного потен-
циала, финансирования со стороны как государства, так и коммерческих
структур. И конечно же, первые всегда — радиолюбители.
Радиолюбительство — это энтузиазм плюс коллективный труд от-
дельных личностей. Бурное развитие микроконтроллерной техники не
позволяет стоять на месте, требует новых новаторских решений. Схемо-
техника прошлого столетия только отчасти помогает в решении слож-
ных задач. Обществу нужны новые идеи, молодые умы. Имея в своем
распоряжении обширный инструментарий в одной микросхеме микро-
контроллера, и обладая развитым абстрактным мышлением, можно быс-
тро решать бытовые, промышленные и финансовые проблемы челове-
чества.
Сегодня, микроконтроллерной техникой не пользуется только лени-
вый. Микроконтроллеры широко доступны на рынке. Они варьируются
по цене и возможностям, позволяя перевести многие сферы жизни об-
щества на новый уровень развития. Банкоматы, мобильные телефоны,
автоматические кассы, автоматы приготовления кофе — все это уже ра-
ботает на человека.
8
Конечно, такие сложные устройства не рассматриваются в книге, но
изготовить простые модели радиолюбителям вполне под силу. В книге
представлены новейшие проекты автора. Многие идеи и концепции по-
заимствованы из мировых достижений. Автор проводит параллель меж-
ду иностранными разработками и собственными моделями. Особое
внимание уделено робототехнике.
Глядя со стороны, можно сказать, что модели повторяют известные
игрушки. Но зачем они нужны? Все конструкции начинаються с прото-
типов. Самое главное — это не оболочка, а то, что заключено внутри
конструкции: программа, пути решения поставленных задач, неявные
блоки, элементы конструкции, концепции, механизмы... Пока все это —
отдельные фрагменты сложной мозаики. Развивая, анализируя и приме-
няя эти фрагменты в повседневной жизни, мы готовим наш разум к ро-
бототехническому будущему, создаем реальную картину. Только так
можно увидеть будущих роботов, помощников человечества. Только так
можно приблизить будущее к современности. Пришло время от дискус-
сий переходить к действиям.
При этом надо понимать, что роботы — это не оружие в руках не-
честных политиков, не заменитель человека на земле, не повод для по-
такания лени. Роботы — это помощники в построении цивилизации, пе-
реходе на новую ступень развития человечества. Развивая прогрессив-
ное мышление в области робототехники среди молодежи, мы поможем
стране стать технологически развитым государством в будущем. И кто,
как не радиолюбители, создадут новейшие модели роботов, автоматов,
манипуляторов, необходимых обществу?
Кризис, инфляция, неурядицы — все это не повод для остановки,
а наоборот — стимул к решительным действиям. Робототехника откры-
вает новые перспективы для молодежи. Создание роботов станет стиму-
лом для формирования новых отраслей промышленности, новых науч-
ных направлений, поскольку для создания роботов необходимы обшир-
ные познания в различных областях науки и техники.
Новейшие композитные материалы, узлы конструкций, программы
на разных языках — таков далеко не полный перечень вопросов, ре-
шаемых радиолюбителями. Потребуются усилия для поиска дешевых
материалов, создания готовых блоков программ, дешевых источников
электроэнергии, и конечно же, — путей внедрения в жизнь общества ро-
ботов-помощников.
Автономные, исполнительные, трудолюбивые роботы на солнечной
энергии, энергии атома, синтетическом газе помогут человеку решить
сложные вопросы, связанные с современными технологиями. И конеч-
9
но, всегда будет звучать вопрос: “Может ли робот заменить человека?”.
Робот может взять на себя изнурительный, тяжелый и опасный труд, но
разум и принципы существования человека он не заменит. Он лишь вы-
полняет программу, принципы которой закладывает человек.
В этой книге раскрыты некоторые аспекты и концепции построения
автоматических роботов, управляемых собственной программой. Не-
сложные алгоритмы искусственного интеллекта, аналого-цифровые ло-
гические действия рассмотрены на примерах практических моделей.
Автор разбил все проекты на две категории: движущиеся роботы
и стационарные автоматы. К движущимся относятся роботы на колесах
(“Охотник за светом”, “Sumobot”, “Проходчик лабиринта”, “Солнечный
робот”), на гусеницах, передвигающиеся на конечностях, летающие,
плавающие над и под водой.
К стационарным автоматам относятся коммуникационные устрой-
ства, стационарные механизмы подъемников, манипуляторы или приво-
ды к поворотным устройствам или видеокамерам, вращающиеся ин-
формационные табло.
Основная задача, решения которой добивался автор, — это удешев-
ление конструкций. Неотъемлемой частью робота всегда будут механи-
ческие узлы. Собрать электронику и не уделить внимание механике, —
недопустимая логика инженера-невежды, поэтому автор детально рас-
смотрел задействованную в конструкциях механическую часть. Собрать
механический узел под заказ в коммерческой фирме — для радиолюби-
теля слишком дорого. Содержать дома набор металлорежущих или об-
рабатывающих станков — тоже очень дорого. Остается единственный
путь: использовать детали с нерабочих механизмов.
Для моделирования роботов очень хорошо подходят механические
детали списанных CD-приводов, флоппи-дисководов, старых кассетных
и бобинных магнитофонов, видеоплейеров, клавиатуры и дисплеи ста-
рых или некондиционных микрокалькуляторов, коробки для компакт-
дисков, механизмы старых пишущих машинок и т.д. Весь этот комплекс
позволяет собрать дешевую современную модель из устаревших непри-
годных материалов, вдохнуть вторую жизнь в отработанные узлы. Не-
обходима только фантазия. И не стоит огорчатся из-за несуразности мо-
дели. Главное — это концепция, работающая программа, а детали меха-
низма всегда можно модернизировать, переделать и заменить.
Автор применяет неизменный подход к построению моделей. Сна-
чала концепция строится на бумаге, потом проводится изучение харак-
теристик комплектующих и радиодеталей. Следующий этап — дизайн,
подбор механических узлов, блок-схема. Далее следует создание тестов,
10
программы, и, наконец, — пайка схемы. Когда все готово, необходимо
провести тестирование отдельных узлов, выявить недостатки и модер-
низировать схему.
В процессе разработки все этапы конструирования приходится по-
вторять несколько раз. В этом и заключается путь к достижению успеха,
творчество радиолюбителя. Если конструкция слишком сложная для
моделирования, и ее не удается заставить работать, необходимо упро-
стить схему, изменить назначение, изменить идею. Если это все равно
не дает результата, следует обратиться за советом к опытным специали-
стам или попробовать собрать и протестировать один элемент схемы.
Что же является основным препятствием в процессе создания моде-
лей? В робототехнике главный источник проблем — это конструкции
электроприводов, механических редукторов, подвижных механизмов.
Собрав один простой элемент электромеханики, можно перейти к сле-
дующему узлу. Фантазия радиолюбителя подскажет, как получить же-
лаемый результат. Так, постепенно собирается весь узел, вся конструк-
ция. Главное — иметь представление о конечном ее виде.
Тем, кто только начинает свой путь в мире радиоэлектроники, не-
обходимо выучить многие направления науки и техники. Учиться нико-
гда не поздно. Вначале надо выучить английский язык, потом — про-
граммирование, потом — электронные схемы, а потом можно уже и са-
мому создавать микроконтроллерные модели.
Представленные в книге модели проверены автором, но вы можете
попробовать модернизировать их или изменить элементы конструкции.
Эта книга была написана именно для стимулирования творчества ра-
диолюбителей. В ее первых главах рассмотрены технологические аспек-
ты изготовления моделей. Знать инструментарий и уметь им пользо-
ваться — очень важно. Будущий инженер должен быть готов выполнить
любые слесарные работы. Кроме того, в книге рассмотрены вопросы
программирования микроконтроллеров и технология изготовления пе-
чатных плат.
На прилагаемом к книге DVD-диске можно найти небольшие ви-
деофильмы, иллюстрирующие рассмотренные устройства (автор выра-
жает особую благодарность своему другу Анатолию Головко, активно
помогавшему в создании этих видеороликов). На диске также есть папка
изображениями монтажных плат в масштабе 1:1 (в том числе — для пе-
чати на принтере в зеркальном отображении). Папка Программы содер-
жит файлы кодов для AVR Studio 4, а папка Справочник — справочные
материалы по используемым элементам.
11
Автор будет очень признателен за отзывы радиолюбителей. О своих
замечаниях или исправлениях пишите в редакцию. Они обязательно бу-
дут рассмотрены в полном объеме. Диалог — это важный инструмент
познания, книга же — первый этап познания, диалог с окружающим ми-
ром. Читайте и собирайте описанные здесь конструкции. Я верю: у вас
все получится! С уважением,
инженер промышленной электроники
А.В. Кравченко
Глава 1
Инструментарий
Макетные платы
Конструирование любой модели обязательно приводит к макетиро-
ванию, и электроника — не исключение из общего правила. Почему же
схемы вначале макетируют? Ответ прост: схема во время эксперимента
изменяется, дополняется или упрощается. В ней может возникнуть элек-
тромагнитная несовместимость элементов, поэтому их желательно раз-
нести в разные части платы. Кроме того, после успешного испытания
схема уменьшается в габаритах, поскольку переводится на очень ма-
ленькие детали поверхностного монтажа (работать с мелкими деталями
при создании схемы очень неудобно).
Для радиолюбительских конструкций отсутствует потребность мас-
сового тиражирования, поэтому радиолюбителю достаточно быстро спа-
ять схему навесным монтажом. Изготовление двухсторонней платы тре-
бует больших усилий и финансовых затрат. Для того чтобы их избежать,
применяются дешевые макетные платы.
Перечисленные выше аргументы свидетельствуют в пользу макети-
рования электронных схем. К сожалению, в этой области промышлен-
ность не имеет разработок ввиду отсутствия экономической выгоды, по-
этому выбор невелик. Впрочем, небольшие компании заинтересованы
в сбыте даже такой непопулярной продукции.
Автор предлагает рассмотреть макетные платы, изготовленные по-
лукустарным методом в четырех вариантах.
Вариант №1
Макетные платы для простых элементов монтажа с выводами для
пайки в отверстиях платы (рис. 1.1) (CRS-160 160x100 мм). Эта плата
предназначена для установки большого количества элементов (CRS 107
170x60 мм) (рис. 1.2). Такие макетные платы могут иметь отдельные
шины питания и готовые позиции для монтажа интегральных микро-
схем (CRS-053 100x52 мм) с обычной перфорацией отверстий под эле-
менты монтажа с шагом в 1,5 inh (CRS-024 51x50 мм) (рис. 1.3). Отвер-
стия имеют двухсторонние залуженные пистоны (К206-044В 25х95 мм)
Инструментарий
13
(см. рис. 1.3), что позволяет вести пайку с двух сторон платы. При маке-
тировании можно вырезать необходимую часть платы или установить
еще несколько плат в коннекторы (бескорпусные разъемы) на основной
плате.
Рис. 1.1. Макетная плата CRS-160
Рис. 1.2. Макетные платы CRS-107 и CRS-053
14
Глава 1
Рис. 1.3. Макетные платы CRS-024 и К206
Впрочем, микросхемы с обычными выводами в DIP-корпусе посте-
пенно снимают с производства. Им на смену пришли микросхемы в кор-
пусе SOIC, TQFP, MLF. Монтаж этих деталей на обычную макетную
плату очень сложен, и потому коммерческие фирмы пошли навстречу
радиолюбителям, организовав специализированное производство.
Вариант №2
Совместное использование монтажных площадок для обычных эле-
ментов и для микросхем в корпусе SO1C (рис. 1.4) (CRS-045 50х90мм).
В таком варианте возможны комбинации. Элементы поверхностного мон-
тажа расположены отдельно в разных частях платы или в промежутках
между элементами (рис. 1.5) (45x30 мм). Корпуса SOIC представлены
в нескольких вариантах, которые повторяются в макетной плате (рис. 1.6)
(TR8050 52x86 мм). Также, присутствует разнообразие в установке эле-
ментов и шин питания (рис. 1.7) (TR4050 42x52 мм).
Еще одно преимущество — более плотное расположение отверстий
с мелким шагом в 0,75 inh. Такие макетные платы наиболее востребова-
ны, хотя и требуют хорошего зрения, поэтому для применения рассмот-
ренных во втором варианте плат необходимо увеличительное стекло.
Инструментарий
15
Рис. 1.4. Плата CRS-045
Рис. 1.5. Платы CRS-028 и CRS-054
16
Глава 1
Рис. 1.6. Плата TR8050
Рис. 1.7. Плата TR4050
Инструментарий
17
Вариант №3
Макетные платы-переходники, которые используются для микросхем
TQFP с большим количеством выводов (рис. 1.5, крайняя справа плата;
рис. 1.8). В боковые пистоны устанавливают однорядные бескорпусные
коннекторы. Такую плату можно вначале запрограммировать в програм-
маторе, а затем установить в панельку на основной плате.
Рис. 1.8. Макетная плата-переходник
Вариант №4
Макетные платы с технологией монтажа без припоя. Их очень часто
используют зарубежные радиолюбители. С помощью макетниц с зажи-
мами (рис. 1.9) можно быстро собрать и разобрать макет электронной
модели. Главное достоинство такого варианта — быстрая модернизация
схемы. Для простых и непродуманных схем это очень важно. Воплоще-
ние модели в жизнь — это сложный, тернистый путь разработки схемы.
Ограниченные знания в электронике могут привести к полной нерабо-
тоспособности схемы, поэтому такое макетирование получило широкое
распространение за рубежом среди начинающих радиолюбителей.
Еще одно преимущество данного варианта макетирования — высо-
кая скорость сборки макета без вреда для организма. Дело в том, что во
время пайки элементов выделяется много паров свинца, что может вы-
звать рак. Технология без припоя позволяет избежать таких заболеваний
и расширить кругозор в области электроники.
18
Глава 1
Рис. 1.9. Использование макетниц с зажимами
Выберите свой вариант и приступайте к макетирования схем. Же-
лаю удачи!
Пайка SMD
Микроэлектроника развивается очень быстрыми темпами. Выпол-
няется закон Мура: элементы уменьшаются, а производительность уве-
личивается. В розничной торговле появились в продаже элементы SMD.
Это позволило уменьшить габариты радиолюбительских конструкций.
Что необходимо для пайки SMD элементов? Прежде всего — дер-
жатель для плат (рис. 1.10). Платы могут быть разных размеров, поэто-
му держатель должен предоставлять возможность быстрого перестрое-
ния на любую конфигурацию. Также, обязательно необходимы зажимы
для удержания платы и тяжелое основание держателя для устойчивости
конструкции.
При пайке радиомонтажник удерживает в одной руке пинцет с эле-
ментом, а в другой — паяльник. В этот момент конструкция не должна
двигаться или шататься. Во время пайки, для удобства, плату необходи-
мо вращать, наклонять и т.д., поэтому держатель обязательно должен
быть оснащен шарнирами. В его состав также может входить увеличи-
тельное стекло, но автор чаще использует бинокуляры с увеличитель-
ными линзами и подсветкой.
Далее, необходим самозажимной пинцет (рис. 1.11) и SMD-элемен-
ты. Такой пинцет можно изготовить из дешевых китайских пинцетов,
проделав посередине пазы и согнув концы пинцета в обратную сторону.
Инструментарий
19
Рис. 1.10. Держатель для плат
Рис. 1.11. Самозажимной пинцет
20
Глава 1
Для пайки SMD желательно использовать паяльную станцию типа
ZD-927. Паяльник питается регулируемым источником напряжения 4,0-
10,0 В и оснащен очень тонким, конусообразным, съемным жалом (см.
рис. 1.10 и рис. 1.12).
Рис. 1.12. Паяльная станция ZD-927
Для того чтобы SMD-элемент сразу припаялся к плате, необходимо
использовать тонкую проволоку припоя и флюс (рис. 1.13). В трудно-
доступных местах иногда лучше использовать паяльную пасту с низкой
температурой плавления, которую наносят одноразовым шприцом. При
монтаже ответственных деталей можно воспользоваться безотмывоч-
ным флюсом.
Технология пайки следующая.
1. Разогревается паяльник.
2. Наконечник паяльника залуживается припоем.
Инструментарий
21
3. На плату наносится флюс.
4. Пинцетом удерживается элемент (корпусом вверх).
5. Элемент прислоняется к дорожке платы.
6. Паяльником наносится припой к одному из выводов элемента (пер-
вый раз, для удержания элемента).
7. С припоем пропаивается второй вывод элемента (операция выпол-
няется быстро, чтобы не нагреть корпус элемента).
8. Нагревается и основательно пропаивается первый вывод элемента
монтажа (припаянный на первом этапе) (рис. 1.14).
Рис. 1.13. Проволока припоя и флюс
22
Глава 1
Рис. 1.14. Процесс пайки
Поскольку пайка выполняется вручную, установить элемент мон-
тажа на дорожку ровно не всегда получается. Но лучше хорошо пропо-
ять выводы, чем правильно поставить элемент. Один из недостатков
SMD-элементов — их малые габариты.
После пайки необходимо обязательно проверить плату на “закорот-
ки”. Это все, чем автор может поделится с радиолюбителями по данно-
му вопросу.
Микродрель
Очень часто для быстрого изготовления отверстий необходима ма-
логабаритная дрель. Сверлить вручную не всегда удобно, и качество
сверления в радиолюбительских условиях всегда страдает, поэтому ав-
тор решил собрать микродрель. Для этого необходим электродвигатель
и съемная цанга для сверла. Эти две детали присутствуют в розничной
продаже по приемлемой цене. Автор приобрел электродвигатель (ки-
тайского производства) постоянного тока и цангу со сверлом (рис. 1.15).
Электродвигатель работает от напряжения 9-16 В при токе 300 мА,
и дает 1 000 об/мин при напряжении 9 В. Чем выше напряжение пита-
ния, тем выше скорость вращения двигателя.
Инструментарий
23
Рис. 1.15. Микродрель
Для полноценной работы были выполнены некоторые доработки.
Прежде всего, на двигатель устанавливается микровыключатель пита-
24
Глава 1
ния (см. рис. 1.15), который с помощью металлической планки крепится
к верхней части микродрели. Крепление должно быть жестким.
Далее припаиваем навесным монтажом выпрямительный диодный
мост на максимальный ток 1 А и электролитический конденсатор 4700
мкФ><25 В (рис. 1.16).
Рис. 1.16. Выпрямительный диодный мост и электролитический конденсатор
На вход диодного моста припаиваем провод от понижающего
трансформатора. Далее все детали монтажа изолируем и обворачиваем
микродрель самоклеющейся лентой (можно использовать изоленту).
Полученный результат показан на рис. 1.17.
Детали выпрямительного моста можно смонтировать совместно с
понижающим трансформатором, но в данной микродрели они выпол-
няют роль упора руки во время сверления. Если сверло застряло в от-
верстии, то весь вращательный момент передастся в руку, и микродрель
начнет вращаться в руке. Во избежание этого, на корпусе двигателя обя-
зательно должен присутствовать упор.
Еще одно преимущество: микродрель можно подключить к любому
источнику на 9-16 В как переменного, так и постоянного тока. Для ее
изготовления можно использовать любой двигатель — даже от кассет-
ных магнитофонов. Цангу также можно выполнить из медных или ла-
тунных трубок (например от сломанной телескопической раздвижной
Инструментарий
25
антенны), а для фиксации сверла использовать самодельные хомуты или
зажимы из двух полосок металла зажатых винтами по бокам.
Рис. 1.17. Полученная микродрель
Итак, микродрель готовы, цанга со сверлом установлена, и теперь
можно рассмотреть некоторые приемы сверления. Во время сверления
сверло должно находится под углом 90° к поверхности материала. При
создании глубоких отверстий сверло нельзя гнуть, иначе оно лопнет.
Обороты вала микродрели желательно регулировать в зависимости от
материала. Наиболее простой материал для сверления — это дерево,
и для деревянных заготовок необходимы малые обороты вала: 500-1000
об/мин. Сверлить следует без усилий. При этом отверстие в деревянной
заготовке не пригорает.
Оргстекло тоже “любит” малые обороты и сверление без усилий —
даже в несколько этапов высверливания стружки. Если пытаться свер-
лить за один этап, то стружка в отверстии плавится и заволакивает свер-
ло. При остывании сверло может застрять в отверстии, поэтому лучше
26
Глава 1
сверлить отверстие по 1-2 мм с выводом стружки наружу и чисткой ка
навок сверла.
Текстолит сверлят на скорости 1000-2000 об/мин с небольшим уси
лием, поскольку этот материал очень твердый. Медные дорожки жела-
тельно накернить шилом, чтобы сверло не передвигалось хаотически пс
плате. Их лучше сверлить на малой скорости 100-500 об/мин. Алюми-
ний и медь — достаточно вязкие материалы, поэтому при сверление
в них не надо прикладывать больших усилий.
Металл лучше сверлить на скорости 50-500 об/мин с большим уси-
лием прижатия сверла к поверхности. Во время сверления необходимс
смазывать кончик сверла жидким маслом, чтобы лучше охлаждалась
кромка сверла.
Угол заточки кромок по отношению к оси сверла колеблется в зави-
симости от типа материала. Для металла он составляет 75-90°, для тек-
столита — 65-70°, для оргстекла и дерева — 45-60°. Радиолюбителям не
всегда доступны свёрла одного и того же диаметра с разными углами
кромки. В этом случае лучше сверлить неспешно, в несколько заходов.
Для правильного сверления всегда необходима практика. Порабо-
тайте с ненужными образцами, а потом начните работу с деталями, и у
вас все получится.
Газовая горелка
Конструирование моделей предполагает изготовление рам, карка-
сов, корпусов из металла, оснований и т.д. В процессе сборки устройст-
ва возникают различные идеи по созданию несущего каркаса. Одно из
направлений — изготовление каркаса из медной проволоки путем пайки
отдельных деталей. Естественно, выполнить такую пайку паяльником
крайне затруднительно, поэтому для этого все чаще применяют газовые
горелки.
Автор использовал в своей практике два вида горелок. Первый и
них — горелка в виде авторучки (рис. 1.18) с небольшим объемом бал-
лона (около 15 мл газа). Ввиду своих малых габаритов, такая горелка
удобна в повседневной практике ремонта на выезде, однако слабое пла-
мя не позволяет паять медные провода сечением более 2 мм2. Регули-
ровка пламени ограничена. Еще один недостаток этой горелки — малый
срок эксплуатации. Поскольку газ содержит примеси, тонкое отверсти
редуктора быстро засоряется, а его ремонт — процесс сложный. По этой
причине в повседневной практике лучше использовать горелку, пока-
занную на рис. 1.19.
Инструментарий
27
Рис. 1.18. Газовая горелка в виде авторучки
Рис. 1.19. Второй вид газовой горелки
Для работы такой горелки необходимо дополнительно приобрести
баллончик с газом. Она оснащена редуктором для открытия подачи газа,
механизмом регулировки температуры пламени, а также — пьезоэле-
ментом для поджига газа.
28
Глава 1
Заправляется эта горелка следующим образом... Снимается основа-
ние горелки и нижней стороной надевается на вывод газового баллон-
чика. Затем горелкой нажимается клапан баллончика (в момент заряда
горелки надо посчитать до двух) и расслабляется клапан баллончика.
Это необходимо повторить три раза. Одной полной зарядке соответст-
вует 28 мл газа, чего достаточно для непрерывного горения в среднем
до одной минуты (иногда — дольше, в зависимости от качества газа).
Температура пламени составляет 1 200°С. Этого достаточно для
плавления олова и свинца и хорошего прогрева меди. При изготовлении
каркасов (рис. 1.20) автор применил горелку для спайки медных прово-
дов диаметром 2,5 мм.
Рис. 1.20. Каркас, созданный с применением газовой горелки
Элементы каркаса вначале залуживают, после чего кончики медно-
го провода нагревают, опускают в слабый раствор кислоты (соляной
или ортофосфорной), опять нагревают и паяют оловянным припоем. Га-
зовой горелкой можно нагревать элементы для демонтажа с платы, кем-
брики для изоляции оголенных проводов (фторопластовые трубки), лу-
дить насадки для проводов и т.д.
Инструментарий
29
Внимание!
Во время работы с газовой горелкой необходимо соблюдать правила техники
безопасности, работать в хорошо проветриваемом помещении и иметь под рукой
средства пожаротушения. Не доверяйте работу с горелкой детям. Газовые при-
надлежности храните в противопожарных ящиках
Тиски
Очень часто для уменьшения размеров платы или проведения сле-
сарных работ детали необходимо закрепить и жестко удерживать в не-
подвижном состоянии. В этом случае нам помогут тиски. В продаже
есть минитиски с функцией поворота, а также — тиски с присоской.
Наиболее распространены обычные тиски (рис. 1.21).
Рис. 1.21. Тиски
Для удобства автор закрепил тиски на платформе, что позволяет
ставить их на любую поверхность. Кроме тисков, для полноценной ра-
боты понадобятся струбцины разных размеров. С их. помощью аккурат-
но обрабатываемую деталь можно фиксировать и жестко закреплять
в тисках (рис. 1.22).
При изготовлении крыльев для робота “Solar bot 2” автор восполь-
зовался именно таким способом крепления. Деталь изготавливалась из
крышки коробки для оптических дисков. Крышка — из оргстекла, очень
хрупкая, при обработке дает трещины, что неприемлемо.
30
Глава 1
Рис. 1.22. Применение струбцины
На оргстекло с помощью маркера для оптических дисков наносится
линия обрезки. Далее крышка закрепляется в струбцине с мягкими лап-
ками. Пилкой с мелким шагом зубьев небыстрыми движениями под уг-
лом 30 45° к поверхности оргстекла делаются надпилы. Пилить детали
лучше сверху вниз. В результате, деталь для модели изготовлена без по-
вреждений.
На рынке также доступны домашние настольные тиски (рис. 1.23).
Для таких тисков нет необходимости применять струбцину. В них пре-
дусмотрены мягкие губки, а также пластиковые насадки на крепление
к столу (чтобы не повредить поверхность стола). Такие тиски реализуют
функцию поворота (рис. 1.24) и боковую фиксацию. Это позволяет вы-
полнять обработку деталей под любым углом.
Тиски можно использовать для изготовления небольших узлов мо-
дели. Для более трудоемких деталей такие тиски не подходят, посколь-
ку в своей конструкции имеют много пластмассовых элементов, однако
для изготовления платы или изделий из мягкого материала они очень
хороши, поскольку не создают царапин и не способствуют возникнове-
нию трещин.
Инструментарий
31
Рис. 1.23. Настольные тиски
Рис. 1.24. Функция поворота
Тиски крепятся к столу с помощью нижнего зажима. Он выполнен
как поворотная крышка из пластика, поэтому усилия зажатия не слиш-
ком велики. Это позволяет не наносить повреждений мебели.
Обрабатываемая деталь зажимается в губки тисков, угол регулиру-
ется с помощью фиксатора наклона, после чего деталь обрабатывается.
Угол наклона выбирают с учетом положения руки, которая должна сво-
бодно повторять возвратно-поступательные движения. Работы по обра-
ботке деталей желательно выполнять в просторном, хорошо освещен-
ном помещении на достаточно большом столе.
После первых неудач всегда приходит успех. Пробуйте, учитесь,
дерзайте!
Программатор AVRDragon
Во время конструирования микроконтроллерных устройств посто-
янно возникает вопрос: “Как быстро записать программу в микроконт-
роллер, и каковы новые достижения в этом направлении?”. В продаже
доступны универсальные программаторы и эмуляторы. Компания Atmel
установила новый стандарт для дешевых инструментальных средств
разработки. Одно из новшеств в области программирования микрокон-
32
Глава 1
троллеров — это плата программатора AVRDragon (рис. 1.25). Она про-
дается в фирменной коробке без принадлежностей. Программатор
AVRDragon поддерживает программирование всего семейства уст-
ройств AVR, а также поддерживает эмуляцию для устройств с памятью
программ на 32 Кбайт и более. Его можно обновлять программным
обеспечением производства Atmel.
Рис. 1.25. Плата программатора AVRDragon
Программатор позволяет работать с современными компьютерами
и операционными системами. Рассмотрим его возможности.
Поддерживаемые протоколы программирования микроконтроллера:
• Программный интерфейс (рис. 1.26).
1. Программирование по последовательному каналу (1SP).
2. Параллельное программирование при высоком напряжении
(HVSP).
3. Параллельное программирование (РР).
4. JTAG-программирование (JTAG).
• Интерфейс эмуляции для приборов с памятью 32 Кбайт и более.
1. JTAG
2. Отладка (debugWIRE dW).
Инструментарий
33
Рис. 1.26. Программный интерфейс AVRDragon
Плата AVRDragon позволяет программировать микроконтроллеры
через кабель связи или путем установки устройства непосредственно на
саму плату (рис. 1.27).
Рис. 1.27. Площадка для установки микроконтроллера
Соединение платы с компьютером и ее питание осуществляют через
кабель USB, аналогичный используемому для принтеров (рис. 1.28).
34
Глава 1
Рис. 1.28. Порт USB
Подробная инструкция пользователя AVRDragon выложена на сай-
те http://www.atmel.сот/avrdragon.
Для программирования микроконтроллеров можно использовать
среду AVR Studio версии 4.12 с Service Pack 3; 4.13 и выше. Для работы
с платой необходим компьютер со следующими минимальными харак-
теристиками:
• процессор: Pentium (Pentium II);
• операционная система: Windows 98/МЕ/2000/ХР;
• оперативная память: 128 Мбайт;
• AVR Studio 4.12 с Service Pack 3;
• USB-порт с выходным током 500 мА;
• связь с Internet для обновления программного обеспечения.
При наличии всего необходимого можно установить программу
AVR Studio 4 (распространяется компанией Atmel бесплатно). Для ее
получения необходимо зарегистрироваться на сайте www.atmel.com.
Установка программы не позволяет сразу подключить программатор.
После установки AVR Studio 4 к компьютеру через порт USB подклю-
чается плата AVRDragon, после чего необходимо войти в панель управ-
ления Windows и выбрать элемент Установка оборудования. Для ус-
тановки AVRDragon на экране появится окно, показанное на рис. 1.29.
Выберите верхний переключатель, соответствующий автоматиче-
ской установке драйвера, и нажмите кнопку Next (Далее). Драйвер для
работы с программатором установится, если в следующем окне мастера
установить флажок (рис. 1.30).
Инструментарий
35
ШЛ'ХЬ ГП <
Рис. 1.29. Найден программатор AVRDragon
Spsee Avsfe&e m £'
%? 73K3S К
•4ЙШ^
Т hesa ean be tn^^iedlatof by
аг«гй>д ptpgtdfft
wed Mcdfy
Ж3$?в*в *&ПШ££|
AVRStudind > bistallShiehl Wizard
Select f eatuies
Select the fedues letup w8 nstdl
W<dc^. $5 WrtdaetNT
Рис. 1.30. Мастер установки драйвера для программатора
36
Глава 1
После инсталляции выполните перезагрузку компьютера. Состоя-
ние программатора определяют по светодиодам, расположенным рядом
с разъемом USB (табл. 1.1).
Таблица 1.1. Определение состояния программатора по светодиодам
Светодиод Цвет Состояние
2 Зеленый Индикация USB-трафика
1 Красный Устройство не соединено с AVR Studio
Темный Устройство соединено с AVR Studio
Зеленый Передача данных
Желтый Линия изменяется или инициализируется
При запуске программы AVR Studio версии 4.13 и выше програм-
матор будет опрошен и при выборе соединения (рис. 1.31) — готов к ра-
боте с микроконтроллером.
Рис. 1.31. Выбор соединения с программатором в AVR Studio
Связь программатора с микроконтроллерами
Для дальнейшей работы с программатором необходимо изготовить
соединительные кабели. В зависимости от режима программирования,
у них будут разные разъемы, они и будут отличаться друг от друга.
Инструментарий 37
Режим программирования ISP
Для ISP-программирования между платой программатора и платой,
на которой микроконтроллер, устанавливают связь в виде кабеля с рас-
пайкой, показанной на рис. 1.32. Напряжение питания — 1,8-5,5 В.
Режим программирования JTAG
Для JTAG-программирования между платой программатора и пла-
той, на которой микроконтроллер, устанавливают связь в виде кабеля
с распайкой, показанной на рис. 1.33. Напряжение питания — от 5,0 В.
MISO
SCK
RESET
WG
MOSI
GND
Рис. 1.32. Разъем ISP
Параллельный режим программирования
Для программирования на плате программатора устанавливается со-
единение с микроконтроллером (см. рис. 1.27 и рис. 1.34).
HV-prog VCC
Рис. 1.34. Соединение для параллельного режима программирования
Пример соединения платы программатора с рабочей платой разъе-
мом ISP показан на рис. 1.35.
38
Глава 1
Рис. 1.35. Пример соединения платы программатора с рабочей платой разъемом ISP
При соединении двух плат необходимо проверить цепи передачи
данных на замыкание, а также — питание схемы. Во время программи-
рования микроконтроллера питание берется от платы программатора,
однако эта плата имеет ограниченный ток до 200 мА, поэтому во время
программирования питание рабочей платы должно быть отсоединено от
питания микроконтроллера.
Микроконтроллеры, программируемые с помощью AVRDragon, пе-
речислены в табл. 1.2.
Таблица 1.2. Микроконтроллеры, программируемые с помощью AVRDragon
Устройство Программирование Отладка
ISP HVSP pp JTAG JTAG dW
ATtiny 11 X
ATtiny 12 X X
ATtiny 13 X X x !
ATtiny 15 X X j
ATtiny2313 X X X
ATtiny24 X X X
ATtiny 44 X X X
ATtiny84 X X X
ATtiny25 X X X
ATtiny45 X X X
ATtiny85 X X X
Инструментарий
39
Таблица 1.2. Окончание
Устройство Программирование Отладка
ISP HVSP pp JTAG JTAG dW
ATtiny26 X X *
ATtiny261 X X X
ATtiny461 X X X
ATtiny861 X X X
ATtiny28 X
ATtiny43U X X - X
ATtiny48 X X X
ATtiny88 X X X
ATtiny167 X X X
ATmega8515 X X
ATmega8535 X X
ATmega48(P) X X X
ATmega88(P) X X X
ATmega168(P) X X X
ATmega328P X X X
ATmega8 X X
ATmega16 X X X X
ATmega164P X X X X
i ATmega324P X X X X
ATmega644(P) X X X
ATmega1284P X X X
ATmega162 X X X X
ATmega32 X X X X
ATmega32C1 X X X X
ATmega32M1 X X X X
ATmega32U4 X X X X
ATmega64 X X X
ATmega128 X X X
ATmega640 X X X
ATmega1280 X X X
ATmega1281 X X X
ATmega2560 X X X
ATmega2561 X X X
ATmega165(P) X X X X
ATmega169(P) X X X X
ATmega325(P) X X X X
40
Глава 1
Как видно из табл. 1.2, программирование микроконтроллера мож-
но выполнить разными способами, этот процесс — несложный. Более
подробно о разных видах программирования можно узнать на сайте
http://www.atmel.com/avrdragon.
Автор при построении рассмотренных в книге конструкций исполь-
зовал режим программирования ISP. Совет начинающим: осваивайте
новые программаторы; не останавливайтесь на старом. Прогресс всегда
направлен к лучшему!
Технология производства односторонней
платы
Поговорим об изготовлении в домашних условиях односторонней
платы. В начале процесса вырезается габаритный размер будущей платы.
Если металлизированный текстолит имеет две стороны медной фольги, то
с одной стороны с помощью канцелярского ножа удаляется слой фольги.
Подготовка печатной платы
Перед нанесением рисунка медная поверхность платы зачищается
мелкой шкуркой (350-500) и обезжиривается 100% этиловым спиртом.
На очищенную плату необходимо нанести трафарет в течении одного
часа. Медная поверхность платы быстро окисляется.
Подготовка рисунка разводки платы
Для того чтобы нанести на поверхность рисунок разводки платы,
необходимо иметь его зеркальное изображение. При нанесении на плату
оно преобразуется в нормальное. Зеркальное изображение печатается
лазерным принтером в центре листа бумаги формата А4 в масштабе 1:1
(рис. 1.36).
В результате на листе бумаги остается спеченный черный порошок,
формирующий рисунок. При нагревании утюгом такого листа рисунок
переносится на плату. Трафарет, нанесенный на плату, будет иметь изо-
бражение, зеркальное по отношению к рисунку на бумаге. Это необходи-
мо учитывать при нанесении рисунка монтажной платы, чтобы элементы
монтажа устанавливать на противоположной стороне платы. Правильный
рисунок платы выбирается заранее.
Нанесение трафарета
Будущую плату накладывают на рисунок на листе (см. рис. 1.36)
так, чтобы края платы закрывали рисунок, а затем скотчем приклеивают
Инструментарий
41
к листу (скотч накладывается крестом). Это необходимо, чтобы плата не
съезжала в стороны во время процесса нанесения трафарета.
Рис. 1.36. Нанесение трафарета на плату
Полученный образец переворачивают и укладывают на газету. К лис-
ту прикладывают нагретый утюг и проводят им пять-шесть раз по по-
верхности листа в предполагаемом месте расположения рисунка. Нагре-
вать необходимо всю площадь рисунка. При этом необходимо учитывать,
что обычно хуже всего прогреваются края рисунка. После остывания об-
разец переворачивают, снимают скотч, и плату аккуратно отделяют от бу-
маги.
Сверление
Перед нанесением на плату краски необходимо просверлить все от-
верстия под элементы схемы и крепеж. Для этого используют сверло
диаметром 0,3 мм. Если сверлить после травления платы, то существует
высокая вероятность отрыва медной фольги от поверхности платы, пос-
кольку механические воздействия на фольгу превышают норму. Обрат-
ную сторону закрывают скотчем, чтобы вытравливающий раствор не
попадал в отверстия.
Нанесение рисунка
Слой печати, оставленный на плате с помощью утюга, недостаточно
хорош для травления (см. рис. 1.36), поэтому на плате канцелярским
42
Глава 1
корректором (например, фирмы “Optima”) наводятся дорожки, а затем
обрисовываются площадки для отверстий. Кроме того, для нанесения
краски можно использовать зубочистки или заточенные спички, а в ка-
честве краски подходит немного растворенный (ацетоном на 5-15%) лак
для ногтей.
В практике рисования приемлем шприц на 25 мл (категорически за-
прещено использовать использованные шприцы!), однако перед рисова-
нием необходимо изменить угол наклона наконечника иглы до 80°. По-
сле того как в шприц набрали краску, в баллоне шприца у поршня необ-
ходимо просверлить отверстие диаметром 1 мм (для самотека краски).
После нанесения рисунка отверстия заклеивают скотчем. Краску
для шприца заимствуют из корректора или же используется краска на
ацетоновой основе, растворенная до жидкого состояния. Очень часто
для процедуры нанесения краски используют рейсфедер (после нанесе-
ния трафарета, рейсфедер тщательно вымывается растворителем).
Новые технологии
В последнее время в продаже появились специальные маркеры с
краской (рис. 1.37, внизу), например, китайский маркер SP110 фирмы
“Sipa”. Краска в нем — черного цвета. Фактически, маркер повторяет
функции канцелярского корректора, но у него больше объем баллончи-
ка для краски.
Рис. 1.37. Средства для создания рисунка на плате и травления
Инструментарий
43
При многократном использовании маркера достаточно вдавить его
кончик в баллончик, и краска освежит засохший стержень. Единствен-
ный недостаток SP11O заключается в том, что стержень имеет большой
диаметр, и линии на плате получаются слишком широкие. Впрочем, при
хорошей тренировке можно достичь приемлемых результатов.
Для нанесения на печатную плату ровных линий можно использо-
вать рамку для изготовления черно белых фотографий (применяется фо-
толюбителями). Такая рамка оснащена подвижными линейками, что
помогает чертить ровные линии. Кроме того, можно установить обыч-
ную длинную линейку на подставки с высотой на 5 мм выше платы. Для
нанесения площадок под отверстия хорошо подходят головки спичек.
Во время прорисовки необходимо учитывать вязкость краски. Если
краска вязкая, то участки рисунка наносятся с большими паузами. Если
краска жидкая, то после нанесения рисунка она расплывается по по-
верхности. Образуются закоротки и участки ненужных соединений. По-
сле высыхания нанесенного рисунка в течении часа, с помощью канце-
лярского тонкого ножа удаляются разводы от краски, попавшие на со-
седние проводники печатного монтажа. Проверяется соответствие ри-
сунка и нанесенных линий на плате. Если все нормально, то плата гото-
ва к травлению.
Травление платы
Вытравливающий компонент (например, хлорное железо, показан-
ное на рис. 1.37 слева) засыпают пластиковой одноразовой ложкой в го-
рячую воду (температура 60°С), тщательно размешивают и ожидают
полного растворения. Раствор доводят до концентрации 1:3 (300 г по-
рошка на 1 л воды). Окраска раствора — темно-коричневая.
| Внимание!
Готовый раствор огнеопасен!
Второй вариант вытравливающего компонента — это вещество
польского производства под названием “В327” (показано на рис. 1.37
справа). Пропорция: 100 г вещества на 0,5 л воды засыпают пластико-
вой одноразовой ложкой в горячую воду (температура 40°С), тщательно
размешивают и ожидают полного растворения.
Внимание!
Готовый раствор огнеопасен!
Раствор используется сразу после полного размешивания. Кювета
для растворов должна быть или стеклянной, или пластиковой.
44
Глава 1
Плату с рисунком пластиковым пинцетом вкладывают в кювету
с вытравливающим раствором. Поверхность дна кюветы должна быть
волнистой для возможности циркуляции раствора. Наилучшие резуль-
таты травления получаются при вертикальном расположении платы от-
носительно дна кюветы, однако из-за экономии раствора радиолюбите-
ли используют мелкие кюветы (например, от упаковки продуктов пита-
ния). В таком случае плату лучше расположить вниз рисунком (ко дну
кюветы).
Раствор необходимо помешивать и периодически проверять качест-
во травления. Проверяют процесс травления через 2-5 минут. Вытрав-
ленную плату споласкивают под струей воды. Использованный раствор
утилизируют в специальных пунктах сбора химических веществ.
Внимание!
Травление выполняют в хорошо проветриваемом помещении с использованием
защитных средств для предохранения от попадания раствора на тело (резиновые
перчатки, прорезиненные халаты). Парь/ раствора вредны для организма челове-
ка, поэтому во время процесса травления используют респираторы. В случае хи-
мического поражения тела необходимо несколько минут промывать пораженный
участок проточной водой
Проверка качества
После травления платы слой краски снимают с помощью смывки
лака для ногтей или растворителя на основе ацетона. Плату желательно
промывать в проветриваемом, нежилом помещении. Непротравленные
участки удаляются канцелярским ножом. Проверяется качество полу-
ченных дорожек. В случае обнаружения брака дорожки можно пролу-
дить, а ненужные закоротки обрезать ножом. Затем шкуркой 1000 зачи-
щается поверхность монтажа элементов. Скотч с обратной стороны
снимается. При необходимости, рассверливаются отверстия под элемен-
ты или под крепеж. Плата готова к пайке элементов.
Глава 2
“Солнцемер”
Солнце — это источник жизни и энергии, управлять которым мы не
умеем. Тем не менее, имея одну солнечную батарею, мы можем опреде-
лить его активность. Для этого соберем прибор с условным названием
"Солнцемер”. Он оценит мощность потока лучей от небесного светила.
Зачем нам знать, насколько активно солнце? Чтобы получить ответ
на повседневные вопросы: “Поспеет урожай раньше или погибнет?”,
"Можно пойти позагорать или лучше выйти попозже, чтобы не обго-
реть?”, “Сколько энергии, которую можно эффективно накопить?”...
Как измерить активность солнца? Ответ на этот вопрос непрост, но его
наглядное техническое решение вполне тривиально. Необходимо нако-
пить энергию солнечных лучей и тут же ее потратить. Насколько быст-
ро протекает этот процесс, и насколько стабильно он повторятся, нас-
только и активно наше светило. Можно даже определить количество пе-
редаваемой энергии и оценить этот процесс, например, по десятибалль-
ной шкале.
В решении этих вопросов нам поможет “Солнцемер” (рис. 2.1).
Рис. 2.1. “Солнцемер”
46
Глава 2
Дизайн устройства представлен на рис. 2.2.
Рис. 2.2. Дизайн “Солнцемера”
Основание 1 изготовлено из использованного оптического диска.
На основании установлены светодиоды 5. Всю конструкцию можно
удерживать снизу за держатели 2. Плата управления 3 установлена пер-
пендикулярно основанию 1 и крепится к стойкам 4. Стойки 4 так же
удерживают диск солнечной батареи 6.
Во время экспериментов конструкция поворачивается к солнцу так,
чтобы лучи солнца попадали перпендикулярно к плоскости диска сол-
нечной батареи 6. Солнечная энергия, попавшая на фотоэлемент, накап-
ливается на конденсаторах большой емкости. Плата управления прове-
ряет уровень заряда конденсаторов и включает светодиоды в опреде-
ленной последовательности. Расположение светодиодов по окружности
позволяет различать процесс затраты накопленной энергии. Для нагляд-
ности светодиоды включаются последовательно до определенного мак-
симума и светятся долгое время. Продолжительность свечения даст
возможность оценить степень активности солнца.
Однако солнечная активность может быть очень высокой, поэтому
существует второй вариант программы. В нем последовательное вклю-
чение светодиодов представлено в виде вращения, длительность кото-
рого и определяет мощность солнечных лучей.
‘Солнцемер”
47
Как еще одна альтернатива, добавлена также программа вращения
засветки светодиодов (по два светодиода).
Структурная схема
Рис. 2.3. Структурная схема “Солнцемера”
Солнечные лучи, попадая на диск фотоэлемента, возбуждают в бата-
рее ЭДС. В фотоэлементе, как в источнике тока, возникает направленное
движение электронов. Ток от фотоэлемента протекает через диод Шотки
D к конденсатору большой емкости С, который заряжается тем быстрее,
чем больше активность солнца. Как только конденсатор зарядился до на-
пряжения 2,7 В, включается микроконтроллер AT tiny26 [1]. Дальнейший
заряд конденсатора продолжается до максимального значения напряже-
ния холостого хода фотоэлемента YH94-4B250-P. Микроконтроллер от-
слеживает уровень заряда на входе АЦП и сравнивает его с опорным на-
пряжением внутреннего источника.
В процессе разработки устройства возник вопрос: “Как определить
уровень заряда конденсатора С?”. Согласно документации, внутри мик-
роконтроллера ATtiny26 присутствует источник опорного напряжения
напряжением 1,1 В [1]. Далее используем формулу:
ADC = (Vin- 1024)/Vref,
где Vin = 3,8 В, Vref = 1,1 В. Проведя подсчет, получим значение 3537
или в шестнадцатеричном представлении — DDlh. Это значение и есть
48
Глава 2
порогом срабатывания АЦП и дальнейшей активизации подпрограммы
засветки светодиодов.
Представленная выше формула справедлива для питания микрокон-
троллера 5,0 В, но в нашем случае стабильное питание схемы устанав-
ливается на уровне 3,8 В. Возможно, необходимо уменьшить значение
DDlh до уровня DOlh.
Как только уровень заряда достаточен, запускается подпрограмма
включения светодиодов. Пользователь выбирает одну из трех подпро-
грамм засветки светодиодов, в зависимости от поставленной задачи. Это
можно сделать с помощью DIP-переключателей.
После срабатывания порога заряда конденсатора программа про-
должит выполнение выбранной пользователем подпрограммы. Микро-
контроллер выводит в порт ввода-вывода единицы и нули, тем самым,
активизируя светодиоды LED 1-LED 10. Для усиления тока засветки све-
тодиодов применены полевые транзисторы Q1-Q10, которые не требу-
ют дополнительных цепей в управлении. Полевые транзисторы могут
рассеивать значительную мощность во время коммутации. Такое реше-
ние защитит микроконтроллер от перегрева и перегрузок.
Принципиальная схема
Принципиальная схема “Солнцемера” (рис. 2.4) построена на осно-
ве микроконтроллера ATtiny26 [1], оснащенного флэш-памятью про-
грамм на 2 Кбайт, ОЗУ объемом 128 байт и EEPROM-памятью данных
объемом 128 байт. Команд — 118, линий ввода-вывода — 16, таймеров/
счетчиков — два восьмиразрядных, 10-разрядный 11-канальный АЦП,
аналоговый компаратор.
Схема управления питается от заряженных конденсаторов С5-С8.
Солнечная батарея YH94-4B250-P генерирует ток при попадании сол-
нечных лучей. Ток от фотоэлемента проходит через параллельно соеди-
ненные диоды Шотки US1-US3 и заряжают конденсаторы С5-С8. Дио-
ды Шотки пропускают максимальный ток 70 мА. Поскольку фотоэле-
мент YH94-4B250-P генерирует максимальный ток 84 мА, решено уста-
новить два параллельно включенных диода, что снизит риск выхода
схемы из строя.
В схеме не предусмотрен выключатель питания. Его функцию вы-
полняет D1P1. Пока DIP 1-переключатели находятся в нулевом состоя-
нии, на светодиоды не подаются импульсы управления, а программа на-
ходится в режиме ожидания. Как только пользователь выбрал необхо-
димую подпрограмму, активизируется вывод сигналов в порты А и В.
Солнцемер’
49
LED9, LED10 5 mA GV1-1- LEQ4
Рис. 2.4. Принципиальная схема “Солнцемера1
50
Глава 2
Как было отмечено ранее, для усиления сигнала по току использо-
ваны полевые транзисторы Q2-Q11. Для ограничения тока светодиодов
LED1-LED10 применены резисторы R1-R10. Питание для светодиодов
берется непосредственно с конденсаторов С5-С8.
Микроконтроллер IC1 питается через один из диодов Шотки и ре-
зистор R12. Пульсации по питанию сглаживает цепочка С4, С7. Для ог-
раничения напряжения питания установлен стабилитрон D1. Схема от-
дельного питания применена для уменьшения пульсации напряжения,
защиты микроконтроллера от перенапряжения и возможности его прог-
раммирования независимо от питания остальной части схемы.
Кварцевый резонатор Q1 предназначен для синхронизации внутрен-
него генератора микроконтроллера. Конденсаторы Cl, С2 служат для
подавления паразитных гармоник резонатора. При включении питания
схема сброса формирует сигнал перевода микроконтроллера в исходное
состояние. Эта схема построена на цепочке СЗ, Rl 1.
Ключ SW1 предназначен для переключения подпрограмм работы
светодиодов. Оперативное перепрограммирование схемы осуществляют
через пятивыводной разъем Elka22 SV1.
Установленные на плату детали:
• солнечная батарея YH94-4B250-P — генерирует максимальное на-
пряжение холостого хода 4,8 В и максимальный ток 84 мА; общая
мощность 0,32 Вт;
• кварцевый резонатор на 8 МГц (лодочка);
• в качестве электролитических конденсаторов С5, С6, С8 применены
ионисторы на 0,047 Ф; 5,5 В фирмы TOKIN;
• диоды Шотки В AS 70 [2];
• светодиоды UL-308H183BC133 — 3 мм;
• транзисторы полевые BSS138 [12];
• пассивные SMD-элементы класса 1206.
Монтажная плата
Монтаж радиоэлементов на плате — поверхностный. Для этих це-
лей автор задействовал паяльный мининабор ZD 927. Для макетирова-
ния использовалась часть готовой макетной платы CRS-045 габаритами
45x53 мм (рис. 2.5).
Разводка двухстороннего текстолита с габаритными размерами 52 х
72 мм представлена на рис. 2.6-2.8. Расположение элементов на плате
показано на рис. 2.6. Поверхностные элементы, разъем SV1, QI, SW1
монтируются непосредственно на поверхность платы (рис. 2.7). Обрат-
ная сторона платы показана на рис. 2.8.
Солнцемер’
51
Рис. 2.5. Монтажная плата в сборке
52mm
Рис. 2.6. Расположение элементов на плате
52
Глава 2
Рис. 2.8. Обратная сторона платы
“Солнцемер”
53
Светодиоды устанавливаются на диск конструкции, а с платой со-
единяются проводами согласно полярности элементов. Питание от фо-
тоэлемента подается на контакты JP1, JP2. При этом необходимо со-
блюдать полярность фотоэлемента.
Алгоритм работы
Блок схема алгоритма работы “Солнцемера” показана на рис. 2.9.
Вначале программы все порты ввода-вывода устанавливаются в ну-
левое состояние. Затем АЦП считывает данные по питанию. Если уро-
вень питания выше значения DDlh, что соответствует порогу срабаты-
вания АЦП на уровне 3,8 В, то программа переходит на этап засветки
светодиодов. Если уровень питания ниже значения DDlh , то программа
переходит в начало.
Как только уровень превышен, микроконтроллер проверяет состоя-
ние DIP-переключателей. Если DIP 1.1 = 1, DIP 1.2 = 0, то программа пе-
реходит к подпрограмме засветки светодиодов по возрастанию. Это зна-
чит, что вначале включается первый светодиод, потом — первый и вто-
рой, потом — первый, второй и третий и т.д. по возрастанию. Цикл по-
вторяется десять раз, после чего выполняется переход в начало про-
граммы. На каждом шаге цикла реализуется задержка между засветками
светодиодов.
Если DIP 1.1 = О, DIP 1.2 = 1, то программа переходит к подпрограм-
ме засветки светодиодов по очереди. Это значит, что вначале включает-
ся первый светодиод, потом первый гаснет и включатся второй, потом
второй гаснет и включается третий и т.д. по очереди. Цикл повторяется
десять раз, после чего выполняется переход в начало программы. На
каждом шаге цикла реализуется задержки между засветками светодио-
дов и между гашением светодиодов.
Если DIP 1.1 = 1, DIP 1.2 = 1, то программа переходит к подпро-
грамме засветки светодиодов по возрастанию по два. Это значит, что
вначале засвечивается первый светодиод, потом — первый и второй,
потом первый гаснет, а засвечиваются второй и третий, потом второй
гаснет, а засвечиваются третий и четвертый и т.д. по возрастанию.
Если DIP 1.1 = О, DIP 1.2 = 0, программа переходит в начало.
Программа
Программа (листинги 2.1 и 2.2) записывается в микроконтроллер
1С1 через разъем SV1 с помощью компьютера и программатора STK200.
Программа полностью соответствует рассмотренной блок-схеме.
54
Г лава 2
Начала
Рис. 2.9. Блок-схема алгоритма работы “Солнцемера’
“Солнцемер”
55
Листинг 2.1. Программа управления “Солнцемером”
.include "D:\Program Files\Atmel\AVR Studio\Appnotes\tn26def.inc"
;Автор: Кравченко А.В.
/Дата: 5.07.2009
/Версия: 1.1.1
/Имя файла: sunmer.asm
/Микроконтроллер: AVR tiny26.
/Тактовая частота: 8,0 МГц
/Питание: нестабилизированное 3,8 В
def tmp = Г16
def def def def def def def def def def def def def def cseg org 0 tmp2 tmp3 tempo pir pur par Y X M adr prgl prg2 dl d2 rjmp nop = rl7 = rl8 = rl9 = r22 = r23 = r20 = r29 = r21 = r26 = rO = r24 = r25 = r30 = r31 RESET ;rjmp EXT_INT0 - прерывание по входному сигналу
nop ;rjmp EXT—PIN - прерывание не используется
nop /rjmp TIME_CMPA - прерывание от таймера
nop /rjmp TIME_CMPB - прерывание от таймера
nop /rjmp TIME_OVF1 - прерывание от таймера
nop /rjmp TIME_OVFO - прерывание от таймера
nop /rjmp UCI_STRT - прерывание от USI
nop /rjmp UCI_OVF - прерывание от USI
nop /rjmp EE_RDY - прерывание от таймера
nop /rjmp ANA_COMP - прерывание от компаратора
nop /rjmp ADC - прерывание от АЦП
.org 20
/настройка портов
RESET: пор
clr tmp
out DDRA, tmp
56
Глава 2
Листинг 2.1. Продолжение
out PORTA, tmp /обнулить порт A
clr tmp
Idi tmp, $FC /РАО,PAI,-входы
out DDRA, tmp
clr tmp
out DDRB, tmp
out PORTB, tmp /обнулить порт В
clr tmp
Idi tmp, $BF /РВб-вход
out DDRB, tmp
/Начало программы
nStart : пор
/сброс всех значений
clr pir
clr pur
clr prgl
clr prg2
clr adr
/вход в подпрограмму опроса АЦП1
nop Idi Idi tmp3, $80 tmp2, $C6 /источник питания, ADC2,ADMUX
/одиночное, запуск, 1/64,ADCSR
опрос уровня заряда конденсатора
rcall adcn
mov dl, tmp2 /загрузка младшего разряда
mov d2, tmp3 /загрузка старшего разряда
nop
Idi tmp2, $B5 /значение младшего разряда порога
Idi tmp3, $01 /значение старшего разряда порога
вычитание значения АЦП и порога
sub dl, tmp2 /Вычитание младшегс > байта
проверка на ноль старшего байта
clr tmp
rol tmp
sub d2, tmp3 /Вычитание старшего байта с заемом
sub d2, tmp /Вычитание заема
loki: пор
brmi nStart /переход, если результат < О
пор
/опрос DIP1
DIP: пор
in tmp, PORTA
пор
sbis PINA, 1 /пропустить если не нажат DIP1.1
rjmp qqO
si: nop
Солнцемер'
57
Листинг 2.1. Продолжение
sbis r jmp nop rjmp PINB, 6 qqi qq2 ;пропустить если не нажат DIP1.2
;DIP1. qqO: . 1 nop sbis PINB, 6 ;пропустить если не нажат DIP1.2
qq3: cvb: ;DIP1. qql: rjmp nop rjmp nop clr nop inc rcall nop rcall nop cis cpi brlt nop rjmp .2 nop sbis qq3 nStart pir pir zader opros pir, $0B cvb nStart PINB, 1 ;пропустить если не нажат DIP1.1
qq4: cvbn: ;DIP1 qq2: cvbm: rjmp nop rjmp nop clr nop inc rcall nop rcall nop cis cpi brlt nop rjmp nop nop nop qq4 nStart pir pir zader opron pir, $0B cvbn nStart
58
Глава 2
Листинг 2.1. Продолжение
inc rcall pir zader
пор rcall oprom
пор cis
cpi brlt pir, $14 cvbn
пор rjmp nStart
/Настройка АЦП
adcn: пор
пор
clr tmp
awe: пор
cpi tmp, $04
brsh ass
clr tmp3
Idi tmp3, $83 /внутренний источник, вход ADC3
out ADMUX, tmp3 /коммутация входов АЦП
clr tmp2
clr tmp3
Idi tmp2, $C4 /одиночное, запуск, 1/16
out ADCSR, tmp2 /запуск АЦП на преобразование
/Сохранение данных АЦП
in tmp2 , ADCL
in tmp3 , ADCH
mov r2, tmp2
mov r3, tmp3
mov r4, r2
mov r5, r3
mov r6, r4
mov r7, r5
inc tmp
rjmp awe
/среднее арифметическое действие
ass: пор
clr г8
clc
add tmp2, r2
adc r9, г8
add tmp2, r4
adc r9, г8
add tmp2, гб
adc r9, г8
“Солнцемер’
59
Листинг 2.1» Продолжение
clc
Isr r9
ГОГ tmp2
1st r9
ГОГ tmp2
clr r9
clc
add tmp3, r3
adc r9, r8
add tmp3, r5
adc r9, r8
add tmp3, r7
adc r9, r8
clc
Isr r9
ror tmp3
Isr r9
ror tmp3
nop
ret
/Подпрограмма задержки включения светодиодов
zader: nop
wdr clr M
clr Y
Idi Y, $AF
cpi tmp3, $00
brne goo
Idi M, $01
add M, tmp3
goo: nop nop
mov M, tmp3
dm: nop
cpi tmp2, $00
brne goq
Idi X, $01
add X, tmp2
goq: nop nop
mov X, tmp2
dv: nop
dx: wdr nop dec Y
60
Глава 2
Листинг Продолжение
brpl dx
cln
dec X
brpl dv
cln
dec M
brne dm
ret
/Подпрограмма опроса светодиодов программа!
opros: nop
Idi ZH, high(2 *proglA)
Idi ZL, Low(2*proglA)
Add ZL, pir
LPM mov prgl, adr
out PORTB, prgl
nop Idi ZH, high(2 *proglB)
Idi ZL, Low(2*proglB)
Add ZL, pir
LPM mov prg2, adr
out PORTB, prg2
ret ;Подпрограмма опроса светодиодов программа2
opron: nop Idi ZH, high(2*prog2A)
Idi ZL, Low(2*prog2A)
Add ZL, pir
LPM mov prgl, adr
out PORTB, prgl
nop Idi ZH, high(2 *prog2B)
Idi ZL, Low(2*prog2B)
Add ZL, pir
LPM mov prg2, adr
out PORTB, prg2
ret ;Подпрограмма опроса светодиодов программа2
oprom: nop Idi ZH, high (2*prog3A)
Idi ZL, Low(2*prog3A)
Add ZL, pir
‘Солнцемер’
61
Листинг 2 Л. Окончание
LPM
mov prgl, adr
out PORTB, prgl
nop
Idi ZH, high (2 *prog3B)
Idi ZL, Low(2* ргодЗВ)
Add ZL, pir
LPM
mov prg2, adr
out PORTB, prg2
ret
.org $200
proglA:
.DB $00, $00, $00, $00, $80, $40, $20, $10
.DB $08, $04
proglB:
.DB $08, $04, $02, $01, $00, $00, $00, $00
.DB $00, $00
prog2A:
.DB $00, $00, $00, $00, $80, $C0, $E0, $F0
.DB $F8, $FC
prog2B:
.DB $08, $0C, $0E, $0F, $0F, $0F, $0F, $0F
.DB $0F, $0F
ргодЗА:
^.DB $0C, $18, $30, $60, $C0, $80, $00, $00
.DB $00, $00
ргодЗВ:
.DB $00, $00, $00, $00, $00, $01, $03, $06
.DB $0C, $08
.EXIT
Листинг 2.2< НЕХ-файл для “Солнцемера”
: 020000020000FC
:1000000013C000000000000000000000000000001D
: 080010000000000000000000E8
: 10002800000000270ABB0BBB002 70CEF0ABB002708
:1000380007BB08BB00270FEB07BB00006627772725
:10004800882799270024000020E816EC48D0E12FE3
62
Глава 2
Листинг 2.2. Окончание
:10005800F22F000015EB21EOE11B0027001FF21B27
:10006800F01B000052F3000000000BB30000C99B16
:1000780005C00000B69B14C0000024C000Q0B69B59
:1000880002COQOOODACF00006627000063955BD04D
:10009800000079D0O000C8946B30BCF3O00OCDCFCD
:1000A8000000B19B02C00000C8CF00006627000016
:1000B800639549D0000076D00000C8946B30BCF33B
:1000C8000000BBCF00000000000063953CD000009A
:1000D80078DOOOOOC894643154F30000AECF00001B
:1000E800000000270000043088F4222723E827B9FD
:1000F8001127222714ЕС16В914В125В1212Е322Е5Е
:10010800422C532C642C752C0395ECCF00008824CA
:100118008894120D981C140D981C160D981C889420
:10012800969417959694179599248894230D981C5E
:10013800250D981C270D981С8894969427959694BD
:100148002795000008950000A895AA27DD27DFEA73
:10015800203019F4A1EOA20FOOOOOOOOA22FOOOQ37
:10016800103019F451E0510F00000000512F000029
:10017800A8950000DA95F2F7A8945A95C2F7A894C2
:10018800AA9569F708950000F4EOEOEOE60FC89545
:1001980O802D88BB000OF4E0EAE0E60FC8959O2DBA
:1001A80098BB08950000F4EOE4E1E60FC895802DBF
:1001B8OO88BB0000F4E0EEE1E60FC895902D98BBEF
:1001C80008950000F4EOE8E2E60FC895802D88BBAA
:1001D8000000F4E0E2E3E60FC895902D98BB08957F
:1004000000000000804020100804080402010000Е1
:10041000000000000000000080C0E0F0F8FC08QCC4
:100420O00E0F0F0FGF0F0F0FOC183060C080000061
: ОС043000000000000000000Ю3060С08А2
:00000001FF
Программа содержит три подпрограммы, реализующих различные
комбинации включения светодиодов. Кодировка таких комбинаций ука-
зана в табл. 2.1. Программу можно значительно расширить, поскольку
использовано всего 280 байт памяти программ.
Таблица 2.1. Порядок построения светодиодов по часовой стрелке, начиная
с 12:00: 1-2-3-4-5-6-7-8 на плате 9, 10
Порты PORTA PORTB Коды прошивки портов
Светодиоды LED10 LED9 LED8 LED7 LED6 LED5 LED4 LED3 LED2 LED1
Про- грамма Шаг РА2 РАЗ РА4 РА5 РА6 РА7 PB0 РВ1 РВ2 РВЗ PORTA PORTB
1 1 0 0 0 0 0 0 0 0 0 1 00 08
1 2 0 0 0 0 0 0 0 0 1 0 00 04
1 3 0 0 0 0 0 0 0 1 0 0 00 02
1 4 0 0 0 0 0 0 1 0 0 0 00 01
1 5 0 0 0 0 0 1 0 0 0 0 80 00
“Солнцемер”
63
Таблица 2.1. Окончание
Порты PORTA PORTB Коды прошивки портов
Светодиоды LED10 LED9 LED8 LED7 LED6 LED5 LED4 LED3 LED2 LED1
Про- грамма Шаг РА2 РАЗ РА4 РА5 РА6 РА7 РВО РВ1 РВ2 РВЗ PORTA PORTB
1 6 0 0 0 0 1 0 0 0 0 0 40 00
1 7 0 0 0 1 0 _0__ 0 0 0 0 20 00
___.1 8 0 0 1 0 0 0 0 0 0 0 10 00
1 9 0 1 0 0 0 0 0 0 0 0 08 00
1 10 1 0 0 0 0 0 0 0 0 0 04 00
2 1 0 0 0 0 0 0 0 0 0 1 00 08
2 2 0 0 0 0 0 0 0 0 1 1 00 ОС
' 2 3 0 0 0 0 0 0 0 1 1 1 00 0Е
, 2 4 0 0 0 0 0 0 1 1 1 1 00 0F
: 2 5 0 0 0 0 0 1 1 1 1 1 80 OF
L 2— 6 0 0 0 0 1 1 1 1 1 1 СО OF
2 7 0 0 0 1 1 1 1 1 1 1 Е0 OF
2 _8__ 0 0 1 1 1 1 1 1 1 1 F0 OF
2 _9_ 0 1 1 1 1 1 1 1 1 1 F8 OF
2 10 1 1 1 1 1 1 1 1 1 1 FC OF
Г 3 1 1 1 0 0 0 0 0 0 0 0 ОС 00
3 2 0 1 1 0 0 0 0 0 0 0 18 00
3 3 0 0 1 1 0 0 0 0 0 0 30 00
I 3 4 0 0 0 1 1 0 0 0 0 0 60 00
I 3 5 0 0 0 0 1 1 0 0 0 0 СО 00
3 6 0 0 0 0 0 1 1 0 0 0 80 01
г 3 7 0 0 0 0 0 0 1 1 0 0 00 03
i 3 8 0 0 0 0 0 0 0 1 1 0 00 06
Р 3 9 0 0 0 0 0 0 0 0 1 1 00 ОС
з 10 0 0 0 0 0 0 0 0 0 1 00 08
Эксплуатация
Настройка начинается с записи листинга 2.2 в микроконтроллер че-
рез разъем Elka 22. Затем к выводам питания вместо солнечной батареи
подключается источник 4,5 В на ток 100 мА (возможно подключение
батареек ).В1Р-переключатель устанавливается в положение “OFF, OFF”,
на светодиоды импульсы управления не подаются. Этот режим анало-
гичен режиму ожидания в бытовой технике. Далее DlP-переключатель
устанавливается в положение “”ON, OFF”. Запускается тестовая про-
грамма периодической засветки поочередно всех светодиодов. Если
устройство работает исправно, то на выводы питания подключается
солнечная батарея (см. рис. 2.5). Выбирается первая программа засветки
всех светодиодов до максимума в зависимости от заряда конденсаторов.
Выбирается вторая программа (DIP — “OFF, ON”) периодической по-
следовательной засветки светодиодов в зависимости от заряда конден-
саторов.
Глава 3
Простой “Solar bot”
В праздничные дни всегда хочется сотворить своими руками, что-то
простое, интересное и забавное. Радиоэлектроника может нас порадо-
вать огромным разнообразием таких конструкций. Одну из таких инте-
ресных идей мы и рассмотрим в этой главе. Представляю вашему вни-
манию робот “Solar bot”, работающий от солнечной энергии (рис. 3.1).
Рис. 3.1. Робот “Solar bot”
Пока что этот робот — примитивный, совершающий лишь хаотиче-
ские движения, из-за чего он выглядит неуклюжим и смешным, но в бу-
дущем он сможет принимать “обдуманные” решения (например, дви-
гаться в сторону света).
Робот, работающий от солнечной энергии, — идея не новая, но не-
достаточно рассмотренная в литературе. Солнечная энергия совершенно
бесплатная. Ее использование позволяет экономить ресурсы земли. За-
рубежные радиолюбители давно и активно работают в направлении
энергосберегающих технологий, а именно — над роботом “Solar bot”
(рис. 3.2). В образцах 1 и 3 используется два фотоэлемента солнечной
батареи, а в образцах 2, 4 и 5 установлены светодиоды.
Простой “Solar bot”
65
Рис. 3.2. Разновидности минироботов, работающих на солнечной энергии
Все в таком роботе — новое и необычное. Одна из идей использо-
вания электропривода заключается в перемещении за счет вращательно-
го движения вала электродвигателя, которое на плоскости заставляет
конструкцию двигаться в заданном направлении. При этом отпадает не-
обходимость в использовании редукторов.
Схемы роботов, работающих на солнечной энергии, постоянно мо-
дернизируются, в них варьируют элементную базу и используют раз-
личные солнечные батареи. Последний аспект должен быть продуман
до мелочей. Это позволит создавать и использовать роботов на неболь-
ших солнечных батареях, экономно расходующих солнечную энергию.
Для того чтобы выяснить, какие детали требуются для создания
"Solar bot”, рассмотрим три популярных схемы роботов, работающих на
солнечной энергии.
Схема №1
Авторство первой схемы принадлежит компании Solarbotics (под-
робнее — на сайте www.solarbotics.com). Для изготовления такого
робота потребуются распространенные детали (рис. 3.3).
Электролитические конденсаторы 0,22-0,33 Ф на 6,3 В и 6,8 мкФ на
6.3 В. Солнечная батарея размерами 60><60 и напряжением холостого
66
Глава 3
хода 4,8 В. Также в схеме используется микросхема MN1380R, транзи-
стор 2N3904, диод 1N914 и любой светодиод диаметром 5 мм. Схема
собирается навесным монтажом без использования платы.
Рис. 3.3. Схема робота от компании Solarbotics
Микросхема MN1380 предназначена для схемы сброса микрокон-
троллерных систем, если напряжение питания вышло за допустимые
Простой “Solar bot”
67
пределы. Для MN1380R напряжение срабатывания составляет 4,0-4,3 В.
Как только С1, С2, СЗ зарядились до уровня 4,3 В, в IC1, IC2 срабатыва-
ет компаратор верхнего уровня и на выход микросхемы подается лог. 1.
Транзисторы Q1, Q2 открываются и включают двигатели.
Как только напряжение питания снижается до 4,0 В, срабатывают
компараторы IC1, IC2, и на выходе микросхемы устанавливается лог. 0.
Транзисторы QI, Q2 закрываются. В результате С1 не успевает полно-
стью разрядится. Энергии, запасенной в С1, достаточно для следующего
шага робота.
Схема №2
Автор второй схемы — некто Fred (подробности можно узнать на
айте www. smf г. org/robots) (рис. 3.4).
Состав схемы:
• четыре транзистора: Q1, Q2 ВС337 и Q3, Q4 ВС327;
• четыре электролитических конденсатора на 6,3 В: СЗ — 1,0 Ф;
С4 — 470 мкФ; С5, С6 — 0,22 мкФ;
68
Глава 3
• два пленочных конденсатора: Cl, С2 — 0,33 мкФ;
• переменный резистор R6 на 10,0 кОм;
• резисторы: Rl, R4 — 3,3 кОм; R2, R5 — 33,0 кОм;
• солнечная батарея G1 на напряжение холостого хода 4,0 В.
Когда начинают заряжаться конденсаторы СЗ, С4, С5, С6, транзи-
сторы Q3 и Q4 закрыты. Как только С4 зарядился, С5, С6 продолжают
накапливать заряд. При этом выполняются условия открытия Q3, Q4.
Открываются QI, Q2, включая двигатели. Пока транзисторы Q3, Q4 от-
крыты, С4 полностью разряжается, и Q3, Q4 закрываются. В момент от-
крытия QI, Q2 конденсаторы С5, С6 разряжаются через Rl, R2, R4, R5.
После разряда С5, С6 снова заряжаются, и процесс повторяется до тех
пор, пока СЗ полностью не разрядится. Двигатели включаются в разные
моменты времени, поскольку схема может быть несимметричной. Для
обеспечения синхронности схемы установлен резистор R6.
Схема №3
Третья схема (автор Manfred Schaffran) (рис. 3.5) построена на расп-
ространенных деталях:
• таймеры IC1, IC2 — NE555;
• транзисторы Q1, Q2 — 2N3904;
• диоды D1-D4— 1N148;
• солнечная батарея размерами 60*60 и напряжением холостого хода
4,8 В;
Рис. 3.5. Схема робота от разработчика Manfred Schaffran
Как только конденсатор С1 зарядится от солнечной батареи G1,
микросхемы IC1, 1С2 получают питание и начинают работать. Таймеры
Простой “Solar bot”
69
NE555 используются в качестве компараторов и триггеров. Напряжение
сравнения формируется на диодах D1-D4. При срабатывании компара-
тора, триггер включает выходной транзистор QI, Q3, и включаются дви-
гатели, которые работают до тех пор, пока полностью разрядится С1.
Микросхемы IC1, IC2 не получают питание, и триггер микросхем пере-
ходит в исходное нулевое состояние. Процесс повторяется по мере за-
ряда С1. В данной схеме некорректно используется NE555.
Автор решил проверить конструкцию третьей схемы (рис. 3.6). Она
работает вполне приемлемо.
Рис. 3.6. Робот, выполненный по третьей схеме
Для того чтобы конструкция держалась во время движения устой-
чиво, необходимо сделать раму (рис. 3.7).
Рис. 3.7. Рама для робота, показанного на рис. 3.6
70 . Глава 3
Двигатели крепятся к раме винтами. Рама крепится к конденсатору
клеящей лентой. Точно так же крепится светодиод. Схема паяется непо-
средственно у выводов солнечной батареи.
Во время сборки робота “Solar bot” автор использовал двигатели от
нерабочих приводов CD-ROM, солнечную батарею YH 60*60-8А/В50М,
конденсатор на 22000 мкФ, 10 В. Для удлинения вала применены поли-
этиленовые трубки (для напитков), приклеенные клеем ПВА.
После проверки корректности сборки робот устанавливают под
прямые солнечные лучи. Как только конденсатор зарядится, включатся
двигатели робота.
Представленные схемы недостаточно опробованы и требуют дора-
ботки. В этом радиолюбителям предоставляется возможность проявить
свою фантазию и творческий подход.
Глава 4
Солнечный робот “Solar bot”
За последнее время многие зарубежные компании приложили нема-
ло усилий для использования бесплатной солнечной энергии. Топлив-
ный кризис подталкивает человечество к поиску альтернативных источ-
ников. Проблема получения и рационального использования энергии
актуальна для всего человечества, и один из путей ее решения — созда-
ние машин и устройств, работающих на солнечных батареях.
Зарубежные радиолюбители занимаются созданием солнечных ро-
ботов с прошлого века. Их конструкции в виде небольших моделей мо-
гут стать прототипами будущих машин на солнечной энергии. Напри-
мер, на рис. 4.1 показаны роботы, собранные радиолюбителями в 1994-
95 годах.
Рис. 4.1. Роботы на солнечных батареях, собранные радиолюбителями в 1994-95 гг.
Основные элементы конструкции — двигатель, тяга (основание),
прижимной ролик и пассик от плеера, задняя ось с колесами от игруш-
ки.
Робот, созданный канадскими радиолюбителями в 2008 году, сос-
тоит из солнечной батареи и электролитического конденсатора, схема
на двух транзисторах (рис. 4.2). Основные элементы взяты от лентопро-
тяжного механизма плеера и бобинного магнитофона (прижимной ро-
лик).
Робот, показанный на рис. 4.3, изготавливается в Канаде промыш-
ленным образом в виде набора для самостоятельного творчества (под-
робности — на сайте www. solarbotics. com).
72
Глава 4
Рис. 4.2. Робот, созданный канадскими
радиолюбителями в 2008 году
Рис. 4.3. Робот, созданный из набора
деталей для самостоятельной сборки
Конструкции на фотоэлементах участвуют в соревнованиях устраи-
ваемых в робот-играх “BEAM” (аббревиатура “BEAM” состоит из пер-
вых букв английских слов “Биотехнология”, “Эволюция”, “Аналоговые
системы”, “Модульные принципы” [4,5]). Условия соревнования сле-
дующие... Робот должен проехать как можно дальше по ровной, хоро-
шо освещаемой солнцем поверхности. При этом для движения не ис-
пользуется аккумуляторная батарея.
Основная идея конструкции заключается в том, что энергия от сол-
нечных батарей заряжает электролитический конденсатор большой ем-
кости, а затем, при срабатывании компаратора, передается на двигатель.
Более подробно с условиями игр “BEAM” можно ознакомится на сайтах
www.solarbotics.com и www.powerfilmsolar.com.
Дизайн
Автор специально создал модель “Solar bot” на основе распростра-
ненных дешевых деталей и вышедших из употребления приборов. Фо-
тоэлементы позаимствованы из китайских микрокалькуляторов с двой-
ным питанием. В этих приборах рабочие фотоэлементы служат просто
бутафорией, поэтому их характеристики сильно варьируются.
Второй основной элемент — это двигатель, взятый из нерабочих
часов автомобиля “Жигули 2106”, установленных на “торпеде” машины.
Возможны и другие варианты двигателей, например, — от китайских
дешевых часов. Двигатель часов работает в импульсном режиме. Если
частоту импульсов увеличить до предела, то получим низкоскоростной
двигатель на 1-100 об/мин. Это позволит сэкономить на редукторе,
а значит, — и уменьшить вес конструкции.
Солнечный робот “Solar bot”
73
Исходя из основных принципов создания робота, можно собрать
схему управления на микросхемах низкой интеграции, например:
NE555, логика, триггер Шмидта, аналоговые компараторы и т.д. Но
схема на простых элементах не отличается гибкостью и сложна в пере-
настройке. Кроме того, не все микросхемы работают на напряжении
3,0 В, а при монтаже корпусов типа DIP увеличивается вес конструкции.
По этой причине в основу схемы управления автор заложил микро-
контроллер ATtiny 15, изготовляемый в легком корпусе SO1C 8 [1]. По-
скольку он оснащен Flash-памятью, программу можно в любой момент
откорректировать и переписать, что придает схеме гибкость в использо-
вании.
Зарубежные радиолюбители приложили усилия в другом направле-
нии электроники, упростив схему до двух транзисторов, зарядного кон-
денсатора и нескольких резисторов. Автор считает, что такие схемы не
имеют будущего в управлении сложными процессами. Схема с микро-
контроллером достигает наивысшего КПД за счет малого потребления
тока и возможности перераспределения энергии. Кроме того, в ней пре-
дусмотрено ручное регулирование параметров.
Структурная схема
Структурная схема робота “Solar bot” (рис. 4.4) состоит из следую-
щих элементов:
• фотоэлемент FS;
• диод Шотки D;
• микроконтроллер (МК);
• электролитические конденсаторы С1-С4;
• ключевой транзистор VT;
• двигателя от часов (Motor);
• аккумуляторная батарея питания микроконтроллера U;
• регулятор скорости движения R1;
• регулятор уровня заряда конденсаторов R2;
• регулятор уровня срабатывания R3.
Солнечная энергия попадает на фотоэлемент FS, который генериру-
ет электрический ток. Фотоэлемент состоит из нескольких последова-
тельно включенных элементов, которые генерируют напряжение поряд-
ка 3,2..4 В. Ток проходит от FS через диод Шотки D и заряжает электро-
литические конденсаторы С1-С4.
Микроконтроллер оснащен 10-разрядцым АЦП с тремя входными
аналоговыми каналами, который поочередно считывает уровень задава-
емой скорости движения с KL уровень заряда электролитов с R2 и уро-
74
Глава 4
вень включения двигателей с R3. Аналоговый сигнал считывается с час-
тотой около 50 кГц.
Рис. 4.4. Структурная схема робота “Solar bot”
Как только уровень заряда конденсаторов достигает установленного
уровня, включается программа генерации импульсов с частотой, соот-
ветствующей заданной скорости. Эти импульсы поступают на транзи-
стор VT, который коммутирует ток в обмотке двигателя. Движение про-
должается до момента разряда конденсаторов С1-С4.
Для питания микроконтроллера используется батарея питания 3 В.
С помощью регулировки Rl, R3 можно добиться требуемого эффекта
движения робота. Тем не менее, увеличение скорости может привести
к снижению КПД часового двигателя. На большой скорости магнитное
поле будет рассеиваться, тогда как вращение вала будет ограничено.
Кроме того, конструкция не обладает необходимой для собственного
движения инерции, поскольку слишком мало весит и, к тому же, магнит
часового двигателя создает магнитное торможение при отсутствии про-
текания тока через обмотку сердечника.
Еще одной из нерешенных проблем является конфликт источника
с нагрузкой. Солнечная батарея выполняет роль источника ЭДС с не-
большим током и низким напряжением, тогда как электролитический
конденсатор при включении имеет бесконечно малое сопротивление.
Солнечный робот “Solar bot’
75
При заряде от солнечной батареи в начальный момент конденсатор
шунтирует батарею и может вывести ее из строя. Однако между сол-
нечной батареей и конденсатором установлен диод. Исходя из физиче-
ских законов, постоянное барьерное падение напряжения на диоде со-
ставляет от 0,1 до 0,8 В. В данной схеме использован диод Шотки BAS
70, для которого максимальный прямой ток составляет 70 мА, а падение
напряжения — 410 мВ при токе 1 мА и 750 мВ при токе 70 мА. [2]
Благодаря применению диода BAS 70, предотвращается выход из
строя фотоэлемента, как источника. При росте силы тока напряжение на
фотоэлементе падает до нуля, и поскольку диод Шотки имеет барьер
минимум 410 мВ, рост тока будет ограничен на безопасном уровне. Од-
нако в солнечный день фотоэлемент может генерировать значительный
ток, поэтому применены два параллельно включенных диода. Такое ре-
шение позволяет экономно использовать энергию фотоэлемента. В од-
ном корпусе В AS 70 находятся два диода, но для рассеяния тепловой
мощности лучше использовать отдельно два корпуса BAS 70. Это
улучшит КПД схемы и позволит безопасно использовать ресурсы энер-
гии солнца.
Принципиальная схема
Схема робота “Solar bot” (рис. 4.5) питается от солнечной батареи
G1 через диоды Шотки DI, D2. В солнечной батарее установлены фото-
элементы, подключенные попарно, чтобы достичь напряжения 3,5..4 В.
Функцию управления выполняет микроконтроллер 1С1 с отдельным пи-
танием от батарейки G2. Микроконтроллер ATtinyl5 сохраняет работо-
способность при напряжении 2,7..5,5 В. [1]
Как только на поверхность фотоэлементов попадают ^учи солнца,
генерируется ток, который заряжает конденсаторы СЗ-С7 до уровня
3,5..3,8 В. АЦП1 (ADC2 микроконтроллера) отслеживает уровень заряда
конденсаторов, снимая напряжение с делителя Rl, R2 и сравнивая его
со значением напряжения на АЦПЗ. АЦПЗ (ADC1 микроконтроллера)
снимает напряжение, заранее установленное на R6. Тем самым на R6
можно регулировать порог запуска двигателя.
Для оперативного изменения скорости вращения двигателя (частота
импульсов) можно изменять уровень напряжения на R4, который сни-
мается на АЦП2 (ADC3 микроконтроллера). R4 подключен к конденса-
торам, и во время разряда уровень также будет падать. Поскольку для
микроконтроллера организовано независимое питание, АЦП2 (АГ)СЗ)
будет фиксировать снижение напряжения, а программа — уменьшать
частоту следования импульсов. При разряде конденсаторов движение
76
Глава 4
конструкции начнет замедляться. В начальное состояние микрокон-
троллер сбрасывается внешней цепочкой R5, С8.
Рис. 4.5. Принципиальная схема робота “Solar bot”
Для питания микроконтроллера установлена батарея G2, которая
может подзаряжаться через R7, D3. Как только микроконтроллер срав-
нил значения с АЦП и проверил заряд конденсаторов, программа фор-
мирует импульсы для включения транзистора Q1. Транзистор Q1, ком-
мутируя ток в обмотке двигателя, заставляет протекать ток в импульс-
ном режиме. При этом во время закрытия транзистора Q1 ток замыкает-
ся через цепочку LED1, R8. Тем самым Q1 предохраняется от перегруз-
ки, а паразитный ток используется для свечения светодиода, что позво-
ляет судить о работоспособности схемы в случае механической непо-
ладки.
Прежде чем собрать модель, необходимо проверить фотоэлементы.
Опыты показали что с фотоэлементами производства Happy (НР-5514-4)
генерируется напряжение 2,2 В, ток 2 мА; а для фотоэлементов Sumon-
cle (RSC-2510) — напряжение 3 В, ток 1 мА (оба производителя — ки-
тайские). Тем не менее, продукция компании Sumoncle очень хорошо
зарекомендовала себя при освещении в 200 люкс. Одна такая батарея
Солнечный робот “Solar bot”
77
способна генерировать ток силой до 20 мА.
Более подробно с характеристиками фото-
элементов от этого производителя можно
ознакомится на сайте www.sumoncle.net
(рис. 4.6).
Алгоритм работы
Алгоритм управления роботом “Solar
bot” (рис. 4.7) начинается с установки в ну-
левое состояние порта В, чтобы не вывести
из строя транзистор Q1. Далее программа
опрашивает уровни напряжений на АЦП.
Соответствие схемы каналов АЦП с реаль-
ной схемой выводов микроконтроллера следующее:
• АЦП1 — ADC2, уровень заряда конденсаторов;
• АЦП2 — ADC3, уровень срабатывания при сравнении с АЦП1;
• АЦПЗ — ADC 1, скорость движения.
Рис. 4.6. Фотоэлементы
производства Sumoncle
Как только уровень напряжения на АЦП1 достигает уровня на
АЦП2, происходит переход к подпрограмме считывания данных АЦПЗ,
которые задают промежуток времени между импульсами, подаваемыми
на транзистор Q1, т.е. частоту импульсов, а значит — скорость движе-
ния конструкции. Поскольку данные АЦП1 сильно зависят от уровня
напряжения на конденсаторе, в блок-схеме задана генерация 42 импуль-
сов с одной и той же частотой.
Для предотвращения выхода из строя АЦП1 в схеме предусмотрен
делитель Rl, R2. R6 применяется для ручной регулировки уровня сраба-
тывания и запуска движения робота. В схеме не предусмотрен широкий
диапазон регулировки уровня, поэтому при регулировке R6 более 5/7 от
номинала программа может попасть в “мертвую зону”, когда данные
АЦП1 всегда будут менее АЦП2. Однако солнечные батареи включены
последовательно, поэтому суммарное напряжение на конденсаторе мо-
жет достичь 4,5 В. Поскольку микроконтроллер питается от напряжения
3,0 В, мертвая зона R6 увеличится до значения 2,5/7 от номинала. Эти
данные проверяются экспериментально. При настройке R6 необходимо
отрегулировать на 1/4 от номинала, и в дальнейшем изменять значение
для R6 в этой области не более 30% от величины сопротивления.
R4 позволяет изменять скорость движения робота, благодаря АЦПЗ.
При этом АЦПЗ фиксирует не только напряжение, необходимое для за-
дания временных задержек, но также изменят напряжение скорости дви-
жения при разряде конденсатора, что повышает КПД схемы. Если уве-
78
Глава 4
личить скорость до максимума, то,
возможно, уменьшится КПД, при
уменьшении же скорости робот бу-
дет двигаться слишком медленно и
не выиграет соревнование.
Программа
Программа (листинг 4.1) начи-
нается с установки порта ввода-вы-
вода В. В данной схеме выходом
микроконтроллера является только
один вывод РВО. Если некоторый
разряд регистра DDRB установлен
в лог. 1, то соответствующий вывод
микроконтроллера работает как вы-
ход. В программе, кроме вектора
RESET, другие векторы прерыва-
ния не используются.
На первом этапе выполнения
программы происходит коммута-
ция аналогового входа АЦП с по-
мощью встроенного аналогового
мультиплексора. Для этого в разря-
дах 0..2 регистра ADMUX устанав-
ливается соответствующая комби-
нация нолей и единиц, а также оп-
ределяется источник опорного на-
пряжения с помощью разрядов 6,7
регистра ADMUX.
На втором этапе в разрядах 0..2
регистра AJDCSR задается тактовая
частота АЦП, путем деления такто-
вой частоты микроконтроллера.
Разрешается работа АЦП, выбира-
ется режим работы АЦП (в данном
случае — одиночное преобразова-
ние), и активизируется преобразо-
вание.
Преобразование длится 25 так-
тов АЦП, и после его завершения
Рис. 4.7. Алгоритм управления
роботом “Solar bot”
Солнечный робот “Solar bot”
79
данные записываются в регистры данных АЦП ADCL и ADCH. Чтение
регистров строго фиксировано: вначале ADCL, затем ADCH.
В таком виде считывания АЦП программа работает нестабильно из-
за наводок и шумов от питающей сети. Автор не использовал “спящий”
режим во время считывания АЦП. Эксперименты показали, что это не-
обязательно. Для более точной и стабильной работы автор выполнил че-
тыре преобразования, просуммировал данные и разделил на четыре
(среднее арифметическое). Данные, получаемые от АЦП стали намного
точнее и стабильнее. Отметим также, что коммутация выводов АЦП
происходит с некоторой паузой, необходимой для электронного ключа
мультиплексора.
Программа работает по алгоритму, описанному в блок-схеме, пред-
ставленной на рис. 4.7. Длительность пауз и импульсов задана подпро-
граммой zader, которая зависит от данных АЦПЗ. Длительность фор-
мируется программным путем, поскольку ресурс таймера микрокон-
троллера ограничен. Вначале формируется нулевой уровень импульса,
затем выполняется подпрограмма zader, потом формируется единич-
ный уровень, и опять выполняется подпрограмма zader. Процесс по-
вторяется циклически с заданным количеством импульсов. В представ-
ленной программе за секунду формируется 42 импульса.
Листинг 4Л< Программа управления роботом “Solar bot”
.include "D:\Program Files\Atmel\AVR Studio\Appnotes\tnl5def.inc"
/Автор: Кравченко А.В.
/Дата: 7.09.2008
/Версия: 1.1.1
/Имя файла: Solar.asm
/Микроконтроллер: AVR tiny15.
/Тактовая частота: 1,6 МГц
/Питание: нестабилизированное 3 В
def tmp = rl6
def tmp2 = rl7
def tmp3 = rl8
def tempo = rl9
def adc2 = r22
def add = r23
def par = r20
def Y = r29
def X = r21
def M = r2 6
def adr = rO
def dl = r24
80
Глава 4
Листинг 4.1. Продолжение
.def d2 = r25
.def SI = r27
.def S2 = r28
.def F = r29
cseg
org 0 rjmp Дор RESET /rjmp EXT_INT0 - прерывание не используется
nop /rjmp EXT-PIN - прерывание не используется
nop / rjmp TIME_OVFO - прерывание от таймера
nop /rjmp EE_RDY - прерывание от таймера
nop /rjmp ANA_COMP - прерывание не используется
.org 20 /настройка порта В
RESET: пор
clr tmp
out DDRB, tmp
out PORTB, tmp /обнулить порт В
clr tmp
Idi tmp, $01 /РВО-выход
out DDRB, tmp
/Начало программы
/сброс всех значений
clr dl
clr d2
clr SI
clr S2
clr tmp
nStart: nop
nop
nop
/вход в подпрограмму опроса АЦП1
nop
Idi tmp3, $01 /источник питания, ADC2,
Idi tmp2, $C5 /одиночное, запуск, 1/32
/опрос уровня заряда конденсатора
rcall adcn
mov dl, tmp2 /загрузка младшего разряда
mov d2, tmp3 /загрузка старшего разряда
/вход в подпрограмму опроса АЦП2
пор
Idi tmp3, $03 /источник питания, ADC3,
Idi tmp2, $С5 /одиночное, запуск, 1/32
Солнечный робот “Solar bot’
81
Листинг*.!, Продолжение
;опрос уровня освещенности
rcall adcn
mov SI, tmp2 /загрузка младшего разряда
mov S2, tmp3 /загрузка старшего разряда
/вычитанием F=D-S
nop rcall nop clz arifm /подпрограмма ариметических действий
cpi d2, 0
breq eer
rjmp pram
er: nop
mov F, dl
/проверка область значений +-10
cis
cpi F, $2A
brge pram /переход по больше положительное
nop
rjmp nStart /переход по меньше +10
ram: nop
/вход в подпрограмму опроса АЦПЗ
пор
Idi tmp3, $01 /источник питания, ADC1,
Idi tmp2, $C5 /одиночное, запуск, 1/32
/опрос уровня освещенности
rcall adcn
пор
Idi par, $0A /задаем 10 шагов
das: пор
Sbi $18, 0 /установить в 1 PORTBO
пор
rcall zader /задержка
пор
rcall zader /задержка
пор
rcall zader /задержка
пор
rcall zader /задержка
пор
Cbi $18, 0 /сбросить на 0 PORTBO
пор
rcall zader /задержка
пор
rcall zader / задержка-
nop
82
Глава 4
Листинг 4Л Продолжение
rcall zader ;задержка
пор rcall zader ;задержка
пор cln dec brpl пор rjmp par das nStart
/Подпрограмма вычитания двух байтного arifm: пор числа
/вычитание значения АЦП от набранного значения
sub dl, S1 /Вычитание /проверка на ноль старшего байта clz cpi d2, 0 breq loki clr tmp rol tmp младшего байта
sub d2, S2 /Вычитание sub d2, tmp loki: nop ret старшего байта с заемом
;Настройка АЦП
adcn: пор
пор
clr tmp
awe: пор
cpi tmp, $04
brsh ass
out ADMUX, tmp3 /коммутация входов АЦП
пор
out ADCSR, tmp2 /запуск АЦП на преобразование
/Сохранение данных АЦП
in tmp2, ADCL
in tmp3, ADCH
mov r2, tmp2
mov r3, tmp3
mov r4, r2
mov r5, r3
mov r6, r4
mov r7, r5
inc tmp
rjmp awe
;среднее арифметическое действие
Солнечный робот “Solar bot’
83
Листинг 4Л. Продолжение
пор
clr r8
clc
add tmp2, r2
adc r9, r8
add tmp2, r4
adc r9, r8
add tmp2, r6
adc r9, r8
clc
Isr r9
ror tmp2
Isr r9
ror tmp2
clr r9
clc
add tmp3, r3
adc r9, r8
add tmp3, r5
adc r9, r8
add tmp3, r7
adc r9, r8
clc
Isr r9
ror tmp3
Isr r9
ror tmp3
nop
ret
;Подпрограмма задержки включения
zader: nop
wdr
clr M
clr Y
Idi Y, $AF
Idi M, $04
add M, tmp3
dm: nop
Idi X, $04
add x, tmp2
nop
goq: nop
mov x, tmp2
dv: nop
wdr
84
Глава 4
Листинг 4.1. Окончание
пор
dx: dec Y
brpl dx
cln
dec X
brpl dv
cln
dec M
brne dm
ret
.EXIT
Листинг 4.2. НЕХ-файл для робота "Solar bot”
:020000020000FC
:0C00000013C00000000000000000000021
:100028000000002707BB08BB002701E007BB8827A3
:100038009927BB27CC2700270000000000000000FC
:1000480021E015EC42D0812F922F000023E015EC1F
:100058003CD0B12FC22F00002DD0000098949030D2
:1000680009F007C00000D82FC894DA3214F4000051
:10007800E3CF0000000021E015EC27D000004AE0A3
:100088000000C09A000051D000004FD000004DD0B1
:1000980000004BD00000C098000047D0000045D0B9
:1000A800000043D0000041D00000A8944A9542F7D0
:1000B8000000C2CF00008B1B9894903021F00027DD
:1000C800001F9C1B901B00000895000000000027E3
:1000D8000000043068F427B9000016B914B125B13E
:1000E800212E322E422C532C642C752C0395F0CFE4
:1000F800000088248894120D981C140D981C160D65
:10010800981C889496941795969417959924889492
:10011800230D981C250D981C270D981C88949694DF
:10012800279596942795000008950000A895AA277A
:10013800DD27DFEAA4E0A20F000054E0510F000021
:100148000000512FQ000A8950000DA95F2F7A89456
:0C0158005A95C2F7A894AA9579F708956B
:00000001FF
Монтажная плата
Для уменьшения веса конструкции были выбраны SMD-элементы
(рис. 4.8). Транзистор: QI BSS101 или BSS145 [6]. В качестве электро-
литических конденсаторов применены ионисторы на 0,047 Ф и 5,5 В
фирмы TOKIN. Ионисторы имеют большую емкость и малые габариты.
Как указывалось ранее, фотоэлементы взяты от старых нерабочих каль-
куляторов с двойным питанием. Батарея G2 для питания микроконтрол-
Солнечный робот “Solar bot”
85
лера состоит из двух батареек по 1,5 В А398 и позаимствована из нера-
бочих калькуляторов вместе с корпусом и платой крепления. Конденса-
торы можно использовать SMD или миниатюрные. Микроконтроллер
ATtinyl5 — в корпусе SOIC8.
Рис. 4.8. Плата управления роботом “Solar bot”
Монтаж большинства элементов потребует хорошего зрения и тер-
пения. При сборке конструкции в качестве платы управления автор ис-
пользовал макетницу и элементы поверхностного монтажа (даже под-
строечные резисторы), однако для радиолюбителей была также разрабо-
тана монтажная плата (рис. 4.9) с габаритными размерами 74x42 мм.
Батареи Gl, G2 и конденсаторы С5-С7 вынесены за пределы платы.
Конденсаторы (ионисторы) спаиваются в отдельную батарею и устанав-
ливаются на отдельную площадку рядом с двигателем. Поскольку они
обладают значительным весом, их низкое расположение придает конст-
рукции устойчивость.
Перед установкой микроконтроллера на плату необходимо записать
в него программу, представленную выше в листинге 4.2 (автор реализо-
вал на макетной плате разъем для оперативного изменения программы).
Далее плату крепят к верхней панели и соединяют ее проводами
с батареями Gl, G2. Провода от фотоэлементов G1 должны быть мак-
симально гибкими, поскольку монтажные площадки на фотоэлементах
не выдерживают усилия и отрываются, а восстановить их невозможно.
86
Глава 4
Фотоэлементы, батарейки микроконтроллера и конденсаторная ба-
тарея подключены к плате через разъем. Это дает возможность опера-
тивно заменять эти элементы. Кроме того, автор предполагает прово-
дить эксперименты с различными конденсаторами разной емкости, по-
этому конденсаторы вынесены за пределы платы.
Солнечный робот “Solar bot"
87
Конструкция
Конструкция собрана из коробки для оптических дисков. Эскиз
конструкции с размерами основных узлов представлен на (рис. 4.10).
Рис. 4.10. Эскиз конструкции робота “Solar bot” с указанием размеров
Внешний вид конструкции представлен на рис. 4.11.
Рис. 4.11. Внешний вид конструкции робота “Solar bot”
Габариты несущей панели — 73x52 мм. Ее размеры зависят от раз-
меров фотоэлементов. Для фотоэлемента Happy (НР-5514-4) он состав-
ляет 14x55 мм при толщине 1 мм. На панель можно установить пять та-
ких фотоэлементов.
Переднее колесо позаимствовано от плеера. От ролика двигателя
движение к переднему колесу передается через пассик. Ролик двигателя
насажен с одной стороны на вал, а с другой — на скобу в виде пружины
88
Глава 4
(рис. 4.12). Такое решение позволяет натягивать пассик, чтобы он не
проскальзывал.
Рис. 4.12. Крепление ролика двигателя
Задние колеса изготовлены из плотного полистирола. Стойки колес
стянуты пружинами. Для ограничения стягивания пружин между стой-
ками установлены пластиковые трубочки от соломинок для напитков.
Плата управления устанавливается снизу основной несущей панели.
Ближе к переднему колесу к основной панели крепятся две батарейки,
для питания микроконтроллера. Все платы крепятся винтами и гайками
с резьбой Ml,6.
Сборка
Вначале из пластиковой коробки для компакт-дисков вырезаются
детали конструкции по размерам, указанным на рис. 4.10: четыре угол-
ка, четыре стойки для колес и основная несущая панель. На стойках вы-
сверливаются отверстия для пружин. Как только детали готовы, на ос-
новной панели фломастером наносятся линии, на которые клеятся дета-
ли, а затем место монтажа обрабатывается клеем (в данном случае —
“Циакрин 90” для оргстекла). Детали прижимаются к клею и удержива-
ются в таком положении 10-30 секунд, после чего конструкцию остав-
ляют сохнуть в течение часа.
Как только все узлы просохли, можно приступать к сборке механи-
ческих узлов и монтажа схемы. Фотоэлементы, как наиболее хрупкие
детали, крепятся к конструкции только после монтажа. При этом они
Солнечный робот “Solar bot”
89
располагаются в наивысшей точке точно в горизонтальной плоскости
(рис. 4.13). При движении конструкции это позволяет максимально ис-
пользовать энергию лучей солнца при любом угле падения луча на по-
верхность фотоэлемента.
Рис. 4.13. Размещение фотоэлементов на конструкции
Для того чтобы фотоэлементы не съезжали во время движения, на
нижнюю плоскость элемента клеится двухсторонний скотч. Фотоэле-
менты укладываются на поверхность панели через пористую резиновую
подложку и фиксируются жидкой пластмассой или прозрачным герме-
тиком. После сборки обязательно необходимо стянуть стойки колес
пружинами, поскольку от веса конструкции они расходятся в стороны.
Пружины можно взять от старых авторучек или зажигалок (рис. 4.14).
Рис. 4.14. Стойки колес стянуты пружинами
90
Глава 4
Эксплуатация
Перед началом эксплуатации резистор R4 устанавливается на поло-
вину рабочего сегмента, a R6 — на 1/4 сегмента регулировки двигателя
(по отношению к нулевому проводу или “земле”). Далее необходимо
установить заряженные батарейки для питания микроконтроллера и раз-
местить робота на ярко освещаемой солнцем ровной поверхности. Как
только конденсаторы робота зарядятся, конструкция начнет движение,
которое будет продолжаться до полного разряда конденсаторов. Во
время движения будет включаться светодиод, использующий в качестве
энергии паразитные токи. Конструкция, проехавшая дальше, занимает
первое место в соревновании.
Глава 5
Солнечный миниэлектромобиль
“Муха”
Транспорт будущего — каким он будет в эпоху исчерпанных топ-
ливных ресурсов? Будет ли он ездить, ползать, ходить? Какая модель
подходит человеку? Сейчас мы создадим прообраз будущего транс-
портного средства, экологически чистого и экономичного. Разумеется,
важную роль в построении будущих аппаратов сыграют гибкое микро-
контроллерное управление и новые технологии. Композитные материа-
лы облегчат вес транспорта, создадут новый образ конструкций. Элек-
тродвигатели с широтно-импульсным управлением позволят экономно
тратить энергию.
Какова основная идея создания солнечного электромобиля? Сол-
нечная энергия попадает на землю бесплатно и в неограниченном коли-
честве. Человечеству же необходимо научиться собирать, распределять
и эффективно расходовать ее. Для всего этого требуется гибкая, логиче-
ская схема управления.
Однако существуют и физические ограничения. Солнечная энергия
передается только днем. Солнце может быть закрыто облаками или по-
годные условия снизят эффективность солнечных лучей. Схема будуще-
го транспорта на солнечной энергии должна реагировать на все препят-
ствия, преподносимые человечеству природой. Именно поэтому выби-
рается микроконтроллерная схема управления на основе устройства АТ-
tinyl 5 от компания Atmet.
Для определения функций устройства решим несложную задачу
формирования основных требований. Конструкция выполнена как ми-
нимодель; ее вес — до 500 г; в процессе прямолинейного движения она
должна преодолеть расстояние 10 м за минимальный промежуток вре-
мени. Возможно применение солнечных модулей любой полезной пло-
щади и конфигурации. Солнечный миниэлектромобиль может быть лю-
бой формы на двух и более колесах. В качестве привода колес исполь-
зуется электродвигатель любого типа.
Автор представляет на рассмотрение читателей действующую ми-
нимодель электромобиля, показанную на рис. 5.1.
92
Глава 5
Рис. 5.1. Солнечный миниэлектромобиль
Электромобиль очень похож на насекомое перед взлетом, поэтому
автор назвал конструкцию “Мухой”. Прообраз солнечного электромо-
биля уже рассматривался на страницах журнала [7]. Предыдущий вари-
ант использовал отдельные фотоэлементы и привод от двигателя к ко-
лесу через пассик. В продаже есть монокристальные и поликристальные
солнечные модули разных размеров и на разные токи (табл. 5.1).
Таблица 5.1. Доступные солнечные модули
Тип модулей Наименование Габаритные размеры, ДхЩхВ U хол. хода, В I кор. зам., мА Мощ- ность, Вт
Монокри- стальные YH21*110-4А/В 150-М 21x110x2,5 2,40 165,00 0,30
YH29*70-4A/B50-M 29x70x2,5 2,40 55,00 0,10
YH40*40-4A/B40-M 40x40x2,5 2,40 44,00 0,08
YH55*55-10A/B70-M 55x55x2,5 6,00 77,00 0,35
YH60*60-8A/B50-M 60x60x2,5 4,80 55,00 0,20
YH65*45-8A/B80-M 65x45x2,5 4,80 88,00 0,32
YH91*54-8A/B150-M 91x54x2,5 4,80 165,00 0,60
YH94-4B250-M D=94, H=2,5 4,80 84,00 0,32
Солнечный миниэлектромобиль "Муха”
93
Таблица 5.1. Окончание
Тип модулей Наименование Габаритные размеры, ДхЩхВ U хол. хода, В I кор. зам., мА Мощ- ность, Вт
Пленочный CIS-ST0.25 CIS 60x60x2 5,00 100,00 0,25
Поликри- стальные УН2Г110-4А/В150-Р 21x110x2,5 2,40 165,00 0,30
YH29*70-4A/B50-P 29x70x2,5 2,40 55,00 0,10
YH40*40-4A/B40-P 40x40x2,5 2,40 44,00 0,08
YH55*55-10A/B70-P 55x55x2,5 6,00 77,00 0,35
YH60*60-8A/B50-P 60x60x2,5 4,80 55,00 0,20
YH65*45-8A/B80-P 65x45x2,5 4,80 88,00 0,32
YH91*54-8A/B150-P 91x54x2,5 4,80 165,00 0,60
YH94-4B250-M D=94, H=2,5 4,80 84,00 0,32
Появляется возможность моделировать различные конструкции
солнечных миниэлектромобилей. В рассматриваемой модели электро-
двигатель установлен рядом с передним колесом, т.е. конструкция име-
ет передний привод. Такое расположение двигателя наиболее рацио-
нально.
Плата управления находится в передней части платформы. Предпо-
ложительно, над ней будет размещено сидение водителя. Позади води-
теля — солнечный модуль (см. рис. 5.1).
Для того чтобы конструкция была устойчивой, выбран самый лег-
кий вариант платформы на трех колесах. Задняя ось неподвижна, вра-
щение реализовано непосредственно на задних колесах. Их ось крепится
к перегородке и элементам накопления энергии (рис. 5.2).
Для более эффективной работы солнечного модуля по бокам плат-
формы установлены отражатели солнечного света (рис. 5.3). Привод пе-
реднего колеса реализован в виде шестеренчатой передачи (рис. 5.4).
Для улучшения сцепления с дорогой на переднее колесо можно допол-
нительно установить боковой резиновый протектор (в данной минимо-
дели не используется).
Схематически дизайн солнечного миниэлектромобиля показан на
рис. 5.5. В основании конструкции используется платформа, к которой
крепятся электролитические конденсаторы и перегородка, а также — от-
ражатели, солнечная батарея, плата управления и стойка переднего ко-
леса. Электродвигатель и ось задних колес крепятся к перегородке.
В конструкции используется минимум деталей. Двигается мини-
электромобиля только прямо. Если конструкция должна поворачивать,
то перегородку необходимо разделить на две части, из которых перед-
94
Глава 5
няя прикрепляется к оси поворота переднего колеса. В результате будет
поворачиваться весь передний узел с двигателем. В данной модели по-
ворот переднего колеса не рассматривается, поскольку наша основная
задача — рациональное использование солнечной энергии.
Рис. 5.2. Крепление задней оси солнечного миниэлектромобиля
Рис. 5.3. Отражатели солнечного света
Солнечный миниэлектромобиль “Муха’
95
Рис. 5.4. Привод переднего колеса
Рис. 5.5. Дизайн солнечного миниэлектромобиля
96
Глава 5
Структурная схема
Структурная схема солнечного миниэлектромобиля построена на
микроконтроллере ATtinyl5 [8] (рис. 5.6).
Рис. 5.6. Структурная схема солнечного миниэлектромобиля
Солнечные лучи, попадая на поликристаллы фотоэлемента, создают
электродвижущую силу (ЭДС). Ток от фотоэлемента заряжает конден-
саторы Cl, С2 через диод Шотки D [2]. Напряжение с конденсаторов
передается на микроконтроллер ATtinyl5. Как только напряжение пре-
высило 2,7 В [8], включается микроконтроллер, и запускается програм-
ма управления.
Напряжение на конденсаторах Cl, С2 непрерывно растет. Микро-
контроллер отслеживает этот рост и формирует уровень срабатывания.
Напряжение реального уровня срабатывания снимается с потенциомет-
ра R1, проверяется встроенным в микроконтроллер АЦП. Когда уровень
достиг заданного программой первого значения порога АЦП, на транзи-
стор VT1 подается положительный импульс длительностью 34 мс. Тран-
зистор VT1 открывается на короткий промежуток времени, и через элек-
тродвигатель протекает ток.
Ток через двигатель ограничен на уровне 70 мА из-за малой мощно-
сти транзистора VT1. Его сила будет возрастать постепенно, поскольку
электродвигатель имеет индуктивную составляющую. За короткий про-
межуток ток электродвигателя не успеет достичь значения 70 мА.
Солнечный миниэлектромобиль "Муха”
97
Когда разрабатывалась схема, постоянно возникали вопросы: “Как
решить задачу по расчету накопленной энергии? Каково идеальное со-
отношение площади фотоэлемента и мощности двигателя и его собст-
венной индуктивности? Где “золотая середина”? Как заставить конст-
рукцию на фотоэлементе двигаться непрерывно, без остановок, исполь-
зуя широтно-импульсное управления током двигателя?”.
Ответ скрывается в разделении энергии на порции и эффективном
поглощении этих порций. В программе для АЦП микроконтроллера за-
дан второй уровень срабатывания. При его достижении на транзистор
VT2 подается положительный импульс длительностью 34 мс, синфаз-
ный по отношению к импульсу, подаваемому на VT1. Результирующий
ток через двигатель достигнет 140 мА (максимальный для двигателя).
В этот момент конденсаторы Cl, С2 будут разряжаться слишком быст-
ро, однако максимальное значение силы тока заряда конденсаторов С1,
С2 для фотоэлемента Y65*45-8A/B80-P в солнечную погоду составляет
88 мА. Это значит, что за следующий полупериод конденсаторы С1, С2
не успеют зарядится, т.е. порция излишней энергии поглощена. Ее надо
восстановить. Кроме того, мы пришли к выводу, что пауза между им-
пульсами должна составлять примерно 60 мс. В реальной программе
пауза она — около 45 мс.
На следующем этапе цикла формирования импульса откроется один
транзистор VT1. Возможно, опять появится излишняя порция энергии,
и опять откроется VT1, VT2. При пульсации напряжения питания слож-
но спрогнозировать эффективность работы микроконтроллера, а также
сказать, на сколько процентов потеряет мощность электродвигатель при
постоянном разряде Cl, С2 и недостаточном заряде от фотоэлемента.
Именно для этой цели и разработана модель солнечного миниэлектро-
мобиля. Мы ищем эффективные схемы, программы, конструкции, и в
рассматриваемой модели исследуется формула накопления и поглоще-
ния энергии порциями.
Принципиальная схема
Принципиальная схема солнечного миниэлектромобиля очень на-
поминает предыдущий вариант [7] (рис. 5.7), но для чистоты экспери-
мента пришлось отказаться от аккумуляторов, питающих микрокон-
троллер. Кроме того, отсутствует оперативная регулировка скорости
вращения электродвигателя. Напряжение питания формирует фотоэле-
мент, ток от которого заряжает электролит 20 000 мкФ, 10 В через дио-
ды Шотки Dl, D2.
98
Глава 5
20000 mkFXIOV
Рис. 5.7. Принципиальная схема солнечного миниэлектромобиля
В схеме отсутствует выключатель питания. Его роль выполняет пе-
ремычка сброса S1. Пока она установлена на плате, микроконтроллер
находится в состоянии сброса. Как только перемычка снята, микрокон-
троллер включается. Это позволяет управлять электромобилем во время
соревнования, а также уменьшает вес конструкции ввиду отсутствия
кнопки. В формировании режима сброса участвует цепочка R4, С1.
Питание на микроконтроллер подается через диод Шотки D3 и ре-
зистор R5 на вывод 8. Если солнечная активность очень высока, и фото-
элемент генерирует большое напряжение ЭДС, то при питании микро-
контроллера эту величину необходимо ограничить. Для этого служит
накопительная емкость С2 и стабилитрон D4, не влияющий на заряд ос-
новного электролитического конденсатора 20 000 мкФ, 10 В.
Потенциометр R3 предназначен для оперативного управления
уровнем срабатывания. Микроконтроллер формирует импульсы управ-
ления двигателем на выводах 5 и 6. Эти импульсы поступают на транзи-
сторы QI, Q2. Как только они открыты, ток от электролитического кон-
денсатора 20 000 мкФ 10 В протекает по цепочке: LSP3, LSP2, электро-
двигатель, R1-R2, Q1-Q2, нулевой вывод, LSP5. Если напряжение пита-
ния упадет ниже нормы, микроконтроллер перейдет в “спящий” режим.
Детали на плате управления предназначены для поверхностного
монтажа SMD:
• микроконтроллер ATtinyl5L-lSU в корпусе SO1C;
• транзисторы QI, Q2 — BSS123 (ток стока — 150 мА, напряжение
управления — 2,8 В);
Солнечный миниэлектромобиль “Муха”
99
• диоды Шотки D1-D3 — BAS70 (ток — 70 мА, напряжение перехо-
да—410В);
• стабилитрон D4 на 3,9 В; ток 15 мА;
• два параллельно включенных электролитических конденсаторах на
10 000 мкФ, 10 В;
• солнечный фотоэлемент Y65*45-8A/B80-P.
Алгоритм работы
Алгоритм работы “Мухи” (рис. 5.8) начинается с двух пауз: 113 мс
и 45 мс.
Рис. 5.8. Алгоритм работы “Мухи’
100
Глава 5
Начальная пауза 113 мс необходима в том случае, когда электроли-
тические конденсаторы заряжены, электромобиль установлен на старто-
вую позицию, игрок снимает перемычку “RESET”. Длительность паузы
очень незначительна, однако она позволяет на старте дать устойчивость
электромобилю при манипуляциях с перемычкой.
Далее обязательно обнуляется порт В. Любые действия микрокон-
троллера после восстановления питания начинаются именно со сброса
состояния порта. Это позволяет вывести микроконтроллер в нормальное
исходное состояние и не спровоцировать полный разряд батареи. Когда
АЦП проверит состояние заряда батареи, будет принято решение: ожи-
дать накопления энергии или расходовать ее в незначительной степени.
Хотя второй уровень сравнения АЦП не имеет оперативной регулиров-
ки, такой подход сравнения данных АЦП и привязанных уровней к од-
ной регулируемой точке позволяет гибко использовать логическую
структуру АЦП. Такой подход сокращает количество деталей на плате,
создает точку разветвления в программе, привязывает эту точку к опе-
ративной регулировке.
В блок-схеме видно, что к данным АЦП прибавляется небольшое
значение 248h, и если значение S превысит EFDh, то произойдет пол-
ный разряд энергии. Программа создает искусственный скачок компа-
ратора. Такой скачок позволит более четко разделить границу заряда
и неполного заряда емкости батареи.
Программа
Программа управления солнечным миниэлектромобилем представ-
лена в листинге 5.1 и листинге 5.2.
Листинг 5.1. Программа управления солнечным миниэлектромобилем
.include "D:\Program Files\Atmel\AVR Studio\Appnotes\tnl5def.inc"
/Автор: Кравченко А.В.
/Дата: 7.06.2009
/Версия: 1.1.1
/Имя файла: Solar2.asm
;Микроконтроллер: AVR tinyl5L.
/Тактовая частота: 1,6 МГц
/Питание: нестабилизированное 3-3,9 В
def tmp = Г16
def tmp2 = rl7
def tmp3 = rl8
def tempo = rl9
def adc2 = r22
Солнечный миниэлектромобиль “Муха’
101
Листинг 5.1. продолжение
def add = r23
def par = r20
def Y = r29
def X = r21
def M = r26
def adr = rO
def dl = r24
def d2 = r25
def SI = r27
def S2 = r28
def F = r29
cseg
org 0
rjmp RESET
nop ;rjmp EXT_INT0 - прерывание не используется
nop ;rjmp EXT_PIN - прерывание не используется
nop ;rjmp TIME_OVFO - прерывание от таймера
nop ;rjmp EE_RDY - прерывание от таймера
nop ;rjmp ANA_COMP - прерывание не используется
.org 20
;настройка порта В
RESET: пор
;Задержка по времени 2 секунды
Idi tmp2, $4D
Idi tmp3, $0F
rcall zader
nop
rcall zader
nop
rcall zader
nop
rcall zader
nop
rcall zader
nop
rcall zader
nop
rcall zader
nop
rcall zader
nop
rcall zader
nop
rcall zader
102
Глава 5
Листинг 5Л< Продолжение
пор
nStart: пор
clr tmp
out DDRB, tmp
out PORTB, tmp /обнулить порт В
clr tmp
Idi tmp, $03 ;PB0, PBl-выход
out DDRB, tmp
;Начало программы
;сброс всех значений
Idi tmp2, $4D
Idi tmp3, $0F
rcall zader
nop
rcall zader
nop
rcall zader
nop
rcall zader
nop
clr dl
clr d2
clr SI
clr S2
clr tmp
nop
nop
nop
/вход в подпрограмму опроса АЦП1
nop
Idi tmp3, $82 /источник питания, ADC2,ADMUX
Idi tmp2, $C5 /одиночное, запуск, 1/32,ADCSR
/опрос уровня заряда конденсатора
rcall adcn
mov dl, tmp2 /загрузка младшего разряда
mov d2, tmp3 /загрузка старшего разряда
/второе значение АЦП
/сложение S= D+248h
пор
Idi si, $48
Idi s2, $02
clc /сброс флага переноса
add si, dl /сложение младших байтов
adc s2, d2 /сложение старших байтов с переносом
cln /сброс флага отрицательного значения
Idi tmp2, $B5 /значение младшего разряда порога
Солнечный миниэлектромобиль “Муха” 103
Листинг 5.1. Продолжение
Idi tmp3, $01 /значение старшего разряда порога
вычитание значения АЦП и порога
sub dl, tmp 2 /Вычитание младшего байта
проверка на ноль старшего байта
clr tmp
rol tmp
sub d2, tmp3 /Вычитание старшего байта с заемом
sub d2, tmp /Вычитание заема
loki: пор
brmi nStart /переход, если результат отрицательный
пор
cln /сброс флага отрицательного значения
Idi tmp2, $FD /значение младшего разряда порога
Idi tmp3, $0Е /значение старшего разряда порога
/вычитание второго значения АЦП и второго порога
sub s1, tmp2 /Вычитание младшего байта
проверка на clr rol ноль старшего tmp tmp байта
sub s2, tmp3 /Вычитание старшего байта с заемом
sub brmi Idi s 2, tmp soda tmp, $03 /Вычитание заема
out PORTB, tmp
nop
• rjmp fou
soda: nop
Idi tmp, $01
out PORTB, tmp
nop
fou: nop
Idi tmp2, $4D
Idi tmp3, $0F
rcall zader
nop
rcall zader
nop
rcall zader
nop
rjmp nStart
/Настройка АЦП
adcn: nop
nop
clr tmp
104
Глава 5
Листинг 5.1. Продолжение
awe: пор
cpi tmp, $04
brsh ass
out ADMUX, tmp3 /коммутация входов АЦП
пор
out ADCSR, tmp2 /запуск АЦП на преобразование
/Сохранение данных АЦП
in tmp2, ADCL
in tmp3, ADCH
mov r2, tmp2
mov r3, tmp3
mov r4, r2
mov r5, r3
mov r6, r4
mov r7, r5
inc tmp
rjmp awe
/среднее арифметическое действие
ass: nop
clr r8
clc
add tmp2, r2
adc r9, r8
add tmp2, r4
adc r9, r8
add tmp2, r6
adc r9, r8
clc
Isr r9
ror tmp2
Isr r9
ror tmp2
clr r9
clc
add tmp3, r3
adc r9, r8
.add tmp3, r5
adc r9, r8
add tmp3, r7
adc r9, r8
clc
Isr r9
ror tmp3
Isr r9
ror tmp3
nop
Солнечный миниэлектромобиль “Муха’
105
Листинг 5.1. Окончание
ret
;Подпрограмма задержки включения
zader: nop
wdr
clr M
clr Y
Idi Y, $AF
Idi M, $04
add M, tmp3
dm: nop
Idi x, $04
add x, tmp2
nop
goq: nop
mov X, tmp 2
dv: nop
wdr
nop
dx: dec Y
brpl cln dx
dec X
brpl cln dv
dec M
brne ret dm
.EXIT
Листинг 5.2. НЕХ-файл для солнечного миниэлектромобиля
:020000020000FC
:ОС00000013С00000000000000000000021
:1000280000001DE42FE08ED000008CD000008AD0A4
:10003800000088D0000086D0000084D0000082D064
:10004800000080D000007ED000007CD000000000BE
:10005800002707BB08BB002703E007BB1DE42FE010
:1000680071D000006FD000006DD000006BD0000090
:1000780088279927BB27CC2700270000000000000D
:10008800000022E815EC2ED0812F922F0000B8E452
:10009800C2E08894B80FC91FA89415EB21E0811B12
:1000A8000027001F921B901B00008AF20000A894F2
:1000B8001DEF2EE0B11B0027001FC21BC01B22F042
:1000С80003Е008ВВ000004С0000001Е008ВВ00001А
:1000D80000001DE42FE036D0000034D0000032D0FC
106
Глава 5
Листинг 5Х Окончание
:1000E8000000B5CF0000000000270000043068F4CD
:1000F80027B9000016B914B125B1212E322E422C91
:10010800532C642C752C0395FOCF00008824889418
:10011800120D981C140D981C160D981C8894969412
:1001280017959694179599248894230D981C250D56
:10013800981C270D981C8894969427959694279533
:10014800000008950000A895AA27DD27DFEAA4EOAB
:10015800A20F000054E0510F00000000512FOOOOD2
:10016800A8950000DA95F2F7A8945A95C2F7A894D2
:06017800AA9579F7089535
:00000001FF
В начале программы с помощью десяти циклов задержки формиру-
ется пауза для старта робота. Пауза длится 113 мс, после чего обнуляет-
ся порт В, и выдерживается еще одна пауза 45 мс. За это время микро-
контроллер успевает просканировать входное напряжение АЦП и про-
анализировать состояние заряда конденсатора.
Как только конденсатор заряжен до необходимого значения, равно-
го 437 уровням АЦП (01 B5h), на порт PB0 подается единичный уровень.
Открываются транзисторы выходного каскада, и электродвигатель на-
чинает расходовать запасенную энергию. Единичный уровень в порте В
держится 34 мс, после чего сбрасывается в ноль. Далее в течении 45 мс
проверяется состояние заряда конденсатора. За это время конденсатор
(батарея) может подзарядится от солнечного фотоэлемента. Если заряд
конденсатора удовлетворительный, то на порт PB0 выдается единичный
уровень. Цикл продолжается до полного разряда конденсатора (бата-
реи).
В хорошую солнечную погоду уровень заряда конденсатора может
быть очень высоким, поэтому, если на входе АЦП уровень выше чем
3 837 уровней АЦП (OEFDh), на порты PB0, РВ1 выдается единичный
уровень. Открываются два транзистора выходного каскада, и сила тока
через электродвигатель удваивается, т.е. робот начинает передвигаться
быстрее. Как только заряд упал, скорость снижается до прежнего уров-
ня.
Монтажная плата
Монтаж деталей автор выполнил на плате для макетирования: пере-
ходник для SMD-микросхем S095 (Sox-34). Габаритные размеры платы:
25,5x30,5 мм. Для подключения двигателя, солнечного фотоэлемента
и кнопки “RESET” предусмотрены разъемы с парными выводами. Для
подключения кабеля программирования микроконтроллера предусмот-
Солнечный миниэлектромобиль “Муха”
107
рен пятивыводной разъем Е1ка22 [7]. От электролитических конденса-
торов используется такой же разъем, который перед программировани-
ем отключается от схемы.
Все элементы паяются навесным монтажом специальным паяльни-
ком и крестообразным пинцетом на зажим. Перед установкой фотоэле-
мента подготавливаются медные провода диаметром 0,5 мм, которые
сгибаются в виде П-образной рамки под углом 70° и 90° и паяются к вы-
водам питания фотоэлемента.
Для изготовления платы управления (рис. 5.9) необходим двухсто-
ронний текстолит. Вместо кнопки S1 устанавливается разъем с двумя
выводами с перемычкой. Разъем SV1 паяется с обратной стороны пла-
ты. Перед установкой платы на конструкцию электромобиля через
разъем Е1ка22 программируется микроконтроллер.
Рис. 5.9. Плата управления солнечным миниэлектромобилем
Конструкция
Из тонкого оргстекла толщиной 1,2 мм или из использованных ко-
робок для компакт-дисков изготавливаются следующие детали: основа-
ние (рис. 5.10); перегородка (рис. 5.11); отражатель (рис. 5.12).
В основании высверливаются восемь отверстий, которые затем рас-
тачиваются до квадратной формы. Они необходимы для пластиковых
108
Глава 5
хомутов, удерживающих электролитические конденсаторы. Перегород-
ка выпяливается из угла коробки так, чтобы основная часть соответст-
вовала рис. 5.11, а отражатель — из плоскости коробки и обклеивается
Рис. 5.12. Чертеж отражателя для “Мухи”
Солнечный миниэлектромобиль “Муха”
109
Детали соединяются согласно рис. 5.13 и склеиваются клеем для
оргстекла.
Рис. 5.13. Сборочный чертеж “Мухи”
Перегородка клеится угловой частью в центре основания так, чтобы
ее стенка точно совпадала с осевой линией. Ножки электролитических
конденсаторов сгибаются для удержания задней оси. Как только скле-
енные детали корпуса высохли, электролитические конденсаторы с по-
мощью хомутов крепятся к нижней части основания. Задняя ось выпол-
няется из пластиковой трубки диаметром 3,8 мм и длиной 67 мм, в ко-
торую вставлены по бокам трубки диаметром 2,3 мм и длиной 56 мм.
В качестве основной оси автор использовал палочку от конфеты
“Чупа-Чупс”, а дополнительных полуосей — обрезки гигиенических па-
лочек. Задние колеса выполнены из оболочки игрушек “Киндер-Сюрп-
риз”. В них просверливаются по два отверстия диаметром 2,4 мм, после
чего задняя полуось устанавливается в перегородку и закрепляется вы-
по
Глава 5
водами конденсаторов, к которым затем припаиваются провода соглас-
но схеме, показанной на рис. 5.7. Далее колеса устанавливаются на бо-
ковые полуоси и фиксируются двумя нерабочими минисветодиодами.
Электродвигатель — от нерабочего CD привода; переднее колесо —
от старого кассетного плеера. Стойка переднего колеса и плата управ-
ления крепятся винтами Ml,6, затем двумя винтами Ml,2 крепится дви-
гатель. Солнечный фотоэлемент с помощью медных стоек в виде П-об-
разной рамки вставляется поверх основания в хомуты, удерживающие
конденсаторы. Выводы медных стоек припаиваются к проводам, имею-
щим разъем к плате управления.
Более наглядно конструкция представлена на рис. 5.1-5.4. Основная
ее идея — максимально облегчить вес, создать устойчивую форму, про-
верить эффективность солнечной батареи. Повторяя конструкцию из
вышеперечисленных материалов, мы придаем вторую жизнь ненужным
вещам. Еще один очень интересный материал для конструирования —
это дерево, легкое, достаточно прочное, экологически чистое. Этот ма-
териал ближе к человеку, он не имеет вредного запаха, легко обрабаты-
вается. Автор согласен с той идеей, что будущее — за деревянными
электромобилями.
Эксплуатация
Перед стартом электромобиль находится в темном месте. Как толь-
ко электромобиль установили на стартовую дорожку, необходимо снять
перемычку “RESET”. Солнечные лучи попадают на фотоэлемент, заря-
жают электролитические конденсаторы, и электромобиль начинает дви-
гаться.
Существует еще один вариант использования “Мухи”... Солнечный
электромобиль устанавливается фотоэлементом против солнечных лу-
чей, но перемычка “RESET” не снимается. Модель заносят в помеще-
ние, устанавливают на стартовую отметку и снимают перемычку
“RESET”. Победу присваивают тому электромобилю, который двигался
по ровной поверхности дольше и дальше конкурентов.
Глава 6
Робот “Ползун”
Движение любого аппарата по твердой поверхности давно изучает-
ся человечеством. Перемещение конструкций на колесах изобретено на
заре развития цивилизаций. Колесо дало человечеству толчок в разви-
тии и совершенстве, а вот альтернативные виды движения не поддержи-
вались, не изучались и не развивались. Зачем это нужно? Мы знаем, что
по ровной поверхности очень хорошо едет машина или трактор, но если
местность сыпучая или имеет уступы, выемки, высокие холмы, горы,
кратеры, тогда на колесах проехать невозможно. Для такой местности
обычное представление о движении по поверхности не подходит, и то-
гда становится актуальным вопрос альтернативных видов перемещения.
Изучение таких видов движения может принести неоценимую поль-
зу человечеству. Наша природа — живое доказательство и пример по-
строения моделей, которые перемещаются любыми способами, отли-
чающимися от перемещения на колесах. Колеса применяются во многих
моделях, однако перемещение на конечностях позволяет конструкции
двигаться в любую сторону, а также маневрировать вверх и вниз.
Для того чтобы лучше понять, о чем идет речь, рассмотрим элемен-
тарное движение колеса. На рис. 6.\а представлена физическая модель
траектории движения отдельной точки на колесе. Колесо катится по
ровной поверхности. Поэтапное прохождение пути точки колеса с 1 по 4
позицию и с 5 по 8 позицию дает наглядное представление движения.
Точка колеса описывает дугу.
Если же вместо колеса взять связанный шарнир (рис. 6.16), то мы
получим другую физическую модель движения объекта. Точка шарнира
также описывает дугу. Фактически, обе рассмотренные траектории на-
поминают друг друга, но вид перемещения объекта кардинально отли-
чается. Передняя часть шарнира вращается, а задняя — поступательно
перемещается вверх и вперед, а потом — вниз и вперед. Тем самым зад-
няя часть шарнира передвигается. Назовем такой вид движения “пол-
заньем”. Именно ползанье и будет реализовано в роботе, рассматривае-
мом в данной главе.
Однако движение должно подчинятся определенным законам физи-
ки, философии, заложенной в логике поведения робота. Основная зада-
112
Глава 6
ча для нашего примера — сделать робота максимально “живым”, близ-
ким к природе. Пусть он будет примитивным и ограниченным, но он
должен быть “дружелюбным” и “жизнерадостным”.
б
Для радиолюбителей достаточно сложно создавать конструкции,
которые соответствуют той или иной философии. Подобная задача ре-
шена в США при построении робота, “охотящегося за светом” [4]. Его
также повторили радиолюбители Канады (рис. 6.2) (подробности — на
сайте www. solarbotics . com).
Эта ползающая конструкция реагирует на свет. Ее конечности на-
поминают лягушку или черепаху. Вращаясь вокруг оси, они повторяют
движение, представленное на рис. 6.1 б. Если проанализировать их тра-
екторию, то мы получим простое черепашье ползание.
Впрочем, “охотник за светом” может реализовать и другой вид пе-
редвижения, например — во время вибрации (рис. 6.3). [5] Автор пред-
лагает свою ползающую модель на одном микроконтроллере ATtiny 15
[8] (рис. 6.4).
Робот “Ползун”
113
Рис. 6.2. Робот, “охотящийся за светом”, созданный радиолюбителями Канады
Рис. 6.3. Робот, передвигающийся за счет вибрации
114
Глава 6
Рис. 6.4. Робот “Ползун”, созданный автором книги
Конкретная задача робота “Ползун” исходит из представленной фи-
лософии. Простая модель использует для ориентации два фотодатчика.
Робот перемещается только по прямой. Как только фотодиоды робота
освещены источником света (например, фонариком или уличным све-
том из окна), робот начинает движение в сторону большей освещенно-
сти. Постоянное движение в одну сторону неинтересно для зрителей
и может привести к быстрому разряду батарей робота, поэтому, если
в течении 0,3 с источник света не меняет направления или яркости, ро-
бот останавливается. В этом состоянии он ожидает нового всплеска ос-
вещенности. Тем самым робот “сохраняет силы”, т.е. предотвращает
быстрый разряд батарей. Таким образом, имея фонарик, можно посто-
янно освещать фотодатчики и манить робота за собой.
Дизайн
Дизайн робота “Ползун” очень прост (рис. 6.5). Корпус 3 робота по-
заимствован от верхней крышки корпуса компьютерной мыши. Он об-
текаем и позволяет скользить по любой поверхности. Для реакции на
свет в передней части робота установлены фотодиоды 2. Как только они
обнаружили источник света, начинается вращаться привод ног 1. При-
Робот “Ползун”
115
вод передает движение на ногу робота 4, а она, упираясь в стопу 5, за-
ставляет передвигаться ползком корпус.
Рис. 6.5. Дизайн робота “Ползун”
Движение привода ног 1 передается от двигателя 7 через пассик 6.
Двигатель 7 закреплен на раме 8, на которой установлена плата управ-
ления 9. Двигатель привода и плата управления питаются от аккумуля-
торной батареи 10. Для улучшения скольжения корпуса по поверхности
в задней части конструкции установлены колеса 11.
Дизайн корпуса робота напоминает корабль. Если поверхность мес-
тности, по которой двигается робот, сыпучая, в виде жидкой грязи и т.д.,
то ‘‘корабль” сможет преодолеть такое препятствие, благодаря плоской
и обтекаемой конструкции.
Структурная схема
В основе устройства управления роботом (рис. 6.6) заложен микро-
контроллер ATtiny 15, который оснащен Flash-памятью на 1 Кбайт, па-
мятью EEPROM на 64 байта, шестью линиями ввода-вывода, встроен-
ным RC-генератором, АЦП, аналоговым компаратором и двумя тайме-
рами/счетчиками. Кроме того, в микроконтроллере реализованы вход-
ные элементы усиления, мультиплексор АЦП, ядро микроконтроллера
и порты ввода-вывода. В остальном схема содержит простые элементы:
два фотодатчика (левый и правый), два транзистора в выходном каскаде
и два двигателя (левый и правый) для приведения робота в движение.
116
Глава 6
Робот может двигаться только прямо, разворачиваться на месте или
маневрировать. Движение назад в данной модели не предусмотрено.
Скорость движения регулируется подстроечным резистором. Для эф-
фективного использования энергии батарей питания и двигателей вы-
бран режим широтно-импульсного управления.
Принципиальная схема
Принципиальная схема “Ползуна” (рис. 6.7) содержит два контакта
JP1, JP2 для подключения аккумулятора 3,6 В 1000 мАч. Контакты JP3,
JP4 служат для подключения левого, а контакты JP5, JP6 — правого
двигателя робота. Питание на схему подается через выключатель S1.
При включении питания засвечивается светодиод LED3. Для огра-
ничения тока LED3 присутствует резистор R8, а для исключения помех
по питанию служат конденсаторы Cl, С5. Цепочка R2, С2 выполняет
сброс микроконтроллера в исходное состояние при включении питания.
Фоторезисторы Rl 1, R12 необходимы для приема засветки от источника
света.
Данные об уровне освещенности, снятые с R3, R10, поступают на
вход АЦП (выводы 7 и 3 микроконтроллера). Микроконтроллер преоб-
разовывает аналоговый сигнал уровня освещенности в цифровой, после
чего эти данные обрабатываются путем логических сравнений, и фор-
мируется ШИМ-сигнал на левый двигатель робота через порт РВО или
правый двигатель через порт РВ1.
Робот “Ползун’
117
Рис. 6.7. Принципиальная схема робота “Ползун”
118
Глава 6
Для усиления тока с выводов микроконтроллера предусмотрен вы-
ходной каскад на транзисторах QI, Q2. Сила тока через двигатели дос-
тигает 150 мА, поэтому при коэффициенте усиления 2N2222 h2ie=50 не-
обходим ток базы 3 мА. Эта величина для выходного каскада порта
микроконтроллера вполне приемлема [3].
Для работы двигателей можно подавать питание постоянным током,
или организовать широтно-импульсное управление. Если подать посто-
янный ток, то двигатель достигнет максимальных оборотов и будет ра-
ботать на максимуме возможностей. При этом потребление тока от ис-
точника питания также будет максимальным. Однако для поступатель-
ного движения робота необходимы минимальные обороты двигателя
с максимальным моментом вращения и максимальным КПД. Для опти-
мального управления необходимо регулировать обороты вала двигателя.
Все это можно осуществить с помощью широтно-импульсного управле-
ния.
Любой двигатель имеет в своем составе обмотки возбуждения и ра-
бочие обмотки, что приводит к возникновению ЭДС самоиндукции при
резком отключении питания. Для гашения этих всплесков напряжения
ЭДС самоиндукции в схеме предусмотрены демпфирующие цепочки
СЗ, Ledl, R4 для левого двигателя и С4, Led2, R7 для правого двигателя.
Кроме функции гашения паразитных токов, они генерируют световые
импульсы, что свидетельствует о работоспособности выходных каска-
дов схемы.
Для управления оборотами двигателя служит резистор R1. Уровень
сигнала с него поступает на АЦП микроконтроллера, где преобразуется
во временную последовательность между импульсами.
Алгоритм работы
Блок схема алгоритма работы “Ползуна” состоит из двух частей.
Рассмотрим первую (основную) часть программы, представленную на
рис. 6.8. Блок схема начинается с установки портов ввода-вывода в ис-
ходное состояние. Далее реализована пауза в 0,3 с, чтобы батарея робо-
та не разрядилась очень быстро. На каждом шаге выполнения програм-
мы настраиваются АЦП1 и АЦП2, после чего с них считываются дан-
ные для левого и правого фотодатчиков. Затем эти данные сопоставля-
ются друг с другом и с уровнем малой освещенности в пределах 0..150
единиц отсчетов АЦП. Логическое решение двигаться влево или вправо
задается константой и. По завершению процесса ожидания и сравнения
данных программа переходит к подаче импульсов в порт РВО или РВ1.
Эти действия реализованы в другой части алгоритма (рис. 6.9).
Зобот “Ползун”
119
Рис. 6.8. Основная часть алгоритма управления роботом “Ползун’
120
Глава 6
а
Рис. 6.9. Алгоритм выдачи импульсов в порты РВО и РВ1
Для регулировки оборотов двигателя необходима переменная, ко-
торая изменяется оперативно человеком. Уровень напряжения изменя-
ется вручную на R1. Эти данные и являются необходимой переменной.
АЦПЗ снимает информацию об уровне напряжения с R1, который зада-
ет временную задержку между импульсами. Задержка формируется про-
граммным путем.
Робот “Ползун”
121
В этой части программы обнуляются порты ввода-вывода, после че-
го отсчитывается временная задержка. Далее выбирается порт ввода-вы-
вода, в который выводится лог. 1. Формируется временная задержка.
Тем самым микроконтроллер генерирует полный период одного им-
пульса. Для полного оборота отсчитывается сто импульсов. Как только
выдано сто импульсов, программа переходит к основной части, пока-
занной на рис. 6.8.
Программа
Прежде чем записать рабочую программу, необходимо протестиро-
вать работоспособность схемы и двигателей. Для этого служит про-
грамма testl, показанная в листингах 6.1 и 6.2. Эта программа форми-
рует поочередно импульсы на выводах РВО, РВ1 микроконтроллера.
Частота импульсов зависит от напряжения на переменном резисторе R1.
При максимальном напряжении на входе АЦП период импульсов может
достигнуть 10 с. При этом двигатель начнет работать рывками, посколь-
ку длина импульса равна длине паузы.
На двигатель будет поступать напряжение питания несколько се-
кунд, потом это напряжение отключится на несколько секунд. Такой
режим питания двигателя неприемлем. При нулевом напряжении на
входе АЦП частота импульсов достигнет 140 Гц. На оба двигателя им-
пульсы подаются в противофазе. Тем самым, при включении питания
можно протестировать работоспособность обоих двигателей и настро-
ить оптимальную частоту следования импульсов.
Листинг 6Л * Программа testl
.include "D:\Program Files\Atmel\AVR Studio\Appnotes\tnl5def.inc"
/Автор: Кравченко А. В.
;Дата: 8.03.2003
/Версия: 1.1.1
/Имя файла: testl.asm
/Программа тестирования вращения
/шарниров робота ползуна
/Микроконтроллер: AVR tinyl5.
/Тактовая частота: 1,6 МГц
/Питание: нестабилизированное 3,6 В
def tmp = rl 6
def tmp2 = rl7
def tmp3 = rl8
def tempo = rl9
def tmp4 = r22
def tmp5 = r23
122
Глава 6
Листинг 6.1. продолжение
. def . def . def . def . def . def . def tmp6 par Y X M prgi prg2 = r27 = r20 = r29 = r21 = r2 6 = r24 = r25
. cseg . org 0 rjmp nop nop nop nop nop RESET /rjmp /rjmp /rjmp /rjmp /rjmp EXT_INT0 - прерывание EXT_PIN - прерывание TIME_OVFO - прерывание EE_RDY - прерывание ANA_COMP - прерывание не не от от не используется используется таймера таймера используется
.org 20 /настройка порта В RESET: nop clr tmp out DDRB, out PORTB, clr tmp Idi tmp, $ out DDRB, tmp tmp :03 tmp /обнулить порт В /РВО,РВ1-выходы
/Начало программы /сброс всех значений clr tmp 6 clr tmp4 clr tmp5 clr ' prgl clr prg2 clr par cbi PORTB, 1 cbi PORTB, 0 /сброс порта /сброс порта
nStart Idi out nop rcall nop nop Idi nop tmp5, PORTB, adcnl tmp5, $00 tmp 5 $02 /сброс порта 0/1 /чтение АЦП1
Робот “Ползун1
123
Листинг 6/L Продолжение
out PORTB, tmp 5 ;установка порта 1
пор
rcall zaderl /время пропорционально АЦП1
пор
Idi tmp 5, $00
out PORTB, tmp 5 /сброс порта 0/1
пор
rcall zaderl /время пропорционально АЦП1
пор
Idi tmp5, $01
out PORTB, tmp 5 /установка порта 0
пор
rcall zaderl /время пропорционально АЦП1
пор
Idi tmp 5, $00
out PORTB, tmp 5 /сброс порта 0/1
nop
rcall zaderl /время пропорционально АЦП1
nop
nop
rjmp nStart
/Настройка АЦП1
adcnl: пор
cli
пор
clr tmp
awe: пор
cpi tmp, $04
brsh ass
clr tempo
Idi tempo, $A1 /внутренний источник, вход ADC1
out ADMUX, tempo /коммутация входов АЦП
clr tmp2
clr tmp3
clr prg2
Idi prg2, $C4 /одиночное, запуск, 1/16
out ADCSR, prg2 /запуск АЦП на преобразование
/Сохранение данных АЦП1
in tmp2, ADCL
in tmp3, ADCH
mov r2, tmp2
mov r3, tmp3
mov r4, r2
mov r5, r3
mov r6, r4
124
Глава 6
Листинг 6Л. Продолжение
mov г 7 r r5
inc rjmp tmp awe
/среднее арифметическое действие
ass: nop clr clc add adc add adc add adc clc Isr ror Isr r8 tmp2, r2 r9, r8 tmp2, r4 r 9, r8 tmp2, r6 r 9, r8 r9 tmp2 r9
ror clr clc add adc add adc add adc clc Isr ror Isr ror nop ret tmp2 r9 tmp3, r3 r 9, r8 tmp3, r5 r9, r8 tmp3, r7 r9, r8 r9 tmp3 r9 tmp3
/Подпрограмма задержки включения
zaderl: nop
wdr clr clr clr Idi - cpi brne Idi add nop tmp M Y Y, $0A tmp3, $00 goo M, $01 M, tmp3
Робот “Ползун1
125
Листинг 6.1. Окончание
mov tmp3, M
goo: nop
mov M, tmp3
dm: nop
cpi tmp2, $00
brne goq
Idi X, $01
add X, tmp2
nop
goq: nop
mov X, tmp2
dv: nop
wdr
nop
dx: nop
nop
eee: nop
inc tmp
cln
cpi tmp, $3A
brio eee
nop
clr tmp
nop
cln
dec Y
nop brpl cln dx
dec X
brpl clz dv
dec M
brne dm
ret
.EXIT
Листинг 6.2. НЕХ-файл, соответствующий Программе testl
: 020000020000FC
:0С00000013С00000000000000000000021
:100028000000002707ВВ08ВВ002703Е007ВВВВ276Е
:1000380066277727882799274427С198С098000002
:10004800C198000028D000000000C19A000059D0D3
:100058000000C198000055D000O0C09A000051D09F
:100068000000C09800004DD0000043950000A894FF
126
Глава 6
Листинг 6.2. Окончание
:1000780044364CF40000A8944A3044F000000000D4
:100088000000000005С00000442700000000000038
:1000980000000000D4CF0000F89400000027000002
:1000A800043090F4332731EA37B9112722279927EA
:1000В80094ЕС96В914В125В1212Е322Е422С532С32
:1000C800642C752C0395EBCF000088248894120DBE
:1000D800981C140D981C160D981C889496941795C6
:1000Е8009694179599248894230D981C250D981C8F
:1000F800270D981C88949694279596942795000028
:1001080008950000A8950027AA27DD27DAE0203007
:1001180021F4A1E0A20F00002A2F0000A22F000066
:10012800103019F451E0510F00000000512F000069
:10013800A89500000000000000000395A8940A3A62
:10014800D8F3000000270000А894DA95000092F781
:0E015800A8945A9562F79894AA9509F708950D
:00000001FF
Настройку робота лучше производить на подставке, поскольку вра-
щение шарниров может быть слишком быстрым, что приведет к выходу
из строя ступни. Правильное вращение шарнира — медленное, так как
ступня должна перемещаться очень плавно и ложиться плоскостью на
поверхность. Если шарнир будет вращаться быстро, то ступня не успеет
выровняться под силой тяжести и может вывернуться.
После удачного тестирования и исправления ошибок, в микрокон-
троллер записывается рабочая программа (листинги 6.3 и 6.4).
Листинг 6.3. Программа управления роботом “Ползун”
.include "D:\Program Files\Atmel\AVR Studio\Appnotes\tnl5def.inc"
/Автор: Кравченко А.В.
/Дата: 8.03.2003
/Версия: 1.1.1
/Имя файла: polzun.asm
/Программа
/робота ползуна
/Микроконтроллер: AVR tinyl5.
/Тактовая частота: 1,6 МГц
/Питание: нестабилизированное 3, 6 В
.def tmp = rl6
.def tmp2 = rl7
.def tmp3 = rl8
.def tempo = rl9
.def par = r20
.def Y = r29
.def X = r21
Робот “Ползун’
127
Листинг 6.3. Продолжение
def M = r26
def prgl = r24
def prg2 = r25
def dl = r22
def d2 = r23
def SI = r27
def S2 = r30
def U = r2 8
. cseg
. org О
rjmp RESET
nop ;rjmp EXT_INT0 - прерывание не используется
nop ;rjmp EXT_PIN - прерывание не используется
nop ;rjmp TIME_OVF0 - прерывание от таймера
nop ;rjmp EE_RDY - прерывание от таймера
nop ;rjmp ANA_COMP - прерывание не используется
.org 20
/настройка порта В
RESET: nop
clr tmp
out DDRB, tmp
out PORTB, tmp ;обнулить порт В
clr tmp
Idi tmp, $03 ;РВО,РВ1-выходы
out DDRB, tmp
/Начало программы
/сброс всех значений
clr prgl
clr prg2
clr par
cbi PORTB, 1 ;сброс порта РВ1
cbi PORTB, 0 ;сброс порта РВО
nStart: nop
/задаем время ожидания 0,3 сек
Idi tmp3, $0A
Idi tmp2, $0A
rcall zaderl ;время пропорционально АЦП1
/считываем данные с регулятора скорости
clr tempo
Idi tempo, $А1 ;внутренний источник, вход ADC1
rcall adcnl /чтение АЦП1
128
Глава 6
Листинг 6.3. Продолжение
пор
mov rl4, tmp3 /старший разряд скорости
mov г 13, tmp2 /младший разряд скорости
пор
/считываем данные с фотодатчика - левый
clr tempo
Idi tempo, $A2 /внутренний источник, rcall adcnl /чтение АЦП1 nop mov rlO, tmp3 mov r9, tmp2 считываем данные с фотодатчика - правый clr tempo вход ADC2
Idi rcall tempo, $A3 adcnl /внутренний источник, /чтение АЦП1 вход ADC3
пор
mov г 12, tmp3
mov rll, tmp2
/вычитание F=D-S
пор
cln
rcall ar ifm / подпрограмма ариметических действий
пор
/определяем какой фотодатчик засвечен больше /левый или правый
brpl vop
Idi rjmp U, $01 def /правый
vop: nop
Idi U, $00 /левый
def: nop
cln /сброс знака для определения по модулю
/определение минимального уровня
cpi d2, $96 /сравнение с минимумом 150 едениц
brpl food /если положительное, продолжить
nop
rjmp nStart /если отрицательное, в начало
nop food: nop
clr par /сброс цикла в начало
nop sgk: nop
mov tmp3, rl4 /старший разряд скорости
mov tmp2, rl3 /младший разряд скорости
nop
/ход в сторону
Робот “Ползун’
129
Листинг 6.3. Продолжение
clz cpi brne nop rjmp nop U, $01 bmm bnm ;сброс флага нуля
; ход bnm: вправо nop Idi out tmp, $00 PORTB, tmp /сброс порта 0/1
nop rcall adcnl /чтение АЦП1
nop nop Idi out tmp, $02 PORTB, tmp /установка порта 1
nop rcall zaderl /время пропорционально АЦП1
nop Idi out tmp, $00 PORTB, tmp /сброс порта 0/1
nop rcall zaderl /время пропорционально АЦП1
; ход bnm: nop rjmp влево nop Idi out zxc tmp, $00 PORTB, tmp /сброс порта 0/1
nop rcall adcnl /чтение АЦП1
nop nop rcall zaderl /время пропорционально АЦП1
nop Idi out tmp, $01 PORTB, tmp /установка порта 0
nop rcall zaderl /время пропорционально АЦП1
nop Idi out tmp, $00 PORTB, tmp /сброс порта 0/1
nop rcall zaderl /время пропорционально АЦП1
пор ;прямой ход
130
Глава 6
Листинг 6,3* Продолжение
zxc:
cml:
con:
пор
Idi tmp, $00
out PORTB, tmp /сброс порта 0/1
пор rcall adcnl /чтение АЦП1
пор
пор
Idi tmp, $02
out PORTB, tmp /установка порта 1
пор rcall пор zaderl /время пропорционально АЦП1
Idi tmp, $00
out PORTB, tmp /сброс порта 0/1
пор rcall zaderl /время пропорционально АЦП1
пор
Idi tmp, $01
out PORTB, tmp /установка порта 0
пор rcall zaderl /время пропорционально АЦП1
пор
Idi tmp, $00
out PORTB, tmp /сброс порта 0/1
nop rcall zaderl /время пропорционально АЦП1
nop
nop
inc par
nop
cl z /сброс флага нуля
cpi par, $64 /проверка циклов 100
brne cml
rjmp nop con
nop rjmp sgk
nop
nop
nop rjmp nStart
;Подпрограмма вычитания
arifm: пор
/вычитание значения АЦП
sub dl, SI
двух байтного числа
от набранного значения
/Вычитание младшего байта
Робот “Ползун’
131
Листинг 6.3. Продолжение
/проверка на ноль старшего байта
clz
cpi d2, $00
breq loki
clr tmp
rol tmp
sub d2, S2 /Вычитание старшего байта с заемом
sub d2, tmp
loki: nop
ret
/Подпрограмма считывания данных АЦП
/Настройка АЦП1
adcnl: nop
cli
nop
clr tmp
awe: nop
cpi tmp, $04
brsh ass
out ADMUX, tempo /коммутация входов АЦП
clr tmp2
clr tmp3
clr prg2
Idi prg2, $C4 /одиночное, запуск, 1/16
out ADCSR, prg2 /запуск АЦП на преобразование
/Сохранение данных АЦП1
in tmp2, ADCL
in tmp3, ADCH
mov r2, tmp2
mov r3, tmp3
mov r4, r2
mov r5, r3
mov r6, r4
mov r7, r5
inc tmp
rjmp awe
/среднее арифметическое действие
ass: nop
clr r8
clc
add tmp2, r2
adc r9, r8
add tmp2, r4
adc r9, r8
add tmp2, r6
adc r9, r8
132
Глава 6
Листинг 6-3. Продолжение
clc
Isr r9
ГОГ tmp2
1st r9
ГОГ tmp2
clr r9
clc
add tmp3, r3
adc r9, r8
add tmp3, r5
adc r9, r8
add tmp3, r7
adc r9, r8
clc
Isr r9
ror tmp3
Isr r9
ror tmp3
nop
ret
/Подпрограмма задержки включения
zaderl : nop
wdr clr tmp
clr M
clr Y
Idi Y, $0A
cpi tmp3, $00
brne goo
Idi M, $01
add M, tmp3
nop mov tmp3, M
goo: nop
mov M, tmp3
dm: nop
cpi tmp2, $00
brne goq
Idi X, $01
add X, tmp2
goq: nop nop
mov X, tmp2
dv: nop
wdr
обот "Ползун’
133
Листинг 6.3. Окончание
пор
dx: пор пор
еее: пор
inc cln tmp
cpi tmp,
brio пор eee
clr пор cln tmp
dec nop Y
brpl cln dx
dec X
brpl clz dv
dec M
brne ret dm
$ЗА
EXIT
Листинг 6.4, НЕХ-файл для робота “Ползун”
:020000020000FC
:СС00000013С00000000000000000000021
:100028000000002707ВВ08ВВ002703Е007ВВ8827А1
:1000380099274427C198C09800002AE01AE0ABD05D
:10004800332731EA74D00000E22ED12E0000332786
:1000580032EA6DD00000A22E912E332733EA67D002
:100068000000C22EB12EOOOOA89456D0000012F451
:100078O0C1E0O2C0000OCDEO0000A89476391AF47C
:100088000000DACF000000004427000000002E2DF9
:100098001D2D00009894C13019F400000EC0000016
:1000А8000000С198000077D00000C19A000073D00A
:1000B8000000C19800006FD00BC00000C09800007D
:1000C800C09A000068D00000C098000064D000000A
:1OOOD8O00OOOC198OOOOC098OOOO5DDOOOOOC19ADF
:1O0OE8OOOOOO59DOOOOOC198OO0O55DO0O0OCO9AD7
:1000F800000051DOOOOOC09800004DD0000043958A
:1OO108OOOO0O9894443611F4O4COOOQ00OOOBECFEB
:1001180000000000000090CF00006B1B9894703026
:1001280021F00027001F7E1B701B000008950000AF
:10013800F894000000270000043080F437B9112734
134
Глава 6
Листинг 6А Окончание
:100148002227992794ЕС96В914В125В1212Е322Е85
:10015800422C532C642C752C0395EDCF0000882479
:100168008894120D981C140D981C160D981C8894D0
:10017800969417959694179599248894230D981C0E
:10018800250D981C270D981C88949694279596946D
:100198002795000008950000A8950027AA27DD27C5
:1001A800DAE0203021F4A1E0A20F00002A2F00009D
:1001B800A22F0000103019F451E0510F0000000088
:1001C800512F0000A89500000000000000000395D2
:1001D800A8940A3AD8F3000000270000A894DA95FA
:1001E800000092F7A8945A9562F79894AA9509F78F
:0201F800089568
:00000001FF
В начале программы реализована временная задержка для сохране-
ния ресурса аккумулятора. В подпрограмме задержки задается перемен-
ная tmp3, tmp2, которая формирует время задержки 0,3 с. Затем с АЦП
считываются данные о скорости вращения. Для сокращения объема про-
граммы используется одна подпрограмма считывания АЦП. Для пра-
вильной коммутации входа АЦП задается переменная конфигурации
tempo регистра EDMUX. Считанные с фотодатчиков данные АЦП со-
храняются в регистрах г9-г13, а двухбайтное вычитание этих данных
реализовано в подпрограмме arifm. После этого можно определить, ка-
кой из фотодатчиков больше освещен.
Для продолжения программы переменной и присваивается значение
0 (движение влево) и 1 (движение вправо), после чего начинается фор-
мирование импульсов. Для прямого хода робота на оба двигателя пода-
ются одиночные импульсы в противофазе. В зависимости от значения и,
на левый или правый двигатель будет подаваться на один импульс
больше. Всего подается 100 импульсов. Если осветить левый фотодат-
чик, то суммарно левый двигатель получит 100 импульсов, а правый —
200. При этом формируется траектория движения робота по дуге и в ко-
нечном итоге он будет двигаться влево. По завершении отсчета импуль-
сов программа переходит в начало.
Монтажная плата
Детали размещены на макетнице размерами 45х45 мм:
• QI, Q2 — распространенные транзисторы 2N2222 1с = 800 мА.
Uce = 40 В, h2ie= 50 (можно также использовать распространенные
КТ315Г);
• микроконтроллер ATtiny 15L-1PI в DlP-корпусе;
• панелька для микроконтроллера на восемь выводов;
Робот “Ползун”
135
• фоторезисторы А906012 на 16-33 кОм;
• светодиоды UL-308H183BC_133 диаметром 3 мм;
• аккумуляторная батарея от переносного радиотелефона Panasonic Р-
Р5Н КХ-А36-В, 3,6 V, 1000 mAh (рис. 6.10);
• двигатели от проигрывателей компакт-дисков;
• шариковая компьютерная мышь;
• подстроечные резисторы на 47 кОм;
• выключатель питания (1тах = 500 мА) импортного производства;
• остальные резисторы — МЛТ-125;
• пассики диаметром 80 мм — позаимствованы от нерабочих плее-
ров;
• для ограничения отклонения пассика на шарнир надеваются с двух
сторон резиновые кольца диаметром 40 мм. Шарнир позаимствован
из корпуса детской игрушки “Киндер-Сюрприз”.
Рис. 6.10. Аккумуляторная батарея от радиотелефона Panasonic Р-Р511 КХ-А36-В
Монтаж всех элементов управления выполняется на монтажной
плате размерами 45><45 мм. Автор при разработке робота использовал
готовую макетницу и все элементы припаял навесным монтажом, одна-
ко можно изготовить плату из двухстороннего текстолита (рис. 6. II).
Если выполнить соединения проводами, то монтажную плату можно
выполнить с односторонней разводкой дорожек.
Перед установкой элементов монтажа необходимо просверлить от-
верстия для крепежа диаметром 3,5 мм. После установки всех элементов
136
Глава 6
можно припаять провода от двигателей к контактным площадкам, а так-
же присоединить аккумуляторную батарею. Фотоэлементы паяются на
максимально допустимой высоте от монтажной платы. При этом выво-
ды фотоэлементов изолируются термоусадочной трубкой, что придает
устойчивость деталям.
Настройка начинается с установки напряжения на выводах микро-
контроллера. При этом микроконтроллер на рабочую плату не устанав-
ливается. Подключается заряженный аккумулятор, и подается напряже-
ние на плату управления. В этом состоянии двигатели не работают. Ре-
Робот “Ползун”
137
зистор R1 регулируется так, чтобы напряжение на выводе 7 микрокон-
троллера составляло около 2,7 В. Процесс настройки показан в видео-
файле Ползун - проверка.mov, который находится на прилагаемом
к книге DVD-диске в лапке Видео (просмотреть этот файл можно в про-
грамме QuickTime).
Резисторы R3, R10 регулируют так, чтобы напряжение на выводах
2 и 3 микроконтроллера совпадало. При этом фоторезисторы Rll, R12
должны быть закрыты.
Как только все элементы отрегулированы, на обесточенную плату
устанавливается микроконтроллер с тестовой программой, представ-
ленной выше в листингах 6.1 и 6.2. При подаче питания R1 настраивает-
ся таким образом, чтобы обороты двигателя были минимальными. При
этом двигатели включаются поочередно. После настройки с тестовой
программой устанавливается микроконтроллер с рабочей программой,
представленной выше в листингах 6.3 и 6.4.
Конструкция
Конструкция робота “Ползун” выполнена из корпуса шариковой
компьютерной мыши. Для этого он полностью разбирается и все его со-
ержимое демонтируется. Для сборки модели необходимо подготовить
отдельные узлы (рис. 6.12).
Рис. 6.12. Узлы для сборки робота “Ползун”
138
Глава 6
Основанием корпуса служит верхняя часть мыши рис 6.13.
Рис. 6.13. Основание корпуса изготовлено из верхней части мыши
В крышке мыши вырезается часть крепления. Эта часть в виде П-
образной детали используется для подпорки оси вращения конечностей.
От направляющей головки привода компакт-дисков позаимствована де-
таль крепления и скольжения головки. Из нее изготавливается держа-
тель оси, после чего на подпорке закрепляется узел держателя оси. Как-
только все закреплено, устанавливается ось привода.
Оси и конечности изготовлены из спиц старого зонта. Шарниры ус-
тановлены на обе стороны оси. В шарнир под углом продевается спица
и приклеивается в местах прохождения шарнира. К головке спицы кре-
пится стопа. Стопа изготовлена в виде рамки размерами 34><34 мм из
медной проволоки диаметром 1,5 мм. Для большей устойчивости к рам-
ке стопы припаяна медная фольга.
Для задних колес робота понадобятся ролики от фотодатчиков мы-
ши. Ролики вынимаются из платы и соединяются с помощью соломинки
для напитков. Для удержания полученной задней оси изготавливается
задняя опора с втулками (см. рис. 6.13) из медной проволоки диаметром
3 мм. Задняя ось продевается сквозь втулки опоры, а колеса приклеива-
ются к оси. Опора клеится эпоксидным клеем к задней части корпуса.
Рядом клеятся две шпильки с резьбой М3. На основании через резино-
Робот “Ползун”
139
вые прокладки устанавливается аккумулятор, а сверху крепится рама
с двигателями (рис. 6.14).
Рис. 6.14. Сборка робота “Ползун”
Двигатели закреплены на металлическом основании, изготовленном
из корпуса привода компакт-дисков (рис. 6.I5).
Рис. 6.15. Крепление двигателей
140
Глава 6
Устанавливается рама с двигателями. Передняя часть рамы крепит-
ся к подпорке, задняя — на две шпильки. На раму устанавливается вна-
чале изолирующая подложка, а затем — плата управления, которая под-
ключается к аккумулятору и двигателям. На шпильки накручиваются
гайки для удержания задней части рамы и платы управления. Фотодат-
чики платы управления направляются в переднюю часть конструкции.
Эксплуатация
Перед эксплуатацией обязательно необходимо зарядить аккумуля-
тор. После включения питания засвечивается светодиод питания. Робот
находится в режиме ожидания. Как только обнаружен источник света
(например, от фонарика), робот начинает движение в этом направлении,
но вскоре останавливается. Для возобновления движения робота необ-
ходимо опять осветить его. Так робот “Ползун” “охотится за светом”.
Глава 7
Робот “Sumo bot”
Роботизированная техника стремительно развивается. Иностранные
разработчики, начиная с прошлого столетия, активно конструируют не-
сложных роботов. В Японии в 1998 году появился в продаже конструк-
тор по сборке робота “Sumo bot”. Японская версия оказалась очень
сложной для воспроизведения, поэтому в 2001 году появился простой
канадский аналог, рассчитанный на изготовление в домашних условиях.
В 2001 году в США были организованы клубы любителей модели-
рования роботов. Рассмотренный в этой главе упрощенный вариант ро-
бота “Sumo bot” повторяет основные принципы известного японского
спортивного состязания. Автор предлагает к рассмотрению собствен-
ную самодельную конструкцию, выполненную из распространенных,
доступных деталей.
Прежде всего, необходимо рассмотреть основные принципы игры
“Sumo bot”. На ровном черном поле (изготовленном из картона или дру-
гого твердого материала) участвуют два “игрока” (рис. 7.1).
Рис. 7.1. Два “игрока” в соревнованиях “Sumo bot”
142
Глава 7
Соревнование проходит в три раунда. Один раунд длится-три мину-
ты. В соревновании должен участвовать судья, который назначает вы-
игрышные очки. Поле для соревнования составляет в диаметре не более
77 см. На краях черного поля укладывается белая полоса ограничения
движения робота (рис. 7.2) (ширина ленты составляет 1,5-2,5 см).
Рис. 7.2. Поле для игры ’’Sumo bot"
Двух роботов устанавливают друг, против друга на отмеченных по-
лосах в центре поля. При включении “Sumo bot” начинает двигаться по
истечении пяти секунд. Робот двигается по полю, но не заступает за его
пределы. При столкновении с другим роботом применяется сила или
прием разворота на месте для вытеснения соперника за пределы поля.
Как только “игрок” оказывается за ограничителем поля, он проиграл.
Игра начинается с установки робота в любой точке поля. По окон-
чании трех раундов по количеству очков определяется победитель.
Робот “Sumo bot” в канадском исполнении (рис. 7.3) должен быть
оснащен передней панелью в виде щита (или ковша), двумя двигателя-
ми и фотодатчиками по периметру конструкции. Фотодатчики фикси-
руют ограничитель поля и не позволяют роботу заезжать за него. Детали
конструкции робота не должны выступать за пределы основания. Вес
Робот “Sumo bot”
143
конструкции — не более 500 г с батареями питания. Габариты — не бо-
лее 120x120x100 мм (в оригинальной конструкции — 100x100x100).
Рис. 7.3. Робот “Sumo bot” в канадском исполнении
Робот “Sumo bot” не вооружен. Его колеса имеют резиновое, невяз-
кое, нелипкое покрытие. Для обнаружения ограничителя поля в основа-
нии робота установлены излучатели инфракрасных лучей и инфракрас-
ные (ИК) датчики. Для обнаружения соперника в верху конструкции так
же присутствуют ИК-датчики. Кроме того, конструкция снабжена све-
тодиодами для вызова противника к бою.
Более подробно с игрой “Sumo bot” можно ознакомится на сайте
www. arricrobotics . com, где перечислены американские клубы люби-
телей робототехники.
Дизайн
Дизайн робота “Sumo bot” позаимствован у иностранных моделей
(рис. 7.4) с небольшим добавлением некоторых функций. Отличие зак-
лючается в расположении двигателей и платы управления, а также —
в использовании навесной конструкции щита (ковша), которая позволя-
ет смягчать удары и распознавать прижатие соперника. В оригинальной
конструкции двигатели находятся внутри редукторов, повторяя букву Н.
В представленной конструкции двигатели снаружи редукторов, повто-
ряя букву Т. Переднее колесо в иностранных версиях робота имеет
форму шарика, закрепленного по бокам двумя щитками, или же “Sumo
bot” опирается на скользящий ковш. В предлагаемой конструкции автор
использовал прижимной ролик кассетного магнитофона.
144
Глава 7
Рис. 7.4. Иностранные модели “Sumo bot”
Для упрощения задачи моделирования автор в качестве основания
конструкции использовал оптический диск. Этот выбор обусловлен ог-
раничениями по диаметру конструкции при столкновении и габаритами
робота. Оптический диск недостаточно надежен для подобных моделей,
поэтому автор рекомендует склеивать два или более диска, армируя их
внутри металлической сеткой или фольгой. Тогда основание “Sumo bot"
будет более крепким и гибким, а главное — иметь малый вес. По усло-
виям игры основание должно быть металлическим. Если диск армиро-
вать металлом, то условие будет выполнено. Кроме того, основание
можно дополнить несущей рамой, что усилит конструкцию.
Общее устройство робота “Sumo bot” показано на рис. 7.5. Основа
ние 1 несет все элементы конструкции. К основанию 1 крепятся сле-
дующие элементы: плата управления 2, две стойки 3, удерживающи
щит 5 с помощью уголков 7. От платы управления 2 в сторону против-
ника направлены фотодатчики 4 и светодиоды с трубчатыми диффузо
рами 6. Для сброса программы в исходное состояние на плате управле-
ния 2 установлена кнопка сброса 8. Для регулировки параметров фото
датчиков установлены подстроечные резисторы 9. Привод конструкции
осуществляется с помощью двух двигателей 10, двух редукторов 13, со
единенных вместе, и колес 14. Питание схемы осуществляется от блок
питания 11. Выключается питание тумблером 13. Обнаружение грани
поля возложено на фотосенсоры 15, установленные по периметру кон
струкции. Два фотосенсора — спереди слева и справа основания 1. Дв
фотосенсора — сзади слева и справа.
Робот “Sumo bot”
145
Рис. 7.5. Устройство робота “Sumo bot”
Структурная схема
В основе схемы робота “Sumo bot” (рис. 7.6) заложен микрокон-
троллер ATMEGA8-16PU фирмы Atmel (в оригинальной конструкции
существует две версии: на микроконтроллере Microchip 16F877A и At-
mel ATMEGA8L), который оснащен Flash-памятью программ объемом
8 Кбайт, памятью EEPROM объемом 512 байт, памятью SRAM объемом
1 Кбайт. Использует 130 команд, 23 линии ввода-вывода, встроенный
RC-генератор, а также — 10-разрядный, шестиканальный АЦП, анало-
говый компаратор, три таймера/счетчика, один USART, один интерфейс
SP1, 16 внутренних и два внешних источника прерываний. Тактовая час-
тота — до 16 МГц, напряжение питания — 4,5..5,5 В. Напряжение пита-
ния должно находится в пределах 5±0,5 В, что требует использования
хороших аккумуляторных батарей.
Робот “Sumo bot” состоит из инфракрасных датчиков Ir 1- 1г4, мик-
роконтроллера ATMEGA8 и драйверов двигателей. Для правильной ра-
боты Ir 1, 1г2 необходим инфракрасный (ИК) свет, модулированный час-
тотой 38 кГц. Модуляция необходима для того, чтобы отличить фоновое
излучение ИК лучей от излучения соперника.
146
Глава 7
Рис. 7.6. Структурная схема робота “Sumo bot”
Светодиоды излучают ИК лучи во всех направлениях. Отражаясь от
соперника они попадают на ИК-детекторы lr 1, 1г2, в которых использо-
вана микросхема PNA4601 со встроенным ИК-детектором, схемой уси-
лителя, демодулятором, интегратором и компаратором с выходом ключа
[10]. Устройство PNA4601 принимает модулированное ИК излучение
с длиной волны 950 нм. При этом ИК-детектор PNA4601 имеет диа-
грамму направленности детектирования сигнала и воспринимает ИК из-
лучение в определенном направлении. По этой причине lr 1 и 1г2 немно-
го повернуты (на 3.. 10°) относительно плоскости платы, расположенной
перпендикулярно движению робота.
Для определения границ игрового поля по нижним краям конструк-
ции установлены спаренные ИК датчики 1гЗ, 1г4 QRD1114 [11J. В датчи-
ке вмонтирован светодиод и фототранзистор. При наличии источника
света и приемника обязательно определяется фокус наилучшего приема
сигнала. Фокус датчика QRD1114 не определен и находится в диапазо-
не от 10 до 80 мм (температура 5..100°С).
Фототранзистор и светодиод имеют фильтр ИК излучения (длина
волны 940 нм). Фотодатчик встроен в компактный корпус с длинными
выводами (12 мм). Это позволяет вывести его как можно ближе к по-
Робот “Sumo bot”
147
верхности от места монтажа. Данные с фотодатчиков поступают в порт
С микроконтроллера.
Как только данные об окружающем пространстве попали в микро-
контроллер, его программа путем логических функций выбирает на-
правление движения. В порту D микроконтроллера устанавливается код
управления драйверами двигателей Dl, D2. В качестве драйверов вы-
брана микросхема 1Ы642 (два корпуса), которая хорошо описана в ли-
тературе [12], но можно использовать и один корпус микросхемы L293
(в микросхеме встроены два драйвера), как это сделано в оригинальной
конструкции. Назначение драйверов: коммутировать ток в прямом и об-
ратном направлении протекания через двигатели Dl, D2. Коммутация
тока в обоих направлениях дает возможность роботу разворачиваться на
месте, ехать вперед, сдавать назад или маневрировать.
Принципиальная схема
Принципиальную схему робота “Sumo bot” (рис. 7.7) начнем рас-
сматривать с источника питания. Он состоит из пяти элементов типа АА
по 1,5 В и разбит на два блока, расположенных друг над другом. Для
включения питания предусмотрен выключатель S1. Нестабилизирован-
ное напряжение 7,5 В подается непосредственно на драйверы двигате-
лей IC4, IC5. Стабилизированное напряжение после стабилизатора IC2
подается на остальные элементы схемы. На вывод питания АЦП микро-
контроллера IC1 (AVCC) питание подается через проходной фильтр L1,
С17, С19, чтобы исключить влияние генераторов на АЦП [8].
Для синхронизации микроконтроллера в схеме предусмотрен квар-
цевый резонатор Q1 на 8 МГц. Для начала состязания необходимо на-
жать кнопку S3 “RESET”. Программа начинается с длинной паузы дли-
тельностью 5 с. За это время IC3 генерирует прямоугольные импульсы
(меандр) для ИК светодиодов LED1, LED2. Для исключения влияния на
фотодатчики светового фона генерируется сигнал частотой 38 кГц для
модуляции ИК излучения. Соответственно фотодатчики PHI, РН2 (PNA
4601) имеют фотодетектор ИК излучения, усилитель сигнала, полосовой
фильтр на 38 кГц, компаратор и ключ на выходе. Таким образом, ис-
ключается влияние света на фотоприемник.
При детектировании ИК излучения и обнаружении отраженных ИК
лучей, ключи фотодетекторов PHI, РН2 включаются, а значит включа-
ются и светодиоды LED3, LED4. Робот показывает светодиодами, что
соперник обнаружен. Соперник может быть обнаружен на расстоянии
до 8 м, поэтому вероятность обнаружения соперника в пределах игрово-
го поля составляет 90%.
148
Глава 7
Рис. 7.7. Принципиальная схема робота “Sumo bot’
Робот “Sumo bot”
149
Данные с фотодетекторов поступают в микроконтроллер IC1. По
истечении 5 с робот начинает двигаться в том направлении, где обнару-
жен соперник. При столкновении срабатывает микровыключатель S2,
микроконтроллер переходит на логические шаги программы, шаблон-
ные решения. Через каждые 0,01 с сканируются фотосенсоры PHS1-4.
Если робот заступил за черную границу, то обязательно выполняется
шаблон движения в противоположном направлении.
Двигателями микроконтроллер управляет через драйверы IC4, 1С5.
Внутри драйвера встроен логический дешифратор управления и мосто-
вая схема ключей на выходе микросхемы. Поступившая команда от
микроконтроллера преобразуется в комбинацию логических сигналов,
которые открывают ключи моста. Через ключи моста и двигатель про-
текает ток, двигатель вращается в заданном направлении.
Для оперативного перепрограммирования микроконтроллера в схе-
ме предусмотрен разъем IDC10 SV1 для соединения с программатором
STK200. Вся схема собрана на одной плате, за исключением двигателей
и двух фотосенсоров, расположенных в задней части конструкции.
Алгоритм работы
Для функционирования робота необходимы шаблонные решения
с неявными блоками состояния. Совокупность элементов механических
узлов, датчиков, электронных деталей, программных решений — это
неявный блок состояния. Использование блока программы и ИК датчи-
ков для определения границы поля в данной модели — неявный блок
состояния. В роботе также присутствует блок программы и ИК датчик
для определения местонахождения противника. Это — еще один неяв-
ный блок состояния. Если бы в роботе была видеокамера, то мы бы по-
лучили еще один неявный блок состояния. Таким образом, разбивая от-
дельные узлы датчиков (выполненные из одних и тех же деталей), мож-
но быстро составить отдельно блок схемы программ и, исходя из общей
концепции (агрессивная атака, пассивная защита, танец, разворот на
месте), написать логическую программу действий робота. Неявные бло-
ки состояния можно использовать в различных конструкциях независи-
мо от выбора микроконтроллера.
Еще одно распространенное решение поставленной задачи — это
использование шаблонов (рис. 7.8). В начале программы установлен
вектор прерывания, поскольку прерывания наиболее приоритетны. Век-
тор прерывания разделяется на два направления: первое (INTO) — сра-
батывание датчика столкновения; второе — срабатывание датчика огра-
ничения поля в блоке таймера.
150
Глава 7
Рис. 7.8. Алгоритмические шаблоны
Робот “Sumo bot”
151
Программа выполняет сканирование фотодатчиков IR в поисках со-
перника. Исходя из показаний фотодатчиков, выполняются логические
операции. Логическая комбинация из шаблонов упрощает программное
обеспечение робота.
Рассмотрим шаблоны в виде запрограммированных ходов:
• ход 1 — ожидание 5 с (4934786,13 мкс для частоты 8 МГц);
• ход 2 — движение прямо 0,5 с; поворот влево 0,5 с; проверка левого
фотодатчика; поворот вправо 1 с; проверка правого фотодатчика;
• ход 3 — обнаружение противника фотодатчиком; разворот в его
сторону 0,2 с; движение прямо 1 с;
• ход 4 — столкновение (сработал контактный датчик); движение
прямо 1 с (силовой прием “сумо”);
• ход 5 (если выполнен ход 4) — разворот на месте 2 с;
• ход 6 — сработал датчик ограничения поля; движение в противопо-
ложную сторону;
• ход 7 — движение прямо 0,5 с; движение влево 0,2 с; сканирование
фотодатчиков (общая концепция движения по полю против часовой
стрелки).
Во время каждого хода сканируются все фотодатчики через каждые
50 мс. Фотосенсоры ограничения поля являются наиболее приоритет-
ными, поэтому в случае нарушения границы поля робот возвращается
в исходную позицию.
Программа
Программа (листинги 7.1 и 7.2) вводится в микроконтроллер с по-
мощью программатора. В ее начале инициализируются порты ввода-
вывода. Программа устанавливает векторы прерываний. Опрос фотосен-
соров происходит через заданные промежутки времени. В процессе это-
го опрашиваются четыре ИК датчика, установленные по периметру ро-
бота по алгоритму, показанному на рис. 7.9. Рассматриваются шесть ва-
риантов нарушения границы поля. В блок-схеме, представленной на
рис. 7.9, рассмотрены только четыре варианта нарушения границы, но
в программе реализованы шесть.
Во время программирования было проанализировано два метода ре-
акции на данные с датчиков периметра робота. Первый метод предпола-
гал сравнение данных с датчиков (данных полученных с АЦП уровня
напряжения на датчиках) с 200 единицами уровней АЦП. Если данные,
считанные с датчиков, менее 200 единиц, то считается что граница не
нарушена, если же более 200 единиц, то граница нарушена.
152
Глава 7
Начато
Чтение данных АЦП4
12^ Данные АЦП4/АОС1
Установка АЦП5 конфигурация,
коэффициент усиления
| Чтение данных АЦП5 |
I 13— Данные АЦГ5/АОС5 I
Установка AU46, конфигурация,
коэффициент усиления
...... i.............
I Чтение данных АЦП6
..........т
!4= Данные АЦГ6/АОС4
4
Рис. 7.9. Алгоритм опроса четырех ИК датчиков, установленных по периметру
Робот “Sumo bot”
153
Второй метод предполагает сравнение уровней, считанных АЦП
с датчиков, между собой. Другими словами, считываются уровни с дат-
чиков, затем микроконтроллер вычитает уровень первого датчика из
уровня второго и дополнительно вычитает 50 единиц. Если результат
положительный, значит нарушена граница на первом датчике. Если ре-
зультат отрицательный, то проверяется второй и третий датчики. Цикл
повторяется со всеми датчиками.
В программе реализован первый метод. Таймер 1 настроен на при-
ем и отсчет внешних импульсов с генератора 38 кГц. Как только отсчет
закончен, генерируется прерывание от Timer 1, программа останавлива-
ется и переходит по адресу прерывания, где считывает данные с фото-
сенсоров. После считывания данных программа возобновляет работу
после прерывания.
При определении границы поля отрабатывается движение в проти-
воположном направлении. Внешнее прерывание срабатывания контакт-
ного выключателя запускает подпрограмму силовых приемов.
Тестовая программа включается комбинацией DIP-переключателей.
При включении S4 DIP2 “ON ON” программа задает режим драйверов
на попеременное включение двигателей: левый вперед, правый вперед,
оба двигателя вперед, оба двигателя назад, левый назад, правый назад.
Это необходимо для фазировки двигателей при настройке робота.
При включении S4 D1P2 “ON OFF” программа переходит на на-
стройку фотосенсоров PHS1-4 границы поля. При приближении к фото-
сенсору вначале черной полосы, а затем — белой, включится один из
двигателей. Таким образом можно настроить чувствительность каждого
фотосенсора.
При включении S4 DIP2 “OFF OFF” программа задает рабочий ре-
жим работы. При запуске программы отсчитывается пауза 5 с. Считы-
вание данных АЦП происходит с учетом подключения источника опор-
ного питания к общему выводу питания. Данные в АЦП выравниваются
по левому значению двухбайтного числа (максимальное значение стар-
шего байта). При этом используется только старший байт результата.
После этого робот начинает выполнение шагов, описанных блок-схемой
с рис. 7.8.
Монтажная плата
Автор собрал схему платы управления на макетнице SRC-053. Га-
баритне размеры платы — 140*85 мм. Для радиолюбителей была раз-
работана монтажная плата, показанная на рис. 7.10-7.12 (132*83 мм).
154
Глава 7
Вначале были установлены пассивные элементы схемы и микро-
схемы, в последнюю очередь — фотодатчики.
Внимание!
Фотосенсоры и фотодатчики чувствительны к статическому электричеству
гЛ
ООО
о о
8У
01
.тшгштт
ЖЖ
ООО
8Н
-О 93
IIJ
Рис. 7.10. Монтажная плата робота “Sumo bot”. Размещение элементов
Перед монтажом, автор зажал все выводы антистатическими пинце-
том, обернул их фольгой так, чтобы она проходила между каждым вы-
Робот “Sumo bot”
155
водом, и только тогда приступил к монтажу на плату заземленным па-
яльником и заземленными через специальный браслет руками.
Рис. 7.11. Монтажная плата робота “Sumo bot”. Лицевая сторона
Фотодатчик PNA4601 выведен с обратной стороны платы к окну
в щите на максимально вытянутых ножках. Передние фотосенсоры на
вытянутых ножках с обратной стороны платы направлены вниз для
фиксации границы поля. Задние фотосенсоры подключены к плате че-
рез провода и разъемы и установлены сзади на платах.
156
Глава 7
Рис. 7.12. Монтажная плата робота “Sumo bot”. Лицевая сторона
После монтажа и подсоединения проводов с фотосенсоров аккурат-
но снимается фольга антистатическим пинцетом. Светодиоды LED1,
LED2 также монтируются на максимально вытянутых ножках с обрат-
ной стороны платы и устанавливаются в цилиндрическую вставку в щи-
те.
Светодиоды LED3, LED4 (индикаторы соперника) располагают
у края платы. При установке платы на робот их поворачивают вверх так,
Робот “Sumo bot”
157
чтобы был виден их свет. Кроме того, наверху для простоты управления
устанавливается кнопка сброса S3.
Микровыключатель S2 выведен с обратной стороны платы к плос-
кости щита. Он установлен на согнутые под углом 60°, длинные ножки.
Это позволяет регулировать контакт с щитом за счет изменения угла на-
клона. Кроме того, при сильном ударе ножки выполняют роль аморти-
заторов и не теряют своего положения.
Между платой и аккумуляторным отсеком устанавливается резино-
вый клин так, чтобы плата была плотно прижата к стойкам щита. Вся
конструкция демпфирует удары противника, исключая поломки. Двига-
тель установлен на половинки редукторов и стянут стяжкой. Провода
от двигателей подключены к единому разъему JP1, JP2 на плате управ-
ления.
Детали схемы:
• двигатели и выключатель питания позаимствованы от игрушки “са-
моходки”;
• IC1 — ATMEGA8-16 PU;
• IC2 —LM2937;
• IC3—NE555;
• IC4, IC5 —1Ы642;
• кварцевый резонатор Q1 — 8 МГц;
• дроссель L1 — 47 мкГн, 50 мА;
• фотосенсоры PHS1-4 — QRD1114-ND; PHI-2 — PNA4601M-ND
(36,7 кГц) (многие радиолюбители ограничены в приобретении та-
ких редких фотосенсоров, поэтому можно попробовать фотопару от
нерабочих шариковых компьютерный мышей, хотя автор в этом на-
правлении не экспериментировал);
• светодиоды LED1-2 — HlR524B-940-150mW; LED3-4 — любые на
3 мА;
• подстроечные резисторы типа СП5-2 или любые другие, малогаба-
ритные.
Конструкция
Конструкция должна быть максимально облегченной. Все детали
желательно выполнять из пластика или оргстекла. Для быстрого конст-
руирования автор приводит ниже эскизы деталей робота. В качестве
альтернативного материала для основания можно использовать фанеру
или жесть, но с ними немного труднее работать. Некоторые детали по-
заимствованы от нерабочего дисковода флоппи-дисков. В качестве ма-
териала для плоскостей (основание, панель, ковш) можно также исполь-
158
Глава 7
зовать старые крупные платы (предварительно выпаяв детали), но такое
решение ухудшает дизайн робота.
Чертеж рамы переднего щита (ковша) показан на рис. 7.13.
Рис. 7.13. Рама переднего щита (ковша) робота “Sumo bot”
Основанием конструкции служит вышедший из употребления оп-
тический диск (рис. 7.14).
Рис. 7.14. Основание конструкции, выполненное из оптического диска
При сверлении отверстий для крепежа необходимо ограничивать
усилия прижатия сверла, чтобы не допустить трещин в диске. Диск по-
Робот “Sumo bot”
159
зволяет ограничить доступ к колесам, тем самым защищая привод робо-
та. Сегменты под колеса в диске выпиливались лобзиком аккуратными,
небыстрыми движениями. Если торопиться, то диск может лопнуть.
Переднее колесо должно быть с поворотной скобой, поэтому ис-
пользуется прижимной ролик от кассетного магнитофона. Лучше ис-
пользовать шарик, поскольку шарик позволяет двигаться в любом на-
правлении без “настройки руля”. Недостаток прижимного ролика за-
ключается именно в необходимости “настройки руля”.
В момент начала движения ролик должен развернуться в заданном
направлении, и этот момент изменяет направление движения робота не-
зависимо от управления. Ролик прикреплен через две гетинаксовые
шайбы к основанию робота шурупом. В точке крепления ролика шуруп
закручен в уголок и залеплен специальным клеем.
Во время сборки корпуса автор столкнулся с проблемой поиска
мелких винтов и гаек. Крепление можно выполнить с помощью клея
“Эпоксилин”. Перед употреблением этого клея необходимо приготовить
все детали крепежа, поскольку он очень быстро высыхает. Кроме того,
пригодятся шурупы от разобранных игрушек, которые не позволят сме-
ститься фиксированным узлам.
Для питания двигателей робота установлен аккумуляторный отсек.
Он состоит из двух отсеков: верхнего и нижнего. Верхний отсек рассчи-
тан на две батарейки типа АА и имеет откидной узел для быстрой сме-
ны батарей нижнего отсека. Нижний отсек рассчитан на три батарейки
типа АА и прикреплен к редукторам конструкции, чтобы прочно зафик-
сировать механический узел. Аккумуляторный отсек по весу — наибо-
лее тяжелый элемент конструкции. Находясь сверху, он создает центр
тяжести выше оси колес, влияя тем самым на плохую устойчивость ро-
бота.
Редуктор, колеса и двигатель привода взяты от китайской игрушки:
полноприводной “самоходки” (рис. 7.15). Редуктор распилен пополам,
и с обеих его сторон установлены двигатели (рис. 7.16). В его состав
входит несколько шестеренок, и для того, чтобы редуктор не разошелся
во время работы, детали корпуса склеены клеем “Момент” (рис. 7.17).
Стойки ковша получаем из дюбелей 70 мм для стен (применяются
в строительстве) или из использованных авторучек. Уголки стоек вы-
полнены из латунной ленты. Общая высота стоек с уголками составляет
62 мм.
У основания из медной проволоки выгнута рама (см. рис. 7.13). На
ее окончаниях нарезана резьба. На крепление щита к раме и стойкам на-
деваются небольшие пружины диаметром 3 мм и длиной 7 мм.
160
Глава 7
Рис. 7.15. Игрушка, из которой были взяты Редуктор, колеса и двигатель привода
Рис. 7.16. Размещение двигателей
Робот “Sumo bot”
161
Рис. 7.17. Редуктор распилен пополам, а детали корпуса склеены клеем
Щит (ковш) выполнен из верхней части коробки для компакт-диска
(рис. 7.18). Он крепится к стойкам вверху — винтами к уголкам, а внизу
вставляется отверстиями в раму и прикручивается гайками. Рама клеит-
ся “Эпоксилином” к основанию.
Рис. 7.18. Щит робота
162
Глава 7
Сборка
Сборка конструкции начинается с установки двигателей в редукто-
ры и крепления стяжками. Для фиксации двигателей используется клей
“Момент”. Далее редукторы устанавливаются на основание и прикручи-
ваются внизу маленькими шурупами. В месте установки редуктора ос-
нование конструкции укреплено наклеенной медной фольгой (рис. 7.19).
Рис. 7.19. Укрепление конструкции медной фольгой
Далее вырезается панель из оргстекла или коробки для компакт-
дисков согласно рис. 7.20. К панели крепят выключатель питания и две
стойки рис. 7.21. Между стойками установлен штифт (диаметром 1,6 мм
и длиной 42 мм), на котором находится поворотное основание (позаим-
ствовано от дисковода флоппи-дисков).
Поверх редукторов клеится панель аккумуляторных батарей, сверху
которой устанавливается трехсекционный аккумуляторный отсек. В дно
аккумуляторной секции вкручиваются два шурупа, которые проходят
сквозь панель и закручиваются в редукторы (шурупы короткие, чтобы
не заклинить шестеренки). К поворотному основанию приклеивается
Робот “Sumo bot”
163
и фиксируется шурупами верхний аккумуляторный отсек. Провода от
аккумуляторных отсеков продеваются сквозь панель, подсоединяются
к выключателю питания и плате управления.
Спереди аккумуляторных отсеков, к уголку основания (см. рис. 7.17
и рис. 7.19) прикручивается винтом и гайкой плата управления. Она ус-
танавливается так, чтобы фотосенсоры попали в пазы в основании робо-
та. Провода от задних фотосенсоров подводят-
ся к плате управления. Чтобы исключить
влияние бокового света от LED1, LED2, на пе-
редние фотосенсоры PHI, РН2 к щиту клеем
“Эпоксилин” приклеены вставки (рис. 7.22).
При сборке щит с вставками надевается на све-
тодиоды LED1, LED2. Робот “Sumo Bot” после
окончательной сборки показан на рис. 7*23.
Положение фотосенсоров регулируется так,
чтобы плоскость сенсора была параллельна
плоскости игрового поля (рис. 7.24).
Рис. 7.22. Чертеж вставки
Эксплуатация
В аккумуляторный отсек устанавливаются заряженные аккумулято-
ры (рис. 7.25). Робот устанавливается на отметки в центре игрового по-
ля, и включается питание. Одновременно по сигналу судьи нажимается
кнопка сброса. Далее “Sumo Bot” действует самостоятельно. Соревно-
вание выигрывает тот робот, который вытеснил соперника за пределы
поля.
164
Глава 7
Рис. 7.23. Робот “Sumo Bot” после окончательной сборки
Рис. 7.24. Фотосенсоры должны быть параллельны плоскости игрового поля
Зарубежные роботы сделаны из металла, но более зрелищным бой
выглядит, когда робот выходит из строя с механическими поврежде-
ниями (аналогично боксу).
Первые модели роботов были собраны на обычных логических
микросхемах, поскольку логика проста: движение в сторону срабатыва-
ния фотодатчика и останов на границе поля. Фантазия радиолюбителей
подскажет, какие варианты схем и конструкций лучше. Зарубежные ра-
диолюбители уже не так давно организовали показательную выставку
Робот “Sumo bot”
165
по роботам малышам [13]. Одним из представителей выставки был ми-
ниатюрный робот “Sumo bot”. Автор надеется, что это увлечение охва-
тит и наши страны.
Рис. 7.25. В аккумуляторный отсек установлены заряженные аккумуляторы
Глава 8
Проходчик лабиринта
В современном мире труд человека облегчается хорошими помощ-
никами: роботами. Например, робот-платформа, работающий на складе.
Он перемещает грузы, проезжает через ряды, берет одни и те же короб-
ки. Как он двигается и не сталкивается с ящиками? Почему берет необ-
ходимые предметы? На этот вопрос можно ответить, если собрать мо-
дель робота, передвигающегося в лабиринте.
Вариантов дизайна роботизированных проходчиков лабиринта —
огромное множество. Американские радиолюбители вот уже два десят-
ка лет конструируют всевозможные разновидности таких роботов. Один
из примеров показан на рис. 8.1.
Рис. 8.1. Проходчик лабиринта, созданный американскими радиолюбителями
В основе управления роботом всегда лежит микроконтроллер. Та-
кой подход наиболее практичен, поскольку позволяет быстро изменить
логику поведения робота, оперативно, во время соревнования откоррек-
тировать его движение с помощью ноутбука и программатора ISP. Про-
грамма микроконтроллера выполняет алгоритм путем логических и ма-
Проходчик лабиринта
167
тематических действий. Совершенство алгоритма определяется по ско-
рости выполнения поставленной задачи.
Робот передвигается по игровому полю, на котором уложена до-
рожка черного цвета (черной изоляционной лентой) шириной 1-1,5 см
(рис. 8.2).
Рис. 8.2. На игровом поле уложена дорожка черного цвета
В качестве поля используется любая ровная, светлая поверхность:
стол, фанерный лист на подставках, гладкий пол и т.п. На такой поверх-
ности у робота нет препятствий, и потому он хорошо передвигается. По
окончании соревнования по результатам времени, затраченного на пре-
одоление всего лабиринта, определяется победитель.
Дизайн
Автор предлагает дизайн робота, показанный на рис. 8.3. Габарит-
ные размеры конструкции: 150х 100><80 мм. Питание — автономное, не-
стабилизированное 4,5..5,5 В. Передвигается робот на колесах (в рас-
сматриваемой модели их три). Робот имеет задний привод и может пе-
редвигаться вперед и назад. Спереди установлены фотодатчики и ролик
переднего колеса на оси, которая самостоятельно (из-за выравнивания
сил трения по поверхности резинового протектора ролика) поворачива-
ется в сторону движения робота. Для распознавания линии поля исполь-
зуются все фотодатчики. Рядом с датчиками расопложены подстроен-
168
Глава 8
ные резисторы для каждого фотоэлемента. В задней части конструкции
установлены батареи питания и задние колеса, а посередине — двигате-
ли привода. Колеса приводятся в движение от двигателя с помощью
пассика. Плата управления находится над платформой робота.
Рис. 8.3. Дизайн проходчика лабиринта
Отличительная особенность данного робота заключается в том, что
он у него нет переднего рулевого управления. Все маневры он выполня-
ет с помощью независимого поворота на определенный угол задних ко-
лес. Этот угол контролируется фотодатчиком поворота колеса.
Вес конструкции в сборке (без наружного корпуса) не превышает
500 г. Игровое поле (лабиринт) — это ровная белая поверхность разме-
рами 1050x1120 мм (два бумажных листа формата А1 или 20 листов
формата А4) (пример — на рис. 8.4).
Структурная схема
Структурная схема проходчика лабиринта показана на рис. 8.5. Для
решения задачи по преодолению лабиринта необходимы пять фотодат-
чиков, шестиканальный АЦП и логически управляемый драйвер двига-
телей. Чтобы реализовать эту идею, автор использовал все возможности
микроконтроллера Atmel ATMEGA8-L семейства AVR [14], оснащенно-
го Flash-памятью программ объемом 8 Кбайт, ОЗУ объемом 1 Кбайт
и памятью данных EEPROM объемом 512 байт. Количество команд —
130, количество линий ввода-вывода — 32, два восьми- и один 16-раз-
рядный таймеры/счетчики, один модуль USART, 10-разрядный шести-
канальный АЦП, двухканальный аналоговый компаратор.
Проходчик лабиринта
169
А4
Рис. 8.4. Пример игрового поля для проходчика лабиринта
Рис. 8.5. Структурная схема проходчика лабиринта
170
Глава 8
На входе микроконтроллера установлены пять фотодатчиков, в ко-
торые вмонтированы светодиоды инфракрасного (ИК) диапазона. Такие
фотодатчики применяются на производственных линиях, а также —
в принтерах и факсах для определения наличия и размеров бумаги. Фо-
тодатчики можно составить из отдельных элементов (рис. 8.6), позаим-
ствовав фототранзистор и светодиод от старых шариковых мышей.
Рис. 8.6. Фотодатчики
Тем не менее, учитывая высокую эффективность фотодатчика QRD
1114 [11], в робототехнике чаще всего используют именно датчики это-
го типа. Кроме того, можно сэкономить на количестве установленных
элементов схемы, что позволит снизить вес конструкции и сделать ее
более маневренной и энергосберегающей.
Передние фотодатчики всего лишь фиксируют позицию линии от-
носительно движения робота. Для точного маневра необходимо изме-
рять угол поворота задних колес. Зарубежные радиолюбители решили
эту проблему, расчертив на черно-белые сегменты внутреннюю сторону
колеса (рис. 8.7), и установив напротив этих сегментов вторую группу
фотодатчиков.
Для представленной модели это сделать невозможно, поэтому автор
использовал готовый узел от шариковой мыши (готовый неявный блок
состояния). Такое решение также позволяет точно отсчитать угол пово-
рота колеса, и на основании этих данных схема управления сможет чет-
ко регулировать подачу импульсов на электродвигатель, т.е. маневры
Проходчик лабиринта
171
робота будут полностью предсказуемыми, что повышает шансы на бы-
стрый проход лабиринта и победу в соревнованиях.
Рис. 8.7. Внутренняя сторона колеса расчерчена на черно-белые сегменты
В том случае, когда лабиринт имеет физические препятствия, их по-
зволят определить контактные датчики. При обнаружении препятствия
робот остановится, чтобы не тратить попусту энергию.
В случае быстрого движения фотодатчик не успеет отследить до-
рожку лабиринта, и робот отклонится от маршрута в неверном направ-
лении. В этом случае необходим оперативный регулятор скорости, для
чего в схеме предусмотрен подстроечный резистор. Данные с этого ре-
зистора используются подпрограммой скорости вращения двигателя,
которая работает в режиме широтно-импульсного регулирования пода-
ваемого на двигатель напряжения.
Все полученные данные обрабатывает микроконтроллер ATmega8-
L, который затем формирует импульсы управления драйверами двига-
телей.
Принципиальная схема
Принципиальная схема проходчика лабиринта показана на рис. 8.8.
172
Глава 8
Рис. 8.8. Принципиальная схема проходчика лабиринта
Проходчик лабиринта
173
В состав схемы входят пять инфракрасных датчиков с цепями регу-
лировки; микроконтроллер Atmel MEGA8-L; драйверы двигателей
LB1642 [12, 15]. Нестабилизированное питание от батареи 4,5 В подает-
ся на контакты JP5, JP6. Выключатель S1 позволяет включать или вы-
ключать питание на схему. О включенном состоянии сигнализирует
светодиод LED1 по которому протекает ток через R12.
Для того чтобы всплески от выходного каскада не влияли на работу
микроконтроллера, предусмотрен сглаживающий фильтр С4, С7, а для
нормальной работы АЦП — фильтр Cl 1, L1. Для сброса микроконтрол-
лера в исходное состояние предусмотрена цепочка С5, R13. Синхрони-
зация микроконтроллера осуществляется от кварцевого резонатора на
8,0 МГц. Для устойчивой работы резонатора установлены конденсаторы
С6, СЮ. Для определения дорожки лабиринта в управлении схемой ис-
пользуются пять ИК фотодатчиков PHS1-PHS5. Их светодиоды пита-
ются через резисторы R1-R5. Чувствительность фотодатчиков регули-
руется подстроечными резисторами R6-R10. Резистор R14 регулирует
скорость движения робота.
Фототранзисторы Т1 (левое заднее колесо), Т2 (правое заднее коле-
со) — это датчики поворота колеса. Для засветки фотодатчиков исполь-
зуются светодиоды LED4, LED 5 (независимо от стороны расположения
фотодатчика). Эти элементы позаимствованы из платы компьютерной
шариковой мыши и вынесены за пределы платы к соответствующим ко-
лесам. Питание всех цепей фотодатчиков берется от фильтрующей це-
почки Rll, СЗ. Для обнаружения препятствия используются контакты
S2, S3. Дребезг контактов устраняется программным путем. Для визу-
ального определения замкнутого состояния контактов S2, S3 в схеме
используются светодиоды LED2, LED3. В случае изменения программы
на плате установлен разъем SV1 для программирования микроконтрол-
лера IC1 по шине SP1.
Для управления двигателями в прямом и реверсном режиме служат
микросхемы IC2, IC3, которые выполняют роль выходных усилителей
мостового типа. Для того чтобы всплески питания не влияли на работу
микроконтроллера, в выходных каскадах непосредственно около микро-
схемы установлены электролитические конденсаторы С8, С9. Питание
левого двигателя берется с выводов JP1, JP2, а правого — с выводов
JP3, JP4. В месте подключения двигателей установлены искрогасящие
фильтры Cl, С2.
Монтажная плата
Монтажная плата проходчика лабиринта представлена на рис. 8.9.
174
Глава 8
Рис. 8.9. Монтажная плата проходчика лабиринта
Проходчик лабиринта
175
Плата изготавливается из двухстороннего текстолита. Ее габарит-
ные размеры — 105x55мм. Автор использовал готовую макетницу CRS-
053 размерами 100x50 мм.
До монтажа элементов высверливаются отверстия крепления платы
диаметром 3 мм. Инфракрасные датчики монтируют с нижней стороны
платы. Подстроечные резисторы R6-R10, R14 устанавливают регулиро-
вочными винтами вверх. Фотодатчики поворота колес монтируются от-
дельно.
Из платы компьютерной шариковой мыши вырезается прямоуголь-
ный сегмент с фотодатчиком и светодиодом, который затем устанавли-
вается напротив ролика заднего колеса так, чтобы ролик с сепарацией
попадал между светодиодом и фототранзистором (рис. 8.10).
Рис. 8.10. Установка фотодатчика поворота колеса
Остальные элементы схемы монтируются с верхней стороны платы.
На плате установлен разъем SV1 для коммуникации с программатором
через шину ISP. Для подсоединения проводов от двигателей и блока пи-
тания на плате предусмотрены разъемы с винтовыми зажимами. На пла-
ту также устанавливаются “усы”: контактная группа для определении
препятствия. Пружина изготавливается из медной проволоки диаметром
1,8 мм.
176
Глава 8
Автор просмотрел ряд фотодатчиков различных производителей
табл. 8.1.
Таблица 8.1. Некоторые фотодатчики
Название Производитель Корпус Цена, евро
HLC1395-002 PBF HONEY HLC1395 1,43
HLC2701-001 PBF HONEY HLC2705 1,53
НОА0149-001 PBF . HONEY НОАЮ49 2,66
НОА0825-001 HONEY HOA0825 1,73
НОА0825-003 HONEY HOA0825 1,87
НОА0861-Т55 PBF HONEY 1,68
HOA0870-N51 HONEY HOA086X_087X 1,69
НОА0870-Т51 HONEY HOA086X_087X 1,69
HOA0871-L55 HONEY HOA086X_087X 1,60
НОА0871-Т55 HONEY HOA086X_087X 1,80
HOA0890-N51 HONEY HOA088X_089X 3,16
НОА0890-Т51 HONEY HOA088X 089X 3,16
HOA0891-N55 HONEY HOA088X_089X 3,19
НОА0891-Т55 HONEY HOA088X_089X 3,20
НОА0901-011 PBF HONEY HOA0901 5,01
НОА0902-011 PBF HONEY HOA0902 5,12
HOA0963-N51 PBF HONEY 3,01
НОА1180-002 PBF HONEY HOA1180 6,57
НОА1180-003 HONEY HOA1180 6,94
НОА1397-002 HONEY HOA1397 2,20
НОА1397-032 PBF HONEY HOA1397 2,36
НОА1404-002 PBF HONEY HOA1404 5,35
НОА1404-003 PBF HONEY HOA1404 5,44
НОА1405-002 PBF HONEY HOA1405 2,79
НОА1406-001 HONEY HOA1406 10,55
НОА1406-003 HONEY HOA1406 11,28
НОА1870-033 HONEY HOA1870 4,17
НОА1872-012 HONEY HOA1872 1,98
НОА1872-013 HONEY HOA1872 2,02
НОА1873-012 HONEY HOA1873 1,93
НОА1873-013 HONEY HOA1873 2,02
НОА1874-012 PBF HONEY HOA1874 3,38
НОА1875-002 PBF HONEY HOA1875 5,87
НОА1877-002 HONEY HOA1877 4,03
Проходчик лабиринта
177
Таблица 8.1. Продолжение
Название Производитель Корпус Цена, евро
НОА1881-012 PBF HONEY HOA1881 3,26
НОА1881-013 HONEY HOA1881 3,38
НОА1882-012 PBF HONEY HOA1882 2,12
НОА1882-013 HONEY HOA1882 1,80
НОА1882-013PBF HONEY HOA1882 1,80
НОА1883-013PBF HONEY HOA1883 2,02
НОА1884-012 PBF HONEY HOA1884 1,65
НОА1885-012 HONEY HOA1885 1,78
НОА1885-013 HONEY HOA1885 1,82
НОА1886-012 PBF HONEY HOA1886 1,57
НОА1887-013PBF HONEY HOA1887 4,80
НОА1888-011 PBF HONEY HOA1888 2,50
НОА1888-013 PBF HONEY HOA1888 2,90
НОА1889-013 HONEY HOA1889 2,83
НОА2005-001 PBF HONEY HOA2005 5,61
НОА2006-001 PBF HONEY HOA2006 3,81
НОА2007-001 PBF HONEY HOA2007 3,50
НОА2498-002 HONEY HOA2498 4,32
НОА2498-003 HONEY HOA2498 4,61
НОА6970-Т51 HONEY HOA696x_697x 2,46
НОА6971-Т51 HONEY HOA696x_697x 2,46
НОА6973-Т51 HONEY HOA696x_697x 2,46
НОА6984-Т51 PBF HONEY HOA698x_699x 3.71
НОА6991-Т51 HONEY HOA698x_699x 4,19
НОА6992-Т51 PBF HONEY HOA698x_699x 4,19
ADJD-S311-CR999E AVAGO 3,59
ADJD-S371-QR999E AVAGO 5,34
EE-SF5 PBF OMR 2.28
EE-SF5B PBF OMR 2,21
EE-SH3 OMR 1,38
EE-SV3 PBF OMR 1,23
EE-SX1018PBF OMR 1.01
EE-SX1041 OMR 0,89
EE-SX1046 PBF OMR 1,43
EE-SX1070 PBF OMR 1,08
EE-SX1071 OMR 1,00
EE-SX1103 OMR 0,75
178
Глава 8
Таблица 8.1. Окончание
Название Производитель Корпус Цена, евро
EE-SX1105 OMR 0,75
EE-SX1106 PBF OMR 0,75
EE-SX1107 PBF OMR 1,50
EE-SX1108 PBF OMR 1,50
EE-SX1109 OMR 1.52
EE-SX1131 PBF OMR 1.52
EE-SX4235A-P2 PBF OMR 1,66
EE-SX461-P11 PBF OMR 3,50
EE-SY110 PBF OMR 1,49
EE-SY124 PBF OMR 0,92
EE-SY125 PBF OMR 2,28
EE-SY310 PBF OMR 1,89
EE-SY313 OMR 2,63
EE-SY410 PBF OMR 1,95
HSDL-9000 AGI HSDL-9000 1,60
HSDL-9100 PBF AVAGO HSDL-9000 1,65
HSDL-9100-021 PBF AVAGO 1.27
SD1440-003L PBF HONEY LED 2x2.3 1.45
SD3443-003 PBF HONEY LED10M_Y_DIFFUSE 1,46
SD5421-002 HONEY SD5421 2,89
SD5443-003 HONEY SD5421 1.21
SDP8436-003 PBF HONEY SDP8436 0,66
SE5455-003 HONEY SE-300 1,14
Из соображений экономии автор выбирал фотодатчики стоимостью
менее двух евро, принимающие ИК лучи на расстоянии 15 мм от по-
верхности. Наиболее приемлемыми оказались следующие фотодатчики:
• GP2D12 — Sharp [16], дистанция — до 80 см, питание — 5 В;
• ОРВ 703 — QT Optoelectronics [17], дистанция — до 3,8 мм, пита-
ние— 5 В;
• HSDL 9100 — Avago [18], дистанция — 50 мм питание — 5 В;
• НОА 1397 — Honeywell [19], дистанция— 12,7 мм, питание — 5 В;
• НОА 1405 — Honeywell [19], дистанция — 5 мм питание — 5 В;
• ЕЕ SY124 — Omron [20], дистанция — 1 мм, питание — 5 В;
• ЕЕ SY310 — Omron [20], дистанция — 5 мм, питание — 5 В;
• QRD1114 — Fairchild Semiconductor [11], дистанция — 5 мм, пита-
ние— 5 В.
Проходчик лабиринта
179
В качестве фотодатчиков PHS1-PHS5, автор остановил свой выбор
на последнем варианте.
Светодиоды LED1-LED3 выбираются на рабочий ток 3 мА. Фото-
датчики задних колес позаимствованы от шариковой мыши. Подстроеч-
ные резисторы — импортного производства. Панелька под микрокон-
троллер — 28-контактная. Кварцевый резонатор — 8,000 МГц, произ-
водства H.ELE. Электролитические конденсаторы — 1000 мкФ, 6,3 В,
105°. Резисторы — МЛТ 0,125. Дроссель — Д-0,001.
Драйвер двигателя — LB1642 от компании Sanyo. Для присоедине-
ния проводов к плате используются разъемы с резьбовыми зажимами.
Отсек для батарей питания — на три элемента АА с выключателем пи-
тания и верхней крышкой. Электродвигатели позаимствованы от нера-
бочих приводов CD-ROM.
Математическая модель
Прежде чем составить алгоритм управления, необходимо получить
математическую модель на основе простых математических действий.
Освещенному фотодатчику соответствует минимальное значение уров-
ня на входе АЦП, а неосвещенному — максимальное. Для обнаружения
черной дорожки лабиринта необходимо найти максимальное значение
пяти фотодатчиков, т.е. пяти данных, полученных от АЦП.
Мы знаем, что в неравенстве A>B>C>D>E число А, исходя из зако-
на транзитивности, всегда будет наибольшим. Даже если это неравенст-
во разбить на отдельные этапы сравнения, результат не изменится. На-
пример А>Е, С>Е, D>E, A>D, А>С. Выполнив сравнения в любой по-
следовательности, приходим к выводу, что А — наибольшее число.
Микроконтроллеры не отличаются большими ресурсами, поэтому
необходимо задействовать функции сложения, вычитания, сравнения
и инвертирования. Поскольку операция сравнения весьма ресурсоемкая,
вместо нее можно использовать арифметическую функцию вычитания
с последующим анализом знака результата: отрицательный или поло-
жительный. Так можно с уверенностью определить, какое число боль-
ше, и в этом нам поможет метод простых итераций [21].
На первом этапе итерации вычитаются данные, и наименьшее зна-
чение отсеивается (рис. 8.11). На последующих этапах постоянно ис-
ключается одна переменная, и в результате на четвертом этапе получим
максимальное значение АЦП. Это позволит определить местоположе-
ние линии лабиринта относительно движения робота и отрегулировать
угол поворота. В перспективе, если увеличить количество датчиков, то
можно с высокой точностью задать движение и маневр робота.
180
Г лава 8
Левая сторона_____________________________________________________________Правая сторона
Фотодатчик А ‘ В С D Е
Подача импульсов по результату ‘100 лев 40 лев 40 лев + 40 пр 40 прав 100 прав
первый этап.итерации . max
Пусть А - наибольшее А-В>0 Да R1=A А
Переменные В-С>0 Да R2aB В
A.B.C.D.E C-D>0 Да R3 = C С
D-E>0 Да R4 = D D
второй этап итерации max
R1 -R2>0 Да R1 R5 = R1 А
R2-R3>0 Да R2 R6 = R2 В
R3-R4>0 Да R3 R7 = R3 С
третий этап итерации... ; max
R5-R6£0 Да R6 R8 = R6 А
R6-R7>0 Да R7 R9 = R7 В
четвертый этап.итерации max
R8-R9>0 Да R8 I А
В результате левый фотодатчик засвечен минимально, имеет максимальный уровень на входе АЦП
Поворот влево на 100 сегментов
Рис. 8.11. Поиск максимума для пяти фотодатчиков
Алгоритм работы
Блок-схема алгоритма разбита на две части: рис. 8.12 и рис. 8.13.
В первой части (см. рис. 8.12) вначале считываются данные со всех
фотодатчиков через АЦП микроконтроллера, который преобразует ана-
логовые данные в цифровой код. Каждому из полученных значений со-
ответствует своя переменная (см. рис. 8.11). Например, данным АЦП1
соответствует R1, т.е. данные АЦП1 записываются в ячейку R1. Затем
в ячейку R6 помещается разница между R1 и R2. Если результат вычи-
тания — отрицательный, то ячейка R1 обнуляется, а в ячейку R6 запи-
сывается разница между R2 и R3. Если результат — положительный, то
ячейка R2 обнуляется, а в ячейке R6 сохраняется разница между R1 и R3.
В результате первого шага итерации отбрасывается одно из значе-
ний данных АЦП. По закону транзитивности, отброшенное значение
для дальнейших итераций не требуется. С помощью рассмотренных ма-
тематических операций определяется фотодатчик, который расположен
над линией лабиринта. Пять фотодатчиков позволяют выбрать дискрет-
но угол поворота заднего колеса.
В зависимости от положения фотодатчиков, включается левый или
правый двигатель. Поскольку задний привод робота оснащен дополни-
тельными фотодатчиками и сепарированным диском, при повороте ко-
леса формируются импульсы, которые поступают на микроконтроллера.
Проходчик лабиринта
181
Рис. 8.12. Первая часть алгоритма работы проходчика лабиринта
R5 наибольшая В R4 наибольшая
Рис. 8.13. Вторая часть алгоритма работы проходчика лабиринта
Глава 8
Проходчик лабиринта
183
Микроконтроллер отсчитывает заданное число импульсов, вычис-
ленное по алгоритму, показанному на рис. 8.11. По окончанию отсчета
двигатель отключается. Для предотвращения инерционного движения
кратковременно включается реверс.
По мере продвижения робота фотодатчики в передней части плат-
формы определяют линию движения, а фотодатчики задних колес опре-
деляют заданный угол поворота оси. Тем самым реализована обратная
связь с автоматическим управлением направлением движения.
Во второй части программы (см. рис. 8.13) микроконтроллер выби-
рает одну из подпрограмм движения робота. Поскольку на предыдущем
этапе сохранились данные о наибольшем значении для каждого из пяти
АЦП, программа опрашивает все эти значения и выявляет наибольшее.
Происходит ветвление программы для расчета количества импульсов
с фотодатчика заднего привода. По мере поворота колеса заднего при-
вода отсчитываются импульсы фотодатчика. Робот поворачивается в за-
данном направлении и двигается по линии лабиринта. Регулируя про-
граммным путем количество импульсов фотодатчика, можно реализо-
вать маневр робота с большой точностью.
Программа
Для настройки работоспособности робота автор составил тестовую
программу, представленную в листингах 8.1 и 8.2. В ней поочередно
проверяются двигатели робота: включается сначала левый двигатель,
потом — правый, потом — оба вместе.
Листинг вл. Тестовая программа для проходчика лабиринта
.include "D:\Program Files\Atmel\AVR Studio\Appnotes\m8def.inc"
/Автор: Кравченко А.В.
/Дата: 22.09.2009
;Версия: 1.1.1
/Имя файла: testlab.asm
/Микроконтроллер: AVR mega8.
/Тактовая частота: 8 МГц
/Питание: не стабилизированное 4,5 В
. list
def adr = rO / Рабочий регистр
def tmp = Г16 / Рабочий регистр
def tmpl = rl7 / Рабочий регистр
def tmp2 = rl8 ; Рабочий регистр
def tmp3 = rl9 ; Рабочий регистр
184
Глава 8
Листинг 8Х Продолжение
def add = r20 ; Рабочий регистр
def adc2 = r21 ; Рабочий регистр
def per r22 ; Рабочий регистр
def adres = r23 ; Рабочий регистр
def kor = r24 ; Рабочий регистр
def tmp4 = r25 ; Рабочий регистр
def pur r31 ; Рабочий регистр
. cseg
. org О
rjmp RESET
пор ;rjmp EXT_INT0 - прерывание от вывода
пор ;rjmp EXT_INT1 - прерывание от вывода
пор ;rjmp TIMER2_COMP - прерывание от таймера
пор ;rjmp TIMER2_OVF - прерывание от таймера
пор ;rjmp TIME-CMPB - прерывание от таймера
пор ;rjmp TIMER1_CAPT - прерывание от таймера
пор ;rjmp TIMER1_COMPA - прерывание от таймера
пор ;rjmp TIMER1_COMPB - прерывание от таймера
пор ;rjmp TIMER1_OVF - прерывание от таймера
пор ;rjmp TIMERO_OVF - прерывание от таймера
пор ; rjmp SPI_STC - прерывание не используется
пор ;rjmp UCASRT_RXC - прерывание от USART
пор ;rjmp UCASRTJJDRE - прерывание от USART
пор ;rjmp UCASRT_TXC - прерывание от USART
пор ;rjmp ADC - прерывание от АЦП
пор ;rjmp EE_RDY - прерывание от таймера
пор ;rjmp ANA_COMP - прерывание от компаратора
пор ;rjmp TWI - прерывание от TWI
пор ;rjmp SPM_RDY - прерывание не используется
.org 20 ;настройка RESET: пор порта В
clr tmp
Idi tmp, $00
out DDRC, tmp
out PORTC, tmp
clr tmp
Idi tmp, $0F
out DDRD, tmp
clr tmp
out PORTD, tmp
;настройка программного стека
Idi tmp, low(RAMEND)
out SPL, tmp
;РС0-5 -вход
;обнулить порт С
;PD4-7 -вход
;обнулить порт D
;указатель стека
;младший стек
Проходчик лабиринта
185
Листинг 8Л Продолжение
Idi tmp, high(RAMEND) /указатель стека
out SPH, tmp /старший стек
nop
;Начало программы
nStart: nop
;сброс всех значений
clr tmp
clr tmpl
clr tmp2
clr tmp3
clr per
Idi add, $01 /движение влево
clr adc2
rcall ovelev
nop
rcall zader
Idi adc2, $04 /движение вправо
clr add
rcall oveprav
nop
rcall zader
Idi add, $01 /движение прямо
Idi adc2, $04
rcall ovepr
nop
rcall zader
nop
rjmp nstart
/подпрограмма движение 40 импульсов влево
ovelev: nop
clr kor
Idi kor, $28 /сорок импульсов
clr pur
cln
cis
clr pur
or add, adc2
out PORTD, add /запуск левого двигателя mot!
dal: nop
sbi PORTD, 4 /установить 1 в порт D4
nop
sbic PORTD, 4 /пропустить команду, если сброшен
rjmp dal
cis
clc
clz
186
Глава 8
Листинг 8Л. Продолжение
cln
dec kor
brmi hkj
nop
rjmp dal
hkj: nop
nop
ret
/подпрограмма движение 40 импульсов вправо
oveprav: nop
clr kor
Idi kor, $28 /сорок импульсов
clr pur
cln
cis
clr pur
or add, adc2
out PORTD, add ч /запуск левого двигателя motl
dais: nop
sbi PORTD, 5 /установить 1 в порт D5
nop sbic PORTD, 5 /пропустить команду если сброшен
rjmp cis clc clz cln dec brmi nop rjmp hkjs: nop nop ret /подпрограмма ovepr: nop clr Idi clr cln cis clr or out dais kor hkjs dais движение 40 kor kor, $28 pur pur add, adc2 PORTD, add импульсов прямо /сорок импульсов /запуск левого и правого двигателя
motl da Ip: nop
Проходчик лабиринта
187
Листинг ал. Продолжение
sbi PORTD, 5 /установить 1 в порт D5
пор
sbic PORTD, .5 /пропустить команду если сброшен
rjmp dalp
cis
clc
clz
cln
dec kor
brmi hkjp
nop
rjmp dalp
hkjp: nop
nop
ret
/Подпрограммы обработки данных
/Настройка АЦП
adcn: nop
nop
clr tmp
awe: nop
cpi tmp, $04
brsh ass
out ADMUX, add /коммутация входов АЦП
clr tmp2
clr tmp3
out ADCSR, adc2 /запуск АЦП на преобразование
/Сохранение данных АЦП
in tmp2, ADCL
in tmp3, ADCH
mov r2, tmp2
mov r3, tmp3
mov r4, r2
mov r5, r3
mov r6, r4
mov r7, r5
inc tmp
rjmp awe
/среднее арифметическое действие
ass: nop
clr r8
clc
add tmp2, r2
adc r9, r8
add tmp2, r4
188
Глава 8
Листинг 8.1. Окончание
adc r9, r8
add tmp2, r6
adc clc r9, r8
Isr r9
ror tmp2
Isr r9
ror tmp2
clr clc r9
add tmp3, r3
adc r9, r8
add tmp3, r5
adc r9, r8
add tmp3, r7
adc clc r9, r8
Isr r9
ror tmp3
Isr r9
ror nop ret tmp3
/Подпрограмма задержки включения
zader: nop
wdr
Idi YL, low(9999)
Idi YL, high(9999)
ddd: sbiw YL, 1
brne ddd
ret
.EXIT
Листинг 8Х НЕХ-файл тестовой программы для проходчика лабиринта
:020000020000FC
:1000000013C000000000000000000000000000001D
: ЮООЮООООООООООООООООООООООООООООООООООЕО
: 1000200000000000000000000000002700E004BBQA
:1000300005BB00270FEOQ1BB002702BB0FE50DBF8A
:1000400004EOOEBF000000000027112722273327FD
:10005000662741E055270ED0000088D054E04427A1
:1000600022D0000083D041E054E036D000007ED0A2
:100070000000E9CF0000882788E2FF27A894C894F1
:10008000FF27452B42BB0000949A00009499FBCFB8
Проходчик лабиринта
189
Листинг 8*2. Окончание
:10009000С89488949894A8948A9512FOOOOOF3CF9D
:1000A0000000000008950000882788E2FF27A89438
:1000B000C894FF27452B42BB0000959A00009599F4
:1000C000FBCFC89488949894A8948A9512F0000065
:1000DOOOF3CF0000000008950000882788E2FF2782
:1000E000A894C894FF27452B42BB0000959A0000B6
:1000F0009599FBCFC89488949894A8948A9512F007
:100100000000F3CF00000000089500000000002769
:100110000000043070F447B92227332756B924B1CQ
: 1001200035В1222Е332Е4 22С532С642С7 52С03958 2
:10013000EFCF000088248894220D981C240D981C71
: 10014000260D981C88949694279596942795992423
:100150008894330D981C350D981C370D981C889485
:100160009694379596943795000008950000А895С9
:0A017000CFE0C7E22197F1F70895F0
:00000001FF
Рабочая программа (листинги 8.3 и 8.4) начинается с инициализа-
ции портов ввода-вывода и конфигурирования выводов микроконтрол-
лера, после чего проверяется напряжение на фотодатчиках. Для этого
считываются данные пяти АЦП. Перед считыванием данных АЦП пере-
страивается, мультиплексор микроконтроллера коммутирует данные
с разных выводов в АЦП.
Преобразованные данные записываются сразу в ячейки ОЗУ микро-
контроллера. Поскольку данные АЦП — двухбайтные, в ОЗУ исполь-
зуются по две ячейки для младшего байта и старшего байта. Запись
производится последовательно, с увеличением адреса ОЗУ на два. Со-
гласно справочным данным, [14] область ОЗУ начинается с $0060 и за-
канчивается S025F.
После записи данные считываются, но в особом порядке. Для того
чтобы не запутаться, адреса ОЗУ фиксированы, а “дублеры” адресов:
переменные per и pur — могут изменятся в зависимости от результата
неравенства. Например, прочитан первый байт и второй байт ячейки
ОЗУ. Эти байты сравниваются путем вычитания. Если разница — отри-
цательная, то per равно pur, если же разница — положительная, то per
остается прежним.
Далее следует цикл. Алгоритм поиска наибольшего может быть за-
писан в виде цикла или отдельных действий, прописанных в программе.
Вторая часть программы обрабатывает полученный результат и ус-
танавливает направление движения с контролем поворота каждого ко-
леса. Поворот фиксирован и определяется количеством импульсов фо-
190
Глава 8
тодатчика, которые считываются обычным способом: проверяется еди-
ничный уровень на выводах 6 и 11 микроконтроллера (порт D).
Листинг 8.3. Рабочая программа для проходчика лабиринта
.include "D:\Program Files\Atmel\AVR Studio\Appnotes\m8def.inc"
/Автор: Кравченко А.В.
/Дата: 31.10.2009
/Версия: 1.1.2
/Имя файла: Labi.asm
/Микроконтроллер: AVR mega8.
/Тактовая частота: 8 МГц
/Питание: не стабилизированное 4,5 В
. list
def adr = rO / Рабочий регистр
def tmp = Г16 / Рабочий регистр
def tmpl = rl7 / Рабочий регистр
def tmp2 = rl8 / Рабочий регистр
def tmp3 = rl9 / Рабочий регистр
def add = r20 / Рабочий регистр
def adc2 = r21 / Рабочий регистр
def per = r22 / Рабочий регистр
def adres = r23 / Рабочий регистр
def kor = r24 / Рабочий регистр
def tmp4 = r25 / Рабочий регистр
def pur = r31 / Рабочий регистр
def nom = r31 / Рабочий регистр
. cseg
. org 0
rjmp RESET
пор /rjmp EXT_INT0 - прерывание от вывода
пор ;rjmp EXT_INT1 - прерывание от вывода
пор /rjmp TIMER2_COMP - прерывание от таймера
пор ;rjmp TIMER2_OVF - прерывание от таймера
пор ;rjmp TIME-CMPB - прерывание от таймера
пор ;rjmp TIMER1_CAPT - прерывание от таймера
пор /rjmp TIMER1_COMPA - прерывание от таймера
пор /rjmp TIMER1_COMPB - прерывание от таймера
пор /rjmp TIMER1_OVF - прерывание от таймера
пор ;rjmp TIMERO_OVF - прерывание от таймера
пор ;rjmp SPI_STC - прерывание не используется
пор ; r jmp UCASRT_RXC - прерывание от USART
пор /rjmp UCASRTJJDRE - прерывание от USART
пор /rjmp UCASRT_TXC - прерывание от USART
Проходчик лабиринта
191
Листинг Продолжение
пор ;rjmp ADC - прерывание от АЦП
пор ;rjmp EE_] RDY - прерывание от таймера
пор ;rjmp ANA _COMP - прерывание от компаратора
пор ;rjmp TWI* - прерывание от TWI
пор ;rjmp SPM_ _RDY - прерывание не используется
.org 20
;настройка RESET: пор порта В
clr tmp
Idi tmp, $00 ;PC0-5 -вход
out DDRC, tmp
out PORTC, tmp ;обнулить порт С
clr tmp
Idi tmp, $0F ;PD4-7 -вход
out DDRD, tmp
clr tmp
out PORTD, tmp ;обнулить порт D
;настройка программного стека
Idi tmp, low(RAMEND) ;указатель стека
out SPL, tmp ;младший байт стека
Idi tmp, high(RAMEND) ;указатель стека
out SPH, tmp ;старший байт стека
пор
;Начало программы
nStart: nop
;сброс всех значений
clr tmp
clr tmpl
clr tmp2
clr tmp3
;вход в подпрограмму опроса АЦП1
пор
Idi add, $4 0 /источник питания, ADCO,
Idi • adc2, $C5 /одиночное запуск, 1/32
;опрос уровня
rcall adcn
clr r27
Idi r26, $62 ;запись в ОЗУ младшего байта
st x, tmp2
Idi r26, $63 ;запись в ОЗУ старшего байта
st х, tmp3
;вход в подпрограмму опроса АЦП2
nop
Idi add, $41 ;источник питания, ADC0,
Idi adc2, $C5 /одиночное !, запуск, 1/32
192
Глава 8
Листинг &з< Продолжение
;опрос уровня
rcall adcn
clr r27 Idi r26, $64 запись в ОЗУ младшего байта
st х, tmp2 Idi r26, $65 запись в ОЗУ старшего байта
; вход st x, tmp3 в подпрограмму опроса АЦПЗ
nop Idi add, $43 источник питания, ADC0,
Idi adc2, $C5 ; одиночное, запуск, 1/32
;опрос уровня
rcall adcn
clr r27 Idi r26, $66 запись в ОЗУ младшего байта
st x, tmp2
Idi r26, $67 запись в ОЗУ старшего байта
; вход st x, tmp3 в подпрограмму опроса АЦП 4
nop Idi add, $44 ; источник питания, ADC0,
Idi adc2, $C5 ; одиночное, запуск, 1/32
;опрос уровня
rcall adcn clr r27 Idi r26, $68 запись в ОЗУ младшего байта
st x, tmp2 Idi r26, $69 запись в ОЗУ старшего байта
; вход st x, tmp3 в подпрограмму опроса АЦП5
nop
Idi add, $45 ; источник питания, ADC0,
Idi adc2, $C5 ; одиночное, запуск, 1/32
;опрос уровня
rcall adcn clr r27 Idi ' r26, $70 запись в ОЗУ младшего байта
st x, tmp2 Idi r26, $71 запись в ОЗУ старшего байта
st x, tmp3 nop Idi adres, $61 clr per Idi kor, $05 clr nom
rew: пор
Проходчик лабиринта
193
Листинг 8.3. Продолжение
/чтение первого байта данных
inc adres
row: nop
mov per, adres
clr tmp
mov r27, adres
Id inc tmpl, X adres /чтение из ОЗУ, младший байт
clr tmp
mov r27, adres
Id tmp2, X /чтение из ОЗУ, старший байт
nop
/чтение второго байта данных
inc adres
mov pur, adres
clr tmp
mov r27, adres
Id tmp3, X /чтение из ОЗУ, младший байт
inc adres
inc nom
clr tmp
mov r27, adres
Id tmp4, X /чтение из ОЗУ, старший байт
/двухбайтное вычитание
cis
clc
clz
cln
sub tmpl , tmp3 /Вычитание младшего байта
проверка на ноль старшего байта
clr tmp
rol tmp
sub tmp2 , tmp 4 /Вычитание старшего байта с заемом
sub tmp2 , tmp
/проверка результата на отрицательное значение
brmi dal
пор mov adres, per /адрес данных прежний
cis clc clz cln dec kor /уменьшение количества сравнений
brmi kon / (всего 5) /значение отрицательное?
/проверка окончания неравенств переменных
Глава 8
194
Листинг 8.3. Продолжение
rjmp row'
;переменная меняется
dal: пор
mov adres, pur ;адрес данных изменен
cis
clc
clz
cln
dec kor
brmi kon /значение отрицательное?
;проверка окончания неравенств переменных
rjmp row
;окончание неравенств переменных
kon: nop
/проверка j полученного адреса adres и ра определения
вращения
mov nom, adres
cis
clc
clz
cln
cpi nom, $65 /адрес прямо 40 40?
brbs 1, Spram
nop
mov nom, adres
cis
clc
clz
cln
cpi nom, $69 /адрес влево 100?
brbs 1, Slevsto
nop
mov nom, adres
cis
clc
clz
cln
cpi nom, $67 /адрес влево 40?
brbs 1, Slev
nop
mov nom, adres
cis
clc
clz
cln
cpi nom, $63 ;адрес право 40?
скорости
Проходчик лабиринта
195
Листинг 8.3. Продолжение
brbs 1, Sprav
nop
mov nom, adres
cis
clc
clz
cln
cpi nom, $61 /адрес право 100?
brbs 1, Spravsto
nop
Spram: nop
rjmp Spramo
nop
Slev: nop
rjmp Slevo
nop
Slevsto: nop
rjmp Slevstoo
nop
Sprav: nop
rjmp Spravo
nop
Spravsto: nop
rjmp Spravstoo
nop
;Выполнение цикла вращения колес
;сброс всех значений
Slevo: clr tmp
clr tmpl
clr tmp2
clr tmp3
clr per
Idi add, $01 /движение влево
clr adc2
rcall ovelev
nop
rcall zader
nop
rjmp nstart
Slevstoo: clr tmp
clr tmpl
clr tmp2
clr tmp3
clr per
Idi add, $01 /движение влево
clr adc2
100
196
Глава 8
Листинг Продолжение
rcall ovelev
nop
rcall zader
nop
rcall ovelev
nop
rcall zader
nop
rjmp nstart
Spravo: clr tmp
clr tmpl
clr tmp2
clr tmp3
clr per
Idi adc2, $04 ;движение вправо
clr add
rcall oveprav
nop
rcall zader
nop
rjmp nstart
Spravstoo: clr tmp
clr tmpl
clr tmp2
clr tmp3
clr per
Idi adc2, $04 ;движение вправо 100
clr add
rcall oveprav
nop
rcall zader
nop
rcall oveprav
nop
rcall zader
nop
rjmp nstart
Spramo: clr tmp
clr tmpl
clr tmp2
clr tmp3
clr per
Idi add, $01 ;движение прямо
Idi adc2, $04
rcall ovepr
nop
Проходчик лабиринта
197
Листинг 3.3. Продолжение
rcall zader
nop
rjmp nstart
/подпрограмма движение 40 импульсов влево
ovelev: nop
clr kor
Idi kor, $28 /сорок импульсов
clr pur
cln
cis
clr pur
or add, adc2
out $12, add /запуск левого двигателя motl
nop
daler: nop
sbi PORTD, 4 /установить 1 в порт D4
nop
sbic PORTD, 4 /пропустить команду если сброшен
rjmp daler
cis
clc.
clz
cln
dec kor
brpl daler
nop
ret
/подпрограмма движение 40 импульсов вправо
oveprav: nop
clr kor
Idi kor, $28 /сорок импульсов
clr pur
cln
cis
clr pur
or add, adc2
out PORTD, add /запуск левого двигателя motl
dais: nop
sbi PORTD, 5 /установить 1 в порт D5
nop
sbic PORTD, 5 /пропустить команду если сброшен
rjmp dais
cis
clc
clz
cln
198
Глава 8
Листинг 8>3< Прадстжение
dec ког
brmi hkjs
nop
rjmp dais
hkjs: nop
nop
ret
/подпрограмма движение 40 импульсов прямо
ovepr: nop clr Idi clr cln cis clr or out kor kor, $28 pur /сорок импульсов
pur add, PORTD, adc2 add
/запуск левого двигателя mot 1
dalp: nop sbi nop PORTD, 5 /установить 1 в порт D5
hkjp: sbic rjmp cis clc clz cln dec brmi nop rjmp nop nop ret PORTD, dalp kor hkjp dalp 5 /пропустить команду если сброшен
;Подпрограммы обработки данных
/Настройка АЦП
adcn: пор
пор
clr tmp
awe: пор
cpi tmp, $04
brsh ass
out ADMUX, add /коммутация входов АЦП
clr tmp2
clr tmp3
out ADCSR, adc2 / запуск АЦП на преобразование
Проходчик лабиринта
199
Листинг 8.3. Продолжение
;Сохранение in in mov данных АЦП tmp2, ADCL tmp3, ADCH r2, tmp2
mov mov r3, tmp3 r4, r2
mov mov r5, r3 r6, r4
mov inc rjmp r7, r5 tmp awe
;среднее арифметическое действие
ass: nop clr clc add adc add adc add adc clc Isr r8 tmp2, r2 r9, r8 tmp2, r4 r9, r8 tmp2, r6 r9, r8 r9
ror Isr ror clr clc add adc add adc add adc clc Isr ror Isr ror nop ret tmp2 r9 tmp2 r9 tmp3, r3 r9, r8 tmp3, r5 r9, r8 tmp3, r7 r9, r8 r9 tmp3 r9 tmp3
/Подпрограмма задержки включения
zader: пор
wdr Idi YL, low(9999)
200
Глава 8
Листинг ВЛ Окончание
Idi YL, high(9999)
ddd: sbiw YL, 1
brne ddd
ret
.EXIT
Листинг 8 А НЕХ*файл рабочей программы для проходчика лабиринта
: 020000020000FC
: 1000000013C000000000000000000000000000001D
: ЮООЮООООООООООООООООООООООООООООООООООЕО
:1000200000000000000000000000002700Е004ВВОА
:1000300005BB00270FE001BB002702BB0FE50DBF8A
:1000400004E00EBF000000000027112722273327FD
:10005000000040E455EC25D1BB27A2E62C93A3E693
:100060003C93000041E455EC1CD1BB27A4E62C9343
:10007000A5E63C93000043E455EC13D1BB27A6E66C
:100080002C93A7E63C93000044E455EC0AD1BB272F
:10009000A8E62C93A9E63C93000045E455EC01D179
:1000A000BB27A0E72C93A1E73C93000071E66627ED
:1000B00085EOFF27000073950000672F0027B72FOA
:1000C0001C9173950027B72F2C9100007395F72F83
:1000D0000027B72F3C917395F3950027B72F9C917C
:1000E000C89488949894A894131B0027001F291B78
:1000F000201B4AF00000762FC89488949894A89406
:100100008A9552F0D9CF00007F2FC8948894989494
:10011000А8948A950AF0D0CF0000F72FC89488944D
:100120009894A894F53609F10000F72FC8948894A4
:100130009894A894F936F9F00000F72FC8948894А1
:100140009894A894F736A1F00000F72FC8948894EB
:100150009894A894F33691F00000F72FC8948894EF
:100160009894A894F13669F00000000045C00000A2
:1001700000000АС00000000013С00000000020С002
: 100180000000000029С00000002711272227 332784
:10019000662741E055273CD00000B4D0000053CF83
:1001А0000027112722273327662741E0552730D023
:1O01BOO0O0OOA8DOO00O2CDOO0O0A4D0OQ0O43CF45
:1001C0000027112722273327662754E0442737D0FA
:1001D000000098D0000037CF0027112722273327AF
:1001E000662754E044272BD000008CD0000027D095
:1001F000000088D0000027CF0027112722273327AF
:10020000662741E054E034D000007CD000001BCFD2
: 100210000000882788E2FF27A894C894FF274 52B71
:1002200042BB00000000949A00009499FBCFC89450
:1002300088949894A8948A95AAF7000008950000DD
:10024000882788E2FF27A894C894FF27452B42BB44
:100250000000959A00009599FBCFC89488949894D3
Проходчик лабиринта
201
Листинг 8.4. Окончание
:10026000A8948A9512F00000F3CF000000000895D2
:100270000000882788E2FF27A894C894FF27452В11
:1002800042BB0000959A00009599FBCFC8948894D2
:100290009894A8948A9512F00000F3CF0000000013
:1002А00008950000000000270000043070F447B9F2
:1002В0002227332756В924В135В1222Е332Е422СВ2
:1002C000532C642C752C0395EFCF00008824889460
:1002D000220D981C240D981C260D981C8894969429
:1002Е00027959694279599248894330D981C350D5D
:1002F000981C370D981C889496943795969437954A
:10030000000008950000A895CFE0C7E22197F1F71B
:0203100008954Е
:00000001FF
Конструкция
Общий вид робота представлен на рис. 8.14.
Рис. 8.14. Проходчик лабиринта
Для сборки конструкции необходимо изготовить отдельные узлы.
Каркас робота склеен из оргстекла толщиной 5 мм (рис. 8.15). Чертежи
каркаса и заднего колеса представлены на рис. 8.16. Вначале на орг-
стекле ручкой для оптических дисков расчерчивается боковая деталь
каркаса. Затем лобзиком вырезаются две треугольные детали. Они сжи-
маются струбциной так, чтобы края деталей совпадали, и устанавлива-
202
Глава 8
ются в тиски. В тисках обрабатываются боковые поверхности деталей
и высверливаются два отверстия диаметром 2,8 мм для крепления рас-
порок. Посередине деталей вырезается полукруг для установки двигате-
лей. Эта операция требует от радиолюбителя повышенного внимания
и неторопливости при распилке заготовки.
Рис. 8.16. Чертежи каркаса и заднего колеса
Для прочности каркаса изготавливаются две распорки из оргстекла
толщиной 5 мм. Длина распорок — 40 мм, ширина — 10 мм. В распор-
Проходчик лабиринта
203
ках сбоку сверлятся два отверстия диаметром 2,6 мм и глубиной 15 мм.
Метчиком М3 нарезается резьба. В принципе, для этого можно обойтись
и без метчика — достаточно смазать винт вазелином и закрутить его
в отверстия с помощью электрошуруповерта.
Посередине передней распорки высверливается отверстие диамет-
ром 2 мм для оси переднего ролика (в качестве переднего колеса ис-
пользуется прижимной ролик плеера). В верхнем торце каждой тре-
угольной детали высверливаются четыре отверстия и нарезается резьба
Ml,8. Это необходимо для крепления батарейного отсека и платы на
каркасе. К внутренней стенке каждой половинки каркаса крепится плата
с двигателем (рис. 8.17).
Рис. 8.17. Крепление двигателей на каркасе
Это необходимо для того, чтобы каркас был прочным и не лопнул
в месте выреза полукруга. Плату можно приклеить к каркасу, весь узел
посадить на герметик или же просверлить по два отверстия с каждой
стороны стенок диаметром 1,8 мм и прикрутить винтами с резьбой М2.
Следующий этап — изготовление задних колес. Их выполняют из
использованной катушки для проволочного припоя (ее внешний диа-
метр — 46 мм). Катушка разрезается пополам, а внутрь цилиндра вклеи-
ваются маленькие колеса от ненужных игрушек (рис. 8.18).
204
Глава 8
Рис. 8.18. Изготовление колес
Затем из картона вырезаются и наклеиваются на наружный диск ка-
тушки три окружности. Вокруг картонных окружностей и диска при-
клеивается резиновая лента или наматывается изолента. Лишнее удаля-
ется острым ножом. Автор использовал готовые резиновые кольца (при-
меняются в сантехнике).
В центре колеса необходимо высверлить отверстие для оси диамет-
ром 2,6 мм. Ось для задних колес изготовлена из колесиков шариковой
мыши. Преимущество таких осей — наличие готового колесика с сепа-
рацией для фотодатчиков, но, к сожалению, они — очень непрочные,
поэтому при оперативном программировании робота разъем от прог-
рамматора к плате управления необходимо вставлять на весу, а не при-
жимать сверху платы управления, чтобы не сломать оси задних колес.
На одну из осей надевается трубочка диаметром 3,5..5,0 мм. Затем сги-
бается и устанавливается посередине полуосей трубка (см. рис. 8.Ю).
Таким образом получается муфта для задней подвески, которая выпол-
няет роль держателя оси в области соосности. Кроме того, муфта созда-
ет небольшое торможение, необходимое для исключения силы инерции
при движении конструкции.
Проходчик лабиринта
205
Далее устанавливаются все колеса и надеваются пассики от двига-
телей к колесам рис. 8.19.
97,66
Рис. 8.19. Схема установка колес и пассиков
Переднее колесо позаимствовано от прижимного ролика кассетных
плееров. В этом случае ось поворота ролика не совпадает с серединой
скобы. Во время движения он начнет разворачиваться, а поскольку кор-
пус — треугольной формы, а ось переднего колеса размещена ниже оси
задних колес, передняя часть корпуса начнет опускаться, т.е. возникнет
эффект “зарывания носа” платформы. Во избежание этого, скоба ролика
зафиксирована резиновой ниткой (рис. 8.20).
Рис. 8.20. Скоба ролика зафиксирована резиновой ниткой
206
Глава 8
При повороте робота ролик также будет поворачиваться на неболь-
шой угол, и его ограничителем будет служить резиновая нитка. В ре-
зультате мы избавляемся от недостатков конструкции переднего колеса.
Впрочем, это решение ограничивает угол поворота и маневренность
робота. Для того чтобы избежать проблем с управлением поворотом, за-
рубежные радиолюбители устанавливают в передней части платформы
шарик, свободно вращающийся в цанге (рис. 8.21).
Рис. 8.21. Установка вместо переднего ролика свободно вращающегося шарика
В результате робот становится более маневренным. Требования для
шарика: он должен легко скользить в цанге и быть относительно боль-
шим по диаметру (но не выходящим за габариты робота).
В продолжение сборки, устанавливается батарейный отсек и плата
управления. Провода от двигателя и батарейного отсека зажимаются
в разъемах платы. На панельку платы управления устанавливается за-
программированный микроконтроллер. Робот готов к настройке.
Настройка
Настройка начинается без микроконтроллера на плате управления.
Проверяется монтаж элементов и подается питание. Проверяется на-
Проходчик лабиринта
207
пряжение на выводе 1 фотодатчиков PHS1-PHS5 при затемненном со-
стоянии (датчик закрывается бумагой черного цвета) и в обычном, ос-
вещенном состоянии (плата подносится плоскостью датчика параллель-
но белой бумаге на расстояние 1..5 см). С помощью подстроечных рези-
сторов R6-R10 настраивается одинаковый уровень напряжения в обоих
состояниях засветки фотодатчика. На выводе 2 подстроечного резистора
R14 настраивается напряжение 0,5 В. На коллекторе Tl, Т2 осциллогра-
фом проверяются импульсы при прокрутке полуосей задних колес.
Как только все элементы схемы настроены и работают исправно,
в панельку (при выключенном питании) можно установить микрокон-
троллер с тестовой программой, которая поочередно включает двигате-
ли, а также при настройке R14 изменяет скорость вращения валов (неза-
висимо от засветки фотодатчиков PHS1-PHS5).
Если тестовая программа отработала успешно, в микроконтроллер
записывается рабочая программа. Робот помещается на поле и включа-
ется питание. Робот движется автоматически по линии лабиринта. Если
он сбивается с пути, то с помощью резистора R14 необходимо умень-
шить скорость вращения двигателей.
Эксплуатация
Установите модель в начало лабиринта, включите питание и запус-
тите таймер. Модель, преодолевшая лабиринт быстрее остальных, счи-
тается победителем. Во время соревнования поля лабиринтов заменяют-
ся различными, заранее подготовленными вариантами. Соревнования
проходят в несколько туров. Победитель определяется по количеству
набранных очков.
Глава 9_______
Светоэффект вращения
Светоэффекты применяются ежедневно во многих отраслях науки
и техники. Благодаря инерционности человеческого зрения, они очень
информативны. Что же касается вращающихся светоэффектов, то они
привносят зрелищность и разнообразие в любую рекламу, шоу и празд-
ник. С помощью небольшого количества элементов можно быстро со-
брать к празднику микроконтроллерную модель светоэффекта враще-
ния.
Дизайн конструкции известен давно и часто применяется в быту
(например, вращающееся информационное табло установлено на же-
лезнодорожном вокзале в г. Харьков). Наиболее распространены свето-
эффекты вращения двух видов: “Юла” и вращение штанги со стойкой
светодиодов (рис. 9.1).
Рис. 9.1. Два вида наиболее распространенных светоэффектов вращения
Светоэффект вращения
209
Автор собрал небольшую настольную модель (рис. 9.2), отличаю-
щуюся простотой по сравнению с конструкциями зарубежных радио-
любителей [22].
Рис. 9.2. Настольная модель, реализующая светоэффект вращения
Такая модель может использоваться для показа рекламы, в качестве
украшения праздничного стола и т.д. Основная ее отличительная осо-
бенность заключается в том, что двигатель конструкции размещен в том
же механическом узле, что и плата управления, блок питания и свето-
диоды. Это позволяет отказаться от скользящих контактов, передающих
питание схеме управления, и тем самым упростить механический узел
и повысить надежность и энергонезависимость схемы.
Все механические детали и двигатель позаимствованы от старого
привода CD-ROM. Дизайн конструкции представлен на рис. 9.3: 1 —
стопорные ограничители выключателя питания; 2 — корпус батарейно-
го отсека; 3 — батареи питания типа ААА; 4 — двигатель вращения;
5 — основание конструкции; 6 — магнит; 7 — датчик Холла; 8 — све-
тодиодная линейка; 9 — плата управления; 10 — колпачок выключателя
питания.
210
Глава 9
Рис. 9.3. Дизайн конструкции
Теоретическое построение светоэффекта
Для того чтобы при вращении светодиоды включались в фиксиро-
ванных позициях, необходимо задать частоту вывода кода на светодио-
ды и синхронизировать ее с вращением конструкции. Для синхрониза-
ции используется стартовый импульс от датчика Холла. За первые не-
сколько оборотов микроконтроллер рассчитывает скорость вращения
и разбивает окружность на сегменты.
В окружности используется 1/3 сегмента для вывода информации
(рис. 9.4). Сегмент делится на пять букв по пять отрезков (в данном слу-
чае — слово “РАДИО”). Так, для написания слова “РАДИО” в каждой
букве четыре отрезка засвечиваются, а пятый — нет. Тем самым созда-
ется промежуток между буквами.
По высоте буква построена из семи светодиодов. При вращении
светодиоды засвечиваются с определенным кодом, в результате чего
получается изображение букв и слова (см. рис. 9.4).
Структурная схема
Структурная схема светоэффекта вращения (рис. 9.5), питается от
батарейного блока питания на 4,5 В. Нестабилизированное напряжение
питает микроконтроллер ATtiny26. Напряжение 4,5 В также подается на
стабилизатор 3,6 В, который питает переменный резистор R.
Светоэффект вращения
211
Стартовый импульс формирует датчик Холла при вращении конст-
рукции над магнитом, который находится на траектории движения дат-
чика. Формируемый импульс попадает на микроконтроллер, где запус-
кается программа вывода кода на светодиоды. Временные отрезки меж-
ду выводом кода получают путем деления времени полного оборота
конструкции на три сегмента по 23 отрезка, т.е. длительность полного
оборота делится на 69 отрезков. Для засветки используется только один
сегмент дуги.
Рис. 9.4. Схема построения светоэффекта вращения
212
Глава 9
Рис. 9.5. Структурная схема светоэффекта вращения
Для того чтобы получить возможность ручного управления, из по-
лученных данных после деления вычитается код АЦП. На АЦП подает-
ся напряжение с переменного резистора R и с источника опорного на-
пряжения. Для стабильности отсчета напряжения используется внут-
ренний опорный источник напряжения микроконтроллера. АЦП форми-
рует код, пропорциональный входному напряжению на переменном ре-
зисторе R. Вычитая из времени отрезка код АЦП, мы получаем возмож-
ность уменьшать длину букв.
После арифметических преобразований и получения данных о вре-
меннь/х отрезках в порт ввода-вывода подается код для включения све-
тодиодов. Поскольку микроконтроллер выдает слабый ток для управле-
ния светодиодами, на его выходе установлены транзисторы, усилители
тока Q1-Q7. Ток светодиодов LED1-LED7 протекает через полевые
транзисторы Q1-Q7.
Принципиальная схема
Принципиальная схема светоэффекта показана на рис. 9.6. Питание
поступает от батарейного отсека на контакты JP1, JP2 через выключа-
тель S1. Двигатель вращения питается от контактов JP3, JP4. Нестаби-
лизированное напряжение 4-4,5 В питает схему управления на микро-
контроллере и выходной каскад на транзисторах Q1-Q7. Для синхрони-
зации работы микроконтроллера используется кварцевый резонатор Q8
на 4 МГц. Стабильность работы резонатора поддерживают конденсато-
ры СЗ, С4.
Светоэффект вращения
213
+4,5 V MOTOR О V
BSS123
Рис. 9.6. Принципиальная схема светоэффекта вращения
214
Глава 9
При включении питания микроконтроллер устанавливается в ис-
ходное состояние по сигналу сброса, формируемому цепочкой R8, С5.
В начале программы выполняется пустой цикл в ожидании стартового
импульса. Одновременно, при подаче питания включается двигатель
вращения.
Во время вращения стартовый импульс отсчитывается датчиком
Холла 1С2, который реагирует на магнитное поле магнита в основании
конструкции. В выходном каскаде датчика Холла присутствует транзи-
стор с открытым коллектором. В качестве его нагрузки служит подтяги-
вающий резистор порта микроконтроллера, однако, если сигнал от дат-
чика будет плохо восприниматься входом микроконтроллера, необхо-
димо допаять резистор R* = 950 Ом.
При прохождении датчиком магнитного поля магнита формируется
импульс, который подается на вход INTO (РВ6) микроконтроллера.
В результате запускается подпрограмма обработки внешнего прерыва-
ния, после выполнения которой кодированный сигнал выдается в порт
А. Этот порт управляет ключами на транзисторах Q1-Q7, которые ком-
мутируют ток на светодиодах LED1-LED7.
Время засветки светодиодов автоматически рассчитывается микро-
контроллером с помощью встроенных таймеров. Для ручного управле-
ния временем засветки используется переменный резистор Р1. Для по-
лучения стабильного напряжения на Р1 необходима стабилизация пита-
ния, что реализует цепочка стабилизатора Cl, R9, DI, С2. В результате
стабильные данные с Р1 поступают на вход АЦП микроконтроллера,
что позволяет оперативно изменять длину слова.
Алгоритм работы
Блок-схема алгоритма работы светоэффекта показана на рис. 9.7.
Как было отмечено ранее, для полноценной работы прибора необходима
синхронизация при вращении. Для того чтобы начать процесс вычисле-
ний и синхронизации, программа выполняет пустой цикл. Для активи-
зации процесса вывода информации в программе используется преры-
вание микроконтроллера по сигналу INTO, задающее синхронизацию
вывода букв.
Следует отметить, что программа реализует следующие режимы
синхронизации:
• режим, не зависящий от синхронного вывода информации по INTO;
• режим синхронизации вывода информации по INTO;
• режим синхронизации по памяти (запоминание предыдущего зна-
чения и синхронизация по внутреннему отсчету).
Светоэффект вращения
215
Рис. 9.7. Алгоритм работы светоэффекта вращения
216
Глава 9
Смешанные действия в программе позволяют работать устройству
в любых условиях — даже при отсутствии синхронизации от INTO или
в случае сбоев сигнала INTO.
Для независимой синхронизации работы устройства, задействованы
два таймера/счетчика микроконтроллера. Таймер 0 измеряет время пол-
ного оборота устройства вокруг оси. Таймер 1 отсчитывает измеренное
таймером 0 время полного оборота. По окончанию отсчета он независи-
мо от сигнала INTO генерирует прерывание.
В том случае, если сигнал INTO был пропущен, прерывание от тай-
мера 1 осуществляет вывод букв на светодиодную матрицу. Если сигнал
от датчика Холла INTO сгенерирован вовремя, то программа переходит
из цикла по вектору прерывания на подпрограмму обработки прерыва-
ния INTO. В этой подпрограмме таймер 0 останавливается, и считыва-
ются данные старшего и младшего разряда таймера 0.
Затем включаются в работу два таймера: 0 и 1. Таймер 0 выполняет
роль измерителя времени, и по его данным загружается таймер 1, кото-
рый через отсчитанный момент времени генерирует прерывание. Эта
процедура необходима в случае пропуска сигнала с датчика Холла.
В обеих подпрограммах задается константа S = l. Она позволяет
выйти из цикла в начале программы и запускает алгоритм вычисления
времени вывода кода. При выходе из вектора прерывания программа
выходит из цикла и переходит на следующий шаг.
Как было отмечено ранее, схема поддерживает ручное управление.
Данные с регулятора поступают на АЦП> где обрабатываются и записы-
ваются в ячейку памяти D. Затем микроконтроллер делит st, ml на 69
отсчетов. Результат деления заносится в ячейку памяти м. Наконец, вы-
полняется арифметическое действие м = м + D. Число м задает время за-
светки светодиодов на коротком участке окружности.
Далее выполняется цикл вывода информации на участках трех сег-
ментов окружности. На первом сегменте выводится слово “РАДИО”, на
оставшихся двух сегментах информация не выводится. По окончанию
вывода программа переходит в начало, где задается константа S = 0, ко-
торая переводит программу в бесконечный цикл в ожидании прерыва-
ния от таймера 1 или от входного стартового импульса INTO. Процесс
повторяется сначала.
Всегда существует вероятность наложения процедур друг на друга,
поэтому автор использовал только один сегмент окружности. Кроме то-
го, сама конструкция выполнена из непрозрачного материала, и вывод
слова в оставшихся сегментах все равно не будет заметен. Отсутствие
идеального регулирования процесса может привести к размытому изо-
Светоэффект вращения
217
бражению слова или к подергиванию букв. В данном случае именно
этот процесс проверяется на микроконтроллере tiny26-8SU. Результат
проверки позволяет судить о качестве работы микроконтроллера.
Программа
Программа вывода слова начинается с установки конфигурирования
портов и системы прерывания. Для работы прерываний необходимо ус-
тановить разряд разрешения в регистре SREG, в регистре G1MSK — ак-
тивизировать прерывание с вывода INTO, а в регистре MCUCR — пре-
рывание по спадающему фронту сигнала на выводе. В этом случае мож-.
но избежать путаницы с сигналом в прохождении датчика мимо магни-
та.
В начале программы конфигурируются два таймера: 0 и 1. В стар-
ший разряд st и младший разряд ml записывается максимальное значе-
ние $ff. Задается s = 0. Программа начинает работать в пустом цикле,
пока не возникнет прерывание.
Для работы восьмиразрядных таймеров в реальном времени необ-
ходимо задать тактовую частоту f = fCik/1024, где fCik = 4 МГц. В этом
случае восьмиразрядный таймер (255 отсчетов) будет переполняться 15
раз в секунду, а двигатель с частотой оборотов w= 1000 об/мин будет
поворачивать вал 16 раз в секунду. Поскольку ось вала вращается быст-
рее, заблаговременное срабатывание таймера не произойдет.
Как только появился сигнал INTO, подпрограмма обработки преры-
вания INTO устанавливает s = 1 и запускает оба таймера. Вектор преры-
вания программы возвращается в точку прерывания цикла, и при усло-
вии S = 1 программа переходит на считывания уровня Р1 (см. рис. 9.6).
Одновременно, в векторе прерывания запускаются таймеры. Аналого-
вые данные с Р1 проходят арифметические преобразования, после чего
задается временная задержка между выводимыми кодами в порт В мик-
роконтроллера.
Далее программа поочередно выводит данные на светодиодную
матрицу. Подпрограмма выводит последовательно три сегмента дан-
ных: один сегмент занимает слово “РАДИО”, а два других — без за-
светки светодиодов. Код “прошивки” букв представлен в табл. 9.1.
Исходный код программы представлен в листинге 9.1, НЕХ-файл
для записи с помощью программатора в микроконтроллер — в листин-
ге 9.2.
218
Глава 9
Таблица 9.1. Код “прошивки” букв для светоэффекта вращения
Бук- ва Шаг Светодиоды Коды прошивки порта А
LED7 LED6 LED5 LED4 LED3 LED2 LED1 BIN HEX
Р 1 1 1 1 1 1 1 1 01111111 7F
2 1 0 0 1 0 0 0 1001000 48
3 1 0 0 1 0 0 0 1001000 48
4 0 1 1 0 0 0 0 0110000 30
5 0 0 0 0 0 0 0 0000000 00
А 6 0 1 1 1 1 1 1 0111111 3F
7 1 0 0 1 0 0 0 1001000 48
8 1 0 0 1 0 0 0 1001000 48
9 0 1 1 1 1 1 1 0111111 3F
10 0 0 0 0 0 0 1 0000001 01
д 11 0 1 1 1 1 1 1 0111111 48
12 1 0 0 0 0 0 1 1000001 41
13 1 0 0 0 0 0 1 1000001 41
14 0 1 1 1 1 1 1 0111111 48
15 0 0 0 0 0 0 1 0000001 01
и 16 1 1 1 1 1 1 1 1111111 7F
18 0 . 0 0 1 0 0 0 0001000 08
17 0 0 1 0 0 0 0 0010000 10
19 1 1 1 1 1 1 1 1111111 7F
20 0 0 0 0 0 0 0 0000000 00
О 21 0 1 1 1 1 1 0 0111110 ЗЕ
22 1 0 0 0 0 0 1 1000001 41
23 1 0 0 0 0 0 1 1000001 41
24 0 1 1 1 1 1 0 0111110 ЗЕ
Листинг 9.1. Программа управления светоэффектом вращения
.include "D:\Program Files\Atmel\AVR Studio\Appnotes\tn26def.inc"
/Автор: Кравченко А.В.
/Дата: 30.01.2009
;Версия: 1.1.4
/Имя файла: vrac.asm
/Микроконтроллер: AVR tiny26.
/Тактовая частота: 4МГц
/Питание: нестабилизированное 4,5 В
Светоэффект вращения
219
Листинг 9 Л. Продолжение
/Тестовая программа работы с INTO
. list
def tmp = Г16
def tmp2 = rl7
def tmp3 = rl8
def S = rl9
def pir = r20
def ml = r21
def st = r22
def tmpl = r23
def tmp4 = r24
def Y = r23
def X = r24
def M = r25'
def adr = rO
def prgl = r26
def prg2 = r27
def k = r28
def z = r29
def dig43 = r30
def dig21 = r31
cseg
org 0 rjmp rjmp RESET EXT—INTO /прерывание по входному сигналу
nop /rjmp EXT_PIN - прерывание не используется
nop /rjmp TIME—CMPA - прерывание от таймера
nop /rjmp TIME_CMPB - прерывание от таймера
nop ./rjmp TIME_OVF1 /прерывание от таймера
rjmp TIME_OVFO /прерывание от таймера
nop /rjmp UCI_STRT - прерывание от USI
nop ;rjmp UCI_OVF - прерывание от USI
nop /rjmp EE—RDY - прерывание от таймера
nop /rjmp ANA_COMP - прерывание от компаратора
nop /rjmp ADC - прерывание от АЦП
.org 20
;настройка порта В
RESET: пор
Idi tmp, high(RAMEND) /вершина стека
out S P, tmp
clr tmp
out DDRB, tmp
out PORTB, tmp /обнулить порт В
220
Глава 9
Листинг 9Л< продолжение
clr tmp
Idi tmp, $FF /РАО-PA7-выходы
out DDRA, tmp
/Конфигурация внешнего прерывания
/общее разрешение прерывания
Idi tmp, $80
out SREG, tmp
/Маска прерывания INTO
Idi tmp, $40 /прерывание INTO
out Idi GIMSK, tmp tmp, $00 /режим
/условие прерывания по НИЗКОМУ уровню на INTO
out MCUCR, tmp
/начало программы
Start: nop
clr s
clr tmp
out DDRA, tmp
out PORTA, tmp /обнулить порт В
Idi ml, $FF /максимальное значение таймера
Idi st, $FF /максимальное значение таймера
/Начало цикла
nStart nop
/сброс всех значений
clr ml
clr st
clr prgl
clr prg2
clr adr
/организация цикла отсчета
bset 7
clz
mov s, r9
cpi S, $01
brne nStart /S=0 переход ДА
nop
mov ml, tmp2
clr st
nop
/сбросить флаг прерывания SREG
bclr 7
/подпрограмма считывания PA7
/Подпрограмма работы АЦП
/Настройка АЦП
пор
пор
Светоэффект вращения
221
Листинг 9/L Продолжение
clr tmp
awe: nop
cpi tmp, $04
brsh ass
clr tmp3
Idi tmp3, $83 ;внутренний
out ADMUX, tmp3 ;коммутация
clr tmp2
clr tmp3
Idi tmp2, $C4 ;одиночное,
out ADCSR, tmp2 ;запуск АЦП
;Сохранение данных АЦП
in tmp2, ADCL
in tmp3, ADCH
mov r2, tmp2
mov r3, tmp3
mov r4, r2
mov r5, r3
mov r6, r4
mov r7, r5
inc tmp
rjmp awe
;среднее арифметическое действие
источник, вход ADC3
входов АЦП
запуск, 1/16
на преобразование
пор
clr r8
clc
add tmp2, r2
adc r9, r8
add tmp2, r4
adc r9, r8
add tmp2, r6
adc r9, r8
clc
Isr r9
ror tmp2
Isr r9
ror tmp2
clr r9
clc
add tmp3, r3
adc r9, r8
add tmp3, r5
adc r9, r8
add tmp3, r7
adc r9, r8
clc
Ill
Глава 9
Листинг 9Лч Продолжение
Isr r9
ror tmp3
Isr r9
ror tmp3
пор
mov dig43, tmp3
mov dig21, tmp2
;подпрограмма деления М=М/69
пор
;Делимое r7r6r5r4 делитель гЗг2 результат г5:г4 остаток гб
;* HexBCD - 32-разрядное двоичное число делить на 16-разрядное.
.★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★а*************
пор
/Пересылка данных в рабочие регистры
clr r7 /сброс ненужных разрядов
clr гб /сброс ненужных разрядов
clr г5 /сброс ненужных разрядов
clr гЗ /сброс ненужных разрядов
mov r4, st /делимое ml.st
Idi tmp, $45 /делитель 69 отсчетов
mov r2, tmp
Idi tmpl, $10 /делитель 16 разрядов
mov rO, tmpl
DCLK: nop nop
rcall nop HL2 ;подпрограмма с старшим полубайтом
rcall nop DE2 /проверка младшего полубайта
brcc nop PER1 /переход, если не было переноса
rcall nop INXH /восстановление старшего полубайта
PERI: nop
rcall nop HLMNBC /вычисление разницы старшего полубайта
brcs PER2 /переход, если перенос
out SREG, г17 /восстановление регистра состояния
PER3: nop
rcall nop INXD /восстановление младшего полубайта
rjmp PER4
PER2: nop
OUt' SREG, г17 /восстановление регистра состояния
brcs PER3 /переход, если перенос
Светоэффект вращения
223
Листинг 9.1. Продолжение
пор rcall DADB /восстановление старшего полубайта
PER4 : пор
clz
mov tmp3, rO
dec tmp3 /уменьшение 16 разрядов
mov rO, tmp3
brbc 1, DCLK /переход, если Z=0
nop
;Вычитание М= =M+D
mov tmp, r4
add dig21, tmp
mov tmp3, dig21
; цикл вывода информации
clr k
clr z
bonus; : nop
> inc k
clz
cpi k, $17 /первый сегмент
breq clZ ss
cpi k, $2E /второй сегмент
breq clZ cass
cpi k, $45 /третий сегмент
breq nop cass
;вывести в порт все нули
ss: out DDRA, tmp
out PORTA, tmp /обнулить порт А
mov r6, tmpl
mov r7, tmp4
rcall zader
mov tmpl, r6
mov tmp4, r7
nop
clr pir /константа для изменения всех сегментов
rcall nop opros
/вывести в порт код опроса
out PORTA, tmp /код в порт А
mov г6, tmpl
mov r7, tmp4
rcall zader
mov tmpl, r6
224
Глава 9
Листинг ал. Продолжение
mov tmp4, г 7
пор
rjmp bonus
/вывести в порт все нули
cass: пор
out DDRA, tmp
out PORTA, tmp /обнулить порт A
inc Z
cpi Z, $03 /все сегменты
brio bonus
nop
clr S
clr r9
/разрешение прерывания
/установить флаг состояния SREG
bset 7
rjmp Start
;подпрограмма прерывания по сигналу INTO
EXT_INT0: nop
in tmp, SREG /запомнить состояние регистра
Idi s, $01 /выход из цикла
mov r9, S'
/Чтение таймер 0, считывание данных
in tmp2, TCNTO
/работа таймера ТО с максимальным предварительным делением
Idi tmp3,$05
out TCCRO,tmp3 /максимальное деление СК/1024
Idi tmp3,$02
out TIMSK,tmp3 /разрешаем прерывания по
/переполнению от ТО
/Конфигурация таймера 1
/ Idi tmp3,$05
/ out TCCR1B,tmp3 /максимальное деление СК/1024
/ Idi tmp3,$04
/ out TIMSK,tmp3 /разрешаем прерывания по
/переполнению от Т1
nop
out SREG, tmp /восстановить регистр состояния
reti
/подпрограмма прерывания таймера 0
TIME_OVFO: пор
/работа таймера ТО с максимальным предварительным делением
Idi tmp3,$05
out TCCR0,tmp3 /максимальное деление СК/1024
Idi tmp3,$02
Светоэффект вращения
225
Листинг 9.1. Продолжение.
out TIMSK,tmp3 /разрешаем прерывания по
/переполнению от ТО
reti
/подпрограмма прерывания по сигналу от таймера 1
;TIME_OVF1: пор
/ reti
/подпрограмма с старшим полубайтом
HLMNBC : clc /сброс флага переноса /переслать гб во временный регистр /вычитание с заемом
mov sbc tmpl, . r6 tmpl, r2
mov r6, tmpl /сохранение в гб
mov tmp2, r7 /переслать г 7 во временный регистр
sbc tmp2, r3 /вычитание с заемом
mov r7z tmp2 /сохранение в г 7
ret
/восстановление старшего полубайта
DADB: mov tmpl, r6 /переслать г6 во временный регистр
add tmpl, r2 /сложение
mov r6, tmpl /сохранение в гб
mov tmp2, • r7 /переслать г 7 во временный регистр
adc tmp2, r3 /сложение с переносом
mov r7, tmp2 /сохранение в г 7
ret
/подпрограмма с младшим полубайтом
DE2: clc /сброс флага переноса
mov tmpl, r4 /переслать г4 во временный регистр
rol tmpl /сдвиг влево через перенос
mov r4, tmpl /сохранение в г4
mov tmp2, r5 /переслать г5 во временный регистр
rol tmp2 /сдвиг влево через перенос
mov r5, tmp2 ;сохранение в г5
ret
/сдвиг старшего полубайта
HL2: clc /сброс флага переноса
mov tmpl, r6 /переслать г4 во временный регистр
rol tmpl /сдвиг влево через перенос
mov r6, tmpl /сохранение в гб
mov tmp2, r7 /переслать г 7 во временный регистр
rol tmp2 /сдвиг влево через перенос
mov r7, tmp2 ;сохранение в г 7
ret
/восстановление младшего полубайта с константой 1
INXD: mov tmpl, r4 /переслать г4 во временный регистр
Idi tmp4, $01 /записать константу 1
add tmpl, tmp4 /сложение с константой
mov r4, tmpl /сохранение в г4
226
Глава 9
Листинг 9.1. Продолжение
mov tmp2, r5 /переслать r5 во временный регистр
Idi tmp4, $00 /записать константу 0
adc tmp2, tmp4 /сложение с константой с переносом
mov r5, tmp2 ret /сохранение в г5
/восстановление старшего полубайта с константой 1
INXH: mov tmpl, r6 /переслать гб во временный регистр
Idi tmp4, $01 /записать константу 1
add tmpl, tmp4 /сложение с константой
mov гб, tmpl /сохранение в гб
mov tmp2, r7 /переслать г 7 во временный регистр
Idi tmpl, $00 /записать константу 0
adc tmp2, tmpl /сложение с константой с переносом
mov r7, tmp2 ret nop /сохранение в г 7
/Подпрограмма задержки включения светодиодов zader: nop wdr clr M clr Y Idi Y, $AF cpi tmp3, $00 brne goo Idi M, $01 add M, tmp3 nop goo: nop mov M, tmp3 dm: nop cpi tmp2, $00 brne goq Idi X, $01 add X, tmp2 nop goq: nop mov X, tmp2 dv: nop wdr nop dx: dec Y brpl dx cln dec X brpl dv cln
Светоэффект вращения
227
Листинг 9.1. Окончание
dec М
brne dm
ret
/Подпрограмма опроса светодиодов
>pros: nop
mov ZL, k
Idi ZH, high(2*progl)
Idi ZL, Low(2*progl)
Add ZL, pir
LPM
mov tmp, adr
ret
/Таблица данных слова "РАДИО" и два пусто
.org $200
progl:
.DB $7F, $48, $48, $30, $00, $3F, $48, $48
.DB $3F, $01, $48, $41, $41, $48, $01, $7F
.DB $08, $10, $7F, $00, $3E, $41, $41, $3E
.DB $00, $00, $00, $00, $00, $00, $00, $00
.DB $00, $00, $00, $00, $00, $00, $00, $00
.DB $00, $00, $00, $00, $00, $00, $00, $00
.DB $00, $00, $00, $00, $00, $00, $00, $00
.DB $00, $00, $00, $00, $00, $00, $00, $00
.DB $00, $00, $00, $00, $00, $00, $00, $00
.EXIT
Листинг 9.2. НЕХ-файл для светоэффекта вращения
:020000020000FC
:1000000013C0C6C00000000000000000CDC000000A
:080010000000000000000000Е8
: 10002800000000E00DBF002707BB08BB00270FEF4B
:100038000ABB00E80FBF00E40BBF00E005BF0000EB
:10004800332700270ABB0BBB5FEF6FEF0000552774
:100058006627AA27BB27002478949894392D313035
:10006800A9F70000512F66270000F894000000004F
:1000780000270000043088F4222723E827B9112735
:10008800222714ЕС16В914В125В1212Е322Е422С98
:10009800532C642C752C0395ECCF0000882488948D
:1000A800120D981C140D981C160D981C8894969483
228
Г лава 9
Листинг 9.2, Окончание
:1000B80017959694179599248894230D981C250DC7
:1000C800981C270D981C88949694279596942795A4
:1000D8000000E22FF12F0000000077246624552449
:1000Е8003324462Е05Е4202Е70Е1072Е0000000080
:1000F80074D000006AD0000018F400007FD000001F
:10010800000054D0000028F01FBF00006ED000008F
:1001180005C000001FBFC8F3000050D0000098942D
:10012800202D2A95022E11F70000042DFOOF2F2FF5
:10013800CC27DD270000C3959894C73139F09894EF
:1OO148OOCE32B9FO9894C534A1FO00000ABBOBBBBD
:10015800672E782E5DD0762D872D0000442778D025
:1001680000000ВВВ672Е782Е53007620872000000С
:10017800E1CFOOOOOABBOBBBD395D330D8F2000007
:100188003327992478945BCFOOOOOFB731E0932E82
:1001980012B725E023BF22E029BF00000FBF189542
:1001A800000025E023BF22E029BF18958894762DOA
:1001B8007209672E172D1309712Е0895762D720D69
:1001C800672E172D131D712Е08958894742D771F8F
: 1001D8004 72E152 D111F512Е08 95.88947 62D771FBF
:1001E800672E172D111F712E0895742D81E0780F39
:1001F800472E152D80E0181F512E0895762D81E089
:10020800780F672E172D70E0171F712E08950000C4
:100218000000A895992777277FEA203019F491E004
:10022800920F00000000922F0000103019F481EOB6
:10023800810F00000000812F0000A89500007A952A
:10024800F2F7A8948A95C2F7A8949A9569F7089541
:100258000Q00EC2FF4E0E0E0E40FC895002D0895CD
:100400007F484830003F48483F0148414148017FOC-
:1004100008107F003E41413Е000000000000000047
:1004200000000000000000000000000000000000СС
:1004300000000000000000000000000000000000ВС
:080440000000000000000000В4
: 00000001FF
Монтажная плата
Для облегчения платы управления для схемы выбраны элементы
поверхностного монтажа. Такое решение уменьшает центробежную си-
лу, и в целом — габариты конструкции. Прежде всего отметим, что
схема питается напряжением 3,0..4,5 В. Для длительной эксплуатации
можно использовать элементы АА. Микроконтроллер IC1 ATtiny26-8SU
выполнен в корпусе SOIC-20, питание — 2,7..5,5 В. Транзисторы клю-
чей светодиодов Q1-Q7 — BSS123 [9] Vgs=2,8 В при ld= 1 мА, Idmax =
150 мА. Датчик Холла 1С2 — SS441A [23], напряжение питания —
3,8..30 В, Imax = 10 мА, униполярный. Стабилитрон D1 — BZV55 типа
Светоэффект вращения
229
3V6, истаб= 3,6 В, Imax = 40 мА в корпусе SOD 80. Все элементы рассчи-
таны на небольшое напряжение питания с минимальным уровнем 2,7 В.
Монтаж выполняется на плату, состоящую из SMD-элементов по-
верхностного монтажа (рис. 9.8).
Рис. 9.8. Плата управления светоэффектом вращения
Для этого необходим маломощный паяльник на 12 В с тонким, ост-
рым (в виде конуса) жалом. Удерживать элементы монтажа руками не-
возможно, поэтому автор рекомендует приобрести специальный пинцет
с малым усилием зажима. Отличие этого пинцета заключается в том что
его лапки не разогнутые в форме буквы “Л”, а согнутые, повторяя букву
“X”.
Монтажная плата может быть выполнена согласно рис. 9.9. Габа-
ритные размеры платы — 60><38 мм. Перед монтажом элементов в плате
необходимо высверлить два отверстия диаметром 3 мм для ее крепления
к корпусу батарейного отсека. Затем паяются SMD-элементы, после че-
го устанавливаются остальные элементы схемы.
230
Глава 9
Рис. 9.9. Монтажная плата для светоэффекта вращения
Перед монтажом ТС 1 в микроконтроллер прописывается программа,
представленная выше в листинге 9.2. Затем паяется микроконтроллер.
К плате к точкам JP3, JP4 подключается двигатель таким образом, что-
бы вращение было против часовой стрелки. К точкам JP1, JP2 подклю-
чается последовательно выключатель S1 и батарейный блок питания.
Выключатель питания
Выключатель питания S1 на плату не устанавливается. От платы
выводятся провода к колпачку включения питания. Принцип включе-
ния/выключения заключается во вращении колпачка и замыкании или
размыкании контактов. Тем самым обесточить включенный вращаю-
щийся эффект можно, удерживая колпачок: он повернется, и контакты
разомкнутся. В продаже выключателя подобного типа нет, поэтому не-
обходимо его изготовить самостоятельно.
Эскиз выключателя представлен на рис. 9.10: 1 — колпачок; 2 —
цилиндр основания; 3 — верхний сегмент контакта с проводом из меди;
4 — изолятор из фторопласта; 5 — нижний сегмент контакта с прово-
дом; 6 — основание; 7 — ограничители хода колпачка; 8 — подвижной
ограничитель; 9 — винт крепления колпачка.
Светоэффект вращения
231
Рис. 9.10. Выключатель
Верхний и нижний сегмент контакта изготавливается из листовой
меди толщиной 0,2 мм. На краях сегментов оставляется небольшой от-
резок, который загибается под углом 90°. В основание выключателя и в
колпачок впаиваются ограничители хода (изготавливаются из булавок).
На оба сегмента припаиваются гибкие провода. На нижнем сегмен-
те шариком (например, от подшипника) выдавливаются выпуклости,
для улучшения контакта. Между сегментами по внутреннему диаметру
укладывается фторопластовая пластина. Нижний сегмент клеится к ос-
нованию, верхний — к колпачку (выступающие отрезки сегментов на-
греваются и впаиваются в пластик). Колпачок и верхний сегмент пози-
ционируются так, чтобы в выключенном состоянии ограничитель кол-
пачка касался серого ограничителя основания.
При повороте колпачка верхний и нижний сегмент замыкаются.
В этом случае ограничитель колпачка должен касаться черного ограни-
чителя основания. Как только все детали готовы, и клей высох, выклю-
чатель собирается согласно эскизу, данному на рис. 9.10. Провода от
колпачка должны быть гибкими и свободно двигаться с подвижным
верхом колпачка.
232
Глава 9
Сборка
Сборка конструкции начинается с изготовления дополнительных
узлов. Прежде всего необходимо сделать скобу для удержания двигате-
ля (рис. 9.11).
Рис. 9.11. Скоба для удержания двигателя
После установки скобы на двигатель (позаимствован от привода
CD-ROM) в корпусе батарейного отсека высверливаются отверстия для
удержания платы. Закрепляется плата. Наверху батарейного блока пи-
тания прикручивается колпачок выключателя. Провода соединяются
последовательно с батарейным блоком питания к плате управления со-
гласно схеме, показанной на рис. 9.6. Для ослабления завихрений про-
вода лучше помещать в трубочки, которые для придания плате обтекае-
мости надеваются с ее краев.
Для уменьшения вибрации при вращении необходимо провести ба-
лансировку батарейного корпуса и платы со вставленными батарейками.
Для этого надо найти центр масс батарейного отсека в горизонтальной
плоскости, и установить двигатель так, чтобы его ось совпадала с цен-
тром масс. Затем .устанавливается скоба с двигателем, и в корпусе бата-
рейного отсека высверливаются отверстия для крепления. Далее на ос-
нование конструкции наклеивается магнит, а на плате устанавливается
датчик Холла так, чтобы при вращении он попадал в поле действия маг-
нита. Ось двигателя через втулку вставляется в основание конструкции.
После проверки жесткости крепления всех узлов конструкция гото-
ва к эксплуатации (рис. 9.12).
Светоэффект вращения
233
Рис. 9.12. Готовая конструкция
Эксплуатация
Для четкого наблюдения светоэффекта конструкции, следует экс-
плуатировать в темном помещении. Она устанавливается на ровную,
твердую поверхность или жестко крепится, после чего поворотом кол-
пачка по ходу вращения включается питание схемы. Конструкция начи-
нает вращаться против часовой стрелки, и после нескольких оборотов
включаются светодиоды, и мы наблюдаем светоэффект со словом
“РАДИО”. Выключается светоэффект при нажатии на колпачок.
Внимание!
Включать и выключать светоэффект можно только за верхушку колпачка выключа-
теля Останавливать и трогать вращающийся прибор за другие части конструкции
категорически запрещается.
Визуальный анализ работы устройства показывает, что одной ли-
нейки светодиодов для получения хорошей яркости и четкости изобра-
жения недостаточно. Для синхронизации обязательно необходимо при-
менять комбинированный метод, а ускорение при вращении может по-
влиять на работу микроконтроллера [24].
Глава 10
Пропорциональное
радиоуправление
Для радиоуправления моделями применяют дискретное и пропор-
циональное управление. Дискретное управление предназначено для
простых радиоуправляемых моделей, выполняющих однозначные ко-
манды: влево, вправо, вперед, назад. При этом команда не предусматри-
вает медленного поворота на определенный угол или варьирования ско-
рости движения.
Во время соревнований необходимо выполнять сложные маневры.
Добиться от модели выполнения сложных движений — задача очень
сложная, требующая точности управления. Именно в таких случаях ис-
пользуется пропорциональное управление, реализующее варьирование
скорости и повороты на определенный угол. Этот метод уже давно ис-
пользуется за рубежом, однако сложные импортные передатчики про-
мышленного производства не всегда доступны радиолюбителю. Их цена
очень высока, а их характеристики не всегда востребованы.
Для пропорционального радиоуправления автор разработал пере-
датчик, выполняющий точное считывание движения и передающий
считанный код (рис. 10.1).
Рис. 10.1. Передатчик, реализующий пропорциональное радиоуправление
Пропорциональное радиоуправление
235
Автор поставил перед собой простую задачу обычного управления
любой моделью. Передатчик можно использовать в командных играх —
достаточно лишь изменить под каждого игрока кодировку команды
управления в передатчике и в приемнике.
Структурная схема
Структурная схема управления моделью очень проста (рис. 10.2).
Рис. 10.2. Структурная схема радиоуправления моделью
Команда, задаваемая на пульте управления, кодируется в микрокон-
троллере. Закодированный сигнал через последовательный интерфейс
выдается на передатчик. Приемник радиоуправляемой модели принима-
ет сигнал, который усиливается и преобразуется в цифровую форму
компаратором. Далее цифровая форма сигнала декодируется в микро-
контроллере в восьмиразрядную команду. Команда подается на драйве-
ры, которые включают или выключают двигатели.
Схема передатчика и приемника универсальна, ее можно использо-
вать в различных конструкциях. Рассмотрим пример управления моде-
лью автомобиля. Передатчик радиоуправляемой модели предоставляет
два рычажка для управления движением: вперед/назад и влево/впра-
во, — а также две кнопки: “СТОП” и включения/выключения “ФАРЫ”.
236
Глава 10
Шифратор-передатчик радиоуправляемой
модели
Шифратор-передатчик радиоуправляемой модели представлен на
рис. 10.3, а его принципиальная схема — на рис. 10.4.
Рис. 10.3. Шифратор-передатчик радиоуправляемой модели
Конфигурация схемы проста. Она собрана на двух микросхемах:
микроконтроллере ATtiny26L-8PU и логическом инверторе CD4009.
Микроконтроллер управляет устройством и оснащен Flash-памятью
программ объемом 2 Кбайт; память EEPROM объемом 128 байт; памя-
тью SRAM объемом 128 байт. Число команд — 118, линий ввода-выво-
да — 16. Используется встроенный RC-генератор, а также— 10-разряд-
ный, И-канальный АЦП, аналоговый компаратор, три таймера/счетчи-
ка, один интерфейс SPI, 11 внутренних и два внешних источника пре-
рываний. Тактовая частота — до 8 МГц, напряжение питания 2,7..5,5 В.
Непосредственно передатчик собран на микросхеме CD4009, схема
заимствована из радиолюбительских разработок.
Пропорциональное радиоуправление
237
Питание
Рис. 10.4. Принципиальная схема передатчика
238
Глава 10
Состав схемы:
• S1 — включает питание;
• R5, С6 — цепочка сброса микроконтроллера при включении пита-
ния;
• С7-С9, L1 — фильтр по питанию АЦП, а так же по питанию микро-
контроллера;
• Q1, С4, С6 — цепочка, используемая для синхронизации микрокон-
троллера;
• R9, Ledl — светодиод включения питания;
• S3 — кнопка “Стоп” для останова модели;
• S2 — кнопка “Фары” для включения фар.
В данной схеме роль джойстиков управления выполняют перемен-
ные резисторы Rl, R2. Снятый на них уровень напряжения подается на
выводы 18 и 19 АЦП микроконтроллера. Данные с АЦП поступают
в программу, и микроконтроллер преобразует их в последовательный
цифровой код, который подается на вывод 20. Далее сигнал поступает
на генератор 27 МГц. Выполняется 100% модуляция, после чего сигнал
подается на выходной каскад 1C2D, 1С2Е. Сформированный модулиро-
ванный код подается на антенну через фильтр.
Монтажная плата передатчика
Монтажная плата передатчика рис. 10.5. Для проверки работоспо-
собности автор спаял схему передатчика навесным монтажом на макет-
ной плате CRS-053 (см. рис. 10.3), но для повторения модели лучше ис-
пользовать протравленные печатные платы (см. рис. 10.5). Все детали —
поверхностного монтажа. Перед монтажом на плату 1С1 необходимо за-
писать в микроконтроллер программу управления передатчиком.
Детали для повторения модели с печатной платой, показанной на
рис. 10.5:
• IC1 — ATtiny26L-8PU;
• IC2 — CD4009 в корпусе SOIC;
• резисторы и конденсаторы в корпусе 1206;
• кварцевые резонаторы в корпусе “лодочка”.
В микроконтроллер записывается только рабочая программа (рас-
сматривается ниже).
Детали для повторения модели с печатной платой CRS053:
• микросхемы в DlP-корпусах — устанавливаются на панельки (для
оперативного программирования);
• резисторы — МЛТ-0,125;
Пропорциональное радиоуправление
239
• конденсаторы — керамические и металлобумажные на напряжение
30 В;
• переменные резисторы с прямолинейной характеристикой (при не-
обходимости выравнивается добавочными резисторами).
Рис. 10.5. Монтажная плата передатчика (начало)
240
Глава 10
Рис. 10.5. Монтажная плата передатчика (окончание)
Для проверки правильности монтажа в микроконтроллер записыва-
ется тестовая программа (рассматривается ниже), проверяется передач и
данных с помощью осциллографа. Если тест прошел успешно, в микро
контроллер записывается рабочая программа.
Теория управления
Прежде всего, необходимо проанализировать достоинства и недос
татки радиоуправления. Одно из его достоинств — полная зависимост
модели от управления человеком, но есть и недостаток: радиоуправле
ние эффективно лишь в зоне видимости и передачи управляющего сиг
нала. Как только модель находится вне зоны видимости, она становитс
неуправляемой.
Команды, передаваемые с пульта управления, заставляют модел
постоянно выполнять те или иные маневры, которые не всегда оправда
ны и корректны, поскольку человек не видит свои действия на большое
расстоянии. По этой причине для расширения возможностей управлени
моделью устанавливаются недорогие видеокамеры. Но даже в таком ва
рианте возможны ситуации, когда сигнал управления ослабнет, а видео
сигнал окажется сильно зашумленным, и опять мы сталкивается с про
блемой неконтролируемой модели. В таких ситуациях нас спасают воз
можности микроконтроллеров.
Пропорциональное радиоуправление
241
Микроконтроллер способен отследить траекторию или направление
движения, преодолеть препятствия или вернуть модель обратно. Кроме
того, у него — большая скорость выполнения действий, недостижимая
человеку из-за инерционности зрения. По этой причине все больше рас-
пространяется тенденция частичной передачи функций управления от
человека микроконтроллеру.
Например, достаточно указать скорость движения модели, а микро-
контроллер сформирует сигнал управления двигателем и разгонит мо-
дель до заданной скорости. Или же можно указать точку, в которую
должна прибыть модель, а функцию преодоления препятствий на пути
следования к назначенной точке лучше поручить микроконтроллеру.
Впрочем, полностью возложить управление на микроконтроллер
нельзя, поскольку это может привести к катастрофе. Итак, частичное
управление... Оно упрощает пульт управления моделью, а некоторые
функции возлагаются на программное обеспечение микроконтроллера.
В рассматриваемой модели применяется только радиоуправление,
поскольку сложность поставленной задачи не позволяет сразу перейти
к разработке универсального радиоуправляемого робота.
Тестовая программа
Для дальнейшего рассмотрения программы необходимо сформиро-
вать систему передачи данных. Передающая и принимающая стороны
должны распознавать пакет передачи и приема данных. В него входят:
опознавательные пилот-сигналы, система кодирования и система деко-
дирования многоразрядного кода. Кроме того, передаваемый пакет дол-
жен содержать повторяемые несколько раз коды для случаев, когда на-
водятся сильные помехи.
Принимающая сторона должна различать разные пакеты, уметь ра-
ботать с отрывками пакетов (когда, например, приняты только три из
пяти повторяемых кодов) и отрабатывать команды управления. Для того
чтобы понять, как это происходит, рассмотрим формирование пакетов
передатчиком рис. 10.6.
Для управления моделью необходимо передавать команды “впе-
ред”, “назад”, “влево”, “вправо”, а также — “стоп” и “фары”. Передаче
пакета из двух команд соответствует верхняя часть рис. 10.6.
В начале передачи команды формируется пилот-сигнал, состоящий
из двух единичных бит, мулевого бита и паузы опознавания. Этот сиг-
нал сообщает о начале передачи (см. нижнюю часть рис. 10.6). Для того
чтобы определить, какая команда передается, формируются три бита
опознавания команды. Затем передаются данные, полученные от АЦП
242
Глава 10
микроконтроллера в ходе опроса уровня напряжения движков джойсти-
ка (“вперед/назад”) передатчика.
После передачи данных следует пауза, а затем — три бита пилот-
сигнала “Стоп”. Тем самым команда (“вперед”, “назад”) полностью пе-
редана и завершена. Необходимость в пилот-сигналах “Старт” и “Стоп”
продиктована системой помехозащиты передачи данных.
Далее по аналогичной схеме следует вторая команда, которая пере-
дает информацию о повороте влево/вправо. Полный сигнал передается
пакетом из двух команд. Если на передатчике нажата кнопка “Стоп”, то
пакет начнется с пилот-сигнала и двух последовательных единичных
бит. Первая команда блокирует работу двигателей. Вторая позволяет
включить или выключить фары. Таким образом, мы получаем два паке-
та, которые в первом случае определяют движение вперед, назад, влево
или вправо, а во втором — полный останов и включение/выключение
фар.
Включение фар запоминается и не отменяется пакетом для первого
случая передачи команд, но при передаче команды движения команда
“Стоп” автоматически отменяется. Но почему бы сразу не передать всю
необходимую информацию? Для того чтобы ответить на этот вопрос,
необходимо рассмотреть все составляющие передающей и принимаю-
Пропорциональное радиоуправление
243
щей стороны. Пакет имеет основные характеристики. Пауза между па-
кетами составляет 60 мс. Данные передаются с частотой 3 кГц, т.е. пе-
риод для одного бита составляет 0,32 мс. Это позволяет эффективно ис-
пользовать УПЧ ДМ приемника и передавать данные с максимальной
скоростью, что для радиоуправляемой модели и нужно. Исходя из этих
значений, имеем ограничение по скорости передачи данных.
Кроме того, данные с АЦП поступают в виде 10 разрядов, но к пе-
редаче допускаются только восемь. Следовательно передавать прихо-
дится по две восьмиразрядных команды. Но как принимающая сторона
справится с таким потоком данных? Учитывая, что в приемнике данные
обрабатываются одним малопроизводительным микроконтроллером
(для малобюджетных приложений), возникает необходимость в двух
разных пакетах, которые могут передаваться как угодно, в любой по-
следовательности.
Кроме того, данные АЦП можно декодировать в восьмиразрядной
форме и разделять на различные дифференциальные значения, которые
необходимо отработать принимающей стороне. Например: влево на 20°,
прямо на первой скорости при максимальном угле поворота влево 60°
и наибольшей пятой скорости. Передающая сторона выдает информа-
цию о направлении и скорости двумя байтами. Принимающая сторона
отрабатывает эти значения за много шагов программы с большим чис-
лом арифметических вычислений, расширяя информацию до много-
байтных уравнений. Рассмотрим этот процесс подробнее.
Алгоритм тестовой программы
Алгоритм тестовой программы (рис. 10.7) основан на операции
сдвига влево. В начале формируется пауза длительностью 0,1 с. Далее
принудительно в порту А (вывод 20 микроконтроллера) устанавливают-
ся два разряда пилот-сигнала. Пилот-сигнал помогает определить при-
емнику начало передаваемой команды. Следует пауза опознавания, по-
сле чего устанавливаются три бита первой команды. Приемник, благо-
даря этим трем битам, определяет очередность команды. Следует пауза
опознавания, и, наконец, передается команда.
Команда представляет собой восьмиразрядный код, который в АЛУ
микроконтроллера сдвигается влево через регистр переноса. Состояние
регистра переноса передается в порт А (вывод 20 микроконтроллера).
Как только восемь разрядов передано, устанавливается пауза опознава-
ния. Далее формируется пилот-сигнал окончания передачи (четыре би-
та).
244
Глава 10
Рис. 10.7. Алгоритм тестовой программы передатчика
Пропорциональное радиоуправление
245
После первой передается вторая команда. Процесс передачи анало-
гичен рассмотренному выше, но в трехразрядном сигнале обнуляется
один бит. Тем самым микроконтроллер приемника определяет вторую
команду, переданную передатчиком.
Тестовая программа представлена в листингах 10.1 и 10.2.
Листинг 10.1. Тестовая программа передатчика
.include "D:\Program Files\Atmel\AVR Studio\Appnotes\tn26def.inc"
;Автор: Кравченко А.В.
;Дата: 28.11.2009
;Версия: 1.1.2
;Имя файла: peredat.asm
;Микроконтроллер: AVR tiny26.
;Тактовая частота: 8МГц
;Питание: нестабилизированное 4,5 В
;Рабочая программа
list
def adr = rO
def tmp = Г16
def tmp2 = rl7
def tmp3 = rl8
def cam = rl9
def pered = r20
def bit = r21
def far = r22
def Ya = r23
def Xa = r2 4
def Ma = r25
def Stp = r26
def Urr = r27
cseg
org 0
rjmp RESET
nop ;rjmp EXT_INTO - прерывание по входному сигналу
nop ;rjmp EXT_PIN - прерывание не используется
nop ;rjmp TIME-CMPA - прерывание от таймера
nop ;rjmp TIME_CMPB - прерывание от таймера
nop ;rjmp TIME_OVF1 - прерывание от таймера
nop ;rjmp TIME_OVF0 - прерывание от таймера
nop ;rjmp UCI_STRT - прерывание от USI
nop ;rjmp UCI_OVF - прерывание от USI
nop ;rjmp EE_RDY - прерывание от таймера
nop ;rjmp ANA_COMP - прерывание от компаратора
nop ;rjmp ADC - прерывание от АЦП
246
Глава 10
Листинг Продолжение
.org 20
/настройка порта В
RESET: nop Idi tmp, low(RAMEND)
out S P, tmp
clr tmp
out DDRA, tmp
out PORTA, tmp
clr tmp
Idi tmp, $01
out DDRA, tmp
nop clr cam
/вершина стека
/обнулить порт А
/РАО-выход
cis
clz
clc
cln
/начало программы
nStart: nop
/порядок передачи данных АЦП вперед назад
/влево, вправо
sto: пор
/данные первой команды СТОП
Idi tmp2, $D4
mov г 13, tmp2
/данные второй команды
Idi tmp3, $3F
mov rl2, tmp3
nop
Idi tmp3, $00
nop
inc Stp /передаем 5 раз
mov rl2, tmp2
mov rl3, tmp3
/пауза 60 мС
rcall time60
/пилот сигнал Старт
.★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★A-*
/установить еденицу в порт А
sbi $1В, 0
rcall time016
/установить ноль в порт А
cbi $1В, 0
rcall time016
Пропорциональное радиоуправление
247
Листинг W/L продолжение
sbi $1В, О
rcall time016
cbi $1В, О
rcall time016
cbi $1B, О
rcall time016
cbi $1B, 0
rcall time016
rcall pause
• *******************************
f
/какая команда?
cis
clz
clc
cln
cpi cam, $CD
breq vto
;первая команда
/данные первой команды
mov pered, tmp2
rcall perva
/первая команда прошла, передать вторую.
Idi cam, $CD
rjmp per
/вторая команда
vto: nop
/данные второй команды
mov pered, tmp3
rcall vtora
/вторая прошла, передать первую.
Idi cam, $00
clr bit
per: nop
clc
/логический сдвиг влево
Isl pered
brcs zex
/установить ноль в порт А
cbi $1В, 0
rcall time016
/установить ноль в порт А
cbi $1В, 0
rcall time016
rjmp got
/установить еденицу в порт А
248
Глава 10
Листинг 1ОХ Продолжение
zex: sbi $1В, 0
rcall time016
;установить ноль в порт А
cbi $1В, 0
rcall time016
got: nop
inc bit
cis
clz
clc
cln
cpi bit, $08
breq pus
rjmp per
nop
•★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
pus: nop
;пауза опознавания
rcall pause
nop
•★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
;пилот сигнал Стоп
;установить еденицу в порт А
sbi $1В, 0
rcall time016
;установить ноль в порт А
cbi $1В, 0
rcall time016
;установить еденицу в порт А
sbi $1В, 0
rcall time016
;установить ноль в порт А
cbi $1В, 0
rcall time016
/установить еденицу в порт А
sbi $1В, 0
rcall time016
/установить ноль в порт А
cbi $1В, 0
rcall time016
nop
rcall pause
.*******************************
cis
clz
clc
Пропорциональное радиоуправление
249
Листинг ЮЛ, Продолжение
cln
cpi Stpr $05
breq hopp
nop
rjmp nStart
nop
hopp: nop rjmp nStart /подпрограмма паузы опознавания
pause: nop cbi $1B, 0 rcall time016 cbi $1B, 0 rcall time016 cbi $1B, 0 rcall time016 cbi $1B, 0 rcall time016 cbi $1B, 0 rcall time016 cbi $1B, 0 rcall time016 cbi $1B, 0 rcall time016 cbi $1B, 0 rcall time016 cbi $1B, 0 rcall time016 cbi $1B, 0 rcall time016 nop ret /подпрограмма первого кода perva: nop /установить еденицу в порт А
sbi rcall /установить cbi rcall /установить $1B, 0 time016 ноль в порт A $1B, 0 time016 еденицу в порт А
sbi rcall /установить cbi rcall $1В, 0 time016 ноль в порт А $1В, 0 time016
250
Глава 10
Листинг WX Продолжение
/установить еденицу в порт А
sbi $1В, 0
rcall time016
/установить ноль в порт А
cbi $1В, 0
rcall time016
ret
/подпрограмма второго кода
vtora: пор
/установить еденицу в порт А
sbi $1В, 0
rcall time016
/установить ноль в порт А
cbi $1В, 0
rcall time016
/установить ноль в порт А
cbi $1В, 0
rcall time016
/установить ноль в порт А
cbi $1В, 0
rcall time016
/установить еденицу в порт А
sbi $1В, 0
rcall time016
/установить ноль в порт А
cbi $1В, 0
rcall time016
ret
/Подпрограмма работы АЦП1
/Настройка АЦП
add: пор
пор
clr tmp
awe: пор
cpi tmp, $04
brsh ass
clr tmp3
Idi tmp3, $81 /внутренний
out ADMUX, tmp3 /коммутация
clr tmp2
clr tmp3
Idi tmp2, $C4 /одиночное,
out ADCSR, tmp2 / запуск АЦП
/Сохранение данных АЦП
in tmp2, ADCL
in tmp3, ADCH
источник, вход ADC1
входов АЦП
запуск, 1/16
на преобразование
Пропорциональное радиоуправление
251
Листинг 1<М* Продолжение
mov r2, tmp 2
mov r3, tmp3
mov r4, r2
mov r5, r3
mov r6, r4
mov r7, r5
inc tmp
rjmp awe
;среднее арифметическое действие
ass: пор
clr r8
clc add tmp2, r2
adc r9, r8
add tmp2, r4
adc r9, r8
add tmp2, r6
adc r9, r8
clc Isr r9
ror tmp2
Isr r9
ror tmp2
clr r9
clc add tmp3, r3
adc r9, r8
add tmp3, r5
adc r9, r8
add tmp3, r7
adc r9, r8
clc Isr r9
ror tmp3
Isr r9
ror tmp3
пор
ret
;Подпрограмма работы АЦП2
;Настройка АЦП
adc2: пор
пор
clr tmp
awe2: пор
cpi tmp, $04
brsh ass2
252
Глава 10
Листинг ЮЛ. Продолжение
clr tmp3
Idi tmp3, $82 ;внутренний источник, вход ADC2
out ADMUX, tmp3 ;коммутация входов АЦП
clr tmp2
clr tmp3
Idi tmp2, $C4 ;одиночное, запуск, 1/16
out ADCSR, tmp2 ;запуск АЦП на преобразование
;Сохранение данных АЦП
in tmp2, ADCL
in tmp3, ADCH
mov r2, tmp2
mov r3, tmp3
mov r4, r2
mov r5, r3
mov r6, r4
mov r7, r5
inc tmp
rjmp awe2
;среднее арифметическое действие
ass2: пор
clr г8
clc
add tmp2, r2
adc r9, r8
add tmp2, r4
adc r9, r8
add tmp2, г 6
adc r9, r8
clc
Isr r9
ror tmp2
Isr r9
ror tmp2
clr r9
clc
add tmp3, r3
adc r9, r8
add tmp3, r5
adc r9, r8
add tmp3, r7
adc r9, r8
clc
Isr r9
ror tmp3
Isr r9
ror tmp3
Пропорциональное радиоуправление
253
Листинг W/L Продолжение
пор
ret
/Подпрограмма паузы 60mS
time60: nop
clr urr
bed: nop
rcall timel6
inc urr
cis
clz
clc
cln
cpi Urr, $25 /37 циклов
brsh hsa
nop
rjmp bed
nop
hsa: nop
nop
ret
/Подпрограмма паузы опознавания l,6mS
timel6: nop
rcall zader
nop
ret
/Подпрограмма 0,16mS
/Подпрограмма задержки включения
zader: nop
Idi tmp3, $03
zxc: nop
wdr
clz
cln
wdr
Idi Ma, $AF
clr Ya
Idi Ya, $AF
nop
goo: nop
nop
dm: nop
Idi Xa, $FA
nop
nop
goq: nop
254
Глава 10
Листинг юл. Продолжение
nop
dv : nop
wdr
nop
dx: dec Ya
brpl dx
clz
cln
dec Xa
brpl dv
clz
cln
dec Ma
brne dm
cln
clz
dec tmp3
brne zxc
ret
.подпрограмма задержки 0,16 мС
timeOl6: nop
wdr
clz
cln
nop
Idi Xa, $1A
Idi Ya, $02
Idi Ma, $2B
nop
dm2: nop
nop
nop
dv2: nop
wdr
nop
dx2: nop
clz
cln
dec Ya
nop
brpl dx2
clz
cln
dec Xa
brpl dv2
clz
Пропорциональное радиоуправление
255
Листинг ЮЛ, Окончание
cln
dec Ma
brne dm2
ret
.EXIT
Листинг 10,2, НЕХ-файл тестовой программы передатчика
:020000020000FC
:1000000013C000000000000000000000000000001D
:080010000000000000000000Е8
:1000280000000FED0DBF00270ABB0BBB002701E046
:100038000АВВ00003327С89498948894А8940000В9
:10004800000014EDD12E2FE3C22E000020E00000A6
:10005800A395C12ED22EEAD0D89A22D1D89820D1F1
:10006800D89A1ED1D8981CD1D8981AD1D89818D116
: 1000780042D0C894 98948894A8943D3C21F0412F8C
:1000880051D03DEC05C00000422F5AD030E0552732
:1000980000008894440F28F0D89802D1D89800D14D
:1000A80004C0D89AFDD0D898FBD000005395C894C6
:1000B80098948894A894583011F0EACF0000000072
:1000C8001AD00000D89AECD0D898EAD0D89AE8D0BC
:1000D800D898E6D0D89AE4D0D898E2D000000BD0CF
:1000Е800С89498948894A894A53019F00000A7CFD4
:1000F80000000000A4CF0000D898D2D0D898D0D063
:1001O800D898CEDOD898CCD0D898CAD0D898C8D0BB
:10011800D898C6D0D898C4D0D898C2DOD898C0D0CB
: 10012800000008950000D89ABBD0D898B9D0D89AC2
:10013800B7D0D898B5D0D89AB3D0D898B1D00895B8
:100148000000D89AADD0D898ABD0D898A9D0D89874
:10015800A7D0D89AA5D0D898A3D0089500000000B9
:1001680000270000043088F4222721E827B9112746
:10017800222714ЕС16В914В125В1212Е322Е422СА7
:10018800532C642C752C0395ECCF0000882488949C
:10019800120D981C140D981C160D981C8894969492
:1001A80017959694179599248894230D981C250DD6
:1001B800981C270D981C88949694279596942795B3
: 1001C80000000895000000000027000004 3088F4B3
:1001D800222722E827B91127222714EC16B914B1CF
: 1001Е80025В1212Е322Е4 22С532С642С752С0395СС
:1001F800ECCF000088248894120D981C140D981CCC
:10020800160D981C8894969417959694179599248A
:100218008894230D981C250D981C270D981C8894EC
:100228009694279596942795000008950000ВВ277В
:1002380000000DD0B395C89498948894A894B532CA
: 1002480018F40000F5CF0000000000000895000039
:1002580002D000000895000023E00000A8959894BB
256
Глава 10
Листинг 10.2. Окончание
:10026800A894A8959FEA77277FEA0000000000007D
:1002780000008AEFOOOOOOOOOOOOOOOOOOOOA895CO
: 1002880000007A95F2F79894A8948A95BAF798940A
:10029800A8949A9569F7A89498942A95F1F60895EO
: 1002А8000000А8959894А89400008АЕ172Е09ВЕ267
:1002B80000000000000000000000A89500000000F9
:1002C8009894A8947A950000D2F79894A8948A955F
:OC02D8009AF79894A8949A9561F70895FD
•-00000001FF
Программа передатчика
Рабочий алгоритм работы передатчика показа на рис. 10.8.
Рис. 10.8. Алгоритм работы передатчика
Пропорциональное радиоуправление
257
В начале программы считываются данные АЦП1 джойстика “вверх/
вниз” и АЦП2 джойстика “влево/вправо”. Далее проверяются контакты
кнопок “Стоп” и “Фары”. Если кнопка “Стоп” нажата, то команды
“вверх”, “вниз”, “влево”, “вправо” обнуляются. Передается только ко-
манда “Стоп” (код $D4) и “фары” (код S3F). До передачи данных, обяза-
тельно выдерживается пауза 0,1 с. Данные передаются рассмотренным
ранее способом.
Рабочая программа передатчика представлена в листингах 10.3
и 10.4. Программа вначале конфигурирует микроконтроллер, устанав-
ливает в нулевое состояние порты ввода-вывода, определяет область
программного стека и проверяет, нажаты ли кнопки “Стоп” и “Фары”.
Затем опрашивается АЦП. Во время опроса АЦП коммутируется вход
аналоговым мультиплексором, после чего следует небольшая пауза для
установки уровня напряжения на входе АЦП.
Рассмотрим подробнее работу пакетов команд. Для того чтобы па-
кет содержал одинаковые значения данных, считанные с АЦП значения
записываются в память, и во время передачи используются многократ-
но. Для надежной передачи пакет повторяется пять раз. Поскольку пау-
зы составляют 60 мс, а данные передаются 20,48 мс, полная передача
занимает 0,402 с.
Передача пакета начинается с сигнала “Старт”, который формиру-
ется как три бита информации с последующей паузой опознавания, за-
нимающей по длительности пять бит. После первой команды в виде
трех бит информации опять следует пуза опознавания. Затем передают-
ся данные первой команды.
Как было отмечено ранее, для управления движением формируются
команды с пропорциональными данными. Поворот движка переменного
резистора начинается с нулевого напряжения и достигает максимально-
го значения. Переменный резистор имеет прямолинейную характери-
стику. Если такой резистор найти не удастся, то можно подключить па-
раллельно переменному резистору выравнивающие резисторы или же
снять характеристику резистора и ввести таблицу поправок в программу
для микроконтроллера.
Во время поворота движка резистора данные изменяются от 000h,
до 400h, т.е. среднее значение — IFFh. Но данные можно передать толь-
ко восьмиразрядные, поэтому дважды выполняется сдвиг вправо. Фак-
тически, результат делится на четыре. До сдвига результата выполняет-
ся коррекция данных в соответствии с характеристикой переменных ре-
зисторов. Как только переданы данные первой команды, формируется
258
Глава 10
пауза опознавания и пилот-сигнал “Стоп”. Далее передается вторая ко-
манда аналогично первой.
Зачем нужна такая сложная структура передачи данных? Объясне-
ние тривиально. Мы имеем дело с эфиром, в котором много помех, чу-
жих данных, ограниченный диапазон действия радиосигнала. На каж-
дом этапе передачи данных необходимо быть готовым к различным си-
туациям, и принимающая сторона должна точно знать, какие данные
принимаются, точно определить окончание команды или пакета, стар-
тового пилот-сигнала или данных. И что самое сложное, она должна иг-
норировать чужие данные и выделять свои. Пакет передается пять раз.
Это дает позволяет принимающей стороне зафиксировать фрагменты
пакета в оперативной памяти микроконтроллера и выделить правдивую
информацию.
Листинг 10,3. Рабочая программа передатчика
.include "D:\Program Files\Atmel\AVR Studio\Appnotes\tn26def.inc"
/Автор: Кравченко А.В.
/Дата: 28.11.2009
/Версия: 1.1.2
/Имя файла: peredat.asm /Микроконтроллер: AVR tiny26. /Тактовая частота: 8МГц /Питание: нестабилизированное 4,5 В /Рабочая программа
. list
. def adr = rO
. def tmp = rl6
. def tmp2 = rl7
. def tmp3 = rl8
. def cam = rl9
.def pered = r20
. def bit = r21
. def far = r22
. def Ya = r23
. def Xa = r24
. def Ma = r25
. def Stp = r26
. def Urr = r27
. cseg
.org 0
rjmp RESET
nop /rjmp EXT_INT0 - прерывание по входному сигналу
nop /rjmp EXT_PIN - прерывание не используется
Пропорциональное радиоуправление
259
Листинг 10.3. Продолжение - прерывание от таймера
nop /rjmp TIME-CMPA
nop /rjmp TIME-CMPB - прерывание от таймера
nop / rjmp TIME_OVF1 - прерывание от таймера
nop /rjmp TIME_OVF0 - прерывание от таймера
nop /rjmp UCIJSTRT - прерывание от USI
nop /rjmp UCI_OVF - прерывание от USI
nop /rjmp EE_RDY - прерывание от таймера
nop /rjmp ANA_COMP - прерывание от компаратора
nop /rjmp ADC - прерывание от АЦП
.org 20
;настройка порта В
RESET: пор
Idi tmp, low(RAMEND) ;вершина стека
out SP, tmp
clr tmp
out DDRA, tmp
out PORTA, tmp ;обнулить порт A
clr tmp
Idi tmp, $01 ;РАО-выход
out DDRA, tmp
nop
clr cam
cis
clz
clc
cln
;начало программы
nStart: nop
clr Stp
/Проверка состояния порта ввода-вывода
in far, $1B
cis
clz
clc
cln
andi far, $40
cpi far, $40
breq sto
nop
/чтение данных АЦП влево, вправо
rcall add
clz
clc
cln
Isr tmp3
260
Глава 10
Листинг 103, Продолжение
ror tmp2
clz
clc
cln '
Isr tmp3
ror tmp2
mov rl2, tmp2
;данные с АЦП вперед, назад
rcall adc2
clz
clc
cln
Isr tmp3
ror tmp2
clz
clc
cln
Isr tmp3
ror tmp2
mov rl3, tmp2
nop
/порядок передачи данных АЦП вперед назад
/влево, вправо
mov tmp2, rl3
mov tmp3, rl2
rjmp Start
sto: nop
/данные первой команды СТОП
Idi tmp2, $D4
cis
clz
clc
cln
andi far, $80
cpi far, $80
brne stes
nop
/данные второй команды
Idi tmp3, $3F
stes: nop
Idi tmp3, $00
Start: nop
inc Stp /передаем 5 раз
mov rl2, tmp2
mov rl3, tmp3
/пауза 60 мС
Пропорциональное радиоуправление
261
Листинг Продолжение
rcall time60
;пилот сигнал Старт
9
;установить еденицу в порт А
sbi $1В, О
rcall time016
;установить ноль в порт А
cbi $1В, О
rcall time016
sbi $1В, О
rcall time016
cbi $1B, О
rcall time016
cbi $1B, 0
rcall time016
cbi $1B, 0
rcall time016
.****★***************★**********
rcall pause
;какая команда?
cis
clz
clc
cln
cpi cam, $CD
breq vto
;первая команда
;данные первой команды
mov pered, tmp2
rcall perva
;первая команда прошла, передать вторую.
Idi cam, $CD
rjmp per-
;вторая команда
vto: nop
;данные второй команды
mov pered, tmp3
rcall vtora
;вторая прошла, передать первую.
Idi cam, $00
clr bit
per: nop
clc
/логический сдвиг влево
Isl pered
262
Глава 10
Листинг Ю* продолжение
brcs zex
;установить ноль в порт А
cbi ' $1В, 0
rcall time016
;установить ноль в порт А
cbi $1В, 0
rcall time016
rjmp got
;установить еденицу в порт А
zex: sbi $1В, 0
rcall time016
;установить ноль в порт А
cbi $1В, 0
rcall time016
got: nop
inc bit
cis
clz
clc
cln
cpi bit, $08
breq pus
rjmp per
nop
•********★***★★*★***★★*★★★****★*
pus: nop
;пауза опознавания
rcall pause
nop
• ★★★★★★★★★★★★★★★★★★★★★★★★★★★if***
;пилот сигнал Стоп
;установить еденицу в порт А
sbi $1В, 0
rcall time016
;установить ноль в порт А
cbi $1В, 0
rcall time016
;установить еденицу в порт А
sbi $1В, 0
rcall time016
/установить ноль в порт А
cbi $1В, 0
rcall time016
/установить еденицу в порт А
sbi $1В, 0
rcall time016
Пропорциональное радиоуправление
263
Листинг 10.3. Продолжение
;установить ноль в порт А
cbi $1В, О
rcall time016
nop
rcall pause
.*******************************
cis
clz
clc
cln
cpi Stp, $05
breq hopp
nop
rjmp Start
nop
hopp: nop
rjmp nStart
;подпрограмма паузы опознавания
pause: nop
cbi $1B, 0
rcall time016
cbi $1B, 0
rcall time016
cbi $1B, 0
rcall time016
cbi $1B, 0
rcall time016
cbi $1B, 0
rcall time016
cbi $1B, 0
rcall time016
cbi $1B, 0
rcall time016
cbi $1B, 0
rcall time016
cbi $1B, 0
rcall time016
cbi $1B, 0
rcall time016
nop
ret
;подпрограмма первого кода
perva: nop
;установить еденицу в порт А
sbi $1В, 0
rcall time016
264
Глава 10
Листинг ЮЛ. Продолжение
/установить ноль в порт А
cbi $1В, 0
rcall time016
/установить еденицу в порт А
sbi $1В, 0
rcall time016
/установить ноль в порт А
cbi $1В, 0
rcall time016
/установить еденицу в порт А
sbi $1В, 0
rcall time016
/установить ноль в порт А
cbi $1В, 0
rcall time016
ret
/подпрограмма второго кода
vtora: пор
/установить еденицу в порт А
sbi $1В, 0
rcall time016
/установить ноль в порт А
cbi $1В, 0
rcall time016
/установить ноль в порт А
cbi $1В, 0
rcall time016
/установить ноль в порт А
cbi $1В, 0
rcall time016
/установить еденицу в порт А
sbi $1В, 0
rcall time016
/установить ноль в порт А
cbi $1В, 0
rcall time016
ret
/Подпрограмма работы АЦП1
/Настройка АЦП
add: пор
пор
clr tmp
awe: пор
cpi tmp, $04
brsh ass
clr tmp3
Пропорциональное радиоуправление
265
Листинг 10J. Продолжение
Idi tmp3, $81 /внутренний источник, вход ADC1
out ADMUX, tmp3 ;коммутация входов АЦП
clr tmp2
clr tmp3
Idi tmp2, $C4 /одиночное, запуск, 1/16
out ADCSR, tmp 2 /запуск АЦП на преобразование
;Сохранение данных АЦП
in tmp2 , ADCL
in tmp3 , ADCH
mov r2, tmp2
mov r3, tmp3
mov r4, r2
mov r5, r3
mov r6, r4
mov r7, r5
inc tmp
rjmp awe
;среднее арифметическое действие
ass: пор
clr г8
clc
add tmp2, r2
adc r9, r8
add tmp2, r4
adc r9, r8
add tmp2, гб
adc r9, r8
clc
Isr r9
ror tmp2
Isr r9
ror tmp2
clr r9
clc
add tmp3, r3
adc r9, r8
add tmp3, r5
adc r9, r8
add tmp3, r7
adc r9, r8
clc
Isr r9
ror tmp3
Isr r9
ror tmp3
nop
266
Глава 10
Листинг КкЗ, Продолжение
ret
;Подпрограмма работы АЦП2
;Настройка АЦП
adc2: пор
nop
clr tmp
awe2: nop
cpi tmp, $04
brsh ass2
clr tmp3
Idi tmp3, $82 ;внутренний источник, вход ADC2
out ADMUX, tmp3 ;коммутация входов АЦП
clr tmp2
clr tmp3
Idi tmp2, $C4 ;одиночное, запуск, 1/16
out ADCSR, tmp2 ;запуск АЦП на преобразование
;Сохранение данных АЦП
in tmp2, ADCL
in tmp3, ADCH
mov r2, tmp2
mov r3, tmp3
mov r41 r2
mov r5, r3
mov r6, r4
mov r7, r5
inc tmp
rjmp awe2
;среднее арифметическое действие
ass2: пор
clr г8
clc
add tmp2, r2
adc r9, r8
add tmp2, r4
adc r9, r8
add tmp2, гб
adc r9, r8
clc
Isr r9
ror tmp2
Isr r9
ror tmp2
clr r9
clc
add tmp3, r3
adc r9, r8
Пропорциональное радиоуправление
267
Листинг Ю. Продолжение
add tmp3, г 5
adc r9, г8
add tmp3, г 7
adc r9, г8
clc
Isr r9
ror tmp3
Isr r9
ror tmp3
nop
ret
/Подпрограмма паузы 60mS
time60: nop
clr urr
bed: nop
rcall timel6
inc urr
cis
clz
clc
cln
cpi Urr, $25 /37 циклов
brsh hsa
nop
rjmp bed
nop
hsa: nop
nop
ret
/Подпрограмма паузы опознавания l,6mS
timel6: nop
rcall zader
nop
ret
/Подпрограмма 0,16mS
/Подпрограмма задержки включения
zader: nop
Idi tmp3, $03
zxc: nop
wdr
clz
cln
wdr
Idi Ma, $AF
clr Ya
268
Глава 10
листинг ю.з. продолжение
Idi Ya, $AF
nop
goo: nop
nop
dm: nop
Idi Xa, $FA
nop
nop
goq: nop
nop
dv: nop
wdr
nop
dx: dec Ya
brpl dx
clz
cln
dec Xa
brpl dv
clz
cln
dec Ma
brne dm
cln
clz
dec tmp3
brne zxc
ret
/подпрограмма задержки 0,16 мС
time016: nop
wdr
clz
cln
nop
Idi Xa, $1A
Idi Ya, $02
Idi Ma, $2B
nop
dm2: nop
nop
nop
dv2: nop
wdr
nop
dx2: nop
clz
Пропорциональное радиоуправление
269
Листинг Ю. Окончание
cln
dec Ya
nop
brpl dx2
clz
cln
dec Xa
brpl dv2
clz
cln
dec Ma
brne dm2
ret
.EXIT
Листинг 10.4. НЕХ’файл для передатчика
:020000020000FC
:1000000013C000000000000000000000000000001D
:080010000000000000000000Е8
:1000280000000FED0DBF00270ABB0BBB002701E046
:100038000АВВ00003327С89498948894А8940000В9
:10004800АА276ВВЗС89498948894А8946074603471
:10005800E9F00000AFD098948894A8942695179555
:1000680098948894A89426951795C12ED7D09894DB
:100078008894А8942695179598948894А89426957А
:100088001795D12E00001D2D2C2D0DC0000014ED4C
:10009800С89498948894А8946078603811F4000003
:1000A8002FE3000020E00000A395C12ED22EEAD055
:1000B800D89A22D1D89820D1D89A1ED1D8981CD1B4
:1000C800D8981AD1D89818D142D0C89498948894BE
:1000D800A8943D3C21F0412F51D03DEC05C00000D3
:1000E800422F5AD030E0552700008894440F28F05A
:1000F800D89802D1D89800D104C0D89AFDD0D89801
:10010800FBD000005395C89498948894A8945830CC
:1001180011F0EACF000000001AD0QO00D89AECD005
:10012800D898EAD0D89AE8D0D898E6D0D89AE4D027
:10013800D898E2D000000BD0C89498948894A894DA
:10014800A53019F00000AFCF0000000078CF000004
:10015800D898D2D0D898D0D0D898CED0D898CCD05B
:10016800D898CAD0D898C8D0D898C6D0D898C4D06B
:10017800D898C2D0D898C0D0000008950000D89A66
:10018800BBD0D898B9D0D89AB7D0D898B5D0D89A83
:10019800B3D0D898B1D008950000D89AADD0D898E7
:1001A800ABD0D898A9D0D898A7D0D89AA5D0D898A5
:1001B800A3D008950000000000270000043088F450
:1001С800222721Е827В91127222714ЕС16В914В1Е0
270
Глава 10
Листинг 10.4. Окончание
: 1001D8002 5B1212E322E4 22C532C642C7 52C0395DC
:1001E800ECCF000088248894120D981C140D981CDC
:1001F800160D981C8894969417959694179599249В
: 1002080088942 30D981C2 50D981C270D981C8 894FC
:10021800969427959694279500000895000000006D
: 100228000027000004 3088F4222722E827B9112784
:10023800222714ЕС16В914В125В1212Е322Е422СЕ6
:10024800532С642С752C0395ECCF000088248894DB
:10025800120D981C140D981C160D981C88949694D1
:1002680017959694179599248894230D981C250D15
:10027800981C270D981C88949694279596942795F2
: 10028800000008950000BB2700000DD0B395C89466
:1002980098948894A894B53218F40000F5CF00001B
:1002A800000000000895000002D00000089500003A
:1002B80023E00000A8959894A894A8959FEA77272A
:1002C8007FEA00000000000000008AEF0000000044
:1002D800000000000000A89500007A95F2F79894B5
:1002E800A8948A95BAF79894A8949A9569F7A894C7
:1002F80098942A95F1F608950000A8959894A894E2
:1003080000008АЕ172Е09ВЕ20000000000000000АВ
:100318000000А895000000009894А8947А95000021
:10032800D2F79894A8948A959AF79894A8949A954D
:0403380061F70895CC
:00000001FF
Конструкция передатчика
Конструкция передатчика собрана на одной плате (рис. 10.9).
Рис. 10.9. Плата передатчика
Пропорциональное радиоуправление 271
Передатчик оснащен двумя джойстиками-манипуляторами и тремя
кнопками: “Питание”, “Стоп” и “Фары”. Для улучшения качества пере-
дачи сигнала к схеме добавлена выдвижная антенна. Джойстик передат-
чика изготовлен самостоятельно. Для упрощения его конструкции автор
использовал переменные резисторы с колпачками. В колпачках высвер-
лены отверстия под углом 45° и нарезана резьба. В эти отверстия завин-
чиваются шпильки с ручками на конце. Кнопки “Стоп” и “Фары” имеют
высокие колпачки.
Под платой передатчика находится отсек для батарей питания. От-
сек соединен с платой проводами. Питание 4,5 В подается в точку LSP1.
Нулевой провод паяется в точку LSP2. Антенна подключается к точке
ANT 1. Вся конструкция помещается в один корпус.
Глава 11
Радиоуправляемый джип |
Радиоуправляемая модель всегда востребована в радиолюбитель-
ской практике. Спортивные соревнования, выставки, экспозиции задей-
ствуют радиоуправляемые модели и устройства. В основу всех пред-
ставленных на рис. 11.1 моделей заложено микроконтроллерное управ-
ление.
Рис. 11.1. Радиоуправляемые модели с микроконтроллерным управлением
Микроконтроллер выполняет много функций: преобразует последо-
вательный цифровой код в восьмиразрядный, декодирует восьмираз-
рядный код в команду, управляет исполнительными механизмами,
включает и выключает двигатели и т.д. В настоящее время многие мо-
дели используют для перемещения видеокамеры. В этом процессе также
участвует микроконтроллер. Например, он может вращать или накло-
нять камеру, включать подсветку при видеосъемке и передавать видео-
данные на пульт управления...
Радиоуправляемый джип
273 '
В 1984 году была разработана известная в СССР конструкция ра-
диоуправляемой модели, [26] но ее сложность и громоздкость усложня-
ли ее массовое воспроизведение. Вторая попытка создать простую ра-
диоуправляемую модель была более успешной. [27] Кроме того, данные
о многих моделях так и не были опубликованы. Трудности были связа-
ны с разработкой трех электронных модулей: шифратора-передатчика,
приемника и дешифратора.
На рис. 11.1 показаны различные конфигурации и формы моделей.
Крупные колеса, хорошие электродвигатели, аккумуляторные батареи...
Все это сегодня доступно, поэтому автор считает, что главное — это ди-
зайн. Дизайн рассматриваемой в данной главе модели отталкивался от
внешнего корпуса. Прежде всего, модель имитирует джип, который
наиболее вместителен для вспомогательных блоков и не предъявляет
требований по высоте кузова (рис. 11.2).
Рис. 11.2. Радиоуправляемая модель джипа
Представленная модель может двигаться вперед, назад, влево, впра-
во, исходя из полученных команд. В качестве передатчика используется
рассмотренный в предыдущей главе вариант. Все команды, формируе-
мые передатчиком, совместимы с радиоуправляемым джипом. В модели
установлена антенна и приемник радиосигнала, а также — микрокон-
троллерная схема управления и исполнительные силовые элементы.
Приемник радиоуправляемой модели
Принципиальная схема приемника показана на рис. 11.3.
274
Глава 11
Рис. 11.3. Принципиальная схема приемника радиоуправляемой модели
В продаже присутствуют готовые модули приемников на базе мик-
росхем LM1863, LM1872, СА3088, СХА1600, СХА1744, МС13025, МС-
13030, ТЕА6200 и т.д. Некоторые микросхемы разработаны для ис-
пользования в радиоуправляемых моделях, но код этих устройств оди-
наковый, поэтому управлять несколькими моделями сложно. Для этого
разработана схема приемника в виде модуля (рис. 11.4).
Для управления моделью цифровой сигнал поступает с приемника
на плату микроконтроллера. Автор выбрал наиболее распространенную
микросхему гетеродинного приемника TDA1072. [25, 28]
Перечислим некоторые ее характеристики:
• напряжение питания — UIIHI = 7,8.. 18 В;
• потребляемый ток — 1Р = 15..30 мА;
• максимальная рабочая частота — f = 60 МГц;
• чувствительность по входу — Vi = 30 мкВ;
• выходное напряжение сигнала — Vo(af) = 390 мВ;
• выходное напряжение индикатора сигнала — V9-16 = 150 мВ.
Приемник имеет в своем составе усилитель высокочастотного сиг-
нала (УВЧ), двойной балансный смеситель, высокочастотный генератор,
усилитель промежуточной частоты (УПЧ), амплитудный детектор,
предварительный усилитель низкочастотного сигнала (усилитель НЧ),
систему автоматической регулировки усилением (АРУ), схему индика-
Радиоуправляемый джип
275
тора сигнала, схему управления напряжением питания, схему включе-
ния/выключения AM, FM.
Рис. 11.4. Схема приемника в виде модуля
Рассмотрим более подробно прохождение сигнала. Входной высо-
кочастотный (ВЧ) сигнал поступает на антенну и проходит через контур
С9, L1, настроенный на частоту 27 МГц. Далее ВЧ сигнал через R3 по-
падает на затвор полевого транзистора QI. С R2 усиленный сигнал про-
ходит через Cl, R1 на вывод 14 микросхемы 1С1. С вывода 14 микро-
схемы TDA1072 [28] ВЧ сигнал проходит на усилитель высокочастот-
ного сигнала (коэффициент усиления 30 дБ [28]) и далее — в двойной
балансный смеситель.
Поскольку приемник настроен на одну частоту приема fl = 27 МГц,
генератор гетеродина возбуждается кварцевым резонатором Q2 (выводы
11, 12 TDA1072) с частотой f2 = 26,535 МГц. Сигнал с генератора гете-
родина подается в двойной балансный смеситель. В результате биения
частот получим сигнал с промежуточной частотой fIipoM = fl - 12, т.е.
fipoM = 465 кГц. Полученный сигнал промежуточной частоты поступает
на вывод 1 микросхемы TDA1072. Далее через фильтр промежуточной
частоты Q4 (настроенный на резонансную частоту 465 кГц) сигнал про-
ходит на вход усилителя промежуточной частоты (вывод 3 микросхемы
TDA1072).
Поскольку сигнал промежуточной частоты во время фильтрации
теряет 30 дБ, необходимо усиление. Сигнал усиливается в УПЧ (коэф-
276
Глава 11
фициент усиления 55 дБ [28]) и поступает на амплитудный детектор.
После детектирования низкочастотный сигнал поступает в усилитель
НЧ (общий коэффициент усиления с УПЧ 68 дБ). Усиленный низкочас-
тотный сигнал проходит на вывод 6 микросхемы TDA1072.
Далее через С8 НЧ сигнал проходит на схему микроконтроллерного
управления моделью. Особенностью схемы является питание приемни-
ка U = 10 В. Для выполнения этого требования питание микросхемы по-
лучено в результате последовательного соединения с основным источ-
ником U1 = 4,5 В (рис. 11.5) двух небольших аккумуляторов: U2 = 3,6 В
и U3 = 3,6 В (см. рис. 11.4). В результате UnHT = 11,7 В.
Рис. 11.5. Основной источник питания приемника
Вторая особенность — это отсутствие контуров (кроме входного
L1), что облегчает процесс сборки приемника. Для приемника цифрово-
го сигнала не обязательно использовать контуры — достаточно резо-
нансных частот, а гармоничность сигнала не имеет смысла, поскольку
передается цифровой код.
В схеме также используется индикатор получения сигнала, собран-
ный на Q3, LED1, R4. С вывода 9 микросхемы TDA1072 сигнал индика-
ции поступает на полевой транзистор Q3. Транзистор открывается, и ток
стока протекает через LED1, R4. Тем самым можно наблюдать прием
сигнала с кодом управления.
Монтажная плата приемника
Использованные в приемнике детали:
• микросхема гетеродинного приемника TDA1072 в DIP-корпусе;
• полевые транзисторы BF245 в корпусе ТО092;
Радиоуправляемый джип
277
• резисторы МЛТ 0,125;
• конденсаторы на напряжение 16 В;
• светодиод любой на ток 3 мА;
• полосовой фильтр Q4 — Murata CFS 465 (возможен вариант вклю-
чения кварцевого резонатора на 465 кГц с тремя согласующими ре-
зисторами);
• индуктивность L1 — Murata 5 мкГн (второй вариант — 4,7 мкГн);
• С9 подбирается — 6,8 пкФ (второй вариант — 8,2 пкФ);
• дополнительные аккумуляторы 3,6 В, 60 мАч NI-CD (CE60BVKX3).
На монтажной плате приемника (рис. 11.6) элементы расположены
на одной стороне. На этой же стороне присутствует одно соединение,
которое можно изготовить во время травления двухстороннего тексто-
лита или путем напайки перемычки.
Рис. 11.6. Монтажная плата приемника
278
Глава 11
Автор собрал плату навесным монтажом (см. рис. 11.4). К ней под-
ключается питание (последовательно два аккумулятора 3,6 В, 60 мА/час
и силовая батарея 4,5 В) в точке +U, и нулевой провод — в точке
“GND”. Антенна подключается к точке “ANT 1”. Цифровые данные
снимаются с точки “Вых”.
Настройка приемника
Настройка начинается с входного контура УВЧ. Настраиваем кон-
тур: антенна (должна быть установлена до настройки), LI, С9 с помо-
щью милливольтметра. На вход подается сигнал с частотой 27 МГц
и уровнем напряжения 0,1 В. На R7 подключается милливольтметр. Пу-
тем подбора С9 настраивается максимальное значение напряжения. На
вывод 14 микросхемы IC1 с генератора подается частота 27 МГц с уров-
нем напряжения 1 В. Частотомер подключается к выводу 1 микросхемы
IC1. С помощью R5 и СЗ подстраивается частота гетеродина так, чтобы
на частотомере было значение 465 кГц. После настройки приемник го-
тов к эксплуатации. Процесс настройки можно проводить от рабочего
передатчика, без использования приборов.
Схема микроконтроллерного управления
Схема микроконтроллерного управления (рис. 11.7) состоит из пяти
микросхем:
• 1С1 — микроконтроллер ATtiny26;
• IC2 — компаратор LM2903;
• US1-US3 —драйверы LB1642.
Питание схемы подается от батареи 4,5 В в точку платы +U. Свето-
диод LED 1 сигнализирует о включении питания. Для уменьшения
пульсаций питания рядом с каждой микросхемой устанавливается элек-
тролитический конденсатор.
Микроконтроллер синхронизируется от кварцевого резонатора Q1.
Сброс при включении питания осуществляется через цепочку R1, СЗ.
Цифровой сигнал с приемника поступает на вход компаратора IC2A,
а затем — в IC2B. Компараторы усиливают сигнал и формируют циф-
ровую последовательность, которая проходит на вывод 9 микрокон-
троллера. В микроконтроллере сигнал обрабатывается, и формируется
код управления моделью, выдаваемый через порт А на драйверы US1-
US3.
Шаговый двигатель (ШД) рулевой колонки управляется от драйвера
USI, US3. Он позаимствован из флоппи дисковода.
Радиоуправляемый джип
279
Рис. 11.7. Схема
микроконтроллерного управления
US1-US3 LB1642
280
Глава 11
Во время включения радиоуправляемой модели выполняется ка-
либровка ШД рулевого управления. Эта операция предусматривает
полный цикл поворота передних колес вправо, а затем — влево. Опера-
ция выполняется последовательно, до срабатывания контактов ограни-
чения хода рулевого управления. Детали этих контактов можно позаим-
ствовать из обычных реле, припаяв их прямо на плату. Как только кон-
такты сработали, ШД останавливается, после чего количество выпол-
ненных импульсов делится пополам и отрабатывается рулевой систе-
мой.
Колеса устанавливаются прямо по ходу движения. Двигатель при-
вода модели (вперед, назад) заимствован из привода CD-ROM. Двига-
тель управляется от US2. Транзистор Q2 включает или выключает пита-
ние фар LED2, LED3. Для оперативности программирования радио-
управляемой модели на плате предусмотрен разъем XI.
Монтажная плата
Монтажная плата схемы микроконтроллерного управления вытрав-
ливается, как единое целое, а затем разделяется на две части (рис. 11.8).
Рис. 11.8. Монтажная плата схемы микроконтроллерного управления
Одна часть — это плата микроконтроллера (рис. 11.9), а другая —
плата привода (рис. 11.10). Между ними впаиваются провода, которые
укладываются в шины по бокам плат. Плата микроконтроллера распола-
гается над платой привода. Обе платы имеют двухстороннюю разводку
(рис. 11.11).
Радиоуправляемый джип
281
Рис. 11.9. Плата микроконтроллера
Рис. 11.10. Плата привода
282
Глава 11
Рис. 11.11. Разводка платы микроконтроллерного управления
На плате микроконтроллера установлен разъем XI для быстрого
программирования. От нее вдоль корпуса модели протягиваются прово-
да фар LED2, LED3. Прежде чем паять радиодетали, на плату привода
устанавливается ШД (точки ТР4-ТР7, черная площадка) и две пары кон-
тактов S1, S2. ШД крепится к плате стяжкой и имеет подложку из рези-
ны (рис. 11.12). На вал ШД устанавливается уголок с отверстием для ва-
ла (рис. 11.13). Двигатель привода (через второй уголок) крепится к пла-
те рядом с точками ТР2, ТРЗ (черная площадка) (рис. 11.14). Плата при-
Радиоуправляемый джип
283
вода крепится к раме с помощью хомутов из проволоки, спаянных
в местах разрыва (см. рис. 11.14).
Рис. 11.12. Крепление шагового двигателя
Рис. 11.13. Уголок, установленный на вал шагового двигателя
284
Глава 11
Рис. 11.14. Двигатель привода
Как только установлены двигатели, можно приступать к пайке эле-
ментов. Питание на плату подается через разъем XI. Третий вывод это-
го разъема — общий, нулевой провод (GND), а четвертый — провод пи-
тания от силовой батареи 4,5 В (рис. 11.15).
Рис. 11.15. Подача питания на плату
Радиоуправляемый джип
285
Цифровые данные с приемника на плату подаются в точку ТР1 в эк-
ранированном проводе. В микроконтроллер прошивается тестовая про-
грамма.
Тестовая программа
Для проверки правильности подключения выводов двигателей и ра-
боты приемника необходима тестовая программа (листинги 11.1 и 11.2),
которая при включении питания начинает работать автоматически. Тест
можно использовать, как неявный блок.
В ходе теста вначале проверяется двигатель. При движении вперед
скорость двигателя медленно нарастает за счет широтно-импульсной
модуляции (ШИМ), а затем медленно спадает. Для движения назад вал
начинает вращаться в обратную сторону, скорость вращения медленно
нарастает, а затем медленно спадает.
ШИМ достигается путем разделения импульса управления на пять
участков. Минимальная длительность импульса должна быть равна ми-
нимальному напряжению питания (которое позволяет двигать конст-
рукцию) за одну секунду. Для двигателя от привода CD-ROM мини-
мальная длительность составляет tmin = 20 мс (экспериментальные дан-
ные).
Максимальная мощность электродвигателя эквивалентна Ртах €
tmin'5. Другими словами, для минимального импульса ШИМ электро-
движущая сила вращения роторной обмотки двигателя должна быть на-
много больше суммы сил торможения (роторной обмотки) и сил, затра-
чиваемых на вращение редуктора и начало движения конструкции джи-
па. При выполнении этих условий получим минимальное движение мо-
дели.
Далее проверяется двигатель рулевого управления. Вначале ШД от-
рабатывает вращение вала так, чтобы руль поворачивал влево. Когда
контакты левой группы S1 замкнулись, импульсы на ШД прекращают
поступать, и он отрабатывает вращение вала так, чтобы руль поворачи-
вал вправо до замыкания S2.
Данные о количестве импульсов между замыканием S1 и S2 запи-
сываются в энергонезависимую память микроконтроллера, и во время
выполнения программы делятся пополам. Тем самым определяется дви-
жение джипа прямо. Если на пульте рычажок находится в центральном
положении, то, соответственно, и колеса должны находится посередине.
Другими словами, радиоуправляемый джип отработает команды по по-
вороту рычажка. Для упрощения операции тестирования используется
схема без подвески (см. рис. 11.15).
286
Глава 11
Листинг 11 Л. Тестовая программа приемника
.include "D:\Program Files\Atmel\AVR Studio\Appnotes\tn26def.inc”
/Автор: Кравченко А.В.
/Дата: 8.12.2009
/Версия: 1.1.3
/Имя файла: kalibr.asm
/Микроконтроллер: AVR tiny26.
/Тактовая частота: 8МГц
/Питание: нестабилизированное 4,5 В
/Тест2
. list
def adr = rO
def tmp = Г16
def tmp2 = rl7
def tmp3 = rl8
def cam = rl9
def pered = r20
def bit = r21
def Ya = r23
def Xa = r24
def Ma = r25
def tmp6 = r26
def cuf = r22
. cseg
. org 0
rjmp nop RESET /rjmp EXT_INT0 - прерывание по входному сигналу
nop /rjmp EXT_PIN - прерывание не используется
nop /rjmp TIME-CMPA - прерывание от таймера
nop /rjmp TIME-CMPB прерывание от таймера
nop /rjmp TIME_OVF1 - прерывание от таймера
nop /rjmp TIME_OVFO - прерывание от таймера
nop /rjmp UCI_STRT - прерывание от USI
nop /rjmp UCI_OVF - прерывание от USI
nop /rjmp EE_RDY - прерывание от таймера
nop /rjmp ANA_COMP - прерывание от компаратора
nop /rjmp ADC - прерывание от АЦП
.org 30
/настройка порта В
RESET: пор
Idi tmp, low(RAMEND) /вершина стека
out SP, tmp
clr tmp
Радиоуправляемый джип
287
Листинг 11 Л. Продолжение
out DDRA, tmp
out PORTA , tmp ;обнулить порт A
clr tmp
Idi tmp, $01 ;РАО-выход
out DDRA, tmp
nop
clr cam
;начало программы
Start: пор
;ШИМ управление вперед 5 скоростей
;1-я скорость
.★***★***★**★★**★**★★★★**★**★*★**
;повтор 10 раз
clz
clr cam
ass: nop
inc cam
;установить еденицу в порт А
sbi $18, 5
rcall time200
;установить ноль в порт А
cbi $18, 5
rcall time200
nop
rcall time200
nop
rcall time200
nop
rcall time200
cpi cam, $0A
breq djj
nop
rjmp ass
nop
djj: nop
*********************************
;2-я скорость
•★★★★★*★★★★★★★*★******★★********★
;повтор 10 раз
clz
clr cam
ass2: nop
inc cam
;установить еденицу в порт А
sbi $18, 5
rcall time200
288
Глава 11
Листинг 11 л. Продолжение
пор
rcall time200
пор
;установить ноль в порт А
cbi $18, 5
rcall time200
пор
rcall time200
пор
rcall time200
cpi cam, $0A
breq dj j2
nop
rjmp ass2
nop
djj2: nop
/
;3-я скорость
•★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
9
;повтор 10 раз
clz
clr cam
ass3: nop
inc cam
;установить еденицу в порт А
sbi $18, 5
rcall time200
nop
rcall time200
nop
rcall time200
nop
/установить ноль в порт А
cbi $18, 5
rcall time200
nop
rcall time200
cpi cam> $0A
breq djj3
nop
rjmp ass3
nop
djj3: nop
9
;4-я скорость
Радиоуправляемый джип
289
Листинг 11Л. Продолжение
/повтор 10 раз
clz
clr cam
ass4 : nop
inc cam
;установить еденицу в порт
sbi $18, 5
rcall nop time200
rcall nop time200
rcall nop time200
rcall time200
;установить ноль в порт A
cbi $18, 5
rcall nop- time200
cpi cam, $0A
breq nop dj j4
rjmp nop ass4
d3 j4 : nop
• * * * * ******* **************
; 5-я скорость
• * ★ ★ * ******* **************
/повтор 10 раз clz
clr cam
ass5: nop
inc cam
/установить еденицу в порт
sbi $18, 5
rcall nop time200
rcall nop time200
rcall nop time200
rcall nop time200
rcall nop time200
cpi cam, $0A
breq dj j5
290
Глава 11
л истинг 11 л, продолжение
пор
rjmp ass5
пор
djj5 : пор
•★★★*******★★*★*****★★★****★*★***
9
/ШИМ управление назад 5 скоростей
/1-я скорость
.********************************
9
/повтор 10 раз
clz
clr cam
assn: nop
inc cam
/установить еденицу в порт А
sbi $18, 4
rcall time200
/установить ноль в порт А
cbi $18, 4
rcall time200
nop
rcall time200
nop
rcall time200
nop
rcall time200
cpi cam, $0A
breq djjn
nop
rjmp assn
nop
djjn: nop
•★*★★★*★★★*★*★**★★*★*★★★★★★★★★★★*
9
;2-я скорость
/повтор 10 раз
clz
clr cam
assn2: nop
inc cam
/установить еденицу в порт А
sbi $18, 4
rcall time200
nop
rcall time200
nop
/установить ноль в порт А
Радиоуправляемый джип
291
Листинг 11,1. Продолжение
cbi $18, 4
rcall time200
nop
rcall time200
nop
rcall time200
cpi cam, $0A
breq djjn2
nop
rjmp assn2
nop
djjn2: nop
;3-я скорость
/повтор 10 раз
clz
clr cam
assn3: nop
inc cam
/установить еденицу в порт А
sbi $18, 4
rcall time200
nop
rcall time200
nop
rcall time200
nop
/установить ноль в порт А
cbi $18, 4
rcall time200
nop
rcall time200
cpi cam, $0A
breq djjn3
nop
rjmp assn3
nop
djjn3: nop
9
/4-я скорость
9
/повтор 10 раз
clz
clr cam
assn4: nop
292
Глава 11
Листинг 11.1. Продолжение
inc cam
;установить еденицу в порт
sbi $18, 4
rcall time200
nop rcall time200
nop rcall time200
nop rcall time200
;установить ноль в порт A
cbi $18, 4
rcall nop time200
cpi cam, $0A
breq dj jn4
nop rjmp assn4
nop
djjn4: nop
•★★★★★★★★★★★ 9
;5-я скорость
9
;повтор 10 раз
clz
clr cam
assn5: nop
inc cam
;установить еденицу в порт
sbi $18, 4
rcall time200
nop rcall time200
nop rcall time200
nop rcall time200
nop rcall time200
nop
cpi cam, $0A
breq dj jn5
nop rjmp assn5
nop
djjn5: nop
Радиоуправляемый джип
293
Листинг 11Л Л 1родолжение
. *********** *********************
/калибровка двигателя руля
• *********** *********************
;влево
. *********** *********************
clz
clr cuf
tre: nop
inc cuf
/установить еденицу в порт A
sbi $18, 0
rcall time60
nop
cbi $18, 0
nop
sbi $18, 2
rcall time60
nop
cbi $18, 2
;проверить контакты
sbic $1B, 6
sbis $1B, 7
rjmp tre
;если контакты сработали СТОП
cbi $18, О
пор
cbi $18, 2
пор
;поворот обратно
mov rll, cuf
clz
clr cuf
tru: nop
inc cuf
/установить еденицу в порт А
sbi $18, 1
rcall time60
nop
cbi nop $18, 1
sbi $18, 3
rcall time60
nop
cbi $18, 3
/проверить контакты
sbic $1В, б
294
Глава 11
Листинг 11Х Продолжение
sbis $1В, 7
rjmp tru
;если контакты сработали {ЗТОП
cbi $18, 1
пор
cbi $18, 3
пор
;начать темт сначало
mov rll, cuf
rjmp Start
;Подпрограмма паузы 200mS
time200: nop
clz
clr tmp6
asud2: nop
inc tmp6
rcall timel6
cpi tmp6, $0C
breq cop2
nop
rjmp asud2
nop
cop2: nop
nop
ret
;Подпрограмма паузы 60mS
time60: nop
clz
clr tmp6
asudl: nop
inc tmp6
rcall timel6
cpi tmp6, $04
breq copl
nop
rjmp asudl
nop
copl: nop
nop
ret
Подпрограмма паузы опознавания l,6mS
timel6: nop
Idi tmp3, $03
zxc: nop
wdr
Радиоуправляемый джип
295
Листинг 11.1, продолжение
clz
cln
wdr
Idi Ma, $AF
clr Ya
Idi Ya, $AF
nop
goo: nop
nop
dm: nop
Idi Xa, $FA
nop
nop
goq: nop
nop
dv: nop
wdr
nop
dx: dec Ya
brpl dx
clz
cln
dec Xa
brpl dv
clz
cln
dec Ma
brne dm
cln
clz
dec tmp3
brne zxc
ret
;Подпрограмма 0 r 16mS
;Подпрограмма задержки включения
timed 6: пор
wdr
clz
cln
пор
Idi Ха, $1А
Idi Ya, $02
Idi Ma, $2B
nop
dm2: nop
nop
296
Глава 11
Листинг 11 л, Окончание
пор
dv2: пор
wdr
пор
dx2: пор
clz
cln
dec Ya
пор
brpl dx2
clz
cln
dec Xa
brpl dv2
clz
cln
dec Ma
brne dm2
ret
. eseg
Листинг 11.2. HEX-файл тестовой программы приёмника
:020000020000FC
:100000001DC0000000000000000000000000000013
:080010000000000000000000Е8
:10003COOOOOOOFEDODBF00270ABBOBBBOD2701E032
:10004С000АВВ000033270000989433270000339537
:10003C00C59AF5D0C598F3D00000F1D00000EFD0D0
:10006COOOOOOEDD03A3019FOOOOOFOCFOOOOOOOQ95
: 10007C009894 332700003395C59AE1D00000DFD067
:1O0O8COOOOOOC598DCDOOOOODADOOOOOD8DO3A3O9F
:10009C0019FOOOOOEFCFOOOOC00098943327000007
:1000AC003395C59ACCD00000CAD00000C8D000004F
:1000BCOOC598C5DOOOOOC3D03A3019FOOOOOEFCF7E
:1000CC00000000009894332700003395C59AB7D0F0
:1000DCOOOOOOB5DOOOOOB3DOOOOOB1DOC598AFDOAF
:1000EC0000003A3019F0OO00EFCF00OOOQ009894A7
:1000FC00332700003395C59AA2D00000A0D0000091
:10010C009ED000009CD000009AD000003A3019F02C
:10011C000000EFCF000000009894332700003395C7
:10012C00C49A8DD0C4988BD0000089D0000087D0A1
:10013C00000085D03A3019F00000F0CF000000002C
:10014C009894332700003395C49A79D0000077D067
:10015C000000C49874D0000072D0000070D03A3007
:10016C0019F00000EFCF0000000098943327000036
:10017C003395C49A64D0000062D0000060D00000B7
Радиоуправляемый джип
297
Листинг 11.2. Окончание
:10018C00C4985DD000005BD03A3019F00000EFCF7E
:10019C00000000009894332700003395C49A4FD088
:1001AC0000004DD000004BD0000049D0C49847D07F
:1001BC0000003A3019F00000EFCF000000009894D6
:1001CC00332700003395C49A3AD0000038D0000091
:1001DC0036D0000034D0000032D000003A3019F094
:1001EC000000EFCF00000000989466270000639594
:1001FC00C09A33D00000C0980000C29A2ED00000E4
: 10020C00C298DE99DF9BF2CFC0980000C29800002 4
: 10021C00B62E9894 662700006395C19A1ED00000F4
:10022С00С1980000С39А19D00000C398DE99DF9BD7
:10023C00F2CFC1980000C3980000B62E04CF000086
:10024С009894АА270000А39516D0AC3019F00000A2
:10025C00F9CF000000000000089500009894AA2730
:10026C000000A39508D0A43019F00000F9CF0C00CD
:10027С00000000000895000023Е00000А895989469
:10028C00A894A8959FEA77277FEA00000000000059
:10029C0000008AEF00000000000000000000A8959C
:1002AC0000007A95F2F79894A8948A95BAF79894E6
:1002BC00A8949A9569F7A89498942A95F1F60895BC
:1002СС000000А8959894А89400008АЕ172Е09ВЕ243
:1002DC0000000000000000000000A89500000000D5
:1002EC009894A8947A950000D2F79894A8948A953B
:0C02FC009AF79894A8949A9561F70895D9
:00000001FF
Рабочая программа приемника
Программа работы микроконтроллера состоит из шестнадцати от-
дельно протестированных подпрограмм: mmv, vpered, vlevpra, stops,
vpereda, nazada, kalifHr, vlevo, vpravo, key, EXT_INT0, TIME_OVF1,
TIME_OVFO, time002, anal, zaderl. Рассмотрим суть этих подпро-
грамм.
В начале программы до метки Start обнуляются все данные и ини-
циализируются порты ввода-вывода. Основная подпрограмма mmv начи-
нается с запроса подпрограммы kalibr для определения местоположе-
ния передних колес. Далее опрашиваются данные, полученные прием-
ником и записанные в оперативную память. Если передали команду
с данными о повороте влево на 20°, то робот выполняет это действие
и ожидает следующие данные. Если передано двигаться с первой скоро-
стью, то отрабатывайся эта команда. Отменить действие или изменить
угол и скорость движения может только следующая команда с другими
данными. Такой подход к управлению позволяет отказаться от частой
передачи данных.
298
Глава 11
После чтения данных из ОЗУ на их место записываются нули. Про-
веряется код команды: вперед/назад — $Е0; влево/вправо — $А0; оста-
нов — $D4. В зависимости от результата, вызывается соответствующая
подпрограмма.
Данные, полученные от АЦП микроконтроллера, в ходе опроса
уровня напряжения движков джойстика (вперед/назад) передатчика за-
писываются и считываются в следующей ячейке ОЗУ после команды.
Подпрограмма vpered определяет направление движения джипа:
вперед или назад. Во время поворота движка резистора передатчика
данные изменяются от 00h до FFh (среднее значение 7РЬ).Для того что
бы определить направление движения, из полученных данных вычита-
ется среднее значение 7Fh, и результат проверяется на знак. Если он —
положительный, то джип движение влево или вперед (в зависимости от
команды). Если знак — отрицательный, то движение — вправо или на-
зад.
Аналогичным образом работает подпрограмма vlevpra. Она опре-
деляет направление поворота колес и их крайнее местоположение, реги-
стрируемое подпрограммой key.
Подпрограммы vlevo и vpravo задают очередность и скорость по-
дачи импульсов шагового двигателя руля. Они реализуют один полный
оборот вала шагового двигателя.
Подпрограмма zaderl формирует временные паузы в 20 мс. Они
необходимы для установки импульса шагового двигателя или для ши-
ротно-импульсной модуляции двигателя привода (вперед/назад).
Система декодирования информации является синхронной. Син-
хронность задается измерением длительности поступающего сигнала.
Приоритет сигнала — по нулевому значению. Для определения сигнала
необходимо измерить длительность импульса, поступающего на вход
микроконтроллера.
Поскольку передатчик передает единичный уровень на протяжении
0,16 мс, длительность нулевого уровня составит 0,32 мс. Во время полу-
чения импульсов управления от приемника через компаратор активизи-
руется подпрограмма ext intO. Синхронизация входящего сигнала
реализована с помощью системы прерываний микроконтроллера. Она
организована так, что микроконтроллер получает сигнал и через равные
промежутки времени сканирует данные.
Блок-схема алгоритма синхронного определения (рис. 11.16) содер-
жит четыре ветви. Основной блок — это вектор прерывания. Для того
чтобы определить длительность заданного сигнала, необходимо отсчи-
тать 0,16 мс (длительность единичного бита) и 0,32 мс (длительность
Радиоуправляемый джип
299
нулевого бита). Для этого мы воспользуемся двумя таймерами микро-
контроллера.
Рис. 11.16. Блок-схема алгоритма синхронного определения
Активизируются таймеры ТО и Т1. Как только выполнен полный от-
счет ТО, устанавливается флаг прерывания, и по вектору прерывания
программа переходит к подпрограмме TIME_OVFO (рис. 11.17). В под-
программе TIME_OVFO проверяется длительность импульса принятого
приемником джипа. Для более точного установления соответствия при-
нятого импульса вводится опрос порта РВ6 (INTO) с паузами в 0,02 мс.
Для этого используется подпрограмма time002.
Если длительность принятого импульса превышает нормальную бо-
лее, чем на 5%, то импульс считается ложным. Если длительность им-
пульса соответствует норме, то вызывается подпрограмма анализа по-
лученных данных.
Подпрограмма time_OVF1, отслеживает нулевой уровень передан-
ных данных. Она работает аналогично предыдущей.
Для анализа получаемых данных составлена подпрограмма anal.
Анализ выполняется согласно алгоритму, показанному на рис. 11.17.
Рассмотрим пакет передачи данных.
• Пилот-сигнал “Старт” с паузой опознавания — байт 11000000,
что даст отсчет /0,16 мс = 1\; 0,16 мс = 0; /0,16 мс = 1\ 0,16 мс = 0;
0,16 мс = 0_; 0,16 мс = 0; 0,16 мс = 0_; 0,16 мс = 0; 0,16 мс = 0_;
0,16 мс = 0; 0,16 мс = 0_; 0,16 мс = 0; 0,16 мс = 0_; 0,16 мс = 0;
0,16 мс = 0_; 0,16 мс = 0; всего — 2,56 мс.
300
Глава 11
Рис. 11.17. Алгоритм анализа полученных данных
Радиоуправляемый джип
301
• Первая команда (вперед/назад) с паузой опознавания (код
$Е0) — байт 11100000, что даст<отсчет /0,16 мс = 1 \; 0,16 мс = 0;
/0,16 мс = 1\; 0,16 мс =0; /0,16 мс = 1\; 0,16 мс = 0; 0,16 мс = 0_;
0,16 мс = 0; 0,16 мс = 0_; 0,16 мс = 0; 0,16 мс = 0_; 0,16 мс = 0;
0,16 мс = 0_; 0,16 мс = 0; 0,16 мс = 0_; 0,16 мс = 0; всего — 2,56 мс.
• Данные первой команды — байт ХХХХХХХХ, что даст отсчет
/0,16 мс = Х\; 0,16 мс = Х_; /0,16 мс = Х\; 0,16 мс =Х_; /0,16 мс = Х\;
0,16 мс = Х_; /0,16 мс = Х\; 0,16 мс = Х_; /0,16 мс = Х\; 0,16 мс = Х_;
/0,16 мс =Х\; 0,16 мс = Х_; /0,16 мс =Х\; 0,16 мс = Х_; /0,16 мс = Х\;
0,16 мс =Х_; всего — 2,56 мс.
• Пауза опознавания с пилот-сигнал ом “Стоп” — байт 00000111,
что даст отсчет 0,16 мс = 0_; 0,16 мс =0; 0,16 мс = 0_; 0,16 мс = 0;
0,16 мс = 0_; 0,16 мс = 0; 0,16 мс = 0_; 0,16 мс = 0; 0,16 мс = 0_;
0,16 мс = 0; /0,16 мс = 1\; 0,16 мс = 0; /0,16 мс = 1\; 0,16 мс = 0;
/0,16 мс = 1\; 0,16 мс = 0; всего — 2,56 мс.
• Пилот-сигнал “Старт” с паузой опознавания — байт 11000000,
что даст отсчет /0,16 мс - 1\; 0,16 мс = 0; /0,16 мс = 1\; 0,16 мс = 0;
0,16 мс = 0_; 0,16 мс = 0; 0,16 мс = 0_; 0,16 мс = 0; 0,16 мс = 0_;
0,16 мс = 0; 0,16 мс = 0_; 0,16 мс = 0; 0,16 мс = 0_; 0,16 мс = 0;
0,16 мс = 0_; 0,16 мс = 0; всего — 2,56 мс.
• Вторая команда (влево/вправо) с паузой опознавания (код
$А0) — байт 10100000, что даст отсчет /0,16 мс = 1\; 0,16 мс = 0;
0,16 мс = 0; 0,16 мс= 0; /0,16 мс = 1\; 0,16 мс = 0; 0,16 мс = 0_;
0,16 мс = 0; 0,16 мс = 0_; 0,16 мс = 0; 0,16 мс = 0_; 0,16 мс = 0;
0,16 мс = 0_; 0,16 мс = 0; 0,16 мс = 0_; 0,16 мс = 0; всего — 2,56 мс.
• Данные второй команды — байт ХХХХХХХХ, что даст отсчет
/0,16 мс = Х\; 0,16 мс = Х_; /0,16 мс = Х\; 0,16 мс = Х_; /0,16 мс = Х\;
0,16 мс = Х_; /0,16 мс = Х\; 0,16 мс = Х_; /0,16 мс = Х\; 0,16 мс = Х_;
/0,16 мс = Х\; 0,16 мс = Х_; /0,16 мс = Х\; 0,16 мс = Х_; /0,16 мс = Х\;
0,16 мс = Х_; всего — 2,56 мс.
• Пауза опознавания с пилот-сигналом “Стоп” — байт 00000111,
что даст отсчет 0,16 мс = 0_; 0,16 мс = 0; 0,16 мс = 0_; 0,16 мс = 0;
0,16 мс = 0_; 0,16 мс = 0; 0,16 мс = 0_; 0,16 мс = 0; 0,16 мс = 0_;
0,16 мс = 0; /0,16 мс = 1\; 0,16 мс - 0; /0,16 мс = 1\; 0,16 мс = 0;
/0,16 мс = 1\; 0,16 мс = 0; всего — 2,56 мс.
В результате мы получаем восемь переменных. Если учесть, что па-
кет передается пять раз, то необходимо задействовать 40 ячеек памяти
ОЗУ. Микроконтроллер ATtiny26 предоставляет 128 байт ОЗУ.
Вместе с тем, на каждом этапе декодирования программа должна
знать местонахождение процесса, поэтому каждый раз полученная ко-
302
Глава 11
манда анализируется и записывается в ячейки памяти. За это отвечают
подпрограммы обработки команд. Выбранная команда поступает на ис-
полнительный драйвер.
Рабочая программа приемника показана в листингах 11.3 и 11.4.
Листинг 11Х Рабочая программа приемника радиоуправляемой модели
.include "D:\Program Files\Atmel\AVR Studio\Appnotes\tn26def. inc"
/Автор: Кравченко А.В.
/Дата: 15.02.2010
/Версия: 1.1.1
/Имя файла: redku.asm
/Микроконтроллер: AVR tiny26.
/Тактовая частота: 8МГц
/Питание: стабилизированное 3,9 В
/Рабочая программа
. list
def adr = rO
def tmp = Г16
def tmp2 = rl7
def tmp3 = rl8
def tempo = rl9
def pered = r20
def ana = r21
def bit = r23
def Xa = r24
def Ma = r25
def cod = r22
def Ya = r31
9
. cseg
.org 0
rjmp
rjmp
nop
nop
nop
rjmp
rjmp
nop
nop
nop
nop
nop
RESET
EXT—INTO /прерывание по входному сигналу
/rjmp EXT—PIN - прерывание не используется
/rjmp TIME_CMPA - прерывание от таймера
/rjmp TIME-CMPB - прерывание от таймера
TIME_OVF1 /прерывание от таймера
TIME-OVFO /прерывание от таймера
/rjmp UCI_STRT - прерывание от USI
;rjmp UCI_OVF - прерывание от USI
/ rjmp EE_RDY - прерывание от таймера
/rjmp ANA_COMP - прерывание от компаратора
/rjmp ADC - прерывание от АЦП
.org 14
Радиоуправляемый джип
303
Листинг 11Продолжение
/настройка порта В
RESET: пор
9
; запрет всех прерываний
cli
;Настройка прерываний
;Маска прерывания INTO
Idi tmp, $40 /разрешение прерывания INTO
out GIMSK, tmp
Idi tmp, $03 /режим
;условие прерывания по наростающему уровню на INTO
out MCUCR, tmp
;Определение вершины стека
Idi tmp, low(RAMEND) ;вершина стека
out SP, tmp
clr tmp
;Установка портов ввода-вывода в нулевое состояние
out DDRA, tmp
out PORTA, tmp /обнулить порт A
clr tmp
Idi Xmp, $08 /РАЗ-выход
out DDRA, tmp
clr tmp
out PORTB, tmp /обнулить порт В
Idi tmp, $0F /РВО-РВЗ-выходы
out DDRA, tmp
;начало программы
пор
clr pered
clr tmp
mov rlO, tmp
mov r11, tmp
mov r12, tmp
mov r14, tmp
mov r15, tmp
mov rO, tmp
mov r1, tmp
Start: nop rcall kalibr
/Конфигурация внешнего прерывания
;общее разрешение прерывания
Idi tmp, $80
out SREG, tmp
9
/анализ полученных данных, проверка ОЗУ
304
Глава 11
Листинг 11 Л. Продолжение
mmv: пор
Idi г28, $61 /начальный адрес ОЗУ код
Idi гЗО, $62 /начальный адрес ОЗУ данные
;запрет всех прерываний
cli
sdj: nop
;Тело программы
/чтение данных ОЗУ
clr r29
clr r31
Id Г14, Y чтение команды ОЗУ
Id Г15, Z чтение данных ОЗУ
clr Xa
st Y, Xa стираем команду ОЗУ
st Z, Xa стираем данные ОЗУ
inc r28
inc r30
mov tmp3, r28
clz
cpi tmp3, $88 / проверяем верхушку ОЗУ
breq mmv
/анализ вперед, назад, влево, вправо, стоп,
mov tmp3, rl4
/ Стоп
clz
cpi tmp3, $D4 / код команды "стоп"
brbs 1, .sstop
rjmp uryi
sstop: nop /разрешение i всех прерываний
sei rcall nop stops
rjmp sdj
uryi: nop
/запрет всех прерываний
cli
mov tmp3, rl4
clz
cpi tmp3, $E0 ; •код команды "вперед"
brbs 1, vpere
rjmp uryil
vpere: nop
/ запрет всех прерываний
cli rcall vpered
Радиоуправляемый джип
305
Листинг 11.3. Продолжение
пор
rjmp sdj
uryil: пор
;запрет всех прерываний
cli
mov tmp3, rl4
clz
cpi tmp3, $A0 ;код команды ’’влево/вправо"
brbs 1, vlvp
rjmp sdj
vlvp: nop
/разрешение всех прерываний
sei
rcall vlevpra
nop
rjmp sdj
.***********************************************
/Подпрограмма движения вперед
vpered: nop
/распознавание вперед или назад
Idi tmp3, $7F /половина данных АЦП
mov tmp, R15 /переданные данные
clz
cln
cis
ср tmp, tmp3
brge reba
nop
rcall nazada
nop
rjmp sopa
reba: nop
rcall vpereda
nop
sopa: nop
ret
.**************************************************
/подпрограмма движение влево, вправо
vlevpra: nop
/запрет всех прерываний
cli
mov tmp3, rl4 /чтение данных команды
/сравнение с средним значением
Idi tmp, $7F /больше середины
/выбор направления
clr bit
306
Глава 11
Листинг 113, Продолжение
cln
clz
clc
sub tmp, tmp3
brsh nvlevo
rjmp .nvpravo
nvlevo: nop
inc bit
clz
cp tmp, bit
brne fut3
rjmp go6
fut3: nop
rcall vlevo
nop
rcall key
clz
cpi tmp, $04 ;левый датчик сработал
brne fut2
rjmp go6
fut2: nop
rjmp nvlevo
nvpravo: nop
inc bit
clz
cp tmp, bit
brne fut5
rjmp go6
fut5: nop
rcall vpravo
nop
rcall key
clz
cpi tmp, $01 ;правый датчик сработал
brne fut4
rjmp go6
fut4: nop
rjmp nvpravo
доб: nop
ret
.************★*******************************★**
;Подпрограмма Стоп
stops: nop
cbi portA, 3
/запрет всех прерываний
cli
Радиоуправляемый джип
307
Листинг 1 1.3. продолжение
mov tmp, rl5
clz
cpi tmp, $3F /проверка включения фар
breq far
rjmp dal
far: nop
sbi portB, 3 /включить фары
rjmp dalee
dal: cbi portB, 3 /выключить фары
nop
dalee: nop
rcall kalibr
/разрешение всех прерываний
sei
пор
rcall zaderl
ret
. ************************************************
/Подпрограмма движения вперед
vpereda: пор
mov tmp, rl5
/выбор скорости
civ
cln
clz
cpi tmp, $9E
brge dadl
rjmp pervl
dadl: nop
civ
cln
clz
cpi tmp, $B9
brge dad2
rjmp perv2
dad2: nop
civ
cln
clz
cpi tmp, $D1
brge dad3
rjmp perv3
dad3: nop
civ
cln
clz
308
Глава 11
Листинг 11Х Продолжение
cpi tmp, $EF
brge dad4
rjmp perv4
dad4: nop
rjmp perv5
;ШИМ управление вперед 5 скоростей
;1-я скорость
.********************************
;повтор 10 раз
pervl: пор
;разрешение всех прерываний
sei
clz
clr ana
ass: nop
inc ana
;установить еденицу в порт А
sbi $18, 5
rcall zaderl
/•установить ноль в порт А
cbi $18, 5
rcall zaderl
nop
rcall zaderl
nop
rcall zaderl
nop
rcall zaderl
cpi ana, $0A
breq djj
nop
rjmp ass
nop
djj: nop
rjmp djj 5
•*******★*★★**★★***★★**★★★★★★****
/2-я скорость
•*****★**★*★**★★★*★**★★*★★★★★****
/повтор 10 раз
perv2: nop
/разрешение всех прерываний
sei
clz
clr ana
ass2: nop
inc ana
Радиоуправляемый джип
309
Пистинг Т1.& Продолжение
/установить еденицу в порт А
sbi $18, 5
rcall zaderl
nop
rcall zaderl
nop
/установить ноль в порт
cbi $18, 5
rcall zaderl
nop
rcall zaderl
nop
rcall zaderl
cpi ana, $0A
breq djj2
nop
rjmp ass2
nop
d j j 2 : nop
rjmp dj j5
.************
/3-я скорость
/повтор 10 раз
perv3: пор
/разрешение всех прерываний
sei
clz
clr ana
ass3: nop
inc ana
/установить еденицу в порт А
sbi $18, 5
rcall zaderl
nop
rcall zaderl
nop
rcall zaderl
nop
/установить ноль в порт А
cbi $18, 5
^call zaderl
nop
rcall zaderl
cpi ana, $0A
breq , djj3
308
Глава 11
Листинг 11.3, Продолжение
cpi tmp, $EF
brge dad4
rjmp perv4
dad4: nop
rjmp perv5
;ШИМ управление вперед 5 скоростей
;1-я скорость
г
;повтор 10 раз
pervl: пор
/разрешение всех прерываний
sei
clz
clr ana
ass: nop
inc ana
/установить еденицу в порт А
sbi $18, 5
rcall zaderl
/установить ноль в порт А
cbi $18, 5
rcall zaderl
nop
rcall zaderl
nop
rcall zaderl
nop
rcall zaderl
cpi ana, $0A
breq djj
nop
rjmp ass
nop
djj: nop
rjmp djj5
/2-я скорость
.********************************
r
/повтор 10 раз
perv2: nop
/разрешение всех прерываний
sei
clz
clr ana
ass2: nop
inc ana
Радиоуправляемый джип
311
Листинг 11,3, Продолжение
ret
'•Подпрограмма движения назад
nazada: пор
mov tmp, rl5
;выбор скорости
civ
cln
clz
cpi tmp, $71
brlt dad6
rjmp nazel
dad6: nop
civ
cln
clz
cpi tmp, $5F
brge dad7
rjmp naze2
dad7: nop
civ
cln
clz
cpi tmp, $3E
brge dad8
rjmp naze3
dad8: nop
civ
cln
clz
cpi tmp, $16
brge dad 9
rjmp naze4
dad9: nop
rjmp naze5
9
;ШИМ управление назад 5 скоростей
;1-я скорость
;повтор 10 раз
nazel: пор
;разрешение всех прерываний
sei
clz
clr ana
assn: nop
312
Глава 11
Листинг 11.3. Продолжение
inc ana
/установить еденицу в порт А
sbi $18, 4
rcall zaderl
/установить ноль в порт А
cbi $18, 4
rcall zaderl
nop
rcall zaderl
nop
rcall zaderl
nop
rcall zaderl
cpi ana, $0A
breq djjaa
nop
rjmp assn
djjaa: nop
rjmp djjr
9
/2-я скорость
/повтор 10 раз
naze2: nop
/разрешение всех прерываний
sei
clz
clr ana
assn2: nop
inc ana
/установить еденицу в порт А
sbi $18, 4
rcall zaderl
nop
rcall zaderl
nop
/установить ноль в порт А
cbi $18, 4
rcall zaderl
nop
rcall zaderl
nop
rcall zaderl
cpi ana, $0A
breq djjr
nop
Радиоуправляемый джип
313
Листинг! 1.3. Продолжение
rjmp assn2
л
;3-я скорость
/
;повтор 10 раз
naze3: пор
/разрешение всех прерываний
sei
clz
clr ana
assn3: nop
inc ana
/установить еденицу в порт А
sbi $18, 4
rcall zaderl
nop
rcall zaderl
nop
rcall zaderl
nop
/установить ноль в порт А
cbi $18, 4
rcall zaderl
nop
rcall zaderl
cpi ana, $0A
breq djjuu
nop
rjmp assn3
djjuu: nop
rjmp djjr
9
;4-я скорость
9
/повтор 10 раз
naze4: nop
/разрешение всех прерываний
sei
clz
clr ana
assn4: nop
inc ana
/установить еденицу в порт А
sbi $18, 4
rcall zaderl
nop
314
Глава 11
Листинг 113, Продолжение
rcall zaderl
nop
rcall zaderl
nop
rcall zaderl
/установить ноль в порт А
cbi $18, 4
rcall zaderl
nop
cpi ana, $0A
breq djjr
nop
rjmp assn4
.********************************
/5-я скорость
л
/повтор 10 раз
naze5: nop
/разрешение всех прерываний
sei
/установить еденицу в порт А
sbi $18, 4
djjr: nop
ret
/калибровка двигателя руля
• ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★it* *
f
;влево
.***★★***************************
г
kalibr: пор
/запрет всех прерываний
cli
clz
clr ana
tre: nop
inc ana
/установить еденицу в порт А
sbi $18, 0
rcall zaderl
nop
cbi $18, 0
nop
sbi $18, 2
rcall zaderl
nop
cbi $18, 2
Радиоуправляемый джип
315
Листинг 11 Л. Продолжение
;проверить контакты
sbic $1B, 6
sbis $1B, 7
rjmp tre
/если контакты сработали СТОП
cbi $18, О
пор
cbi $18, 2
пор
/поворот обратно
mov г 11, апа
clz
clr ana
tru: пор
inc ana
/установить еденицу в порт А
sbi $18, 1
rcall zaderl
nop cbi $18, 1
nop sbi $18, 3
rcall zaderl
nop
cbi $18, 3
/проверить контакты
sbic $1B, 6
sbis $1B, 7
rjmp tru
/если контакты сработали СТОП
cbi $18, 1
пор
cbi $18, 3
пор
/начать темт сначало
mov г11, апа
ret
/подпрограмма влево
vlevo: пор
/движение влево
/1-й полушаг
/установить импульс 10.00
odpol: Пор
clr tmp
out PORTB, tmp /обнулить порт В
316
Глава 11
Листинг 11.3. продолжение
sbi $18, 2
mov tmp, г 14
clz
cpi tmp, $9C ;156 отсчетов
breq bonn rjmp odpol bonn: clr tmp mov rl4, tmp ;2-й полушаг /установить импульс 10.10 odpoll: nop clr tmp out PORTB, tmp /обнулить порт В
sbi $18, 2 sbi $18, 0 mov tmp, rl4 clz cpi tmp, $9C breq bonnl rjmp odpoll bonnl: clr tmp mov rl4, tmp ;3-й полушаг /установить импульс 00.10 odpol2: nop clr tmp out PORTB, tmp /156 отсчетов /обнулить порт В
sbi $18, 0 mov tmp, rl4 clz cpi tmp, $9C breq bonn2 rjmp odpol2 bonn2: clr tmp mov rl4, tmp ;4-й полушаг /установить импульс 01.10 odpol3: nop clr tmp out PORTB, tmp /156 отсчетов /обнулить порт В
sbi sbi mov clz cpi breq $18, 3 $18, 0 tmp, rl4 tmp, $9C ЬоппЗ /156 отсчетов
Радиоуправляемый джип
317
Листинг Продолжение
rjmp odpol3
ЬоппЗ: clr tmp
mov r14, tmp
/5-й полушаг /установить импульс 01.00
odpol4: nop
clr tmp
out PORTB, tmp
sbi $18, 3
mov tmp, rl4
clz cpi tmp, $9C
breq bonn4
rjmp odpol4.
bonn4: clr tmp
mov . r14, tmp
/6-й полушаг /установить импуль c 01.01
odpol5: nop
clr tmp
out PORTB, tmp
sbi $18, 3
sbi $18, 1
mov tmp, rl4
clz cpi tmp, $9C
breq bonn5
rjmp odpol5
bonn5: clr tmp
mov r14, tmp
/7-й полушаг /установить импульс 00.01
odpol6: nop
clr tmp
out PORTB, tmp
sbi $18, 1
mov tmp, rl4
clz cpi tmp, $9C
breq bonn6
rjmp odpol6
bonn6: clr tmp
mov rl4, tmp
;8-й полушаг
/установить импульс 10.01
odpol7: пор
;обнулить порт В
;156 отсчетов
/обнулить порт В
;156 отсчетов
/обнулить порт В
/156 отсчетов
318
Глава 11
Листинг 11.3. Продолжение
clr tmp
out PORTB, tmp /обнулить порт В
sbi $18, 3
sbi $18, 1
mov tmp, г14
clz
cpi tmp, $9C /156 отсчетов
breq bonn7
rjmp odpol7
bonn7: clr tmp
mov r14, tmp
/условие прохождение на определенный угол
;заданный радиопередачей.
ret
.************ ******************************************
;Подпрограмма вправо
vpravo: nop
/движение вправо
/1-й полушаг
/установить импульс 10.01
odpol9: nop
clr tmp
out PORTB, tmp /обнулить порт В
sbi $18, 2
sbi $18, 1
mov tmp, rl4
clz
cpi tmp, $9C /156 отсчетов
breq bonn9
rjmp odpol9
bonn9: clr tmp
mov r14, tmp
/2-й полушаг
/установить импульс 00.01
odpol91: nop
clr tmp
out PORTB, tmp /обнулить порт В
sbi $18, 1
mov tmp, г14
clz
cpi tmp, $9C /156 отсчетов
breq bonn91
rjmp odpol91
bonn91: clr tmp
mov r14, tmp
;3-й полушаг
Радиоуправляемый джип
319
Листинг 11.3. Продолжение
;установить импульс 01.01
odpol92: nop
clr tmp
out PORTB, tmp ;обнулить порт В
sbi $18, 3
sbi $18, 1
mov tmp, rl4
clz
cpi tmp, $9C ;156 отсчетов
breq bonn92
rjmp odpol92
bonn92: clr tmp
mov rl4, tmp
;4-й полушаг
;установить импульс 01.00
odpol93: nop
clr tmp
out PORTB, tmp ;обнулить порт В
sbi sbi mov clz cpi breq rjmp bonn93: mov ;5-й полушаг ;установить odpol94: clr out $18, 3 $18, 0 tmp, rl4 tmp, $9C bonn93 odpol93 clr tmp rl4, tmp импульс 01.10 nop tmp PORTB, tmp ;156 отсчетов ;обнулить порт В
sbi sbi mov clz cpi breq rjmp bonn94: mov ;6-й полушаг ;установить odpol95: clr out ' $18, 3 $18, 0 tmp, rl4 tmp, $9C bonn94 odpol94 clr tmp r14, tmp импульс 00.10 nop tmp PORTB, tmp ;156 отсчетов /обнулить порт В
320
Глава 11
Листинг 11.3. Продолжение
sbi $18, 0
mov tmp, rl4
clz
cpi tmp, $9C /156 отсчетов
breq bonn95
rjmp odpol95
bonn95: clr tmp
mov rl4, tmp
/7-й полушаг /установить импульса 10.10
odpol96: nop
clr tmp
out PORTB, tmp /обнулить порт В
sbi $18, 2
sbi $18, 0
mov tmp, rl4
clz
cpi tmp, $9C /156 отсчетов
breq bonn96
rjmp odpol96
bonn96: clr tmp
mov rl4, tmp
/8-й полушаг /установить импульса 10.00
odpol97: nop
clr tmp
out PORTB, tmp /обнулить порт В
sbi $18, 2
mov tmp, rl4
clz
cpi tmp, $9C /156 отсчетов
breq bonn97
rjmp odpol97
bonn97: clr tmp
mov rl4, tmp
/условие прохождение на определенный угол
;заданный радиопередачей.
пор
ret
.★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★it
/Подпрограмма опроса датчиков руля
key: nop
clr tmp
sbis portA, 6
rjmp posd
nop
Радиоуправляемый джип
321
Листинг 11.Х Продолжение
sbis portA, 7
rjmp nasd
Idi tmp, $04
rjmp nasd
posd: nop
Idi tmp, $01
nasd: nop
ret
. **********-j t*****x*****^ t**************************
;Прерывание no входному сигналу единицы
EXT_INT0: nop
in tmp, SREG /запомнить состояние регистра
sei /общее разрешение прерываний
/Запуск таймера ТО
/режим работы таймера ТО с максимальным предварительным
/делением, - реализация прерывания через 0,16 мс
Idi tmp3,$04
out Idi out Idi TGCR0,tmp3 bit, $FB TCNT0, bit tmp3,$06 /деление CK/256 /8 мГц/256 остаток 5
out TIMSK,tmp3 запуск таймера Т1 /разрешаем прерывания /переполнению от ТО по
реализация Idi out Idi out Idi прерывания через 0,32 мС tmp3,$09 TCCRlB,tmp3 /деление CK/256 bit, $F6 TCNT1, bit tmp3, $06
out nop TIMSK,tmp3 /разрешаем прерывания /переполнению от Т1 по
out reti SREG, tmp /восстановить регистр состояния
.***********************★***★***★**★★★**★****★*★★★****★*★*
;Прерывание по таймеру Т1
TIME_OVF1: пор
Idi ana, $0F
/Подтверждение единицы кода
Idi tmp, $0А ;0,2 мс- 0,16 мс/ 0,02мс
wet: пор
clz
dec tmp
breq tyu
322
Глава 11
Листинг 11.3. продолжение
rjmp fff
tyu: nop rjmp xcon fff: nop rcall time002 sbic PORTB, 5 ;пропустить команду, если 0 rjmp wet sei ;Запуск таймера TO ;режим работы таймера ТО с максимальным предварительным ;делением, реализация прерывания через 0,16 мс Idi tmp3,$04 out TCCR0,tmp3 ;максимальное деление СК/256 Idi bit, $FA ;8 мГц/256 остаток 5 out TCNTO, bit Idi tmp3,$02 /запрет T1 out TIMSK,tmp3 /разрешаем прерывания по /переполнению от ТО rcall anal rjmp qws xcon: nop Idi ana, $00 rcall anal qws: nop mov tmp, R14 inc tmp mov rl4, tmp mov tmp, R15 inc tmp mov rl5, tmp reti
r /Прерывание по таймеру TO TIME_OVFO: nop Idi ana, $AF /Подтверждение ноля кода Idi tmp, $0A wetl: nop clz dec tmp breq tyul rjmp fffl tyul: nop rjmp xconl fffl: nop rcall time002 /0,2 мс- 0,16 мс/ 0,02мс r ★ ★ ★ ★ ★
Радиоуправляемый джип
323
Листинг Продолжение
sbic $18, 5 rjmp wetl sei /пропустить команду, если 0
Запуск таймера TO режим работы таймера ТО с максимальным предварительным
/делением, реализация прерывания через 0,16 мс
Idi tmp3,$04
out TCCR0,tmp3 /максимальное деление CK/256
Idi bit, $FA /8 мГц/256 остаток 5
out TCNT0, bit
Idi tmp3,$02 /запрет Т1
out TIMSK,tmp3 /разрешаем прерывания по
/переполнению от ТО
rcall anal
rjmp wqr
xconl: пор
Idi ana, $00
rcall anal
wqr: nop
reti
.**o****************************************************
9
/•Подпрограмма считывания данных АЦП
/•Настройка АЦП1
adcnl: nop
cli
nop
clr tmp
awe: nop
cpi tmp, $04
brsh assu
out ADMUX, tempo ; коммутация входов АЦП
clr tmp2
clr tmp3
clr pered
Idi pered, $C4 /одиночное, запуск, 1/16
out ADCSR, pered /запуск АЦП на преобразование
/Сохранение данных АЦП1
in tmp2, ADCL
-in tmp3, ADCH
mov r2, tmp2
mov r3, tmp3
mov r4, r2
mov r5, r3
mov r6, r4
mov r7, r5
inc tmp
324
Глава 11
Листинг 113, Продолжение
rjmp awe
;среднее арифметическое действие
assu: пор
clr г8
clc
add tmp2, r2
adc r9, r8
add tmp2, г 4
adc r9, r8
add tmp2, гб
adc r9, r8
clc
Isr r9
ror tmp2
Isr r9
ror tmp2
clr r9
clc
add tmp3, r3
adc r9, r8
add tmp3, r5
adc r9, r8
add tmp3, r7
adc r9, r8
clc
Isr r9
ror tmp3
Isr r9
ror tmp3
nop
ret
• ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★a-**
;Подпрограмма 0,02mS
;Подпрограмма задержки включения
time002: nop
•wdr
clz
cln
Idi Xa, $07
nop
nop
dv2: nop
wdr
clz
cln
cis
Радиоуправляемый джип
325
Яистинг113, Продолжение
dec Ха
brpl dv2
ret
• ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
f
;подпрограмма анализа
anal: nop
;запрет всех прерываний
;запись в ячейки ОЗУ
Idi r28, $61 ;начальный адрес ОЗУ код
Idi r30, $62 ;начальный адрес ОЗУ данные
;увеличиваем ячейку ОЗУ
Idi r28, $91 ;начальный адрес ОЗУ код
clr r29
Id tmp2, Y
clz
cpi tmp2, $28 ;40 ячеек : записано?
brne Ihfd
clr tmp
Idi r28, $91 ;начальный адрес ОЗУ код
clr r29
st Y, tmp
Idi r30, $92 ;начальный адрес ОЗУ данные
clr r31
st Z, tmp
Ihfd: nop
add r28, tmp2
Idi r30, $92 ;начальный адрес ОЗУ данные
clr r31
Id tmp2, Z
add r30, tmp2
;сброс всех значений
cli
clz
cpi ana, $0F ;код единицы?
brne fedr
sec /установка флага переноса
mov tmp, rO
rol tmp ;сдвиг влево через перенос
mov rO, tmp
rjmp wio
fedr: nop
clz
cpi ana, $AF ;код ноля?
brne ftre
rjmp wik
ftre: nop
326
Глава 11
Листинг 11.3. Продолжение
Wik: clr mov rjmp nop clc ‘ mov rol tmp rO, tmp mgo tmp, rO tmp ;сдвиг влево через перенос
wio: mov nop clz mov cpi rO, tmp tmp3, rl3 tmp3, $08 ;8 бит получено?
ftre2: breq rjmp nop f tre2 mgo ;да получено 8 бит
mov mov cpi pered, rO tmp3, rlO tmp3, $C0 ;код или данные?
brne rjmp masd: nop clz cpi breq rjmp bnn: nop Idi mov cas: nop clz cpi brne rjmp tqs: nop clz cpi brne rjmp tqs2: nop clz cpi breq rjmp ;запись кода masd rasd pered, $C0 bnn mgo tmp3, $C0 r10,tmp3 pered, $E0 tqs zapis pered, $A0 tqs2 zapis pered, $D4 zapis mgo команды
zapis: nop
Idi r28, $91 ;начальный адрес ОЗУ код
Радиоуправляемый джип
327
Листинг 11 Л. Продолжение
clr г29
Id tmp2, Y
inc tmp2
st Y, tmp2
Idi r30, $92 /начальный адрес ОЗУ данные
clr r31
st Z, tmp2
Idi tmp3, $FA
mov rll, tmp3
clr r29
st Y, pered /запись команды ОЗУ
inc r28
rjmp mgo
/запись кода данных
rasd: nop
mov tmp3, rll
cpi tmp3, $FA
breq jmbn
rjmp cas
jmbn: nop
st Z, pered /запись данных ОЗУ
inc гЗО
clr tmp
mov rll, tmp3
mgo: nop
/разрешение всех прерываний
sei
ret
/Подпрограмма задержки включения
zaderl : nop
wdr
clr tmp
clr Ma
clr Ya
Idi Ya, $0A
cpi tmp3 , $00
brne goo
Idi Ma, $01
add Ma, tmp3
nop
mov tmp3 , Ma
goo: nop
mov Ma, tmp3
dm: nop
cpi tmp2 , $00
brne goq
328
Глава 11
Листинг 113. продолжение
Idi Ха, $01
add Ха, tmp2
пор
goq: пор
mov Ха, tmp2
dv: пор
wdr
пор
dx: пор
пор
еее: ' пор
inc tmp
cln
cpi tmp, $3A
brio eee
nop
clr tmp
nop
cln
dec Ya
nop
brpl dx
cln
dec Xa
brpl dv
clz
dec Ma
brne dm
ret
9
Листинг 11.4. НЕХ-файл программы приемника
:020000020000FC
:100000000DCOA7C2000000000000B5C2D6C20000AB
:080010000000000000000000Е8
:1O0O1C00O000F8940OE40BBF03EOO5BF0FEDODBF2B
:Ю002С0000270АВВОВВВ002708ЕООАВВ002708ВВ54
:10003COOOFEOOABB000044270027A02EB02EC02ED4
:10004COOE02EF02E002E102E000085D100E80FBFOO
:10005C000000C1E6E2E6F8940000DD27FF27E88007
:10006COOF080882788838083C395E3952C2F989400
:10007C00283871F32E2D9894243D09F005COOOOOOA
:1O0O8CO0789458DOO0OOE8CFOOOOF8942E2D989466
:10OO9C0O2O3EO9FO05CO00OOF894OED0OOOODCCF23
:1000AC000000F8942E2D9894203A09F0D5CF00003A
:1000BC00789413DOOOOODOCF00002FE70F2D989428
Радиоуправляемый джип
329
Листинг 11А Продолжение
:1000CC00A894C894021724F40000CAD0000003C0FE
:1000DC00000043D00000000008950000F8942E2D7D
:1000EC000FE77727A89498948894021B08F410C003
:1000FC00000073959894071709F41AC0000058D1A2
:10010C00000014D29894043009F412C00O0OF0CF0F
:10011C00000073959894071709F40AC00OOOA6D143
:1O012COOOOOO04D29894O13OO9F4O2COOOOOFOCF12
:10013C00000008950000DB98F8940F2D98940F336D
:10014C0009F003C00000C39A02C0C398000000006D
:10015C0002D178940000F6D2089500000F2DB894C7
:10016C00A89498940E390CF417C00000B894A89475
:10O17C009894093B0CF427CO00O0B894A894989468
:10018C00013D0CF438C00000B894A89498940F3E2C
:10019C000CF449C000005FC0000078949894552777
:1001AC0000005395C59ACED2C598CCD20000CAD2C5
:1001BC000000C8D20000C6D25A3019F00000F0CFAF
:1001СС00000000004ВС00000789498945527000064
:1001DC005395C59AB7D20000B5D20000C598B2D2DB
:1001EC000000B0D20000AED25A3019F00000EFCFB0
:1001FC000000000033C0000078949894552700004C
:10020C005395C59A9FD200009DD200009BD200004E
:10021C00C59898D2000096D25A3019F00000EFCF52
:10022С00000000001ВС00000789498945527000033
:10023C005395C59A87D2000085D2000083D2000066
:10024С0081D2C5987FD200005A3019F00000EFCF50
:10025С000000000003С000007894С59А00000895С7
:10026C0000000F2DB894A894989401370CF017C087
:10027C000000B894A89498940F350CF426C0000094
:10028C00B894A89498940E330CF434C00000B8942D
:10029C00A894989406310CF444C0000057C0000098
:1002AC0078949894552700005395C49A4BD2C498CF
:1002ВС0049D2000047D2000045D2000043D25A3048
:1002CC0011F00000F0CF000044C000007894989426
:1002DC00552700005395C49A35D2000033D2000044
:1002EC00C49830D200002ED200002CD25A3089F1A2
:1002FC000000EFCF00007894989455270000539598
:10030COOC49A20D200001ED200001CD20000C49857
:10031С0019D2000017D25A3011F00000EFCF0000B4
:10032C0018C0000078949894552700005395C49AEF
:10033C0009D2000007D2000005D2000003D2C498F5
:10034C0001D200005A3029F00000EFCF0000789461
:10035C00C49A000008950000F89498945527000062
:10036C005395C09AEFD10000C0980000C29AEAD110
:10037C000000C298DE99DF9BF2CFC0980000C298B3
:1OO38COO0OO0B52E98945527OOO05395C19ADAD1E8
:10039COOOOOOC1980000C39AD5D10000C398DE9923
330
Глава 11
Листинг 11 .4. Продолжение
:1003ACOODF9BF2CFC1980000C3980000B52E0895D2
:1003BC0000000000002708BBC29AOE2D98940C393F
:1003CC0009FOF7CF0027E02E0000002708BBC29AE7
:1003DCOOC09AOE2D98940C3909FOF6CF0027E02E18
:1003EC000000002708BBC09AQE2D98940C3909F018
:1003FCOOF7CF0027E02E0000002708BBC39AC09A55
: 1OO4OCOO0E2D9894OC39O9FOF6CFOO27EO2EOOOO41
: 10041C00002708BBC39AOE2D98940C3909FOF7CF1E
: 10042C000027E02E00000027 08BBC39AC19AOE2DAE
: 10043C0098940C3909FOF6CF0027E02E0000002725
:10044C0008BBC19A0E2D98940C3909FOF7CFO027F0
:10045COOE02E0000002708BBC39AC19AOE2D989479
:10046COOOC3909FOF6CF0027E02E089500000000AB
:10047C00002708BBC29AC19AOE2D98940C3909F02A
:10048COOF6CF0027E02E0000002708BBC19AOE2DE6
:10049C0098940C3909FOF7CF0027E02E00000027C4
:1004AC0008BBC39AC19AOE2D98940C3909FOF6CF5B
:1004BC000027E02E0000002708BBC39AC09ADE2D1F
:1004CC0098940C3909FOF6CF0027E02E0000002795
: 1004DCO008BBC39AC09AOE2D98940C3909F0F6CF2C
: 1004EC000027E02E0000002708BBC09AOE2D989420
:1004FCOOOC3909FOF7CF0027E02E0000002708BBCD
: 10050COOC29AC09AOE2D98940C3909FOF6CF002798
: 10051COOE02E0000002708BBC29AOE2D98940C39CF
:10052C0009FOF7CF0027E02E000008950000002707
:10053COODE9B05COOOOODF9B04C004E002CQ00008D
:10054C0001E00000089500000FB7789424E023BF69
: 10055C007BEF72BF26E02 9BF2 9E02FBD7 6EF7EBD71
:10056C0026EO29BFOOOO0FBF189500OO5FE00AE0ED
:10057С00000098940А9509Г002С000000ОС000001С
: 10058C0066D0C599F5CF7 89424EO23BF7AEF72BF7B
:10059C0022E029BF6BD003C0000050E067DOOOOOOO
:1005ACOOOE2D0395E02EOF2D0395F02E18950000BF
:1005BC005FEAOAE0000098940A9509F002C0000076
:10Q5CCOOODC0000044DOC599F5CF789424E023BF2A
:1005DC007AEF72BF22E029BF49D003C0000050E07F
:1005EC0045D0000018950000F8940000002700008A
: 1005FC0004 3080F437B9112722274 4274 4EC4 6B93C
:10060С0014В125В1212Е322Е422С532С642С752С76
:10061C000395EDCF000088248894120D981C140DBE
:10062C00981C160D981C889496941795969417956B
:10063C0099248894230D981C250D981C270D981C23
:10064С008894969427959694279500000895000019
:10065СООА8959894А89487ЕОООООООООООООА89545
: 10066C009894A894C8948A95CAF708950000C1E696
:10067COOE2E6C1E9DD2718819894183239F4002795
Радиоуправляемый джип
331
Листинг 11.4. Окончание
: 10068COOC1E9DD270883E2E9FF2700830000C10FE1
:10069COOE2E9FF271081E10FF89498945F3029F478
: 1C)O6ACOOO894OO2DOO1FOO2EOECOOOOO98945F3A95
:1006BC0009F404C000000027002E41C000008894FB
:1006CC00002D001F002E000098942D2D283009FOCD
:1006DC0036C00000402D2A2D203C09F426C0000015
: 1006EC009894403C09F02BC0000020ECA22E000096
:1006FC009894403E09F40AC000009894403A09F4DA
: 10070C0005C0000098944 43D09F019COOOOOC1E9EF
:10071CO0DD27188113951883E2E9FF2710832AEF50
: 10072COOB22EDD274883C3950AC000002B2D2A3F2B
:10Q73C0009FODDCF00004083E3950027B22EOOOOC6
: 10074C00789408950000A8950027 9927FF27FAEQDO
: 10075C00203021F491E0920F00002 92F0000922FFD
:10076C000000103019F481E0810F00000000812F8F
:Ю077С000000А89500000000000000000395А8945С
:10078COOOA33D8F3000000270000A894FA95000063
:10079C0092F7A8948A9562F798949A9509F7089518
:00000001FF
Конструкция
Конструкция радиоуправляемого джипа имеет каркас из медной
проволоки (рис. 11.18) и корпус от китайской игрушки (см. рис. 11.2).
Рис. 11.18. Каркас из медной проволоки
Конструкция рамы (рис. 11.19) содержит три детали: передний бам-
пер и две половины боковых сторон. Перед изготовлением каркаса из
проволоки вырезается шаблон из бумаги, и проволока выгибается со-
гласно размерам. Все три детали паяются газовой горелкой на несгорае-
332
Глава 11
мой поверхности (например, на металлическом листе). После крепления
платы привода к раме проволочками и пайки креплений устанавливает-
ся рулевая система.
Рычаги передних колес позаимствованы из спиц нерабочего зонта
(рис. 11.20).
Рис. 11.20 Рычаги передних колес
Радиоуправляемый джип
333
Конструкция рулевого управления показана на рис. 11.21: 1 — пе-
реднее колесо; 2 — передний левый рычаг с осью для колеса и двумя
шпильками для механизма вращения; 3 — лонжерон передних колес;
4 — поворотная рейка (все пазы вырезаются в рейке); 5 — ось крепле-
ния поворотной рейки к раме модели; 6 — шаговый двигатель (позаим-
ствован из флоппи-дисковода); 7 — скользящая пружина; 8 — ось ша-
гового двигателя; 9 — уголок крепления оси шагового двигателя к пла-
те; 10 — плата управления; 11 — шуруп крепления колеса к оси.
Рис. 11.21. Конструкция рулевого управления
Рычаг 2 крепится к лонжерону 3. Собирается левое 1 и правое коле-
са с рычагами. Лонжерон 3 крепится к плате 10 с помощью винтов через
резиновые подушки амортизации (резиновые кольца толщиной 2 мм).
К поворотным рычагам 2 крепится рейка 4 с помощью штифтов и шайб
подложек. Ось рейки 5 крепится к раме джипа. На плату 10 устанавли-
вается шаговый двигатель 6, надевается пружина 7, которая стопорится
в рейке 4. Свободный конец оси шагового двигателя 8 вставляется
в уголок 9, и уголок крепится к плате 10.
Все элементы скольжения смазываются техническим маслом. Пово-
рот колес влево/вправо задается примерно на угол 36° (в каждом нап-
равлении). Поворот колеса ограничен дугой С, которая находится в поле
между окружностями А и В. Чем больше разница между окружностями
А и В, тем больше угол поворота переднего колеса. Причиной ограни-
чения максимального поворота колеса может быть также форма лонже-
рона, поэтому лучше проявить фантазию и изменить лонжерон.
334
Глава 11
Преимущество такой системы рулевого управления заключается
в минимальном количестве поворотных, трущихся деталей, что позво-
ляет более эффективно управлять рулем джипа (рис. 11.22).
Рис. 11.22. Переднее рулевое управление
После монтажа переднего рулевого управления переходим к задне-
му приводу. Он приводится в движение электродвигателем (позаимст-
вован из привода CD-ROM). Двигатель через пассик приводит в движе-
ние понижающий редуктор (см. рис. 11.14). Редуктор (позаимствован из
игрушечного автомобиля) передает вращение к оси задних колес. Для
установки редуктора на раму джипа необходимо доработать крепление.
Для этого изготавливаются уголки (жесть позаимствована из корпуса
флоппи-дисковода).
Как только рама и колеса собраны, силовая плата и рулевое управ-
ление смонтированы, сразу устанавливается плата микроконтроллера.
Питание джипа подключается согласно схеме, показанной на рис. 11.23.
В микроконтроллер записывается тестовая программа, представ-
ленная в листингах 11.1 и 11.2, и проверяется правильность управления
колесами. Когда все проверено, в микроконтроллер записывается рабо-
чая программа, представленная в листингах 11.3 и 11.4.
Радиоуправляемый джип
335
Рис. 11.23. Схема питания джипа
В кузове высверливаются два отверстия для светодиодов, и клеем
ПВА приклеиваются светодиоды (рис. 11.24).
Рис. 11.24. Установка светодиодов
336
Глава 11
Далее устанавливается плата приемника и кузов джипа. На заднюю
часть кузова монтируется модуль приемника с основной батареей пита-
ния и дополнительными аккумуляторами. Включается питание на моду-
ле приемника, и проверяются функции управления джипа.
После проверки функциональности джип устанавливают на ровную
поверхность и управляют с помощью передатчика. Радиус управления
зависит от мощности передатчика.
Глава 12
Робот-катер
У радиоуправляемых моделей, собираемых радиолюбителями, не-
значительный диапазон действия. Автономные роботы могут ошибать-
я, очень сложны в калибровке и настройке логики поведения. Но что,
ели совместить эти функции? Пока робот виден, он управляется чело-
еком, но как только робот исчезает из вида, активизируется программа
озврата к человеку.
В этой главе мы рассмотрим модель катера-робота (рис. 12.1) с ра-
иоуправлением, принципы которого были рассмотрены в предыдущей
лаве, но функции управления частично переданы микроконтроллеру.
Рис. 12.1. Модель катера-робота
Испытывать такую модель лучше на замкнутом водоеме или озере.
Например, мы пускаем катер в определенном направлении. После поте-
338
Глава 12
ри связи он разворачивается в обратную сторону и возвращается к месту
старта. Таким образом, запуская модель в путешествие, мы можем не
заботится о том, что она потеряется. Сразу воплотить такую идею в ре-
альность очень сложно, поэтому лучше начать с простого подхода.
Теория ориентации
Первый метод ориентации объекта в пространстве связан с нап-
равленными антеннами и постоянно действующим радиомаяком. Радио-
маяк задает точку ориентации катера в пространстве. Антенны направ-
лены в четыре разные стороны на самом объекте управления. Имея одну
точку на плоскости, любой объект можно направлять относительно нее
в разные стороны, ориентировать движение влево, вправо, вперед или
назад. И что самое главное, объект может сам находить направление
движения, автоматически двигаться по выбранному маршруту относи-
тельно неподвижного радиомаяка.
Недостатком данного метода является ошибочное улавливание по-
сторонних излучений. Объект с помощью нескольких антенн сканирует
радиоэфир и, выбрав самый сильный сигнал, ориентируется в простран-
стве. Насыщенный радиоэфир может дезориентировать объект.
Второй метод ориентации — по магнитным линиям земли. Имея
датчик магнитных линий (например, KMZ10, KMZ45 [29]), объект смо-
жет ориентироваться относительно полюсов земли. Это даст ему воз-
можность самостоятельно ориентироваться и прокладывать маршрут
движения, записывая данные маневров и расстояния от точки отправле-
ния. Недостаток данного метода — грубое определение полюсов земли,
что не позволяет точно определить местоположение объекта, а также
потребность в огромной оперативной памяти для записи всех передви-
жений объекта. Тем не менее, на данном этапе моделирования процес-
сов, этот метод определения местоположения объекта — самый пер-
спективный.
Третий вариант ориентации — с помощью GPS-навигации. Досто-
инство данного метода — точность управления объектом, однако с точ-
ки зрения радиоуправляемых моделей он очень дорогостоящий. GPS-на-
вигация сильно усложняет схему и программу. Кроме того, она зависит
от зарубежных спутников связи. В некоторых областях СНГ GPS-связь
вообще отсутствует.
Четвертый метод ориентации заключается в использовании гирос-
копического эффекта. Этот метод — самый надежный. Его применяют
в ракетной технике дальнего действия. Однако, в то же время, метод
ориентации с помощью гироскопа — самый дорогостоящий и габарит-
Робот-катер
339
ный, по причине чего гироскопический эффект нет смысла использовать
в радиоуправляемой модели.
Автор избрал первый метод ориентации, как самый дешевый. Итак,
наш объект — радиоуправляемый катер. Передатчик для него можно
использовать из предыдущего проекта: радиоуправляемого джипа.
Дизайн
Дизайн катера-робота показан на рис. 12.2.
Рис. 12.2. Дизайн катера-робота
Как у любой модели, у катера есть корпус и кабина. В передней
части корпуса расположена схема приемника, аналогичная задейство-
ванной для радиоуправляемого джипа, и антенна сигнала управления.
В средней части корпуса (на днище) расположены батареи питания,
поскольку они — наиболее тяжелая часть конструкции. Батарейный
блок разделен на два отсека, между которыми находится приводной
двигатель лопастей гребного винта.
В кабине находится схема дешифратора и детектора положения ка-
тера относительно радиомаяка, а в задней части корпуса установлен
двигатель поворота киля. Над кабиной установлена антенна. Предпола-
гается, что модель катера — быстроходная, поэтому ее нос расширен
и имеет длину, равную длине основного корпуса. Задняя часть более по-
гружена в воду. Конструкция герметично закрыта со всех сторон.
Схема управления катером показана на рис. 12.3. Сигнал радиоуп-
равления попадает через антенну в приемник, где усиливается и преоб-
разуется (более подробно работа приемника описана в предыдущей гла-
ве). После приемника последовательный цифровой код поступает на
340
Глава 12
схему дешифратора на микроконтроллере, в которой задействованы че-
тыре антенны (ANT1-ANT4) детектора положения катера. Эти допол-
нительные антенны позволяют определить положение корпуса катера
относительно радиомаяка.
Рис. 12.3. Схема управления катером
У двигателя киля — длинный вал, а сам киль оснащен тремя датчи-
ками положения. Данные с них поступают в микроконтроллер, который
на основании этих данных устанавливает угол положения киля.
Принципиальная схема
Принципиальная схема катера-робота (рис. 12.4) состоит из четырех
микросхем: IC1 — ATtiny26L; IC2, IC3 — LB1642; IC7 — LM2903; трех
датчиков Холла IC4-IC6 — SS441A; полевых транзисторов Q2 —
IRF540, Q3-Q5 — BF245. Питание схемы с напряжением 6,0 В подается
на вывод JP2, JP9. Напряжение питания 6,0 В используется для работы
драйверов IC2, IC3.
Робот-катер
341
Рис. 12.4. Принципиальная схема катера-робота
342
Глава 12
Питание микроконтроллера IC1 формируется стабилизатором R3,
D1. Диод D1 стабилизирует напряжение на уровне 3,7 В. Ток потребле-
ния схемы — не более 20 мА. Питание схемы управления индицируется
светодиодом LED1.
Цифровые данные управления моделью поступают на JP8, JP9 и да-
лее — на вход компаратора IC7. Микросхема IC7 LM2903 работоспо-
собна при напряжении питания 2,0..36,0 В. [30] Данные с вывода JP8
усиливаются, и выделяется цифровая последовательность, которая по-
ступает на вывод 0 микроконтроллера (INTO). Далее она обрабатывается
программой микроконтроллера, и формируется код управления испол-
нительными драйверами IC2, IC3 и транзистором Q2.
Прежде чем управлять шаговым двигателем, необходимо знать по-
ложение киля. Для этого в начале программы при включении питания
модели шаговый двигатель выполняет перемещение от крайнего левого
до крайнего правого положения киля. Положение киля фиксируется
датчиками Холла IC4-IC6. Для этого на планке киля устанавливается
небольшой магнит.
Датчики Холла имеют одну особенность: сигнал с вывода датчика
необходимо усиливать и дифференцировать. Поскольку амплитуда сиг-
нала датчика незначительна (в пределах 1 В), то необходимо определить
минимум и максимум, найти разницу и выяснить, превышает она 1 В
или нет. Эту функцию выполняет АЦП микроконтроллера (ADC0-
ADC2). Данные АЦП считываются после каждого шага двигателя и
сравниваются по уровню с предыдущим значением. Если значение пре-
вышает 0,5 В, то считается, что датчик сработал. Датчик Холла SS441A
может работать при напряжении питания 3,8..30,0 В. После определения
положения киля шаговый двигатель поворачивает киль на указанное
значение от радиоуправляемого передатчика.
Микроконтроллер также управляет двигателем гребного винта че-
рез транзистор Q2. Скорость вращения двигателя изменяется с помо-
щью широтно-импульсной модуляции (ШИМ). Питание микроконтрол-
лера стабилизировано на уровне 3,9 В (для ATtiny26L — напряжение
питания составляет 2,7..5,5 В [8]).
В том случае, когда сигнал радиоуправления неразличим или слиш-
ком слабый для полноценного декодирования, в модели используются
дополнительные четыре антенны обнаружения маяка (АОМ). Они рас-
положены в четырех разных точках модели. Каждая антенна принимает
сигнал на частоте 27 МГц. На транзисторах Q3-Q6 собраны схемы уси-
лителей радиочастотного сигнала. Диоды D2-D5 выполняют функцию
детекторов радиочастотного сигнала, а конденсаторы С10-С13 сглажи-
Робот-катер
343
вают его. АЦП микроконтроллера ADC3-ADC6 регулярно проверяет
уровень получаемого сигнала на С10-03. Когда прием цифрового кода
утерян, микроконтроллер анализирует полученные данные с ADC3-
ADC6.
Программа возврата модели в исходную точку управляет маневра-
ми катера так, чтобы нос катера был направлен на радиомаяк. Таким об-
разом, модель катера возвращается в зону приема радиоуправления.
Монтажная плата
Монтажная плата (рис. 12.5) выполняется из двухстороннего текс-
толита.
Рис. 12.5. Монтажная плата катера
Размеры платы — 160><60 мм (рис. 12.6). В левой части платы необ-
ходимо небольшое сужение для установки платы в кабину катера, а в
правой части устанавливается шаговый двигатель со скобой для вала
(заимствован от привода CD-ROM).
В центре платы расположен микроконтроллер и разъем PL1 для
внутрисхемного программирования. Кроме того, здесь присутствуют
контакты для подключения питания и приемника. В плате по периметру
высверлены отверстия для установки и крепления на корпусе катера.
344
Глава 12
Рис. 12.6. Размещение элементов на монтажной плате
Робот-катер
345
Рис. 12.7. Разводка монтажной платы
mm 08Г
346
Глава 12
Детали платы управления:
• микроконтроллер ТС 1 — ATtiny26L-8PI (DIP-корпус);
• драйвер IC2, IC3 — LB1642;
• датчик Холла — биполярный IC4, IC5, IC6 — SS441 А;
• компаратор 1С7 — LM2903N (DIP-корпус);
• резонатор Q1 — 8,0 МГц;
. Q2 — IRF540A;
. Q3-Q6 — BF245B;
• LED1 — светодиод 3 мА;
. D1—3,9 В, 20 мА;
• D2-D5 — диоды КД522А;
• L1 —47 мкГн;
. L2, L3, L4, L5 — 4,7 мкГн;
. С1,СЗ —ЗЗпкФ;
• С2—0,33 мкФ;
. С4, С5, С6 — 1 000 мкФ, 16 В;
. С7, С8, С9 — 0,1 мкФ, 25 В;
. С10,С12, С13 — 1 мкФ, 16 В;
. С14, С15, С16, С17 — 8,2 пкФ;
. С18 — 47 нФ;
• разъем PL1—IDC10;
• R1 —4,7 кОм;
• R2 — 47 Ом;
• R3—ЗООм;
• R4, R6, R8, R11 — 1,8 кОм;
• R5, R7, R9, R10 — 3,0 кОм;
• R12, R13, R14— 1,8 кОм;
• R15 — 1,0 кОм;
• шаговый двигатель — позаимствован из привода лазерной головки
нерабочего CD-ROM;
• электродвигатель от китайской самоходной игрушки.
Тестовые программы
Тестовая программа построена на нескольких аспектах. Прежде все-
го отметим, что управляющая команда от передатчика запускает про-
грамму автовозвращения. Если такая команда в микроконтроллер не по-
ступила, то автовозвращение не активизируется.
Второй аспект связан с передачей данных. Как только команда от
передатчика поступила в микроконтроллер, таймер 1 начинает отсчет
времени, перезапускаясь через каждые 0,32 мс. Запуск таймера 1 зави-
Робот-катер
347
сит от сигнала на выводе INTO микроконтроллера. Это значит, что сис-
тема передачи данных синхронизируема. К сожалению, на синхрониза-
цию могут повлиять импульсы помех радиоэфира.
Третий аспект заключается в том, что шаговый двигатель и элек-
тродвигатель — устройства инерционные, и их работа зависит от отсче-
тов таймера 1. Для того чтобы вал шагового двигателя выполнил один
оборот, он должен пройти восемь положений относительно обмоток
управления. Рулевая система, по своей сути и смыслу, двигается мед-
ленно. Это говорит о том, что для полноценной работы рулевой систе-
мы достаточно скорости 10 об/мин. Учитывая восемь положений пово-
рота вала шагового двигателя, получим 80 полушагов в минуту или час-
тоту импульсов около 1,33 Гц.
В данной конструкции длительность импульсов и пауз для шагово-
го двигателя составляет 0,05 с. Для формирования импульса в 0,05 с ис-
пользуется 156 отсчетов таймера 1 микроконтроллера (0,32 мс). Соот-
ветственно, для формирования паузы также необходимо 156 отсчетов
таймера 1 (0,32 мс).
Для того чтобы электродвигатель гребного вала работал на не-
скольких скоростях, используется широтно-импульсная модуляция
(ШИМ). Шаг импульса — 0,5 с. Для данной модели катера применяется
пять скоростей. В формировании ШИМ также задействован таймер 1.
Для более детального понимания программы были составлены от-
дельные тесты. Они позволяют настроить узлы управления катером.
Tecml. Шаговый двигатель
Рассмотрим движение вперед. Вначале проверяется положение ки-
ля. Затем киль поворачивается влево, срабатывает датчик, киль повора-
чивается вправо, до середины. Датчик проверяется по результатам под-
программы hall. Для датчика Холла необходим порог срабатывания.
Данные с него можно оцифровать в АЦП, а потом сравнить между со-
бой во времени. Для этого данные с АЦП датчиков записываются в опе-
ративную память, через цикл вычитаются и перезаписываются. Если
разница превышает 0,5 В, то считается, что датчик сработал.
Первая тестовая программа представлена в листингах 12.1 и 12.2.
Листинг 12.1 * Тест шагового двигателя
.include "D:\Program Files\Atmel\AVR Studio\Appnotes\tn26def.inc”
;Автор: Кравченко А.В.
;Дата: 19.01.2010
;Версия: 1.1.1
;Имя файла: katstep.asm
;Микроконтроллер: AVR tiny26.
348
Глава 12
Листинг 12Л. Продолжение
/Тактовая частота: 8МГц
;Питание: стабилизированное 3,9В
;Рабочая программа
.list
def adr = rO
def tmp = Г16
def tmp 2 = r!7
def tmp3 = rl8
def tempo = rl9
def pered = r20
def ana = r21
def bit = r23
def Xa = r2 4
def Ma = r25
def cod = r22
def Ya = r31
.★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
. cseg
.org О
rjmp RESET
rjmp EXT_INTO ;прерывание по входному сигналу
nop ;rjmp EXT—PIN - прерывание не используется
nop ;rjmp TIME—CMPA - прерывание от таймера
nop ;rjmp TIME—CMPB - прерывание от таймера
rjmp TIME_OVF1 ;прерывание от таймера
rjmp TIME_OVFO /прерывание от таймера
nop /rjmp UCI_STRT - прерывание от USI
nop /rjmp UCI_OVF - прерывание от USI
nop / rjmp EE_RDY - прерывание от таймера
nop /rjmp ANA_COMP - прерывание от компаратора
nop /rjmp ADC - прерывание от АЦП
.org 20
;настройка порта В
RESET: пор
9
; запрет всех прерываний
cli
;Настройка прерываний
/Маска прерывания INTO
Idi tmp, $40 /разрешение прерывание INTO
out GIMSK, tmp
Idi tmp, $03 /режим
/условие прерывания по наростающему уровню на INTO
Робот-катер
349
Листинг 12Л* Продолжение
out MCUCR, tmp
/Определение вершины стека Idi tmp, low(RAMEND) /вершина стека
out SP, tmp clr tmp /Установка портов ввода-вывода в нулевое состояние
out DDRA, tmp out PORTA, tmp /обнулить порт А
clr tmp Idi tmp, $08 /РАЗ-выход'
out DDRA, tmp clr tmp out PORTB, tmp /обнулить порт В
Idi tmp, $0F /РВО-РВЗ-выходы
out DDRA, tmp /начало программы nop clr pered clr tmp mov rlO, tmp mov rll, tmp mov rl2, tmp mov rl4, tmp mov rl5, tmp Start: nop /Конфигурация внешнего прерывания /общее разрешение прерывания Idi tmp, $80 out SREG, tmp
;тест шагового двигателя, импульсы 100100100 в цикл
nok: пор
;вперед, влево, вправо.
; движения вперед
vpered: пор
;проверка середины
cbi portA, 3
asf: nop
rcall vlevo
nop
rcall hall
Idi r26, $B2
Idi tmp, $02
Id tmp, X /считываем код
clz
cpi tmp, $01 /правый датчик
350
Глава 12
Листинг 12.1, Продолжение
breq ahk
cpi tmp, $02 /средний датчик
breq fdg
cpi tmp, $04 /левый датчик
breq klj
rjmp asf
/правый датчик
ahk: nop
rcall vlevo
nop rjmp asf
/левый датчик
klj : nop
rcall vpravo
nop rcall hall
Idi r26, $B2
Idi tmp, $02
Id tmp, X /считываем код
clz
cpi tmp, $01 /правый датчик
breq ahk
cpi tmp, $02 /средний датчик
breq fdg
cpi tmp, $04 /левый датчик
breq klj
rjmp asf
/средний датчик
fdg: nop
sbi portA, 3
rcall zaderl
cbi portA, 3
/движени e влево
Idi tmp2, $01
svlevo: nop
rcall vlevo
dty: nop
sbi portA, 3
clz
dec tmp2
brne eert
rjmp svpravo
eert: nop
rcall hall
nop rcall zaderl
Робот-катер
351
Листинг 12.1. продолжение
clz
cpi tmp, $04 /левый датчик
brne fut
rjmp dty
fut: nop
rjmp svlevo
/движение влево
Idi tmp2, $01
svpravo: nop
rcall vpravo
dtyl: nop
sbi portA, 3
clz
dec tmp2
brne eertl
rjmp svo
eertl: nop
rcall hall
nop
rcall zaderl
clz
cpi tmp, $01 ;правый датчик
brne futl
rjmp dtyl
futl: nop
rjmp svpravo
svo: nop
rjmp start
'•подпрограмма чтения датчика Холла
hall: пор
правый датчик 001
Idi tempo, $A0
rcall adcnl ;чтение данных ADC0 001
clr r27
Idi r26, $B0 ;задаем ячейку памяти 60hex+50
Id rl3, X ;читаем значение, сохраненное ранее
st X, tmp3 ;сохраняем полученное значение
mov tmp, rl3
cln
sub tmp, tmp3
brpl sooi
средний датчик
Idi tempo, $A0
rcall adcnl ;чтение данных ADC0 010
clr r27
352
Глава 12
Листинг 12.1, Продолжение
Idi r26, $B1 /задаем ячейку памяти 60hex+50
Id rl3, X /читаем значение, сохраненное ранее
/левый st mov cln sub brpl датчик Idi X, tmp3 tmp, rl3 tmp, tmp3 soio tempo, $A0 ;сохраняем полученное значение
rcall clr adcnl r27 /чтение данных ADC0 100
Idi r26, $B2 /задаем ячейку памяти 60hex+50
Id rl3, X /читаем значение, сохраненное ранее
st X, tmp3 mov tmp, rl3 cln sub tmp, tmp3 brpl sioo ;результат sooi: nop Idi r26, $B2 Idi tmp, $01 st X, tmp rjmp him soio: nop Idi r26, $B2 Idi tmp, $02 st X, tmp rjmp him sioo: nop Idi r26, $B2 Idi tmp, $04 st X, tmp him: nop ret ;подпрограмма влево vlevo: nop /движение влево /1-й полушаг /установить импульс 10.00 odpol: пор clr tmp out PORTB, tmp sbi $18, 2 mov tmp, rl4 clz / сохраняем полученное значение /обнулить порт В
Робот-катер
353
Листинг 12.1. Продолжение
cpi tmp, $9C /156 отсчетов
breq bonn
rjmp odpol
bonn: clr tmp
mov r14, tmp
;2-й полушаг ;установить импульс 10.10
odpoll: nop
clr tmp
out PORTB, tmp /обнулить порт В
sbi $18, 2
sbi $18, 0
mov tmp, rl4
clz
cpi tmp, $9C /156 отсчетов
breq bonnl
rjmp odpoll
bonnl: clr tmp
mov r14, tmp
; 3-й полушаг
/установить импульс 00.10
odpol2: пор
clr tmp
out PORTB, tmp ;обнулить порт В
sbi $18, 0
mov tmp, rl4
clz cpi tmp, $9C ;156 отсчетов
breq bonn2
rjmp odpol2
bonn2: clr tmp
mov rl4, tmp
;4-й полушаг
/•установить импульс 01.10
odpol3: nop
clr tmp
out PORTB, tmp /обнулить порт В
sbi $18, 3
sbi $18, 0
mov tmp, rl4
clz cpi tmp, $9C /156 отсчетов
breq ЬоппЗ
rjmp odpol3
ЬоппЗ: clr tmp
mov r14, tmp
354
Глава 12
Листинг 12Л, Продолжение
;5-й полушаг
;установить импульс 01.00
odpol4: пор
clr tmp
out PORTB, tmp sbi $18, 3 mov tmp, rl4 clz ;обнулить порт В
cpi tmp, $9C breq bonn4 rjmp odpol4 bonn4: clr tmp mov rl4, tmp ; 6-й полушаг ;установить импульс 01.01 odpol5: nop clr tmp ;156 отсчетов
out PORTB, tmp sbi $18, 3 sbi $18, 1 mov tmp, rl4 clz ;обнулить порт В
cpi tmp, $9C breq bonn5 rjmp odpol5 bonn5: clr tmp mov rl4, tmp ;7—й полушаг /установить импульс 00.01 odpol6: nop clr tmp ;156 отсчетов
out PORTB, tmp sbi $18, 1 mov tmp, rl4 clz ;обнулить порт В
cpi tmp, $9C breq bonn6 rjmp odpol6 bonn6: clr tmp mov rl4, tmp ;8-й полушаг /установить импульс 10.01 odpol7: nop clr tmp ;156 отсчетов
out PORTB, tmp sbi $18, 3 ;обнулить порт В
Робот-катер
355
Листинг 12.1. Продолжение
sbi mov clz cpi breq rjmp $18, 1 tmp, rl4
tmp, $9C bonn7 odpol7 ;156 отсчетов
bonn7: clr tmp
mov r14, tmp
/условие прохождения на определенный угол,
;заданный радиопередачей
ret
vpravo: nop
;движение вправо
; 1-й полушаг
;установить импульс 10.01
odpol9: nop
clr tmp
out PORTB, tmp ;обнулить порт В
sbi $18, 2
sbi $18, 1
mov tmp, rl4
clz
cpi tmp, $9C ;156 отсчетов
breq bonn9
rjmp odpol9
bonn9: clr tmp
mov r14, tmp
;2-й полушаг
;установить импульс 00.01
odpol91: nop
clr tmp
out PORTB, tmp ;обнулить порт В
sbi $18, 1
mov tmp, rl4
clz
cpi tmp, $9C ;156 отсчетов
breq bonn91
rjmp odpol91
bonn91: clr tmp
mov r14, tmp
;3-й полушаг
,-установить импуль c 01.01
odpol92: nop
clr tmp
out PORTB, tmp ;обнулить порт В
356
Глава 12
Листинг12Л. Продолжение
sbi $18, 3
sbi $18, 1
mov tmp, rl4
clz
cpi tmp, $9C
breq bonn92
rjmp odpol92
bonn92: clr tmp
mov r14, tmp
/4-й полушаг
/установить импульс 01.00
odpol93: nop
clr tmp
out PORTB, tmp
sbi $18, 3
sbi $18, 0
mov tmp, rl4
clz
cpi tmp, $9C
breq bonn93
rjmp odpol93
bonn93: clr tmp
mov r14, tmp
/5-й полушаг /установить i odpol94: nop импульс 01.10
clr tmp
out PORTB, tmp
sbi $18, 3
sbi $18, 0
mov tmp, rl4
clz
cpi tmp, $9C
breq bonn94
rjmp odpol94
bonn94: clr tmp
mov rl4, tmp
/6-й полушаг /установить : odpol95: nop импульс 00.10
clr tmp
out PORTB, tmp
sbi $18, 0
mov tmp, rl4
clz
cpi tmp, $9C
/156 отсчетов
/обнулить порт В
;156 отсчетов
/•обнулить порт В
;156 отсчетов
/обнулить порт В
;156 отсчетов1
Робот-катер
357
Листинг12.1. Продолжение
breq rjmp bonn95 odpol95
bonn95: clr tmp
mov г14, tmp
/7-й полушаг
/установить импульса 10.10
odpol96: nop
clr tmp
out PORTB, tmp /обнулить порт В
sbi $18, 2
sbi $18, 0
mov tmp, rl4
clz
cpi tmp, $9C /156 отсчетов
breq bonn96
rjmp odpol96
bonn96: clr tmp
mov rl4, tmp
/8-й полушаг
/установить ] импульса 10.00
odpol97: nop
clr tmp
out PORTB, tmp /обнулить порт В
sbi $18, 2
mov tmp, rl4
clz
cpi tmp, $9C /156 отсчетов
breq bonn97
rjmp odpol97
bonn97: clr tmp
mov r14, tmp
/условие прохождения на определенный угол,
;заданный радиопередачей
пор
ret
/Прерывание по входному сигналу единицы
EXT-INT0: пор
in tmp, SREG /запомнить состояние регистра
sei /общее разрешение прерываний
/Запуск таймера ТО
/режим работы таймера ТО с максимальным предварительным
/делением. Реализация прерывания через 0,16 мс
Idi tmp3,$04
out TCCR0,tmp3 /деление CK/256
358
Глава 12
Листинг 12Л. Продолжение
Idi bit, $FB /8 МГц/256 остаток 5
out TCNTO, bit
Idi tmp3, $06
out TIMSK, tmp3 /разрешаем прерывания по
;переполнению от ТО
/запуск таймера Т1
/реализация прерывания через 0,32 мс
Idi tmp3, $09
out TCCR1B, tmp3 /деление CK/256
Idi bit, $F6
out TCNT1, bit
Idi tmp3, $06
out TIMSK,tmp3 /разрешаем прерывания по
/переполнению от Т1
nop
out SREG, tmp /восстановить регистр состояния
reti
• **************************************************************
f
/Прерывание по таймеру Т1
TIME_OVF1: пор
Idi ana, $0F
/Подтверждение единицы кода
Idi tmp, $0A /0,2 мс- 0,16 мс/ 0,02мс
wet: nop
clz
dec tmp
breq tyu
rjmp fff
tyu: nop
rjmp xcon
fff: nop
rcall time002
sbic PORTB, 5 /пропустить команду если 0
rjmp wet
sei
/Запуск таймера ТО
/режим работы таймера ТО с максимальным предварительным
делением. Реализация прерывания через 0,16 мс
Idi tmp3, $04
out TCCR0, tmp3 /максимальное деление CK/256
Idi bit, $FA /8 МГц/256 остаток 5
out TCNTO, bit
Idi tmp3, $02 /запрет T1
out TIMSK, tmp3 /разрешаем прерывания по
/переполнению от ТО
Робот-катер
359
Листинг 12.1. Продолжение
rcall rjmp anal qws
хсоп: пор
Idi ana, $00
rcall anal
qws: пор
mov tmp, R14
inc tmp
mov rl4, tmp
mov tmp, R15
inc tmp
mov rl5, tmp
reti
.**************************************************************
/Прерывание по таймеру ТО
TIME-OVFO: пор
Idi ana, $AF
/Подтверждение ноля кода
Idi tmp, $0A ;0,2 мс- 0,16 мс/ 0,02мс
wetl: nop
clz
dec tmp
breq tyul
rjmp fffl
tyul: nop
rjmp xconl
fffl: nop
rcall time002
sbic $18, 5 ;пропустить команду, если 0
rjmp wetl
sei
;3апуск таймера ТО
;режим работы таймера ТО с максимальным предварительным
/•делением. Реализация прерывания через 0,16 мс
Idi tmp3, $04
out TCCR0, tmp3 /-максимальное деление CK/256
Idi bit, $FA ;8 МГц/256 остаток 5
out TCNT0, bit
Idi tmp3, $02 ; запрет T1
out TIMSK, tmp3 ;разрешаем прерывания по
/переполнению от'ТО
rcall anal
rjmp wqr
xconl: nop
Idi ana, $00
rcall anal
360
Глава 12
Л истинг 12Л. Продолжение
wqr: пор
reti
•★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★*
/Подпрограмма считывания данных АЦП
/Настройка АЦП1
adcnl: пор
cli
nop clr tmp
awe: nop
cpi tmp, $04
brsh ass
out ADMUX, tempo /коммутация входов АЦП
clr tmp2
clr tmp3
clr pered
Idi pered, $C4 /одиночное, запуск, 1/16
out ADCSR, pered /запуск АЦП на преобразование
/Сохранение данных АЦП1
in tmp2, ADCL
in tmp3, ADCH
mov r2, tmp2
mov r3, tmp3
mov r4, r2
mov r5, r3
mov гб, г4
mov г7, г5
inc tmp
rjmp awe
/среднее арифметическое действие
ass: пор
clr г8
clc
add tmp2 , r2
adc r9, r8
add tmp2, r4
adc r9, r8
add tmp2, г 6
adc r9, r8
clc
Isr r9
ror tmp2
Isr r9
ror tmp2
clr r9
clc
Робот-катер
361
Листинг 12.1. Продолжение
add tmp3, r3
adc r9, r8
add tmp3, r5
adc r9, r8
add tmp3, r7
adc r9, r8
clc
Isr r9
ror tmp3
Isr r9
ror tmp3
nop
ret
.**********************************
;Подпрограмма 0,02mS
;Подпрограмма задержки включения
time002: пор
wdr
clz
cln
Idi Xa, $07
nop
nop
dv2: nop
wdr
clz
cln
cis
dec Xa
brpl dv2
ret
/подпрограмма анализа
anal: nop
ret
/Подпрограмма задержки включения
zaderl: nop
wdr
clr tmp
clr Ma
clr Ya
Idi Ya, $0A
cpi tmp3 , $00
brne goo
Idi Ma, $01
add Ma, tmp3
nop
362
Глава 12
Листинг 12.1. Окончание
goo: mov tmp3, Ma nop
dm: mov Ma, tmp3 nop cpi tmp2, $00 brne goq idi Xa, $01 add Xa, tmp2
goq: nop nop
dv: mov Xa, tmp2 nop wdr
dx: nop nop
eee: nop nop inc tmp cln cpi tmp, $3A brio eee nop clr tmp nop cln dec Ya nop brpl dx cln dec Xa brpl dv clz dec Ma brne dm ret *******************************************
Листинг 12.2. НЕХ-файл для первой тестовой программы
:020000020000FC
:1000000013C06DC10000000000007BC19CC1000056
:08001ОООООООООООООООООООЕ8
:100028000000F89400E40BBF03E0Q5BF0FED0DBF1F
:1000380000270АВВ0ВВВ002708Е00АВВ002708ВВ48
:100048000FE00ABB000044270027A02EB02EC02EC8
:10OO58OOEO2EFO2EO0OOO0E8OFBFOO0OOOOODB9843
:1OOO68OO0OOO7BDOOOOO4ADOA2EBO2EOOC919894EB
Робот-катер
363
Листинг 12.2. Продолжение
:10007800013029F00230B1F0043029FQF1CF00004E
:1O0088006CD000O0EDCF00O0C6D0000O37DOA2EB46
:1000980002EOOC919894013091F3023019F0043089
:1OO0A80091F3DECF0O00DB9AABD1DB9811EO00OQC2
: 1000B80054DCI0OO0DB9A98941A95O9F4OBCOO0OOFC
:1000C8001DD000009DD19894043009F4F2CFODOOAF
:1000D800EECF11E000009FD00000DB9A98941A95AB
:1000E80009F40ACOOOOOOAD000008AD198940130AF
:1OOOF8OO09F4F2CF0OOOEECFO0O0ACCFO0OD3OEAE8
:100108003AD1BB27AOEBDC902C930D2DA894021BB1
:10011800A2F430EA30D1BB27A1EBDC902C930D2D53
:10012800A894021B7AF430EA26D1BB27A2EBDC9014
:100138002C930D2DA894021B52F40000A2EB01E0B1
:10O148000C9309C000O0A2EBO2EO0C93O4COO00Q6D
:Ю015800А2ЕВ04ЕООС9300000895000000000027СЗ
:1001680008BBC29A0E2D98940C3909F0F7CF0027D6
:10017800E02E0000002708BBC29AC09AOE2D989462
:100188000C3909FCIF6CF0027E02E0000002708BB45
:10019800C09A0E2D98940C3909F0F7CF0027E02E5D
:1001A8000000002708BBC39AC09AOE2D98940C39FA
:1001B8O009F0F6CF0027E02E0000002708BBC39AFD
:1001C8000E2D98940C3909FOF7CF0027E02E000087
:1001D800002708BBC39AC19A0E2D98940C39O9FQD0
:1001E800F6CF0027E02E0000002708BBC19AOE2D8D
:1001F80098940C3909FOF7CF0027E02E000000276B
:1002080008BBC39AC19AOE2D98940C3909FOF6CF01
:100218000027Е02Е089500000000002708ВВС29АВЕ
: 10022800C19AOE2D98940C3909FOF6CF0027E02ECC
:100238000000002708BBC19AOE2D98940C3909FOCC
:10024800F7CF0027E02E0000002708BBC39AC19A09
: 100258000E2D98940C3909FOF6CF0027E02EOOOOF7
:10026800002708BBC39AC09AOE2D98940C3909F040
:10027800F6CF0027E02E0000002708BBC39AC09ADB
:100288000E2D98940C3909FOF6CF0027E02EOOOQC7
:10029800002708BBC09AOE2D98940C3909FOF7CFA7
:1002A8000027E02E0000002708BBC29AC09AOE2D36
:1002B80098940C3909FOF6CF0027E02E00000027AB
:1002C80008BBC29AOE2D98940C3909FOF7CF002775
:1002D800E02E0000089500000FB7789424E023BFB3
: 1002E8007BEF72BF26E02 9BF29E02FBD7 6EF7EBDE8
:1002F8O026E029BF00000FBF18950OOO5FEO0AEO64
:10030800000098940A9509F002COOOOOODC0000092
:1003180066D0C599F5CF789424E023BF7AEF72BFF1
:1003280022E029BF6BD003C0000050E067D0000076
:100338000E2D0395E02EOF2D0395F02E1895000035
:1O0348OO5FEAOAEO0O009894OA95O9FOO2COOOOOEC
364
Глава 12
Листинг 12.2. Окончание
:100358000DC0000044DOC599F5CF789424E023BFAO
:100368007AEF72BF22E029BF49D003C0000050EOF5
:1003780045D0000018950000F89400000027000000
:10038800043080F437B911272227442744ЕС46В9В2
:1003980014B125B1212E322E422C532C642C752CED
:1003A8000395EDCF000088248894120D981C140D35
:1003В800981С160D981C88949694179596941795Е2
:1003С80099248894230D981C250D981C270D981C9A
:1003D8008894969427959694279500000895000090
:ЮОЗЕ800А8959894А89487ЕОООООООООООООА895ВС
:1003F8009894A894C8948A95CAF708950000089517
:100408000000A89500279927FF27FAE0203021F45B
:1004180091E0920F0000292F0000922F0000103069
:1004280019Е481Е0810Е00000000812Е0000А895О9
: 1004 380000000000000000000395A8940A33D8F3D8
:10044800000000270000A894FA95000092F7A894ED
:0C0458008A9562F798949A9509F7089528
:00000001FF
Тест2. Антенна 1-4, автоуправление двигателем
Для автоуправления моделью воспользуемся алгоритмом, показан-
ным на рис. 12.8. Соответствующая программа представлена в листин-
гах 12.3 и 12.4.
Как только активизирована программа возвращения объекта, прове-
ряется уровень напряжения на антеннах модели ANT1-ANT4. По мак-
симальному значению определяется направление движения модели. Ка-
тер выполняет маневр разворота в сторону максимального сигнала ра-
диомаяка. Второй тест в сочетании с моделью катера и схемой управле-
ния на микроконтроллере является неявным блоком состояния.
Программа
В начале программы конфигурируются порты ввода-вывода микро-
контроллера. Ранее было отмечено, что радиоуправление — процесс
дискретный. На какой угол повернется джойстик управления (“влево/
вправо”), на такой угол установится и киль на катере. Для правильного
выполнения команды поворота необходимо точно знать положение киля
в данный момент, поэтому сразу же выполняется подпрограмма калиб-
ровки руля.
Вначале руль движется в крайнее левое положение до момента сра-
батывания датчика Холла (левая сторона). Как только датчик сработал,
руль движется вправо до момента срабатывания датчика Холла (правая
Робот-катер
365
сторона). При этом отсчитываются данные по количеству оборотов ша-
гового двигателя, которые затем заносятся в ОЗУ микроконтроллера.
Киль устанавливается в среднее положение.
ANT3
Поворот влево
дважды
Поворот вправо
Рис. 12.8. Алгоритм второго теста
366
Глава 12
Подпрограмма калибровки руля также выполняется во время ко-
манды “Стоп”. Это необходимо в случае сбоя калибровки. При выпол-
нении команды поворота влево/вправо данные с пульта проходят про-
верку направления движения. Затем выбирается направление поворота
киля, и приводится в действие шаговый двигатель. Текущее значение
количества оборотов сравнивается с данными пульта. Киль устанавли-
вается в угол, заданный с пульта.
Ранее отмечалось, что среднее значение АЦП в повороте составляет
$7F. Большее значение задает поворот влево, меньшее — вправо. Чем
больше разница, тем сильнее поворот. В программе путем чтения ОЗУ
(адреса h0060-h0088) проверяются полученные от пульта команды: впе-
ред — код $Е0; влево/вправо — код $А0; стоп — код $D4. В соответст-
вии с кодом команды происходит ветвление программы на отдельные
действия по управлению катером. Во избежание потери данных во вре-
мя выполнения команды устанавливается запрет прерываний. После
выполнения команды разрешение на прерывание программы восстанав-
ливается.
Рабочая программа управления роботом-катером показана в лис-
тингах 12.5 и 12.6.
Листинг 12.3. Вторая тестовая программа
.include "D:\Program Files\Atmel\AVR Studio\Appnotes\tn26def.inc"
;Автор: Кравченко А.В.
/Дата: 12.02.2010
;Версия: 1.1.2
/Имя файла: autovoz.asm
;Микроконтроллер: AVR tiny26.
/Тактовая частота: 8МГц
/Питание: нестабилизированное 4,5 В
/Рабочая программа
list
def adr = rO
def tmp = Г16
def tmp2 = rl7
def tmp3 = rl8
def tempo = rl9
def pered = r2 0
def bit = r21
def Ya = r23
def Xa = r24
def Ma = r25
def ana = r2 6
def cod = r22
Робот-катер
367
Листинг 12.3. Продолжение
.***********************************************************
. cseg
.org О
rjmp RESET
rjmp EXT_INT0 /прерывание по входному сигналу
nop ;rjmp EXT—PIN - прерывание не используется
nop '/rjmp Т1МЕ_СМРА - прерывание от таймера
nop ;rjmp Т1МЕ_-СМРВ - прерывание от таймера
rjmp TIME—OVF1 /прерывание от таймера
rjmp TIME—OVFO /прерывание от таймера
nop / rjmp UCI_STRT - прерывание от USI
nop ;rjmp UCI_OVF - прерывание от USI
nop ;rjmp EE_RDY - прерывание от таймера
nop /rjmp ANA_COMP - прерывание от компаратора
nop ;rjmp ADC - прерывание от АЦП
.org 20
/настройка порта В
RESET: пор
!
; запрет всех прерываний
cli
/Настройка прерываний
/Маска прерывания INTO
Idi tmp, $40 /разрешение прерывания INTO
out GIMSK, tmp
Idi tmp, $03 /режим
условие прерывания по нарастающему уровню на INTO
out' MCUCR, tmp
Определение вершины стека
Idi tmp, low(RAMEND) /вершина стека
out S P, tmp
clr tmp
Установка портов ввода-вывода в нулевое состояние
out DDRA, tmp
out PORTA, tmp /обнулить порт А
clr tmp
Idi tmp, $1F /РА0-РА5 - выходы
out DDRA, tmp
out PORTB, tmp /обнулить порт В
clr tmp /РВ0-РВ7 - входы
out DDRA, tmp
/начало программы
пор
clr pered
368
Глава 12
Листинг 12.3. Продолжение
clr tempo
mov г10, tmp mov г11, tmp mov r12, tmp Start: nop ;чтение данных АЦП, сохранение в ОЗУ ;Чтение ANT1-ADC6 Idi tempo, $А6
rcall adcnl clr r27 /чтение данных ADC6
Idi r26, $A0 st X, tmp3 ;Чтение ANT2-ADC5 Idi tempo, $A5 /задаем ячейку памяти 60hex+40hex
rcall adcnl clr r27 /чтение данных ADC5
Idi r26, $A1 st X, tmp3 ;Чтение ANT3-ADC4 Idi tempo, $A4 /задаем ячейку памяти 60hex+40hex
rcall adcnl clr r27 /чтение данных ADC4
Idi r26, $A2 st X, tmp3 /Чтение ANT4-ADC3 Idi tempo, $A3 /задаем ячейку памяти 60hex+40hex
rcall adcnl clr r27 /чтение данных ADC3
Idi r26, $A3 st X, tmp3 /вычитание ANT1-ANT2 clr r27 /задаем ячейку памяти 60hex+40hex
Idi r26, $A0 Id tmp, X /задаем ячейку памяти 60hex+40hex
Idi r26, $A1 Id tmp3, X cln sub tmp, tmp3 brpl KAI /вычитание ANT2-ANT3 clr r27 /задаем ячейку памяти 60hex+40hex
Idi r26, $A1 Id tmp, X /задаем ячейку памяти 60hex+40hex
Idi r26, $A2 Id tmp3, X cln /задаем ячейку памяти 60hex+40hex
Робот-катер
369
Листинг 12.3. Продолжение
sub tmp, tmp3
brpl rjmp ;вычитание KAI: clr Idi KA3 KA4 ANTI-ANT3 r27 r26, $A0 ;задаем ячейку памяти 60hex+40hex
Id Idi tmp, X r26, $A2 ;задаем ячейку памяти 60hex+40hex
Id cln sub brpl ;вычитание clr Idi tmp3, X tmp, tmp3 KA2 ANT3-ANT4 r27 r26, $A2 ;задаем ячейку памяти 60hex+40hex
Id Idi tmp, X r26, $A3 ;задаем ячейку памяти 60hex+40hex
Id cln sub brpl rjmp ;вычитание KA2: clr Idi tmp3, X tmp, tmp3 KA7 KA4 ANT1-ANT4 Г27 r26, $A0 ;задаем ячейку памяти 60hex+40hex
Id Idi tmp, X r26, $A3 ;задаем ячейку памяти 60hex+40hex
Id cln sub brpl rjmp ;вычитание KA3: clr Idi tmp3, X tmp, tmp3 KA6 KA7 ANT2-ANT4 r27 r26, $A1 ;задаем ячейку памяти 60hex+40hex
Id Idi tmp, X r26, $A3 ;задаем ячейку памяти 60hex+40hex
Id tmp3, X cln sub tmp, tmp3 brpl KA5 rjmp KA 7 ;Прямой ход KA6: nop sbi portA, 3 rcall zaderl
370
Глава 12
Листинг 12Х Продолжение
cbi portA, 3
- пор
rjmp Start
/Поворот вправо
КА7: пор
sbi portA, 3
rcall vpravo
rcall zaderl
cbi portA, 3 '
nop
rjmp Start
/Поворот влево
KA5: пор
sbi portA, 3
rcall vlevo
rcall zaderl
cbi portA, 3
nop
rjmp Start
/Второй поворот влево
KA4: пор
sbi portA, 3
rcall vlevo
rcall zaderl
cbi portA, 3
nop
rjmp Start
/подпрограмма влево
vlevo: nop
/движение влево
/1-й полушаг
/установить odpol: пор импульс 10.00
clr tmp
out PORTB, tmp
sbi $18, 2
mov tmp, rl4
clz
cpi tmp, $9C
breq bonn
rjmp odpol
bonn: clr tmp
mov rl4, tmp
/2-й полушаг
/установить импульс 10.10
odpoll: nop
/обнулить порт В
/156 отсчетов
Робот-катер
371
Листинг 12.3. Продолжение
clr tmp
out sbi sbi mov clz cpi breq rjmp bonnl: clr mov /3-й полушаг ;установить odpol2: clr PORTB, tmp $18, 2 $18, 0 tmp, r14 tmp, $9C bonnl odpoll tmp rl4, tmp импульс 00.10 nop tmp ;обнулить порт /156 отсчетов В
out sbi mov clz cpi breq rjmp bonn2: clr mov ;4-й полушаг ;установить odpol3: clr PORTB, tmp $18, 0 tmp, rl4 tmp, $9C bonn2 odpol2 tmp rl4, tmp импульс 01.10 nop tmp ;обнулить порт ;156 отсчетов В
out sbi sbi mov clz cpi breq rjmp ЬоппЗ: clr mov ; 5-й полушаг ;установить odpol4: clr PORTB, tmp $18, 3 $18, 0 tmp, rl4 tmp, $9C ЬоппЗ odpol3 tmp r14, tmp импульс 01.00 nop tmp /обнулить порт ;156 отсчетов В
out sbi mov clz PORTB, tmp $18, 3 tmp, rl4 /обнулить порт В
372
Глава 12
Листинг 1Z3* продолжение
cpi tmp, $9C
breq bonn4
rjmp odpol4
bonn4: clr tmp
mov r14, tmp
;6-й полушаг
/установить импульс 01.01
/156 отсчетов
odpol5: nop
clr tmp
out PORTB, tmp
sbi $18, 3
sbi $18, 1
mov tmp, rl4
clz
cpi tmp, $9C
breq bonn5
rjmp odpol5
bonn5: clr tmp
mov r14, tmp
/7-й полушаг
/установить импульс 00.01
/обнулить порт В
/156 отсчетов
odpol6: nop
clr tmp
out PORTB, tmp
sbi $18, 1
mov tmp, rl4
clz
cpi tmp, $9C
breq Ьоппб
rjmp odpol6
Ьоппб: clr tmp
mov r14, tmp
/8-й полушаг
/обнулить порт В
/156 отсчетов
/установить импульс 10.01
odpol7: nop
clr tmp
out PORTB, tmp
sbi $18, 3
sbi $18, 1
mov tmp, rl4
clz cpi tmp, $9C
breq bonn7
rjmp odpol7
bonn7: clr tmp
mov r14, tmp
/обнулить порт В
/156 отсчетов
Робот-катер
373
Листинг 12,3. Продолжение
;условие прохождения на определенный угол,
/•заданный радиопередачей
ret
vpravo: nop
/движение вправо
;1-й полушаг
/установить : импульс 10.01
odpol9: nop
clr tmp
out PORTB, tmp
sbi $18, 2
sbi $18, 1
mov tmp, rl4
clz
cpi tmp, $9C
breq bonn9
rjmp odpol9 ‘
bonn9: clr tmp
mov rl4, tmp
;2-й полушаг /•установить импуль c 00.01
odpol91: nop
clr tmp
out PORTB, tmp
sbi $18, 1
mov tmp, rl4
clz
cpi tmp, $9C
breq bonn91
rjmp odpol91
bonn91: clr tmp
mov rl4, tmp
;3-й полушаг /установить импульс 01.01
odpol92: nop
clr tmp
out PORTB, tmp
sbi $18, 3
sbi $18, 1
mov tmp, rl4
clz
cpi tmp, $9C
breq bonn92
rjmp odpol92
bonn92: clr tmp
;обнулить порт В
;156 отсчетов
;обнулить порт В
;156 отсчетов
;обнулить порт В
;156 отсчетов
314
Глава 12
Листинг 12.3, Продолжение
mov rl4, tmp
/4-й полушаг
/установить импульс 01.00
odpol93: пор
clr tmp
out PORTB, tmp
sbi $18, 3
sbi $18, 0
mov tmp, rl4
clz
cpi tmp, $9C
breq bonn93
rjmp odpol93
bonn93: clr tmp
mov rl4, tmp
/5-й полушаг /установить ] odpol94: nop импульс 01.10
clr tmp
out PORTB, tmp
sbi $18, 3
sbi $18, 0
mov tmp, rl4
clz
cpi tmp, $9C
breq bonn94
rjmp odpol94
bonn94: clr tmp
mov r14, tmp
/6-й полушаг /установить : odpol95: nop импульс 00.10
clr tmp
out PORTB, tmp
sbi $18, 0
mov tmp, Г14
clz
cpi tmp, $9C
breq bonn95
rjmp odpol95
bonn95: clr tmp
mov r14, tmp
/7-й полушаг
/установить импульса 10.10
odpol96: пор
/обнулить порт В
/156 отсчетов
/обнулить порт В
/156 отсчетов
/обнулить порт В
/156 отсчетов
clr tmp
Робот-катер
375
Листинг 12.Х Продолжение
out sbi sbi mov clz cpi breq rjmp bonn96: clr mov PORTB, tmp /обнулить порт В $18, 2 $18, 0 tmp, г14 tmp, $9C /156 отсчетов bonn96 odpol96 tmp r14, tmp
/8-й полушаг
/установить импульса 10.00
odpol97: nop clr out sbi mov clz cpi breq rjmp bonn97: clr mov tmp PORTB, tmp /обнулить порт В $18, 2 tmp, rl4 tmp, $9C /156 отсчетов bonn97 odpol97 tmp rl4, tmp
/условие прохождение на определенный угол
/заданный радиопередачей.
пор
ret
/Подпрограмма 0,02mS
/Подпрограмма задержки включения
time002: пор
wdr
clz
cln
Idi Xa, $07
nop
nop
dv2: nop
wdr
clz
cln
cis
dec Xa
brpl dv2
ret
/Подпрограмма считывания данных АЦП
376
Глава 12
Листинг 12.3. Продолжение
;Настройка АЦП1
adcnl: nop
cli
' nop
clr tmp
awe: nop
cpi tmp, $04
brsh ass
out ADMUX, tempo ;коммутация входов АЦП
clr tmp2
clr tmp3
clr pered
Idi pered, $C4 ;одиночное, запуск, 1/16
out ADCSR, pered ;запуск АЦП на преобразование
;Сохранение данных АЦП1
in tmp2, ADCL
in tmp3, ADCH
mov r2, tmp2
mov r3, tmp3
mov r4, r2
mov r5, r3
mov r6, r4
mov r7, r5
inc tmp
rjmp awe
;среднее арифметическое действие
ass: nop
clr r8
clc
add tmp2, r2
adc r9, r8
add tmp2, r4
adc r9, r8
add tmp2, r6
adc r9, r8
clc
Isr r9
ror tmp2
Isr r9
ror tmp2
clr r9
clc
add tmp3, r3
adc r9, r8
add tmp3, r5
adc r9, r8
Робот-катер
377
Листинг 12.3. Продолжение
add tmp3, r7
adc r9, r8
clc
Isr r9
ror tmp3
Isr r9
ror tmp3
nop
ret
;Подпрограмма задержки включения
zaderl : nop
wdr clr tmp clr Ma clr Ya
Idi Ya, $0A
cpi tmp3, $00 brne goo
Idi Ma, $01
add Ma, tmp3 nop
goo: mov tmp3, Ma nop
dm: mov Ma,.tmp3 nop
cpi tmp2, $00 brne goq
Idi Xa, $01
goq: add Xa, tmp2 nop nop
dv: dx: eee: mov Xa, tmp2 nop wdr nop nop nop nop inc tmp cln
cpi tmp, $3A brio eee nop clr tmp nop
378
Глава 12
Листинг 1Z3, Продолжение
cln
• dec Ya
пор
brpl dx
cln
dec Xa
brpl dv
clz
dec Ma
brne dm
ret
. ************************************************* r
;Прерывание no входному сигналу единицы
EXT_INT0: пор
in tmp, SREG /запомнить состояние регистра
sei /общее разрешение прерываний
/Запуск таймера ТО
/режим работы таймера ТО с максимальным предварительным
/делением. Реализация прерывания через 0,16 мс
Idi tmp3, $04
out TCCR0, tmp3 /деление CK/256
Idi bit, $FB /8 мГц/256 остаток 5
out TCNT0, bit
Idi tmp3, $06
out TIMSK, tmp3 /разрешаем прерывания по
/переполнению от ТО
/запуск таймера Т1
/реализация прерывания через 0,32 мс
Idi tmp3, $09
out TCCR1B, tmp3 /деление CK/256
Idi bit, $F6
out TCNT1, bit
Idi tmp3, $06
out TIMSK,tmp3 /разрешаем прерывания по
/переполнению от Т1
nop
out SREG, tmp /восстановить регистр состояния
reti
/
/Прерывание по таймеру Т1
TIME_OVF1: пор
Idi ana, $0F
/Подтверждение единицы кода
Idi tmp, $0А /0,2 мс- 0,16 мс/ 0, 02мс
wet: пор
Робот-катер
379
Листинг 1X3. Продолжение
clz
dec tmp
breq tyu
rjmp fff
tyu: nop rjmp xcon '
fff: nop rcall time002
sbic PORTB,
rjmp sei wet
;пропустить команду, если О
;Запуск таймера ТО
;режим работы таймера TO с максимальным предварительным
;делением. Реализация прерывания через 0 Idi tmp3, $04 ,16 мс
out TCCRO,. tmp3 Idi bit, $FA out TCNTO, bit Idi tmp3, $02 /•максимальное деление ;8 МГц/256 остаток 5 ;запрет Т1 СК/256
out TIMSK, tmp3 rjmp qws xcon: nop Idi ana, $00 qws: nop mov tmp, R14 inc tmp mov rl4, tmp mov tmp, R15 inc tmp mov rl5, tmp reti /•разрешаем прерывания /•переполнению от ТО по
. ★★★★★★★★★★★★★★★★★★★★★★★★★ ;Прерывание по таймеру TO TIME_OVFO: nop Idi ana, $AF /•Подтверждение ноля кода ★★★★★★★★★★★★ ★ ★ ★
Idi tmp, $0A wetl: nop clz dec tmp breq tyul rjmp fffl tyul: nop rjmp xconl fffl: nop ;0,2 мс- 0,16 мс/ 0,02мс
380
Глава 12
Листинг 12.3. Окончание
rcall time002
sbic $18, 5 /пропустить команду если 0
rjmp wetl
sei
/Запуск таймера ТО
/режим работы таймера ТО с максимальным предварительным
/делением. Реализация прерывания через 0,16 мс
Idi tmp3, $04
out TCCR0, tmp3 /максимальное деление CK/256
Idi bit, $FA /8 МГц/256, остаток 5
out TCNTO, bit
Idi tmp3, $02 /запрет T1
out TIMSK, tmp3 /разрешаем прерывания по
/переполнению от ТО
rjmp wqr
xconl: nop
Idi ana, $00
wqr: nop
reti
Листинг 12.4, НЕХ-файл второй тестовой программы
: 020000020000FC
:1000000013СОВСС1000000000000САС1Е9С100006В
:080010000000000000000000Е8
: 100028000000F89400E40BBF03E005BF0FED0DBF1F
: 1000380000270ABBOBBB00270FE10ABB08BB002740
:100048000АВВ000044273327А02ЕВ02ЕС02Е000084
:1000580036EA2ED1BB27AOEA2C9335EA29D1BB2753
:10006800A1EA2C9334EA24D1BB27A2EA2C9333EAE1
:100078001FD1BB27A3EA2C93BB27A0EA0C91A1EAC6
: 100088002C91A894021B4AF4BB27A1EAOC91A2EA7E
:100098002C91A894021BDAF437COBB27AOEAOC9174
:1000A800A2EA2C91A894021B4AF4BB27A2EA0C915D
:1000B800A3EA2C91A894021BCAF426COBB27AOEA85
:1000C8000C91A3EA2C91A894021B52F40FC0BB27F1
:1000D800A1EA0C91A3EA2C91A894021B72F406C021
:1OOOE80OOOOODB9A19D1DB98OOOOB1CFOOO0DB9A41
:1OOOF8OO7ODO12D1DB98OO0OAACFOOOODB9AOBDO99
:1O01O8OOOBD1DB98O0OOA3CFOOOODB9AO4DOO4D1O8
:10011800DB9800009CCF00000000002708BBC29AB3
:100128000E2D98940C3909F0F7CF0027E02E000027
:10013800002708BBC29AC09A0E2D98940C3909F072
:10014800F6CF0027E02E0000002708BBC09A0E2D2E
: 1001580098940C3909F0F7CF0027E02E000000270B
:1001680008BBC39AC09AOE2D98940C3909FOF6CFA3
:100178000027E02E0000002708BBC39A0E2D989494
Робот-катер
381
Листинг 12.4. Окончание
:100188000C3909F0F7CF0027E02E0000002708BB44
:10019800C39AC19A0E2D98940C3909F0F6CF00270E
:1001A800E02E0000002708BBC19A0E2D98940C3948
:1001B80009F0F7CF0027E02E0000002708BBC39AFC
:1001C800C19A0E2D98940C3909F0F6CF0027E02E2D
:1001D800089500000000002708BBC29AC19AOE2D9E
:1001E80098940C3909FOF6CF0027E02E000000277C
:1001F80008BBC19A0E2D98940C3909F0F7CF002747
:10020800E02E0000002708BBC39AC19A0E2D9894CF
:100218000C3909F0F6CF0027E02E0000002708BBB4
:10022800C39AC09A0E2D98940C3909F0F6CF00277E
:10023800E02E0000002708BBC39AC09A0E2D9894A0
:100248000C3909F0F6CF0027E02E0000002708BB84
:10025800C09A0E2D98940C3909F0F7CF0027E02E9C
:100268000000002708BBC29AC09A0E2D98940C393A
:1002780009F0F6CF0027E02E0000002708BBC29A3D
:100288000E2D98940C3909F0F7CF0027E02E0000C6
:1002980008950000A8959894A894B7E000000000AD
:1002A8000000A8959894A894C8948A95CAF70895C8
:1002B8000000F894000000270000043080F437B9EB
:1002С80011272227442744ЕС46В914В125В1212Е21
:1002D800322E422C532C642C752C0395EDCF000044
:1002E80088248894120D981C140D981C160D981CBF
:1002F8008894969417959694179599248894230D25
:10030800981C250D981C270D981C88949694279561
:1003180096942795000008950000А895002799272Е
:1003280077277AE0203021F491E0920F0000292FFE
:100338000000922F0000103019F481E0810F0000B6
:100348000000812F0000A8950000000000000000B8
:100358000395A8940A33D8F3000000270000A89456
:100368007A95000092F7A8948A9562F798949A95DE
:1003780009F7089500000FB7789424E023BF5BEFD6
:1003880052BF26E029BF29E02FBD56EF5EBD26E00B
:1003980029BF00000FBF18950000AFE00AE0000079
:1OO3A8O09894OA9509FOO2COOOOOOCCOOOOO71DFA3
:1003B800C599F5CF789424E023BF5AEF52BF22E0C5
:1003C80029BF02C00000A0E000000E2D0395E02E1A
:1003D8000F2D0395F02E18950000AFEA0AE00000F3
:1003E80098940A9509F002C000000CC0000051DF83
:1003F800C599F5CF789424E023BF5AEF52BF22E085
:0С04080029BF02C00000A0E00000189511
:00000001FF
Листинг 12.5. Рабочая программа управления роботом*катером
.include '"D:\Program Files\Atmel\AVR Studio\Appnotes\tn26def.inc"
7Автор: Кравченко А.В.
382
Глава 12
Листинг 12.5, Продолжение
/Дата: 15.02.2010
;Версия: 1.1.1
;Имя файла: redavt.asm
/Микроконтроллер: AVR tiny26.
/Тактовая частота: 8МГц
/Питание: стабилизированное 3,9 В
/Рабочая программа
list
def adr = rO
def tmp = Г16
def tmp 2 = rl7
def tmp3 = rl8
def tempo = rl9
def pered = r20
def ana = r21
def bit = r2 3
def Xa = r24
def Ma = r25
def cod — r22
def Ya = r31
. cseg
. org 0
rjmp
rjmp
nop
nop
nop
rjmp
rjmp
nop
nop
nop
nop
nop
RESET
EXT_INTO /прерывание по входному сигналу
/rjmp EXT_PIN - прерывание не используется
/rjmp TIME_СМРА - прерывание от таймера
/rjmp TIME_СМРВ - прерывание от таймера
TIME_OVF1 /прерывание от таймера
TIME_OVFO /прерывание от таймера
;rjmp UCIJSTRT - прерывание от USI
;rjmp UCI_OVF - прерывание от USI
;rjmp EE_RDY - прерывание от таймера
;rjmp ANA_COMP - прерывание от компаратора
;rjmp ADC - прерывание от АЦП
.org 20
/настройка порта В
RESET: пор
.**********************************************************
; запрет всех прерываний
cli
/Настройка прерываний
/Маска прерывания INTO
Робот-катер
383
Листинг 1X5* Продолжение
Idi tmp, $40 /разрешение прерывания INTO
out GIMSK, tmp
Idi tmp, $03 ;режим
;условие прерывания по наростающему уровню на INTO
out MCUCR, tmp
;Определение вершины стека
Idi tmp, low(RAMEND) ;вершина стека
out SP, tmp
clr tmp
;Установка портов ввода-вывода в нулевое состояние
out DDRA, tmp
out PORTA, tmp /обнулить порт A
clr tmp
Idi tmp, $08 /РАЗ-выход
out DDRA, tmp
clr tmp
out PORTB, tmp ;обнулить порт В
Idi tmp, $0F /РВО-РВЗ-выходы
out DDRA, tmp
;начало программы
пор
clr pered
clr tmp
mov rlO, tmp
mov r11, tmp
mov rl2, tmp
mov r14, tmp
mov rl5, tmp
mov rO, tmp
mov Start: nop rl, tmp
rcall kalibr
;Конфигурация внешнего прерывания
;общее разрешение прерывания
Idi tmp, $80
out SREG, tmp
9
/анализ полученных данных, проверка ОЗУ
mmv: пор
Idi г28, $61 /начальный адрес ОЗУ, код
Idi гЗО, $62 /начальный адрес ОЗУ, данные
/запрет всех прерываний
cli
sdj: nop
/Тело программы
/чтение данных ОЗУ
384
Глава 12
Листинг 12Л5> Продолжение
clr r29
clr r31
Id Г14, Y /чтение команды ОЗУ
Id Г15, Z /чтение данных ОЗУ
clr Xa
st Y, Xa /стираем команду ОЗУ
St Z, Xa /стираем данные ОЗУ
inc r28
inc r30
mov clz tmp3, r28
cpi . tmp3, $88 /проверяем верхушку ОЗУ
breq mmv
/анализ вперед, влево, вправо, стоп,
mov tmp3, rl4
; Стоп
clz
cpi tmp3, $D4 ; код команды "стоп”
brbs 1, sstop
rjmp uryi
sstop: nop
/разрешение всех прерываний
sei
rcall stops
nop
rjmp sdj
uryi: nop
/запрет всех прерываний
cli
mov tmp3, rl4
clz
cpi tmp3, $E0 /код команды "вперед"
brbs 1, vpere
rjmp uryil
vpere: nop
/разрешение всех прерываний
sei
rcall vpered
nop
rjmp sdj
uryil: nop
/запрет всех прерываний
cli
mov tmp3, rl4
- clz
cpi tmp3, $A0 /код команды "вперед"
Робот-катер
385
Листинг 12.5. Продолжение
brbs 1, vlvp
rjmp murr
vlvp: nop
;разрешение всех прерываний
sei
rcall vlevpra
nop
rjmp sdj
murr: nop
mov tmp, rl5
inc tmp
mov rl5, tmp
clz
cpi tmp, $FF
breq mzvb
rjmp mmv
mzvb: nop
rcall autovoz
nop
rjmp reset
;Подпрограмма движения вперед
vpered: nop
sbi portA, 3
rcall zaderl
ret
/
,-подпрограмма движения влево, вправо
vlevpra: nop
;запрет всех прерываний
cli
mov tmp3, rl4 ;чтение данных команды
;сравнение с средним значением
Idi tmp, $7F ' ;больше середины
/выбор направления
clr bit
cln
clz
clc
sub tmp, tmp3
brsh nvlevo
rjmp nvpravo
nvlevo: nop
inc bit
clz
cp tmp, bit
386
Глава 12
Листинг 12Л* Продолжение
brne fut3
rjmp go 6
fut3: nop
rcall vlevo
nop
rcall hall
clz
cpi tmp, $04 /левый датчик сработал
brne fut2
rjmp go6
fut2: nop
rjmp nvlevo
nvpravo: nop
inc bit
clz
cp tmp, bit
brne fut5
rjmp go6
fut5: nop
rcall vpravo
nop
rcall hall
clz
cpi tmp, $01 /правый датчик сработал
brne fut4
rjmp go6
fut4: nop
rjmp nvpravo
go6: nop
ret
f
/Подпрограмма Стоп
stops: nop
cbi portA, 3
rcall kalibr
nop
rcall zaderl
ret
/Подпрограмма калибровки поворота киля
kalibr: nop
/запрет всех прерываний
cli
/движение влево
Idi tmp2, $01
svlevb: nop
Робот-катер
387
Листинг 12.5. Продолжение
rcall vlevo
dty: nop
clz
dec tmp2
brne eert
rjmp svpravo
eert: nop
rcall hall
nop
rcall zaderl
clz
cpi tmp, $04 /левый датчик
brne fut
rjmp dty
fut: nop
rjmp svlevo
;движение вправо
clr tmp2
svpravo: nop
rcall vpravo
nop
inc tmp2
rcall hall
nop
rcall zaderl
clz
cpi tmp, $02 ;киль по середине
brne futl
rjmp svo
futl: nop
rjmp svpravo
svo: nop
Idi r28, $8A ;адрес ОЗУ данных калибровки
clr r29
st Y, tmp2 ; запись в ОЗУ
'•разрешение всех прерываний
sei
ret
;попрограмма считывания датчика Холла
hall: пор
;правый датчик 001
Idi tempo, $А0
rcall adcnl ; чтение данных ADC0 001
clr r27
Idi г2 6, $В0 ; задаем ячейку памяти 60hex+50
388
Глава 12
Листинг 12.5, продолжение
Id rl3, X ;читаем значенйе, сохраненное ранее
st mov cln sub brpl X, tmp3 tmp, rl3 tmp, • tmp3 sooi ;сохраняем полученное значение
;средний датчик Idi tempo, $А0
rcall clr adcnl r27 ;чтение данных ADC0 010
Idi r26, $B1 /задаем ячейку памяти 60hex+50
Id г13/ X /читаем значение, сохраненное ранее
;левый st mov cln sub brpl датчик Idi X, tmp3 tmp, rl3 tmp, tmp3 soio tempo, $A0 /сохраняем полученное значение
rcall clr adcnl r27 /чтение данных ADC0 100
Idi r26, $B2 /задаем ячейку памяти 60hex+50
Id rl3, X /читаем значение, сохраненное ранее
st mov cln sub brpl X, tmp3 tmp, rl3 tmp, tmp3 sioo / сохраняем полученное значение
;результат sooi: пор Idi r26, $B2
soio: Idi st rjmp nop Idi tmp, $01 X, tmp him r26, $B2 ./правый датчик
sioo: Idi st rjmp nop Idi tmp, $02 X, tmp him r26, $B2 /средний датчик
him: Idi st nop ret tmp, $04 X, tmp /левый датчик
Робот-катер
389
Листинг 12Л, Продолжение
г подпрограмма влево
zlevo: пор
;движение влево
;1-й полушаг
;установить импульс 10.00
Ddpol: пор
clr tmp
out PORTB, tmp
sbi $18, 2
mov clz tmp, rl4
cpi tmp, $9C
breq bonn
rjmp odpol
bonn: clr tmp
mov /2-й полушаг rl4, tmp
/установить i odpoll: nop импуль c 10.10
clr tmp
out PORTB, tmp
sbi $18, 2
sbi $18, 0
mov clz tmp, rl4
cpi tmp, $9C
breq bonnl
rjmp odpoll
bonnl: clr tmp
mov /3-й полушаг r14, tmp
/установить ] импульс 00.10
odpol2: nop
clr tmp
out PORTB, tmp
sbi $18, 0
mov clz tmp, rl4
cpi tmp, $9C
breq bonn2
rjmp odpol2
bonn2: clr tmp
mov /4-й полушаг r14, tmp
;установить импульс 01.10
odpol3: пор
/обнулить порт В
;156 отсчетов
;обнулить порт В
;156 отсчетов
;обнулить порт В
/156 отсчетов
390
Глава 12
Листинг Продолжение
clr tmp
out PORTB, tmp
sbi $18, 3
sbi $18, 0
mov tmp, rl4
clz cpi tmp, $9C
breq ЬоппЗ
rjmp odpol3
ЬоппЗ: clr tmp
mov rl4, tmp
/5-й полушаг
/установить импульс 01.00
odpol4: пор
;обнулить порт В
;156 отсчетов
clr tmp
out PORTB, tmp
sbi $18, 3
mov tmp, rl4
clz
cpi tmp, $9C
breq bonn4
rjmp odpol4
bonn4: clr tmp
mov r14, tmp
/6-й полушаг /установить odpol5: nop импульс 01.01
clr tmp
out PORTB, tmp
sbi $18, 3
sbi $18, 1
mov tmp, rl4
clz
cpi tmp, $9C
breq bonn5
rjmp odpol5
bonn5: clr tmp
mov r14, tmp
/7-й полушаг /установить odpol6: nop импульс 00.01
clr tmp
out PORTB, tmp
sbi $18, 1
mov tmp, rl4
clz
;обнулить порт В
/156 отсчетов
/обнулить порт В
/156 отсчетов
/обнулить порт В
Робот-катер
391
Листинг 12 Л. Продолжение
cpi tmp, $9С /156 отсчетов
breq rjmp Ьоппб: clr mov /8-й полушаг /установить odpol7: nop clr out Ьоппб odpol6 tmp г14, tmp импульс 10.01 tmp PORTB, tmp ;обнулить порт В
sbi sbi mov clz cpi $18, 3 $18, 1 tmp, rl4 tmp, $9C /156 отсчетов
breq bonn7 rjmp odpol7 bonn7: clr tmp mov r14, tmp /условие прохождения на определенный угол,
;заданный радиопередачей
ret
/Подпрограмма вправо
vpravo: пор
/движение вправо
/1-й полушаг
/установить импульс 10.01
odpol9: пор
clr tmp
out PORTB, tmp /обнулить порт В
sbi $18, 2
sbi $18, 1
mov tmp, rl4
clz
cpi tmp, $9C /156 отсчетов
breq bonn9
rjmp odpol9
bonn9: clr tmp
mov rl4, tmp
/2-й полушаг
/установить : импульс 00.01
odpol91: nop
clr tmp
out PORTB, tmp /обнулить порт В
sbi $18, 1
392
Глава 12
Листинг 1Z5, Продолжение
mov tmp, г 14
clz
cpi tmp, $9C /156 отсчетов
breq Ьопп91 rjmp odpol91 bonn91: clr tmp mov rl4, tmp ;3-й полушаг установить импульс 01.01 odpol92: nop clr tmp
out sbi sbi mov clz PORTB, tmp $18, 3 $18, 1 tmp, rl4 /обнулить порт В
cpi tmp, $9C breq bonn92 rjmp odpol92 bonn92: clr tmp mov r14, tmp ;4-й полушаг '•установить импульс 01.00 odpol93: nop clr tmp /156 отсчетов
out sbi sbi mov clz 'PORTB, tmp $18, 3 $18, 0 tmp, rl4 /обнулить порт В
cpi tmp, $9C breq bonn93 rjmp odpol93 bonn93: clr tmp mov rl4, tmp ;5-й полушаг ;установить импульс 01.10 odpol94: nop clr tmp /156 отсчетов
out sbi sbi mov clz PORTB, tmp $18, 3 $18, 0 tmp, rl4 /обнулить порт В
cpi breq tmp, $9C bonn94 /156 отсчетов
Робот-катер
393
Листинг 1X5, Продолжение
rjmp odpol94
bonn94: clr tmp mov г 14, tmp ;6-й полушаг ;установить импульс 00.10 odpol95: пор clr tmp out PORTB, tmp ;обнулить порт В
sbi $18, 0 mov tmp, rl4 clz cpi tmp, $9C ;.156 отсчетов
breq bonn95 rjmp odpol95 bonn95: clr tmp mov rl4, tmp ;7-й полушаг ;установить импульс 10.10 odpol96: nop clr tmp out PORTB, tmp ;обнулить порт В
sbi $18, 2 sbi $18, 0 mov tmp, rl4 clz
cpi tmp, $9C ;156 отсчетов
breq bonn96 rjmp odpol96 bonn96: clr tmp mov rl4, tmp ;8-й полушаг /установить импульс 10.00 odpol97: nop clr tmp out PORTB, tmp ;обнулить порт В
sbi $18, 2 mov tmp, rl4 clz cpi tmp, $9C ;156 отсчетов
breq bonn97 rjmp odpol97 bonn97: clr tmp mov rl4, tmp /суловие прохождение на определенный угол
;заданный радиопередачей.
пор
394
Глава 12
Листинг 12.5. Продолжение
ret
9
/Прерывание по входному сигналу единицы
EXT_INT0: пор
in tmp, SREG ;запомнить состояние регистра
sei /общее разрешение прерываний
/Запуск таймера ТО
/режим работы таймера ТО с максимальным предварительным
/делением. Реализация прерывания через 0,16 мс
Idi tmp3, $04
out TCCRO, tmp3 /деление CK/256
Idi bit, $FB /8 МГц/256, остаток 5
out TCNTO, bit
Idi tmp3, $06
out TIMSK, tmp3 /разрешаем прерывания по /переполнению от ТО
/запуск таймера Т1
/реализация прерывания через 0,32 мс
Idi tmp3, $09
out TCCR1B, tmp3 /деление CK/256
Idi bit, $F6
out TCNT1, bit>
Idi tmp3, $06
out TIMSK, tmp3 /разрешаем прерывания по /переполнению от Т1
nop out reti SREG, tmp /восстановить регистр состояния
/Прерывание по таймеру Т1
TIME_OVF1: пор
Idi ana, $0F
/Подтверждение единицы кода
Idi tmp, $0A /0,2 мс- 0,16 мс/ 0,02мс
wet: nop
clz
dec tmp
breq tyu
rjmp fff
tyu: nop
rjmp xcon
fff: nop
rcall time002
sbic PORTB, 5 /пропустить команду, если 0
Робот-катер
395
Листинг 12*5. Продолжение
rjmp wet
sei
/Запуск таймера ТО
/режим работы таймера ТО с максимальным предварительным
/делением. Реализация прерывания через 0,16 мс
Idi tmp3, $04
out TCCRO, tmp3 /максимальное деление CK/256
Idi bit, $FA /8 МГц/256, остаток 5
out TCNTO, bit
Idi tmp3, $02 /запрет T1
out TIMSK, tmp3 /разрешаем прерывания по
/переполнению от ТО
rcall anal
rjmp qws
xcon: nop
Idi ana, $00
rcall anal
qws: nop
mov tmp, R14
inc tmp
mov rl4, tmp
mov tmp, R15
inc tmp
mov rl5, tmp
reti
;Прерывание по таймеру ТО
TIME_OVFO: пор
Idi ana, $AF
/Подтверждение ноля кода
Idi tmp, $ 0A /0,2 мс- 0,16 мс/ 0,02мс
wetl: nop
clz
dec tmp
breq tyul
rjmp fffl
tyul : nop
rjmp xconl
fffl: nop
rcall time002
sbic $18, 5 /пропустить команду если 0
rjmp wetl
sei
/Запуск таймера ТО
/режим работы таймера ТО с максимальным предварительным
/делением. Реализация прерывания через 0,16 мс
396
Глава 12
Листинг 1Z5, Продолжение
Idi tmp3, $04
out TCCRO, tmp3 максимальное деление CK/256
Idi bit, $FA ;8 мГц/256, остаток 5
out TCNTO, bit
Idi tmp3, $02 /запрет T1
out TIMSK, tmp3 /разрешаем прерывания по
/переполнению от ТО
rcall anal
rjmp wqr
xconl: nop
Idi ana, $00
rcall anal
wqr: nop
reti
9
;Подпрограмма считывания данных АЦП
/Настройка АЦП1
adcnl: nop
cli
nop
clr tmp
awe: nop
cpi tmp, $04
brsh ass
out ADMUX, tempo /коммутация входов АЦП
clr tmp2
clr tmp3
clr pered
Idi pered, $C4 /одиночное, запуск, 1/16
out ADCSR, pered /запуск АЦП на преобразование
/Сохранение данных АЦП1
in tmp2, ADCL
in tmp3, ADCH
mov r2, tmp2
mov r3, tmp3
mov r4, r2
mov r5, r3
mov r6, r4
mov r7, r5
inc tmp
rjmp awe
/среднее арифметическое действие
ass: nop
clr r8
clc
add tmp2, r2
Робот-катер
397
Листинг 12.5. Продолжение
adc r9, r8
add tmp2, r4
adc r9, r8
add tmp2, r6
adc r9, r8
clc
Isr r9
ror tmp 2
Isr r9
ror tmp2
clr r9
clc
add tmp3, r3
adc r9, r8
add tmp3, r5
adc r9, r8
add tmp3, r7
adc r9, r8
clc
Isr r9
ror tmp3
Isr r9
ror tmp3
nop
ret
;Подпрограмма 0,02mS
;Подпрограмма задержки включения
time002: пор
wdr
clz
cln
Idi Xa, $07
nop
nop
dv2: nop
wdr
clz
cln
cis
dec Xa
brpl dv2
ret
9
,-подпрограмма анализа
anal: nop
398
Глава 12
Листинг 12.5. продолжение
;запрет всех прерываний
;запись в ячейки ОЗУ
Idi r28, $61 /начальный адрес ОЗУ код
Idi ;увеличиваем r30, $62 ячейку ОЗУ /начальный адрес ОЗУ данные
Idi clr Id clz r28, $91 r29 tmp2, Y /начальный адрес ОЗУ код
cpi brne clr tmp2, $28 Ihfd tmp /40 ячеек записано?
Idi clr st r28, $91 r29 Y, tmp / начальный адрес ОЗУ код
Idi clr st Ihfd: nop add r30, $92 r31 Z, tmp r28, tmp2 /начальный адрес ОЗУ данные
Idi clr Id add /сброс всех cli clz r30, $92 r31 tmp2, Z r30, tmp2 значений /начальный адрес ОЗУ данные
cpi brne ana, $0F fedr /код единицы?
see mov tmp, rO /установка флага переноса
rol mov tmp r 0, tmp /сдвиг влево через перенос
rjmp fedr: nop clz wio
cpi brne rjmp ftre: nop clr mov rjmp Wik: nop clc mov ana, $AF ftre wik tmp rO, tmp mgo tmp, rO /код ноля?
Робот-катер
399
Листинг 12.5. Продолжение
wio: rol mov nop clz mov tmp rO, tmp tmp3, rl3 ;сдвиг влево через перенос
cpi breq rjmp tmp3, $08 ftre4 mgo ;8 бит получено?
ftre4: nop mov mov pered, rO tmp3, rlO ;да получено 8 бит
masd: cpi brne rjmp nop clz cpi tmp3, $C0 masd rasd pered, $C0 ;код или данные?
bnn: cas: tqs: tqs2: breq rjmp nop Idi mov nop clz cpi brne rjmp nop clz cpi brne rjmp nop clz cpi breq rjmp bnn mgo tmp3, $C0 r10,tmp3 pered, $E0 tqs zapis pered, $A0 tqs2 zapis pered, $D4 zapis mgo
;запись кода zapis: nop команды
Idi clr Id inc st r28, $91 r29 tmp2, Y tmp2 Y, tmp2 ;начальный адрес ОЗУ, код
Idi clr r30, $92 r31 ;начальный адрес ОЗУ, данные
400
Глава 12
Листинг 1Z5. продолжение
st Z, tmp2
Idi tmp3, $FA
mov rll, tmp3
clr r29
st Y, pered /запись команды ОЗУ
inc r28
rjmp mgo
/запись кода данных
rasd: nop
mov tmp3, rll
cpi tmp3, $FA
breq jmbn
rjmp cas
jmbn: nop
st Z, pered /запись данных ОЗУ
inc гЗО
clr tmp
mov rll, tmp3
mgo: nop
/разрешение всех прерываний
sei
ret
/Подпрограмма задержки включения
zaderl : nop
wdr
clr tmp
clr Ma
clr Ya
Idi Ya, $0A
cpi tmp3 , $00
brne goo
Idi Ma, $01
add Ma, tmp3
nop
mov tmp3 , Ma
goo: nop
mov Ma, tmp3
dm: nop
cpi tmp2 , $00
brne. goq
Idi Xa, $01
add Xa, tmp 2
nop
goq: nop
mov Xa, tmp2
dv: nop
Робот-катер
401
Листинг 12.5. Продолжение.
wdr
пор
dx: пор
пор
еее: пор
inc tmp
cln
cpi tmp, $3A
brio eee
nop
clr tmp
nop
cln
dec Ya
nop
brpl dx
cln
dec Xa
brpl dv
clz
dec Ma
brne dm
ret
t******* ******* *******: Аг *
/Подпрограмма автовозврата autovoz: nop /чтение данных АЦП, сохранение в ОЗУ /Чтение ANT1-ADC6 Idi tempo, $А6
rcall adcnl clr r27 /чтение данных ADC6
Idi r26, $A0 st X, tmp3 /Чтение ANT2-ADC5 Idi tempo, $A5 ;задаем ячейку памяти 60hex+40hex
rcall adcnl clr r27 ;чтение данных ADC5
Idi r26, $A1 st X, tmp3 /Чтение ANT3-ADC4 Idi tempo, $A4 ;задаем ячейку памяти 60hex+40hex
rcall adcnl clr r27 ;чтение данных- ADC4
Idi r26, $A2 st X, tmp3 /Чтение ANT4-ADC3 ;задаем ячейку памяти 60hex+40hex
402
Глава 12
Листинг 12.5, Продолжение
Idi tempo, $A3
rcall adcnl ;чтение данных ADC3
clr r27
Idi r26, $A3 ;задаем ячейку памяти 60hex+40hex
st X, tmp3
;вычитание ANT1-ANT2
clr r27
Idi r26, $A0 ;задаем ячейку памяти 60hex+40hex
Id tmp, X
Idi r26, $A1 ;задаем ячейку памяти 60hex+40hex
Id tmp3, X
cln
sub tmp, tmp3
brpl KAI
;вычитание ANT2-ANT3
clr r27
Idi r26, $A1 ;задаем ячейку памяти 60hex+40hex
Id tmp, X
Idi r26, $A2 ;задаем ячейку памяти 60hex+40hex
Id tmp3, X
cln
sub tmp, tmp3
brpl KA3
rjmp KA4
;вычитание ANT1-ANT3
KAI: clr r27
Idi r26, $A0 ;задаем ячейку памяти 60hex+40hex
Id tmp, X
Idi r26, $A2 ;задаем ячейку памяти 60hex+40hex
Id tmp3, X
cln
sub tmp, tmp3
brpl KA2
;вычитание ANT3-ANT4
clr r27
Idi r26, $A2 ;задаем ячейку памяти 60hex+40hex
Id tmp, X
Idi r26, $A3 ;задаем ячейку памяти 60hex+40hex
Id tmp3, X
cln
sub tmp, tmp3
brpl KA7
rjmp KA4
;вычитание ANTI-ANT4
KA2: clr r27
Idi r26, $A0 ;задаем ячейку памяти 60hex+40hex
Робот-катер
403
Листинг 12Л. Продолжение
Id tmp, X
Idi r26, $АЗ
Id tmp3, X
cln
sub tmp, tmp3
brpl KA6
rjmp KA7
/вычитание ANT2-ANT4
KA3: clr r27
Idi r26, $A1
Id tmp, X
Idi r26, $A3
Id tmp3, X
cln
sub tmp, tmp3
brpl KA5
rjmp KA7
;Прямой ход
KA6: nop
sbi portA, 3
rcall zaderl
cbi portA, 3
nop
rjmp rtyo
/Поворот вправо
KA7: nop
sbi portA, 3
rcall vpravo
rcall zaderl
cbi portA, 3
nop
rjmp rtyo
/Поворот влево
KA5: nop
sbi portA, 3
rcall vlevo
rcall zaderl
cbi portA, 3
nop
rjmp rtyo
/Второй поворот влево
KA4: nop
sbi portA, 3
rcall vlevo
rcall zaderl
cbi portA, 3
задаем ячейку памяти 60hex+40hex
задаем задаем ячейку ячейку памяти памяти 60hex+40hex 60hex+40hex
404
Глава 12
Листинг 12.5. Окончание
пор
rtyo: пор
ret
Листинг 12.6. НЕХ-файл управления роботом-катером
: 020000020000FC
: 1000000013COBEC1000000000000CCC1EDC1000063
:080010000000000000000000Е8
: 100028000000F89400E40BBF03E005BFOFEDODBF1F
:Ю00380000270АВВОВВВ002708ЕООАВВ002708ВВ48
:100048000FEOOABB000044270027A02EB02EC02EC8
: 10005800E02EF02E002E102E000079DOOOE80FBFO1
:100068000000C1E6E2E6F8940000DD27FF27E880FB
:10007800F080882788838083C395E3952C2F9894F4
: 10008800283871F32E2D9894243D09F005COOOOOFE
: 10009800789457D00000E8CF0000F8942E2D98945B
:1000A800203EO9F005C00O0O78941ADO0000DCCF8B
:1000B8O00000F8942E2D9894203A09FO05C00D0O0D
:1000C800789412D00000D0CF00000F2D0395F02EA9
:1000D80098940F3F09FOC4CF00007BD20000AOCF56
:1000E8000000DB9A48D208950000F8942E2DQFE7FF
:1000Е8007727А89498948894021В08Г410С00000ЕО
:1001080073959894071709F41AC0000077D0000077
:100118O046D09894043O09F412C0OO0OF0CFO00OD3
: 100128007 3959894071709Г40АС00000С5О0000019
:1001380036D09894013009F402C00000F0CF0000D6
: 10014 80008950000DB9803D0000015D2089500004 0
:10015800F89411E0000052D0000098941A9509F420
:100168000BC000001CD0000006D29894043009F49B
:10017800F3CFO0O0EFCF112700009EDOO0001395A9
:1OO1880OOEDO0000F8D19894023O09F4O2CO0OOOA3
:10019800F3CF0000CAE8DD2718837894089500009B
:1001A80030EA3AD1BB27AOEBDC902C930D2DA89414
:1001B800021BA2F430EA30D1BB27A1EBDC902C93DO
:1001C8000D2DA894021B7AF430EA26D1BB27A2EBA6
: 1001D800DC902C930D2DA894021B52F40000A2EB86
:Ю01Е800О1ЕО0С9309СОО0О0А2ЕВ02ЕО0С93О4С0ЕС
:1001F8000000A2EB04EOOC9300000895000000004A
:10020800002708BBC29AOE2D98940C3909FOF7CF35
:100218000027E02E0000002708BBC29AC09AOE2DC6
:1002280098940C3909FOF6CF0027E02E000000273B
:1002380008BBC09AOE2D98940C3909FOF7CF002707
:10024800E02E0000002708BBC39AC09AOE2D989490
:100258000C3909FOF6CF0027E02E0000002708BB74
: 10026800C39AOE2D98940C3909FOF7CF0027E02E89
:100278000000002708BBC39AC19AOE2D98940C3928
Робот-катер
405
Листинг 12.6. Продолжение
: 1002880009F0F6CF0027E02E0000002708BBC19A2E
:100298000E2D98940C3909F0F7CF0O27E02E0000B6
:1002A800002708BBC39AC19A0E2D98940C3909F0FF
:1002B800F6CF0027E02E089500000000002708BBB5
: 1002C800C29AC19A0E2D98940C3909F0F6CF002 7DE
:1002D800E02E0000002708BBC19A0E2D98940C3917
:1002E80009F0F7CF0027E02E0000002708BBC39ACB
: 1002F800C19A0E2D98940C3909F0F6CF0027E02EFC
:100308000000002708BBC39AC09A0E2D98940C3998
: 1003180009F0F6CF002 7E02E0000002 708BBC39A9B
:10032800C09A0E2D98940C3909F0F6CF0027E02ECC
:100338000000002708BBC09A0E2D98940C3909F0CC
: 10034800F7CF0027E02E0000002708BBC29AC09A0A
:100358000E2D98940C3909F0F6CF0027E02E0000F6
:10036800002708BBC29A0E2D98940C3909F0F7CFD4
:100378000027E02E0000089500000FB7789424E0CD
: 1003880023BF7BEF72BF2 6E02 9BF2 9E02FBD7 6EFA0
:100398007EBD26E029BF00000FBF189500005FE072
:1003A8000AE0000098940A9509F002C000000DC008
: 1003B800000066D0C599F5CF789424E023BF7AEF82
:1003C80072BF22E029BF6BD003C0000050E067D0A5
:1003D80000000E2D0395E02E0F2D0395F02E189595
: 1003E80000005FEA0AE0000098940A9509F002C04C
:1003F80000000DC0000044D0C599F5CF789424E0E2
: 1004 080023BF7AEF72BF22E02 9BF4 9D003C00000A2
:1004180050E045D0000018950000F894000000272F
:100428000000043080F437В911272227442744ЕС10
:1004380046В914В125В1212Е322Е422С532С642СЕЕ
:10044800752C0395EDCF000088248894120D981C14
: 10045800140D981C160D981C8894969417959694CC
:10046800179599248894230D981C250D981C270D01
:10047800981С88949694279596942795000008953В
:100488000000А8959894А89487Е000000000000058
: 1004 9800A8959894A894C8948A95CAF708950000D6
: 1004A800C1E6E2E6C1E9D.D2718819894183239F4EB
: 1004B8000027C1E9DD270 88 3E2E9FF27008 3000060
:1004C800C10FE2E9FF271081E10FF89498945F309B
:1004D80029F40894002D001F002E0EC000009894E7
:1004E8005F3A09F404C000000027002E41С0000054
:1004F8008894002D001F002E000098942D2D283080
:1005080009F036C00000402D2A2D203C09F426C0F1
:1005180000009894403C09F02BC0000020ECA22E6B
:1005280000009894403E09F40AC000009894403AAC
:1005380009F405C000009894443D09F019C0000072
:10054800C1E9DD27188113951883E2E9FF27108395
:100558002AEFB22EDD274883C3950AC000002B2D51
406
Глава 12
Листинг 12.6. Окончание
:100568002A3F09FODDCF00004083E3950027B22E33
:100578000000789408950000A89500279927FF2780
:10058800FAE0203021F491E0920F0000292FOOQOBA
:10059800922F0000103019F481E0810F0000000054
:1005A800812FOOOOA895000000000000D0000395BE
:1005B800A8940A33D8F3000000270000A894FA95FD
:1005C800000092F7A8948A9562F798949A9509F78B
:1005D8000895000036EA20DFBB27AOEA2C9335EAQD
:1005E8001BDFBB27A1EA2C9334EA16DFBB27A2EA5C
:1005F8002C9333EA11DFBB27A3EA2C93BB27AOEA8D
:100608000C91A1EA2C91A894021B4AF4BB27A1EAF9
:100618000C91A2EA2C91A894021BDAF437C0BB27EC
:10062800AOEAOC91A2EA2C91A894021B4AF4BB27D9
:10063800A2EAOC91A3EA2C91A894021BCAF426C042
:10064800BB27AOEAOC91A3EA2C91A894021B52F4BO
:100658000FCOBB27A1EAOC91A3EA2C91A894021B16
:1006680072F406COOOOODB9A86DFDB98000014C035
:100678000000DB9A21DE7FDFDB9800000DC0000060
:10O688O0DB9ABCDD78DFDB9800O0O6C00000DB9A4F
:OC069800B5DD71DFDB9800000000089564
:00000001FF
Внутрисхемное программирование
Для того чтобы программу управления моделью катера в дальней-
шем можно было модернизировать, на плате управления установлен
разъем PL1. Программа в микроконтроллере изменяется в режиме ISP-
программирования. Во время программирования снимается перемычка
JP1. Питание для микроконтроллера берется от программатора. Питание
на драйверы не поступает.
Конструкция
Корпус катера склеен из картона. Для изготовления деталей исполь-
зованы три листа формата А4 плотного картона (толщиной 0,2..0,5 мм).
Из них сделаны четыре детали корпуса: верхняя палуба, нижняя носовая
часть, основная часть днища и задняя перегородка. Для жесткости кор-
пуса внутри приклеивается перегородка из любой бумаги. В палубе вы-
резается квадратный отсек размерами 102x64 мм (внутри кабины). Кар-
тон покрывается декоративной самоклеющейся лентой (водонепрони-
цаемой).
Кабина изготовлена из тонкого оргстекла (от коробок компакт-дис-
ков) и состоит из пяти прозрачных деталей и двух деталей крыши из
черного пластика (рис. 12.9).
Робот-катер
407
Рис. 12.9. Конструкция кабины катера
Детали кабины склеиваются клейкой лентой, после чего она про-
клеивается внутри клеем (эпоксидной смолой). Кабина — съемная. В ее
задней стенке есть вырез для хода киля. По краям этого выреза при-
клеивается экран от влаги (половина резинового воздушного шарика).
Через центр экрана (в центре воздушного шарика) продевается киль.
Верхняя часть киля находится в резиновом куполе. Тем самым поддер-
живается герметичность внутри кабины и корпуса модели.
Основные размеры модели представлены на рис. 12.10.
Рис. 12.10. Размеры деталей катера
408
Глава 12
Винг (рис. 12.11) и двигатель (рис. 12.12) позаимствованы из игру-
шечного катера.
Рис. 12.11. Винт катера
Рис. 12.12. Двигатель катера
Робот-катер
409
Двигатель гребного вала усиливается по бокам перекладинами из
отрезков пластика (толщиной 5 мм) и приклеивается к днищу эпоксид-
ной смолой. Вал двигателя удлиняется через муфту. Удлиненная часть
вала продевается через две втулки. В днище корпуса катера вырезается
отверстие под первую втулку. Втулка в днище проклеивается эпоксид-
ной смолой. Для исключения вибрации вала гребного винта использует-
ся вторая втулка. Она удерживается пружиной, которая также приклеи-
вается к корпусу эпоксидной смолой (см. рис. 12.11). Все трущиеся час-
ти вала смазаны техническим вазелином.
После крепления платы к корпусу подключаются разъемы от источ-
ника питания (рис. 12.13) и разъем от антенн ANT1-ANT4.
Рис. 12.13. Схема питания робота-катера
Как только проверены тестовые программы, прошивается рабочая
программа. Сверху плат устанавливается кабина.
Киль вырезается из печатной платы (например, из оставшейся после
разборки нерабочего флоппи-дисковода), из которой выпаиваются все
элементы поверхностного монтажа, по шаблону, данному на рис. 12.14.
Рис. 12.14. Чертеж киля
410
Глава 12
Крепление киля к корпусу модели изготовлено из канцелярской
скребки (рис. 12.15).
Рис. 12.15. Крепление киля к корпусу модели
Это крепление приклеивается эпоксидной смолой к корпусу на зад-
ней перегородке. Для управления килем на переднем конце приклеива-
ются (эпоксидной смолой) два резистора МЛТ 0,25 с длинными выво-
дами, которые загибаются вокруг вала шагового двигателя (рис. 12.16).
Рис. 12.16. Выводы резисторов загнуты вокруг вала шагового двигателя
Робот-катер
411
Над концом киля специальной скобой крепится магнит (рис. 12.17).
Рис. 12.17. Магнит, прикрепленный скобой
Скоба сделана из отрезка медной проволоки длиной 25 мм и диа-
метром 2 мм. Отрезок расплющивается на концах (пропеллером), затем
просверливаются два отверстия диаметром 1,6 мм (по середине расплю-
щенных участков). В отверстия вставляются винты, крепящие диск маг-
нита диаметром 15 мм и высотой 5 мм, после чего крепится сам киль
(рис. 12.18).
Рис. 12.18. Крепление киля
412
Глава 12
Магнит заимствован из динамика 0,25 Вт или можно воспользо-
ваться магнитом от сувениров. Для герметичности к килю с помощью
резинового кольца крепится прорезиненный мешочек, вторая часть ко-
торого пришивается к рамке (сделана из передней панели дисковода
CD-ROM). Как только киль установлен на вал шагового двигателя, рам-
ка крепится к кабине небольшим количеством герметика. Затем края ка-
бины герметизируются тонким слоем герметика.
Над кабиной устанавливается мачта, концы которой соединены со-
гласно рис. 12.2. Модель готова к эксплуатации. В случае замены бата-
реи питания, герметик срезается тонким лезвием. Возможен вариант
вывода проводов питания на крышу кабины и подзарядки аккумулятор-
ных батарей от внешнего источника.
Эксплуатация
Для хранения модели изготавливается подставка из любой коробки,
меньшей по размеру, чем корпус. В коробке вырезаются треугольные
сегменты, на которые можно установить катер. Перед испытанием на
воде снимается кабина (задняя стенка с килем остается) и плата управ-
ления, устанавливаются батареи питания. Затем соединяются провода от
батареи питания с платой управления и провода от приемника. Плата
управления устанавливается так, чтобы усики киля попали на вал шаго-
вого двигателя. После этого устанавливается кабина, которая проклеи-
вается по бокам клейкой лентой. Питание схемы включается на крыше
кабины. Модель катера готова к испытаниям. Ее характеристики прове-
ряются на закрытом водоеме.
Робот-катер
413
Список литературы
1. Евстифеев А.В. Микроконтроллеры AVR семейства Tiny. Руково-
дство пользователя. М.: Издательский дом Додэка-ХХ1, 2007.
2. Data sheet. BAS 70 series. Schottky barrier (double) diodes. Philips
Semiconductors. 1999 Jun 01.
3. Data sheet. BSS138. SIPMOS Small-Signal Transistor. Siemens Semi-
conductor Group. Sep-13-1996.
4. Джон Ловин. Создаем Робота-Андроида своими руками. М: ДМК-
пресс, 2007.
5. Ньютон Брага. Создание роботов в домашних условиях. М: НТ
Пресс, 2007.
6. Data sheet. BSS145. SIPMOS Small-Signal Transistor. Siemens Semi-
conductor Group. Sep-13-1996.
7. Кравченко А.В. Солнечный электромобиль “Solar bot”// Электрик.-
2008.-№l 1-12 C.58.
8. Евстифеев А.В. Микроконтроллеры AVR семейства Tiny и Mega
фирмы ATMEL. 2-е издание. М: Додэка-XXI, 2005.
9. Data sheet. BSS123 N-channel enhancement mode vertical D - MOS
transistor. Philips Semiconductors. April 1995.
10. Datasheet. PNA4601 Series. Bipolar integrated circuit photodetection
function. Panasonic.
11. Datasheet. QRD 1114. Reflective object sensor. Fairchild Semiconductor
Corporation. 2000.
12. Титаренко А.А. Поиграем моторчиками// Радиоаматор.-2002.-№1-
C.24.
13. Ted Larson “Robobusiness 2007. Highlights”//Servo.-2007.-№7-C.45.
14. Евстифеев А.В. Микроконтроллеры AVR семейства Mega. Руково-
дство пользователя. М.: Издательский дом Додэка-ХХ1, 2007.
15. Datasheet. LB 1642 Bidirectional Motor Driver with Braking Function.
Sanyo.
16. Datasheet. GP2D12/15 General Purpose Type Distance Measuring Sen-
sors. Sharp co. 2001.
17. Datasheet. OPB 703/704/705 Reflective Object Sensors. QT Optoelec-
tronics. 2000.
18. Datasheet. HSDL - 9100 Surface-Mount Proximity Sensor. Avago tech-
nologies. 2001.
414
Список литературы
19. Datasheet. Infrared Sensors Line Guide. Honeywell International Inc.
June 2008.
20. Datasheet. EE-SY124/125 Ultra-Compact Reflective Sensors. Omron
Canada, Inc 1999.
21. Боглаев Ю.П. Вычислительная математика и программирование.
М.: “Высшая школа” 1990 г.
22. Steffen Sorge “Text at the speed of light” Elector №1, 2007.
23. Datasheet. Solid State Sensors SS441 A. Honeywell. 2002.
24. Data sheet. ATtiny26 -8 bit microcontroller. Atmel. 2002.
25. Герман Шрайбер, “400 новых радиоэлектронных схем. Приемники
и передатчики”, М. - издательство ДМК 2001.
26. Евгений Ан, “Аппаратура радиоуправления моделями”. Радио №2
1984г.
27. Мельник М.М., “Управление моделями по радио”. Мастерская ра-
диолюбителя. Выпуск 24. М.- Издательство ЗМ, 2003г.
28. Datasheet. TDA1072. AM receiver circuit. Philips semiconductors. May
1984.
29. General. Magneto resistive sensors for magnetic field measurement.
Philips Semiconductors.06 September 2000.
30. Datasheet. Low power dual voltage comparators. ST Microelectronics.
2003.
31. Datasheet. Solid State Switch SS441A. Micro Switch a Honeywell Divi-
sion. 1990.
Содержимое прилагаемого к книге DVD-диска
Прилагаемый к книге DVD-диск содержит четыре папки:
Видео — видеопрезентация автором рассматриваемый устройств,
а также видеоматериалы по робототехнике, найденные в Internet;
Монтажные платы — принципиальные схемы и изображения мон-
тажных плат рассмотренных в книге устройств в формате PDF
с разбивкой по папкам согласно номерам и названиям глав;
Программы — исходные файлы, соответствующие рассмотренным
в книге программам, с разбивкой по папкам согласно номерам и на-
званиям глав;
Справочник — технические описания микросхем и электронных
компонентов, задействованных в схемах рассмотренных устройств.
ББК 32.973-04
УДК 004.312
К78
Кравченко О. В.
К78 10 пракгичних пристроТв на АУИ-м1кроконтролерах. Книга 3 - К.: “МК-
Пресс”, СПб.: “КОРОНА-ВЕК”, 2011. -416с„ in.
ISBN 978-5-7931-0845-4 (“КОРОНА-ВЕК’)
ISBN 978-966-8806-70-4 (“МК-Пресс”)
Ви тримаете в руках третю книгу i3 cepii зб1рниюв з пракгичними прикладами застосу-
вання М1кроконтролер1в AVR У н!й основний наголос зроблено на моделях робот1в. Зокре-
ма, докладно розглянуто десять завершених пристроТв на баз1 М1кроконтролер1в AVR, яю
можна легко 31брати в домашHix умовах: вим!рювач сонячноТ активности простий робот на
сонячних батареях; ускладнений робот на сонячних батареях; сонячний М1Н1електромоб1ль;
робот "Повзун"; робот "Sumo bot"; робот, що проходить ла&ринт; свптювий ефект обер-
тання; джип на радюкеруванж, робот-катер. Кожному пристрою присвячено окремий роз-
Д1Л, де докладно описано bci етапи створення м!кроконтролерноТ модел! та програм, почи-
наючи 31 структури та блок-схеми, i заюнчуючи самою програмою та готовим робочим ко-
дом.
ББК 32.973-04
Головний редактор: Ю. О. Шпак
ISBN 978-5-7931-0845-4 (“КОРОНА-ВЕК")
ISBN 978-966-8806-70-4 (“МК-Пресс")
© Кравченко О.В., текст, 1люстрац|Т, 2011
© ‘’МК-Пресс", оформления, 2011
DDI дерлчипс D pyiSdA IjJCIDrU ЛПИ1 у исрии
10
практических
устройств на
AVR
-микроконтроллерах
Книга 3
сборников с практическими примерами применения
микроконтроллеров AVR. В ней основной упор сделан
на модели роботов. В частности, подробно
рассмотрены следующие десять завершенных
устройств на базе микроконтроллеров AVR, которые
можно собрать в домашних условиях:
- измеритель солнечной активности;
- простой робот на солнечных батареях;
- усложненный робот на солнечных батареях;
- солнечный миниэлектромобиль;
- робот "Ползун";
- робот"Sumo bot";
- робот-проходчик лабиринта;
- светоэффект вращения;
- радиоуправляемый джип;
- робот-катер.
Каждому устройству посвящена отдельная глава,
где подробно описаны все этапы создания
микроконтроллерной модели и программ, начиная со
структуры и блок-схемы, и заканчивая самой
программой и готовым рабочим кодом.
ISBN-13: 978-5-7931-0845-4
9785793 108454