Этот пример показывает, как использовать MATLAB, чтобы соединиться с Аналоговые устройства модуль исходного измерения ADALM1000, сконфигурировать его и сделать текущими и измерения напряжения, чтобы охарактеризовать LED.
daq.getDevices
ans = adi: Analog Devices Inc. ADALM1000 (Device ID: 'SMU1') Analog input subsystem supports: 0 to +5.0 Volts,-0.20 to +0.20 A ranges Rates from 100000.0 to 100000.0 scans/sec 2 channels ('A','B') 'Voltage','Current' measurement types Analog output subsystem supports: 0 to +5.0 Volts,-0.20 to +0.20 A ranges Rates from 100000.0 to 100000.0 scans/sec 2 channels ('A','B') 'Voltage','Current' measurement types Properties, Methods, Events
ADISession = daq.createSession('adi')
ADISession = Data acquisition session using Analog Devices Inc. hardware: Will run for 1 second (100000 scans) at 100000 scans/second. No channels have been added. Properties, Methods, Events
Устройство ADALM1000 способно к определению источника напряжения и измерению, текущему продвинутый заданный канал. Настройте устройство в этом режиме.
Добавьте канал аналогового выхода с устройством ID SMU1 и ID канала A, и установите его тип измерения на напряжение.
addAnalogOutputChannel(ADISession,'smu1','a','Voltage');
Добавьте канал аналогового входа с устройством ID SMU1 и ID канала A, и установите его тип измерения на ток.
addAnalogInputChannel(ADISession,'smu1','a','Current');
Подтвердите настройку сеанса.
ADISession
ADISession = Data acquisition session using Analog Devices Inc. hardware: No data queued. Will run at 100000 scans/second. Number of channels: 2 index Type Device Channel MeasurementType Range Name ----- ---- ------ ------- ------------------- ---------------- ---- 1 ao SMU1 A Voltage (SingleEnd) 0 to +5.0 Volts 2 ai SMU1 A Current -0.20 to +0.20 A Properties, Methods, Events
Соедините LED последовательно с 330 резистор между ADALM1000 образовывает канал A и земля.
for iLoop = 1:5 % Turn on LED by generating an output of 5 volts. outputSingleScan(ADISession,5); pause(0.2); % Turn off LED by generating an output of 0 volts. outputSingleScan(ADISession,0); pause(0.2); end
Чтобы понять характеристики светодиода I-V, разверните область значений значений напряжения от 0 В до 5 В и измерьте ток для каждого значения. Агрегат всех измерений обеспечивает данные, чтобы изобразить ток в виде графика через LED в области значений напряжений.
v = linspace(0,5,250); for iLoop=1:length(v) outputSingleScan(ADISession,v(iLoop)); i(iLoop) = inputSingleScan(ADISession); end
Когда у вас есть результаты измерений, можно визуализировать его. Можно также вычислить математическую модель, которая аппроксимирует поведение LED в области значений измерений.
% Plot the measured data. plot(v,i,'LineWidth', 2); hold on; grid on; ylabel('I (amperes)'); xlabel('V (volts)'); title({'I-V Characteristic Curve of LED';'and fifth-order polynomial approximation.'});
Соответствуйте данным с помощью полинома пятого порядка и наложите полученные данные с моделью LED, аппроксимированного полиномом пятого порядка.
approxPoly = polyfit(v,i,5);
Отобразите аппроксимированные данные на графике.
plot(v,polyval(approxPoly,v),'-k','Linewidth',1);
На основе полиномиального приближения пятого порядка можно найти приближение первого порядка, которое представляет линейно увеличивающийся фрагмент кривой. Напряжение, при котором LED включает, состоит приблизительно в том, где эта строка пересекает ось напряжения.
Найдите строку, которая проходит через линейный фрагмент сигнала.
normErr = -1; errThreshold = 0.001; numPointsForLine = numel(v) - 10; while (numPointsForLine > 0) && (normErr < errThreshold) approximation = polyval(approxPoly,v(numPointsForLine:end)); [linearPoly, errorStruct] = polyfit(v(numPointsForLine:end),approximation, 1); numPointsForLine = numPointsForLine - 5; normErr = errorStruct.normr; end
Оцените линейный полином в области значений измерений. Значение, где это пересекает горизонтальную строку, представляющую любую текущую утечку, является напряжением, при котором LED включает.
LEDThreshold = 1.2; leakageCurrent = mean(i(v<LEDThreshold)); linearIV = polyval(linearPoly,v); minIndex = sum(linearIV<leakageCurrent);
Постройте линейный фрагмент кривой.
plot(v(minIndex-1:end),polyval(linearPoly,v(minIndex-1:end)),'Magenta','Linewidth',2,'LineStyle','--')
Окружите аппроксимированное напряжение, при котором LED включает.
plot(v(minIndex),leakageCurrent,'o','Linewidth',2,'MarkerSize',20,'MarkerEdgeColor','Red') title(sprintf('Calculated Voltage at Which LED Turns On: %1.2fV',v(minIndex)));
outputSingleScan(ADISession,0);
close
clear ADISession