Устройства управления роботами, схемотехника и программирование (М. Предко, 2004). Устройства управления роботами, схемотехника и программирование. Устройствауправления роботамисхемотехника и микроконтроллеров picmicro
Скачать 6.79 Mb.
|
РАСПОЗНАВАНИЕ ЗВУКОВЫХ КОМАНД Вас не должно вводить в заблуждение громкое название этого раздела. На самом деле я немного преувеличил возможности описываемого здесь интерфейса. Наш робот сможет реагировать только на громкие звуки, такие как хлопки в ладоши или крики Принципиальная схема устройства показана на рис. 4.77. Здесь представлен активный фильтр нижних частот, выход которого следует под- ключить ко входу таймера TMR1 (вывод RB6) микроконтроллера Здесь мы не приводим схему включения самого микроконтроллера и устройств вывода информации (которые, несомненно, необходимы хотя бы для того, чтобы вы имели возможность убедиться, что робот распознал вашу команду), - эти во- просы здесь не принципиальны. Вы можете использовать любую из схем, описан- ных выше. В табл. 4.17 представлен перечень использованных элементов. 284 Устройства управления роботами Vcc Vcc 5 R1 I I j 0,1 мкФ Г J R2 2,3 M R3 I 2 3 М Г ' R5 Г 470 I С2 J II 2 0,1 мкФ .. 3 J I 12 13 h 0,1 мкФ К микроконтроллера Рис. 4.77. Схема для ввода в микроконтроллер Таблица Список схемы, представленной на рис. 4.77 Обозначение Элемент Примечание или Операционный усилитель Микрофон Любой угольный или R1 R2, R3, R6, R9 10 0,25 Вт 2,3 0,25 Вт 470 Ом, Вт 220 Ом, 0,25 Вт С1 -С4 мкФ Конденсаторы любого типа Материалы Макетная плата с размещенным на ней микроконтроллером PIC16F627 и жидкокристаллическим дисплеем, монтажные провода, источник питания +5 В * 6 скобках указаны отечественные аналоги, добавленные при переводе. — перев. Операционный усилитель LM324 в схеме ФНЧ применяется только потому, что он оказался у меня под рукой. Вы можете взять практически любой малосиг- нальный сдвоенный операционный усилитель (например, Я часто исполь- зую приведенную схему при конструировании самых различных автоматических устройств, так как она обладает хорошей устойчивостью к помехам. На рис. 4.78 показаны сигналы на входе и выходе ФНЧ (я громко крикнул Схема отфильтровала высокочастотные составляющие, и на вход мик- роконтроллера прошло только несколько импульсов, которые можно проанали- зировать в программе. Мы будем опрашивать текущее состояние счетчика таймера TMR1 каждые 20 мс, чтобы узнать, не был ли обнаружен какой-либо громкий звук. Если был, то Подключение к микроконтроллеру периферийных устройств 285 Рис. Действие фильтра нижних частот сообщение об этом отобразится вместе с текущим значением счетчика на жидкокри- сталлическом дисплее в течение одной секунды. В данном проекте можно использо- вать только микроконтроллер PIC16F627, так как у нет второго таймера. Текст программы вы найдете в файле Code\Sound\sound.c: // 27 января 2002 - сообщение о получении звуковой команды // выводится на ЖКИ. // // Для фильтрации сигнала, снимаемого с микрофона, используется // активный фильтр нижних частот на двух операционных усилителях. // Выходной сигнал фильтра подается на вход счетчика таймера TMR1 // (вывод RB6/T1CKI // Таймер опрашивается каждые 20 мс, и его текущее значение сравнивается // с прошлым. Если оно увеличилось на 5 или более, то регистрируется // наличие сигнала. // // Для индикации используется жидкокристаллический дисплей, // подключенный к микроконтроллеру через двухпроводной интерфейс // на основе сдвигового регистра 74LS174. // // Используются прерывания от таймера каждую миллисекунду. // // Замечания по аппаратным средствам: // Микроконтроллер PIC16F627 работает на частоте 4 МГц. // Используется внешний тактовый генератор. // // Подключение выводов // RB1 - линия Clock интерфейса жидкокристаллического дисплея; // RB2 - линия Data интерфейса жидкокристаллического дисплея. // Глобальные переменные и константы: int RTC = 0; // Счетчик реального времени. 286 Устройства управления роботами volatile char LCDDlay 20; volatile char LCDState 1; static volatile bit Clock static volatile bit ClockTRIS static volatile bit Data static volatile bit DataTRIS // Длительность задержки. // Номер текущего состояния. 9 9 9 char * MessageOut; // Указатель на выводимое сообщение. volatile char = 0; // Смещение текущего символа в строке. char - // Сообщение о полученной звуковой команде. // 1 2 3456789012345678 char = // Выводится, когда нет команды. char = 20; int = 0; int volatile char = 0; // Задержка 20 мс. // Прошлое значение таймера. // Текущее значение таймера. // Есть звук? - нет; // 1 - ждем дальше; // 2 .- звук окончен. // Слово defined(_16F627) «warning PIC16F627 with external XT oscillator selected CONFIG(Ox03F61); // Для МК PIC16F627: // внешний тактовый генератор XT, // RA6/RA7 используются для ввода-вывода, // внешний сигнал сброса, // таймер включен, // сторожевой таймер выключен, // защита кода отключена, // детектор BODEN включен. Unsupported selected ffendif // Служебные char Value) { char // Перевод числа Value // в представление. if (Value > 9) returnValue = Value + - 10; else returnValue = Value + return returnValue; } // Конец функции GetHex // Задержка на миллисекунд. Подключение к микроконтроллеру периферийных устройств volatile variableDlay; variableDlay = RTC + // Конечное while (variableDlay != RTC); } // Конец функции Nybble, char RS) // Запись полубайта в Byte, char RS) // Запись байта в ЖКИ. // Инициализация ЖКИ. « const // Вывод строки на ЖКИ. // Обработчик прерываний: void interrupt char temp; int = 0; // Сбросить флаг прерываний от таймера // Инкремент счетчика реального времени. // Здесь можно разместить дополнительный код // для обработки прерываний от таймера // Работа с звуковым датчиком: if (soundState == 0) // Проверка текущего if == 0) { // Пора? soundCounter = 20; // Сброс. TMRIValue = * 0x0100) + if (TMRIValue >= (OldTMRI + soundState = 1; // Есть звук. = TMRIValue; // Сохранили состояние счетчика таймера. } else; else if (soundState == 1) // Звук продолжается? if == 0) { // Пора? soundCounter = 20; // Сброс. TMRIValue = (TMR1H • 0x0100) + if (TMRIValue < (OldTMRI + soundState = 2; // Звук прекратился. OldTMRI = TMRIValue; // Сохранили состояние счетчика таймера. } else; 288 Устройства управления роботами // Конечный автомат для } // Конец обработки прерываний от таймера. // Здесь можно разместить код для обработки других прерываний. } // Конец обработчика прерываний. // Главная программа: void OPTION OxOD1; // работает с таймером TMRO, // коэффициент деления равен 4. TMRO // Начальный сброс таймера TMRO. TOIE = 1; // Разрешение прерываний от таймера TMRO. GIE = 1; // Разрешение обработки прерываний. // Инициализация порта, к которому подключен ЖКИ. // Здесь можно проинициализировать другие периферийные устройства. TMR1H = TMR1L = 0; = 0x003; // Инициализация таймера // Коэффициент деления // T10SCEN (внутренний генератор) выключен; // _T1SYNC активен (синхронизация // с командными циклами включена); // TMR1CS установлен - внешний источник; // установлен - таймер включен. while (1 == 1) { // Бесконечный цикл. // Здесь можно разместить код верхнего while != 2); // Ждать появление звука. = (TMR1H • 0x0100) THR1L; = & OxOFOOO) 12); = & OxOFOO) 8); Message1[15] = & OxOFO) 4); Message1[16] = GetHex(CurrentTMR1 & OxOF); // Вывести сообщение "Sound" // (звук обнаружен). // Ждать 1 с. // Стереть сообщение. // Сброс. Ждать следующего звука. Dlay(1000); soundState 0; } // Конец цикла while. // Конец главной программы. Испытание этого приложения не должно вызвать у вас проблем. Возможно, при- дется подобрать сопротивление резистора R1, чтобы амплитуда входного сигнала, сни- маемого с микрофона, находилась в диапазоне 150-200 мВ, как показано на рис. 4.78. Питание \ 4 Подключение к микроконтроллеру периферийных устройств 289 4.32. УПРАВЛЕНИЕ ДВИГАТЕЛЕМ Чтобы робот был достаточно мобильным, необходимо иметь какой-либо простой и надежный способ для включения и выключения его двигателей, быстрого изме- нения направления и, возможно, скорости движения. В больших устройствах для этого используется специальный привод (трансмиссия), но для маленьких низмов более практичны электрические методы, например мост, об- разованный четырьмя выключателями, в качестве которых обычно используются транзисторы. Электродвигатели могут управляться с помощью тех же аппаратных и про- граммных средств, которые описывались в предыдущих разделах. Но все сигналы, которые формировал микроконтроллер с помо- щью рассмотренных выше программ, были од- Это значит, что даже если мы будем регулировать скорость вращения двига- теля с помощью программного или аппаратного широтно-импульсного модулятора, двигатель сможет вращаться только в одном направлении. Чтобы изменить направление вращения (и тем самым дать роботу возможность двигаться не только вперед, но и назад), используем Н-образ- ную мостовую схему, показанную на рис. 4.79. В этой схеме если все выключатели разом- кнуты, то обмотки электродвигателя обесточе- ны. Когда замыкаются выключатели 1 и 4, то двигатель начинает вращаться в одном направ- лении. Если, разомкнув контакты 1 и 4, замк- нуть выключатели 2 и 3, то через обмотки двигателя ток потечет в противоположном на- правлении; значит, направление вращения якоря тоже изменится на противопо- ложное. Нельзя допустить замыкания обоих контактов, находящихся с одной сто- роны: при этом возникнет короткое замыкание и выйдет из строя источник питания и/или сами электронные ключи. Если мы хотим изменять не только направление, но и скорость вращения, то управлять состоянием электронных ключей Н-образного моста должен широтно- модулятор (ШИМ). Чем большую часть периода длится импульс (см. рис. 4.33), тем больше средняя мощность, потребляемая двигателем, и тем быстрее он вращается. Собрать схему, показанную на рис. 4.79, можно на обычных транзисторах. Но для этой цели выпускаются также специальные микросборки, состоящие из четы- рех электронных ключей. Обычно я применяю микросхему 293D (рис. 4.80). Она может быть использована для управления двумя двигателями, которые должны подключаться к выводам и 14. Напряжение питания подается на выводы 2, и 15. К выводам 1 и 9 подводится напряжение, управляющее электронными ключами (это может быть Рис. 4.79. Переключение направления вращения электродвигателя постоянного тока 290 Устройства управления роботами Gnd Vs Vss 15 14 Gnd К выводу Vs подводится напряже- ние питания +5 В для самой микросхе- мы, а к выводу Vss - напряжение пита- ния для электродвигателей; оно должно находиться в диапазоне от 4,5 до 36 В. Максимальный ток, который могут по- треблять подключаемые к микросхеме двигатели, не должен превышать 500 мА. Внутри микросхемы 293D уже имеются специальные шунтирующие диоды, которые обычно подключаются парал- лельно обмоткам электродвигателей (а также к любым другим нагрузкам, имеющим преимущественно индук- тивное сопротивление), поэтому при использовании 293D не требуются внешние шунтирующие диоды. Схема подключения источника ШИМ-сигнала управления и одного элект- родвигателя к микросхеме 293D приведена на рис. 4.81. Рис. 4.80. для направлением вращения Микроконтроллер 0,1 Шунтирующий фильтр Рис. Управление Vcc Параллельно щеткам электродвигателя здесь подключена цепочка из последо- вательно соединенных резистора и конденсатора - она предназначена для сниже- ния импульсных помех, возникающих при его работе. Без такой защиты при вклю- ченном двигателе могут возникать перебои в работе микроконтроллера. Емкость конденсатора следует выбрать около мкФ, а резистор должен иметь сопротив- ление примерно 5 Ом и быть рассчитан на мощность не менее 2 Вт. Подключение к микроконтроллеру периферийных устройств 291 Следует помнить, что в качестве электронных ключей в микросхеме 293D ис- пользуются биполярные транзисторы, поэтому падение напряжения на каждом из них (в открытом состоянии) составляет около 0,7 В. Так как в Н-образной схеме последовательно соединены два ключа, то двигателю «достается» напряжение, ко- торое на В меньше, чем подаваемое на вход Vss. Умножив это напряжение на ток, потребляемый двигателем, можно оценить, какую тепловую мощность бу- дет рассеивать микросхема. Хотя максимальный суммарный выходной ток мик- росхемы 293D может достигать 1 А, для нормальной работы желательно, чтобы его значение было меньше. В литературе по робототехнике вы найдете более подробное изложение темы управления электродвигателями и встретите описание других электронных клю- чей, которые могут для этого использоваться, например КМОП транзисторы. Вопрос об управлении электроприводом достаточно сложен — ему следует уде- лить большое внимание, так как его решение в немалой степени повлияет на эф- фективность и функциональность автоматического устройства. Но для управле- ния небольшим роботом вполне подойдет вышеупомянутая микросхема 293D. 4.33. МОДЕЛИ ФИРМЫ TAMIYA В КАЧЕСТВЕ ПРОТОТИПА РАДИОЛЮБИТЕЛЬСКИХ КОНСТРУКЦИЙ Не всегда просто найти для робота хороший прототип. Иногда радиолюбители ис- пользуют электромеханические игрушки, однако зачастую у них достаточно уз- кое назначение, поэтому с ними тяжело работать. Можно, конечно, приобрести какой-нибудь из специальных наборов, но их стоимость достаточно высока. Пре- красный пример «золотой середины» между двумя названными крайностями - модели фирмы Tamiya 1 В этом разделе мы рассмотрим, как простая модель (фактически игрушка) мо- жет быть использована в экспериментах по робототехнике. Описанная ниже кон- струкция недостаточно оптимальна и надежна, чтобы стать законченным промыш- ленным устройством, но она послужит хорошей базой для дальнейших опытов. На рис. 4.82 показано простое устройство основе одной из разработок которую я несколько лет назад всего за несколько минут превратил из игрушки в самого настоящего ро- бота. Здесь использована модель мыши (скорее, грызуна, чем одноименного компьютерного ма- нипулятора); в каталоге она значится под име- нем Wall-Hugging Mouse или под номером 70068. В ее корпусе прекрасно разместить до- полнительную электронную схему для управле- ния движением (на основе микроконтроллера, конечно). Рис. 4.82. вид робота, выполненного основе мыши фирмы Tamiya С продукцией этой японской фирмы вы можете познакомиться, заглянув на русскоязычный сайт - Прим 292 Устройства управления роботами Модель мыши имеет два колеса, каждым из которых управляет отдельный электродвигатель постоянного тока. Направление движения задается с помощью контактного детектора на основе микропереключателя. Один двигатель включа- ется при замыкании микропереключателя, второй - при его размыкании. В ре- зультате мышь движется вдоль стенки по зигзагообразной траектории и может даже выбраться из несложного Прежде чем начать экспериментировать с этой простой игрушкой, соберите набор и посмотрите, как он работает. При сборке лучше припаять провода, так как скрученные контакты быстро растреплются, пока мышка будет бегать по комнате. Проводить эксперименты с данной моделью крайне увлекательно, но они быстро надоедают, и скоро вы будете готовы использовать игрушку в качестве основы для каких-то более сложных конструкций. Если вы уже готовы, то начнем: Удалите батарейку и ее держатель. 2. Припаяйте двухконтактный разъем для 9-вольтовой батарейки. 3. Можно (хотя и необязательно) удалить микропереключатель, управляющий двигателями. 4. Просверлите отверстия для крепления печатной платы, на которой будет размещаться электронное устройство управления. • В качестве детектора касания в нашей конструкции можно использовать все тот же микропереключатель, который уже имеется в комплекте с мышкой. Но для обнаружения объектов с обеих сторон нужны два контактных усика и два пере- ключателя. Я взял второй из другого такого же набора. Разумеется, еще лучше использовать инфракрасный обнаружитель объектов, вроде того, который уже описан в этой главе. Принципиальная схема блока управления представлена рис. 4.83. Внешний вид печатной платы показан на рис. 4.84. На то, чтобы собрать эту схему, лично я потра- тил два часа. В табл. 4.18 приведен список использованных элементов и материалов. В устройстве используется 9-вольтовая щелочная батарея и переключатель (на днище мышки) для включения питания. Не забывайте, что переключатель нужно располагать до цепей питания (то есть диода и фильтрующих конденсаторов С5 и С7), иначе эти конденсаторы будут заряжены даже при выключенном пита- нии - тогда их токи утечки будут разряжать батарейку, а кроме того, в момент включения возникнуть нежелательные импульсы. Возможно, вас удивят большая емкость конденсатора С7 (1000 мкФ) и нали- чие блокирующего диода CR3 (см. рис. 4.83). Как будет показано ниже в этом разделе, применение одной 9-вольтовой батарейки для питания двух электродвигателей, микросхемы L293D и микроконтроллера - далеко не са- мое оптимальное, но вполне допустимое решение. Для этого не понадобится особый интеллект. Как известно, простой алгоритм, позволяющий найти путь из лабиринта (не обязательно самый короткий), заключается в том, чтобы все время держаться какой-либо стены - правой или левой. - Прим |