Главная страница
Навигация по странице:

  • 8-2101 226 Устройства управления роботамиРис. 4.52. асинхронных входных воздействийРис. 4.53.

  • Рис. 4.54 Указание вывода микроконтроллера,на который будет входное воздействие4.21. ИНФРАКРАСНЫЙ ДЕТЕКТОР СТОЛКНОВЕНИЙ

  • 4.22. ИНФРАКРАСНЫЙ ОБНАРУЖИТЕЛЬ ОБЪЕКТОВ

  • Рис. 4.57.

  • Устройства управления роботами, схемотехника и программирование (М. Предко, 2004). Устройства управления роботами, схемотехника и программирование. Устройствауправления роботамисхемотехника и микроконтроллеров picmicro


    Скачать 6.79 Mb.
    НазваниеУстройствауправления роботамисхемотехника и микроконтроллеров picmicro
    АнкорУстройства управления роботами, схемотехника и программирование (М. Предко, 2004).pdf
    Дата29.08.2017
    Размер6.79 Mb.
    Формат файлаpdf
    Имя файлаУстройства управления роботами, схемотехника и программирование .pdf
    ТипРеферат
    #8441
    КатегорияПромышленность. Энергетика
    страница19 из 33
    1   ...   15   16   17   18   19   20   21   22   ...   33
    Debug Asynchro-
    nous Stimulus (Отладка
    Асинхронные входные воздействия) - рис. 4.52. В по- явившемся диалоговом окне (рис. 4.53) надо щелкнуть правой кнопкой мыши по изображению любой кнопки, а затем указать режим работы Toggle (Переключа- тель) и имя вывода как показано на рис. 4.54.
    Теперь состояние вывода RBO будет переключаться на противоположное каж- дый раз, когда во время отладки в диалоговом окне вы будете щелкать пра- вой кнопкой мыши по изображению выбранной кнопки.
    Как уже говорилось в главе 3, асинхронные стимулы очень удобны для моде- лирования внешних воздействий, которые могут произойти в любой момент. Но во многих случаях, когда требуется подавать входные сигналы с заданными за- держками во времени, лучше прибегнуть к другим способам моделирования, име- ющимся в MPLAB. Мы обязательно используем их в следующих проектах.
    8-2101

    226 Устройства управления роботами
    Рис. 4.52.
    асинхронных входных воздействий
    Рис. 4.53. Диалоговое окно выбора асинхронных входных воздействий
    Рис. 4.54
    Указание вывода микроконтроллера,
    на который будет входное воздействие
    4.21. ИНФРАКРАСНЫЙ ДЕТЕКТОР СТОЛКНОВЕНИЙ
    Разумеется, у вас дома найдется хотя бы один инфракрасный пульт дистанцион- ного управления телевизором или каким-нибудь другим электронным прибором.

    Подключение к микроконтроллеру периферийных устройств 227
    Когда я впервые приобрел такой пульт лет 20 назад, то испытал его работу в раз- личных условиях, чтобы выяснить, с какого расстояния он начинает действовать,
    проходит ли его сигнал через стену и другие преграды, такие как картины, стекла,
    растения и т.д.
    Кому-то такое поведение могло бы показаться странным, но в результате по- добных испытаний родилась идея использовать инфракрасный излучатель и при- емник отраженного сигнала в качестве детектора столкновений.
    Принцип работы инфракрасного детектора поясняется на рис. 4.55. На кор- пусе робота устанавливаются инфракрасный излучатель и приемник. Если кой-либо объект, который отражает инфракрасные лучи, оказывается слишком близко от робота, то отраженный сигнал становится достаточно сильным. Он улавливается приемником и служит сигналом о скором столкновении. В каче- стве источника инфракрасных лучей обычно используется светодиод инфра- красного диапазона.
    Светодиод
    Непрозрачный барьер
    Отраженный свет
    Препятствие
    Инфракрасный детектор
    Рис. 4.55. Принцип работы инфракрасного
    Следует помнить, что существует огромное количество твердых и непрозрач- ных для обычного света материалов, которые могут оказаться прозрачными для инфракрасных
    Прекрасный пример материала, являющегося преградой для инфракрасного излучения, - это металлическая пластина, которую необходимо установить между излучателем и приемником, чтобы последний мог реагировать только на отраженный сигнал. Также можно использовать черную изоляционную ленту или резиновую трубку.
    Читатель может, например, убедиться, что используемый для монтажа электронных схем гетинакс прекрасно пропускает инфракрасное излучение. - Прим. перев.

    228 Устройства управления роботами
    Упомянутый бесконтактный метод объектов (как и описанная ниже ультразвуковая дальнометрия) имеет несомненные преимущества: ведь в этом случае исключено механическое воздействие на детектор, которое может нарушить его работу. Кроме того, нет необходимости подавлять дребезг механи- ческих контактов.
    Разумеется, за эти преимущества приходится расплачиваться усложнением аппаратных средств и программного обеспечения. Дело не только в стоимости элементов. Инфракрасный светодиод и фотоприемник не так уж дороги. Но при- менение данного метода обнаружения объектов накладывает определенные огра- ничения как на используемый микроконтроллер, так и на управляющую его рабо- той программу. Описанный здесь инфракрасный детектор может иметь широкую сферу применений, но в некоторых ситуациях он может стать источником про- блем.
    Как известно, интенсивность излучения обратно пропорциональна квадрату расстояния до источника. Например, на расстоянии одного сантиметра от излуча- теля свет в четыре раза ярче, чем на расстоянии двух и в 16 раз ярче,
    чем на расстоянии четырех сантиметров.
    Чем меньше сила света, падающего на фотоприемник, тем меньший ток течет через него. Чтобы можно было произвольно задать расстояние, на котором дол- жен сработать наш детектор, нужно иметь возможность регулировать яркость излучателя. Существует по крайней мере три способа реализовать такую регули- ровку:
    • использовать резистор, включенный последовательно со све- тоизлучающим диодом (чем больше его сопротивление, тем меньше яркость светодиода);
    • изменять частоту излучаемого сигнала (чем дальше она выходит за рабочий диапазон фотоприемника, тем слабее тот реагирует на излучаемый сигнал);
    • использовать широтно-импульсную модуляцию излучаемого сигнала (этот способ легко реализовать, если микроконтроллер имеет встроенные средства для формирования
    Наш детектор должен воспринимать только тот сигнал, что из- лучателем, и не должен реагировать на инфракрасное излучение от любого друго- го источника (например, на солнце, заглянувшее в окно, или нагретую электро- плитку). Поэтому приходится использовать узкополосный фильтр, настроенный на ту частоту, которую имеет сигнал, генерируемый излучателем; в нашем случае это частота 38 кГц.
    • Для регулирования яркости излучателя пригодится встроенный в микрокон- троллер модуль ШИМ - вот почему в одном из предыдущих проектов мы исполь- зовали программный метод генерации ШИМ-сигнала, оставив аппаратный мо- дуль для других целей.
    Если инфракрасный излучатель ориентирован преимущественно в прямом направлении, то детектор будет срабатывать на достаточном расстоянии от

    Подключение к микроконтроллеру периферийных устройств 229
    объектов, расположенных спереди, но дальность срабатывания для объектов,
    расположенных сбоку, может оказаться существенно меньше. Это можно ис- пользовать, разместив один излучатель спереди и два фотоприемника по бокам робота.
    Как уже говорилось, напряжение на излучатель подается в виде импульсов определенной частоты (чтобы можно было отфильтровывать паразитное дей- ствие других источников инфракрасного диапазона) и длительности (чтобы можно было регулировать яркость излучения). Обычно для срабатывания де- тектора достаточно нескольких импульсов - от двух до семи (рис. 4.56). Напом- ним, что светодиод горит при уровне напряжения на внешнем выводе микроконтроллера.
    3)[TD]Ch 1:
    ''•'•
    т Напряжение на излучающем •
    светодиоде
    : : : :
    i
    ! ! '
    '
    • снимаемый с детектора '. :
    ; :
    Рис. 4.56. Диаграммы сигналов
    и приемника
    Кроме того, желательно совместить работу инфракрасного обнаружителя объек- тов и инфракрасного приемника сигналов пульта дистанционного управления. Для этого я обычно генерирую восемь световых импульсов с интервалом в миллисекун- ду. После восьмого импульса в течение некоторого времени фотоприемник исполь- зуется для проверки того, не посылает ли пульт дистанционного управления какой- либо сигнал, а затем излучатель снова формирует восемь световых импульсов,
    необходимых для работы обнаружителя объектов.
    4.22. ИНФРАКРАСНЫЙ ОБНАРУЖИТЕЛЬ ОБЪЕКТОВ
    Хотя проект, рассматриваемый в этом разделе, даже проще, чем многие другие, пред- ставленные в книге, я должен признаться, что процесс написания программы оказал- ся весьма нелегким. Только в результате продолжительных усилий удалось, наконец,
    добиться правильной работы приложения, и, как обычно, только после этого стала

    230 Устройства управления роботами очевидной его простота. К работающему проекту оказалось несложно подключить другие интерфейсы, такие как приемник сигналов дистанционного управления.
    Как и в предыдущем случае, разработка нового устройства будет вестись на основе проекта с жидкокристаллическим индикатором. Это даст возможность в очередной раз продемонстрировать, как программные модули, работающие с различными периферийными устройствами, уживаются друг с другом в одном приложении. Как и прежде, наш обычный подход к разработке управляющих про- грамм облегчит возможность совмещения различных функций.
    Для формирования импульсов прямоугольной формы частотой 38 кГц, кото- рые будут подаваться на светодиод инфракрасного диапазона, используется встроенный в микроконтроллер модуль ШИМ. Как уже говорилось, первоначаль- но я разрабатывал свои проекты на основе микроконтроллера PIC16F84, а он не имеет аппаратных средств для генерации широтно-модулированного сигнала. Что касается других МК, то компилятор
    Lite в то время не поддерживал воз- можность генерации машинного кода для какого бы то ни было микроконтролле- ра, имеющего встроенный модуль ШИМ. Поэтому в первом варианте этого про- екта для генерации ШИМ-сигнала частотой 32 кГц мне пришлось прибегнуть к программированию на языке ассемблера.
    После того как вышла новая версия компилятора PICC Lite, тексты программ были модифицированы для использования с микроконтроллером PIC16F627, ко- торый имеет встроенный модуль ШИМ. При тактовой частоте 4 МГц генерация
    ШИМ-сигнала частотой 38 кГц осуществляется довольно просто:
    = 13;
    = ОЬ000001111;
    PR2
    = 25;
    = 0;
    T2CON
    TRISB3 = 0;
    // Длительность импульса 50%.
    // Включение модуля ШИМ.
    // Частота 38 кГц соответствует
    // периоду примерно 26 мкс.
    Сброс таймера
    // Включение таймера TMR2,
    // предделитель 1:1.
    // Вывод RB3 (выходной
    // переводится в режим выходного.
    На рис. 4.57 приведена принципиальная схема, а на рис. 4.58 показана схема размещения элементов на макетной плате.
    По сравнению с предыдущими проектами способ прокладки соединительных проводов остался прежним, хотя пришлось внести некоторые изменения, чтобы освободить место для инфракрасного излучателя и подстроечного резистора.
    Светодиод инфракрасного диапазона подключен ко входу RB3 микроконтрол- лера через резистор, чтобы можно было не только программно, но и аппаратно регулировать яркость его свечения.
    В качестве приемника отраженного сигнала используется детектор с тремя вы- водами, взятый со стандартного приемника дистанционного управления телеви- зором или музыкальным центром (рассчитанный на частоту сигнала 38 кГц). Для фильтрации сигнала, снимаемого с детектора, применен простой RC-фильтр, об- разованный резистором R5 и конденсатором СЗ. На всякий случай установлен

    Подключение к микроконтроллеру периферийных устройств 231
    Рис. 4.57. Принципиальная схема обнаружителя объектов
    Рис. 4.5S. Схема размещения элементов на макетной плате
    «подтягивающий» резистор R4, так как многие инфракрасные детекторы имеют выход с открытым коллектором.
    В табл. 4.12 приведен список использованных в схеме элементов.
    Здесь указаны светодиод и детектор инфракрасного диапазона фирмы Wait- rony только потому, что в Торонто они являются одними из самых доступных и дешевых, но вы можете взять практически любые детектор и светодиод.

    232 Устройства управления роботами
    Таблица
    Список использованных элементов
    Обозначение
    U2
    CR1
    CR2
    RJ, R4
    R2
    R5
    СЗ
    Элемент Примечание
    Сдвиговый регистр
    Р/С-
    Инфракрасный детектор с тремя внешними выводами
    фирмы
    любой
    другой того же типа
    Любой кремниевый диод
    Светодиод
    Можно использовать любой
    или любой другой инфракрасного диапазона
    того же типа
    10 кОм; 0,25 Вт «Подтягивающие» резисторы
    1 кОм; 0,25 Вт
    кОм,
    Для регулирования контрастности дисплея
    и яркости
    Ом; 0,25 Вт Фильтрация сигнала
    мкФ Для фильтрации напряжения питания микросхем
    47 мкФ,
    Фильтрация сигнала
    Жидкокристаллический дисплей
    выводов),
    совместимый с Hitachi 44780
    Керамический резонатор Для генератора тактовых импульсов
    на 4 МГц, со встроенными микроконтроллера
    конденсаторами
    Материалы
    Макетная плата, монтажные провода,
    источник питания +5 В
    В скобках указаны отечественные аналоги, добавленные при переводе. —
    перев.
    Разумеется, детектор принимаемого сигнала должен быть ориентирован в ту же сторону, что и излучающий светодиод. Между детектором и излучателем не- обходимо установить непрозрачную для инфракрасных лучей перегородку.
    Когда я собрал эту схему, она сначала не заработала (в отличие от всех преды- дущих, которые начинали работать сразу же). Потребовалось несколько недель напряженных усилий, прежде чем удалось найти причину. Ошибку удалось обна- ружить только после того, как я немного переделал схему, вернувшись к старой конструкции, которая уже доказала свою работоспособность во время создания одного из моих прошлых проектов около года назад.
    Оказалось, что инфракрасный детектор рассчитан на работу с более-менее по- стоянным сигналом и имеет возможность подстраивать встроенный в него фильтр, адаптируя его к частоте принимаемого сигнала. Данная особенность не была указана в документации. В нашей конструкции, как уже говорилось, сигнал делится всего на восемь периодов, после чего на время прекращается (в одном из следующих проектов эта пауза будет использоваться для приема сигналов пульта дистанционного управления), поэтому фильтр внутри инфракрасного детектора не успевает подстроиться к сигналу. Проблема решилась с помощью небольшого фрагмента, добавленного к тексту обработчика прерываний от таймера:
    TRISB3 = 0;
    // Разрешить прохождение на выход
    // (светодиод горит).

    Подключение к микроконтроллеру периферийных устройств 233
    while
    <
    Ждать, пока детектор настроится на сигнал.
    if
    // Если на входе низкий уровень,
    Collision = 1; // то выдача сигнала об обнаружении объекта,
    else // в противном случае никаких объектов нет.
    Collision
    TRISB3
    // Запрещение выхода
    // (светодиод
    Здесь пропускается на выход микроконтроллера только в те- чение 64
    работы счетчика таймера TMRO. При частоте тактирования
    4 МГц и коэффициенте предделителя 1:4 это соответствует промежутку време- ни длительностью 256
    При частоте 38 кГц за это время формируются во- семь или девять импульсов ШИМ-сигнала. В результате своих предыдущих экс- периментов с инфракрасными детекторами я пришел к мысли, что, возможно,
    в детекторе выполняется синхронизация частоты настройки фильтра с частотой принимаемого сигнала.
    Пытаясь найти ошибку, я сравнил фрагмент программы, управляющий рабо- той модуля ШИМ, со своей прошлогодней разработкой, в которой использова- лась та же самая электрическая схема. Используя приемник старого робота, уда- лось убедиться в том, что новая схема действительно генерирует сигнал. Что касается программы, то не было никаких сомнений в ее правильности. Не зная,
    что делать дальше, я попробовал вместо одиночных импульсов посылать пакеты из восьми-девяти импульсов, и тут новая схема неожиданно заработала!
    Этот случай прекрасно доказывает, что во время отладки приложения надо проверить все возможности, так как любые наши предположения или наблюде- ния могут оказаться не слишком правильными - либо возникнет обстоятельство,
    обратить внимание на которое не приходило нам в голову.
    Окончательную версию программы вы найдете в файле Code\Irdetect\
    irdetect.c. Здесь генерируется ШИМ-сигнал частотой 38 кГц. При наличии отра- женного сигнала (то есть когда поблизости имеется какой-либо объект), на жид- кокристаллическом дисплее высвечивается надпись COLLISION. Если отражен- ного сигнала нет, то на дисплей ничего не выводится.
    резистор R6 должен быть чтобы можно было устанавливать его движок в нужное положение, соответствующее заданной даль- ности срабатывания детектора. Прежде чем начать калибровку, следует убедить- ся, что между светодиодным излучателем и детектором установлен экран, не пропускающий инфракрасное излучение. На рис. 4.58 показано, как следует рас- положить этот экран. Должен предупредить вас, что для такого экрана не столь уж просто найти подходящий материал. Вполне непрозрачные для видимого света предметы, в частности плотная бумага или ткань, могут оказаться прозрач- ными для инфракрасных лучей. Рекомендую выбрать фольгу или черную изоля- ционную ленту.
    Для градуировки резистора расположите белую плотную бумагу, например ви- зитную карточку, в четырех-пяти дюймах (то есть на расстоянии 10-12 см) от излучателя и приемника и осторожно перемещайте движок резистора до тех пор,

    234 Устройства управления роботами пока не произойдет срабатывание детектора — иными словами, пока на дисплее не высветится соответствующее сообщение. Теперь, когда при движении робота ка- кой-либо объект окажется на этом расстоянии от детектора, на дисплее будет по- являться надпись COLLISION.
    Приведем текст программы irdetect.c:
    «include
    // 17 апреля 2002 - инфракрасный обнаружитель
    //
    // Для индикации используется жидкокристаллический дисплей,
    // подключенный к микроконтроллеру через двухпроводной интерфейс
    // на основе сдвигового регистра
    //
    // Используются прерывания от таймера
    //
    Замечания по аппаратным средствам:
    // Микроконтроллер PIC16F627 работает на частоте 4 МГц.
    // Используется внешний тактовый генератор.
    //
    // Подключение выводов
    // RBO - инфракрасный детектор,
    // RB1 - линия Clock интерфейса жидкокристаллического дисплея;
    // RB2 - линия Data интерфейса жидкокристаллического дисплея;
    // RB3 - выход сигнала.
    // Глобальные переменные и константы:
    RTC = 0; // Счетчик реального volatile char LCDDlay = 20; // Длительность volatile char LCDState
    // Номер текущего состояния
    // конечного автомата.
    static volatile bit Clock static volatile bit ClockTRIS
    static volatile bit Data static volatile bit DataTRIS
    char *
    Указатель на строку выводимого volatile char MessageOuti = 0; // Смещение, указывающее позицию
    // выводимого символа.
    char Message1[2] =
    // Очистка char Message2[11] =
    volatile char Collision
    0; // Сначала никаких объектов поблизости нет.
    volatile char OldCollision = 0;
    // Слово defined(_16F627)
    PIC16F627 with external oscillator selected
    CONFIG(Ox03F61); // Для МК PIC16F627:
    // внешний тактовый генератор XT,
    // RA6/RA7 используются для ввода-вывода,
    // внешний сигнал сброса,
    // таймер включен,
    // сторожевой таймер выключен,
    // защита кода отключена,
    // детектор BODEN включен.

    Подключение к периферийных устройств 235
    «else
    Serror Unsupported selected
    // Служебные
    Nybble, char RS)
    // Запись полубайта в ЖКИ.
    Byte, char RS)
    // Запись байта ЖКИ.
    // Инициализация ЖКИ.
    const LCDString) // Вывод строки на ЖКИ.
    // Обработчик прерываний:
    interrupt tmrO_int(void)
    char temp;
    if
    {
    = 0;
    RTC++;
    // Обработчик прерываний от таймера
    // Сбросить флаг прерываний от таймера
    // Инкремент счетчика реального времени.
    // Здесь можно разместить дополнительный код
    // для обработки прерываний от таймера TMRO.
    // Вывести последовательность импульсов
    // для детектора
    TRISB3 = 0; // Разрешить вывод while (TMRO < 64); // В течение 64 «тиков» таймера.
    if (!RBO)
    Collision = 1;
    else
    // Если уровень низкий,
    // значит обнаружен обьект;
    // в противном случае
    //
    нет.
    Collision = 0;
    TRISB3 = 1; // Запретить вывод
    // Конечный автомат для ЖКИ:
    { // В зависимости от текущего состояния:
    case 1: // Начать инициализацию ЖКИ.
    if (--LCODlay == 0)
    break; // Ждать 20 мс.
    case 2: // Шаг 2.
    LCDNybble(Ox003, 0);
    LCDDlay = 5;
    case 3: // Ждать выполнения команды.
    if
    LCDDlay == 0)
    LCDState++;

    236 Устройства управления роботами break;
    case 4:
    LCDNybble(Ox003, 0); // Шаг 3.
    LCDState++;
    break;
    case 5:
    LCDNybble(Ox003, 0); //
    4.
    break;
    case 6:
    0); // Шаг 5.
    LCDState++;
    break;
    case 7:
    LCDByte(Ox028, 0); // Шаг 6.
    LCDState++;
    break;
    case 8:
    LCDByte(Ox008, 0); // Шаг 7.
    LCDState++;
    break;
    case 9:
    LCDByte(Ox001, 0); // Шаг 8.
    LCDDlay
    // Ждать 5
    break;
    case 10: // Ждать выполнения команды.
    if
    0)
    LCDState++;
    break;
    case
    LCDByte(Ox006, 0); // Шаг 9.
    break;
    case 12:
    0); //
    10.
    LCDState = 0; // Все готово.
    break;
    case 100: // Вывод сообщения.
    switch (temp =
    {
    case
    // Конец сообщения?
    LCDState = 0;
    0;
    break;
    case
    // Очистка дисплея.
    LCDByte(Ox001, 0);
    LCDState++;
    LCDDlay = 5;
    break;
    case 254: // Команда?
    if
    =
    == 0)
    LCDState = 0;
    else {
    if (temp < 4) {
    LCDState++;
    LCDDlay = 5;

    . Подключение к микроконтроллеру периферийных устройств 237 0);
    }
    break;
    default: // Обычные символы.
    1);
    } // Конец внутреннего оператора break;
    case 101: // Message Delay if (--LCDDlay == 0)
    LCDState--;
    break;
    } // Конец внешнего оператора switch.
    } // Конец оператора if.
    // Здесь можно разместить другие обработчики прерываний.
    > // Конец обработчика прерываний.
    // Главная программа:
    void
    OPTION = OxOD1; //
    работает с таймером
    // коэффициент деления равен 4.
    = 0; // Начальный
    THRO.
    TOIE = 1; // Разрешение прерываний от таймера TMRO.
    = 1; // Разрешение обработки прерываний.
    // Инициализация к которому подключен
    // Здесь можно проинициализировать другие периферийные устройства.
    = 13;
    CCP1CON = 00000001111;
    // Ширина импульсов - 50% периода.
    // Включить модуль
    PR2 = 26; // При частоте 38 кГц период равен 26 мкс.
    = 0; // Сброс таймера
    T2CON =
    // Включение таймера
    // коэффициент
    1:1.
    while (1 1) { . // Бесконечный цикл.
    // Здесь можно код биологического уровня.
    if (Collision != OldCollision) {
    = Collision;
    // Сохранить текущее
    // состояние if (Collision)
    // Вывести else while (LCDState); // Ждать готовности ЖКИ.
    } I/ Конец главной программы.
    Когда вы закончите эксперименты с этим устройством, не разбирайте так как оно вам понадобится при разработке следующих двух проектов.

    238 Устройства управления роботами
    1   ...   15   16   17   18   19   20   21   22   ...   33


    написать администратору сайта