Как превратить персональный компьютер в измерительный комплекс - Патрик Гёлль 9 стр.


Эта форма представления результата, менее точная, чем цифровая индикация, гораздо более удобна, когда требуется лишь оценить направление и скорость изменений или отклонений измеряемой величины, например, при ручной регулировке или настройке. В приведенном примере шкала построена на базе ASCII символов, но такая же шкала может быть выполнена и в графическом режиме экрана.

Усредняющий фильтр

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

200 REM — SECONDE —

210 Q=0: S=0: GOSUB 100

220 LOCATE 5,1

230 PRINT "Идет измерение…"

240 H$=TIME$

250 IF H$<>TIME$ THEN BEEP: GOTO 290

260 GOSUB 100

270 S=S+D: Q=Q+1

280 GOTO 250

290 D=INT(100*S/Q)/100

300 LOCATE 1,1

310 PRINT USING "##.##";D;

320 PRINT "(среднее за"; Q; " измерений)"

330 GOTO 210

340 REM (c) 1997 Patrick GUEULLE

Кроме вычисления результата измерений, каждая из этих программ выводит и количество измерений, которое было использовано при его вычислении. Это позволяет точно оценить реальное быстродействие сиcтемы в зависимости от применяемого ПК Так, можно получить 3–4 измерения в секунду на «антикварном» ПК 8088/4,77 МГц, 60–70 измерений в секунду на 386SX25 и 700-1000 измерений в секунду на 486 DX/133 МГц, что все же достаточно далеко от современных скоростей, но весьма почетно для BASIC-интерпретатора.

Стоит обратить внимание на то, как использована зарезервированная цикловая переменная TIМЕ$. Она позволяет при любой частоте процессора получить достаточно точную шкалу секунд, минут и даже часов. А если понадобится осуществлять, например, одно измерение за несколько дней, то можно использовать переменную DATES.

200 REM — MINUTE —

210 Q=0: S=0: GOSUB 100

220 LOCATE 5,1

230 PRINT "Идет измерение…"

240 H$=LEFT$(TIME$,5)

250 IF H$<>LEFT$ (TIME$, 5) THEN BEEP: GOTO 290

260 GOSUB 100

270 S=S+D: Q=Q+1

280 GOTO 250

290 D=INT(100*S/Q) /100

300 LOCATE 1,1

310 PRINT USING "##.##";D;

320 PRINT "(среднее за";Q; " измерений)"

330 GOTO 210

340 REM (c) 1997 Patrick GUEULLE

Пиковый регистратор минимумов и максимумов

Достаточно добавить несколько строк на языке BASIC, чтобы получить режим запоминания минимумов и максимумов измеряемого напряжения, с возможностью обнуления результатов путем нажатия на клавишу пробела на клавиатуре ПК.

200 REM — MINMAX —

210 PRINT "нажать клавишу пробела для перезапуска"

220 I=5: А=0: Q=0: GOSUB 100

230 FOR G=1 TO 100

240 GOSUB 100: Q=Q+D

250 NEXT G

260 Q=Q/100

270 IF Q<=I THEN I=Q: S$=TIME$

280 IF Q>=A THEN A=Q: T$=TIME$

290 LOCATE 3,5: PRINT "Mes: ";

300 PRINT USING"##.##"; INT(100*Q)/100;

310 PRINT " "+TIME$

320 LOCATE 5,5: PRINT "Макс: ";

330 PRINT USING "##.##"; INT(100*A) /100

340 PRINT " " + T$

350 LOCATE 7,5: PRINT "Мин: ";

360 PRINT USING "##.##“; INT(100*1)/100

370 PRINT " " + S$

380 IF INKEY$=CHR$(32) THEN 220

390 Q=0: GOTO 230

400 REM (c) 1997 Patrick GUEULLE

Это добавление было сделано в программе MINMAX.BAS; также в нее были включены операторы вывода трех значений времени (в часах, минутах и секундах):

• время текущего измерения;

• время регистрации максимума;

• время регистрации минимума.

Надо отметить, что мультиметр редко дает подобные возможности, столь легко реализованные в виртуальном приборе.

Регистратор длительных процессов

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

Программа сбора данных (FICHIER.BAS), которую, конечно же, надо дополнить драйвером используемого АЦП при помощи команды MERGE, исключительно проста.

200 REM — FICHIER —

210 GOSUB 100

220 OPEN "dat.dat" FOR OUTPUT AS #1

230 PRINT "Идут измерения… "

240 FOR G=0 TO 639

250 GOSUB 100

260 PRINT# 1, D

270 FOR T=0 TO 2000: NEXT T

280 NEXT G: CLOSE# 1

290 REM (c) 1997 Patrick GUEULLE

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

В самых сложных случаях можно, по примеру SECONDE.BAS и MINUTE.BAS, использовать переменную TIME$ для улучшения точности и значительного снижения частоты дискретизации.

Число 640, в свою очередь, соответствует числу точек по горизонтали обычного графического экрана, что позволяет вывести график кривой непосредственно на экран, перед тем как скопировать его на бумагу, если это необходимо.

Графопостроитель

Вывод информации на экран осуществляет программа CGAVISU.BAS или VGAVISU.BAS. Вторая из них применяется, если желательно воспользоваться большим разрешением, соответствующим экранам VGA.

500 REM — CGAVISU —

510 OPEN "dat.dat" FOR INPUT AS #1

520 INPUT#1,Y: Y=199-INT(Y*199/5)

530 PSET(0,Y)

540 FOR X=1 TO 639

550 INPUT#1,Y: Y=199-INT(Y*199/5)

560 LINE — (X, Y)

570 NEXT X

580 CLOSE

590 REM (c) 1997 Patrick GUEULLE

500 REM — VGAVISU —

510 OPEN "dat.dat" FOR INPUT AS #1

520 INPUT#1,Y: Y=349-INT(Y*349/5)

530 PSET(0,Y)

540 FOR X=1 TO 639

550 INPUT#1,Y: Y=349-INT(Y*349/5)

560 LINE — (X, Y)

570 NEXT X

580 CLOSE

590 REM (c) 1997 Patrick GUEULLE

Очевидно, каждую из программ надо объединить с экранным драйвером CGA.BAS или VGA.BAS, соответствующим используемому оборудованию.

300 REM — CGA —

310 SCREEN 2

320 KEY OFF: CLS

330 LINE(0,0)-(0,199)

340 FOR Y=0 TO 199 STEP 20

350 LINE(0,Y)-(639,Y),&HCCCC

360 NEXT Y

370 FOR X=0 TO 639 STEP 32

380 LINE(X,0)-(X,199),&HCCCC

390 NEXT X

400 LINE(639,0)-(639,199)

410 LINE(0,199)-(639,199),&HCCCC

420 REM (c) 1997 Patrick GUEULLE

300 REM VGA

310 SCREEN 9

320 KEY OFF: CLS

330 LINE(0,0)-(0,349)

340 FOR Y=0 TO 349 STEP 35

350 LINE(0,Y)-(639,Y),&HCCCC

360 NEXT Y

370 FOR X=0 TO 639 STEP 32

380 LINE(X,0)-(X,349),&HCCCC

390 NEXT X

400 LINE(639,0)-(639,349)

410 LINE(0,349)-(639,349),&HCCCC

420 REM (c) 1997 Patrick GUEULLE

Это объединение можно сделать следующим образом:

LOAD "CGA" (загрузка драйвера);

затем

MERGE "CGAVISU" (добавление программы вывода на экран).

Полученная программа теперь может быть сохранена под каким-либо именем при помощи обычной команды SAVE.

На рис. 5.11 показан результат вывода на бумагу с использованием буфера обмена Windows, кривой разряда конденсатора емкостью 4,7 мкФ через входное сопротивление АЦП. Эта кривая была получена на экране CGA (320x200 точек).

Рис 5.13. Осциллогромма, полученная в режиме VGA

Для того чтобы приспособить осциллограф к той или иной практической задаче, в программу достаточно внести минимальные изменения. Для получения непрерывной развертки без очистки экрана (режим длительного послесвечения) следует исправить строку 270:

270 Х=0: GOTO 220

Для получения того же результата, но с очисткой экрана на каждом * обратном ходе» развертки (режим короткого послесвечения), надо записать:

270 CLS: GOTO 85

Для получения режима «ждущей синхронизации» следует добавить только одну строку:

215 IF D=0 THEN 210

Эта команда позволяет дождаться положительного напряжения на входе АЦП для запуска развертки. Конечно, можно выбрать и любую другую отличную от нуля величину в диапазоне от 0 до +5 В, а также использовать условные операторы «больше, чем» или «меньше, чем».

Можно также предусмотреть и вход внешней развертки, использовав либо второй АЦП, либо один из цифровых входов (линии /АСК или BUSY параллельного порта, игровой порт и т. п.).

Возможности многоканальных измерений

Подключение нескольких АЦП к параллельным и последовательным портам позволяет оснастить ПК несколькими аналоговыми входами, не используя при этом дорогие АЦП с мультиплексными входами. Возможны любые сочетания, как в плане аппаратных, так и программных средств.

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

Допускается огромное множество различных комбинаций — все их даже не перечислить. Скажем, приобретя один готовый АЦП, второй можно собрать самостоятельно, чтобы не платить дважды за одно и то же программное обеспечение. В некоторых случаях может понадобиться использование двух абсолютно идентичных АЦП.

5 REM — BICOURBE —

10 REM — MAXIM12 —

20 KEY OFF: CLS

30 B=&H3F8: REM COM1:

40 N=12: REM число разрядов

50 OUT B+4,1

60 FOR T=0 TO 100:NEXT T

70 OUT B+3,64

80 FOR T=0 TO 500: NEXT T

84 GOSUB 1000

85 GOSUB 300

90 GOTO 200

100 OUT B+4,0: D=0: REM ACQUISITION

105 OUT B+4,2: OUT B+4,0

110 FOR F=0 TO N-1

120 OUT B+4,2

130 E=INP(B+6) AND 16

140 OUT B+4,0

150 IF E=16 THEN D=D+2^(N-1-F)

160 NEXT F

170 D=5*D/(2^N-1)

180 OUT B+4,1: RETURN

200 REM — VDIRECT —

210 GOSUB 100: GOSUB 1090

220 FOR G=1 TO 639

230 GOSUB 100

240 Y=D: GOSUB 500

241 GOSUB 1090

242 Y=Q: GOSUB 600

250 FOR T=0 TO 2000: NEXT T: REM развертка

260 NEXT G

270 END

300 REM — VGA —

310 SCREEN 9

320 KEY OFF: CLS

330 LINE(0,0)-(0,349),2

340 TOR Y=0 TO 349 STEP 35

350 LINE(0,Y)-(639,Y),2,&HCCCC

360 NEXT Y

370 FOR X=0 TO 639 STEP 32

380 LINE(X,0)-(X,349),2,&HCCCC

390 NEXT X

400 LINE(639,0)-(639,349),2

410 LINE(0,349)-(639,349),2,&HCCCC

415 X=0: RETURN

500 Y=349-INT(Y*349/5)

502 PSET(X,V)

505 V=Y

510 LINE-(X,V),12

520 X=X+1

530 RETURN

600 Y=349-INT(Y*349/5)

602 PSET(X,W)

605 W=Y

610 LINE-(X,W),14

630 RETURN

1000 REM 12BITS

1010 KEY OFF: CLS

1020 C=&H2F8: REM COM2:

1030 M=12: REM число разрядов

1040 OUT C+4,1

1050 FOR T=0 TO 100:NEXT T

1060 OUT C+3,64

1070 FOR T=0 TO 500:NEXT T

1080 RETURN

1090 OUT C+4,0: Q=0: REM ACQUISITION

1100 OUT C+4,2: OUT C+4,0

1110 OUT C+4,2: OUT C+4,0

1120 OUT C+4,2: OUT C+4,0

1130 FOR F=0 TO M-1

1140 OUT C+4,2

1150 E=INP(C+6) AND 16

1160 OUT C+4,0

1170 IF E=16 THEN Q=Q+2^(M-1-F)

1180 NEXT F

1190 Q=5*Q/(2^M-1)

1200 OUT C+4,1: RETURN

1210 REM (c) 1997 Patrick GUEULLE

Назад Дальше