下列文档保存为 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之外的数,电压值将发散。