(十五)CX20106A 中超声波测量的应用

文章目录

  • CX20106A原理图
  • 芯片说明
  • 部分引脚功能和使用
  • 超声波测距应用
    • 如何发8个40KHZ的波
    • 如何判断接收了返回波
    • 如何计算距离
      • 方法一(Timer1):
      • 方法二(PCA):
    • 现象演示


CX20106A原理图

在这里插入图片描述
在这里插入图片描述

芯片说明

CX20106A,红外线/超声波接收专用芯片

1. CX20106A红外线遥控接收前置放大电路,多适用于电视机。
2. CX20106A也同样适用于超声波测试,主要频率在38KHZ~41KHZ,在超声波应用中通常选取40KHZ

部分引脚功能和使用

当CX20106A 接收到40KHz(发射频率和解制必须一致)信号时,会在OUT引脚上产生一个低电平下降脉冲,这个信号可以接到单片机的引脚,进而进行监测。

在实际调试的时候只关心芯片OUT脚在收到信号是否有一个下降沿产生。如果探头一直接收到超声波(也就是40KHZ波),在OUT脚将会有周期的低电平产生。不会像通常认为的那样,OUT脚一直为低电平。这是刚用CX20106A时的一个常见错误。

最后只要通过单片机来来计算发射信号时到收到信号(也就是用单片机检测下降沿)时这段时间的长度,再通过数学计算,转化为距离,即可。

超声波测距应用

总体思路:发波->开启定时器1开始计时->检测超声波返回探头(下降沿)->停止计时->计算距离->清除定时器1计数值以方便下次测量

如何发8个40KHZ的波

大家要和 HC-SR04 超声波模块区分,因为 HC-SR04 模块内置硬件发送超声波的模块(只要给一个发送波的信号,就会自动的发送8个40khz的超声波)而 我们现在是用:CX20106A 配合 超声波T/R发射/接收管 使用的,也就是下图:

在这里插入图片描述

在这里插入图片描述

void SendSave()
{u8 i;for(i=0;i<8;i++){P10 = 1;Delay13us();//持续13usP10 = 0;Delay13us();//持续13us}
}

如何判断接收了返回波

由高电平跳转回低电平,表示波回来了

while(P11==1);//下降沿就跳出了

如何计算距离

公式:距离=速度(340m/s)*时间/2

方法一(Timer1):

其中开启定时器1注意用12T模式因为一个计数值刚好是12/12MHZ = 1us
1T的话 一个计数值是1/12MHZ,时间不是整数不好算(这里借助isp生成)

void Timer1Init(void)		//@12.000MHz
{AUXR &= 0xBF;		//定时器时钟12T模式TMOD &= 0x0F;		//设置定时器模式TL1 = 0x00;		//设置定时初始值TH1 = 0x00;		//设置定时初始值TF1 = 0;		//清除TF1标志TR1 = 0;		//定时器1暂时不开始计时
}
u16 GetDistance()
{u16 dis = 0;SendSave();TR1 = 1;while((TF1==0)&&(P11==1));TR1=0;if(TF1==1){dis  = 999;TF1 = 0;}else{dis = ((TH1<<8)|TL1)*0.017;}TH1=TL1=0;return dis;
}

为什么乘以0.017,这里换算关系计数值乘以10的-6次方换算成秒,在乘以340m/s再除以2得到单位是m,再换算成cm即可;


方法二(PCA):

类比Timer1学习

PCA做计数器用,并且配置成12T模式(12分频)

如何配置呢?查手册可知

复位数值:
在这里插入图片描述
怎么配置(模式寄存器,控制寄存器):
在这里插入图片描述
在这里插入图片描述

综上看见复位值就是我们要设置的模式,其实不用动就可以了,只需要记住CR是计数器运行控制位,CH,CL存储计数值,CF是计时器溢出标志位,并且只可以通过软件清零(手动清零)

为了安全起见:

void PcaInit()
{CMOD = 0x00;//12TCCON = 0x00;//技术开关关闭 清除CH,CL
}
u16 SonicDistance()
{u16 dis = 0;SendSave();CR = 1;while((CF==0)&&(P11==1));CR=0;if(CF==1){dis  = 999;CF = 0;}else{dis = ((CH<<8)|CL)*0.017;}CH=CL=0;return dis;
}

现象演示

(十五)CX20106A 中超声波测量的应用



----- 如有错误欢迎大家批评指正!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/440385.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3之echarts3D环柱饼图

vue3之echarts3D环柱饼图 效果&#xff1a; 版本 "echarts": "^5.4.1", "echarts-gl": "^2.0.9" 核心代码&#xff1a; <template><div class"content"><div ref"eCharts" class"chart&…

web自动化搞定文件上传

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

布局技巧及CSS初始化

一&#xff0c;margin负值巧妙应用 二&#xff0c;文字围绕浮动元素 三&#xff0c;行内块 四&#xff0c;CSS三角强化 五&#xff0c;CSS初始化 一&#xff0c;margin负值巧妙应用 制作盒子的细线边框&#xff1a; 鼠标经过li后变色&#xff1a; 二&#xff0c;文字围绕…

Android T 远程动画显示流程(更新中)

序 本地动画和远程动画区别是什么? 本地动画&#xff1a;自给自足。对自身SurfaceControl矢量动画进行控制。 远程动画&#xff1a;拿来吧你&#xff01;一个app A对另一个app B通过binder跨进程通信&#xff0c;控制app B的SurfaceControl矢量动画。 无论是本地动画还是远程…

2024年的网创之路应该这样走才对

2024年的网创之路应该这样走才对 大家都知道这两年经济环境不好&#xff0c;钱不好挣&#xff0c;对于普通人&#xff0c;只有一条出路&#xff0c;就是学某项技能&#xff0c;然后死磕&#xff0c;不能提升某项技能的项目&#xff0c;打死也不做&#xff0c;因为多数项目都是…

Shell 入门_1

Shell概述 本次课程主要包含内容: Shell脚本入门Shell变量Shell内置命令Shell运算符与执行运算命令流程控制语句Shell函数Shell重定向Shell好用的工具, cut sed awk sort大厂常见企业面试题 Shell脚本入门 疑问 linux系统是如何操作计算机硬件CPU,内存,磁盘,显示器等? 答…

leetcode hot100跳跃游戏Ⅱ

本题和上一题还是有不一样的地方&#xff0c;这个题中&#xff0c;我们需要记录我们跳跃的步数并尽可能的满足最小的跳跃步数到达终点。 那么我们还是采用覆盖范围的概念&#xff0c;但是我们需要两个&#xff0c;一个是在当前位置的覆盖范围&#xff0c;另一个是下一步的覆盖…

【图像分割】【深度学习】Windows10下UNet代码Pytorch实现与源码讲解

【图像分割】【深度学习】Windows10下UNet代码Pytorch实现与源码讲解 提示:最近开始在【医学图像分割】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。 文章目录 【图像分割】【深度学习】Windows10下UNet代码Pytorch实现与源码讲解前言UNet模型运行环境搭…

阿里云幻兽帕鲁服务器4核16G配置报价

自建幻兽帕鲁服务器租用价格表&#xff0c;2024阿里云推出专属幻兽帕鲁Palworld游戏优惠服务器&#xff0c;配置分为4核16G和4核32G服务器&#xff0c;4核16G配置32.25元/1个月、10M带宽66.30元/1个月、4核32G配置113.24元/1个月&#xff0c;4核32G配置3个月339.72元。ECS云服务…

【开源】JAVA+Vue.js实现生活废品回收系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容三、界面展示3.1 登录注册3.2 资源类型&资源品类模块3.3 回收机构模块3.4 资源求购/出售/交易单模块3.5 客服咨询模块 四、免责说明 一、摘要 1.1 项目介绍 生活废品回收系统是可持续发展的解决方案&#xff0c;旨在鼓…

Docker 安装篇(Ubuntu)

图省事一般采用第一种 一、 直接采用apt安装 apt install docker.io查看 /usr/lib/systemd/system/docker.service ubuntu默认守护进程用的&#xff1a;fd:// ps -ef | grep docker root 775237 1 0 11:14 ? 00:01:07 /usr/bin/dockerd -H fd:// --cont…

linux -- 内存管理 -- SLAB分配器

SLAB分配器&#xff08;slab allocator&#xff09; SLAB分配器用于小内存空间管理&#xff0c;基本思想是&#xff1a;先利用页面分配器分配出单个或多个连续的物理页面&#xff0c;然后再此基础上将整块页面分割为多个相等的小内存单元&#xff0c;来满足小内存空间分配的需…