資料介紹
描述
介紹
超聲波測距模塊HC-SR04提供2cm-400cm非接觸測量功能,測距精度可達3mm。這些模塊包括超聲波發射器、接收器和控制電路。工作的基本原理:
- (1) 使用IO觸發至少10us的高電平信號,
- (2) 模塊自動發送八個40kHz 并檢測是否有脈沖信號返回。
- (3) IF 信號返回,通過高電平,輸出IO 高電平持續時間即為從發送超聲波到返回的時間。
- 測試距離=(高電平時間×聲速(340M/S)/2
雖然所有這些聽起來很簡單,但由于涉及到精確計時,我沒有找到很多關于在 Zephyr 上實現它的最佳方法。所以我決定自己做一個。
硬件
- 96Boards Carbon:由于傳感器具有 5v 的高值,Carbon 是我能用 3v3 獲得的最接近的值。3v3 足以在沒有任何電平轉換的情況下向觸發引腳發出信號,但我們仍然需要在回聲引腳上安裝一個分壓器。
- HC-SR04:原因很明顯。
- 分壓器:它基本上是電阻器的組合,用于將 Echo Pin 上的電壓從 5v 降低到 3v3,因此我們最終不會燒毀碳板。這是顯示如何設置它的圖表:
- 接線非常簡單,5v 連接到 5v 引腳,GND 連接到接地引腳,觸發器連接到碳上的“PA1”,Echo 引腳的分壓器的另一端連接到“PA3”上碳。
計算周期
- 好的,讓我們來看看代碼
#include
#include
#include
#include
#include
#include
#include
#define GPIO_OUT_PIN 1
#define GPIO_INT_PIN 3
#define PORT "GPIOA"
void main(void)
{
uint32_t cycles_spent;
uint32_t nanseconds_spent;
uint32_t val;
uint32_t cm;
uint32_t stop_time;
uint32_t start_time;
struct device *dev;
dev = device_get_binding(PORT);
gpio_pin_configure(dev, GPIO_OUT_PIN, GPIO_DIR_OUT);
gpio_pin_configure(dev, GPIO_INT_PIN, (GPIO_DIR_IN | GPIO_INT_EDGE| GPIO_INT_ACTIVE_HIGH | GPIO_INT_DEBOUNCE));
while (1) {
gpio_pin_write(dev, GPIO_OUT_PIN, 1);
k_sleep(K_MSEC(10));
gpio_pin_write(dev, GPIO_OUT_PIN, 0);
do {
gpio_pin_read(dev, GPIO_INT_PIN, &val);
} while (val == 0);
start_time = k_cycle_get_32();
do {
gpio_pin_read(dev, GPIO_INT_PIN, &val);
stop_time = k_cycle_get_32();
cycles_spent = stop_time - start_time;
if (cycles_spent > 1266720) //260cm for 84MHz (((MAX_RANGE * 58000) / 1000000000) * (CLOCK * 1000000))
{
break;
}
} while (val == 1);
nanseconds_spent = SYS_CLOCK_HW_CYCLES_TO_NS(cycles_spent);
cm = nanseconds_spent / 58000;
printk("%d\n", cm);
k_sleep(100);
}
}
1)初始化
頭文件
#include
#include
#include
#include
#include
#include
#include
管腳定義
#define GPIO_OUT_PIN 1
#define GPIO_INT_PIN 3
#define PORT "GPIOA"
變量初始化
void main(void)
{
uint32_t cycles_spent;
uint32_t nanseconds_spent;
uint32_t val;
uint32_t cm;
uint32_t stop_time;
uint32_t start_time;
初始化引腳并設置 IO 方向
struct device *dev;
dev = device_get_binding(PORT);
gpio_pin_configure(dev, GPIO_OUT_PIN, GPIO_DIR_OUT);
gpio_pin_configure(dev, GPIO_INT_PIN, (GPIO_DIR_IN | GPIO_INT_EDGE| GPIO_INT_ACTIVE_HIGH | GPIO_INT_DEBOUNCE));
2)主要邏輯
首先,我們將觸發引腳設置為高電平 10 微秒
gpio_pin_write(dev, GPIO_OUT_PIN, 1);
k_sleep(K_MSEC(10));
gpio_pin_write(dev, GPIO_OUT_PIN, 0);
接下來我們的第一個 do while 循環運行直到 Echo Pin 為低電平,并在它變高時立即中斷,然后我們開始計算周期
do {
gpio_pin_read(dev, GPIO_INT_PIN, &val);
} while (val == 0);
start_time = k_cycle_get_32();
我們的下一個 do while 循環運行直到 ECHO 引腳保持高電平:在這個 do while 塊中,我們計算花費的周期數并不斷檢查if
用于限制最大范圍的值。我們使用公式 (((MAX_RANGE * 58000) / 1000000000) * (CLOCK * 1000000)) 并將 MAX_RANGE 替換為以厘米為單位的所需值,并將 CLOCK 替換為微處理器的時鐘速度。
do {
gpio_pin_read(dev, GPIO_INT_PIN, &val);
stop_time = k_cycle_get_32();
cycles_spent = stop_time - start_time;
if (cycles_spent > 1266720) //260cm for 84MHz (((MAX_RANGE * 58000) / 1000000000) * (CLOCK * 1000000))
{
break;
}
} while (val == 1);
最后我們使用該SYS_CLOCK_HW_CYCLES_TO_NS
函數計算 ECHO 引腳為高電平時的持續時間,它以納秒為單位返回結果。然后將值乘以 58000 得到以厘米為單位的結果,請記住空氣中的聲速是 340 米/秒
nanseconds_spent = SYS_CLOCK_HW_CYCLES_TO_NS(cycles_spent);
cm = nanseconds_spent / 58000;
printk("%d\n", cm);
- 首先,有一個主要的 while 循環讓事情無限運行
- 計時方法:要為 ECHO 引腳高電平狀態計時,我們可以使用普通精度方法,該方法使用系統時鐘來確定兩個時間點之間經過了多少時間。但是,我們將使用高精度方法來計算兩個時間點之間經過的周期,因為我們的邏輯基本上是計算確切的持續時間。
參考
- 超聲波傳感器HC-SR04(Arduino項目)
- HC-SR04超聲波傳感器開源分享
- 帶有HC-SR04的超聲波傳感器陣列 0次下載
- HC-SR04超聲波模塊
- HC-SR04超聲波測距塊講解(附32單片機源碼)
- HC-SR04超聲波測距超全資料 28次下載
- HC-SR04超聲波測距模塊原理及電路圖 61次下載
- HC-SR04超聲波傳感器模塊的示例代碼資料合集 9次下載
- HC-SR04超聲波電路原理圖免費下載 501次下載
- 使用單片機和HC-SR04設計超聲波測距系統的設計資料合集 135次下載
- 超聲波測距模塊(HC-SR04)用戶手冊 87次下載
- 超聲波測距資料(HC-SR04) 104次下載
- HC-SR04 168次下載
- HC-SR04超聲波測距資料 18次下載
- HC-SR04超聲波測距模塊及程序 83次下載
- 基于STM32的HC-SRF04超聲波測距proteus仿真設計 2224次閱讀
- 基于HC-SR04的超聲波洗手液電路 1548次閱讀
- 基于51單片機的超聲波液位控制器設計 2250次閱讀
- 使用超聲波模塊+HC-SR04模塊的超聲波測距 5929次閱讀
- 基于Seeed GPRS Shield實現的GSM家庭報警器設計方案 1643次閱讀
- 如何用超聲波傳感器-HC-SR04感應音樂? 2624次閱讀
- 超聲波傳感器的優勢有哪些 4176次閱讀
- 超聲波傳感器的應用 1673次閱讀
- hc-sr04超聲波傳感器的原理和應用 3.1w次閱讀
- 超聲波傳感器的使用注意事項說明 2905次閱讀
- 基于51單片機的超聲波測距模塊設計 6859次閱讀
- 超聲波傳感器及工作原理解析 9648次閱讀
- 簡單的超聲波測距模塊制作_HC-SR04超聲波測距模塊及制作圖詳解 5.3w次閱讀
- 超聲波測距模塊工作原理_HC-SR04模塊詳解 40w次閱讀
- 超聲波傳感器的原理及應用 1.1w次閱讀
下載排行
本周
- 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次下載 | 免費
評論
查看更多