資料介紹
描述
本文介紹如何在機器人項目中通過 Simulink? 和 Arduino? 建模和使用 Sharp? 紅外傳感器 (GP2Y0A02YK0F)。目的是展示如何使用基于模型的設計。對于某些機器人應用程序,此處使用的建模和過濾是多余的。即使是這種情況,如果發生意外情況,了解系統如何工作總是好的。選擇正確的建模級別和系統復雜性是一項重要的工程技能。
在第一部分中,我們將專注于對傳感器進行建模并獲得可靠的距離測量。這種方法的一個優點是當沒有檢測到障礙物時它不會使用任何 CPU 時間。在第三篇文章中,我們會將傳感器模型包含在移動機器人的仿真環境中。在第四篇也是最后一篇文章中,我們將在一個真實的機器人平臺上測試所有部件。
所需硬件
- Arduino Mega 2506 板
- 帶電線的小面包板
- 1 夏普紅外傳感器 GP2Y0A02YK0F
- 1 電容器 10uF – 100 uF
- 1 電容 1 uF
- 1 電容器 200 nF
- 1 個電阻 10 歐姆
植物模型介紹
在控制理論中,傳感器、執行器和處理此類信號的元件的組合通常被稱為“工廠”。植物模型很重要并且有很多用途。通過圍繞將在 CPU 上運行的部件對系統進行建模,可以及早且廉價地測試設計。系統模擬在發現錯誤方面非常有效,而不會損壞硬件,甚至在某些情況下,在任何硬件可用之前也是如此。系統模型還允許對新想法進行實驗。例如。具有合適的機器人導航系統模型的想法可以很容易地進行評估。有些可以丟棄,有些看起來更有希望的可以進一步開發。
植物建模是一個學習機會。創建了有關系統如何工作的知識,這對于軟件的開發、調試非常有用,對于獲得有關如何使用它的新想法甚至更重要。植物建模是一種知識創造活動,知識存儲在其他人可以輕松獲取的模型中。
植物模型的保真度
什么是合適的植物模型?應該詳細到什么程度?選擇正確的細節層次是困難的。一些開發人員過度使用它,而另一些開發人員則忽略了重要的行為。在準確性、建模(和獲取知識)所花費的時間和仿真時間之間需要權衡取舍。決定在特定情況下使用多少努力是一項隨著時間的推移隨著經驗而發展的技能。沒有正確的答案,系統開發可以從具有不同保真度的多個工廠模型中受益。例如,用于控制器評估的詳細工廠模型和用于測試邏輯的細節較少的工廠模型。
工廠模型可以通過第一性原理或數據驅動建模獲得。最常見的方法是使用它們的組合。在本文中,我們將使用類似于學習過程的臨時方法。
任務 1 – 檢查傳感器
這是工廠建模和傳感器學習過程的第一步。將 +5V、GND 和傳感器輸出連接到模擬輸入 0。檢查數據表中的傳感器引腳。
使用 Arduino IDE 和下面的草圖在串行監視器上打印傳感器讀數。
?
即使傳感器前面有固定障礙物,從傳感器讀取的值也會波動很大。在我的情況下,它在 152 和 191 之間變化。這可能只是傳感器噪音嗎?將示波器連接到傳感器輸出會提供線索:
頻率為 1000 Hz 時,傳感器輸出的峰值約為 90 mV。傳感器每毫秒發送一束紅外光,并根據反射光照射到傳感器的哪個元件輸出電壓電平。要了解有關傳感器工作原理的更多信息,請查看本文。
似乎峰值由一種快速模式(初始峰值)和一種慢速模式組成。信號上也有一些噪音。可以對此進行更多詳細說明并深入研究電氣特性,但一些(經驗)告訴我,這對于機器人項目來說已經足夠了。
根據圖表,數據表還顯示輸出電壓電平是非線性的:
任務 2 – 建模我們學到的東西
從任務 1 中我們了解到,傳感器的輸出信號包含三個分量:
- 從距離到電壓電平的非線性函數。該功能從 0 厘米到 150 厘米,這是傳感器的最大范圍。
- 測量噪聲
- 具有快動態和慢動態的峰值
非線性函數
非線性函數可以通過 Simulink 中的查找表輕松實現。從數據表中的圖中測量得出:
table_data = [0 2.3 2.75 2.55 2 1.55 1.25 1.05 0.9 0.8 0.725 0.65 0.6 0.55 0.5 0.495 0.49];
breakpoints = [0 10 15 20 30 40 50 60 70 80 90 100 110 120 130 140 150] / 100;
plot(breakpoints, table_data);
title('Sensor output value');
xlabel('Distance (m)');
ylabel('Voltage (V)');
grid on;
測量噪聲
測量噪聲由帶限白噪聲建模。必須確定功率和采樣時間參數。我通過測試不同的數字來做到這一點。對于采樣時間,我從測量中知道峰值寬度略大于 0.1 ms,噪聲應該更快。0.1 ms / 125 的值可以正常工作。功率逐漸降低,直到 Simulink 示波器顯示與測量值相似的噪聲水平。
動力學
數據驅動建模現在可用于使用系統識別工具箱獲得動力學的傳遞函數。在這種情況下,我選擇只添加兩個傳遞函數。一個用于慢速動力學的一階傳遞函數和一個用于快速動力學的二階傳遞函數。脈沖發生器將驅動傳遞函數。
根據我的測量,我們看到慢速動態在脈沖期間上升了約 30 mV。這意味著靜態增益應該約為 0.03。一階函數的上升時間為:
靜態增益 K = 0.03 我們得到:
這些都是很好的初始值,并通過一些手動調整使階躍響應看起來像我最終得到的測量值:
對于二階函數,我們有:
因為它應該比一階函數更快,所以我選擇 f = 100 kHz 和 xi = 0.7。
慢速和快速動態的范圍輸出:
把它放在一起
將這些組件簡單地添加在一起,生成的 Simulink 模型如下所示:
和模擬輸出:
筆記!使用示波器測量傳感器測量距離的電壓表明,我的傳感器提供的電壓略低于數據表中的表格。這可能是由于傳感器的個體差異和/或 Arduino 模擬輸入中的電氣特性造成的。為了安全起見,我將表格值保留在這里,如有必要,我可以稍后進行校準。
任務 3 – 平滑信號
閱讀傳感器的數據表,我還發現建議在 Vcc 和 gnd 之間使用一個相當大的電容器,盡可能靠近傳感器,以限制突發期間的峰值。除了大電容外,我還添加了一個 200 nF 的小電容,以抑制電源電壓上的一些高頻噪聲。
為了進一步平滑傳感器輸出,我添加了一個簡單的無源濾波器,即 RC 濾波器。
?
該濾波器的截止頻率為:
為了至少過濾快速動態,截止頻率應低于 100 kHz。此外,它不能太低,因為與傳感器的距離變化會滯后。模擬是一個很好的工具,可以玩這樣的設計,看看會發生什么并了解它是如何工作的。經過一些實驗,我選擇了大約 16 kHz 的截止頻率。比意味著 2*pi*R*C = 1 / 16000。R 應盡可能低以避免靜態誤差,我發現 10 ohm 可用,然后 C = 1 uF。
應用電容器和濾波器并測量濾波后的輸出,我得到以下結果:
這是電路:
為了模擬旁路電容器的影響,我簡單地將脈沖生成的幅度減小到 0.1,從而得到輸出的十分之一。我還增加了噪音以使其更準確。濾波器被實現為一階濾波器,RC / (s + RC),參見下一個任務中的模型。模擬輸出現在如下所示:
使用此處的模型無法捕捉旁路電容器的影響,因為這需要更詳細的傳感器電氣特性模型。通過減少尖峰的近似值對于我們的機器人應用來說已經足夠了。
可以使用SimElectronics更詳細地以特定領域的方式實現該工廠模型。
任務 4 – 對信號進行采樣
要在可以在 Arduino 目標上執行的模型中使用測量信號,必須提供兩件事;采樣時間和正確的數據類型。Arduino 模擬輸入模塊輸出一個 16 位無符號整數。在我們的應用程序中,我們選擇了 100 ms 的采樣時間。
使用默認參考電壓 (5V) 的模數轉換輸出介于 0 (0V) 和 1023 (5V) 之間的值。為了轉換我們測量的電壓,我們需要將信號乘以 1023 并除以 5。在乘以和添加噪聲之前,以 100 ms 對連續信號進行采樣。之前采樣的原因是為了加快我們的模擬速度。如果在我們修改后對其進行采樣,這些操作將不得不與模型的連續部分一起更頻繁地完成,從而使我們的模擬陷入困境。
進行乘法運算的增益模塊還將信號轉換為無符號 16 位整數并使信號飽和以避免負輸入電壓的回卷。這可以防止輸入電壓為 0 且噪聲小于 0 的情況。如果沒有這種飽和,結果將是一個非常大的數字。
請注意,5V 最大輸入沒有飽和。在模型中,輸出將持續超過 1023。在實際電路板上,電路板的輸入引腳可能會損壞。最好的方法是檢查過電壓并至少給出模擬警告,但這留作練習。例如,僅僅添加一個飽和塊意味著這種錯誤情況不容易被仿真檢測到,并可能導致硬件故障。
任務 5 – 獲取距離
讀取模擬輸入會給我們一個介于 0 到 1023 之間的值,對應于 0 V 到 5 V。有很多方法可以將此信號轉換為有用的距離。這里我選擇使用查找表,因為距離是非線性的,并且查找表易于校準。
我們現在可以重用我們在傳感器建模和采樣過程中學到的知識。第一步是反轉用于傳感器的查找表。這是有問題的,因為該函數在反轉時不是單調的。例如,對于 10 cm 和 25 cm 的距離,傳感器提供大致相同的輸出電壓。為了解決這個問題,我們需要刪除前兩個值:0 和 10 cm。結果是只能測量 20 到 150 厘米之間的范圍。這也是傳感器根據規格的工作范圍。這意味著如果我們在 10 厘米處有障礙物,Arduino 軟件會認為它在 25 厘米處。這必須在系統其余部分的設計中加以考慮。解決它的一些方法是在最小范圍之前停止,
除了反轉表格,我們還需要對采樣進行補償。表中的斷點包含從 0.49 V 到 2.75 V 的電壓,但我們讀取的值是從 0 到 1023 的整數。乘以 5 并除以 1023 應該可以得到正確的值。但是,這會給我們一個介于 0 和 5 之間的電壓,并且整數不能提供足夠的分辨率。因此,我們還乘以 1000 以獲得以 mV 為單位的整數值。我們對距離做同樣的事情,并以毫米為單位獲得輸出范圍測量值。
最后,我們放入一個檢查閾值的塊,如果范圍高于 250 mm,則輸出 0,如果低于 250 mm,則輸出 1。此檢查將用于在下一步點亮 Arduino 板上的用戶 LED。
要進一步測試模型,請將斜坡作為距離并檢查布爾輸出是否在正確的距離處觸發。
對采樣和斷點進行補償的倒排表:
inv_table = uint16([150 140 130 120 110 100 90 80 70 60 50 40 30 20 15]*10);break_points = [490 495 500 550 600 650 725 800 900 1050 1250 1550 2000 2550 2750] * 1023/(5*1000);plot(break_points, inv_table);title('Distance table');ylabel('Distance output (mm)');xlabel('Sampled value');grid on;
完整的模型現在看起來像這樣:
任務 6 – 在目標上運行
該系統的建模和高級設計現已完成。下一步是稍微清理模型并設計一個架構,讓我們既可以模擬整個系統,又可以在目標硬件上運行算法。如果連接了 Arduino 輸入塊,則無法再使用植物模型。使實際的軟件實現平臺獨立也是一個很好的設計。使用引用模型,我們可以創建三個模型:
- 全系統模型(帶工廠)
- 軟件模型(算法)
- 一個 Arduino 平臺模型,帶有 Arduino I/O 模塊
完整的系統模型和 Arduino 平臺模型現在可以組合成一個模型塊,它引用軟件和硬件模型。這為我們提供了以下信息:
- 信息只存儲在一個地方,無需復制軟件模型。
- 獨立于平臺的軟件模型,只需更改平臺模型即可輕松將其與另一個目標一起使用。
- 工廠和軟件模型易于驗證和測試。
系統型號:
和 Arduino 子系統:
請注意,software_6 是一個單獨的模型,一個引用模型:
因此,為了運行軟件模型,下面的平臺模型包括 Arduino I/O 模塊,并且還引用了 software_6 模型。
在連接了傳感器、濾波器和電容器的目標上加載并運行 platform_6 模型。將物體移向和遠離傳感器,以查看用戶 LED 何時亮起。
現在可以使用這個簡單的應用程序來校準查找表。將障礙物放置在特定距離,例如 25 厘米,并使用 250 作為“比較塊”內的值。通過輕輕移動物體,檢查 LED 是否觸發接近 25 厘米。如果它不亮,請將查找表的斷點調整到 25 厘米附近。
建議的實驗
使用查找表只是映射非線性函數的一種方法。試著想出一個與函數匹配的指數方程。
嘗試用不同的材料檢查傳感器,例如深色織物和白紙。有區別嗎?
對于某些模擬,計算時間可能很關鍵。并不總是需要噪聲和尖峰的影響。在這種情況下,通過刪除除查找表之外的所有內容來制作簡單的工廠模型可能是有益的。從軟件的角度來看,采樣中的一些波動應該是唯一的區別。具有更高保真度的模型仍然可以偶爾用于檢查它是否也適用于更多細節。創建這些不同的工廠模型并比較軟件輸出。差異有多大?
概括
這是一個小例子,展示了基于模型的設計的一些有趣方面。建模的主要收獲是對傳感器工作原理的了解和理解。在不同條件下的實際應用中使用傳感器時,這些知識很重要。
在下一篇文章中,我們將實現一個新的 Arduino 模塊,該模塊通過中斷捕獲范圍閾值,而不是像本文中那樣檢查每個時間步的范圍。中斷方法的優點是在閾值觸發之前不需要任何 CPU 執行。
有用的鏈接
- 如何在Arduino上使用紅外傳感器
- 使用arduino和紅外傳感器的自動開門器
- 使用Simulink和Arduino的紅外接近傳感器
- 紅外傳感器測距仿真Proteus的仿真圖 31次下載
- 使用Arduino Leonardo和紅外傳感器制作手勢控制設備
- 數字熱釋電紅外傳感器XYC-PIR214D-D0
- 0-10米3線紅外外傳感器防水感應開關 18次下載
- 人體紅外傳感器模塊知識及安裝 22次下載
- 基于熱釋電紅外傳感器的測量技術 104次下載
- 無線傳感器網絡中的被動式紅外傳感器模型研究 60次下載
- CMOS非制冷紅外傳感器的熱學設計 27次下載
- 紅外傳感器在速度測量中的應用
- 基于熱釋電紅外傳感器的報警系統
- 基于熱釋電紅外傳感器的報警系統
- 紅外傳感器在飛輪強度實驗中的應用
- 紅外傳感器電路圖 紅外傳感器的工作原理和應用 3456次閱讀
- 熱釋電紅外傳感器原理 7303次閱讀
- 紅外傳感器工作原理_紅外傳感器的應用 2.7w次閱讀
- 什么是紅外傳感器技術它有哪些特點 5575次閱讀
- 紅外傳感器有什么作用_紅外傳感器的應用實例 3w次閱讀
- 熱釋電紅外傳感器電路 1.5w次閱讀
- 熱釋電紅外傳感器工作原理及結構說明 5.4w次閱讀
- 淺談熱釋電紅外傳感器原理和應用 2.1w次閱讀
- 熱釋電紅外傳感器的應用 淺談熱釋電紅外傳感器在物聯網中的應用 7046次閱讀
- 紅外傳感器知識全面解析 1.6w次閱讀
- 什么是紅外傳感器之紅外熱成像儀,紅外傳感器原理 2.3w次閱讀
- RD-623熱釋電紅外傳感器測試方法及典型應用電路 2.1w次閱讀
- 熱釋電紅外傳感器結構及型號 5.3w次閱讀
- 熱釋電紅外傳感器放大電路設計案例 2.1w次閱讀
- 熱釋電紅外傳感器原理和應用介紹 7.7w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多