色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
創(chuàng)作
電子發(fā)燒友網>電子資料下載>電子資料>Zephyr RTOS和HC-SR04超聲波傳感器開源

Zephyr RTOS和HC-SR04超聲波傳感器開源

2023-06-20 | zip | 0.00 MB | 次下載 | 免費

資料介紹

描述

介紹

超聲波測距模塊HC-SR04提供2cm-400cm非接觸測量功能,測距精度可達3mm。這些模塊包括超聲波發(fā)射器、接收器控制電路工作的基本原理:

  • (1) 使用IO觸發(fā)至少10us的高電平信號
  • (2) 模塊自動發(fā)送八個40kHz 并檢測是否有脈沖信號返回。
  • (3) IF 信號返回,通過高電平,輸出IO 高電平持續(xù)時間即為從發(fā)送超聲波到返回的時間。
  • 測試距離=(高電平時間×聲速(340M/S)/2

雖然所有這些聽起來很簡單,但由于涉及到精確計時,我沒有找到很多關于在 Zephyr 上實現它的最佳方法。所以我決定自己做一個。

硬件

  • 96Boards Carbon:由于傳感器具有 5v 的高值,Carbon 是我能用 3v3 獲得的最接近的值。3v3 足以在沒有任何電平轉換的情況下向觸發(fā)引腳發(fā)出信號,但我們仍然需要在回聲引腳上安裝一個分壓器。
  • HC-SR04:原因很明顯。
  • 分壓器:它基本上是電阻器的組合,用于將 Echo Pin 上的電壓從 5v 降低到 3v3,因此我們最終不會燒毀碳板。這是顯示如何設置它的圖表:
  • 接線非常簡單,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;

初始化引腳并設置 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ā)引腳設置為高電平 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 塊中,我們計算花費的周期數并不斷檢查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 引腳為高電平時的持續(xù)時間,它以納秒為單位返回結果。然后將值乘以 58000 得到以厘米為單位的結果,請記住空氣中的聲速是 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)時鐘來確定兩個時間點之間經過了多少時間。但是,我們將使用高精度方法來計算兩個時間點之間經過的周期,因為我們的邏輯基本上是計算確切的持續(xù)時間。

參考


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數據手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 国产人妻人伦精品9| 久久久青青| 免费国产午夜理论不卡| 亚洲精品午睡沙发系列| 国产精品久久久久久人妻精品流| 日本欧美午夜三级| www红色一片| 欧美日韩高清一区| 美女搞鸡网站| 中文字幕无码亚洲视频| 快插我我好湿啊公交车上做| 1234成人网| mm625亚洲人成电影网| 美女议员被泄裸照| 97人人添人人澡人人澡人人澡| 免费看男人J放进女人J无遮掩| 99热久久这里只有精品| 高清大胆欧美videossexo| 日韩欧美中文字幕在线二视频| 岛国大片在线播放免费| 特级毛片内射WWW无码| 孕交videosgratis乌克兰| 老师小扫货水能么多叫出来| 99久久免费视频6| 色聚网久久综合| 狠狠色狠狠色综合日日小说| 医生含着我的奶边摸边做| 蜜芽最新域名解析网站| 超碰久久国产vs| 性色少妇AV蜜臀人妻无码| 久久久久国产| 把极品白丝老师啪到腿软| 无码任你躁久久久久久久| 久久精品国产亚洲AV未满十八| 879影视动漫h免费观看| 琪琪热热色原日韩在线| 国产精品亚洲精品影院| 中文字幕无码A片久久| 日本理论片和搜子同居的日子2| 国产精品av| 最近免费中文字幕大全免费 |