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

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

3天内不再提示

探讨STM32F407+KS103超声波模块测距

Q4MP_gh_c472c21 来源:21ic蓝V作者呐咯密密 作者:21ic蓝V作者呐咯密 2021-03-26 13:58 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文介绍基于STM32F407的KS103超声波模块的使用,包含使用注意事项以及代码配置,同时会附上本人在开发时遇到的问题以及解决方法。

KS103模块使用串口/IIC接口与主机通信,自动响应主机的iic/串口控制指令。

包含温度补偿的距离探测,同时可以在1ms内检测光强。

探测范围 1cm~800cm及 1cm~1000cm(10 米)

5s 未收到 I2C 控制指令自动进入 uA 级休眠,并可随时被主机 I2C 控制指令唤醒

TTL串口模式

在 KS103 上连线引脚上标识有:VCC、SDA/TX、SCL/RX、GND 及 MODE。模块在上电之前,MODE 需要接 0V 地,上电后模块将工作于 TTL 串口模式。如果KS103在上电后再将 MODE 引脚接 0V 地,模块将仍然工作于 I2C 模式。因此,TTL 串口模式时需要 5 根线来控制,其中 VCC 用于连接+5V(3.0~5.5V 范围均可)电源(1),GND用于连接电源地,SDA/TX 连接 MCUUSB 转 TTL 模块的 RXD,SCL/RX 引脚连接 MCU 或USB 转 TTL 模块的 TXD 。

在使用时最好使用5V标准电压,电压低会影响量程。

新到手的模块默认串口地址是0xE8,可修改。

这里本人被坑了,因为我到手的模块是别人用过的,被修改了地址但是不和我说,就是调试不出来。

当然也是我偷懒了,模块在上电的时候背面的LED会闪烁,告诉用户自身的地址,我没在意。上电后快闪两下是代表二进制的“1”,慢闪一下代表“0”,一共八位,盯着记录就能获得其地址。

串口模式很占用串口资源,我并没有使用该模式进行开发,仅仅使用了官方的上位机进行测试,鉴定模组的好坏。

确认模组没问题,选用IIC接口进行开发,这样一条总线可以挂载多个模块,只需要总线寻址便可。

I2C 模式

在使用iic模式时,硬件需要注意几点:

SCL 及 SDA 线均需要由主机接一个 4.7K(阻值 1~10K 均可)电阻到 VCC ;I2C 通信速率建议不要高于 100kbit/s (因为模块的iic最大速率只有100K)。

直接从代码开始:

因为对速度要求不高,而且为了移植方便,采用软件模拟iic。其实为了偷懒,模拟简单呀。

老规矩,初始化iic。

void IIC_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOB时钟 //GPIOB8,B9初始化设置 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化 IIC_SCL=1; IIC_SDA=1; }

写iic控制函数,老掉牙的东西,全网都有。

//产生IIC起始信号 void IIC_Start(void){ SDA_OUT(); //sda线输出 IIC_SDA=1; IIC_SCL=1; delay_us(10); IIC_SDA=0;//START:when CLK is high,DATA change form high to low delay_us(10); IIC_SCL=0;//钳住I2C总线,准备发送或接收数据 } //产生IIC停止信号 void IIC_Stop(void){ SDA_OUT();//sda线输出 IIC_SCL=0; IIC_SDA=0;//STOP:when CLK is high DATA change form low to high delay_us(10); IIC_SCL=1; IIC_SDA=1;//发送I2C总线结束信号 delay_us(10); } //等待应答信号到来 //返回值:1,接收应答失败 // 0,接收应答成功 u8 IIC_Wait_Ack(void){ u8 ucErrTime=0; SDA_IN(); //SDA设置为输入 IIC_SDA=1;delay_us(6); IIC_SCL=1;delay_us(6); while(READ_SDA) { ucErrTime++; if(ucErrTime>250) { IIC_Stop(); return 1; } } IIC_SCL=0;//时钟输出0 return 0; } //产生ACK应答 void IIC_Ack(void){ IIC_SCL=0; SDA_OUT(); IIC_SDA=0; delay_us(10); IIC_SCL=1; delay_us(10); IIC_SCL=0; } //不产生ACK应答 void IIC_NAck(void){ IIC_SCL=0; SDA_OUT(); IIC_SDA=1; delay_us(10); IIC_SCL=1; delay_us(10); IIC_SCL=0; } //IIC发送一个字节 //返回从机有无应答 //1,有应答 //0,无应答 void IIC_Send_Byte(u8 txd){ u8 t; SDA_OUT(); IIC_SCL=0;//拉低时钟开始数据传输 for(t=0;t<8;t++) { IIC_SDA=(txd&0x80)>>7; txd<<=1; delay_us(10); //对TEA5767这三个延时都是必须的 IIC_SCL=1; delay_us(10); IIC_SCL=0; delay_us(10); } } //读1个字节,ack=1时,发送ACK,ack=0,发送nACK u8 IIC_Read_Byte(unsigned char ack){ unsigned char i,receive=0; SDA_IN();//SDA设置为输入 for(i=0;i<8;i++ ) { IIC_SCL=0; delay_us(10); IIC_SCL=1; receive<<=1; if(READ_SDA)receive++; delay_us(5); } if (!ack) IIC_NAck();//发送nACK else IIC_Ack(); //发送ACK return receive; }

写KS103的控制函数

u8 KS103_ReadOneByte(u8 address, u8 reg) { u8 temp=0; IIC_Start(); IIC_Send_Byte(address); //发送低地址 IIC_Wait_Ack(); IIC_Send_Byte(reg); //发送低地址 IIC_Wait_Ack(); IIC_Start(); IIC_Send_Byte(address + 1); //进入接收模式 IIC_Wait_Ack(); delay_us(50); //增加此代码通信成功!!! temp=IIC_Read_Byte(0); //读寄存器3 IIC_Stop();//产生一个停止条件 return temp; } void KS103_WriteOneByte(u8 address,u8 reg,u8 command) { IIC_Start(); IIC_Send_Byte(address); //发送写命令 IIC_Wait_Ack(); IIC_Send_Byte(reg);//发送高地址 IIC_Wait_Ack(); IIC_Send_Byte(command); //发送低地址 IIC_Wait_Ack(); IIC_Stop();//产生一个停止条件 }

这里依照了模块的指令发送流程:

pIYBAGBdeRSAPxHbAAGAvS6ph0U137.png

探测指令从 0x01 到 0x2f,数值越大,信号增益越大。

获取距离数据

KS103_WriteOneByte(0XD2,0X02,0XB0); delay_ms(100); range1 = KS103_ReadOneByte(0xD2, 0x02); range2 = KS103_ReadOneByte(0xD2, 0x03);

每一帧的探测指令格式为:

c78d6dce-8dcb-11eb-8b86-12bb97331649.png

KS103_WriteOneByte(0XD2,0X02,0XB0);中,0xd2为模块的地址,02为寄存器地址,0xB0为控制命令。

c7b74c7a-8dcb-11eb-8b86-12bb97331649.png


在发送探测指令后需要等待一段时间才可通过iic总线获取数据,过早的查询总线会获得0XFF。在读取总线数据时除了需要发送模块iic的地址,还需要将模块iic的地址加1,而且在之后必须要等待,才能获取完整的数据。因为返回的是16位数据,所以这里我采用执行两次KS103_ReadOneByte()函数。

在这些都处理完之后我将采集到的数据输出到串口,发现并不能成功,range1和range2的值并不变。最后发现我是用的是0xBC探测指令,最大耗时87MS,而我只延时50ms。通过修改探测指令和延时时间均可解决问题。

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 超声波测距
    +关注

    关注

    5

    文章

    247

    浏览量

    39400
  • STM32F407
    +关注

    关注

    15

    文章

    189

    浏览量

    31406
  • KS103
    +关注

    关注

    3

    文章

    2

    浏览量

    8118

原文标题:STM32F407+KS103超声波模块测距

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

    超声波清洗机的环保性如何?探讨绿色清洁新趋势

    走向一个环保的新趋势。本文将深入探讨超声波清洗机的环保性以及它在现代清洁技术中的地位。一、超声波清洗机的基本原理及优势超声波清洗机的工作原理是利用
    的头像 发表于 10-08 16:24 214次阅读
    <b class='flag-5'>超声波</b>清洗机的环保性如何?<b class='flag-5'>探讨</b>绿色清洁新趋势

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

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

    【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 580次阅读
    <b class='flag-5'>超声波</b><b class='flag-5'>测距</b>换能器:工业与生活中的测量利器

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

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

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

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

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

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

    超声波焊接工艺详解 超声波焊接应用领域

    一、超声波焊接工艺详解 超声波焊接是一种利用高频振动波进行焊接的工艺。其工作原理是将高频振动波传递到两个需焊接的物体表面,在加压的情况下,使两个物体表面相互摩擦而形成分子层之间的熔合。以下是关于
    的头像 发表于 01-31 15:12 2796次阅读

    超声波焊接技术原理

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