СХЕМЫ---->
Полезная схемотехника. статьи № 1-50
Аналоговое управление в микроконтроллерном устройстве.
А. ДОЛГИЙ, г. Москва
При конструировании микроконтроллерного устройства нередко возникает необходимость плавно изменять какой-либо параметр, например, частоту вращения двигателя, температуру, поддерживаемую термостабилизатором, порог срабатывания охранного устройства и многое другое. Способов сделать это цифровыми методами известно довольно много. Однако все они довольно сложны как в аппаратном (для ввода цифрового значения требуются кнопки, клавиатура, валкодер и другие подобные средства), так и в программном отношении. Чтобы сохранить установленное значение при выключенном питании, приходится прибегать к его записи в энергонезависимую память.
С точки зрения удобства пользования предпочтительно использовать для регулировки обыкновенный подстроечный или переменный резистор, преобразовав снимаемое с него напряжение в код. Однако усложнять ради этого разрабатываемое устройство, вводя в него АЦП, вряд ли целесообразно. Другое дело, если микроконтроллер (например, PIC12F675) имеет встроенный преобразователь. Тогда, как говорится, нет проблем.
К сожалению, АЦП есть далеко не во всех микроконтроллерах. Но и для них простое решение поставленной задачи существует — достаточно подключить переменный резистор по схеме, показанной на рисунке, к одной из двунаправленных линий порта ввода/вывода. В приведенной в таблице программе для микроконтроллеров серии PIC16 предполагается, что использован младший разряд порта В (RB0). Номиналы элементов, указанные на схеме, оптимальны при частоте тактового генератора микроконтроллера 4 МГц.
Первый после начала работы программы вызов процедуры ONESHOT — холостой. Он нужен лишь для установки высокого логического уровня на линии RB0. Благодаря этому к следующему вызову той же процедуры конденсатор C1 зарядится почти до напряжения питания.
С началом работы процедуры линия RB0 переключается на ввод и конденсатор C1 разряжается через переменный резистор R2. В цикле, начинающемся меткой TSX, программа периодически контролирует логический уровень на
входе RB0, одновременно подсчитывая в регистре N число проверок. Как только конденсатор разрядится до такой степени, что будет зафиксирован логический ноль, произойдет переход на метку READY проверки прекратятся, а подпрограмма завершится переключением линии RB0 в режим выхода и установкой на ней высокого уровня.
Накопленное в результате работы процедуры ONESHOT число в регистре N находится в интервале 0...254 и определяется формулой
где f0 — частота тактового генератора микроконтроллера. Число в знаменателе дроби может немного отличаться от указанного. Оно зависит от порога переключения использованного вывода конкретного экземпляра микросхемы. Если постоянная времени R2C1 больше допустимой, число N принимает значение 255.
Резистор R1 ограничивает зарядный ток конденсатора С1. Чтобы конденсатор успевал зарядиться полностью, интервал времени между вызовами процедуры ONESHOT должен в три-четыре раза превышать постоянную времени R1C1. Обычно это не вызывает затруднений — достаточно выполнять между вызовами несколько машинных команд.
Если вместо переменного резистора R2 применить термо- или фоторезистор, результат работы процедуры ONESHOT — число N — станет зависимым соответственно от температуры
или освещенности чувствительного элемента. Ничто не мешает заменить резистор R2 и преобразователем любой другой физической величины в сопротивление или ток.
Иногда необходимо включить переменный резистор R2 или заменяющий его элемент не так, как показано на рисунке, а между выводом порта микроконтроллера и плюсом источника питания. В этом случае достаточно немного модифицировать процедуру ONESHOT, заменив в ней команду btfss PORTB,0 на btfsc PORTB,0, a bsf PORTB,0 на bcf PORTB,0.
Описанный способ аналогового управления применим и к микроконтроллерам других семейств. А например, в [1] переменный резистор был подключен к выводу порта адаптера параллельного интерфейса КР580ВВ55 для управления "перехватчиком" в одноименной игре для компьютера "Радио-86РК".
Аналогичный способ преобразования "сопротивление—код" применен в адаптере игрового порта компьютера IBM PC [2] для получения информации о положении рукоятки джойстика.
ЛИТЕРАТУРА
1. Долгий А. Компьютерные игры. Перехватчик. — Радио, 1987, № 2, с. 23, 24.
2. Кармызов А. Интерфейсы IBM PC. — Радио, 1996, № 11, с. 24—26.
|