我是Labview的新手,目前使用Labview8.6 + DAQ(USB-6221),
在使用上有些問題,還請大家幫幫忙。
要達成的目標:當input電壓在指定範圍(例如3~5V)時,數位輸出為高電位,否則為低電位
狀況:發現有數十~數百ms的延遲時間(且延遲時間長短不一),也就是數位輸出無法及時變成預期的高電位或低電位
為了簡化問題,我做了一個非常簡單的vi (如附件),
若輸入的電壓大於3V,則digital輸出為High,如此而已
用示波器去看,結果digital輸出還是有數十~數百ms的延遲時間(延遲時間不定)
請問我程式的寫法是不是有什麼根本的問題? 謝謝
在 10-24-2009 10:21 PM
請參考以下範例:
http://zone.ni.com/devzone/cda/epd/p/id/6165
理論說明請看以下
http://zone.ni.com/devzone/cda/tut/p/id/4284
如果有解決到您的問題麻煩您勾選已接受解答,並且給我一個獎勵!謝謝~~~
很不好意思,這個vi很複雜,還是沒弄懂
以致於我在step2就卡住了(timing source?)
或者有什麼比這個單純的範例可以達成原來的目標?
在 10-26-2009 09:06 PM
終於了解您的意思。
您的程式碼=
當數位輸入電壓大於3V, 則數位書出電壓為High
當數位輸入電壓小於3V, 則數位書出電壓為Low.
軟體判斷,因為作業系統內部作業的延遲,會有延遲的現象,這個現象很合理。
請問您的延遲大約在多少 ms 之內?
為方便觀察,以0V→4V方波做為參考訊號
延遲時間約100~300ms不等,如下兩圖(第一圖:一格500ms)(第二圖:一格1sec)
(藍: 輸入電壓,1Hz,0~4V)
(紫: 數位輸出,延遲時間不定、脈寬亦不定)
===============================================
若頻率提升至3Hz,則有跟不上的情形,如下圖
想請問有沒有可能將延遲時間變小? 或至少讓延遲時間盡量保持一定以便補償? 謝謝
在 10-28-2009 01:41 AM
請問您的應用是?
請問您一定要透過軟體判斷嗎?
如果一定要透過判斷來輸出高低,軟體判斷就是會受到Windows XP/Vista/7 OS的影響。
我們會推薦labview+labview FPGA 軟體模組+PCI-7811R [ 在labview執行FPGA 很容易 ]
透過硬體判斷,不會有延遲的情形。
目標是電磁線圈必須在主軸轉至指定角度時接通/切斷
這或許可以用傳統方式達成(機構、limit switch、IC、PLC等等)
但Labview可塑性高、介面清晰、使用容易,所以我試著用Labview
Labview+FPGA的方法我知道,但是性能過剩而且成本太高
在 10-29-2009 01:22 AM
Hi ysc.me97,
如果您要使用LabVIEW加上DAQ來達成上述功能,建議您使用Change Detection的功能,
並利用DAQmx提供的Hardware Timing來達成,在LabVIEW裡正好有一個範例,請參考範例裡的"Event Response.vi"
這邊是利用Change Detection的event 當作clock給timed loop,使用硬體event的時脈當作軟體的clock,
在時序上,會比純軟體的功能準確。
我們實際上測到的結果可以follow到2KHz,timing的誤差範圍在100us左右。
您可以參考以下我修改過的程式,
但畢竟這個程式的時脈還是利用軟體,只是借用硬體的event,若這個誤差範圍仍未達到您的需求,
建議您使用FPGA會更加準確,也可以將誤差縮小到ns的範圍。
NI應用工程部
試了多次還是無法運作,不知錯在哪裡![]()
請問是少接了什麼嗎? 如下圖
註: Step3說「Wire the timing source output to the Source terminal of timed loop」,因為我不知道什麼是 Source terminal ,所以沒做這步驟
另外,請問Falling Edge Physical Channels、Rising Edge Physical Channels兩個channel是如何使用?
我的理解是: 當Digital Input Lines的電位介於這兩個Channel的電位時,output為high
不知上面的理解是否正確?
在 11-03-2009 01:17 AM
如果你是使用範例的話,那麼程式部分是沒有問題的。
問題點可能在於Falling Edge Physical Channels、Rising Edge Physical Channels上面。
在我上面的範例裡,rising & falling channel是同一個,他們的意思是,
當這個channel得到的訊號有rising或是falling的動作時,就會產生一個event,讓timed loop做動。
因為這個範例是用Change Detection,所以抓的是訊號改變的時間點。也就是rising(low->high)與falling(high->low)。
我們這邊嘗試複製這個錯誤訊息,只有在沒有訊號輸入至device的時候,才會發生這個狀況,
也就是說,會有這個狀況發生,是因為沒有輸入訊號的改變,
對timed loop來說,等了一段時間之後,仍沒有有改變,才會接到這個訊息。
所以建議您將輸入訊號點查看一下是否有對應到或是有無接好。