Устройства управления роботами, схемотехника и программирование (М. Предко, 2004). Устройства управления роботами, схемотехника и программирование. Устройствауправления роботамисхемотехника и микроконтроллеров picmicro
![]()
|
ГЛАВА 1 ИСПОЛЬЗОВАНИЕ МИКРОКОНТРОЛЛЕРОВ В АВТОМАТИКЕ Работая над этой книгой, среди сведений, доступных в сети Internet, я собрал информацию о более чем 360 различных примерах применения микроконтролле- ров при разработке автоматических устройств, чтобы выяснить, как они устрое- ны, как управляются, какие периферийные устройства при этом используются. Оказывается, подавляющее большинство автоматических устройств управляется с помощью микроконтроллеров. Исследуя схемы и листинги программ, я обнару- жил, что многие проекты могли бы быть существенно улучшены, если бы их раз- работчики с должным вниманием отнеслись к проектированию и программиро- ванию управляющего устройства. Но прежде чем обсуждать программирования микроконтроллеров для управления роботами, хотелось бы сделать шаг назад и немного поговорить о са- мих микроконтроллерах и их основных характеристиках, которые имеют решаю- щее значение при проектировании управляющих В этой главе представлена базовая информация о микроконтроллерах и рассмот- рены основные критерии, по которым следует выбирать микроконтроллер для управления автоматическими устройствами. 1.1. УПРАВЛЕНИЕ РОБОТОМ Заглянув в любой справочник по электронным компонентам, вы обнаружите огромное количество различных устройств (и не обязательно однокристальных), которые производители называют контроллерами или микроконтроллерами (МК). Пытаясь выявить общие черты, присущие всем этим устройствам, можно заметить, что единственный объединяющий их признак - обеспечение преобра- зования входных сигналов в выходные согласно заданному алгоритму. Вы може- те возразить, что это слишком широкое определение - так и амебу можно назвать гуманоидом только потому, что она тоже питается и размножается; но в приве- денном определении есть одна которую следует осознавать при рассмот- рении задач управления подвижными автоматическими устройствами. Чтобы Использование микроконтроллеров в автоматике 19 Рис. Простейшая схема управления роботом проиллюстрировать этот момент, рассмотрим схему робота, в задачу которого входит поиск источника света (рис. 1.1). Здесь использован нормально замкнутый контакт (НЗК) - микропереключа- тель, который размыкает цепь, если робот натыкается на какой-нибудь предмет. В таком случае оба двигателя выключаются. Каждый из двух фотодиодов при освещении генерирует электрический ток, который подается на базу соответству- ющего транзистора, управляя током, текущим через левый и правый двига- тель. Левый фотодиод управляет правым двигателем, и наоборот. Чем больший ток генерирует левый фотодиод, тем больший ток протекает через обмотки пра- вого В результате робот поворачивает в более освещенном направле- нии. Эта простая схема очень похожа на те, что использовались для управления самыми первыми экспериментальными роботами. Если оба фотодиода освещены одинаково, то оба двигателя работают на одном и том же токе, и робот будет двигаться по прямой в направлении источника света. Когда он наткнется на источник света, микропереключатель выключит оба двига- теля. Чем ближе робот находится к источнику (или чем ярче тот светит), тем бы- стрее движется робот. Это происходит потому, что при увеличении яркости воз- растает число фотонов, вызывающих протекание тока через фотодиоды, - как следствие, увеличивается ток базы обоих транзисторов и, соответственно, ток эмиттера, к которому подключен каждый двигатель. Скорость робота в момент столкновения с источником может оказаться слишком большой - тогда произой- дет авария. Описанная схема может считаться контроллером робота, поскольку обеспечи- вает заранее определенный алгоритм его движения. Она подходит под приведен- ное выше определение контроллера: по состоянию двух входных датчиков фор- мируются два выходных сигнала управления двигателями. Однако это устройство не может быть запрограммировано в полном смысле этого слова; например, с его помощью нельзя обеспечить постоянную скорость движения робота. Чтобы изме- нить алгоритм управления, надо переделать саму схему. Чтобы схема управления была программируемой, она должна уметь выполнять некоторое количество заранее определенных операций, причем подразумевается возможность с помощью входных сигналов изменять последовательность их 20 Устройства управления роботами выполнения, подобно тому как с помощью программы мы задаем последователь- ность команд, выполняемых микропроцессором персонального компьютера. Вот почему использование компьютера для управления нашим роботом - иде- альное решение проблемы регулирования скорости движения. Например, можно измерять ток фотодиодов с помощью аналого-цифрового преобразователя (АЦП), который будет преобразовывать напряжение на резисторе, подключенном к фо- тодиоду, в цифровой код, понятный компьютеру. Последовательно с микропере- ключателем следует включить дополнительный резистор, чтобы сформировать еще один входной сигнал для компьютера. Когда переключатель замкнут, напря- жение на нем равно нулю (сигнал низкого уровня), а при его размыкании благо- даря резистору, подключенному к положительной шине источника питания, бу- дет сформирован сигнал высокого уровня. Измененная схема показана на рис. 1.2. Рис. 7.2. Компьютер в качестве управляющего устройства Приведем код программы, которая реализует тот же алгоритм управления, что и раньше, но при этом поддерживает максимальную скорость движения: void while (Whisker Collision) { // До if = MaximumSpeed; else // Уменьшить скорость вращения двигателя. RightMotor = LeftLightSensor; if (RightLightSensor >= MaximumSpeed) LeftMotor = MaximumSpeed; else // Уменьшить скорость вращения двигателя. LeftMotor = RightLightSensor; . } // Конец цикла. RightMotor .= 0; LeftMotor = 0; // Выключить оба двигателя. Если требуется изменить алгоритм управления, приведенный код нетрудно модифицировать. Утверждение, что компьютер может управлять роботом, не следует понимать слишком буквально. Для этой задачи лучше подходят специальные устройства, которые будут рассмотрены ниже. Использование микроконтроллеров в автоматике 21 1.2. ОСНОВНЫЕ КОМПОНЕНТЫ УСТРОЙСТВ УПРАВЛЕНИЯ Для обеспечения работы современных микропроцессоров или микроконтролле- ров необходимо небольшое число дополнительных элементов. К счастью, их не слишком много, поэтому при разработке контроллера можно не беспокоиться о том, что из-за них возрастут габаритные размеры всего устройства или потребляемая от источника питания мощность. Однако следует принимать в расчет несколько важных обстоятельств. Как уже говорилось, необходимо с самого начала процесса проектирования сформулировать и учитывать в дальнейшей работе требования к контроллеру, иначе все устройство окажется недолговечным, или микроконтроллер не сможет обеспечить заданный алгоритм управления, или устройство управления просто не поместится внутри робота. Источником питания для всех подсистем подвижного робота обычно служит встроенная батарейка или аккумулятор. Иногда используются фотогальвани- ческие элементы, но тогда энергия должна запасаться в конденсаторах или ак- кумуляторах, прежде чем подаваться на электронную схему. В этом случае мощ- ности источника питания часто хватает всего на несколько секунд, за которые робот успевает совершить несколько судорожных движений. Такое поведение от него часто и ожидается. Некоторые роботы используют для движения бензи- новый двигатель и имеют небольшой генератор для вырабатывания электричес- кой энергии, необходимой для работы электронных подсистем. И солнечные батареи, и бензиновый двигатель применяются реже, чем обычная батарейка или аккумулятор. При выборе элемента питания необходимо учитывать, какую мощность по- требляют двигатель робота и другие периферийные устройства. Часто использу- ют два источника питания: один для двигателя, а другой для электронных схем. Это позволяет снизить помехи по цепям питания, которые возникают в момент включения/выключения двигателей. Тем не менее я предпочитаю использовать для питания один комплект батарей. Если конструкция небольшая, таким обра- зом можно снизить стоимость и размер робота. На пути уменьшения стоимости и веса конструкции разработчика ждет приятный сюрприз. Чем меньше масса ро- бота, тем меньшей может быть мощность двигателя, а вместе с тем его стоимость, размер и мощность, потребляемая от источника питания. Следовательно, для него может использоваться менее мощная и более легкая батарейка. А это еще более удешевит всю конструкцию и позволит применить еще менее мощный двигатель. И так далее. Описанный эффект позволяет создать недорогого робота с минимально воз- можными размерами и массой. Только не слишком увлекайтесь, иначе робот не сможет выполнять заданные функции из-за того, что окажется слишком легким и слабосильным. Разработчик может использовать щелочные, никель-кадмиевые или кислот- ные аккумуляторы. При выборе элемента питания следует учитывать: • размер и вес робота; • требуемое напряжение питания; 22 Устройства управления роботами • время «жизни» робота; • скорость его движения; • стоимость; • время зарядки аккумулятора. Элементы различного типа вырабатывают разные напряжения: угольные эле- менты - около В, щелочные - 1,7 В и более, никель-кадмиевые аккумуляторы - 1,2 В. Как показано на рис. 1.3, напряжение аккумуляторов по мере их разряда почти не уменьшается, в то время как у одноразовых батареек оно линейно убы- вает со временем. Время службы 25% 50% 75% 100% Рис. напряжения по мере разряда батареи Необходимо помнить, что важный параметр любого источника питания - его внутреннее сопротивление. Чем оно больше, тем меньше энергии достается дви- гателю, потому что значительная ее часть расходуется внутри источника. При этом из-за нагрева ухудшаются его характеристики (напряжение и емкость и, соот- ветственно срок службы). Кроме того, при большом внутреннем сопротивлении источника питания увеличиваются броски напряжения при включении/выклю- чении двигателей, поэтому необходимо применять более сложные схемы фильт- рации напряжения. Бытует мнение, что выгоднее покупать дешевые угольные батарейки, чем бо- лее дорогие щелочные или никель-кадмиевые, потому что и первые, и последние имеют практически одинаковую емкость (параметр, измеряемый в ампер-часах). Это так, но не стоит злоупотреблять использованием в устройствах дешевых элементов: они обычно имеют повышенное внутреннее сопротивление. Замечу, что этот параметр всегда указывается в справочных данных на любые элементы питания. Использование микроконтроллеров в автоматике 23 Проблема, связанная с внутренним сопротивлением, проиллюстрирована на рис. 1.4. Комплект батарей является источником питания для контроллера и дви- гателя. Внутреннее сопротивление каждого элемента можно учесть с помощью резистора, включенного последовательно с источником. Его сопротивление рав- но сумме внутренних сопротивлений всех элементов питания, включенных по- следовательно друг с другом. Согласно закону Кирхгофа, сумма напряжений, па- дающих на элементы замкнутой цепи, равна электродвижущей силе (проще говоря, напряжению) источника питания. Поэтому напряжение на нагрузке (кон- троллере и двигателе) тем меньше, чем больше напряжение, падающее на резис- торе. Но последнее при фиксированном токе нагрузки возрастает с увеличением сопротивления резистора. Рис. источника питания Самое низкое внутреннее сопротивление у щелочных батареек и никель-кад- миевых аккумуляторов, специально предназначенных для работы при высоких токах нагрузки. никель-кадмиевые аккумуляторы, вы- пускаемые для дистанционно управляемых моделей, имеют очень низкое внутрен- нее сопротивление и могут быть приобретены вместе с зарядным устройством по умеренной цене. После выбора элементов питания можно приступить к проектированию регу- лятора и стабилизатора напряжения. Обычно для этого используют микросхему 78(L)05. Если имеется только один комплект батарей для питания двигателя и контроллера, то приходится использовать преобразователь напряжения, по- скольку эти два устройства требуют существенно разных напряжений питания. В некоторых случаях вообще можно отказаться от регулятора напряжения, взяв несколько элементов питания, включенных последовательно, чтобы обеспечить требуемое напряжение от 2,5 до 6,0 В. В любом случае необходимо позаботиться о фильтрации напряжения питания и подключить между положительной и отрицательной шинами источника два конденсатора: емкостью по крайней мере 10 мкФ (он будет обеспечивать 24 Устройства управления роботами фильтрацию низкочастотных помех) и второй емкостью около 1 нФ или меньше (для фильтрации высокочастотных помех). В некоторых случаях не помешает катушка индуктивности, включенная последовательно с источником питания. Для сброса микроконтроллера (выработки сигнала RESET) обычно использу- ются простейшие цепи. Часто достаточно подключить внешний резистор между входом сброса и положительной шиной источника питания (Vcc) или массой (GND). Некоторые микроконтроллеры сами сбрасываются в исходное состояние, если напряжение питание опускается ниже установленного предела. Другие чипы имеют встроенную схему формирования сигнала сброса, срабатывающую, когда напряжение питания достигает заданного уровня. Даже если используемый мик- роконтроллер и не поддерживает таких возможностей, в любом случае несложно построить схему на нескольких транзисторах, которая будет вырабатывать сиг- нал сброса. У многих микроконтроллеров вход сброса используется также и для мирования. Для включения режима программирования обычно необходимо по- дать на этот вход повышенное напряжение. Поэтому схема формирования сигна- ла сброса должна проектироваться так, чтобы формируемое ею напряжение никогда не превысило уровней питания Vcc или Vdd. Следует учитывать и повышенные механические нагрузки, которые должна выдерживать схема управления роботом по сравнению со схемами, находящими применение в обычных компьютерах. Поэтому следует обратить внимание на осо- бенности построения генератора тактовых импульсов. Обычно для тактирования используется схема, показанная на рис. 1.5 генератор). Здесь для задержки сигнала между инвертором и схемой управления предназначена RC-цепочка. Похожая схема часто встроена в микро- контроллер - тогда не требуется никаких дополнительных внешних элементов (в некоторых случаях используется внешний резистор, являющийся частью RC- цепи и задающий частоту генерации). Преимущества описанного тактового гене- ратора - дешевизна и работоспособность при колебаниях напряжения питания. Рис. тактовых г Использование микроконтроллеров в автоматике 25 К недостаткам следует отнести частотную нестабильность. К тому же для релак- сационной схемы частоту генерации нельзя прогнозировать точнее, чем ±10%. Обычно большой точности и не требуется, но если необходимо обеспечить асин- хронный обмен информацией между двумя электронными схемами, то именно точность тактового генератора стать решающим фактором. Иногда в схеме тактовых генераторов используют кварцевые резонаторы, но они не так устойчивы к механическим воздействиям и дороже, чем керамические резонаторы. Те и другие подключаются к контроллеру сходным образом (рис. 1.6). Рис. керамического Многие кварцевые резонаторы имеют встроенную емкость, которая упрощает схему. При подключении керамического резонатора к микроконтроллеру следует использовать соединения минимально возможной чтобы избежать иска- жений сигнала при передаче, а также наводок от соседних цепей. Следует учитывать, что кварцевые резонаторы обеспечивают наибольшую точ- ность по частоте генерации - до 0,01%, в то время как керамические резонаторы - от 0,5 до 2,0%. Обычно точности последних более чем достаточно для реализации межпроцессорных коммуникаций, но в некоторых электронных схемах требуется использование кварца. Наконец, последний компонент, который предстоит рассмотреть, - выключа- тель питания. О нем часто (и незаслуженно!) забывают: то ли разработчик дума- ет, что пользователь будет вынимать батарейки из робота каждый раз, когда захо- чет его выключить, то ли считает, что управляющая программа настолько хороша, что сама выключает питание двигателей, пока робот не используется. Существует хороший способ выключения питания робота - я называю его «большая красная кнопка» (БКК). Без БКК пользователь может забыть, что робот остался включен- ным после того, как он натолкнется на какое-нибудь препятствие и из-за этого перестанет двигаться. Не забывайте о выключателе. Иначе ваш робот может вдруг начать двигаться в самый неподходящий момент, из-за воздействия какой-нибудь случайной помехи — и слетит с полки. 26 Устройства управления роботами 1.3. ПАМЯТЬ И УСТРОЙСТВА ВВОДА-ВЫВОДА Разрабатывая контроллер для робота, вы должны четко осознавать все требова- ния, которые предъявляет контроллер к системе памяти, а также понимать, каким способом программа загружается в эту память. Кто-то может подумать, что кон- троллер программируется раз и навсегда, но это не так. Во время разработки и отладки управляющего алгоритма перепрограммирование приходится произво- дить десятки раз; кроме того, оно необходимо для модернизации устройства и/или алгоритма управления. Можно выделить два типа запоминающих устройств. Память первого типа - энергонезависимая, называемая также постоянной (ПЗУ - постоянное запомина- ющее устройство, ROM - Read Only Memory). В ней хранится программа, управ- ляющая роботом, она не стирается при выключении питания. Если вы знакомы с персональными компьютерами, вас может удивить тот факт, что программа хра- нится в ПЗУ. Однако не забывать, что у робота нет дисковода или жест- кого диска для хранения программ и данных. Как только робот включается, он должен немедленно начать выполнять свою программу. В отсутствии дисков есть своя положительная черта: нет необходимости в дис- ковой операционной системе и интерфейсе прикладных программ (API - Appli- cation Programming Interface). Впрочем, тут есть и подвох: многие низкоуровне- вые функции, выполнение которых обычно обеспечивает операционная система, приходится программировать самостоятельно. Для универсальных ЭВМ это боль- шой недостаток, но автономные роботы с нестандартным аппаратным интерфей- сом - другое дело: ведь широкий набор функций API в большинстве случаев не используется в полной мере. Память для хранения программы может быть встроенной в микроконтроллер или внешней. В устройствах, описанных в этой книге, будет использоваться пер- вый вариант. Перечислим основные виды ПЗУ: • масочное ПЗУ. Память этого вида не может быть перепрограммирована, по- этому используется только при серийном производстве; • программируемое ПЗУ (PROM — Programmable ROM) может быть запро- граммировано лишь один раз путем выжигания перемычек внутри кристал- ла, поэтому такая память в настоящее время уже почти не используется; • память с произвольной выборкой (RAM - Random Access Memory, она описана ниже) является энергозависимой, так как теряет записанную в нее информацию при выключении питания, однако современные КМОП микросхемы потребля- ют настолько малый ток (микроамперы), что в комплекте с батарейкой микро- схема RAM может в течение долгого времени выполнять роль ПЗУ; • в большинстве контроллеров используются перепрограммируемые микро- схемы памяти (EPROM - Erasable PROM). Информация, записанная в них, может быть удалена с помощью ультрафиолетовых лучей (такие микросхемы Использование микроконтроллеров в автоматике 27 имеют на корпусе кварцевое - см. рис. 1.7). Некоторые микросхемы этого типа не имеют окна для стирания и называются однократно програм- мируемыми (ОТР - Programmable); современные контроллеры используют так называемую Flash-память - Electrically Erasable ROM), в которой старая информация стирается с помощью электрического напряжения без использования ультрафиолето- вых лучей. На рис. 1.8 показано, как устроена ячейка Flash-памяти. Плаваю- щий затвор полевого транзистора может заряжаться или разряжаться с по- мощью управляющего электрода. Когда он заряжен, в кремниевой подложке образуется зона проводимости, которая позволяет электрическому току про- текать между выводами стока и истока. Рис. 1.7. Керамический корпус с окном для стирания информации Кремниевая подложка Рис. Ячейка Существует небольшая разница между микросхемами EEPROM и Flash-памятью. В первом случае можно адресовать любую ячейку, а во втором - стирание происхо- дит сразу для всего блока, образованного группой соседних ячеек памяти. Благодаря тому что цепи стирания не дублируются для каждой ячейки, а являются общими для всего блока, Flash-память оказывается несколько дешевле, чем EEPROM. Обычное стекло задерживает ультрафиолетовое излучение. - Прим. 28 Устройства управления роботами Для того чтобы запрограммировать микросхему EPROM, Flash или EEPROM, необходимо на ее входы подать программируемые данные, а также (в определен- ной последовательности) специальные управляющие сигналы согласно алгорит- му программирования. Для различных микросхем этот алгоритм обычно разный. Данные могут записываться микросхему памяти либо за битом), либо (несколько разрядов одновременно). Для программиро- вания каждой ячейки может требоваться время от сотен микросекунд до десятков миллисекунд. Вся микросхема программируется, таким образом, за несколько минут или даже несколько секунд. Для записи данных в микросхемы EPROM, Flash или EEPROM выпускается множество программаторов; кроме них существует немало радиолюбительских конструкций. На сайте издательства www.dmk.ru. а также на моем сайте www.myke.com можно найти драйвер и схему разработанного мною простого про- грамматора Flash-памяти, которая используется в микроконтроллерах PIC. Этот программатор похож на десятки других устройств, которые обычно описываются на радиолюбительских страничках в сети Internet. Коммерческие разработки от- личаются от любительских более широким набором программируемых микро- схем, а также тем, что могут работать в автономном режиме (без использования компьютера или других устройств). При выборе программатора необходимо убе- диться, что он распознает формат файлов, которые генерирует используемая вами среда разработки программ (IDE). Наконец, память второго типа - это уже упоминавшаяся память с ной выборкой (RAM, называемая также оперативной, ОЗУ). Она используется для хранения данных, которыми манипулирует программа. И чтение, и запись дан- ных в этом случае происходят - никакого программатора не требуется. Однако память RAM является энергозависимой, поэтому при выключении пита- ния даже на короткое вся записанная в нее информация теряется. Обычно выделяют два вида микросхем RAM - динамическую (DRAM) и ста- тическую (SRAM). Для хранения данных в большинстве персональных компью- теров используется DRAM; в последнее время это обычно так называемая син- хронная DRAM (SDRAM), позволяющая увеличить быстродействие компьютера. Из-за того что ячейки (S)DRAM быстро разряжаются, их приходится перио- дически (обновлять записанную в них информацию). Зачастую на это уходит до 5% всего времени работы компьютера. Тем не менее память (S)DRAM очень широко применяется благодаря своей низкой удельной стоимо- сти (в расчете на каждый бит хранимой информации). Что касается микроконтроллеров, в них чаще применяют статическую (SRAM). Каждая ячейка SRAM состоит из четырех-шести транзисторов, как показа- но на рис. 1.9. Преимущество SRAM состоит в том, что в режиме хранения данных она потребляет очень маленький ток и не требует никакой регенерации. Но по своим размерам каждая ячейка статической памяти в несколько раз больше дина- мической. Память SRAM часто содержится внутри микроконтроллера, но обычно ее ем- кость невелика - иногда всего несколько десятков байт. Кроме того, вы не долж- ны забывать, что сама программа хранится в другом месте - в ПЗУ. Это необычно Использование микроконтроллеров в автоматике 29 Рис. Ячейка статической памяти для программиста, привыкшего работать с персональными компьютерами, в ко- торых память программ и память данных обычно не разделяются. Чтобы не ис- пользовать слишком много памяти RAM, советую, во-первых, снизить до мини- мума количество и длину текстовых строк в вашей программе, а во-вторых, стараться хранить их в ПЗУ вместе с программой. Как бы то ни было, несмотря на небольшой объем RAM в микроконтроллерах, вы без труда сможете разрабаты- вать довольно сложные программы управления роботом. 1.4. ПРЕРЫВАНИЯ Я нередко поражаюсь тому, как много дипломированных инженеров и компью- терных специалистов обычно боятся использовать прерывания в своих разработ- ках. Причину, вероятно, следует искать в их первых, не всегда удачных опытах программирования прерываний, а может, и в невежестве преподавателей. По мо- ему мнению, прерывание - наиболее естественный способ реализации поведения робота на верхнем (биологическом) уровне. Использование прерываний избавляет разработчика от программирования многочисленных циклов опроса датчиков и уменьшает вероятность того, что вход- ные данные окажутся потерянными. Кроме того, благодаря прерываниям можно проще и точнее обеспечить точную синхронизацию событий, происходящих в системе. Поэтому во всех примерах, приведенных в данной книге, я использовал по крайней мере одно прерывание - по таймеру. На рис. 1.10 показано, происходит обработка прерывания. Можно выде- лить шесть этапов этого процесса: 1. Выполняется основная программа, прерывания 2. Приходит запрос на прерывание (interrupt request) от аппаратуры. 3. Выполнение основной программы приостанавливается, содержимое регистров процессора сохраняется в специальном месте. Выбирается так называемый век- тор прерывания - адрес программы, которая должна его обрабатывать. 4. Запускается программа обработки прерывания (interrupt handler). В самом начале ее выполнения обычно запрещаются все другие прерывания. 30 Устройства управления роботами ( 2 ) Получен запрос на прерывание от аппаратуры Рис. I. Обработка прерывания 5. Обработка прерывания завершается, значения регистров восстанавливают- ся, разрешается обработка других прерываний. 6. Выполнение передается основной программе. Обработкой прерываний руководит специальное устройство внутри микро- контроллера - контроллер прерываний (interrupt controller). На рис. показа- ны временные диаграммы работы контроллера прерываний в микросхемах Здесь приведен пример передачи управления на вектор 0x0004. Следует помнить, что при обработке прерывания необходимо сбросить сигнал запроса, иначе после его обработки запрос будет продолжать действовать и вместо Рис. Обработка прерывания в микроконтроллерах микроконтроллеров в автоматике 31 возвращения к выполнению основной программы мы рискуем вернуться обратно к обработке этого запроса (см. рис. 1.11). Если сигнал запроса (Interrupt Request Flag) вовремя не сбросить в 0 до возвращения к основной программе, то контролер прерываний «увидит», что флаг запроса IRF все еще продолжает дей- ствовать, и опять передаст управление вектору 0x0004. Теперь обсудим, как контроллер различает, откуда пришел запрос и какая про- грамма должна его обрабатывать. В микроконтроллерах PICmicro используется только один вектор прерываний, поэтому достаточно просто определить источ- ник запроса. В больших микропроцессорах (например, в процессоре при- меняемом в IBM PC), существует множество векторов прерываний, запросы на которые могут поступить одновременно. В микроконтроллерах PICmicro нельзя начать обработку какого-либо запроса на прерывание, если еще не завершилась обработка предыдущего. В персональ- ных компьютерах такое возможно. Программа обработки прерывания должна быть максимально простой и вы- полняться как можно быстрее, ведь при обработке запроса мы не знаем, как скоро появится следующий. Чтобы уменьшить вероятность того, что какому-либо за- просу придется слишком долго ждать своей обработки, намного проще обеспечить быструю обработку запросов, чем усложнять контроллер прерываний. В начале этого раздела упоминалось о том, с какой опаской многие разработ- чики используют прерывания в своих программах, а также подчеркивалось, как важно понимать организацию обработки прерываний при разработке автомати- ческих устройств. Надеюсь, все, что здесь сказано, не отпугнет вас от использова- ния прерываний в ваших конструкциях; в конце концов, программирование пре- рываний на языке высокого уровня - не такая уж сложная задача. Чтобы не быть голословным, приведу простой пример программы обработки пре- рывания, которая будет использоваться во многих проектах, описанных в этой книге: // Процедура обработки прерываний от таймера void interrupt { if // Если есть переполнение счетчика таймера, TOIF = 0; // то сбросить флаг запроса на прерывание. RTC++; // Инкремент счетчика (один "тик" таймера). Модификатор interrupt в заголовке показывает, что далее следует процеду- ра обработки прерывания. Она будет запускаться на выполнение каждый раз, когда контроллер получит запрос на обработку прерывания. Затем проверяется источник запроса (условный оператор if). Если прерывание запрошено тайме- ром TMRO, то необходимо сбросить сигнал запроса (TOIF = 0) и увеличить на единицу счетчик «тиков» таймера. Разумеется, приведенный пример слегка упрощен, но при добавлении к напи- санному коду новых функций общая структура обработчика прерываний не из- меняется. В главе 4 будет показано, как используются прерывания для реализации функций механического и электронного уровней, как при этом можно избежать применения 32 Устройства управления роботами низкоуровневого ассемблера, а также - и это самое важное - как использование прерываний позволяет обеспечить простое и эффективное управление роботом. t 1.5. ПЕРИФЕРИЙНЫЕ УСТРОЙСТВА МИКРОКОНТРОЛЛЕРОВ Во всех микроконтроллерах есть некоторое количество встроенных устройств ввода-вывода (УВВ), к которым можно обращаться при разработке программ. У про- стейших микроконтроллеров имеется только порт цифрового ввода-вывода и тай- мер; более сложные чипы поддерживают возможность ввода и/или вывода анало- говой информации. Цифровые порты используются чаще всего. На рис. приведен пример циф- рового УВВ, имеющегося в микроконтроллерах 8051 фирмы Intel. Здесь вывод микроконтроллера работает как вход, если нижний транзистор закрыт. Верхний транзистор приоткрыт и используется для «подтягивания» потенциала входной линии до положительного напряжения источника питания, поэтому на отключен- ном от внешних устройств входе действует сигнал высокого уровня. Если внеш- нее устройство подает на вход микроконтроллера сигнал низкого уровня, то при этом вход соединяется с массой при помощи низкого внутреннего сопротивления источника входного сигнала, который поэтому легко «побеждает» не до конца открытый верхний транзистор и не мешает установлению на входе напряжения низкого уровня. Рис. Параллельный порт ввода-вывода в микроконтроллерах 8051 Когда вывод должен работать в качестве выходного и необходимо установить сигнал низкого уровня, открывается нижний транзистор. Он включен по схеме с открытым стоком, поэтому не может самостоятельно обеспечить на выходе на- пряжение высокого уровня. Для этого используется верхний транзистор. Во многих микроконтроллерах, в том числе PICmicro, порты ввода-вывода снабжены специальным устройством, имеющим три логических состояния. Его схема приведена на рис. 1.13. Благодаря тому что выходной сигнал снимается с буферного элемента (изображен в виде треугольника), а не с выхода регистра, Использование микроконтроллеров в автоматике 33 Разрешение записи в регистр Разрешение чтения из порта Рис. схема порта ввода-вывода в микроконтроллерах микроконтроллер при чтении из порта, в который только что записал данные, всегда может «узнать», не изменило ли внешнее устройство уровень напряжения на данном выводе. Как уже говорилось, некоторые микроконтроллеры могут вводить или выво- дить аналоговые сигналы. Эта возможность чрезвычайно полезна, например, если робот должен контролировать уровень громкости звука или яркость источника света. Однако прежде, чем вы займетесь проектированием управляемого го- лосом, позвольте заметить, что задача не столь проста, как может показаться на первый взгляд, и многочисленные команды специалистов потратили не один миллион долларов, пытаясь ее решить. Впрочем, построить робота, реагирующе- го на простые звуки (вроде хлопка в ладоши), не так уж сложно. Иногда порты ввода-вывода используют для того, чтобы расширить возмож- ности микроконтроллера, подключив к его внутренней шине внешние блоки ROM и/или RAM. Кроме того, один микроконтроллер может служить внешним устройством для другого. В этом случае, например, один контроллер выполняет функции механи- ческого и электронного уровней, а второй обеспечивает управление на биологи- ческом уровне. Сопряжение контроллеров облегчается тем, что многие модели имеют встроенные интерфейсы ввода-вывода, например интерфейс PC (Inter- Intercomputer Communications). Большое значение для автоматических устройств имеет наличие внутренних таймеров. С их помощью обеспечивается программирование сложных протоколов обмена информацией между различными устройствами, а также выполнение за- данной последовательности действий с необходимыми задержками во времени. Обычно счетчик таймера постоянно работает, периодически увеличивая свое зна- чение, пока не достигнет максимально возможного; затем он снова сбрасывается в нулевое состояние. В этот момент может быть выработано прерывание или сге- нерирован специальный выходной сигнал. Для расширения функциональных возможностей многих таймеров предусмотрены дополнительные делители часто- ты - так называемые и (prescaler и postscaler). 34 Устройства управления роботами (предварительный делитель) выполняет деление входной частоты сигнала, посту- пающего на таймер, а делает то же самое для выходного сигнала тай- мера, вырабатываемого в момент его переполнения. Оба делителя, использован- ные вместе или по отдельности, позволяют расширить рабочий интервал таймера. В большинстве микроконтроллеров имеются встроенные средства, обеспечи- вающие их сопряжение с компьютером. Чаще всего в этих целях используются NRZ-кодирование сигнала to Zero - кодирование без возврата к нулю) и интерфейс, основанный на стандартных протоколах RS-232 или RS-485. Кроме этого, некоторые микроконтроллеры поддерживают интерфейсы: • (Serial Peripheral Interface) - последовательный периферийный интер- фейс; • PC; • CAN (Common Automotive Network); • USB (Universal Serial Bus) — универсальная последовательная шина. Приложив немного старания, вы всегда найдете микроконтроллер, который имеет интерфейс, необходимый для вашего устройства. Например, порывшись в сети Internet, я без труда отыскал микроконтроллеры, имеющие: • контроллер управления шаговым двигателем; • контроллер управления двигателем постоянного тока; • контроллер управления однофазным двигателем переменного тока; • контроллер управления трехфазным двигателем переменного тока; • выходной видеосигнал в стандарте NTSC (National Television Standards Com- mittee); • аудиовход и выход; • контроллер LCD (Liquid Crystal Display - жидкокристаллический дисплей); • интерфейс с клавиатурой и мышью персонального компьютера. Хотя некоторые из этих возможностей и не так уж важны для мобильного авто- матического устройства, однако бывают ситуации, в которых без них не обойтись. 1.6. ПОДКЛЮЧЕНИЕ УСТРОЙСТВА УПРАВЛЕНИЯ К РОБОТУ После того как разработчик выбрал микроконтроллер и решил, какие операции он будет выполнять, можно, наконец, заняться подключением микроконтроллера к остальным подсистемам робота. Это та граница, за которой кончается идеаль- ный мир программирования и начинается реальная действительность с ее броска- ми питания, разрядившимися батареями, вибрациями и электромагнитными на- водками от других электрических устройств. Разработчик должен учитывать все эти помехи. К счастью, современные микроконтроллеры весьма устойчивы ко всем меша- ющим факторам, что облегчает их использование в автоматических устройствах. Пожалуй, самая трудная задача - сопряжение микроконтроллера со всеми пери- ферийными устройствами, входящими в состав робота. Использование в автоматике 35 Несколько советов, приведенных ниже, помогут вам обеспечить надежное функ- ционирование микроконтроллера и упростят разработку электрического интер- фейса между контроллером и периферийными устройствами. Практически во всех случаях, когда для разрешения проблем возникает необходимость в пошаго- вой отладке управляющей программы, разработчик должен четко оделить функ- ционирование самого контроллера от интерфейсной части, обеспечивающей его сопряжение с периферийными устройствами. В первую очередь необходимо удостовериться в надежном функционировании устройств, обеспечивающих работу микроконтроллера питания, так- тового генератора, схемы формирования сигнала сброса). Если в вашем распоря- жении имеется осциллограф, следует удостовериться, что все сигналы имеют пра- вильную форму и не слишком искажены из-за шумов и переходных процессов в цепях. Нелишне соблюдать следующие правила: • при разработке схемы контроллера старайтесь, чтобы длина проводников, по которым подаются сигналы тактирования, была минимально возможной (кроме всего прочего, это позволит снизить наводки на другие части схемы); • убедитесь, что общий провод источника питания надежно подключен к схе- ме и обе шины питания не образуют замкнутых контуров, индуктивность ко- торых может стать источником помех из-за электромагнитных наводок; • в идеале источник питания контроллера должен быть изолирован от двига- телей робота и располагаться как можно дальше от них; • если различные блоки работают от разных источников питания, то следует убедиться, что общий провод («земля») каждого источника надежно соеди- нен с другими; замечу, что обычно выгоднее использовать несколько источ- ников, расположенных поблизости к тем блокам, для питания которых они предназначены, чем предусматривать в своей разработке один большой блок питания (кроме всего прочего, такой подход позволяет решить многие про- блемы с прокладкой шин, особенно между частями конструкции, которые должны двигаться относительно друг друга); • для снижения потребляемой мощности и уменьшения переходных процессов полезно снижать тактовую частоту контроллера до приемлемых значений. Как правило, такая экономия не слишком существенна, но можно назвать случаи, когда контроллер потребляет значительную мощность, сравнимую с мощнос- тью остальных его подсистем; • желательно, чтобы все электронные блоки работали от 5-вольтового источ- ника питания - фактически это значение является стандартным для логи- микросхем (кроме того, элементы более устойчивы к по- мехам, чем, например, 2,5- или • используйте только многократно программируемый контроллер и распола- гайте его на специальном разъеме (socket), из которого он при необходимо- сти может быть легко извлечен. Следует помнить, что в результате отладки своей конструкции вы не раз захотите изменить код программы, и лучше заранее позаботиться о том, чтобы каждое такое изменение не требовало лишнего времени и усилий. |