0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux驱动开发-编写超声波测距模块的驱动

DS小龙哥-嵌入式技术 2022-09-17 15:07 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

【摘要】 当前采用的这种超声波测距模块在各大高校实验室、毕设、课设里用的很多,原理很简单,通过声波测距,发出的声音碰到障碍物会反弹,声音在空气里传播的速度是已知的,根据时间就能计算出测量的距离。这款超声波模块内部自带了时间计算电路,型号是HC-SR04 ,它可提供 2cm-400cm 的非接触式距离感测功能,距精度可达高到 3mm; 整个模块包括了超声波发射器、 接收器控制电路

1. 介绍

当前采用的这种超声波测距模块在各大高校实验室、毕设、课设里用的很多,原理很简单,通过声波测距,发出的声音碰到障碍物会反弹,声音在空气里传播的速度是已知的,根据时间就能计算出测量的距离。这款超声波模块内部自带了时间计算电路,型号是HC-SR04 ,它可提供 2cm-400cm 的非接触式距离感测功能,距精度可达高到 3mm; 整个模块包括了超声波发射器、 接收器与控制电路。

基本工作原理
(1) 采用 IO 口 TRIG 触发测距, 给至少 10us 的高电平信号;
(2) 模块自动发送 8 个 40khz 的方波, 自动检测是否有信号返回;
(3) 有信号返回, 通过 IO 口 ECHO 输出一个高电平, 高电平持续的时间就是超声波从发射到返回的时间。

测量距离的公式:

uS/58=厘米或者 uS/148=英寸; 
或是: 距离=高电平时间*声速(340M/S)/2;
建议测量周期为 60ms 以上, 以防止发射信号对回响信号的影响。

下面是超声波模块与开发板的连线方式:

2. 示例代码

下面是超声波测距模块的驱动代码,将超声波模块的输出脚接在开发板支持中断的IO口上,配置为上升沿触发,当超声波输出脚检测到高电平就进去中断服务函数,在中断服务函数里调度工作队列,最终在工作函数里完成高电平的时间长度获取,计算测量的距离,直接在驱动代码里打印出来。

下面是测量的结果:

image-20211229094915304

2.1 驱动代码

#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)      //输出触发信号   第8个IO口
#define ECHO EXYNOS4_GPX1(0)    //ECHO 回响信号输出--中断   第9个IO口
/*获取高电平持续时间--us单位*/
static u32 GetTimeH(void)
{
	ktime_t my_time,my_time2;
	unsigned int i,j;
	my_time=ktime_get(); //获取当前时间
	i=ktime_to_us(my_time); //转 us
	while(gpio_get_value(ECHO)){}
	my_time2=ktime_get(); //获取当前时间
	j=ktime_to_us(my_time2); //转 us
	return j-i;
}

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

/*外部中断服务函数*/
irqreturn_t csb_irq_handler_func(int irq, void *dev)
{
	/*添加工作到工作队列*/
	schedule_work(&work);
	return IRQ_HANDLED;
}

/*内核定时器中断服务函数*/
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)
{
	/*请求GPIO口使用权*/
	gpio_request(TRIG,"CSB");
    /*配置GPIO引脚*/
	s3c_gpio_cfgpin(TRIG,S3C_GPIO_OUTPUT);
	/*GPIO默认输出值*/
	gpio_set_value(TRIG,0);

	/*初始化工作函数*/
	INIT_WORK(&work,csb_work_func);
	/*1. 获取中断号*/
	irq=gpio_to_irq(ECHO);
	/*2. 注册中断*/
	request_irq(irq,csb_irq_handler_func,IRQF_TRIGGER_RISING,"tiny4412_csb",NULL);
	
	timer.expires=HZ+jiffies; /*单位是节拍*/
	timer.function=timer_function;
	timer.data=666;
	/*1. 初始化定时器*/
	init_timer(&timer);
	/*2. 添加定时器到内核*/
	add_timer(&timer);
    printk("驱动测试: 驱动安装成功\n");
    return 0;
}

static void __exit tiny4412_linux_csb_cleanup(void)
{
	/*3. 删除定时器*/
	del_timer_sync(&timer);
	free_irq(irq,NULL);
    printk("驱动测试: 驱动卸载成功\n");
}

module_init(tiny4412_linux_csb_init);    /*驱动入口--安装驱动的时候执行*/
module_exit(tiny4412_linux_csb_cleanup); /*驱动出口--卸载驱动的时候执行*/

MODULE_LICENSE("GPL");  /*设置模块的许可证--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
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 驱动
    +关注

    关注

    12

    文章

    1927

    浏览量

    88184
  • 超声波测距模块

    关注

    1

    文章

    8

    浏览量

    5193
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    什么是超声波原理的液位传感器?

    超声波液位传感器是一种基于超声波反射测距原理的非接触式液位测量设备,核心功能是通过发射与接收超声波信号,计算声波传播时间差来反推容器内液位高
    的头像 发表于 11-25 11:32 508次阅读
    什么是<b class='flag-5'>超声波</b>原理的液位传感器?

    无线超声波测距传感器:精准感知,开启智能测距新时代

    在科技飞速发展的今天,距离测量不再局限于传统的卷尺、激光等工具,无线超声波测距传感器凭借其独特的优势,正逐渐成为工业自动化、智能家居、汽车安全等领域的“智慧之眼”,为我们的生活和工作带来前所未有
    的头像 发表于 09-09 08:35 569次阅读

    【Milk-V Duo S 开发板免费体验】DuoS 超声波测距 OLED 显示

      上篇搭建开发环境并点亮了 OLED 显示屏,详见: https://bbs.elecfans.com/jishu_2498771_1_1.html   本篇使用 DuoS 驱动超声波测距
    发表于 08-22 03:55

    超声波测距换能器:工业与生活中的测量利器

    在科技飞速发展的今天,各类传感器在各个领域发挥着至关重要的作用。其中,超声波测距换能器凭借其独特的优势,成为了距离测量领域的明星产品。无论是工业生产中的精密检测,还是日常生活中的智能应用,超声波
    的头像 发表于 07-02 16:22 576次阅读
    <b class='flag-5'>超声波</b><b class='flag-5'>测距</b>换能器:工业与生活中的测量利器

    超声波测距换能器:工业与生活中的测量利器

    在科技飞速发展的今天,各类传感器在各个领域发挥着至关重要的作用。其中,超声波测距换能器凭借其独特的优势,成为了距离测量领域的明星产品。无论是工业生产中的精密检测,还是日常生活中的智能应用,超声波
    发表于 07-02 16:20

    超声波清洗机是什么,它如何通过超声波振动来清洗物品?

    超声波清洗机的工作原理超声波清洗机是一种广泛用于清洗物品的设备,它利用超声波振动来去除污垢和杂质。本文将深入探讨超声波清洗机的工作原理以及它如何通过
    的头像 发表于 06-30 16:59 766次阅读
    <b class='flag-5'>超声波</b>清洗机是什么,它如何通过<b class='flag-5'>超声波</b>振动来清洗物品?

    超声波换能器:原理与多领域应用解析

    ,受到了广大消费者的青睐 。 (四)其他领域 水下探测与通信:在海洋开发和水下工程领域,超声波换能器是实现水下探测和通信的关键设备。由于超声波在水中具有良好的传播性能,传播距离远且衰减小 。声呐系统
    发表于 06-28 15:09

    超声波水下测距换能器:探索水下世界的“千里眼”

    工程的质量和安全。 (二)海洋资源勘探 在海洋资源勘探领域,超声波水下测距换能器可以用于测量海底地形、探测沉船和水下矿产资源等。通过精确的测距,科学家们可以绘制出详细的海底地图,为海洋资源的
    发表于 06-26 10:43

    一文读懂超声波换能器:原理、应用与未来趋势

    ,引领着科技不断向前发展。 四、未来趋势:创新驱动,无限可能 随着科技的不断进步和人们对超声波技术研究的深入,超声波换能器也在不断发展和创新,展现出了广阔的未来发展趋势。 (一)更高的性能:追求卓越
    发表于 06-23 16:51

    超声波换能器--声波世界的 “神奇魔法师”

    在科技的奇妙世界里,有这样一位 “魔法师” —— 超声波换能器,它在众多领域施展着神奇的声波魔法,今天就让我们一起揭开它神秘的面纱,一探其中的奥秘。 超声波换能器的原理:神奇的压电效应 超声
    发表于 06-11 17:30

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

    超声波清洗是一种利用高频超声波振动来清洗物体表面和难以达到的细微部分的清洁技术。其工作原理基于声波的物理特性和声波对液体中微小气泡的影响。以下是超声
    的头像 发表于 05-26 17:21 2128次阅读
    <b class='flag-5'>超声波</b>清洗的原理是什么?<b class='flag-5'>超声波</b>清洗是如何起作用的?

    超声波频率和功率对在线式超声波清洗的影响如何?

    在线式超声波清洗是一种高效、环保的清洗方式,在多个行业得到了广泛应用。然而,超声波频率和功率是影响清洗效果和清洗速度的关键因素。在本文中,我们将从理论和实践两个方面分析超声波频率和功率对在线式
    的头像 发表于 05-09 16:39 847次阅读
    <b class='flag-5'>超声波</b>频率和功率对在线式<b class='flag-5'>超声波</b>清洗的影响如何?

    Aigtek功率放大器如何驱动超声波探头

    驱动超声波探头是功率放大器应用的一种重要场景。功率放大器作为超声波系统的关键部分之一,扮演着将电信号转化为声能,并提供足够的功率驱动超声波
    的头像 发表于 02-24 11:23 679次阅读
    Aigtek功率放大器如何<b class='flag-5'>驱动</b><b class='flag-5'>超声波</b>探头

    超声波焊接技术原理

    在现代工业生产中,塑料材料因其轻便、耐腐蚀和成本效益高而被广泛使用。超声波焊接技术作为一种高效的塑料连接方法,因其快速、清洁、无需使用粘合剂或溶剂而受到青睐。 超声波焊接技术原理 超声波焊接技术
    的头像 发表于 01-19 11:01 2844次阅读

    AK2超声波传感器驱动和信号处理:Elmos芯片篇

    Elmos芯片在AK2超声波传雷达驱动和信号处理方面提供了高度集成的解决方案,它们不仅提高了超声波泊车辅助系统的准确性和可靠性,还通过集成的MCU和通信接口,为实现更智能的泊车辅助功能提供了可能。
    的头像 发表于 12-23 00:00 2941次阅读
    AK2<b class='flag-5'>超声波</b>传感器<b class='flag-5'>驱动</b>和信号处理:Elmos芯片篇