Matlab eanalogin 读取例子

下列文档保存为 m 文件即可

%举例说明函数eanalogin(模拟量读入)的使用
%输入取1hz,30mv正弦信号。程序大致目的是在1s的时间内,平均采样20个点的电压,作图得出一个完整的周期。

function analog_sample()
a=clock;                           
a=a(6);                               %记录起始时间
for (i = 1:20);
start = cputime;                     %cputime:matlab自启动后到该指令执行时的总时间
time = (i-1)*0.050;                  %换算时间单位
volts = eanalogin(-1,0,9,7);         % -1指接通默认的第一个labjack设备;0为非demo模式;9指使用AI2与AI3差分输入;7代表差分放大倍数为20倍
data(i,:) = [time volts];           % 记录时间与相应的电压
elapsed = -start+cputime ;          % 计算每一次循环中,读取数据等操作所用去的时间。
tttt(i)=elapsed;
pause(0.050-elapsed);                % 为达到每50ms读一次值,要将硬件存取之外多余的时间用pause指令消耗掉
end
b=clock;                             %记录循环完成后的时间
tetime=b(6)-a;
tetime                                %起始时间-完成后的时间 = 循环所用的总时间;可以发现,它不会正好等于一秒,由于循环、赋值等操作会消耗额外时间,这部分时间是不记在elapsed中的
tttt                                  %第8行至第13行所用去的时间,基本上相当于一次硬件读取所要的时间,可以发现20ms已经是其极限时间。频率再高,数据会冲突, 图形会有畸变。

% Plot data
plot(data(:,1),data(:,2));
title('Analog Input Channel 1');
xlabel('Time (s)');
ylabel('AI1 Input (V)');
grid on;

%点评:1、从单循环消耗的时间以及总消耗时间来看,这个通过循环来实现的多点读数效果并不好,理论值与实际值有较大误差。因此eanalogin比较适合于单一读
%         值。
%      2、对于30mv的电压,如果不使用差分输入自带的放大功能的话,图形效果会比较差,一般放大到0.?v后效果比较好。


%eanalogin指令中,第四项是指差分放大倍数:如单端时选取非零数,或输入值为0~7之外的数,电压值将发散。