Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 2060

.pdf
Скачиваний:
14
Добавлен:
30.04.2022
Размер:
4.73 Mб
Скачать

Измерение амплитудных и временных параметров сигнала производится при помощи 2-х маркеров. Разность значений между позициями маркеров по вертикали, умноженная на коэффициент сжатия - амплитудное значение разности напряжений, а по горизонтали - времени.

Приведенная ниже часть программы поясняет, как производится вывод

сигнала на экран модели МЦО при различной разрядности АЦП, а так же методику осуществления дельта-измерений.

Procedure TDisplay.Draw;

Var R1,R2,R3,R4,R5,R6,R7,R8:Real;

I,J,K:Integer;

Begin

HideMouse;

SetColor(LightGreen);

PutImage(30,30,ObjView[CleanDisp].Img^,0);

R1:=(1/HD)/(1/SigFreq);

{Периодов На Дисплей}

R2:=R1/300;

{Частей периода на точку}

R3:=0;

 

 

R4:=VD/20;

 

 

K:=0;

 

 

R5:=(1/HD)/(1/ModFreq)/300;

 

R6:=0;

 

 

R7:=(1/HD)/300;

 

 

SetViewPort(30,30,329,229,True);

{задается окно, в}

For I:=1 To 299

{котором ,будет выводится}

Do

{сигнал (300х200 точек)}

Begin R8:=SigFunc^.GetValue(R3)*SigAmp;

{пересчитывается амплитуда} {и частота сигнала с учетом}

{коэффициента растяжения} Modulate(R3,R6,R8); {пересчитывается амплитуда}

{и частота сигнала с учетом} {модуляции}

If SigAmp>0 Then

R7:=Int((R8/SigAmp)*DACRes)/DACRes {распределение сигнала}

Else {по уровням квантования} {DACRes+1 - разрядность АЦП}

R7:=0;

J:=Round(R7*SigAmp/R4);

Line(I-1,100-K,I,100-J); {непосредственный вывод} {сигнала на экран ЦО}

R3:=R3+R2;

 

 

R6:=R6+R5;

 

 

K:=J;

 

 

End;

 

 

Markers[1].Draw;

 

{вызов маркеров}

Markers[2].Draw;

 

 

SetViewPort(0,0,GetMaxX,GetMaxY,True);

J:=Markers[1].XL-Markers[2].XL;

{определение расстояния}

J:=Abs(J);

{между маркерами}

K:=Markers[1].YL-Markers[2].YL;

 

K:=Abs(K);

 

 

Time.Value:=Round(J*R7*10000);

{пересчет расстояния }

 

{между маркерами}

 

{с учетом коэффициента}

 

{растяжения по частоте}

Time.Draw;

{вывод результатов}

 

{дельта-измерений}

 

{в секундах}

Amp.Value:=Round(K*R4*100);

{пересчет расстояния }

 

{между маркерами}

 

{с учетом коэффициента}

 

{растяжения по амплитуде}

AMP.Draw;

{вывод результатов}

Рис. 5.5. Эмулятор передней панели виртуального цифрового осциллографа Задано чачстотно – модулированное колебание с помощью управляющих клавиш справа вверху

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

Рис. 5.8. Импульсный и гармонический амплитудно – модулированные колебания на эмуляторе ЦОС.

5.2.2. Виртуальные модели аналоговых осциллографов

Рассмотрим две модели аналоговых осциллографов, имеющих весьма близкий интерфейс с их реальными прототипами. Из –за ограниченного объѐма учебного пособия работоспособность моделей покажем с помощью соответствующих эмуляторов, работающих совместно с дополнительными средствами, необходимых для иллюстрации выбранного режима. Программные средства в силу их большого объѐма мы рассматривать не будем.

Осциллограф С1 – 75

Рис. 5.9. Эмулятор осциллографа С1 – 75

Осциллограф работает в режиме поочерѐдных подключений сигналов на входе каналов А и Б с дополнительным ЭСВ, показывающим среднеквадратическое значение сигнала канала А. Программа работы содержит встроенный генератор для подачи заданного вида сигнала на вход каналов А и Б. Органы управления работой генератора расположены слева внизу. Органы управления осциллографа расположены справа. Вместо ЭСВ можно подключить ЭСЧ, для этого достаточно нажать кнопку «Частотомер» в строке «Меню» вверху панели. Пример вспомогательной программы представлен ниже.

Программа 1

unit Convu2;

interface

uses

SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, StdCtrls, ExtCtrls, Forms, Common;

type

TFAbor = class(TForm) Panel1: TPanel; Label1: TLabel; Timer1: TTimer;

procedure Timer1Timer(Sender: TObject); end;

var

FAbor: TFAbor;

implementation

{$R *.DFM}

procedure TFAbor.Timer1Timer(Sender: TObject); begin

Close;

end;

end.

В заключение представим краткое описание работы эмулятора аналогового осциллографа С1 – 75. Данная программа является электронным аналогом осциллографа С1-75, которая реализует основные режимы работы:

1.Непрерывный режим ( полностью соответствует режиму работы осциллографа, при этом на экране всегда существует развертка. Возможны все режимы работы регистрации сигналов.

2.Ждущий режим ( при работе в этом режиме развертка появляется только при наличии сигнала от задающего генератора. В данной модели невозможна реализация каналов Y как таковых, поэтому вместо них используются виртуальные генераторы для каждого канала соответственно. Такой генератор может формировать гармонический, амплитудно-модулированный (АМ) сигналы,

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

плитуду (Um), для прямоугольного сигнала скважность (q), для АМ-сигнала коэффициент модуляции (К), частоту модулирующего сигнала (F). Причем, значения могут принимать непрерывные значения в полосе от 20 Гц до 200 кГц ( для частот, от 0.1В до 9.9В( для амплитуды, скважности от 1.1 до 9.9, а так же для коэффициента модуляции от 0.1 до 0.9. Сигналы от каналов могут выводиться отдельно (режим А и Б), поочерѐдно, когда развертка происходит одновременно для обоих каналов (режим "поочередно"), прерывисто, когда развертка происходит последовательно по каждому каналу ( режим " прерывисто").

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

Канал синхронизации выполнен не полностью, так как отсутствует внешняя синхронизация , внутренняя осуществляется с приоритетом канала А, синхронизируется регулятором "стабильность".

Z-канал сделан не в соответствии с осциллографом. Сам Z-канал представляет собой генератор прямоугольных сигналов с заданным периодом в соответствии с положительной частью «прорисовывается» луч на экране и при отрицательной половине луча нет.

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

Работа виртуальной модели позволяет одновременно в реальном времени задавать параметры сигналов обоих каналов, менять развертку по вертикали, переключая переключатель "Вольт/дел"; менять размер по горизонтали, дискретным переключателем "Время/дел"; синхронизировать сигнал по приоритету, смещать по горизонтали и по вертикали (для каждого канала своѐ смещение), реализовывать метод временных меток (работой "Z-канала"). При работе калибратора все режимы и переключатели с регуляторами блокируются, кроме переключателя "Время/дел".

Осциллограф С1 – 93

Виртуальная модель аналогового осциллографа С1 – 93 выполнен по аналогии с моделью С1 – 75. Приведѐм программу структуры модели осциллографа.

Структура.

#[Переменные]#

TsA - тип сигнала для канала A

TsA: byte;

TsB - тип сигнала для канала B

TsB: byte;

1 - Гармоничный сигнал

2 - Прямоугольный сигнал

3 - АМ сигнал

fA, fB - частота для канала А и Б fA, fB: longint;

UmA, UmB - амплитуда для канала А и Б

UmA, UmB: Extended;

taA, taB - скважность для канала А и Б taA, taB: Extended;

F1A, F1B - частота модулирующего сигнала для канала А и Б

F1A, F1B: longint;

K1A, K1B - коэффициент модуляции для канала А и Б

K1A, K1B: Extended;

VsmA, VsmB - Вольт для канала А и Б

VsmA, VsmB: Extended;

VsmAP, VsmBP - Предыдущие значение "Вольт" для канала А и Б

VsmAP, VsmBP: Extended;

VsmAN, VsmBN - Следующие значение "Вольт" для канала А и Б

VsmAN, VsmBN: Extended;

TsmP - Предыдущие значение "Время" для каналов

Tsm: Extended;

TsmN - Следующие значение "Время" для каналов

Tsm: Extended;

Q - Смещение по горизонтали

Q: Extended; P - Уровень

P: Extended; d - Стабильность

d: integer;

bA - рисовать/не рисовать канал А bA: boolean;

bB - рисовать/не рисовать канал Б bB: boolean;

br - прерывистое/не прерывистое рисование каналов br: boolean;

bZ - включен/выключен Z канал bZ: boolean;

bK - включен/выключен Калибратор bK: boolean;

leng - Растяжка leng: byte;

brr - ждущий/непрерывный сигнал brr: boolean;

kvA - Смещение по вертикали для канала А

kvA: integer;

kvB - Смещение по вертикали для Канала Б kvB: integer;

KA - случайное число {-3, -2, -1, 0, 1, 2, 3} для канала A

KA: integer;

KB - случайное число {-3, -2, -1, 0, 1, 2, 3} для канала B

KB: integer;

ta - переменная цикла t для Канала А ta: Extended;

tb - переменная цикла t для Канала Б tb: Extended;

Zp - значение переключателей Z канала

Zp: Extended;

bkTsm - предыдущее значение "Время/Дел" для "Калибратора" bkTsm: Extended;

arA - служебный массив для канала A arA: Tar;

arB - служебный массив для канала B arB: Tar;

bcA - Задействован или нет служебный массив канала A bcA: boolean;

bcB - Задействован или нет служебный массив канала A bcB: boolean;

bfb - Задействован или нет служебные массив определяется на низ-

ком

уровне bfb: boolean;

bbbk - На предыдущем этапе был ли задействован "Калибратор" bbbk: boolean;

bbbA - вспомогательная переменная при прорисовки канала A отве-

чающая

рисовать или не рисовать bbbA: boolean;

bbbB - вспомогательная переменная при прорисовки канала B отве-

чающая

рисовать или не рисовать bbbB: boolean;

U0A, U0B - Uo для каналов A и B

U0A, U0B: Extended;

bU0A, bU0B - Работает/не работает прорисовка с Uo для каналов A

и B

bU0A, bU0B: tb;

Рис. 5.10. Пример работы виртуального осциллографа С1 – 93

Осциллограф работает в режиме «Поочерѐдно». На вход канала А подано гармоническое колебание, а на вход канала Б – импульсное со скважностью 5. Дополнительно с основной программой работает частотомер и вольтметр для измерения переменного и постоянного напряжений. Для выделения сигналов поданы постоянные напряжения (открытые входы каналов А и Б).

Программа работы встроенного вольтметра представлена ниже. Программа 2

unit Volt; interface uses

SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons;

type

TFVolt = class(TForm) SpeedButton2: TSpeedButton;

SpeedButton3: TSpeedButton;

SpeedButton4: TSpeedButton;

SpeedButton5: TSpeedButton; Label2: TLabel;

Label3: TLabel;

BitBtn1: TBitBtn;

BitBtn2: TBitBtn; Panel1: TPanel; Lab: TLabel;

SpeedButton1: TSpeedButton;

SpeedButton6: TSpeedButton;

procedure SpeedButton2Click(Sender: TObject); procedure SpeedButton3Click(Sender: TObject); procedure SpeedButton4Click(Sender: TObject); procedure SpeedButton5Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure SpeedButton6Click(Sender: TObject);

private

Vsmm: double; br: boolean;

public

Um, U0, U: double; end;

var

FVolt: TFVolt; implementation {$R *.DFM}

procedure TFVolt.SpeedButton2Click(Sender: TObject); begin

Vsmm:=0.01;

end;

procedure TFVolt.SpeedButton3Click(Sender: TObject); begin

Vsmm:=0.1;

end;

procedure TFVolt.SpeedButton4Click(Sender: TObject); begin

Vsmm:=1;

end;

procedure TFVolt.SpeedButton5Click(Sender: TObject); begin