单片机无线发射的原理剖析
目录
一、EV1527编码格式
二、OOK&ASK的简单了解
三、433MHZ
四、单片机的地址ID
五、基于STC15W104单片机实现无线通信
无线发射主要运用到了三个知识点:EV1527格式;OOk;433MHZ。下面我们来分别阐述:
EV1527是数据的编码格式;OOK是无线发射数据的通信方式;433MHZ是无线发射的载波频率!
一、EV1527编码格式
EV1527是一种低成本的射频编码芯片,主要运用在遥控系统中(通常作为遥控器)
这是EV1527芯片的电路图,可以看到他除了osc(外接震荡电阻)VCC和GND(电源正负极),和TXD管脚用来输出方波之外,还有四个管脚K1,K2,K3,K4用来接收用户的输入(一般是遥控器的4个按键),当按键没有按下的时候,由于下拉电阻的存在,K1至K4都是低电平状态,当按键按下后呈现高电平,芯片就通过检测这几个管脚的电平组合情况(一共有15种按键组合),从而输出15种预先设定好的不同的方波信号
(像这样的)
当然EV1527芯片仅仅是将用户的按键情况转化成了不同的方波(二进制语言)但是并没有通过电磁波传递出去,于是下面的电路(无线发射电路)便应运而生了,他能够接受到输入进来的方波信号,并且通过433MHZ的电磁波频率,把该方波信号传递成电磁波信号,只要别的主机能够接受到这个信号,就算完成了无线发射的功能
其实说到这里我们仅仅是讲清楚了EV1527将电信号转化成方波的能力,但是并没有讲到他的编码格式是什么样的,下面我们来看看
所谓的编码格式,其实就是一个二进制信号是按照什么样的规则传递的,比如在传递1的时候高频率电磁波持续的时间是多少?高低频率之间是什么样的顺序?他们的间隔是多少?一共要传递多少个bit位?不同的人可能设计出不同的编码格式,但无论如何,编码格式设计出来都是为了方便人们使用的统一,只要人们用的习惯用的方便,并且硬件容易实现,就是一个好的编码格式。
比如在这里的EV1527编码格式中:同步起始信号是4个CLK时间的高电平+124CLK时间的低电平,那么主机在接收到这样一个电磁波信号后,就按照我们约定好的EV1527编码格式来解码,从而知道我们要发射的是一个同步起始信号了。至于二进制位的1和0都是一样的道理,只是他们的高低频率信号的持续时间不同罢了。
而且值得注意的是EV1527标准的编码格式是同步信号+24个bit位,从C0到C19一共20位的地址+D0到D3一共4位的功能信号(关于地址是什么,我们在后面补充说明)
假如芯片内置的地址是 E9700 按下了按键 S1。则输出的数据是 E97001;
整体的数据格式是 同步码+E97001;
同步码 + E97001; 转换成二进制(数据输出单根线,只能通过二进制输出)
同步码 + 1110 1001 0111 0000 0000 0001
(当然这只是方便我们理解,他还是要经过无线发射电路将方波转换成电磁波的!)
说到了CLK,我们就不得不提一下下面的这张表格了,他清晰的展示了不同阻值的电阻在使用该无线发射电路的时候每一个CLK周期是多长时间,这就能够帮助我们完成代码的编写了
16LCK的时间长度实际上是和EV1527的供电电源以及振荡电阻这两个因素相关的:
(1)振荡电阻值
如下图,连接在 1 脚(OSC)的电阻 R2 就是振荡电阻,振荡电阻不一样,CLK 的时间不一样,并且相差比较大。可以对比 47K 和 620K 的时间。比较常用的是:330K 270K 470K
(2)EV1527供电电压
EV1527 VCC 的供电电压不一样,CLK 的时间不一样。 误差较大,相比震荡电阻误差要小很
多。为什么会有这个误差呢?我猜测是因为这个芯片比较便宜,使用的方案比较廉价,所以制作出来就有误差。
二、OOK&ASK的简单了解
如果说EV1527编码格式是将二进制语言转换成方波的话,那么OOK&ASK就是无线发射电路的格式,他们决定了无线发射电路是如何将方波信号转换成电磁波信号的。
ASK如何区分0和1?
0:发送 433.92Mhz 无线波形(载波频率)振幅低
1:发送 433.92Mhz 无线波形(载波频率)振幅高
OOK 如何区分 0 和 1?(OOK 是 ASK 的一种特殊形式)
0:不发送数据(振幅为0)
1:发送 433.92Mhz 无线波形(载波频率)
三、433MHZ
四、单片机的地址ID
从官方文档中我们可以看到,每一个单片机都具有唯一的身份证号码,我们也把他叫做ID号,并且程序存储器的最后7个字节单元保存的就是其ID号,只不过被隐藏起来了,用户只能通过地址去访问,但是并不能修改。
我们从stc-isp这个软件中发现最后七个字节是空白的!这就与我们之前所说的相符合了。(为什么最后七个字节是00FF9h呢?因为我们的STC15系列单片机只有4k的程序存储器,当我们从00000h开始存放程序,一直到00FFFh就是第4096个字节了,所以最后七个字节是从00FF9h开始的啦)
五、基于STC15W104单片机实现无线通信
这是一款门磁探测器中的无线发射电路模块,他仅仅只有一块STC15W104单片机和一个无线发射电路,但是却并没有EV1527芯片,这是为什么呢?
原来为了生产上成本的减少,通常都能够省一点就省一点,所以我们可以直接使用单片机的IO口来模拟实现本来应该由EV1527芯片完成的方波,那么有人会问?没有了EV1527芯片,我们如何来控制高低电平之间的时间呢?别忘了,我们还有定时器!用定时器来控制CLK的时间还有许多优点咧。
(1)CLK 时间长度稳定,不受芯片的供电电压影响
(2)EV1527 数据固定 20(地址码)+4(功能码),单片机可以按照自己的需求来定义地址码和功能码的长度可以自定义私有协议( 24+8 或 28+4 或 32+8 ......)(因为EV1527芯片的输出格式是固定了的)
下面我们就来看看具体的实现过程
同步头波形输出:
程序流程:
第 1 步:P3.2 输出高电平
第 2 步:通过定时器实现 400us 的精准延时 TH0 TL0 2 个字节
第 3 步:P3.2 输出低电平 (或 P3.2 反正 !P3.2)
第 4 步:通过定时器实现 12.4ms 的精准延时 TH0 TL0 2 个字节
数据 1 波形输出:
高电平+低电平 = 1.2ms + 400us ( 3:1)
程序流程:
第 1 步:P3.2 输出高电平
第 2 步:通过定时器实现 1.2ms 的精准延时 TH0 TL0 2 个字节
第 3 步:P3.2 输出低电平 (或 P3.2 反正 !P3.2)
第 4 步:通过定时器实现 400us 的精准延时 TH0 TL0 2 个字节
数据0波形输出:
高电平+低电平 = 400us + 1.2ms ( 1:3)
第 1 步:P3.2 输出高电平
第 2 步:通过定时器实现 400us 的精准延时 TH0 TL0 2 个字节
第 3 步:P3.2 输出低电平 (或 P3.2 反正 !P3.2)
第 4 步:通过定时器实现 1.2ms 的精准延时 TH0 TL0 2 个字节
相关文章:

单片机无线发射的原理剖析
目录 一、EV1527编码格式 二、OOK&ASK的简单了解 三、433MHZ 四、单片机的地址ID 五、基于STC15W104单片机实现无线通信 无线发射主要运用到了三个知识点:EV1527格式;OOk;433MHZ。下面我们来分别阐述: EV1527是数据的编…...

Redis的过期键的删除策略
我们都知道,Redis是key-value数据库,我们可以设置Redis中缓存的key的过期时间。Redis的过期策略就是指当Redis中缓存的key过期了,Redis如何处理。 过期策略通常有以下三种: 定时过期:每个设置过期时间的key都需要创建…...

放假--寒假自学版 day1(补2.5)
fread 函数: 今日练习 C语言面试题5道~ 1. static 有什么用途?(请至少说明两种) 1) 限制变量的作用域 2) 设置变量的存储域 2. 引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始…...

LLM(5) | Encoder 和 Decoder 架构
LLM(5) | Encoder 和 Decoder 架构 文章目录 LLM(5) | Encoder 和 Decoder 架构0. 目的1. 概要2. encoder 和 decoder 风格的 transformer (Encoder- And Decoder-Style Transformers)原始的 transformer (The original transformer)编码器 (Encoders)解码器 (Decoders)编码器和…...

CV | Medical-SAM-Adapter论文详解及项目实现
******************************* 👩⚕️ 医学影像相关直达👨⚕️******************************* CV | SAM在医学影像上的模型调研【20240207更新版】-CSDN博客 CV | Segment Anything论文详解及代码实现 本文主要讲解Medical-SAM-Adapter论文及项…...

C++初阶:容器(Containers)vector常用接口详解
介绍完了string类的相关内容后:C初阶:适合新手的手撕string类(模拟实现string类) 接下来进入新的篇章,容器vector介绍: 文章目录 1.vector的初步介绍2.vector的定义(constructor)3.v…...

flink写入es的参数解析
ElasticsearchSink内部使用BulkProcessor一次将一批动作(ActionRequest)发送到ES集群。在发送批量动作前,BulkProcessor先缓存,再刷新。缓存刷新的间隔,支持基于Action数量、基于Action大小、基于时间间隔3种策略。BulkProcessor支持在同一次…...

逆向工程:揭开科技神秘面纱的艺术
在当今这个科技飞速发展的时代,我们每天都在与各种电子产品、软件应用打交道。然而,你是否想过,这些看似复杂的高科技产品是如何被创造出来的?今天,我们就来探讨一下逆向工程这一神秘而又令人着迷的领域。 一、什么是…...

决策树的相关知识点
📕参考:ysu老师课件西瓜书 1.决策树的基本概念 【决策树】:决策树是一种描述对样本数据进行分类的树形结构模型,由节点和有向边组成。其中每个内部节点表示一个属性上的判断,每个分支代表一个判断结果的输出ÿ…...

【数据结构】单向链表实现 超详细
目录 一. 单链表的实现 1.准备工作及其注意事项 1.1 先创建三个文件 1.2 注意事项:帮助高效记忆和理解 2.链表的基本功能接口 2.0 创建一个 链表 2.1 链表的打印 3.链表的创建新节点接口 4.链表的节点插入功能接口 4.1 尾插接口 4.2 头插接口 4.3 指定位…...

Opencc4j 开源中文繁简体使用介绍
Opencc4j Opencc4j 支持中文繁简体转换,考虑到词组级别。 Features 特点 严格区分「一简对多繁」和「一简对多异」。 完全兼容异体字,可以实现动态替换。 严格审校一简对多繁词条,原则为「能分则不合」。 词库和函数库完全分离,…...

vue 下载二进制文件
文章目录 概要技术细节 概要 vue 下载后端返回的二进制文件流 技术细节 import axios from "axios"; const baseUrl process.env.VUE_APP_BASE_API; //downLoadPdf("/pdf/download?pdfName" res .pdf, res); export function downLoadPdf(str, fil…...

数据结构之堆排序
对于几个元素的关键字序列{K1,K2,…,Kn},当且仅当满足下列关系时称其为堆,其中 2i 和2i1应不大于n。 { K i ≤ K 2 i 1 K i ≤ K 2 i 或 { K i ≥ K 2 i 1 K i ≥ K 2 i {\huge \{}^{K_i≤K_{2i}} _{K_i≤K_{2i1}} …...

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之ScrollBar组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之ScrollBar组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、ScrollBar组件 鸿蒙(HarmonyOS)滚动条组件ScrollBar&…...

读论文:DiffBIR: Towards Blind Image Restoration with Generative Diffusion Prior
DiffBIR 发表于2023年的ICCV,是一种基于生成扩散先验的盲图像恢复模型。它通过两个阶段的处理来去除图像的退化,并细化图像的细节。DiffBIR 的优势在于提供高质量的图像恢复结果,并且具有灵活的参数设置,可以在保真度和质量之间进…...

基于微信小程序的新生报到系统的研究与实现,附源码
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...

分享一下 uniapp 打包安卓apk
首先需要安装 Java 环境,这里就不做解释了 第二步:打开 mac 终端 / cmd 命令行工具 使用keytool -genkey命令生成证书 keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore *testalias 是证书别名&am…...

DevOps落地笔记-21|业务价值:软件发布的最终目的
上一课时介绍如何度量软件的内部质量和外部质量。在外部质量中,我们提到用户满意度是衡量软件外部质量的关键因素。“敏捷宣言”的第一条原则规定:“我们最重要的目标,是通过持续不断的及早交付有价值的软件使用户满意”。从这一点也可以看出…...

【动态规划】【前缀和】【数学】2338. 统计理想数组的数目
作者推荐 【动态规划】【前缀和】【C算法】LCP 57. 打地鼠 本文涉及知识点 动态规划汇总 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode:2338. 统计理想数组的数目 给你两个整数 n 和 maxValue ,用于描述一个 理想…...

【已解决】onnx转换为rknn置信度大于1,图像出现乱框问题解决
前言 环境介绍: 1.编译环境 Ubuntu 18.04.5 LTS 2.RKNN版本 py3.8-rknn2-1.4.0 3.单板 迅为itop-3568开发板 一、现象 采用yolov5训练并将pt转换为onnx,再将onnx采用py3.8-rknn2-1.4.0推理转换为rknn出现置信度大于1,并且图像乱框问题…...

多路服务器技术如何处理大量并发请求?
在当今的互联网时代,随着用户数量的爆炸性增长和业务规模的扩大,多路服务器技术已成为处理大量并发请求的关键手段。多路服务器技术是一种并行处理技术,它可以通过多个服务器同时处理来自不同用户的请求,从而显著提高系统的整体性…...

SpringBoot - 不加 @EnableCaching 标签也一样可以在 Redis 中存储缓存?
网上文章都是说需要在 Application 上加 EnableCaching 注解才能让缓存使用 Redis,但是测试发现不用 EnableCaching 也可以使用 Redis,是网上文章有问题吗? 现在 Application 上用了 EnableAsync,SpringBootApplication࿰…...

Linux------命令行参数
目录 前言 一、main函数的参数 二、命令行控制实现计算器 三、实现touch指令 前言 当我们在命令行输入 ls -al ,可以查看当前文件夹下所有文件的信息,还有其他的如rm,touch等指令,都可以帮我们完成相应的操作。 其实运行这些…...

LLM少样本示例的上下文学习在Text-to-SQL任务中的探索
导语 本文探索了如何通过各种提示设计策略,来增强大型语言模型(LLMs)在Few-shot In-context Learning中的文本到SQL转换能力。通过使用示例SQL查询的句法结构来检索演示示例,并选择同时追求多样性和相似性的示例可以提高性能&…...

双非本科准备秋招(19.2)—— 设计模式之保护式暂停
一、wait & notify wait能让线程进入waiting状态,这时候就需要比较一下和sleep的区别了。 sleep vs wait 1) sleep 是 Thread 方法,而 wait 是 Object 的方法 2) sleep 不需要强制和 synchronized 配合使用,但 wait 强制和 s…...

使用SpringMVC实现功能
目录 一、计算器 1、前端页面 2、服务器处理请求 3、效果 二、用户登陆系统 1、前端页面 (1)登陆页面 (2)欢迎页面 2、前端页面发送请求--服务器处理请求 3、效果 三、留言板 1、前端页面 2、前端页面发送请求 &…...

spring aop实现接口超时处理组件
文章目录 实现思路实现代码starter组件 实现思路 这里使用FutureTask,它通过get方法以阻塞的方式获取执行结果,并设定超时时间: public V get() throws InterruptedException, ExecutionException ;public V get(long timeout, TimeUnit un…...

c++设计模式之装饰器模式
作用 为现有类增加功能 案例说明 class Car { public:virtual void show()0; };class Bmw:public Car { public:void show(){cout<<"宝马汽车>>"<<endl;} };class Audi:public Car { public:void show(){cout<<"奥迪汽车>>&q…...

WordPress如何实现随机显示一句话经典语录?怎么添加到评论框中?
我们在一些WordPress网站的顶部或侧边栏或评论框中,经常看到会随机显示一句经典语录,他们是怎么实现的呢? 其实,boke112百科前面跟大家分享的『WordPress集成一言(Hitokoto)API经典语句功能』一文中就提供…...

【退役之重学前端】vite, vue3, vue-router, vuex, ES6学习日记
学习使用vitevue3的所遇问题总结(2024年2月1日) 组件中使用<script>标签忘记加 setup 这会导致Navbar 没有暴露出来,导致使用不了,出现以下报错 这是因为,如果不用setup,就得使用 export default…...