433、315通信、ev1527、2262编码

目录

  • ASK介绍
  • EV1527编码芯片介绍
  • 模块介绍
  • 无线发射芯片
  • 无线接收芯片
  • 解码程序
  • 发射电路原理图

ASK介绍

ASK是幅移键控,通过调幅将数据发送出去,所以发送与接收都是多位二进制数。

ASK如何区分0和1?

0:发送 433.92Mhz 无线波形(载波频率)振幅低
1:发送 433.92Mhz 无线波形(载波频率)振幅高

OOK 如何区分 0 和 1?(OOK 是 ASK 的一种特殊形式)
0:不发送数据(振幅为0)
1:发送 433.92Mhz 无线波形(载波频率)

EV1527编码芯片介绍

编码芯片是硬件编码,MCU是软件编码,都是输出数据到无线发射芯片
20个位元,可组成不同的编码
4个按键输入,最多可组合15个按键
内含振荡电路,无需外接晶振,通过外接电阻的阻值选择振荡频率
图片中LCK应该是CLK
1
24个二进制才算一个完整的数据帧,前20位是地址或者叫ID,后4位是按键数据
一次完整的输出需要先输出同步信号,再输出一个数据帧
同步起始信号是4个CLK时间的高电平+124CLK时间的低电平
信号1是12个CLK的高电平+4个CLK的低电平
信号0是4个CLK的高电平+12个CLK的低电平
网上关于CLK的时间均不同,但是应当满足高低电平的比值,具体时间根据容错率决定

模块介绍

模块
遥控器发射,右边接收模块。
遥控器里有发射芯片,功能是编码加按键
接收模块有接收芯片和MCU,二者之间通过某引脚通信,MCU输出各路开关信号,此模块有学习功能,将遥控器的键值存储在MCU中

重点:

  • 编码格式:ev1527或其他
  • 发射频率:由晶振频率决定,具体看数据手册

这种键值是没有加密的,传送的都是明文,所以保密性不高,通常用于遥控开关,家具等。当用到安全比较高的场合,这种编码就不可靠了。往往针对这些,我们需要用到其他编码以及数据组合形式。例如曼切斯特编码,has,xxtea,aes等加密方式进行通信。

无线发射芯片

WS4460 是一款集成编码器的真正单晶圆全新一代 OOK 发射 SOC 芯片,可完全兼容 1527 编码产品,支持常用的 315Mhz/433.92Mhz 频率,拥有 4 个独立按键和 6 个组合按键。另外,有一些12路遥控器是通过MCU编码,无线发射芯片调制后发射。按键比较少的遥控器用的是集成IO的无线发射芯片。

编码+无线发射

无线接收芯片

WS490H 是一款高集成度、低功耗的单片 ASK/OOK 射频接收芯片。自动接收并解调信号,通过DO引脚与MCU通信。由MCU解码二进制数据,并输出各路开关量。有些模块上MCU有解码程序,并带学习功能,即将遥控器按键码值存储到MCU中。

编码+无线接收
1

解码程序

EV1527.c

/*** @file EV1527.c* @author cyWu (1917507415@qq.com)* @brief EV1527解码框架,定时器中断的方式解码,使用80us的定时器,直接放中断服务函数就可以,适用于所有单片机。* @version 0.1* @date 2024-03-28* @copyright Copyright (c) 2024* */
#include "EV1527.h"// 定时周期
#define TIME_CYCLE 80// 定义引导码的最小和最大持续时间(单位:us)
#define MIN_LEAD_CODE (5600 / TIME_CYCLE)
#define MAX_LEAD_CODE (16000 / TIME_CYCLE)// 定义数据位持续时间的最小和最大范围(单位:us)
#define MIN_BIT_DURATION (80 / TIME_CYCLE)
#define MAX_BIT_DURATION (2400 / TIME_CYCLE)// 定义功能字节在接收缓冲区中的索引位置
#define FUNCTION_BYTE_INDEX 2// 定义功能值
#define FUNCTION_1 0x08
#define FUNCTION_2 0x04
#define FUNCTION_3 0x02// 定义数据解码状态枚举
typedef enum
{LEAD_CODE,       // 引导码状态HIGH_BIT,        // 高位数据位状态LOW_BIT,         // 低位数据位状态DATA_PROCESS,    // 数据处理状态FUNCTION_PROCESS // 功能处理状态
} Decode_State_t;// 定义全局变量和缓冲区
static uint32_t Lead_Code_Count = 0;               // 引导码计数
static uint32_t High_Bit_Count = 0;                // 高位数据位计数
static uint32_t Low_Bit_Count = 0;                 // 低位数据位计数
static uint32_t High_Bit_Duration = 0;             // 高位数据位持续时间
static uint32_t Low_Bit_Duration = 0;              // 低位数据位持续时间
static uint8_t Received_Buffer[ARRAY_SIZE] = {0};  // 接收数据缓冲区
static uint8_t lastDataArray[ARRAY_SIZE] = {0};    // 上一次接收数据缓冲区
static uint8_t Received_Byte_Count = 0;            // 接收数据字节计数
static uint8_t consecutiveEqualCount = 0;          // 数据接收相同计数
static uint8_t Bit_Count = 0;                      // 接收数据位计数
static uint8_t Received_Data = 0;                  // 接收到的数据
static Decode_State_t RF_Decode_State = LEAD_CODE; // 数据解码状态void Decode_Data(void);
void Execute_Function(void);
void Reset_Decode_Parameters(void);/**----------------------------------------------------------------------------------------------****函数名  :EV1527端口配置**功能说明:初始化IO口,不同单片机的配置输入模式不一样,自行修改。**----------------------------------------------------------------------------------------------**/
void EV1527_Init(void)
{DATA_433_GPIO_CLK_ENABLE();GPIO_InitTypeDef GPIO_InitStruct;// 配置上拉输入GPIO_InitStruct.Pin = DATA_433_PIN;GPIO_InitStruct.Mode = GPIO_MODE_INPUT;GPIO_InitStruct.Pull = GPIO_PULLUP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;HAL_GPIO_Init(DATA_433_GPIO_PORT, &GPIO_InitStruct);
}/**----------------------------------------------------------------------------------------------****函数名  :RF信号解码函数**功能说明:解码从433MHz接收到的信号,并根据解码结果执行相应功能**调用说明:80us调用一次**----------------------------------------------------------------------------------------------**/
void RF_Signal_Decode(void)
{switch (RF_Decode_State){case LEAD_CODE: // 引导码// 判断是否低电平if (HAL_GPIO_ReadPin(DATA_433_GPIO_PORT, DATA_433_PIN) == GPIO_PIN_RESET){Lead_Code_Count++;}else // 高电平判断范围{// 判断引导码范围是否合法if (Lead_Code_Count >= MIN_LEAD_CODE && Lead_Code_Count <= MAX_LEAD_CODE){Lead_Code_Count = 0;Reset_Decode_Parameters();  // 重置解码参数RF_Decode_State = HIGH_BIT; // 进入高位数据位判断状态}else{Reset_Decode_Parameters(); // 引导码范围不合法,重置解码参数}}break;case HIGH_BIT:// 判断是否高电平if (HAL_GPIO_ReadPin(DATA_433_GPIO_PORT, DATA_433_PIN) == GPIO_PIN_SET){High_Bit_Count++;}else // 低电平判断范围{// 判断高位数据位范围是否合法if (High_Bit_Count >= MIN_BIT_DURATION && High_Bit_Count <= MAX_BIT_DURATION){High_Bit_Duration = High_Bit_Count; // 保存计数值,用于区分0和1High_Bit_Count = 0;RF_Decode_State = LOW_BIT; // 进入低位数据位判断状态}else{Reset_Decode_Parameters(); // 高位数据位范围不合法,重置解码参数}}break;case LOW_BIT:// 判断是否低电平if (HAL_GPIO_ReadPin(DATA_433_GPIO_PORT, DATA_433_PIN) == GPIO_PIN_RESET){Low_Bit_Count++;}else // 高电平判断范围{// 判断低位数据位范围是否合法if (Low_Bit_Count >= MIN_BIT_DURATION && Low_Bit_Count <= MAX_BIT_DURATION){Low_Bit_Duration = Low_Bit_Count; // 保存计数值,用于区分0和1Low_Bit_Count = 0;RF_Decode_State = DATA_PROCESS; // 进入数据处理状态}else{Reset_Decode_Parameters(); // 低位数据位范围不合法,重置解码参数}}break;case DATA_PROCESS:Decode_Data(); // 解码数据if (Received_Byte_Count == 3){// 接收到全部数据,包括地址和数据RF_Decode_State = FUNCTION_PROCESS;  }else{                               // 数据没接收完RF_Decode_State = HIGH_BIT; // 继续解码数据}break;case FUNCTION_PROCESS:Execute_Function();        // 执行功能Reset_Decode_Parameters(); // 重置解码参数break;default:Reset_Decode_Parameters(); // 默认状态,重置解码参数break;}
}/**----------------------------------------------------------------------------------------------****函数名  :Reset_Decode_Parameters**功能说明:重置解码参数,用于开始新的解码周期**----------------------------------------------------------------------------------------------**/
void Reset_Decode_Parameters(void)
{Bit_Count = 0;Received_Data = 0x00;Received_Byte_Count = 0;Lead_Code_Count = 0;High_Bit_Count = 0;Low_Bit_Count = 0;High_Bit_Duration = 0;Low_Bit_Duration = 0;RF_Decode_State = LEAD_CODE;
}/**----------------------------------------------------------------------------------------------****函数名  :Decode_Data**功能说明:解码数据位,将解码后的数据存入相应的缓冲区中**----------------------------------------------------------------------------------------------**/
void Decode_Data(void)
{Received_Data <<= 1;// 根据高低电平持续时间判断0和1,然后将数据移位存入缓冲区if (High_Bit_Duration > Low_Bit_Duration){Received_Data |= 0x01;}else{Received_Data &= 0xFE;}Bit_Count++;// 每接收8位数据,存入数据数组if (Bit_Count == 8){Received_Buffer[Received_Byte_Count] = Received_Data;Received_Data = 0x00;Bit_Count = 0;Received_Byte_Count++;}
}/**----------------------------------------------------------------------------------------------****函数名  :Execute_Function**功能说明:执行功能,根据解码后的数据进行相应操作**----------------------------------------------------------------------------------------------**/
void Execute_Function(void)
{// 判断解码后的功能字节,并执行相应操作switch (Received_Buffer[FUNCTION_BYTE_INDEX]){case FUNCTION_1:// 执行功能1break;case FUNCTION_2:// 执行功能2break;case FUNCTION_3:// 执行功能3break;default:// 默认操作break;}
}

EV1527.h

/*** @file EV1527.h* @author cyWu (1917507415@qq.com)* @brief EV1527解码框架* @version 0.1* @date 2024-03-28* @copyright Copyright (c) 2024**/#ifndef __EV1527_H
#define __EV1527_H#include "main.h"
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdbool.h>/*********433 DATA GPIO**********/
// 433数据输入
#define DATA_433_PIN GPIO_PIN_7
#define DATA_433_GPIO_PORT GPIOA
#define DATA_433_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE();
/*******************************/void EV1527_Init(void);
void RF_Signal_Decode(void);#endif

发射电路原理图

组合按键需要二极管
1

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

面向生成式 AI 的向量数据库:架构,性能与未来趋势

导读 向量数据库是高效处理和准确检索高维数据的基石&#xff0c;对于生成式 AI 技术而言至关重要。本文将分享向量数据库的架构设计和实现中的关键点。 主要分为五个方面&#xff1a; 向量数据库背景介绍 Milvus 整体架构设计 性能的关键-索引 面向 AI 持续进化 01 向量…

vulhub之zabbix

zabbix是一款服务器监控软件,其由server、agent、web等模块组成,其中web模块由PHP编写,用来显示数据库中的结果。能够监控各种网络参数以及服务器健康性和完整性。 zabbix的详细介绍: https://blog.csdn.net/wt334502157/article/details/117994107 zabbix latest.php S…

介绍一下如何生成随机数(c基础)

适合对象 c语言初学者 总结语言用色&#xff0c;个人强调用红色&#xff0c;注意为易错点&#xff0c;若有问题请告诉我谢谢。(建议通过目录观看)。一定要自己动手打代码。 rand函数 是生成随机数的函数&#xff0c;但实则是伪随机数。(即是同一个值) 格式 #include<st…

java案例6-1库存管理系统

【案例介绍】 1.任务描述 像商城和超市这样的地方&#xff0c;都需要有自己的库房&#xff0c;并且库房商品的库存变化有专人记录&#xff0c;这样才能保证商城和超市正常运转。 本例要求编写一个程序&#xff0c;模拟库存管理系统。该系统主要包括系统首页、商品入库、商品显示…

【嵌入式Linux】Linux设备树详解

设备树是是Linux中一种用于描述硬件配置的数据结构&#xff0c;它在系统启动时提供给内核&#xff0c;以便内核能够识别和配置硬件资源。设备树在嵌入式Linux系统中尤其重要&#xff0c;因为这些系统通常不具备标准的硬件配置&#xff0c;需要根据实际的硬件配置来动态配置内核…

逻辑卷建立

逻辑卷 lvm逻辑卷即为&#xff1a;logical volume manager逻辑管理卷&#xff0c;是linux系统下管理硬盘分区的一种机制&#xff0c;lvm适合于管理大型存储文件&#xff0c;用户可以动态的对磁盘进行扩容 作用 lvm&#xff1a;linux系统的一个重要的存储技术 不同的硬盘的不…

【持续更新】【NLP项目】【自然语言处理】智能聊天机器人——“有问必答”【Chatbot】第2章、《模式一:问候模式》

智能聊天机器人——“有问必答” 【注】该项目已开源&#xff0c;开源地址为&#xff1a;链接&#xff0c;代码更新可能不及时。 第2章、《模式一&#xff1a;问候模式》 主窗体的布局如下图所示&#xff1a; 共九种功能模式&#xff0c;最下方为关闭窗口按钮。 点击问候模…

时序预测 | Matlab基于TSA-LSTM-Attention被囊群优化算法优化长短期记忆网络融合注意力机制多变量多步时间序列预测

时序预测 | Matlab基于TSA-LSTM-Attention多变量多步预测 目录 时序预测 | Matlab基于TSA-LSTM-Attention多变量多步预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测 | Matlab基于TSA-LSTM-Attention被囊群优化算法优化长短期记忆网络融合注意力机制多变量多…

attributeerror: ‘FreeTypeFont‘ object has no attribute ‘getsize‘问题

我在训练yolov9的时候报错&#xff1a;attributeerror: ‘FreeTypeFont‘ object has no attribute ‘getsize‘。看过很多博客分析&#xff0c;都是说FreeTypeFont 字体的原因&#xff0c;其实真实问题出现yolo版本安装的Pillow库更新后&#xff0c;getsize&#xff08;&#…

三维天地:数字技术推动汽车产业实验室管理变革创新

近日,2024汽车技术与装备发展论坛在苏州成功召开。论坛以“共筑汽车产业新质生产力”为主题,聚焦新技术、新装备、新生态展开深入研讨,探索装备制造与汽车产业的融合发展路径。北京三维天地科技股份有限公司受邀参会。 在同期举办的检测认证高质量发展论坛上,三维天地咨询总监宫…

产品人必读书籍丨这本书告诉了我在AI时代如何成为一名顶级PM!!

《人工智能产品经理》——AI时代的PM修炼手册&#xff0c;这是一本不太工具的工具书。 很多人不了解产品经理需要具备的能力和素质。那么产品经理人工智能呢&#xff1f;这就更懵了&#xff0c;全是新词汇组成的新职业&#xff0c;到底怎样才算合格的人工智能产品经理&#x…

免费文件夹加密工具

1、去掉了miniExcel引用包&#xff0c;删除掉了excel配置文件 2、增加了密码登录功能&#xff0c;可以修改密码 3、使用sqlite3数据库来保存文件夹列表和用户密码&#xff0c;用户密码采用md5加盐 4、使用了 antdui来美化下界面 5、未解锁文件平不能被移除 其他还是保持老样…

第四届计算机图形学、人工智能与数据处理国际学术会议

在线投稿&#xff1a;学术会议-学术交流征稿-学术会议在线-艾思科蓝 第四届计算机图形学、人工智能与数据处理国际学术会议&#xff08;ICCAID 2024&#xff09;将于 2024年12月13日-15日在中国南昌举行。本次会议主要围绕“计算机图形学、人工智能与数据处理”的最新研究…

辐射发射测试新境界:深入解析TS-RadiMation套件多种操作方法(一)

TS-RadiMation套件作为辐射发射测试的得力助手&#xff0c;支持多种测试方法。 多频段手动模式电波暗室固定高度测试GTEM小室测试手动模式&#xff08;单频段&#xff09; 本文将详细介绍如何操作手动模式及手动模式&#xff08;单频段&#xff09;这两种模式&#xff0c;助您…

基于matlab的基于Tent混沌映射改进的麻雀搜索算法SSA优化BP神经网络预测

基于Tent混沌映射改进的麻雀搜索算法SSA优化BP神经网络预测 1 普通BP网络 代码如有需要&#xff0c;联系 596520206 %构建网络netnewff(inputn,outputn,hiddennum);% 网络参数net.trainParam.epochs100; % 训练次数net.trainParam.lr0.01; % 学习速…

[前端][基础]JavaScript

1&#xff0c;JavaScript简介 JavaScript 是一门跨平台、面向对象的脚本语言&#xff0c;而Java语言也是跨平台的、面向对象的语言&#xff0c;只不过Java是编译语言&#xff0c;是需要编译成字节码文件才能运行的&#xff1b;JavaScript是脚本语言&#xff0c;不需要编译&…

10:00面试,10:08就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

Java三大特性之一——多态(详细版)

文章目录 一、什么是多态二、重写2.1、重写的规则 三、多态的实现条件四、向上转型五、向下转型六、动态绑定七、使用多态的优缺点7.1、优点7.2、缺点 八、避免在构造方法中调用重写的方法 一、什么是多态 Java多态是面向对象编程的一个重要特性&#xff0c;它允许不同的对象对…

连锁餐饮企业-凡塔斯,用千里聆RPA搭建用户评价管理系统,提升门店服务满意度

凡塔斯是大型连锁餐饮企业昊澜餐饮集团旗下餐饮品牌&#xff0c;是牛排自助餐头部品牌&#xff0c;旗下拥有凡塔斯、百分好、食物链KING自助烤肉及餐饮人才商学院等多个行业知名品牌。 创立至今&#xff0c;集团管理门店已发展到福建、广东、江西、浙江等十多个省市&#xff0c…

设备状态监控一定要直观,可视化大屏最适合这个工作

一、引言 在现代工业生产和各类设施运行中&#xff0c;设备的稳定运行至关重要。为了确保设备能够高效、可靠地工作&#xff0c;及时了解设备的状态是关键。而设备状态监控一定要直观&#xff0c;只有这样才能让操作人员和管理人员迅速掌握设备的运行情况&#xff0c;及时发现…