一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux驅(qū)動(dòng)開發(fā)-編寫超聲波測(cè)距模塊的驅(qū)動(dòng)

DS小龍哥-嵌入式技術(shù) ? 2022-09-17 15:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

【摘要】 當(dāng)前采用的這種超聲波測(cè)距模塊在各大高校實(shí)驗(yàn)室、畢設(shè)、課設(shè)里用的很多,原理很簡(jiǎn)單,通過聲波測(cè)距,發(fā)出的聲音碰到障礙物會(huì)反彈,聲音在空氣里傳播的速度是已知的,根據(jù)時(shí)間就能計(jì)算出測(cè)量的距離。這款超聲波模塊內(nèi)部自帶了時(shí)間計(jì)算電路,型號(hào)是HC-SR04 ,它可提供 2cm-400cm 的非接觸式距離感測(cè)功能,距精度可達(dá)高到 3mm; 整個(gè)模塊包括了超聲波發(fā)射器、 接收器控制電路。

1. 介紹

當(dāng)前采用的這種超聲波測(cè)距模塊在各大高校實(shí)驗(yàn)室、畢設(shè)、課設(shè)里用的很多,原理很簡(jiǎn)單,通過聲波測(cè)距,發(fā)出的聲音碰到障礙物會(huì)反彈,聲音在空氣里傳播的速度是已知的,根據(jù)時(shí)間就能計(jì)算出測(cè)量的距離。這款超聲波模塊內(nèi)部自帶了時(shí)間計(jì)算電路,型號(hào)是HC-SR04 ,它可提供 2cm-400cm 的非接觸式距離感測(cè)功能,距精度可達(dá)高到 3mm; 整個(gè)模塊包括了超聲波發(fā)射器、 接收器與控制電路。

基本工作原理
(1) 采用 IO 口 TRIG 觸發(fā)測(cè)距, 給至少 10us 的高電平信號(hào);
(2) 模塊自動(dòng)發(fā)送 8 個(gè) 40khz 的方波, 自動(dòng)檢測(cè)是否有信號(hào)返回;
(3) 有信號(hào)返回, 通過 IO 口 ECHO 輸出一個(gè)高電平, 高電平持續(xù)的時(shí)間就是超聲波從發(fā)射到返回的時(shí)間。

測(cè)量距離的公式:

uS/58=厘米或者 uS/148=英寸; 
或是: 距離=高電平時(shí)間*聲速(340M/S)/2;
建議測(cè)量周期為 60ms 以上, 以防止發(fā)射信號(hào)對(duì)回響信號(hào)的影響。

下面是超聲波模塊與開發(fā)板的連線方式:

2. 示例代碼

下面是超聲波測(cè)距模塊的驅(qū)動(dòng)代碼,將超聲波模塊的輸出腳接在開發(fā)板支持中斷的IO口上,配置為上升沿觸發(fā),當(dāng)超聲波輸出腳檢測(cè)到高電平就進(jìn)去中斷服務(wù)函數(shù),在中斷服務(wù)函數(shù)里調(diào)度工作隊(duì)列,最終在工作函數(shù)里完成高電平的時(shí)間長(zhǎng)度獲取,計(jì)算測(cè)量的距離,直接在驅(qū)動(dòng)代碼里打印出來。

下面是測(cè)量的結(jié)果:

image-20211229094915304

2.1 驅(qū)動(dòng)代碼

#include 
#include 
#include 
#include 
#include 
#include 
#include 

static struct timer_list timer;
static struct work_struct work;
static int irq;
#define TRIG EXYNOS4_GPB(7)      //輸出觸發(fā)信號(hào)   第8個(gè)IO口
#define ECHO EXYNOS4_GPX1(0)    //ECHO 回響信號(hào)輸出--中斷   第9個(gè)IO口
/*獲取高電平持續(xù)時(shí)間--us單位*/
static u32 GetTimeH(void)
{
	ktime_t my_time,my_time2;
	unsigned int i,j;
	my_time=ktime_get(); //獲取當(dāng)前時(shí)間
	i=ktime_to_us(my_time); //轉(zhuǎn) us
	while(gpio_get_value(ECHO)){}
	my_time2=ktime_get(); //獲取當(dāng)前時(shí)間
	j=ktime_to_us(my_time2); //轉(zhuǎn) us
	return j-i;
}

/*
工作函數(shù)
*/
static void csb_work_func(struct work_struct *work)
{
	u32 time=GetTimeH();
	printk("厘米:%d cm\n",time/58);
}

/*外部中斷服務(wù)函數(shù)*/
irqreturn_t csb_irq_handler_func(int irq, void *dev)
{
	/*添加工作到工作隊(duì)列*/
	schedule_work(&work);
	return IRQ_HANDLED;
}

/*內(nèi)核定時(shí)器中斷服務(wù)函數(shù)*/
static void timer_function(unsigned long data)
{
	static u8 i=0;
	mod_timer(&timer,msecs_to_jiffies(1000)+jiffies);
	i=!i;
	if(i)
	{
		gpio_set_value(TRIG,1);
	}
	else
	{
		gpio_set_value(TRIG,0);
	}
}

static int __init tiny4412_linux_csb_init(void)
{
	/*請(qǐng)求GPIO口使用權(quán)*/
	gpio_request(TRIG,"CSB");
    /*配置GPIO引腳*/
	s3c_gpio_cfgpin(TRIG,S3C_GPIO_OUTPUT);
	/*GPIO默認(rèn)輸出值*/
	gpio_set_value(TRIG,0);

	/*初始化工作函數(shù)*/
	INIT_WORK(&work,csb_work_func);
	/*1. 獲取中斷號(hào)*/
	irq=gpio_to_irq(ECHO);
	/*2. 注冊(cè)中斷*/
	request_irq(irq,csb_irq_handler_func,IRQF_TRIGGER_RISING,"tiny4412_csb",NULL);
	
	timer.expires=HZ+jiffies; /*單位是節(jié)拍*/
	timer.function=timer_function;
	timer.data=666;
	/*1. 初始化定時(shí)器*/
	init_timer(&timer);
	/*2. 添加定時(shí)器到內(nèi)核*/
	add_timer(&timer);
    printk("驅(qū)動(dòng)測(cè)試: 驅(qū)動(dòng)安裝成功\n");
    return 0;
}

static void __exit tiny4412_linux_csb_cleanup(void)
{
	/*3. 刪除定時(shí)器*/
	del_timer_sync(&timer);
	free_irq(irq,NULL);
    printk("驅(qū)動(dòng)測(cè)試: 驅(qū)動(dòng)卸載成功\n");
}

module_init(tiny4412_linux_csb_init);    /*驅(qū)動(dòng)入口--安裝驅(qū)動(dòng)的時(shí)候執(zhí)行*/
module_exit(tiny4412_linux_csb_cleanup); /*驅(qū)動(dòng)出口--卸載驅(qū)動(dòng)的時(shí)候執(zhí)行*/

MODULE_LICENSE("GPL");  /*設(shè)置模塊的許可證--GPL*/

2.2 Makefile

KER_DRI=/home/wbyq/work/linux-3.5/linux-3.5
all:
	make -C $(KER_DRI) M=`pwd` modules
	cp *.ko /home/wbyq/work/rootfs/code -f
	make -C $(KER_DRI) M=`pwd` modules clean
obj-m += linux_csb.o
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    超聲波測(cè)距換能器:工業(yè)與生活中的測(cè)量利器

    在科技飛速發(fā)展的今天,各類傳感器在各個(gè)領(lǐng)域發(fā)揮著至關(guān)重要的作用。其中,超聲波測(cè)距換能器憑借其獨(dú)特的優(yōu)勢(shì),成為了距離測(cè)量領(lǐng)域的明星產(chǎn)品。無論是工業(yè)生產(chǎn)中的精密檢測(cè),還是日常生活中的智能應(yīng)用,超聲波
    的頭像 發(fā)表于 07-02 16:22 ?186次閱讀
    <b class='flag-5'>超聲波</b><b class='flag-5'>測(cè)距</b>換能器:工業(yè)與生活中的測(cè)量利器

    超聲波測(cè)距換能器:工業(yè)與生活中的測(cè)量利器

    在科技飛速發(fā)展的今天,各類傳感器在各個(gè)領(lǐng)域發(fā)揮著至關(guān)重要的作用。其中,超聲波測(cè)距換能器憑借其獨(dú)特的優(yōu)勢(shì),成為了距離測(cè)量領(lǐng)域的明星產(chǎn)品。無論是工業(yè)生產(chǎn)中的精密檢測(cè),還是日常生活中的智能應(yīng)用,超聲波
    發(fā)表于 07-02 16:20

    超聲波換能器:原理與多領(lǐng)域應(yīng)用解析

    ,受到了廣大消費(fèi)者的青睞 。 (四)其他領(lǐng)域 水下探測(cè)與通信:在海洋開發(fā)和水下工程領(lǐng)域,超聲波換能器是實(shí)現(xiàn)水下探測(cè)和通信的關(guān)鍵設(shè)備。由于超聲波在水中具有良好的傳播性能,傳播距離遠(yuǎn)且衰減小 。聲吶系統(tǒng)
    發(fā)表于 06-28 15:09

    超聲波水下測(cè)距換能器:探索水下世界的“千里眼”

    工程的質(zhì)量和安全。 (二)海洋資源勘探 在海洋資源勘探領(lǐng)域,超聲波水下測(cè)距換能器可以用于測(cè)量海底地形、探測(cè)沉船和水下礦產(chǎn)資源等。通過精確的測(cè)距,科學(xué)家們可以繪制出詳細(xì)的海底地圖,為海洋資源的
    發(fā)表于 06-26 10:43

    超聲波清洗的原理是什么?超聲波清洗是如何起作用的?

    超聲波清洗是一種利用高頻超聲波振動(dòng)來清洗物體表面和難以達(dá)到的細(xì)微部分的清潔技術(shù)。其工作原理基于聲波的物理特性和聲波對(duì)液體中微小氣泡的影響。以下是超聲
    的頭像 發(fā)表于 05-26 17:21 ?674次閱讀
    <b class='flag-5'>超聲波</b>清洗的原理是什么?<b class='flag-5'>超聲波</b>清洗是如何起作用的?

    Aigtek功率放大器如何驅(qū)動(dòng)超聲波探頭

    驅(qū)動(dòng)超聲波探頭是功率放大器應(yīng)用的一種重要場(chǎng)景。功率放大器作為超聲波系統(tǒng)的關(guān)鍵部分之一,扮演著將電信號(hào)轉(zhuǎn)化為聲能,并提供足夠的功率驅(qū)動(dòng)超聲波
    的頭像 發(fā)表于 02-24 11:23 ?424次閱讀
    Aigtek功率放大器如何<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>超聲波</b>探頭

    AK2超聲波傳感器驅(qū)動(dòng)和信號(hào)處理:Elmos芯片篇

    Elmos芯片在AK2超聲波傳雷達(dá)驅(qū)動(dòng)和信號(hào)處理方面提供了高度集成的解決方案,它們不僅提高了超聲波泊車輔助系統(tǒng)的準(zhǔn)確性和可靠性,還通過集成的MCU和通信接口,為實(shí)現(xiàn)更智能的泊車輔助功能提供了可能。
    的頭像 發(fā)表于 12-23 00:00 ?1762次閱讀
    AK2<b class='flag-5'>超聲波</b>傳感器<b class='flag-5'>驅(qū)動(dòng)</b>和信號(hào)處理:Elmos芯片篇

    【CW32模塊使用】US-016超聲波測(cè)距傳感器

    US-016是市場(chǎng)上唯有的一款模擬量輸出的超聲波測(cè)距模塊,輸出的模擬電壓和距離值成正比,可以方便的和其他系統(tǒng)相連,US-016工作穩(wěn)定可靠。 US-016超聲波
    的頭像 發(fā)表于 11-28 12:02 ?1590次閱讀
    【CW32<b class='flag-5'>模塊</b>使用】US-016<b class='flag-5'>超聲波</b><b class='flag-5'>測(cè)距</b>傳感器

    光學(xué)超聲波清洗機(jī)發(fā)生器

    索尼克超聲(ucsonic) 多功能高頻超聲清洗機(jī)驅(qū)動(dòng)板是超聲清洗系統(tǒng)中的核心部件,它負(fù)責(zé)產(chǎn)生高頻超聲波信號(hào),以
    的頭像 發(fā)表于 10-09 10:05 ?636次閱讀
    光學(xué)<b class='flag-5'>超聲波</b>清洗機(jī)發(fā)生器

    RK3568教學(xué)實(shí)驗(yàn)箱_操作案例:5-19 超聲波測(cè)距實(shí)驗(yàn)

    、熟悉Qt程序的開發(fā)流程; 2、掌握Qt Creator的基礎(chǔ)開發(fā)使用; 3、通過編寫Qt程序?qū)崿F(xiàn)超聲波測(cè)距的顯示界面。 三、實(shí)驗(yàn)原理 Qt
    發(fā)表于 09-23 15:40

    超聲波和次聲波的頻率范圍和應(yīng)用

    超聲波和次聲波是兩種不同頻率的聲波,它們?cè)谠S多領(lǐng)域都有廣泛的應(yīng)用。以下是關(guān)于超聲波和次聲波的頻率范圍和應(yīng)用的介紹:
    的頭像 發(fā)表于 09-19 16:42 ?6359次閱讀

    PGA460超聲波換能器全橋驅(qū)動(dòng)器解決方案應(yīng)用報(bào)告

    電子發(fā)燒友網(wǎng)站提供《PGA460超聲波換能器全橋驅(qū)動(dòng)器解決方案應(yīng)用報(bào)告.pdf》資料免費(fèi)下載
    發(fā)表于 09-14 10:25 ?11次下載
    PGA460<b class='flag-5'>超聲波</b>換能器全橋<b class='flag-5'>驅(qū)動(dòng)</b>器解決方案應(yīng)用報(bào)告

    超聲波測(cè)速的原理、方法及應(yīng)用

    超聲波測(cè)速是一種利用超聲波在介質(zhì)中的傳播速度來測(cè)量物體速度的技術(shù)。它廣泛應(yīng)用于工業(yè)、醫(yī)療、交通等領(lǐng)域。 一、超聲波測(cè)速的原理 超聲波的定義 超聲波
    的頭像 發(fā)表于 08-16 10:36 ?7415次閱讀

    第七章-V1.5 STM32超聲波測(cè)距STM32F103C8t6超聲波避障小車 超聲波避障模塊 STM32超聲波測(cè)距

    5STM32超聲波測(cè)距STM32F103C8t6超聲波避障小車
    的頭像 發(fā)表于 08-15 16:25 ?1740次閱讀
    第七章-V1.5 STM32<b class='flag-5'>超聲波</b><b class='flag-5'>測(cè)距</b>STM32F103C8t6<b class='flag-5'>超聲波</b>避障小車 <b class='flag-5'>超聲波</b>避障<b class='flag-5'>模塊</b> STM32<b class='flag-5'>超聲波</b><b class='flag-5'>測(cè)距</b>

    超聲波發(fā)生器-40khz脈沖功能的應(yīng)用場(chǎng)景有哪些?-驅(qū)動(dòng)

    索尼克超聲(ucsonic) 超聲波驅(qū)動(dòng)板40kHz的脈沖功能在多個(gè)應(yīng)用場(chǎng)景中發(fā)揮著重要作用,尤其是在需要高效、精確的清洗和清潔的領(lǐng)域。以下是幾個(gè)主要的應(yīng)用場(chǎng)景: 1.超聲波清洗:在
    的頭像 發(fā)表于 07-26 16:20 ?1001次閱讀
    <b class='flag-5'>超聲波</b>發(fā)生器-40khz脈沖功能的應(yīng)用場(chǎng)景有哪些?-<b class='flag-5'>驅(qū)動(dòng)</b>板