Радио-86РК/Радио 04-88/Программа-мультиметр

Материал из Emuverse
Данный материал защищён авторскими правами!

Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей.

Автор: А. ДОЛГИЙ

Источник: http://retro.h1.ru/RK86/Multim/Multimet.php

Современные измерительные приборы все чаще строят по принципу: преобразователь измеряемой величины в цифровой код — индикаторное устройство — устройство управления — микропроцессорный контроллер. Наличие «разумного» контроллера улучшает многие эксплуатационные и метрологические характеристики прибора. Вычислительные возможности микропроцессоров позволяют использовать косвенные методы измерений, требующие для получения окончательного результата выполнения большого числа математических операций. Новые приборы способны «самостоятельно» учесть и скомпенсировать нелинейность датчиков измеряемой величины. По плечу им и такие функции (требовавшие ранее значительного усложнения схемы прибора, а теперь сравнительно просто реализуемые программно), как автоматический выбор пределов измерения, коррекция погрешностей и калибровка, статистическая обработка результатов нескольких измерений и представление их в наиболее наглядном виде.

В лаборатории радиолюбителя функции контроллера измерительного прибора с успехом может взять на себя РК: управление процессом измерения будет вестись с его клавиатуры, а результаты — выводиться на экран дисплея.

При измерении длительности импульсов или частоты сигнала измерителем может служить сам компьютер. Каждую машинную команду он выполняет за вполне определенное число периодов тактовой частоты (тактов). Подав измеряемый сигнал (преобразованный предварительно в стандартные логические уровни) на один из входов порта ввода и запустив программу, периодически проверяющую состояние этого порта, можно подсчитать число машинных тактов за период сигнала. Умножив это число на длительность такта, нетрудно определить длительность периода, а по нему и частоту сигнала.

Рассмотрим теперь, как составить такую программу. Компьютер «Радио-86РК» выполнен на базе микропроцессора КР580ИК80А. Сведения о числе тактов, требующихся для выполнения команд этим микропроцессором, можно найти, например, в [1]. Длительность одного такта в РК равна 0,5625 мкс, однако измерение интервалов времени осложнено тем, что выполнение машинных команд периодически приостанавливается для пересылки данных из ОЗУ в контроллер дисплея. Данные пересылаются без участия микропроцессора в так называемом режиме прямого доступа к памяти (ПДП). Одновременно с этим процессом происходит и регенерация информации, записанной в динамическом ОЗУ. Контроллер ПДП синхронизирован от того же кварцевого генератора, что и процессор, однако точный учет времени выполнения группы команд в этом случае очень сложен. Поэтому при (формировании и измерении интервалов времени) контроллер ПДП приходится отключать, а регенерацию обеспечивать другими средствами. Именно из-за отключения ПДП гаснет экран дисплея РК при выполнении директив работы с магнитофоном.

Программа, превращающая радиолюбительский компьютер в частотомер-мультиметр, приведена в табл.1. Она написана на БЕЙСИКе и снабжена подробными комментариями (при вводе в РК их, естественно, можно опустить), поясняющими ее работу. Работа с программой очень проста. Достаточно запустить ее директивой RUN, подать на магнитофонный вход компьютера сигнал, частоту или период которого нужно измерить (или выходной сигнал преобразователя «измеряемая величина — частота»), и после каждого нажатия на соответствующую клавишу на экран дисплея будут выводиться измеренные значения.

В основу предлагаемой программы положена подпрограмма в машинных кодах, выполняющая измерение периода сигнала. В табл.2 приведен ее текст на языке АССЕМБЛЕРа. Выполнение подпрограммы начинается с записи в стек содержимого регистров микропроцессора и запоминания значения указателя стека. Затем в ОЗУ формируется массив адресов возврата длиной 128 байт. По окончании формирования указатель стека содержит адрес первой ячейки массива, а в регистр С записывается код 00Н. Подготовительные операции заканчиваются очисткой регистровой пары DE, записью адреса порта ввода, на который поступает измеряемый сигнал, в регистровую пару HL и записью состояния этого порта в аккумулятор.

В цикле, начинающемся меткой М2 и заканчивающемся командой JZ М2, процессор периодически проверяет, не изменилось ли состояние порта. Для сокращения длительности цикла (это важно для увеличения верхней границы диапазона измеряемых частот и повышения точности измерения) здесь и далее не анализируется, в каком именно разряде порта произошло изменение. Поэтому безразлично, на какой именно разряд порта подан сигнал, лишь бы состояния других разрядов за время измерения не менялись. В описываемом варианте предполагается, что сигнал подан на вход, предназначенный для подключения магнитофона, то есть на порт С микросхемы D20 компьютера.

Как только состояние порта изменилось, выполняются команды, запрещающие работу контроллера ПДП, и происходит переход к метке Ц2, с которой начинается цикл измерения. Здесь вновь проверяется состояние порта. Если оно не отличается от прежнего, записанного в регистре В, то команда RZ считывает из массива адресов возврата адрес команды, отмеченной меткой Ц2. В результате выполняется переход, и цикл повторяется с периодом в 22 такта, так как во всех ячейках массива (кроме двух последних) записан один и тот же адрес.

Когда указатель стека, значение которого увеличивается на 2 при каждом выполнении команды возврата, достигнет двух последних ячеек массива, в которых записан адрес Ц1, следующий цикл начнется с установки указателя стека на начало массива и увеличения на единицу числа в регистровой паре DE. Таким образом, происходит периодическое обращение к 128 последовательным ячейкам ОЗУ, что и необходимо для регенерации его содержимого. Циклы регенерации подсчитываются в регистровой паре DE. Длительность каждого из них около 800 мкс.

Если состояние порта за время между проверками изменилось, то перехода по команде RZ не произойдет. Новое состояние порта будет записано в регистр В. Значение счетчика изменений состояния (в регистре С) будет уменьшено на единицу, и если оно после этого не станет равным нулю, команда RNZ считает из массива очередной адрес возврата и цикл продолжится. Так как начальное значение в регистре было нулевым, то вновь оно станет таким же после 256-го изменения состояния порта, то есть через 128 периодов входного сигнала.

После окончания измерения в ОЗУ записываются числа N1 и N2. Первое из них равно числу полных циклов регенерации, выполненных за время измерения. Второе — удвоенному числу проверок состояния порта в последнем (незаконченном) цикле регенерации. Зная эти числа, можно найти средний период входного сигнала в микросекундах по формуле:

Т=0,5625 * (30,4+0,086 * N2+11,142 * N1).

Подпрограмма измерения заканчивает свою работу восстановлением значения указателя стека и состояния регистров микропроцессора. Затем вызывается подпрограмма МОНИТОРА, запускающая контроллер ПДП и восстанавливающая изображение на экране дисплея. Вычисление периода по приведенной выше формуле происходит уже в программе на БЕЙСИКе. Частота сигнала вычисляется как величина, обратная периоду.

Следует помнить, что источник сигнала при подключении к компьютеру оказывается, шунтирован конденсатором С6, находящимся на процессорной плате. Если это недопустимо, конденсатор можно удалить. Кроме того, желательно увеличить постоянную времени цепи C5 R30, заменив конденсатор другим с емкостью несколько микрофарад. Это увеличит чувствительность магнитофонного входа к сигналам низких частот. Примерный график зависимости среднеквадратической погрешности измерения от частоты сигнала показан на рис.1. На частотах выше 20 кГц появляется и нарастает вероятность пропуска программой момента изменения уровня входного сигнала, из-за чего погрешность резко увеличивается. Ниже частоты 1 кГц погрешность определяется в основном точностью вычислений, выполняемых интерпретатором БЕЙСИКа. При вычислении без округления промежуточных результатов погрешность продолжала бы уменьшаться с уменьшением частоты, как показано на рисунке пунктирной линией. Минимальная измеряемая частота примерно равна 2,5 Гц. При меньшей частоте в процессе измерения переполнится регистровая пара DE, что вызовет грубую ошибку.

Диапазон измеряемых частот легко сдвинуть вверх по оси частот. Для этого между источником сигнала и компьютером следует включить предварительный делитель частоты. Максимальная и минимальная измеряемые частоты увеличатся в число раз, равное коэффициенту деления. Относительная погрешность измерения останется прежней. Не забудьте учесть коэффициент деления в расчетных формулах!

Имея в своем распоряжении инструмент для измерения частоты, можно измерять любые другие электрические и неэлектрические величины, если они могут быть, преобразованы в частоту. Например, для измерения напряжения достаточно изготовить преобразователь «напряжение — частота». При достаточно высокой точности (соответствующей 12…14 двоичным разрядам) он значительно проще преобразователя «напряжение — код» и не содержит дефицитных деталей. Схемы преобразователей «напряжение — частота» неоднократно публиковались на страницах журнала2 [23-455]. Нужно, только подобрать времязадающие элементы так, чтобы при изменении измеряемого напряжения в заданных пределах частота выходного сигнала преобразователя не выходила из рабочего диапазона частотомера. Если диапазон частот преобразователя сильно отличается от диапазона, измеряемого компьютером, можно использовать предварительный делитель частоты.

В программе предусмотрены коррекция нуля и калибровка вольтметра. В расчетных формулах учитываются результаты этих операций. Калибровка может выполняться автоматически, если на входе преобразователя установить коммутатор, который будет по командам компьютера соединять вход с общим проводом или с источником образцового напряжения, а в программе предусмотреть подачу таких команд, например, через порты микросхемы D14 компьютера.

Для измерения электрического сопротивления и емкости можно использовать практически любой RC-генератор, во времязадающую цепь которого включается измеряемый резистор или конденсатор, а выходной сигнал подается на компьютер. Основное требование к генератору — точно известная функциональная зависимость между параметрами времязадающей цепи и частотой.

Хорошие результаты дает мультивибратор, схема которого приведена на рис.2. Конденсатор Сх подключают, как показано на схеме, в том случае, если он неполярный. У оксидного конденсатора обкладку, которая на схеме показана соединенной с общим проводом, необходимо подключить к источнику питания положительной или отрицательной полярности (в соответствии с полярностью конденсатора). При изменении Rx и Сх в широких пределах частота колебаний равна:

F=1/[2*Rх*Cх*ln(1+2*R1/R2)].

В генераторе может быть использован практически любой операционный усилитель, однако меньшее отклонение генерируемой частоты от расчетной (по приведенной формуле) получается при использовании более высокочастотных усилителей с повышенным сходным сопротивлением (например, К140УД8, К574УД1).

Чтобы избавиться от необходимости знать точные значения времязадающих элементов, в предлагаемой программе использован метод сравнения с эталоном. Измерение частоты колебаний генератора повторяют дважды: с образцовым элементом (например, сопротивлением) и с тем, величина которого неизвестна. Конденсатор Сх, разумеется, в обоих случаях должен использоваться один и тот же. Неизвестное сопротивление находится из простого соотношения:

Rх=R0*F0/Fx

где R0- сопротивление образцового резистора, F0, Fx — значения частоты колебаний мультивибратора, измеренные соответственно с образцовым и с неизвестным сопротивлениями. Для упрощения вычислений в программе отношение частот заменено отношением периодов (в машинных тактах). Так же измеряют и емкость конденсаторов. Переключение с измеряемого элемента на образцовый можно делать автоматически, предусмотрев для этого коммутатор, управляемый компьютером.

Если вместо Rx включить терморезистор или фоторезистор, то можно измерять температуру или освещенность. Например, при включении терморезистора для определения температуры (в градусах Цельсия) необходимо выполнить следующие вычисления:

М=(Т1+273)/(Т2-Т1)* ln(F1/F2),
T=(Т1+273)/М*ln (F1/Fx)+Т1, 

где

  • F1 — частота колебаний при температуре T1,
  • F2 — частота колебаний при температуре Т2,
  • Fх — частота колебаний при измеряемой температуре.

Терморезисторы даже одного типа имеют большой разброс параметров, поэтому после изготовления преобразователя нужно измерить частоты колебаний F1 и F2 с конкретным экземпляром терморезистора при двух разных температурах, например, при нуле и 100 °C. Полученные значения записывают в программу как константы.

А. ДОЛГИЙ, г. Москва