ПРОЕКТИРУЕМ УСТРОЙСТВА НА МИКРОКОНТРОЛЛЕРАХ (Часть 1)
М. ГЛАДШТЕЙН, г. Рыбинск
Между первоначальным замыслом создания устройства на базе микроконтроллера (МК) и разработкой его программы есть важный этап - составление блок-схемы алгоритма. О нем нередко забывают или, что еще хуже, им пренебрегают. Программирование ведется "эвристически", по существу, - методом проб и ошибок. Результат - кое-как работающая громоздкая программа, не до конца понятная даже ее создателю, и плохо поддающаяся модернизации. Однако давно известны и используются программистами достаточно простые методы, позволяющие, начав со словесной формулировки алгоритма, грамотно спроектировать его блок-схему. Профессиональные интересы автора статьи лежат в области разработок на МК серии 28, но излагаемый им материал в равной мере относится и к МК других типов.
Взаимодействие любой МК-системы с оператором и объектом управления можно представить показанной на рис. 1 схемой [1]. В общем случае объект управления снабжен исполнительными устройствами и датчиками. Человек-оператор воздействует на МК с помощью задающих устройств и получает информацию о состоянии объекта из показаний устройств индикации. Первые представляют собой переключатели, кнопки, переменные резисторы, вторые - световые (в том числе графические и буквенно-цифро-вые) индикаторы, звукоизлучающие и другие сигнальные устройства.
Все показанные на схеме функциональные узлы и связи обязательны лишь в комплексных диалоговых системах контроля и управления. В так называемых разомкнутых системах управления МК работает "вслепую", не получая никакой информации о состоянии объекта. Иногда он даже не выдает оператору никаких сведений о работе (как своей, так и объекта), особенно? если имеется возможность оценивать результаты управления, наблюдая за самим объектом. В замкнутых системах управления МК корректирует управляющие воздействия на объект в зависимости от показаний датчиков, но устройства индикации не обязательны и здесь. Системы контроля не содержат исполнительных устройств, а с помощью задающих оператор лишь выбирает контролируемые параметры или переключает режимы работы индикаторов.
Методика проектирования систем на МК [2, 3] включает в себя постановку и анализ задачи, ее инженерную интерпретацию, разработку блок-схемы алгоритма и текста прикладной программы. В подобных системах максимальное число функций стремятся возложить именно на программные средства. От эффективности их реализации зависят в конечном счете требуемый объем памяти, быстродействие и надежность работы системы в целом. Конечно, предстоит еще разработка принципиальной схемы и самой конструкции изделия, но их мы коснемся лишь в мере, необходимой для разработки программы МК.
Постановка задачи - это словесная формулировка требований к проектируемой системе. Прежде всего описывают ее назначение, характеристики объекта управления, датчиков, индикаторов, исполнительных и задающих устройств. Далее следует подробно рассказать о желательном поведении системы во всех возможных ситуациях, в том числе "нештатных". Ни в коем случае нельзя полагаться на безошибочные действия оператора. Например, услышав аварийный сигнал, он вполне может вместо предписанной кнопки "СТОП" нажать на кнопку "СТАРТ" или беспорядочно нажимать на все кнопки подряд. Конечно, все подобные ситуации предвидеть невозможно, но к этому нужно стремиться. Обязательно следует задать численные значения параметров проектируемой системы.
Вначале задачу формулируют, как правило, "на уровне пользователя". Например, исходное задание на разработку системы управления вентилятором может звучать так: "Включать и выключать вентилятор, регулировать интенсивность воздушного потока и изменять его направление (вытяжка/нагнетание)". Инженерный анализ сведет эту задачу к управлению скоростью и направлением вращения привода вентилятора - электродвигателя постоянного тока. Поскольку мощность выходных сигналов МК заведомо недостаточна для непосредственного управления двигателем, между ними придется установить специальное устройство-драйвер, формирующее сигналы нужной мощности, а задача, решаемая МК, ограничится подачей управляющих воздействий на драйвер.
Не будем подробно останавливаться на выборе силовых элементов управления, датчиков и устройств их сопряжения с МК. Сегодня для этих целей выпускаются специализированные микросхемы, применять которые гораздо эффективнее, чем строить систему из дискретных компонентов.
Предположим, что будет применен интегральный драйвер электродвигателя постоянного тока LMD18200 фирмы National Semiconductor. Типовая схема его включения показана на рис. 2. Он содержит мост из мощных МОП-транзисторов, в диагональ которого включают двигатель.
Управляют драйвером с помощью трех логических сигналов. На вход PWM (Pulse Width Modulation - широтно-импульсная модуляция, ШИМ) подают прямоугольные импульсы, от отношения длительности которых к периоду повторения (коэффициента заполнения) зависит частота вращения двигателя. Логическим уровнем сигнала на входе DIR (direction - направление) задают полярность напряжения, подаваемого на двигатель, следовательно, направление его вращения. Установив уровень лог. 1 на входе BR (brake - тормоз), двигатель останавливают, причем, если в это время на входе PWM лог. О, цепь питания двигателя окажется просто разомкнута, в противном случае выводы двигателя будут еще и соединены между собой, что обеспечит экстренное торможение.
В драйвер встроены два датчика. Один из них генерирует ток, вытекающий из вывода CUR (current - ток) и пропорциональный току двигателя с коэффициентом 377 мкА/А. Выход датчика температуры TF (Thermal Flag - флаг температуры) - дискретный с открытым коллектором. Он переходит в состояние лог. О, если кристалл драйвера нагрелся выше 145'С.
Сформулируем требования к устройству управления электродвигателем вентилятора, а по существу, - драйвером двигателя.
Устройство управления должно быть снабжено кнопками, нажимая на которые оператор (пользователь) сможет включать и выключать двигатель, изменять направление, увеличивать и уменьшать частоту его вращения. Должна быть предусмотрена индикация направления вращения двигателя световыми сигналами разного цвета и звуковая сигнализация об аварии (перегреве или перегрузке).
После подачи напряжения питания устройство должно, не включая двигатель, ожидать команду, задающую направление вращения. Ее получение следует подтвердить световым сигналом. По команде "ПУСК" двигатель должен быть включен и начать вращаться в заданном направлении со средней частотой (коэффициент заполнения сигнала PWM = 0,5). По командам "МЕДЛЕННЕЕ" и "БЫСТРЕЕ" коэффициент заполнения должен соответственно уменьшаться или увеличиваться, не выходя за пределы 0.2...1. Команда "СТОП" должна немедленно останавливать двигатель, после чего его можно вновь запустить, подав команду "ПУСК".
В случае превышения допустимого значения потребляемого тока, что может быть следствием, например, механического заклинивания вала двигателя, последний нужно выключить и подать прерывистый звуковой сигнал частотой 1000 Гц в виде коротких посылок (длительность их и пауз между ними 1 с). При перегреве микросхемы необходимо остановить двигатель и подать звуковой сигнал длинными посылками (длительность посылок и пауз 2 с). Звуковая сигнализация должна оставаться включенной до тех пор, пока оператор не подаст команду "СТОП", возвращающую устройство в исходное состояние. До подачи такой команды оно не должно реагировать ни на какие другие.
Уже на этом этапе следует абстрагироваться от подробностей, несущественных для разработки программы МК Например, в данном случае не имеет значения то, что объект управления (двигатель) служит приводом вентилятора, от направления его вращения зависит тип вентиляции (вытяжная или приточная), а от частоты - интенсивность потока воздуха. Более того, разрабатывая алгоритм, можно вообще забыть о двигателе и его драйвере, сосредоточившись на формировании управляющих сигналов PWM, DIR, BR и обработке сигналов датчиков CUR и TF.
Анализируя сформулированную задачу, желательно сразу выявить некоторые проблемы, которые неизбежно проявят себя на следующих этапах. Например, должна ли система реагировать на команду "ПУСК", если направление вращения предварительно не задано? Если да, то в каком направлении должен вращаться двигатель в подобном случае? Должны ли сохраняться заданные частота и направление вращения после остановки и повторного пуска двигателя? А после устранения аварийной ситуации? На все подобные вопросы необходимо ответить как можно раньше.
Исходя из словесного описания, составляют списки входных и выходных сигналов МК В первый из них включают команды, подаваемые оператором, и сигналы датчиков: "ВЫТЯЖКА", "НАГНЕТАНИЕ", "ПУСК", "БЫСТРЕЕ", "МЕДЛЕННЕЕ", "СТОП", "ПЕРЕГРУЗКА" (CUR), "ПЕРЕГРЕВ" (TF). Во второй - сигналы управления драйвером двигателя и индикаторами: PWM - частота вращения, DIR - направление вращения, BR - выключить двигатель, G -включить зеленый светодиод, Y -включить желтый светодиод, S - звук.
С учетом сказанного можно сделать предварительный вывод о том, что требуется МК, имеющий не менее 14 выводов для подключения внешних цепей (восемь входов и шесть выходов) Поскольку сигнал CUR - аналоговый, понадобится компаратор для сравнения показаний датчика с допустимым значением и формирования логического сигнала "ПЕРЕГРУЗКА". Поэтому предпочтителен МК, снабженный встроенным компаратором. Пригодна, например, минимальная 18-выводная модификация МК серии Z86. Самый дешевый вариант - микросхема Z86E02. Пока это все, что касается аппаратной части устройства. Распределение входных и выходных сигналов по выводам МК на данном этапе несущественно.
Далее рекомендуется словесно заданный алгоритм изобразить в виде так называемого графа конечного автомата. Дискретное устройство считают конечным автоматом, если удается перечислить все состояния, в которых оно может находиться, все события (внешние воздействия), приводящие к изменениям состояния, и все формируемые выходные сигналы. Именно таковы устройства на базе МК.
Пример графа автомата приведен на рис. 3. Состояния изображены узлами (вершинами) графа. В данном случае их четыре: А, В, С и D. Вершины соединены дугами, снабженными стрелками, показывающими направление перехода. Над дугой указывают событие Xi, вызывающее данный переход, а под ней - набор Yi выходных сигналов, формируемых автоматом в этот момент и не изменяющихся до следующего перехода. Теоретически из каждой вершины графа должно выходить ровно столько дуг, сколько возможно различных внешних воздействий на автомат. Если некоторое событие не изменяет состояния автомата, соответствующую дугу показывают входящей в ту же вершину, из которой она вышла. Однако, чтобы не загромождать чертеж, на практике оставляют только те из подобных дуг, с которыми связаны изменения выходных сигналов. Например, из графа, показанного на рис. 3, можно удалить дуги А-А и В-В. На обычном языке это означает, что автомат в состояниях А и В на событие ХЗ не реагирует.
События, воздействующие на автомат, реализуемый в виде программы МК, бывают не только "прямыми", вызванными изменениями логических уровней сигналов, подаваемых на внешние выводы МК, но и "косвенными". К последним относят, например, определенный результат сравнения вычисленного и заданного значений некоторого параметра или завершение какой-либо длительной операции. Грань между прямыми и косвенными событиями иногда провести трудно. Скажем, такое распространенное событие, как срабатывание встроенного в МК таймера, можно считать косвенным, если фиксировать его, анализируя число, находящееся в соответствующем регистре, или прямым, реагируя на сигнал, генерируемый таймером по окончании счета Выходные сигналы тоже могут быть косвенными, не изменяющими непосредственно логические уровни на выходах МК. Нередко при переходах между состояниями автомата лишь присваивают определенные значения переменным программы.
Возвращаясь к решаемой задаче, построим граф автомата управления двигателем Анализируя задание, можно выделить следующие состояния:
- НАЧАЛО - устанавливается немедленно после включения питания. Выполняются необходимые начальные действия - задаются исходные значения переменных программы и выходных сигналов, настраиваются периферийные устройства. После этого автомат переходит в состояние СТОП1 (хороший пример перехода по косвенному событию - завершению инициализации);
- СТОП1 - автомат входит в него по завершении инициализации или выйдя из аварийной ситуации Выходит по командам, задающим направление вращения двигателя;
- СТОП2 - автомат ожидает команду "ПУСК";
- РАБОТА - основное состояние, устройство генерирует сигнал PWM. Выход по команде "СТОП" или по сигналам аварийных датчиков;
- ПЕРЕГРЕВ, ПЕРЕГРУЗКА - состояния, в которые автомат переходит из состояния РАБОТА в результате срабатывания соответствующих датчиков. Двигатель выключен, устройство генерирует звуковые сигналы. Выход - только по команде "СТОП".
Окончание следует...
Радио 11/2000, с.25-26