Устройства управления роботами, схемотехника и программирование (М. Предко, 2004). Устройства управления роботами, схемотехника и программирование. Устройствауправления роботамисхемотехника и микроконтроллеров picmicro
Скачать 6.79 Mb.
|
конфигурации , Внутренний тактовый генератор, RA6/RA7 используются для ввода-вывода, BODEN включен, WDT выключен, сигнал сброса внешний Внутренний генератор, RA6/RA7 используются для ввода-вывода, BODEN и включены, сигнал сброса внешний Внешний тактовый генератор XT на 4 МГц, BODEN включен, выключен, сигнал сброса внешний Внешний тактовый XT на 4 МГц, BODEN и включены, сигнал сброса внешний 90 Устройства управления роботами Микроконтроллеры PICmicro имеют специальные регистры для управления периферийными устройствами: OPTION, TMRO, PORT и др. Регистр INTCON позво- ляет управлять работой системы прерываний, а так называемый регистр флагов хранит специальные признаки (флажки), необходимые для выполнения команд процессора и некоторых периферийных функций. Карта адресного пространства микроконтроллеров PICmicro разделена на об- ласти - банки (см. рис. 3.26), и за исключением некоторых регистров (таких как INTCON) все перечисленные регистры могут быть доступны при работе только с определенными банками памяти. При разработке программ в некоторых случаях может пригодиться знание одной особенности МК PICmicro: при чтении информации из несуществующих регистров возвращаются нулевые значения 0x000. Адреса физически не суще- ствующих регистров на карте памяти (см. рис. 3.26) выделены серым цветом. Ра- зумеется, бесполезно пытаться записать в любой из этих регистров какое-либо ненулевое значение. Для записи информации в периферийные устройства, подключенные к мик- роконтроллеру, и для чтения информации из этих устройств используются пор- ты ввода-вывода. Каждый вывод микроконтроллера, применяемый для этих це- лей, может быть запрограммирован либо на ввод, либо на вывод сигналов. Нагрузочная способность в режиме выхода составляет 20 На рис. 3.27 показана структурная схема устройства, управляющего работой одной линии порта ввода-вывода. Чтение порта Рис. 3.27. Стандартный порт ввода-вывода микроконтроллеров PICmicro Каждому выводу микроконтроллера, который может работать в режиме вво- да-вывода информации, соответствует один бит специального регистра, который доступен для программирования. Эти регистры в программе именуются по прин- ципу вместо знака % указывается латинская буква (А, В и т.д., в зависимо- сти от числа имеющихся портов ввода-вывода), а вместо знака # — любая цифра от 0 до 7 (номер бита соответствующего регистра). Таким образом, восемь линий ввода-вывода соответствуют одному 8-разрядному регистру. Например, RB3 обо- значает третий разряд порта В. Микроконтроллеры PICmicro 91 В некоторых компиляторах требуется указывать имена в формате или расшифровка знаков % и # та же. Для управления портами ввода-вывода предназначены специальные регистры TRIS (для порта А управляющий регистр называется TRISA, для порта В - TRISB и т.д.). При включении питания все биты регистров TRIS устанавливаются в 1. Это означает, что все линии ввода-вывода находятся в режиме ввода информации. Если программист, например, запишет 0 во второй бит регистра TRISA, то линия микроконтроллера перейдет в режим вывода информации. Аналогичное пра- вило действует и для всех остальных линий. Если заметить, что цифра 0 напоми- нает букву О (Output - вывод), а цифра 1 - букву I (Input - ввод), то легко запом- нить, как программируется тот или иной режим. Для обращения к регистрам TRIS действует то же правило именования, что для портов ввода-вывода: все имена имеют формат TRIS%#. Например, чтобы запрограммировать вывод RB2 микроконтроллера для работы в качестве выход- ного и вывести на него сигнал высокого в программе на языке С следует = 0; // Линия RB2 переведена в режим выхода. RB2 = 1; // На выводе сигнал высокого уровня. Кроме поразрядного доступа и регистры и сами порты ввода-вывода поддерживают побайтный режим. Схема на рис. 3.27 хорошо иллюстрирует еще одну особенность микроконтрол- леров PICmicro: если какой-либо вывод запрограммирован на работу в качестве входного, то при обращении к соответствующему порту будет прочитано значе- ние сигнала, действующее на внешнем выводе микроконтроллера, а не то, кото- рое, возможно, было записано в этот порт ранее. Некоторые микроконтроллеры других фирм способны поддерживать два ре- жима, и программист может сам выбрать, какие данные будут читаться при обра- щении к портам ввода-вывода: те, что были записаны в этот порт, или те, что определяются сигналами, действующими на внешних выводах контроллера. А дру- гие МК могут иметь два разных адреса для одного регистра - тогда при обраще- нии по одному адресу можно прочитать значение, записанное в этот регистр ра- нее, а при обращении по другому адресу узнать, какой сигнал действует на внешнем выводе контроллера. Для МК PICmicro это не так. Часто у разработчиков возникают проблемы при работе с выводом RA4 (рис. 3.28). Этот вывод управляется полевым КМОП транзистором с открытым стоком (ОС), поэтому для нормальной работы этот вывод (или несколько соединен- ных между собой таких же выводов с открытым требуется подклю- чать к положительной шине источника питания через резистор сопротивлени- ем 1-10 кОм. В противном случае этот порт не может обеспечить вывод сигнала высокого уровня. Другие выходы, не имеющие третьего состояния или открытого стока (коллектора), соединять друг с другом нельзя ни в коем случае. — Прим. 92 Устройства управления роботами Триггер Чтение порта Рис. 3.28. Организация порта RA4 В режиме ввода информации линия проходит через специальный элемент с гистерезисом - так называемый триггер Шмитта, который имеет различные пороги переключения при переходе входного сигнала с низкого уровня на высо- кий и с высокого уровня на низкий (рис. 3.29). В результате обеспечивается по- давление помех, величина которых не превышает расстояния между этими двумя уровнями. Передний фронт Задний фронт Рис. 3.29. Два уровня срабатывания триггера Шмитта Разработчику надо иметь в виду описанную особенность входа не следует пытаться подключать к нему RC-цепи, например, чтобы состояние по- тенциометра. В этом случае из-за наличия триггера Шмитта сигнал (0 или 1), воспринимаемый микроконтроллером при одном и том же положении движка потенциометра, будет зависеть от того, куда двигается в данный момент этот дви- жок - в сторону увеличения или уменьшения уровня сигнала. Выходные линии порта В микроконтроллеров PICmicro среднего семейства также имеют свою особенность: к некоторым из них подключены специальные транзисторы, «подтягивающие» (pull-up) выходное напряжение на этих линиях к напряжению положительной шины питания (рис. 3.30). Такие транзисторы (ис- пользуемые в качестве управляемых сопротивлений) можно отключать с помо- щью специального бита _RPBU регистра OPTION. Если этот бит сброшен в нуле- вое состояние и внешний вывод запрограммирован на работу в качестве выходного, то для него режим «подтягивания» включен. Изменение входного сигнала на линиях порта В может быть использовано для срабатывания системы прерываний. Обычно такой режим применяется для вы- вода RBO INT, который используется в качестве входа запроса на прерывание, при условии, что установлен бит INTE регистра INTCON. Запрос вырабатывается по Микроконтроллеры PICmicro 93 Чтение порта Рис. 3.30. «Подтягивание» выходного напряжения переднему или заднему фронту импульса на этом выводе (то есть при изменении уровня напряжения с низкого на высокий или с высокого на низкий). Активный переход (положительный или отрицательный) выбирается с помощью бита INTEDG регистра Если этот бит установлен в 1, то запрос на прерывание вырабатывается по положительному фронту входного сигнала (при изменении уровня сигнала на входе RBO / INT с низкого на высокий), а если сброшен в 0 - то по отрицательному фронту (при изменении уровня с высокого на низкий). Лично я предпочитаю использовать для формирования сигнала запроса схему, показан- ную на рис. 3.31. Рис. Схема для формирования запроса на прерывание После того как запрос на прерывание будет подтвержден процессором, необ- ходимо сбросить флаг INTF регистра INTCON, чтобы разрешить обработку следу- ющих запросов, которые могут поступить на вход / INT. Следует помнить, что сигнал запроса на прерывание проходит через триггер Шмитта, между тем как в режиме обычного ввода-вывода линия не обладает гистерезисом. Поэтому поведение входа может несколько отличаться от работы остальных линий порта В. Существует еще один способ формирования сигнала прерывания. Если уста- новить в 1 бит RBIE регистра INTCON, то при любом изменении уровня сигнала на линиях RB4 - RB7 будет генерироваться запрос на прерывание. При каждом 94 Устройства управления роботами таком запросе будет устанавливаться в единичное состояние флаг регистра INTCON. Следует сначала прочитать текущее состояние порта В, после чего мож- но сбросить флаг Запрос на прерывание при изменении состояния входных сигналов выраба- тывается только для линий RB4 - RB7 и только если они находятся в режиме ввода информации. Когда любая из этих линий запрограммирована на вывод данных, то изменение сигнала на этом выводе уже не может служить источни- ком запроса. Программисту следует воздержаться от выполнения операций чтения из пор- та В, если его входные линии работают в качестве источников прерываний. В этой книге мы будем использовать прерывания для реализации функций механического и электронного уровней. Это позволит нам без лишних усилий разрабатывать достаточно эффективный код для управления роботами. Уже в следующей главе мы узнаем, как программируется обработчик прерываний на языке Lite. В микроконтроллерах PIC16F627 для управления системой прерываний слу- жит регистр INTCON, имеющий адрес ОхОВ. Он доступен из любого банка памяти. Назначение битов этого регистра для всех микроконтроллеров среднего семейства практически одинаково. Бит GIE должен быть установлен в 1, если мы хотим, чтобы процессор не иг- норировал любые запросы на прерывание. На критичных участках программы, ко- должны быть выполнены максимально быстро (поэтому нежелательно, что- бы процессор отвлекался на обработку прерываний), программист должен сбросить бит GIE в 0. Этот бит сбрасывается, например, в начале любой процеду- ры обработки прерываний. В конце процедуры обработки бит GIE снова устанав- ливают. Имена других управляющих разрядов регистра INTCIN также заканчиваются символом Е (enable - разрешение). Если бит разрешения установлен, то прерыва- ния соответствующего типа разрешены. Как только происходит прерывание это- го типа, то устанавливается специальный флажок - другой разряд регистра INTCON, имя которого заканчивается символом F (flag). Анализ этих флагов по- зволяет обработчику прерываний определить источник запроса. Флажки не сбра- сываются автоматически при обработке прерывания - программист должен сам позаботиться о том, чтобы записать в них нулевые значения. Но в момент очистки флага запрос на прерывание уже не должен действовать. В табл. 3.7 показано назначение каждого бита регистра INTCON. После получения запроса на прерывание процессор, закончив выполнение оче- редной команды, начинает процедуру обработки прерывания. На выполнение Для формирования сигнала запроса на прерывание при изменении уровней сигналов на входах RB4 - RB7 текущее состояние каждого из этих входов сравнивается с соответствующим битом, защелкну- тым в регистре порта В при выполнении последней операции чтения из этого порта. Если не выпол- нить операцию то записанное в регистр значение будет неопределенным и не сможет гаран- тировать, что следующий запрос на прерывание произойдет при первом же изменении состояния входного сигнала. Этим объясняется также рекомендация не выполнять никаких операций чтения из порта В, если разрешены прерывания по входам RB4 - RB7. — Прим. перев. Микроконтроллеры PICmicro 95 Таблица Назначение разрядов регистра управления системой прерываний INTCON Номер бита 7 6 5 4 3 2 } 0 Имя GIE PEIE TOIE RBIE TOIF INTF RBIF Назначение Общее разрешение прерываний Разрешение прерываний от периферийных устройств Разрешение прерываний при переполнении таймера Разрешение прерываний по входу Разрешение прерываний при изменении сигналов на входах порта В Флаг активности прерывания от таймера TMRO Флаг активности прерывания по входу RBO/INT Флаг активности прерывания при изменении сигналов на входах порта В одной машинной команды в микроконтроллерах PICmicro требуются один-два командных цикла (каждый такой цикл длится четыре периода работы тактового генератора). С учетом еще двух циклов, необходимых для вызова процедуры об- работки прерывания, получается, что время реакции на запрос (interrupt latency) составляет три-четыре командных цикла. МК PIC16F627, как и многие другие микроконтроллеры PICmicro среднего семейства, имеет только один вектор пре- рывания с адресом На рис. 3.32 показано, как происходит обработка запроса на прерывание. Сохранение PC, загрузка PC = 4 и переход на процедуру обработки прерывания Рис. 3.32. Обработка запроса на прерывание Итак, используя регистр INTCON, можно управлять тремя источниками запро- сов на прерывание. Разряды соответствуют прерыванию от таймера TMRO (запрос формируется, когда счетчик таймера переполняется, то есть стано- вится равным 0x0100). Вторым источником запроса может стать сигнал на входе RBO/INT. Наконец, запрос на прерывание может вырабатываться при изменении сигналов на входных линиях порта В. Но существуют и другие возможные источники запросов на прерывание. Они управляются специальными регистрами PIE1 и PIR1. Каждый разряд регистра PIE1 (табл. 3.8) содержит бит разрешения прерываний от источника соответству- ющего типа, а каждый бит регистра PIR1 (табл. 3.9) - флаг активности этого пре- рывания. 96 Устройства управления роботами Таблица 3.8. Назначение разрядов регистра PIE1 микроконтроллера Номер бита 7 6 5 4 3 2 1 0 Имя EEIE RCIE TXIE - Назначение Разрешение прерываний при записи в Разрешение прерываний от компаратора Разрешение прерываний от USART при приеме Разрешение прерываний от USART при передаче Не используется (читается 0) Разрешение прерываний от ССР Разрешение прерываний при переполнении таймера TMR2 Разрешение прерываний при переполнении таймера 3.9. Назначение разрядов регистра PIR1 микроконтроллера PIC16F627 Номер бита Имя Назначение EEIF Флаг прерывания по окончании записи в EEPROM данных 6 5 4 3 2 1 0 RCIF TXIF - CCP1IF TMR1 IE прерывания от Флаг прерывания от приемника USART Флаг прерывания от передатчика USART Не используется 0) Флаг прерывания от модуля ССР Флаг прерывания по переполнению таймера TMR2 Флаг по переполнению таймера Заметим, что назначение разрядов этих регистров может быть различным у разных МК PICmicro. Поэтому за точными данными следует обращаться к до- кументации. Специальный регистр PCON может использоваться для чтения или записи ин- формации, характеризующей частоту тактирования микроконтроллера, а так- причину его последнего сброса. Назначение битов этого регистра поясняется в табл. 3.10. Таблица Назначение разрядов регистра PCON Номер бита Имя 7-4 3 OSCF 2 1 _POR 0 Назначение Не используются Частота тактирования: / — внутренний на 4 МГц или внешний резистор, определяющий частоту генерации; 0-37 кГц (режим низкой мощности потребления) Не используется 0 - сброс произошел при включении питания; должен быть программно установлен в 7 0 — последний сброс произошел при понижении напряжения питания; должен быть программно установлен в 1 Микроконтроллеры 97 Иногда полезно проверять состояние бита _POR: если он сброшен в 0, это зна- чит, что микроконтроллер перезапустился после падения напряжения питания; следовательно, надо перезарядить аккумуляторы. Другая возможная причина - резкое возрастание тока, потребляемого двигателями, например, если робот стол- кнулся с каким-либо препятствием. Нестабильное питание или большие электромагнитные наводки от других устройств могут стать причиной неправильной работы микроконтроллера. В ре- зультате не исключено зависание программы. Для борьбы с этим используется таймер (Watch-Dog Timer - WDT): он формирует сигнал сброса, если микроконтроллер перестал правильно выполнять свою программу. Обычный период работы WDT составляет 18 мс. Если за это время ни разу не выполнится команда то он вызовет сброс микроконтроллера. Структурная схема сторожевого таймера показана на рис. 3.33. Генератор им- пульсов управляет работой цифрового счетчика, сигнал переполнения которого подается на управляемый делитель частоты. Это еще один счетчик, отличающийся от первого тем, что величину его модуля счета можно изменять программно. С по- мощью программист может указать, какой по счету импульс переполне- ния первого счетчика вызовет, наконец, генерацию сигнала сброса. Можно выби- рать значение коэффициента деления от 1 до С учетом этого период работы сторожевого таймера составляет от 18 мс до 2,3 с. Если сторожевой таймер вызыва- ет сброс микроконтроллера, то сбрасывается бит _ТО регистра состояния STATUS. |