van der Pauw
10 !34970A 100번 슬롯 4x4 matrix switch, van der Pauw 면저항측정
20 !2020-11-26
30 DIM Id$[255]
40 INTEGER I,Count
50 INTEGER P1,P2,P3,P4
60 INTEGER Switch
70 ASSIGN @Sw TO 709
80 GOSUB Filesave
90 OUTPUT @File;"Count,Time[s],R1,R2,R3,R4,R5,R6,R7,R8,Rv,Rh,Rs[ohm]"
100 OUTPUT @Sw;"*IDN?"
110 ENTER @Sw;Id$
120 CLEAR SCREEN
130 PRINT "instrument name = ";Id$
140 !!!!!!!!!!!!!!!!
150 Curr=.1
160 OUTPUT @Sw;"INST:DMM OFF"
170 Count=0
180 T0=TIMEDATE
190 LOOP
200 T1=TIMEDATE-T0
210 Count=Count+1
220 !!!!!! 스위칭 작업을 8번 한다. !!!!!!!!!!!!!
230 Switch=1243
240 GOSUB Reading
250 R1=R
260 Switch=2134
270 GOSUB Reading
280 R2=R
290 Switch=4312
300 GOSUB Reading
310 R3=R
320 Switch=3421
330 GOSUB Reading
340 R4=R
350 Switch=1423
360 GOSUB Reading
370 R5=R
380 Switch=4132
390 GOSUB Reading
400 R6=R
410 Switch=2314
420 GOSUB Reading
430 R7=R
440 Switch=3241
450 GOSUB Reading
460 R8=R
470 !!!!!! 스위칭 작업 끝 !!!!!!!!!
480 Rv=(R1+R2+R3+R4)/4 !!! 수직저항 평균
490 Rh=(R5+R6+R7+R8)/4 !!! 수평저항 평균
500 PRINT "Rv=";Rv,"Rh=";Rh;"Rs=";
510 !!! Newton-Raphson 방법으로 Y값이 0이 되는 X구하기
520 X1=Rv ! 최초 X값은 Rv값
530 Rs_pre=X1 ! 최초 X값을 기억한다.
540 LOOP
550 Y1=FNEq(Rv,Rh,X1)! Y1 계산
560 X2=X1*1.01 ! X2는 X1에서 1% 증가한 값으로
570 Y2=FNEq(Rv,Rh,X2)! Y2 계산
580 A=(Y2-Y1)/(X2-X1)! 기울기 계산
590 X1=-Y1/A+X1 ! 두 점으로 계산된 직선에서 Y값이 0인 X을 찾는다.
600 Rs=X1 ! X값이 원하는 Rs값이다.
610 PRINT Rs;
620 EXIT IF ((Rs-Rs_pre)/Rs*1.E+9)<1 ! X값 변화가 이전 계산값보다 1ppb보다 작으면 멈춘다.
630 Rs_pre=Rs ! 나중에 변화를 계산하기 위해 현재 값을 기억한다.
640 END LOOP
650 !!! Newton-Raphson 종료
660 PRINT
670 OUTPUT @File;Count,T1,R1,R2,R3,R4,R5,R6,R7,R8,Rv,Rh,Rs !8번 측정 저항과 Rs값을 기록한다.
680 EXIT IF Count=10
690 END LOOP
700 STOP
710 Reading: !
720 GOSUB Switching
730 WAIT 1 ! 기계적인 스위칭 동작이 다 끝날 때까지 기다려야 한다.
740 OUTPUT 722;"TRIG SGL"
750 ENTER 722;V !측정한 전압
760 R=V/Curr !저항 계산. 인가한 전류=0.1A
770 RETURN
780 Switching: ! 4x4 매트릭스 스위치에서 4개를 동작시킨다.
790 ! switch=1243
800 Str$=VAL$(Switch)
810 P1=VAL(Str$[1;1]) !1 추출
820 P2=VAL(Str$[2;1]) !2 추출
830 P3=VAL(Str$[3;1]) !4 추출
840 P4=VAL(Str$[4;1]) !3 추출
850 OUTPUT @Sw;"ROUTe:OPEN (@101:120)"
860 Ch_no1=104+(P1-1)*4
870 OUTPUT @Sw;"ROUTe:CLOSe (@";VAL$(Ch_no1);")"
880 Ch_no2=103+(P2-1)*4
890 OUTPUT @Sw;"ROUTe:CLOSe (@";VAL$(Ch_no2);")"
900 Ch_no3=102+(P3-1)*4
910 OUTPUT @Sw;"ROUTe:CLOSe (@";VAL$(Ch_no3);")"
920 Ch_no4=101+(P4-1)*4
930 OUTPUT @Sw;"ROUTe:CLOSe (@";VAL$(Ch_no4);")"
940 RETURN
950 Filesave: !
960 DIM Filename$[20],Dhms$[8]
970 T=TIMEDATE
980 Time$=TIME$(T)
990 Date$=DATE$(T)
1000 Dhms$=Date$[1;2]&Time$[1;2]&Time$[4;2]&Time$[7;2]
1010 Filename$=Dhms$&".txt"
1020 CREATE Filename$,1
1030 ASSIGN @File TO Filename$;FORMAT ON
1040 RETURN
1050 END
1060 !!!!!!!!! van der Pauw 측정법에 의해 Rs값을 계산하기 위한 공식 !!!!!!!!!!!!!!!!
1070 DEF FNEq(A,B,X)
1080 Y=EXP(-PI*A/X)+EXP(-PI*B/X)-1
1090 RETURN Y
1100 FNEND
1110 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!