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

  • 4.30. ЗВУКОВЫЕ ДАТЧИКИ

  • Синус Амплитуда колебаний Косинус О 90 180 360 О яГрадусыРадианыРис. 4.73.

  • Сумма гармоник Рис. 4.74.

  • Амплитуда (А) Уровень входного сигналаЗависимость уровня выходного .сигнала от частотыЧастотаЧастота срезаРис. 4.75.

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


    Скачать 6.79 Mb.
    НазваниеУстройствауправления роботамисхемотехника и микроконтроллеров picmicro
    АнкорУстройства управления роботами, схемотехника и программирование (М. Предко, 2004).pdf
    Дата29.08.2017
    Размер6.79 Mb.
    Формат файлаpdf
    Имя файлаУстройства управления роботами, схемотехника и программирование .pdf
    ТипРеферат
    #8441
    КатегорияПромышленность. Энергетика
    страница23 из 33
    1   ...   19   20   21   22   23   24   25   26   ...   33
    Рис.
    Схема, позволяющая измерять сопротивление фоторезисторов
    4.72. Схема размещения элементов на макетной плате
    с методами подключения внешней микросхемы АЦП к микроконтроллеру, устрой- ство получилось несколько сложным, и реализовать его не так-то легко.
    Поэтому вернемся к нашему проекту. Исходный текст программы можно най- ти в файле
    // 24 апреля 2002 - фоторезистора, сопротивление которых
    // измеряется с помощью

    274 Устройства управления роботами
    // Для индикации используется жидкокристаллический дисплей,
    // подключенный к микроконтроллеру через двухпроводной интерфейс
    // на основе сдвигового регистра 74LS174.
    //
    // Используются прерывания от таймера каждую миллисекунду.
    //
    // Замечания по аппаратным средствам:
    // Микроконтроллер PIC16F627 работает на частоте 4 МГц.
    // Используется внешний тактовый генератор.
    //
    // Подключение выводов
    // RB1 - линия Clock интерфейса жидкокристаллического дисплея;
    // RB2 - линия Data интерфейса жидкокристаллического дисплея;
    //
    - левый фоторезистор;
    // RB5 - правый фоторезистор.
    // Глобальные переменные и константы:
    RTC = 0; // Счетчик реального volatile
    = 20; // Длительность volatile char LCDState = 1; // Номер текущего состояния.
    static volatile bit Clock static volatile bit ClockTRIS
    static volatile bit Data static volatile bit DataTRIS
    char * MessageOut; // Указатель volatile char
    = 0;
    char
    =
    //
    1 2
    char
    =
    volatile char ADCState = 0;
    volatile char ADCDlay = 1;
    volatile char LeftADC = 0;
    volatile char RightADC = 0;
    на выводимое сообщение.
    // Смещение текущего символа в строке.
    // Перемещение курсора
    // в первую строку.
    34567890123456789
    // Перемещение курсора
    // во вторую строку.
    // Текущее состояние конечного автомата
    // для работы с фоторезисторами.
    // Задержка 1 мс между операциями
    // с фоторезисторами.
    // Сопротивление
    // Сопротивление правого фоторезистора.
    // Слово конфигурации:
    defined(_16F627)
    PIC16F627
    CONFIG(Ox03F61);
    «else
    Unsupported with external XT oscillator selected
    // Для МК PIC16F627:
    // внешний тактовый генератор XT,
    // RA6/RA7 используются для ввода-вывода,
    // внешний сброса,
    // таймер включен,
    // сторожевой таймер выключен,
    // защита кода отключена,
    // детектор BODEN включен.
    selected
    // Служебные
    LCDNybble(char Nybble, char RS)
    // Запись полубайта в

    Подключение к микроконтроллеру периферийных устройств 275
    Byte, char RS)
    // Запись байта в
    // Инициализация ЖКИ.
    LCDOut(char * const LCDString) // Вывод строки на ЖКИ.
    while (LCDState);
    = LCDString;
    LCDState = 100;
    // Ждать готовности ЖКИ.
    // Загрузка выводимой строки.
    // Послать строку на ЖКИ.
    // Обработчик прерываний:
    void interrupt char temp; .
    if
    {
    0;
    RTC++;
    // Обработчик прерываний от таймера TMRO.
    // Сбросить флаг прерываний от таймера TMRO.
    // Инкремент счетчика реального времени.
    // Здесь можно разместить код
    // для обработки прерываний от таймера TMRO.
    // Конечный автомат для ЖКИ:
    // Конечный автомат для работы с
    { // Если нет работы с ЖКИ.
    switch (ADCState) {
    case 0: // Начальная if
    0)
    ADCState++;
    break;
    case
    // Начинаем подачу импульса
    // на обе
    (1 мс).
    TRISB4 0;
    TRISB5 = 0;
    RB4
    = 1;
    RB5
    = 1; •
    // Переход к следующему
    // шагу через 1 мс.
    break;
    case 2:
    TRISB4 = 1; // Закончить подачу
    // импульса на левую RC-цепочку.
    = PORTB; // Разрешить прерывания
    // по изменении сигнала на входе.
    RBIF = 0;
    RBIE = 1;

    276 Устройства управления роботами
    ADCState++;
    break;
    case 3:
    LeftADC = OxOFF;
    temp = PORTB;
    = 0; // Запретить прерывания
    = 0; // по изменении входного
    // сигнала.
    break;
    case 4:
    TRISB5
    // Закончить подачу
    // импульса на правую temp = PORTB;
    RBIF = 0; // Разрешить прерывания по
    R8IE = 1; // изменении входного сигнала.
    ADCState++;
    break;
    case 5:
    RightADC = OxOFF;
    temp = PORTB;
    RBIF = 0; // Запретить прерывания
    RBIE = 0; // по изменении входного
    // сигнала.
    ADCDlay = 10;
    ADCState = 0;
    break;
    } // Конец оператора switch.
    } // Конец оператора if.
    } // Конец обработчика прерываний от таймера.
    //• Здесь можно разместить другие обработчики прерываний.
    if (RBIF) { // Обработка прерываний по изменении входного сигнала.
    {
    case 3: // Работаем с левым фоторезистором.
    LeftADC =
    // Счетчик времени.
    ADCState++;
    break;
    case 5: // Работаем с правым фоторезистором.
    RightADC = TMRO; // Счетчик времени.
    ADCDlay = 10;
    ADCState = 0;
    break;
    } //
    temp = PORTB;
    RBIF =
    // Очищаем флаг и запрещаем прерывания
    RBIE = 0; // по изменении входного сигнала.
    } // Конец обработки прерываний по изменении входного сигнала.
    // Конец обработчика прерываний.
    // Главная программа: ' ,
    void

    Подключение к микроконтроллеру периферийных устройств 277
    unsigned int i, j;
    unsigned int
    OPTION =
    //
    работает с таймером
    // коэффициент деления равен 4.
    THRO = 0; // Начальный оброс таймера TMRO.
    TOIE = 1; // Разрешение прерываний от таймера TMRO.
    GIE = 1; // Разрешение обработки прерываний.
    // Инициализация порта, к которому подключен
    // Здесь можно проинициализировать другие периферийные while (1 == 1) { // Бесконечный цикл.
    // Здесь можно разместить код верхнего уровня.
    while (ADCState != 2); // Ожидаем начала работы
    // с while (ADCState); // Ожидаем окончания работы
    // с фоторезисторами.
    tempLeft = LeftADC;
    =
    // Сохраняем измеренные значения
    // сопротивлений фоторезисторов.
    j = (tempLeft / 8) + 1; // Количество звездочек
    // для индикации состояния левого for (i
    = 2; i < 18; i++ )
    if
    - 2) <= j) // Выводим звездочку на дисплей.
    MessageL[i] =
    else // Выводим пробел.
    =
    j = (tempRight / 8) + 1; // Количество звездочек
    // для индикации состояния правого for (i
    = 2; i < 18; i++ )
    if
    - 2) <= j) // Выводим звездочку на дисплей.
    HessageR[i] = '*';
    else // Выводим пробел.
    = ' ';
    // Состояние левого датчика выводится
    // в первой строке дисплея.
    LCDOut(MessageR); // Состояние правого датчика выводится
    // во второй строке дисплея.
    } // Конец цикла while.
    } // Конец главной программы.
    Для определения времени заряда конденсатора здесь используются прерыва- ния, формируемые при изменении уровня сигнала на входных линиях порта PORTB.
    Многие эксперты не рекомендуют использовать эту возможность микроконтролле- ров PICmicro, но я придерживаюсь противоположного мнения. Многочисленные эксперименты с работающими устройствами показывают, что прерывания по

    278 Устройства управления роботами изменении входного сигнала от внешнего источника достаточно надежны и их ис- пользование не вызывает особых трудностей. Единственное, что при этом требует- ся учитывать, - некоторые особенности программирования:
    • прерывания по изменению уровня сигнала на линиях порта PORTB формиру- ются, только если эти линии работают в режиме входных;
    • во время использования любой линии PORTB в качестве источника прерыва- ний нельзя обращаться ни к одному разряду регистра этого порта (обраще- ние к любому биту требует использования команды, работающей со всеми во- семью разрядами регистра). При необходимости всегда можно использовать служебную переменную для хранения текущего значения данного регистра;
    • для флага прерывания надо использовать следующий код:
    Variable = PORTB; // Запомнили текущее состояние регистра порта
    // в служебной переменной.
    RBIF
    // Очистили флаг прерывания.
    RBIE = 0; // Запретили (если необходимо) прерывания
    // по изменении входного сигнала.
    • следует убедиться, что изменение уровня входного сигнала не произойдет раньше, чем программа окажется готова обработать запрос на прерывание.
    Только из-за того, чтобы удовлетворить этому требованию, мне пришлось ввести в схему два ограничительных резистора R5 и R6, благодаря которым удалось снизить скорость перезаряда конденсаторов.
    После включения питания микроконтроллера программа начинает цикл рабо- ты с фоторезисторами. На обе RC-цепочки подается прямоугольный импульс,
    затем засекается время и разрешаются прерывания по изменению уровня сигнала на входах RB4 и RB5. В момент возникновения прерывания определяется время перезаряда конденсатора и вычисляется значение сопротивления фоторезистора.
    Конечный автомат, реализующий интерфейс с фоторезисторами, начинает свою работу, только если не активен конечный автомат, обслуживающий жидко- кристаллический дисплей. Это сделано для того, чтобы одновременное выполне- ние обоих автоматов не привело к нарушению временных промежутков между отдельными операциями. Для тех же целей в главной программе перед началом вывода на дисплей ожидается завершение работы с фоторезисторами.
    Хотя в нашей новой схеме микроконтроллер получает намного больше инфор- мации об уровне освещенности обоих фоторезисторов, на выполнение всех необ- ходимых для этого операций требуется много времени, и робот может не успеть среагировать на то или иное изменение окружающей обстановки, особенно если скорость его движения достаточно велика.
    В нашей программе один цикл опроса состояния двух фоторезисторов занима- ет 6 мс, что позволяет делать около 330 измерений в секунду. Но большинство современных АЦП работает намного быстрее.

    Подключение к периферийных устройств 279
    4.30. ЗВУКОВЫЕ ДАТЧИКИ
    Использование звукового датчика в электронной схеме не должно представлять особой сложности. У многих роботов часто имеется какое-либо устройство ввода звуковой информации, которое предоставляет пользователю возможность управ- лять ими, хлопая в ладоши или громко произнося команды. В некоторых автома- тических устройствах звуковые сенсоры работают в качестве датчиков столкно- вений (прислушайтесь к звукам, которые раздаются, когда робот сталкивается с предметами). Подключить к микроконтроллеру микрофон, который бы рас- познавать громкие звуки, не так уж сложно, и мы не упустим эту возможность в наших экспериментах.
    Многим сложнее всего понять, что аналоговые сигналы (в том числе и звуко- вые) могут быть представлены в виде суммы множества колебаний разной часто- ты. Обычно для такого разложения используются синусоидальный и косинусои- сигналы (рис. 4.73).
    Синус
    Амплитуда
    колебаний
    Косинус
    О 90 180 360
    О
    я
    Градусы
    Радианы
    Рис. 4.73.
    и
    колебание
    В виде суммы нескольких таких колебаний (их называют гармониками), име- ющих разную частоту и амплитуду, можно представить любой аналоговый нал. Напомним, что синусоидальное колебание описывается формулой вида x(t) = A
    / Т) = A
    где А - амплитуда, Т - период, f =
    - частота колебаний, t - время. Именно по этому закону изменяется координата точки, лежащей на ободе колеса радиусом А
    при его вращении. Когда колесо совершит полный оборот (360°), все будет повто- ряться с самого начала. Говорят, что начался новый период колебания.
    волна сдвинута относительно синусоидальной по фазе на
    90°
    есть на x(t) = A
    = A
    -

    280 Устройства управления роботами
    В электронике фазовый угол колебаний =
    обычно измеряется в радиа- нах. Напомним, что для перевода в радианы величины 9, выраженной в градусах,
    можно воспользоваться формулой j =
    /
    180,
    где число
    3,14159265359. Например, 45° - это
    = 0,7854 рад, а полный обо- рот (360°) - это
    = 6,2832 рад.
    Тактовые импульсы, которые используются в микропроцессорной технике,
    обычно имеют прямоугольную форму. Последовательность прямоугольных им- пульсов называют меандром. Сигнал такого вида не слишком подходит для того,
    чтобы его представляли в виде суммы синусоид и косинусоид. На рис. 4.74 пока- зано, что получится, если сложить три первые в разложении прямо- угольного сигнала, ширина импульса которого равна половине периода. Как мож- но видеть, суммарное колебание не слишком-то совпадает с прямоугольными импульсами. Для более точного представления следует учесть большее количе- ство гармоник.
    Прямоугольные импульсы
    (меандр)
    1-я гармоника
    \
    \
    г
    Сумма
    гармоник
    Рис. 4.74. Гармонический анализ прямоугольных
    Таким образом, складывая несколько синусоидальных и колебаний, можно с достаточной точностью воспроизвести любое аналоговое ко- лебание. При этом частоты суммируемых гармоник всегда кратны частоте самого сигнала. Частота первой гармоники совпадает с частотой сигнала, частота второй
    Если сигнал нечетный, то есть его график антисимметричен относительно оси ординат (в данном примере этого можно добиться, расположив начало отсчета в начале какого-нибудь импульса), то все гармоники будут иметь нулевую амплитуду. Поэтому на рис. 4.74
    ются только синусоидальные гармоники: нулевая (постоянная составляющая, на рисунке не на), первая, основная, гармоника (ее частота совпадает с частотой самого сигнала), вторая (также не показана на рисунке, так как в данном случае ее амплитуда равна 0) и третья гармоника, имеющая частоту, в три раза превышающую частоту сигнала. Следует отметить, что колебания, изображенные на рис. 4.73 и которые буквально воспроизводятся здесь с английского оригинала, только отда- ленно напоминают по форме синусоидальные. - Прим. перев.

    Подключение к микроконтроллеру периферийных устройств 281
    гармоники в два раза больше частоты сигнала и т.д. Чтобы найти амплитуды гар- моник, используют формулы
    — x(t)
    dt;
    =—
    Т
    где а. - амплитуда косинусоид, а - амплитуда синусоид в разложении сигнала;
    интегрирование ведется по любому отрезку, длина которого равна периоду сигна- ла. В этом случае само колебание может быть записано в виде ряда Фурье:
    I
    Например, рассмотренная выше последовательность прямоугольных импуль- сов, длительность каждого из которых равна половине периода, будет представ- лена в виде ряда
    1
    При синтезе сигнала мы должны рано или поздно оборвать бесконечный ряд.
    Чем позже мы это сделаем, тем больше гармоник учтем, и тем точнее будет полу- ченная сумма представлять искомое колебание.
    Но реальна и обратная ситуация: исходный прямоугольный сигнал можно про- пустить через специальный чтобы отсечь одни гармоники и учесть другие.
    Фильтр, который пропускает только несколько первых гармоник, называется
    нижних частот (ФНЧ). Его амплитудно-частотная характеристика
    (АЧХ) представлена на рис. 4.75. Она показывает, во сколько раз ослабляется сигнал определенной частоты.
    В электронике коэффициент усиления или ослабления часто измеряют в де-
    цибелах. Если речь идет о напряжении или токе сигнала, то ослабление в два раза соответствует 6 дБ. Полосу частот, которые пропускает фильтр, оценивают по уровню 3 дБ, что соответствует ослаблению в раз. Другими словами, гра- ница полосы пропускания ФНЧ (так называемая частота среза) - это частота, на которой коэффициент пропускания фильтра падает до 1/1,414 0,707 своей макси- мальной величины.
    Часто для фильтрации сигналов используют так называемые активные
    тры, выполненные на основе операционных усилителей. Один такой пример -
    - показан на рис. 4.76.
    Здесь использованы два резистора с одинаковым сопротивлением R и два кон- денсатора с одинаковой емкостью С. Другие два резистора R1 и R2 задают коэф- фициент усиления схемы. Для дополнительного усиления я часто использую вто- рой каскад на операционном усилителе.

    282 Устройства управления роботами
    Амплитуда
    (А)
    Уровень входного сигнала
    Зависимость уровня выходного .
    сигнала от частоты
    Частота
    Частота среза
    Рис. 4.75.
    характеристика фильтра нижних частот
    Входной сигнал
    Выходной сигнал
    Частота среза f = 1/(2RC)
    Коэффициент усиления = R2 / R1
    4.76. Фильтр
    Если коэффициент усиления достаточно велик, то сигнал на входе фильтра превращается в хороший меандр на выходе. Возможно, вы пришли в недоумение:
    мы начали с того, что раскладывали прямоугольные импульсы на гармоники, за- тем пропускали их через фильтр, чтобы отсечь высокочастотные составляющие,
    а закончили тем, что снова получили прямоугольные импульсы! Но в этом есть смысл. Ведь наша задача состоит не в том, чтобы получить меандр из него самого,
    а в том, чтобы преобразовать произвольное звуковое колебание в низкочастотную синусоиду. При этом, если на вход фильтра вместе со звуковой командой подает- ся какое-либо более высокочастотное колебание (например, шум двигателей), то фильтр его ослабит, насколько возможно.
    Существует большое количество разнообразных фильтров. Кроме ФНЧ, ис- пользуются также
    верхних частот (ФВЧ), полосовые и фильтры. ФВЧ ослабляют сигналы низкой частоты, а пропускают только старшие гармоники (то есть по сравнению с ФНЧ ведут себя противоположным образом).

    Подключение к микроконтроллеру периферийных устройств 283
    Полосовые фильтры пропускают колебания только в определенном диапазоне ча- стот, а фильтры, наоборот, пропускают все частоты, кроме тех, что лежат в некотором диапазоне. Для фильтрации помех в робототехнике обычно ис- пользуются полосовые фильтры и ФНЧ.
    Итак, чтобы робот имел возможность реагировать на звуковые команды или мог обнаруживать по звуку момент столкновения с окружающими предметами,
    разработчик должен определить, в каком частотном диапазоне лежит звуковое колебание, на которое должен реагировать робот. Этот диапазон частот необходи- мо выделить с помощью соответствующего фильтра, чтобы отсеять все остальные звуки.
    Проще сказать это, чем сделать, поэтому многие радиолюбители избегают ис- пользования звуковых датчиков в своих конструкциях. Часто бывает трудно най- ти звуковой диапазон, который отличает команду (или звук при столкновении)
    от посторонних шумов, которые действуют внутри и снаружи автоматического устройства.
    Однако я считаю, что в большинстве практических случаев фильтр Баттервор- та позволяет получить хорошие результаты.
    Чтобы робот как можно меньше реагировал на собственные звуки, надо поста- раться изолировать датчики от его корпуса. Неплохим решением будет и исполь- зование картонного или пластикового конуса, который повысит направленность микрофона.
    Современные операционные усилители слабочувствительны к электрическим помехам. Но работа с аналоговыми сигналами всегда требует осторожности. Вы- ход активного фильтра лучше подключать не к стандартному порту ввода-вывода микроконтроллера, а к входу какого-нибудь счетчика (например, к счетчику тай- мера
    В этом случае проще организовать защиту от дребезга и других па- разитных колебаний.
    1   ...   19   20   21   22   23   24   25   26   ...   33


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