目录
一、EV1527编码格式
二、OOK&ASK的简单了解
三、433MHZ
四、单片机的地址ID
五、基于STC15W104单片机实现无线通信
无线发射主要运用到了三个知识点:EV1527格式;OOk;433MHZ。下面我们来分别阐述:
EV1527是数据的编码格式;OOK是无线发射数据的通信方式;433MHZ是无线发射的载波频率!
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 的时间不一样。 误差较大,相比震荡电阻误差要小很
多。为什么会有这个误差呢?我猜测是因为这个芯片比较便宜,使用的方案比较廉价,所以制作出来就有误差。
如果说EV1527编码格式是将二进制语言转换成方波的话,那么OOK&ASK就是无线发射电路的格式,他们决定了无线发射电路是如何将方波信号转换成电磁波信号的。
ASK如何区分0和1?
0:发送 433.92Mhz 无线波形(载波频率)振幅低
1:发送 433.92Mhz 无线波形(载波频率)振幅高
OOK 如何区分 0 和 1?(OOK 是 ASK 的一种特殊形式)
0:不发送数据(振幅为0)
1:发送 433.92Mhz 无线波形(载波频率)
从官方文档中我们可以看到,每一个单片机都具有唯一的身份证号码,我们也把他叫做ID号,并且程序存储器的最后7个字节单元保存的就是其ID号,只不过被隐藏起来了,用户只能通过地址去访问,但是并不能修改。
我们从stc-isp这个软件中发现最后七个字节是空白的!这就与我们之前所说的相符合了。(为什么最后七个字节是00FF9h呢?因为我们的STC15系列单片机只有4k的程序存储器,当我们从00000h开始存放程序,一直到00FFFh就是第4096个字节了,所以最后七个字节是从00FF9h开始的啦)
这是一款门磁探测器中的无线发射电路模块,他仅仅只有一块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 个字节