如何設計超音波避障功能?

最近我要完成自走車自動避障的功能,用的是超音波感測器,搭配NI CompactRIO控制器,要設計出當超音波感測到有障礙物時,必須馬上使伺服馬達停止運轉,並且要自動左轉(或右轉),以順利避開障礙物!

此超音波感測器只要給電源5v,就會傳一個方波波形(如下圖),當方波波形越寬時,超音波所量測的距離越遠(越窄,越近)。但我從CompactRIO所擷取到的波形跟示波器所測量的波形怎麼會怪怪的(為什麼)?

如果所擷取到的波形是這樣的話,那程式該如何設計呢?

換個方式說,LabVIEW要如何判斷所擷取到的方波寬度

有什麼想法都可以說說看,我可以參考,謝謝!

如何判斷所擷取到的方波寬度,我以前有做過類似的東西,我是去得到開關ON/OFF的時間,意即,得到邏輯1和0的時間,我想應該跟你想做的差不多吧,你可以試著用計時器去做看看…

真是太感謝 aming 的回答了。

請問可否敘述你所說的 "得到開關ON/OFF的時間,意即,得到邏輯1和0的時間" 的流程,因為我想了很久都做不出來。

你已經得到 Pulse 波型訊號了,那就可以直接量測波型寬度,這可是Labview 的強項喔.
我做了個範例你給你看,你可以調整Frequency 就會自動量測出pulse 寬度了.

Pulse width.vi

真是太感謝 KENLIN 了,不過檔案是8.6版,我開不起來,可否麻煩轉成8.5版?  ~ 謝謝  ~

轉成 8.5版的.

Pulse width_8.5.vi

不好意思,問題又出現了。

將您的程式做些修改後應用在我的程式裡面,超音波訊號可以擷取到並顯示,Pulse width也可以判斷的出來

,不過為什麼Rising trigger location和Falling trigger location會等於"0"呢?(我覺得是資料型態的錯誤,要把DBL→圖表,可是不知如何轉換?)

以你的波型來看,訊號並不會在0 上下振蕩,所以你的 Trigger level 應該設在3左右才能抓到正確的值.

請問KENLIN,Trigger level的作用是什麼,我試了一下超音波的訊號波形都擷取的到,不過有些波形就怪怪的?

可以多看看NI 內建的說明文件,每一元件都有詳細的說明.



level specifies the threshold value signal in must cross before a trigger is detected. The default is 0.

我已經設計成下圖的樣子,訊號也可以正常擷取 (不過 wait 時間需設為50ms),

![](upload://eTOeWr5Y5hDQUDhAnGowveCC6am.jpeg)

但無法判斷波形寬度,我附上我的主程式Project.zip,並看了很多書皆沒有想到,此虛線部分的資料形態轉換該如何解決?

~ 謝謝 ~

pfrhsd951234639748.0256712963

後來問了NI工程師,問題已經解決,是要用DMA的技巧,讓它可以隨時接收隨時傳送,這樣速度會加快。

之後的避障功能就得自己設計囉!謝謝各位的幫忙!