3245A
1 ! volt-std/3245-01-ibw.txt
10 !2018/04/30 HP3245A Universal Source로 출력 + HP3458A DMM으로 측정
20 !2020/09/08 트랜스포머 측정 추가
30 ! DC 전압: -10.25V ~ +10.25V, 6자리(24비트) 고해상도, 3.5자리(12비트) 저해상도 모드
40 ! 저해상도모드에서는 트리거 가능하다.
50 ! DC 전류: -0.1A ~ +0.1A, 0.1mA~100mA 범위, 0.1nA 해상도
60 ! AC 전압(p-p 전압이다.)/전류 1MHz까지, 펄스는 100kHz까지
70 ! duty cycle은 100kHz까지 5%~95%
80 ! Freq Ref = 1,073,741.824Hz
90 ! APPLY DCV | DCI
100 ! USE CHANA | CHANB = 0 | 100
110 ! TERM FRONT | REAR | OPEN = OFF
120 ! IMP 0 | 50
130 ! ARANGE ON | OFF autorange
140 ! RANGE
150 ! DELAY 0.04sec (default)
160 !
170 ! xmin, xmax, nop 로그계산방법
180 ! k=(xmax/xmin)^(1/(nop-1))
190 ! x=xmin*k^(n-1) n=1,...,nop
200 INTEGER I,J,Nop,Count
210 REAL K,Vmin,Vmax,Vset,Vmeas,Tmp
220 GOSUB Fileopen
230 ASSIGN @Source TO 710 !HP 3245A
240 ASSIGN @Dmm TO 722 !HP 3458A
250 ! OUTPUT @Source;"USE CHANB"
260 OUTPUT @Source;"IMP 0" ! 0ohm 50ohm, 대부분 0오옴으로
270 T0=TIMEDATE
280 Nop=101
290 Func$="Trans" ! V I i Trans
300 Scale$="LOG" ! 전압 스윕 선택 = LIN LOG
310 SELECT Func$
320 CASE "Trans" !트랜스 전압비
330 Fstart=10
340 Fstop=100000
350 Fnop=201 !반드시 2이상
360 Vstart=.1 !Vp-p
370 ! Vstart=Vstart/2.828 ! Vpp=2.828 Vrms
380 Vstop=10 !Vp-p
390 ! Vstop=Vstop/2.828 !
400 Vnop=3 !반드시 2이상
410 ALLOCATE Vset_a_pp(Vnop),Vset_a_rms(Vnop)
420 !!!! 출력 데이터에 헤더 작성 !!!!!!!!!!!!!!!!!!!!!!!!!!!!
430 OUTPUT @File;"No., Time[s], Freq[Hz]";
440 FOR J=1 TO Vnop
450 SELECT Scale$
460 CASE "LOG"
470 Kvolt=(Vstop/Vstart)^(1/(Vnop-1))
480 Vset=Vstart*Kvolt^(J-1)
490 CASE "LIN"
500 Vset=Vstart+(Vstop-Vstart)/(Vnop-1)*(J-1)
510 END SELECT
520 OUTPUT @File;", ";Vset;
530 Vset_a_pp(J)=Vset
540 Vset_a_rms(J)=Vset/2.828 !p-p -> rms
550 NEXT J
560 OUTPUT @File;""
570 !!!! 출력 데이터에 헤더 끝 !!!!!!!!!!!!!!!!!!!!!!!!!!!!
580 FOR I=1 TO Fnop !주파수는 로그
590 Count=I
600 Kfreq=(Fstop/Fstart)^(1/(Fnop-1))
610 Freq=Fstart*Kfreq^(I-1)
620 OUTPUT @Source;"FREQ ";Freq
630 OUTPUT @File;Count,T,Freq,
640 PRINT Count,Freq,
650 FOR J=1 TO Vnop
660 OUTPUT @Source;"APPLY ACV ";Vset_a_pp(J)
670 WAIT .1
680 OUTPUT @Dmm;"TRIG SGL"
690 ENTER @Dmm;Vmeas !rms
700 T=TIMEDATE-T0
710 Vratio=Vmeas/Vset_a_rms(J)
720 PRINT Vratio,
730 OUTPUT @File;Vratio;",";
740 NEXT J
750 PRINT ""
760 OUTPUT @File;""
770 NEXT I
780 OUTPUT @Source;"APPLY ACV 1"
790 CASE "V","v" !V출력, V측정
800 Vmin=5 ! 1uV
810 Vmax=10 !10V
820 OUTPUT @File;"No., Time[s], Vset[V], Vmeas[V]"
830 FOR I=1 TO Nop STEP 1
840 Count=I
850 SELECT Scale$
860 CASE "LOG"
870 K=(Vmax/Vmin)^(1/(Nop-1))
880 Vset=Vmin*K^(I-1)
890 CASE "LIN"
900 Vset=Vmin+(Vmax-Vmin)/(Nop-1)*(I-1)
910 END SELECT
920 OUTPUT @Source;"APPLY DCV ";Vset
930 WAIT .1
940 OUTPUT @Dmm;"TRIG SGL"
950 OUTPUT @Dmm;"TRIG SGL"
960 ENTER @Dmm;Vmeas
970 T=TIMEDATE-T0
980 Diff=(Vmeas-Vset)/Vset*100
990 DISP Count,"Set V=";Vset," Meas V=";Vmeas," Diff[%]=";Diff
1000 OUTPUT @File;Count,T,Vset,Vmeas
1010 NEXT I
1020 OUTPUT @Source;"APPLY DCV 0"
1030 CASE "I"
1040 Imin=1.E-9 ! 1nA에서부터
1050 Imax=.1 ! 100mA까지
1060 OUTPUT @File;"No., Time[s], Iset[A], Imeas[A]"
1070 FOR I=1 TO Nop
1080 Count=I
1090 K=(Imax/Imin)^(1/(Nop-1))
1100 Iset=Imin*K^(I-1)
1110 OUTPUT @Source;"APPLY DCI ";Iset
1120 WAIT .1
1130 OUTPUT @Dmm;"TRIG SGL"
1140 ENTER @Dmm;Imeas
1150 T=TIMEDATE-T0
1160 Diff=(Imeas-Iset)/Iset*100
1170 DISP Count,"Set I=";Iset," Meas I=";Imeas," Diff[%]=";Diff
1180 OUTPUT @File;Count,T,Iset,Imeas
1190 NEXT I
1200 OUTPUT @Source;"APPLY DCI 0"
1210 CASE "i"
1220 OUTPUT @File;"No., Time[s], HP3245A set[A], HP3458A meas[A]"
1230 Count=0
1240 FOR I=-10 TO -1 !0.1A까지만 가능
1250 OUTPUT @Source;"APPLY DCI 0" !그렇다고 0이 나오는 것은 아니다. 입력단자를 short시켜야 한다.
1260 IF I<=-8 THEN
1270 OUTPUT @Dmm;"FUNC DCI ";1.E-7 !범위 0.1uA시작 000.000nA 표시된다.
1280 ELSE
1290 OUTPUT @Dmm;"FUNC DCI ";10^(I+1)
1300 END IF
1310 ! 전루 측정 범위별로 MATH NULL 수행
1320 ! OUTPUT @Dmm;"TRIG SGL"
1330 ! ENTER @Dmm;Tmp
1340 ! OUTPUT @Dmm;"MATH NULL"
1350 ! OUTPUT @Dmm;"TRIG SGL"
1360 ! ENTER @Dmm;Tmp
1370 FOR J=1 TO 9 ! 10을 사용하면, 한 단계 더 높은 범위 1에서 수행되는 것과 겹쳐, NULL 의미에 문제가 된다.
1380 Count=Count+1
1390 Vset=J*10^I ! 최초 출력 전류는 1E-10A부터 시작
1400 IF Vset>.1 THEN STOP ! 전류출력 .1A 초과하면 이상 나오게 프로그래밍되면 정지시킨다.
1410 OUTPUT @Source;"APPLY DCI ";Vset
1420 WAIT .1
1430 OUTPUT @Dmm;"TRIG SGL"
1440 ENTER @Dmm;Vmeas
1450 T=TIMEDATE-T0
1460 DISP Count,"Set I=";Vset," Meas I=";Vmeas
1470 OUTPUT @File;Count,T,Vset,Vmeas
1480 NEXT J
1490 NEXT I
1500 OUTPUT @Source;"APPLY DCI 0"
1510 END SELECT
1520 OUTPUT @Dmm;"TRIG AUTO"
1530 STOP
1540 Fileopen: !
1550 DIM Filename$[20],Dhms$[8]
1560 Time$=TIME$(TIMEDATE)
1570 Date$=DATE$(TIMEDATE)
1580 Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2]
1590 Filename$=Dhms$&".txt"
1600 CREATE Filename$,1
1610 ASSIGN @File TO Filename$;FORMAT ON
1620 RETURN
1630 END