參考:http://blog.sina.com.cn/s/blog_4eff3a0e0100zb8h.html
最近進行了示波器的數據采集,MSO2014,openChoice軟件+Tekvisa驅動就可以了,采集的波形可以直接用matlab處理。
后面又發現可以直接將示波器跟matlab進行連接。
1.啟動matlab,輸入tmtool,彈出新窗口。
2.左邊,test&measurement窗口下,打開hardware樹,選擇示波器與電腦的連接方式。比如我選擇的是visa下的usb連接。之前可能需要安裝usb驅動程序,買示波器的時候會有盤。據說有些情況下也可以不裝驅動,因為matlab有自帶的!
3.中間主窗口,scan,進行搜索,搜索到示波器后,就可以按下“connect”進行連接了
4.仔細閱讀示波器的說明pdf,了解示波器的命令。比如我的示波器,往示波器發送指令curve?,就會返回示波器測量數據,還可以發送一些指令來調正橫縱軸的單位,發送命令就是write,請求回復就是query。
5.在tmtool窗口的communicate標簽中,發送命令,讀取回復,在session log標簽下將看到對應的m代碼。
6.復制session log下的代碼,回到matlab,新建m文件,粘貼代碼,在前面補上function,后面補上需要的后續處理,然后m文件就完成了!
7.類似的步驟,可以在gui下編寫callback,也可以在simulink中編寫s函數。
注意點:
1.示波器對於matlab而言,是一個對象obj,啟用時要fopen,不用時要fclose。實踐中,若fopen后,程序運行報錯,則在下一次調試前,要先fclose一下,以防止下次fopen報錯。
2.往對象中寫入命令,命令格式是string,如果需要寫入xx1,xx2,xx3等眾多有規律的命令時,可以通過strcat和num2str兩個命令。前者將多個str組合為一個str,需要注意的是各str右側的空格會被自動忽略,例如strcat('xx ','1');出來的是xx1,而不是xx 1。那個讓我找了三天的錯誤,就是這樣產生的!
3.simulink的模塊庫中,有instrument control toolbox庫,里面有query instrument模塊用於從示波器等對象讀取數據,設置時的id等信息一定要寫成str格式,也就是帶上兩個',如圖所示。個人不太喜歡用這個模塊,還是s函數更加靈活。
貢獻部分代碼:
obj1 = visa('NI', 'USB0::0x0699::0x0413::C013300::0::INSTR');
fopen(obj1);
……
fclose(obj1);
%第一句是把示波器的連接方式、地址等信息定義成對象obj1。最后一句別忘了要關閉哦~
fprintf(obj1, 'DATa:SOUrce CH1');
%告訴示波器,我要讀取的數據源是通道1~
n=100;
data=zeros(1,n*100);
for i=1:n
temp=str2num(query(obj1,'curve?'));
data((100*(i-1)+1):(100*i))=temp;
……
end
%每次讀取100個數據,連續讀取n次,得到data,也就是一個100*n長度的向量,一定要先定義好向量長度哦,可以大大提高matlab的運行效率。由於query讀入數據是str格式,str2num命令可以轉成向量。
以上的一些是參考,但是發現並不是那樣的,對於以上的程序並不能運行通過,所以還是要針對自己的示波器進行編寫。