주요 콘텐츠

이 페이지는 기계 번역을 사용하여 번역되었습니다. 영어 원문을 보려면 여기를 클릭하십시오.

ADALM1000을 사용하여 회로의 전달 함수 추정하기

이 예제에서는 MATLAB®를 사용하여 ADALM1000 소스-측정 장치에 연결하고, 임의의 신호를 생성하도록 구성하며, 실시간 측정을 수행하고, 측정 결과를 바탕으로 연결된 회로의 전달 함수를 계산하는 방법을 보여줍니다.

소개

이 예제에서는 1 k Ω 저항과 0.1 μF 커패시터가 직렬로 연결된 R-C 회로가 있습니다. R-C 회로는 ADALM1000 장치에 연결되어 있으며, 이 소자의 채널 A는 처프 신호로 구성된 전압 자극을 제공합니다. 채널 A의 출력은 저항에 연결되어 있고, 접지는 커패시터에 연결되어 있습니다. 이 장치의 B 채널은 커패시터 양단의 전압을 측정하는 데 사용됩니다. 다음 회로도는 측정 설정을 보여줍니다.

입력 신호와 측정된 파형을 이용하여 R-C 회로의 전달 함수를 추정하고, 측정된 응답을 R-C 회로의 이론적 응답과 비교할 수 있습니다.

시스템에 연결된 장치 검색하기

daqlist("adi")
ans=1×4 table
    DeviceID              Description                 Model              DeviceInfo       
    ________    _______________________________    ___________    ________________________

     "SMU1"     "Analog Devices Inc. ADALM1000"    "ADALM1000"    [1×1 daq.adi.DeviceInfo]

ADALM1000 장치용 DataAcquisition 생성하기

ADIDaq = daq("adi")
ADIDaq = 
DataAcquisition using Analog Devices Inc. hardware:

                     Running: 0
                        Rate: 100000
           NumScansAvailable: 0
            NumScansAcquired: 0
              NumScansQueued: 0
    NumScansOutputByHardware: 0
                   RateLimit: []

Show channels
Show properties and methods


전압 소스 및 측정 채널 추가하기

ADALM1000 장치는 각각의 채널에서 전압을 공급하고 측정하는 작업을 동시에 수행할 수 있습니다. 이 모드로 장치를 설정합니다.

전압을 공급하려면, 장치 ID가 SMU1이고 채널 ID가 A인 아날로그 출력 채널을 추가하고, 해당 채널의 측정 유형을 Voltage로 설정합니다.

addoutput(ADIDaq,'smu1','a','Voltage');

전압을 측정하려면, 장치 ID가 SMU1이고 채널 ID가 B인 아날로그 입력 채널을 추가하고, 해당 채널의 측정 유형을 Voltage로 설정합니다.

addinput(ADIDaq,'smu1','b','Voltage');

채널 구성을 확인합니다.

ADIDaq.Channels
ans=1×2 object
    Index    Type    Device    Channel      Measurement Type             Range            Name  
    _____    ____    ______    _______    _____________________    _________________    ________

      1      "ao"    "SMU1"      "A"      "Voltage (SingleEnd)"    "0 to +5.0 Volts"    "SMU1_A"
      2      "ai"    "SMU1"      "B"      "Voltage (SingleEnd)"    "0 to +5.0 Volts"    "SMU1_B"

회로 구동을 위한 처프 파형을 정의하고 시각화하기

회로를 구동하기 위해 진폭 1볼트, 주파수 범위 20 Hz~20 kHz인 처프 파형을 사용합니다. 이 처프는 1초 동안 발생합니다.

Fs = ADIDaq.Rate;
T = 0:1/Fs:1;
ExcitationSignal = chirp(T,20,1,20e3,'linear');

디바이스의 출력 전압이 항상 0V 이상이 되도록 2V의 DC 오프셋을 추가합니다.

Offset = 2;
ExcitationSignal = ExcitationSignal + Offset;

자극 신호를 시간 영역에서 시각화합니다.

figure(1)
plot(T, ExcitationSignal,'Blue')
xlim([0 0.15])
xlabel('Time (s)')
ylabel('Magnitude (V)')
title('Time domain plot of stimulus signal')

자극 신호를 주파수 영역에서 시각화합니다.

figure(2)
spectrogram(ExcitationSignal,1024,1000,1024,Fs,'yaxis')
title('Frequency domain view of stimulus signal')

EstimateTransferFunctionwADALM1000Example_03.png

회로를 구동하면서 동시에 주파수 응답 측정하기

장치 출력을 생성하고, 동시에 다른 채널에서 커패시터의 양단 간 전압을 측정합니다.

MeasuredTable = readwrite(ADIDaq,ExcitationSignal');
MeasuredSignal = MeasuredTable{:,1};

자극 신호와 측정된 신호 플로팅하기

figure(1)
hold on;
plot(T,MeasuredSignal,'Red');
xlim([0 0.15])
ylim([1 3])
title('Time domain plot of stimulus and measured signal')
legend('Excitation Signal','Measured Signal')

figure(3)
spectrogram(MeasuredSignal,1024,1000,1024,Fs,'yaxis')
title('Frequency domain view of the measured signal')

회로의 전달 함수 구하기

측정된 신호와 자극 신호를 비교하여 R-C 회로의 전달 함수를 계산하고, 진폭 응답을 플로팅합니다.

처리하기 전에 DC 오프셋을 제거합니다.

MeasuredSignal = MeasuredSignal - mean(MeasuredSignal);
ExcitationSignal = ExcitationSignal - Offset;
[TFxy,Freq] = tfestimate(ExcitationSignal,MeasuredSignal,[],[],[],Fs);
Mag = abs(TFxy);

추정된 전달 함수를 이론적 진폭 응답과 비교합니다.

R = 1000;    % Resistance (ohms)
C = 0.1e-6;  % Capacitance (farads)
TFMagTheory = abs(1./(1 + (1i*2*pi*Freq*C*R)));

figure(4);
semilogy(Freq,TFMagTheory,Freq,Mag);
xlim([0 20e3])
xlabel('Frequency (Hz)')
ylim([0.05 1.1])
ylabel('Magnitude')
grid on
legend('Theoretical frequency response','Measured frequency response')
title({'Magnitude response of the theoretical'; 'and estimated transfer functions'});

DataAcquisition 및 Figure 지우기

clear ADIDaq
close all