Устройства управления роботами, схемотехника и программирование (М. Предко, 2004). Устройства управления роботами, схемотехника и программирование. Устройствауправления роботамисхемотехника и микроконтроллеров picmicro
Скачать 6.79 Mb.
|
Debug Simulator Stimulus Pin Stimulus Enable (Отладка Входные воздействия Файл стимулов Подключить). В папке следует выбрать файл и нажать кнопку ОК. После этого мож- но загрузить конфигурацию окна просмотра Watch, указав файл P16F627.wat. Установите точку останова в первой строке ветви case 2 оператора выбора: = » 256) (long) • 40; Нажмите клавишу F6, чтобы подать сигнал сброса микроконтроллера, и запу- стите программу нажатием клавиши F9. После того как сработает точка останова, выполните команду меню Window File Registers (Окно Регистровый файл), чтобы вывести на Рабочий стол окно, в котором отображается содержимое регистров микроконтроллера. Чтобы лег- че было найти строку, где хранится текст выводимого на дисплей сообщения, надо переключить это окно в режим ASCII. Для этого щелкните по пиктограмме в левом верхнем углу окна File Register Window и выберите пункт ASCII Display (Тексто- вый формат). Теперь выполните в пошаговом режиме (клавиша F7) еще несколько строк выполнение не дойдет до строки Постепенно вы сможете видеть, как будет заполняться строка сообщения. Об- ратите внимание, как медленно продвигается процесс моделирования. Каждая строка программы, содержащая оператор умножения или деления, выполняется несколько миллисекунд, не раз приостанавливаясь из-за процедуры обработки прерываний. Вот почему вся обработка информации, достаточно сложная, должна прово- диться в главной программе, а не в процедуре обработки прерываний. Если бы мы выполняли вычисления в обработчике прерываний, то многие запросы на преры- вание были бы пропущены, так как во время работы обработчика другие преры- вания запрещены. Кроме того, пошаговой отладке вы должны заметить, что расстояние вы- числяется неправильно. Вместо ожидаемой нами строки 7" в окне File Register Window мы увидим 1" Причиной ошибки послужила небрежность, допущенная мною при составле- нии файла стимулов. Подключение к микроконтроллеру периферийных устройств 263 Выполните сброс (клавиша F6) и поставьте точку останова в строке RB3 = 1; обработчика прерываний. Если теперь запустить выполнение программы клави- шей F9, то можно убедиться, что включение излучателя дальномера произойдет на 52037-м командном цикле, а не на 51200-м, как ожидалось. Лишние 837 циклов задержки соответствуют ошибке в 5,46 дюймов см) при измерении дально- сти. При вычитании из 7 числа 5,46, округляя до целых, как раз получим значение 1, которое выдает наша программа. Если мы теперь исправим файл стимулов так, чтобы отраженный сигнал появ- лялся не на 73248-м, а на 75185-м шаге моделирования, то увидим правильное значение 7". Советую вам вернуться к предыдущим проектам и создать похожий файл сти- мулов для моделирования приложений whisker.c и remote.c. Возможно, кому-то процесс моделирования покажется скучным, но уверяю вас, что прогон программы в симуляторе сэкономит многие часы, которые вам пришлось бы провести, безуспешно пытаясь найти ошибку в неправильно рабо- тающем устройстве. 4.28. СВЕТОВЫЕ ДАТЧИКИ Не так уж сложно наделить нашего робота элементарной способностью реагиро- вать на свет. Разумеется, пока речь не идет о распознавании изображений, но мы без труда можем добавить к описанным выше конструкциям несколько световых датчиков и так изменить управляющую программу, чтобы робот двигался в сто- рону источника света, подобно тому как это делают насекомые. Обычно для этого в передней части корпуса под углом 45° к продольной оси робота устанавливают два фотодиода, каждый из которых будет иметь свое поле обзора, как показано на рис. 4.65. Такое расположение световых датчиков позво- лит легко определить направление до источника света. Поле обзора левого фотодиода Поле обзора правого фотодиода Рис. 4.65. Границы поля обзора левого и правого световых датчиков 264 Устройства управления роботами Разумеется, можно не ограничиваться двумя фотодиодами спереди, а располо- жить их по всему периметру, робот мог реагировать и на те источники све- та, которые расположены сзади. В качестве датчиков света подойдут не только фотодиоды, но также фототран- зисторы или фоторезисторы из сульфида кадмия. Принцип работы датчиков света основан на том, что сопротивление фоторези- стора или фотодиода в обратном включении (либо коллектор-эмиттерное сопро- тивление фототранзистора) изменяется под действием света: оно уменьшается при увеличении освещенности. Что касается фотодиода, он может использовать- ся и в качестве фотоэлемента, то есть служить источником фототока, сила кото- рого тем больше, чем ярче освещен фотодиод. Сила фототока очень мала - она должна быть увеличена с помощью специальной электронной схемы. При работе с фототранзисторами часто используют включение по схеме Дарлингтона, кото- рое позволяет усилить сигнал. Фоторезисторы обычно весьма инерционны (имеют время реакции порядка десятков и даже сотен миллисекунд), поэтому они не могут быть использованы для регистрации быстрых изменений освещенности, например для приема сигна- лов дистанционного управления. Даже, возможно, придется уменьшить скорость движения робота до минимума, чтобы он успевал сканировать все окружающее пространство в поисках источника света. Тем не менее фоторезисторы из сульфида кадмия весьма популярны в радио- любительских конструкциях; так, датчики на их основе обладают хорошей чув- ствительностью, то есть имеют максимальное отношение изменения тока через резистор к соответствующему изменению освещенности. Все три описанных типа световых vref датчиков формируют аналоговый сигнал. Но микроконтроллер работает только с сигналами, представленными в цифро- I I чтобы ввести в мик- I I - выходной код роконтроллер сигнал, снимаемый с ана- логового светового датчика, можно использовать аналого-цифровой преоб- (АЦП). Схема подключения показана на рис. 4.66. Здесь фоторезис- Рис. сопротивления является нижним плечом делителя с напряжения источника питания, а в ка- честве верхнего плеча используется пре- цизионный резистор. Напряжение в средней точке делителя преобразуется с помощью АЦП в цифровой код и подается на вход микроконтроллера. Для рабо- ты АЦП обычно требуется высокостабильный источник опорного напряжения Vref. Сопротивление прецизионного резистора должно быть равно наибольшему воз- можному сопротивлению фоторезистора. Если необходимо, чтобы выходной код АЦП увеличивался при возрастании освещенности фоторезистора, надо поменять местами плечи делителя, то есть переставить фоторезистор и прецизионный резистор. Подключение к микроконтроллеру периферийных устройств 265 Другой способ измерения уровня яркости не требует использования АЦП (рис. 4.67). Здесь вывод микроконтроллера подключен к средней точке делите- ля напряжения, нижнее плечо которого, как и в предыдущей схеме, образовано сопротивлением фоторезистора, а в верхнем плече установлен конденсатор. Сна- чала вывод микроконтроллера переводится в режим выходного и на него пода- ется импульс напряжения; в результате происходит разряд конденсатора. После этого вывод микроконтроллера переключается на ввод сигнала, а конденсатор начинает снова заряжаться, напряжение на нем увеличивается. Как следствие, напряжение в средней точке делителя уменьшается. Когда оно достигнет порога переключения, на входе микроконтроллера будет зафиксирован сигнал низкого уровня. Время разряда конденсатора тем больше, чем меньше сопротивление фо- торезистора, то есть чем меньше он освещен. Vcc Чтение порта Выходной сигнал Перезаряд конденсатора Порог переключения Рис. 4.67. Измерение сопротивления фоторезистора с помощью Для вычисления времени, в течение которого напряжение на входе микрокон- троллера падает от напряжения питания делителя Vcc до напряжения переключе- ния, можно использовать приближенную формулу Т = 2,2 х R х С. Эта формула позволяет лишь оценить ожидаемое время разряда конденсатора по порядку величины - реальное время зависит не только от емкости конденсато- ра, но и от напряжения питания и характеристик входных цепей микроконтрол- лера, поэтому для более точных измерений приходится проводить индивидуаль- ную градуировку. Наконец, третий метод ввода аналогового сигнала основан на использовании встроенного в микроконтроллер аналогового компаратора (рис. 4.68). Здесь оба плеча делителя напряжения образованы сопротивлениями фоторезисторов, а сиг- нал с общей точки их соединения подается на вход микроконтроллера, где срав- нивается компаратором с опорным значением Vref. Если напряжение, снимаемое с делителя, больше опорного (это говорит о том, что верхний фоторезистор освещен 266 Устройства управления роботами Vref Левый фоторезистор Правый фоторезистор Выход Компаратор Рис. сопротивления фоторезисторов с помощью компаратора меньше, чем нижний), то на выходе аналогового компаратора будет сигнал высо- кого уровня, а в противном случае - сигнал низкого уровня. Последний метод очень прост, но менее информативен, поскольку позволяет только определить, какой световой датчик освещен больше, а какой меньше, в то время как предыдущие два метода действительно обеспечивали измерение уров- ня освещенности. Следует помнить, что все три метода ввода аналоговых сигналов имеют низ- кую помехоустойчивость. Может даже потребоваться выключать двигатели на то время, пока длится опрос световых датчиков. Если вы хотите, чтобы ваш робот с высокой достоверностью определял направ- ление до источника света в любой обстановке, то, вероятно, придется использо- вать небольшую телекамеру. Ее видеосигнал можно будет подвергнуть неслож- ной обработке, чтобы найти наиболее освещенный участок комнаты. 4.29. ПОДКЛЮЧЕНИЕ СВЕТОВЫХ ДАТЧИКОВ К МИКРОКОНТРОЛЛЕРУ В предыдущем разделе мы познакомились с тремя основными методами подклю- чения световых датчиков к микроконтроллеру. Каждый из них имеет свои пре- имущества и недостатки; мы еще обсудим их, но сначала рассмотрим несколько конкретных примеров. Обычно используется дифференциальная схема на двух фоторезисторах, включенных по схеме делителя напряжения (как на рис. 4.68). Когда оба фоторе- зистора освещены одинаково, то их сопротивления примерно равны, и в средней точке делителя напряжение равно половине напряжения питания. Если верхний фоторезистор освещен больше, чем нижний, то его сопротивление меньше; в этом случае напряжение, снимаемое с делителя, больше половины напряжения пита- ния. Наоборот, если больше освещенность нижнего резистора, то напряжение в средней точке делителя меньше половины напряжения питания. Чтобы узнать, какой из двух фоторезисторов освещен больше, достаточно ис- пользовать аналоговый компаратор, один вход которого должен быть подключен к выходу делителя, а на второй следует подать напряжение, равное половине Подключение к микроконтроллеру периферийных устройств 267 напряжения питания делителя. Как мы уже говорили в главе 3, микроконтроллер имеет два встроенных аналоговых компаратора. Поэтому для нашего первого примера выберем именно этот способ подключения датчиков. Принципиальная схема показана на рис. 4.69. Здесь мы будем формировать опорное напряжение для компаратора с помощью средств, встроенных в микро- контроллер. Мы должны запрограммировать внутренний источник, чтобы его на- пряжение равнялось половине напряжения питания микроконтроллера. Для про- верки это напряжение подается на вывод RA2. Vcc Vcc Рис. 4.69. Схема подключения фоторезисторов к микроконтроллеру На рис. 4.70 показана схема размещения элементов на макетной плате. По срав- нению с предыдущими конструкциями почти ничего не изменилось, только до- бавлены два фоторезистора. На рис. 4.70 не показаны длинные провода, исполь- зуемые для подключения фоторезисторов. Возможно, для проверки работы нашего устройства вы разместите их прямо на макетной плате, но в работающем устройстве они должны быть вынесены на переднюю панель корпуса робота, как можно дальше от друга. Чтобы в средней точке делителя, образованного сопротивлениями этих фото- резисторов, напряжение в точности равнялось половине напряжения питания, же- лательно использовать еще резистор R4, с движка которого можно снимать выходное напряжение делителя (как показано на врезке к рис. 4.69, в ле- вом верхнем углу). 268 Устройства управления роботами Vdd/2 В ВВ п о и п DD вв в о а в G в п в в в в в в в п п в в Левый • Правый Рис. 4.70. Схема размещения элементов на макетной плате Перечень использованных в схеме элементов приведен в табл. Некоторые указанные там элементы потребуются нам только для второго примера. Таблица Перечень использованных Обозначение U1 U2 CR1 R1 R2 R3 R4 Элемент PIC16F627 1 0,25 Вт 10 кОм, кОм, подстроечный 470 Ом; 0,25 Вт Примечание Микроконтроллер Сдвиговый регистр Любой кремниевый диод «Подтягивающий» резистор Для регулирования контрастности дисплея и яркости светодиода Можно исключить Используются только во второй схеме Фоторезистор, при нулевом освещении мкФ мкФ Для фильтрации напряжения питания микросхем Используются только схеме Жидкокристаллический дисплей выводов), совместимый с Hitachi 44780 Керамический резонатор на 4 МГц, со встроенными конденсаторами Для генератора тактовых импульсов микроконтроллера Материалы Макетная плата, монтажные провода, источник питания +5 В * В скобках указаны отечественные аналоги, добавленные при переводе. - перев. Подключение к микроконтроллеру периферийных устройств 269 Текст программы можно найти в файле // 24 апреля 2002 - два фоторезистора, дифференциальная схема включения. // // Для индикации используется жидкокристаллический дисплей, // подключенный к микроконтроллеру через двухпроводной интерфейс // на основе сдвигового регистра 74LS174. // // Используются прерывания от таймера каждую миллисекунду. // // Замечания по аппаратным средствам: // Микроконтроллер PIC16F627 работает на частоте 4 МГц. // Используется тактовый генератор. // // Подключение выводов микроконтроллера // (в электронной версии программы здесь перепутаны // обозначения выводов. - // RA1 - инверсный вход компаратора 2 - подключен к выходу делителя // напряжения, вернее плечо которого образовано левым // фоторезистором, а нижнее - правым; // RAO - инверсный вход компаратора 1 - подключен к общему проводу Vss; // RA2 - выход, на котором можно контролировать правильность // формирования напряжения Vdd / 2; // RB1 - линия Clock интерфейса жидкокристаллического дисплея; // RB2 - линия Data интерфейса жидкокристаллического дисплея. // Глобальные переменные и константы: int RTC = 0; // Счетчик реального volatile char = 20; // Длительность volatile char LCDState = 1; // Номер текущего состояния. static volatile bit Clock static volatile bit ClockTRIS static volatile bit Data static volatile bit DataTRIS (unsigned)&TRISB*8+1; char * MessageOut; // Указатель на выводимое volatile char = 0; // Смещение текущего символа в char Message1[3] = // Звездочка выводится char Message2[18] = // Звездочка выводится справа. // 1 2345678901234567 // Слово defined(_16F627) PIC16F627 with external XT oscillator selected // Для МК PIC16F627: // внешний тактовый генератор XT, // RA6/RA7 используются для ввода-вывода, // внешний сигнал сброса, // таймер включен, Электронное приложение к этой книге содержит тексты программ в том виде, в котором они пред- ставлены в оригинале книги. Обратите внимание на то, что электронная версия данной программы несколько отличается от печатного варианта. Обе версии работоспособны, хотя в оригинале имеется ошибка в комментариях. - Прим. перев. 270 Устройства управления роботами // сторожевой таймер // защита кода отключена, // детектор BODEN включен. Unsupported selected ffendif // Служебные LCDNybble(char Nybble, char RS) // Запись полубайта в LCDByte(char Byte, char RS) // Запись байта в ЖКИ. // Инициализация ЖКИ. * const LCDString) // Вывод строки на ЖКИ. int // Опрос состояния бита 7 CMCON // (выхода компаратора 2). return C20UT; // Обработчик прерываний: void interrupt { char temp; // Служебная переменная (используется в реализации // конечного автомата для ЖКИ). if (TOIF) { // Обработчик прерываний от таймера TOIF 0; // Сбросить флаг прерываний от таймера TMRO. // Инкремент счетчика реального времени. // Здесь можно разместить дополнительный код // для обработки прерываний от таймера TMRO. // Конечный автомат для ЖКИ: // (как и в предыдущих программах) } // Конец обработчика прерываний от таймера. // Здесь можно разместить другие обработчики прерываний. } // Конец обработчика прерываний. // Главная void OPTION = OxOD1; // работает с таймером TMRO, // коэффициент деления равен 4. TMRO = 0; // Начальный сброс таймера TMRO. Подключение к микроконтроллеру периферийных устройств 271 TOIE = 1; // Разрешение прерываний от таймера TMRO. GIE = 1; // Разрешение обработки прерываний. // Инициализация порта, к которому подключен // Здесь можно другие периферийные устройства. CMCON = 0x002; // Разрешение работы компараторов. // не инвертируются. // Бит переключения входов CIS = 0. // Режим 2 (с внутренним источником // опорного напряжения). TRISA = 0x003; // Входными являются только выводы RAO и RA1. // Обращаем внимание читателя на еще одну ошибку в электронном // варианте программы; она приводит к тому, что невозможно // проконтролировать величину опорного напряжения // на выводе RA2. - VRCON = ОхОЕС; // Разрешение работы внутреннего источника // опорного напряжения Vref; // выход Vref подключен к выводу RA2; // верхний поддиапазон; // биты задания величины напряжения; 12. while (1 == 1) { // Бесконечный цикл. // Здесь можно разместить код верхнего уровня. if else // Каково состояние бита 7 // регистра CMCON? // Источник света // расположен слева. // Источник света // расположен справа. } // Конец оператора while. } // Конец главной программы. Здесь после инициализации жидкокристаллического дисплея в бесконечном цикле производится опрос состояния компаратора. Если левый (верхний по схе- ме на рис. 4.69) фоторезистор освещен больше правого, то напряжение на выходе делителя больше половины напряжения питания. Так как выход делителя под- ключен к инвертирующему входу компаратора, а инвертирование выхода отклю- чено, то на выходе C2OUT при этом будет напряжение низкого уровня (логичес- кий 0), а следовательно, на дисплей будет выводиться сообщение (символ звездочки слева). Если источник света, наоборот, больше освещает пра- вый фоторезистор, то будет выведено сообщение Message2 (символ звездочки справа). Аналоговый компаратор работает непрерывно, для опроса его состояния нет надобности выполнять какую-либо последовательность действий, как часто бы- вает в цифровых схемах. Поэтому программа получилась достаточно простой. Вывод курсора на экран не разрешается нигде. По большому счету, необхо- димость в этом возникает только в тех приложениях, которые требуют, чтобы 272 Устройства управления роботами пользователь вводил какую-либо информацию. В если дисплей нужен только для вывода данных, мигающий знак подчеркивания обычно только раз- дражает. Недостаток схемы заключается в том, что робот получает только один бит ин- формации: какой из двух фоторезисторов освещен больше. Мы не можем изме- рить, насколько больше, и выяснить, каков общий уровень освещенности. В ситу- ации, когда один фоторезистор залеплен непрозрачным материалом, а на другой направлен свет яркой лампы, робот будет реагировать так же, как если бы исполь- зовались два источника света, один из которых светит чуть ярче другого. Поведе- ние робота не изменится, если в комнате будет полумрак и только в одном ее углу будет чуть мерцать свеча. Другой недостаток, характерный для всех автоматических устройств, заключается в том, что наш робот на самом деле не будет двигаться в сторону источника света по прямой траектории. Он будет вилять, то резко заби- рая вправо, то снова возвращаясь влево. Амплитуда колебаний может оказаться настолько что робот так и не сможет приблизиться к источнику света из- за того, что после очередного резкого поворота этот источник окажется вне поля обзора обоих фоторезисторов. Кроме того, может оказаться, что из-за разброса параметров фоторезисторов при равной их освещенности выходное напряжение делителя не равно половине напряжения питания. В результате колебательная траектория движения робота вместо того, чтобы стремиться точно к источнику света, будет направлена к неко- торой точке в стороне от него. Но эта проблема, в отличие от предыдущих, легко решается путем добавления подстроечного резистора. Точной его регулировкой можно добиться, чтобы на дисплее мигали обе звездочки, если робот ориентиро- ван в направлении источника света. Если мы хотим, чтобы устройство действительно измеряло уровень освещен- ности, придется усложнить схему и управляющую программу. Микроконтроллер PIC16F627 не имеет встроенного АЦП, так что мы будем измерять сопротивле- ние фоторезистора с помощью RC-цепочки, время разряда которой зависит от сопротивления R (см. рис. 4.67). Чем больше освещен фоторезистор, тем меньше сопротивление и тем быстрее разряжается конденсатор. Принципиальная схема второго устройства приведена на рис. По сравне- нию с предыдущей здесь добавлены два резистора (R5 и R6) и конденсатора (СЗ и С4). На рис. 4.72 показана схема размещения элементов на макетной плате. Перечень использованных элементов уже приводился в табл. Конечно, было бы интересно разобрать еще одну схему на основе АЦП, но на нашей макетной плате уже не осталось места для аналого-цифрового преобразо- вателя. К тому же программа для работы с АЦП не слишком-то отличается от той, что мы неоднократно использовали для вывода информации на экран жидкокри- сталлического дисплея. Хотя я потратил немного времени на эксперименты Даже если читатель не изучал теорию автоматического управления и исследования систем на устойчивость, он может снизить скорость вращения двигателя с целью уменьшения амплитуды колебаний. - Прим. перев. |