proteus7.8 仿真PT2260_R4无线收发程序下载:
链接:https://pan.baidu.com/s/1IHxhLDaeIPAEVQO4SIMhuA
提取码:x0jm
Pro7.8 软件下载:
链接:https://pan.baidu.com/s/1kTFvD9CwN_Ac-_-TgE7KqA?pwd=nh2n
提取码:nh2n
89C51RD2 手册 PT2260_R4手册
链接:https://pan.baidu.com/s/1Beau5-X0lwdly5YnUO6iig
提取码:17sk
就是这样的模块:
这种模块不带编解码,需要连接单片机或编解码芯片完成发送和接收解码。
这种模块称为超再生模块,比起超外差模块来,它受到的干扰会比较多一些,没有有效信号的时候也会有一些无效脉冲,但基本上不影响使用。
关于无线通讯的一些概念:
基带:
基带就是原始信号,由于频率,幅值等原因,纯粹的基带信号往往是无法实现远距离发送,或者根本无法发送的。例如:如果声音信号作为基带信号,那么它传播的距离是十分有限的(通讯基本靠吼),为了实现远距离发送,必须将基带信号放在经调制的载波上,才能使它传播的更远。
载波
载波就是用来加载基带信号的一种信号,例如广播信号常用的调频和调幅信号。
那么如何将基带信号放到载波上呢?
调制与解调
这就需要调制,例如广播信号的调幅信号,就是根据基带信号对载波的幅值进行调制,这种经过调制的载波信号就和基带信号发生联系,传播出去之后就等于基带信号也加载在其中被传播出去了。在接收端对调制信号进行解调,就能得到基带信号。调频也是同样道理,只不过它是根据基带信号对载波的频率进行调制。
这里使用的无线信号调制方式称为:ASK
ASK的调制方式
ASK(Amplitude Shift Keying)幅移键控调制方式,是一种基于幅度变化的数字调制方式。在ASK调制中,每个数字位被映射到不同的幅度水平,以表示不同的数据值。
每个数字位通过改变载波信号的幅度来表示,通常使用两个不同的幅度水平来表示0和1。例如,可以使用高幅度表示1,低幅度表示0。
需要注意的是,ASK调制方式相对简单,但在传输过程中对信道的要求较高。由于ASK调制只使用了两个幅度水平,对噪声和干扰的抗干扰能力较差。因此,在实际应用中,需要根据具体的通信环境和要求来选择合适的调制方式。
关于通讯协议:
发送信号的方式有很多种,这里使用的数据格式是PT2260_R4芯片的数据格式。此外还有EV1527等芯片的通讯格式,大同小异。当然也可以自己定义任何格式的数据进行发送和接收。
PT2260_R4芯片:
PT2260_R4,通常用于这种遥控器上,R4表示有4个按键。
拆开后的样子:
红箭头所指的是电阻R4,标有83E的标识,代表电阻值是7.15M。这个电阻称为振荡电阻,决定了数据发送的速度。注意它和载波的433MHz无关,数据发送的是快是慢由这个电阻决定,但是不管数据发送速度是多少,载波都是433MHz的。
背面:
电池的上面,有三排焊盘,称为地址码焊盘。地址码一共8位,左边是高位,右边是低位。中间的焊盘如果与上面的焊盘连接,代表地址位为1,与下面连代表地址位为0,如果悬空,代表地址位为F。
也就是这种遥控器一共有 3^8=6561种可能的地址码(不算太多)。
PT2260_R4的数据格式:
一个数据位,是1024个a
一个同步位,是4096个a
一个完整的数据字,包括8位地址码,4位数据码,1位同步码
解释一下这个OSC,就是由遥控器上的振荡电阻决定的,电阻不同,OSC的周期不同,例如,我购买的遥控器上的振荡电阻决定的OSC,经实际测量是:2.533us。
也就是,以一个a(OSC)作为时间单位,如果想要表示数据0,那就发送128a时长的载波,再停止发送348a时长的载波。
表示数据1:
发送384a时长的载波,停止发送128a时长的载波。
每个位需要发送2遍。
同步码的表示:
发送128a时长的载波,停止发送(4096-128)a,时长的载波
一个完整的字包括:
8个地址位,4个数据位,一个同步码
每次发送同样的字数据4次。
模块的硬件连接:
数据发送模块的连接:
发送模块的DATA接单片机的P2_7,我使用的单片机是89C51RD2。每当管腿为高的时候,模块向外发送433MHz的射频载波。管脚为低的时候,模块停止发送载波。
这样根据发送和停止发送载波的时间不同,就可以表示数据0,1,F(地址悬空码),SYNC(同步码)。具体见上面介绍的数据格式。
这里要说明一下的是,发射模块发射信号的距离远近和模块上的电压有关,我购买的这个模块,电压范围是3-12V。电压越高,发射信号距离越远。
但是要注意,如果模块所加的电压不是单片机的电源电压,管脚就不能直接驱动了,会烧,要加晶体管驱动。
接收模块的连接
模块的数据端和单片机的外部中断0(INT0)相连接。
数据发送程序:
现在,模拟PT2260_R4芯片构建一段数据编码,并发送出去。
如果地址设定为(从高位到地位)F F F F F F F 1
数据设定为四个按键:A: 0001
B: 0010
C: 0100
D: 1000
例如:要发送按键A的值,首先发送8位地址码:FFFF FFF1
然后发送表示键A的四位数据码:0001
接下来发送同步码:SYNC
这样,一个完整的数据字就被发送出去了。
注意发送的时候,首先发送的是最低位。
以上的过程重复4遍。
使用带有PT2260_R4的遥控器发送数据,经测量两个同步位之间是 41.5ms
(8+4)*1024+4096=16384a
16384a=41.5ms à a=2.533us 也就是7.15M的振荡电阻R4所决定的OSC周期
那么可以算出:
一个宽脉冲的时间384a=384*2.533us=973us
一个窄脉冲的时间128a=128*2.533us=324us
一个同步位的低电平(4096-128)a=10051us
//定义宽脉冲,窄脉冲,和SYNC低的时长
//128a
//窄脉冲 324us 11.0592 16位重装入方式的初值
// TL1 = 0xD5;
// TH1 = 0xFE;
//384a
//宽脉冲 973us
// TL1 = 0x7F; //设置定时初值
// TH1 = 0xFC; //设置定时初值
//4096-128
//SYNC低 10051us
// TL1 = 0xD1; //设置定时初值
// TH1 = 0xDB; //设置定时初值
每个数据位要发送2次
128a时长的Pfsend(P2_7)高电平期间,模块向外发送433MHz的载波,384a的时长,模块停止发送载波。这样就表示发送的是数据位0。
见波形:
使用定时器T1,设定为16位自动重装入模式,首先对定时器T1进行初始化:
//8051 T1初始化
void Timer1_init()
{
TMOD=0x10; //T1 16位自动重装入
ET1=0; //关闭定时器中断
TR1=0;
}
//发送数据0
void Send_bit0()
{
uchar data i;
for(i=0; i<2; i++)
{
//128a高(发射载波)
//T1装入初值
TL1 = 0xD5;
TH1 = 0xFE; //窄脉冲 298us
RFsend=1; //发射载波
TR1=1; //开启定时器
while(TF1 ==0); //等待溢出
RFsend=0; //停止发射载波
TF1=0; //清溢出标志
TR1=0; //关定时
//384低(停止发射载波) //宽脉冲 973us
//T1装入初值
TL1 = 0x7F;
TH1 = 0xFC; //设置定时初值
TR1=1;
while(TF1==0); //等待溢出
TF1=0;
TR1=0;
}
}
数据接收程序:
由于89C51RD2只能下降沿触发INT0中断,因此,接收数据时,首先等待同步码的低电平,判断是否满足时长,之后接收8位地址码,和4位数据码。一个完整的字收到后,再接收一遍。如果两遍的数据相同,就认为收到了正确的数据。
首先设置外部中断0,下降沿触发模式,允许中断。
void RF_init(void)
{
IT0=1; //对于老式51的设置 IT=0电平触发, IT=1下降沿触发
EX0=1; //开启外部中断0
}
这样每当有下降沿时,产生中断。在中断服务程序中,首先计数同步码的低电平,如果满足要求,再接着接收其余的数据,否则放弃数据重新接收。如果连续两遍接收的数据都相同,则认为收到了有效的数据。
如何计数高电平或低电平的时长:
//如果使用16位定时器,记满数据是2^16=65536
//如果晶振是11.0592M,则一个OSC=0.090422454us=1T
//12T=12*OSC=1.085069444us 也就是,每记一个数,代表这么长时间
//获取高电平的时长
uint RF_Get_High(void)
{
TL0 = 0; // 清空16位计数器0
TH0 = 0; // 清空16位计数器0
TR0 = 1;
while (RF_Pin && (TH0<0x80)); // 信号引脚变成低电平或超时
TR0 = 0;
return (TH0 * 256 + TL0);
}
//也就是计数值*1.085069444us,就是高电平的时长。
// 获取低电平时间
uint RF_Get_Low(void)
{
TL0 = 0; // 清空16位计数器0
TH0 = 0; // 清空16位计数器0
TR0 = 1; // 计数器0开始运行
while (!RF_Pin && (TH0<0x80)); // 信号引脚变成高或超时
// 0x8000=32768, 32768*1.085069444us=35ms
TR0 = 0;
return (TH0 * 256 + TL0); // 返回16位计数器的计数值。
}
//接收地址和数据的时候,都是从最低位开始接收。
程序及其软件下载地址,见文章开头。
今天的文章433m 无线收发模块的使用教程_无线发射接收模块怎么使用「建议收藏」分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/84196.html