34970vdp-ibw.txt

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 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!