МАЙЕР Р.В.

КАК ИЗ КОМПЬЮТЕРА СДЕЛАТЬ ОСЦИЛЛОГРАФ

Использование персонального компьютера в учебном процессе в качестве осциллографа имеет ряд преимуществ: 1) ПК многофункциональны, распространены и доступны, в то время как современный средний осциллограф имеет высокую стоимость и решает сравнительно узкий класс задач; 2) ПК имеет большой экран, что позволяет демонстрировать осциллограммы аудитории; 3) оцифрованный сигнал можно записать в графический файл и затем его обработать; 4) учащиеся учаться программировать, понимают сущность оцифровки аналогового сигнала. Существующие специализированные платы расширения, позволяющие вводить в компьютер сигнал, получать осциллограмму, производить спектральный анализ имеют высокую стоимость (1000--10000 рубл).

Возможно создание цифрового осциллографа путем подключения к параллельному порту ПК специального устройства, осуществляющего оцифровку сигнала [1]. Использование подобного устройства рассмотрено в работе [3]. В книге [2] рассмотрена проблема использования звуковой платы в качестве аналого--цифрового преобразователя и приведены примеры соответствующих программ, осуществляющих оцифровку входного сигнала и запись результатов в файл. В настоящей статье предложены программы на языках QBasic и Pascal, позволяющие получить осциллограмму сигнала, поданного на вход звуковой платы.

Параметры используемого ПК: Intel Celeron, 416 МГц, операционная система Windows 98 SE. Звуковая плата ES1868 Plug and Play AudioDrive, диапазон ввода--вывода: 0220-022F. Перед запуском программ требуется отключить драйвер звуковой платы: Мой компьютер -> Панель управления -> Система -> Устройства -> ES1868 Plug and Play AudioDrive (WDM). Выбрать "Свойства", поставить галочку в опции "Отключено в данной конфигурации". Интерфейс звуковой платы отключать не следует. После этого необходимо перезагрузить ПК. К входу звуковой платы следует подключить микрофон, либо подать исследуемый сигнал амплитудой в несколько милливольт.

SCREEN 11                     '   Программа 1
OUT &H226, 1                  '   сброс
FOR t = 0 TO 100: NEXT        '   цифрового сигнального
OUT &H226, 0                  '   процессора
FOR t = 0 TO 100: NEXT        '   задержка
n = 1000: DIM u(n)            '   объявление массива
100 : CLS : i = 1             '   начало цикла 1
WHILE ABS(x(i) - 127) < 10    '   синхронизация по фронту
GOSUB 200: WEND               '   сигнала
FOR i = 1 TO n                '   начало цикла 2 
GOSUB 200                     '   вызов подпрограммы
CIRCLE (i, (x(i) - 127) * 1 + 200), 1        ' построение
LINE (i - 1, z)-(i, (x(i) - 127) * 1 + 200)  ' осциллограммы
z = (x(i) - 127) * 1 + 200
NEXT i                        '   конец цикла 2
GOTO 100                      '   конец цикла 1
END

200: OUT &H22C, &H20          '   команда ввода 1 байта
x(i) = INP(&H22A): RETURN     '   считывание 

Результат оцифровки входного сигнала считывается из ячейки памяти 22Ah и сохраняется в массиве x(i). Когда на входе 0 В, x(i)=127. После заполнения всего массива либо одновременно с этим процессом осуществляется построение графика на экране компьютера. Чтобы синхронизировать этот процесс с входным сигналом, создают цикл, вращаясь внутри которого, ПК опрашивает звуковую плату до тех пор, пока величина x(i) отличается от 127 менее чем на 10 (уровень запуска "развертки"). При больших отклонениях x(i) от 127 программа выходит из цикла и происходит запись данных в массив, построение осциллограммы.

Программирование звуковой платы состоит в записи команды 20h (команда ввода 1 байта данных) в ячейку 22Ch с помощью оператора port[$22C]:=$20;. Операторы port[$226]:=1; port[$226]:=0; используются для сброса цифрового сигнального процессора [2, с.360-364] и обеспечения правильной работы звуковой карты. Результат оцифровки входного сигнала считывается оператором port[$22A];.

uses  crt, graph;       'Программа 2
Const n=1000;
var x: array [0..N] of integer;
Gd, Gm, i, z: integer;
BEGIN
Gd:=Detect; InitGraph(Gd,Gm, 'c:\bp\bgi');
if graphResult <> grOk then Halt(1);
port[$226]:=1; delay(10); port[$226]:=0; {сброс звуковой платы}
Repeat                    {начало цикла}
Repeat port[$22C]:=$20; 
until port[$22A]-127>10;  {синхронизация по фронту}
cleardevice;              {очистка экрана}
for i:=1 to n do
  begin port[$22C]:=$20; 
        x[i]:=port[$22A]-127;   {опрос порта $22A}
        circle(i,240-x[i],2);   {построение осциллограммы}
        line(i,240-x[i],i-1,240-z); z:=x[i];
        delay(5);
  end;
until KeyPressed;               {конец цикла}
END.

Рис.1. Осциллограмма выпрямленного напряжения.

Для тестирования цифрового осциллографа к микрофонному или линейному входам осциллографа подключают два провода через соответствующий разъем. Если коснуться разъема рукой, то на экране появится осциллограмма напряжения, вызванная "наводками" на теле человека (частота 50 Гц). Чтобы получить осциллограмму напряжения с выхода двухполупериодного выпрямителя (рис.1), нами использовался делитель напряжения (переменный резистор на 4,7 кОм), подвижный контакт которого через резистор 22 кОм соединялся с входом звуковой платы. Было обнаружено, что при слабом входном сигнале коэффициент усиления платы плавно растет, но когда сигнал достигает некоторого уровня, происходит его резкое уменьшение. Это, очевидно, связано с желанием производителей звуковой платы регистировать как слабые, так и сильные звуки.

Рис.2. Экспериментальная установка.

Рис.3. Осциллограмма импульса на экране монитора.

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

uses  crt, graph;       'Программа 3
Const n=1000;  m=5;
var x: array [0..N] of integer;
Gd, Gm, i, z: integer;
BEGIN
Gd:=Detect; InitGraph(Gd,Gm, 'c:\bp\bgi');
if graphResult <> grOk then Halt(1);
port[$226]:=1; delay(10); port[$226]:=0;
Repeat
{Repeat port[$22C]:=$20; until port[$22A]-127>5;}
port[888]:=255; delay(15); port[888]:=0; delay(15); {Формирование}
port[888]:=255; delay(15);port[888]:=0;             {импульса}
for i:=1 to n do
  begin port[$22C]:=$20; x[i]:=(port[$22A]-127);
        circle(m*i,240-x[i],2);
        line(m*i,240-x[i],m*(i-1),240-z); z:=x[i];
  end;
delay(3000); cleardevice;
until KeyPressed;
END.

Рассмотрим листинг предлагаемой программы (программы 3 и 4). С помощью оператора port[888]:=255; (или 0) осуществляется подача логической 1 (или 0) на 2-9 выводы LPT--порта. К одному из них через резистор 1 кОм и следует подключить вход активных колонок. С приходим импульса колонки выдают щелчок и одновременно запускается оцифровка сигнала с выхода микрофона. В результате положение осциллограммы на экране (рис.3) зависит от расстояния между микрофоном и динамиком. При удалении микрофона импульс на экране смещается вправо.

uses  crt, graph;    'Программа 4
Const n=200;  m=5;
var x: array [0..N] of integer;
s, sredn,  Gd, Gm, i, z: integer;
BEGIN
Gd:=Detect; InitGraph(Gd,Gm, 'c:\bp\bgi');
if graphResult <> grOk then Halt(1);
port[$226]:=1; delay(10); port[$226]:=0;
Repeat
{Repeat port[$22C]:=$20; until port[$22A]-127>5;}
port[888]:=255; delay(15); port[888]:=0; delay(15);
port[888]:=255; delay(15); port[888]:=0; s:=0;
for i:=1 to n do
  begin port[$22C]:=$20; x[i]:=(port[$22A]-127);
  delay(1); s:=s+x[i]; end; sredn:=round(s/n);
for i:=1 to n do begin
        circle(m*i,240-x[i]+sredn,2);
        line(m*i,240-x[i]+sredn,m*(i-1),240-z+sredn); z:=x[i];
  end;
delay(3000); cleardevice;
until KeyPressed;
END.

В программе 4 рассчитывается среднее значение оцифрованного напряжения по всему массиву x[i]. Это стабилизирует осциллограмму на экране монитора.

ЛИТЕРАТУРА

1. Акатов Р.В. Компьютерные измерения: Аналого-цифровой преобразователь. --- Учебная физика. --- 1999. --- N 3. --- 48--64 с.

2. Матаев Г.Г. Компьютерная лаборатория в вузе и школе. Учебное пособие. -- М.: Горячая линия-Телеком, 2004. -- 440 с.

3. Майер Р.В., Веретенников Р.М. Демонстрация распространения звукового импульса с помощью ПК // Научное обозрение. --- 2006. --- N 2. --- с. 111--112.


ВВЕРХ