分享

433无线发射之EV1527解码

 新用户0118F7lQ 2023-09-04 发布于山东

前段时间因为项目需要,要做和433无线相关的项目开发,今天我们就来讲讲这方面的。

1-433无线介绍

433M无线发射(也是射频的一种)通常和红外遥控发射以及2.4G这种事差不多的。当然也有一些区别,在这里不做赘述,本章节只讲述433无线,当然315也是这个东西,在国内通常使用433,外国部分地区使用315的较多一点。只是频段不同。

1.1-工作原理:

433芯片的工作原理是将数字信号转换为射频信号并通过无线信道发送,接收端将接收到的射频信号转换为数字信号并输出。它的优点是成本低、功耗低、传输距离较远(通常可达50米到100米,有的做的好的可达到200米,当然通常情况下100米用作家用智能或者小型农业上就已经可以了,但是从安全性来考虑,我个人并不推荐作为家用产品,因为信号很容易受到干扰,即使硬件和软件做的足够好,也是非常容易受到各种信号的干扰,不过我认为应用于农业或者一些对安全性不是很高的地方使用最为合适。),因此在一些需要简单无线传输的场景中得到了广泛的应用。

  1. 调制和解调: 无线通信的基本原理是通过调制将数字信号转换为模拟信号,然后通过解调将模拟信号转换回数字信号。在433MHz无线通信中,使用的调制方式通常是振幅调制(AM)或频移键控(FSK)。

  2. 发射端(发送器): 发射端通常由一个无线模块或芯片组成。要发送的数据被编码成数字信号,然后传送到无线模块。无线模块将数字信号转换为模拟信号,并将其调制成适合在433MHz频率上传输的无线信号。

  3. 天线: 发射端的无线信号通过一根天线辐射出去。天线的设计和位置可以影响信号的传播距离和质量。

  4. 传输介质: 无线信号在空气中传播,遵循无线电波传播的规律。信号的传播距离取决于发送功率、天线增益、传播环境等因素。

  5. 接收端(接收器): 接收端也由一个无线模块构成。它接收到从发射端发来的模拟信号,并将其解调还原为数字信号。

  6. 解码和处理: 接收端获得数字信号后,将其解码为原始数据。这个解码过程需要根据通信协议来执行。例如,一些无线模块支持特定的编码和解码方式,用于数据的正确接收和校验。(无论是解码还是编码,除了市面上芯片外,还可以使用程序模拟实现)

  7. 数据处理: 解码后的数据可以传递给系统的其他部分进行处理。这可以是将数据显示在用户界面上、控制设备执行特定操作等。

需要注意的是,433MHz无线通信主要用于短距离通信,通常在几十米到一百多米的范围内。它的功耗较低,适合电池供电的设备。然而,由于这种频段通常没有强大的频率规划和冲突避免机制,可能会受到干扰,因此在设计应用时需要考虑信号干扰和安全性问题。

2-EV1527介绍

EV1527 是编码 IC,每次发 3 帧,每帧 24 位加一个同步码。此 24 位中,前 20 位为芯片内码(即 ID,共有 2 的 20 次方,即 1048576 组组合,大大降重复几率),后 4 位是按键值(即数据)。

图片

图片

图片

3-433无线之EV1527软件模拟编码

在433中不管是ASK还是OOK,对于软件编码和解码来说并没有多大的区别,我们只需要知道他们之间电平的间隔时间就行,理论上,模拟编码的实现是倍数关系就行,当然,模拟如安然能够省钱,但是也会存在以下问题,因为每个厂商选用的电阻不一样就会导致时间间隔上有些差别进而会导致对码或者配对失败的现场。

图片

根据这个图片,可以知道,同步是4:124的关系,数据1和数据0是相反的关系,因为在实现编码是非常容易得事情。

本次实在51单片机上使用的,因此就以51为例(因保密性,不提供全部代码):

接下来,我们对这个进行分析:

首先是同步:

图片

如上图:我们选择330K,3V作为我们此次的基准:

图片

从这可以知道一个LCK=1.69/16时间。

所以同步高就是 1.69/4,同步低就是1.69*124/16

我们通过计算就能知道具体的时间,当然在这你可以使用定时器或者延时也可以,前提是你的延时要精确就行。

二、定时器中断方式的编码

把串行输入的编码数据帧,还原成编码之前的状态,读取其中

的地址码和按键码,称之为解码。

数据帧都是由同步头开始,然后是 24位的数据码,并且此数据帧在遥控器按键的过程中是重复出现的,我们首先要判断同步码,判断出了同步码,就知道数据码是从那一位开始了。对于一款量产的无线遥控器来说,他的编码芯片匹配的电阻是一个固定值,也就是说它发射的数据帧的脉冲宽度是不变的,所以我们可以通过测量高低脉冲宽度的方式来分辨同步码、逻辑“1”、逻辑“0”。

具体的方法是这样的,首先启用定时器,装入一个初值,打开

定时器中断,让其以固定的间隔进入中断程序。在中断程序中,我们查询数据输入管脚的状态,如果为高电平,就在高电平状态累加计数,反之就在低电平状态计数,当电平发生上升沿变化的时候,判断接收到的高低电平宽度的值是否符合同步信号的要求,如果符合就进入数据位的接收,以同样的方式判断逻辑“1”或逻辑“0”。如果接受过程中出现不符合要求的电平状态,就退出接收,为了增加可靠性,我们一般要求规定时间内,成功接收到完全相同的 2 帧数据才算有效。

接收完成后,24 个数据位被放入 3 个字节中。

所以我们可以得到下面的代码:
// 发送12400us的定时器值

1void EV1527_send12400us(void)
2
{
3    EV1527_sendTimerValue(EV1527_124_TL0, EV1527_124_TH0);
4}
1// 发送400us的定时器值
2void EV1527_send400us(void)
3
{
4    EV1527_sendTimerValue(EV1527_4_TL0, EV1527_4_TH0);
5}

同理我们可以得到其他时间值:

1void EV1527_send1200us(void)
2
{
3    EV1527_sendTimerValue(EV1527_12_TL0, EV1527_12_TH0);
4}

高电平和低电平就是引脚输出电平是高还是低。在进行数据发送的时候,是先进行同步头操作,然后再试进行数据1的发送在之后才是数据0的发送:

所以,发送一个数据字节:

// 发送一个字节的数据

 1void EV1527_sendByte(unsigned char byte)
2
{
3    unsigned char i;
4    for (i = 0; i < 8; i++)
5    {
6        if (byte & 0x80)
7        {
8            EV1527_dataPin = 1;
9            EV1527_send1200us();
10            EV1527_dataPin = 0;
11            EV1527_send400us();
12        }
13        else
14        {
15            EV1527_dataPin = 1;
16            EV1527_send400us();
17            EV1527_dataPin = 0;
18            EV1527_send1200us();
19        }
20        byte <<= 1;
21    }
22}

因为总共要发送三个字节。所以结合上面的就可以实现,三个字节的发送,这三个字节分别是:两个数据码(也就是地址,可以通过修改这个地址,进而实现不同的地址)以及按键码。

最终我们通过示波器或者逻辑分析仪可以得到下面的图形:

图片

图片

得到的编码值:

图片

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多