Re: [問題] DAQ (USB 6211) 讀取值 (已解決)

看板MATLAB作者 (Jong)時間12年前 (2013/04/04 00:28), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/1
※ 引述《hwwwh (Jong)》之銘言: : 先簡要說明我的目的 : 我要把電腦連接到元件上 輸出不同值會使得該元件反射的光強不同 : 希望利用DAQ連接到Power meter上讀取其光的強度 : (我使用的DAQ是NI的USB 6211) : 再簡而言之: : 從電腦輸出一個值 : 而隨著該值的強度變化(ex 0~100) : power meter上所測到的強度也改變 : 所以我寫了一個迴圈(主要有問題的部分) : for i=1:100; : G=i; %輸出的強度 : pause(1); %怕跳得太快來不及讀到值又進入下一個i (或許可略) : . : . : . : . : end : 想在中間...部分加入DAQ的指令 : 從DAQ中記錄下power meter上的值 : 但是我是要在迴圈中每次(每一個i)只紀錄一個值 : 應該要使用什麼指令呢 : 希望有經驗或是有任何想法的人能提供一些意見和指教 麻煩大家了 自己試了一陣子 找到解決的辦法 PO上來分享一下 如果有人要用的話可以參考 因為用的是USB6211 就以我的經驗當作例子 我是先用Labview確定USB6211正常運作 雖然要讀取的是power meter所偵測到的數值 但我必須讀取的是DAQ中的電壓值再自行做轉換(下面會說明) 其電壓和真實顯示的值中轉換的概念 是將power meter所定的最大量測值視作最大電壓 比如說你現在的量測最大值是100mW 而你定義的電壓範圍是[-1 1] 這表示當power meter顯示50mW時 會讀到0.5 但是量測的最大值是可以隨使用者改變的(你可以是10mW 1mW 或者其他) 所以有改過就要記得將擷取的data做一個乘上比率的處理 以下是我擷取部分的coding daqhwinfo('nidaq'); ai=analoginput('nidaq','Dev1'); ai.InputType=('SingleEnded'); %這非常重要 它內建的設定並不是這個選項 可以打開ai去看裡面的參數設定 %一開始就是因為這個設定沒有改成這個選項 怎麼讀到讀到浮動的值 %最後在精神挫敗之下自暴自棄想說打開ai的參數設定隨便亂改 %沒想到一看到這一行字 還沒試就有一見鍾情的感覺 覺得改了一定有用 %不過詳細原因我不清楚 但我猜是告訴DAQ讀取值的時候要看A0和接地間的電壓差吧 addchannel(ai,0); %這個0(由於我插在A0)是對應到你將你的訊號線正端插在DAQ上的哪一個孔 ai.Channel.InputRange = [-1 1]; start(ai); d=getdata(ai); a=sum(d)/1000; %這只是我為了抓個平均所做的數學處理而已 ratio=75.85; %因為我設定最大的power meter讀取值是75.85mW data=a*ratio; %如上所述 最後得到的值要乘上這個ratio delete(ai); %取得data後要刪除這個ai 免得下次讀取時會發生問題 以上是我的程式部分 硬體的部分就是把BNC接頭一端插在power meter上 一端裝上一個轉接頭 再伸出兩條電線正的接AI 負的接地 在這個版受過很多前輩的幫助 而由於DAQ大家在使用時大部分都是用Labview 因此自己查的時候相關的matlab資訊很少 終於成功了便決定一定要po上來 希望給用到DAQ且遇到跟我一樣問題的人一些幫助 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.198.173

04/08 23:54, , 1F
04/08 23:54, 1F
文章代碼(AID): #1HN5YMXs (MATLAB)