資料介紹
描述
介紹
超聲波測距模塊HC-SR04提供2cm-400cm非接觸測量功能,測距精度可達3mm。這些模塊包括超聲波發(fā)射器、接收器和控制電路。工作的基本原理:
- (1) 使用IO觸發(fā)至少10us的高電平信號,
- (2) 模塊自動發(fā)送八個40kHz 并檢測是否有脈沖信號返回。
- (3) IF 信號返回,通過高電平,輸出IO 高電平持續(xù)時間即為從發(fā)送超聲波到返回的時間。
- 測試距離=(高電平時間×聲速(340M/S)/2
雖然所有這些聽起來很簡單,但由于涉及到精確計時,我沒有找到很多關(guān)于在 Zephyr 上實現(xiàn)它的最佳方法。所以我決定自己做一個。
硬件
- 96Boards Carbon:由于傳感器具有 5v 的高值,Carbon 是我能用 3v3 獲得的最接近的值。3v3 足以在沒有任何電平轉(zhuǎn)換的情況下向觸發(fā)引腳發(fā)出信號,但我們?nèi)匀恍枰诨芈曇_上安裝一個分壓器。
- HC-SR04:原因很明顯。
- 分壓器:它基本上是電阻器的組合,用于將 Echo Pin 上的電壓從 5v 降低到 3v3,因此我們最終不會燒毀碳板。這是顯示如何設(shè)置它的圖表:
- 接線非常簡單,5v 連接到 5v 引腳,GND 連接到接地引腳,觸發(fā)器連接到碳上的“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;
初始化引腳并設(shè)置 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)主要邏輯
首先,我們將觸發(fā)引腳設(shè)置為高電平 10 微秒
gpio_pin_write(dev, GPIO_OUT_PIN, 1);
k_sleep(K_MSEC(10));
gpio_pin_write(dev, GPIO_OUT_PIN, 0);
接下來我們的第一個 do while 循環(huán)運行直到 Echo Pin 為低電平,并在它變高時立即中斷,然后我們開始計算周期
do {
gpio_pin_read(dev, GPIO_INT_PIN, &val);
} while (val == 0);
start_time = k_cycle_get_32();
我們的下一個 do while 循環(huán)運行直到 ECHO 引腳保持高電平:在這個 do while 塊中,我們計算花費的周期數(shù)并不斷檢查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函數(shù)計算 ECHO 引腳為高電平時的持續(xù)時間,它以納秒為單位返回結(jié)果。然后將值乘以 58000 得到以厘米為單位的結(jié)果,請記住空氣中的聲速是 340 米/秒
nanseconds_spent = SYS_CLOCK_HW_CYCLES_TO_NS(cycles_spent);
cm = nanseconds_spent / 58000;
printk("%d\n", cm);
- 首先,有一個主要的 while 循環(huán)讓事情無限運行
- 計時方法:要為 ECHO 引腳高電平狀態(tài)計時,我們可以使用普通精度方法,該方法使用系統(tǒng)時鐘來確定兩個時間點之間經(jīng)過了多少時間。但是,我們將使用高精度方法來計算兩個時間點之間經(jīng)過的周期,因為我們的邏輯基本上是計算確切的持續(xù)時間。
參考
- 超聲波傳感器HC-SR04(Arduino項目)
- HC-SR04超聲波傳感器開源分享
- 帶有HC-SR04的超聲波傳感器陣列 0次下載
- HC-SR04超聲波模塊
- HC-SR04超聲波測距塊講解(附32單片機源碼)
- HC-SR04超聲波測距超全資料 30次下載
- HC-SR04超聲波測距模塊原理及電路圖 74次下載
- HC-SR04超聲波傳感器模塊的示例代碼資料合集 11次下載
- HC-SR04超聲波電路原理圖免費下載 736次下載
- 使用單片機和HC-SR04設(shè)計超聲波測距系統(tǒng)的設(shè)計資料合集 146次下載
- 超聲波測距模塊(HC-SR04)用戶手冊 88次下載
- 超聲波測距資料(HC-SR04) 114次下載
- HC-SR04 183次下載
- HC-SR04超聲波測距資料 20次下載
- HC-SR04超聲波測距模塊及程序 85次下載
- 基于STM32的HC-SRF04超聲波測距proteus仿真設(shè)計 6.2k次閱讀
- 基于HC-SR04的超聲波洗手液電路 2.8k次閱讀
- 基于51單片機的超聲波液位控制器設(shè)計 3.5k次閱讀
- 基于Seeed GPRS Shield實現(xiàn)的GSM家庭報警器設(shè)計方案 2.7k次閱讀
- 如何用超聲波傳感器-HC-SR04感應(yīng)音樂? 3.5k次閱讀
- 超聲波傳感器構(gòu)成的超聲波加濕器電路 1w次閱讀
- 超聲波傳感器的優(yōu)勢有哪些 4.9k次閱讀
- 超聲波傳感器的應(yīng)用 2.5k次閱讀
- hc-sr04超聲波傳感器的原理和應(yīng)用 3.4w次閱讀
- 超聲波傳感器的使用注意事項說明 3.5k次閱讀
- 基于51單片機的超聲波測距模塊設(shè)計 7.4k次閱讀
- 超聲波傳感器及工作原理解析 1w次閱讀
- 簡單的超聲波測距模塊制作_HC-SR04超聲波測距模塊及制作圖詳解 5.5w次閱讀
- 超聲波測距模塊工作原理_HC-SR04模塊詳解 40.4w次閱讀
- 超聲波傳感器的原理及應(yīng)用 1.3w次閱讀
下載排行
本周
- 1新一代網(wǎng)絡(luò)可視化(NPB 2.0)
- 3.40 MB | 1次下載 | 免費
- 2冷柜-電氣控制系統(tǒng)講解
- 13.68 MB | 1次下載 | 10 積分
- 3MDD品牌三極管MMBT3906數(shù)據(jù)手冊
- 2.33 MB | 次下載 | 免費
- 4MDD品牌三極管S9012數(shù)據(jù)手冊
- 2.62 MB | 次下載 | 免費
- 5LAT1218 如何選擇和設(shè)置外部晶體適配 BlueNRG-X
- 0.60 MB | 次下載 | 3 積分
- 6LAT1216 Blue NRG-1/2 系列芯片 Flash 操作與 BLE 事件的互斥處理
- 0.89 MB | 次下載 | 3 積分
- 7收音環(huán)繞擴音機 AVR-1507手冊
- 2.50 MB | 次下載 | 免費
- 8MS1000TA 超聲波測量模擬前端芯片技術(shù)手冊
- 0.60 MB | 次下載 | 免費
本月
- 1愛華AIWA HS-J202維修手冊
- 3.34 MB | 37次下載 | 免費
- 2PC5502負載均流控制電路數(shù)據(jù)手冊
- 1.63 MB | 23次下載 | 免費
- 3NB-IoT芯片廠商的資料說明
- 0.31 MB | 22次下載 | 1 積分
- 4UWB653Pro USB口測距通信定位模塊規(guī)格書
- 838.47 KB | 5次下載 | 免費
- 5蘇泊爾DCL6907(即CHK-S007)單芯片電磁爐原理圖資料
- 0.04 MB | 4次下載 | 1 積分
- 6蘇泊爾DCL6909(即CHK-S009)單芯片電磁爐原理圖資料
- 0.08 MB | 2次下載 | 1 積分
- 7100W準諧振反激式恒流電源電路圖資料
- 0.09 MB | 2次下載 | 1 積分
- 8FS8025B USB的PD和OC快充協(xié)議電壓誘騙控制器IC技術(shù)手冊
- 1.81 MB | 1次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191439次下載 | 10 積分
- 5十天學(xué)會AVR單片機與C語言視頻教程 下載
- 158M | 183353次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81602次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73822次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App





創(chuàng)作
發(fā)文章
發(fā)帖
提問
發(fā)資料
發(fā)視頻
上傳資料賺積分
評論