В этом примере показов, как использовать MATLAB для подключения к аналоговым устройствам ADALM1000 модуля измерения источника и настройки и измерения тока и напряжения для характеристики светодиода.
daqlist
ans=1×5 table
VendorID DeviceID Description Model DeviceInfo
________ ________ _______________________________ ___________ ________________________
"adi" "SMU1" "Analog Devices Inc. ADALM1000" "ADALM1000" [1×1 daq.adi.DeviceInfo]
ADIDaq = daq("adi");
Устройство ADALM1000 способно генерировать напряжение и измерять ток одновременно на одном канале. Настройте устройство в этом режиме.
Добавьте аналоговый выходной канал с идентификатором SMU1 устройства и идентификатором канала A и установите его тип измерения на напряжение.
addoutput(ADIDaq,'smu1','a','Voltage');
Добавьте аналоговый входной канал с идентификатором SMU1 устройства и идентификатором канала A и установите его тип измерения текущий.
addinput(ADIDaq,'smu1','a','Current');
Подтвердите строение каналов.
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" "A" "Current" "-0.20 to +0.20 A" "SMU1_A_1"
Подключите светодиодный индикатор последовательно с 330 - резистор между каналом ADALM1000 А и землей. Альтернативно примените 5 В и 0 В.
for iLoop = 1:5 % Turn on LED by generating an output of 5 volts. write(ADIDaq,5); pause(0.2); % Turn off LED by generating an output of 0 volts. write(ADIDaq,0); pause(0.2); end
Чтобы понять характеристики I-V светодиода, прокрутите область значений значений напряжения от 0 В до 5 В и измерьте ток для каждого значения. Совокупность всех измерений предоставляет данные для графического отображения тока через светодиод в области значений напряжений.
v = linspace(0,5,250)'; i = readwrite(ADIDaq,v,"OutputFormat","Matrix");
Когда у вас есть измеренные данные, вы можете визуализировать его. Можно также вычислить математическую модель, которая аппроксимирует поведение светодиода в области значений измерений.
% 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.'});
Подгонка данных с помощью полинома пятого порядка и наложение полученных данных на модель светодиода, аппроксимированную полиномом пятого порядка.
approxPoly = polyfit(v,i,5);
Постройте график приблизительных данных.
plot(v,polyval(approxPoly,v),'-k','Linewidth',1);
На основе полиномиального приближения пятого порядка можно найти приближение первого порядка, которая представляет линейно увеличивающуюся фрагмент кривой. Напряжение, при котором светодиодный индикатор включается, приблизительно там, где эта линия пересекает ось напряжения.
Найдите линию, которая проходит через линейный фрагмент сигнала.
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
Вычислите линейный полином в области значений измерений. Значение, где это пересекает горизонтальную линию, представляющую любой ток утечки, является напряжением, при котором включается светодиод.
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','--')
Округлите приблизительное напряжение, при котором включается светодиод.
plot(v(minIndex),leakageCurrent,'o','Linewidth',2,'MarkerSize',20,'MarkerEdgeColor','Red') title(sprintf('Calculated Voltage at Which LED Turns On: %1.2fV',v(minIndex)));
write(ADIDaq,0);
close
clear ADIDaq