微型433MHz无线接收模块
后面可以通过SC2272, 或者单片机对接收到的编码进行解码。最终测试这款接收模块可以在多远的距离接收到发送信号。通过对接收到的编码进行观察, 可以看到发送模块四个不同的管脚为1, 只是影响最高接收字节。在 Time1 的中断中, 反转 LED 管脚,这里测试出 20kHz 的方波,验证了Time1 的中断频率为 40kHz。根据接收到的波形,编码是由一群宽窄不同的脉冲组成。现在看, 其中还有一
微型433MHz无线接收模块
- 原装正品 SYN480R 433M ASK/OOK 无线接收模块
- 资料链接:https://pan.baidu.com/s/1p4Pyi0OCkqQL1Iupo0ClbA 提取码:o9i7
- 无线遥控发射接收模块简介(SYN480R F115 433M )
01 无线接收模块
一、前言
这款大功率433MHz 无线发射模块前天测试过。 由于手边的接收模块都是 315MHz, 所以还无法对其传输距离进行测试。 现在购买的微型433MHz 接收模块到货了。 它的结构极其简单, ·核心是一个SOP8封装的芯片。 晶振的频率为 6.7458MHz, 芯片的信号为 SYN480R。 ·下面对于这款接收模块进行测试。
二、接收波形
在模块上增加一个软件作为接收天线。 其它三个管脚分别是电源、信号输出、地线。 通过面包板给接收模块增加3.3V电压。 示波器显示接收到了脉冲信号。 信号的最窄脉冲宽度为 500微秒, 对应2k 波特率。 发送信号编码芯片为 SC2262。 后面可以通过SC2272, 或者单片机对接收到的编码进行解码。 这样便可以获得发送开关信号了。
▲ 图1.2.1 接收到的信号波形
三、接收解码
根据接收到的波形, 编码是由一群宽窄不同的脉冲组成。 每组脉冲之间有一段时间延迟。 可以根据这个延迟将不同编码脉冲群分开。 分割时间比编码脉冲低电平时间长, 大约15毫秒左右。 编码信号的窄信号, 时间为0.5毫秒。 宽信号为15毫秒。 它们分别对应0,1 编码。
每组编码脉冲包括有25个脉冲, 对应 25bit。 具体编码方式, 现在可以不用追究。 针对发送 十六中组合进行分别测试。 便可以找到每种状态对应的编码了。
四、设计电路板
AD\Test\2023\TestSYN840R.PcbDoc
▲ 图1.4.1 单片机解码电路
▲ 图1.4.2 单面制版电路PCB
使用STM32F030 单片机对接收信号进行解码。 昨天还是用这款单片机对于红外遥控信号进行解码。 采用 40kHz 信号对波形进行采样并且进行判断。 使用串口对其进行程序更新。 使用一颗1117 三端稳压芯片提供 3.3V 的工作电源。 接收模块通过 PRF输入。 信号进入 PA0 端口。 使用四个LED显示接收到的 16中编码状态。 设计单面电路图。 一分钟后得到测试电路板。 上面有一个跳线, 使用 0 欧姆电阻进行短路。 下面进行焊接测试。 最终测试这款接收模块可以在多远的距离接收到发送信号。
电路比较简单, 焊接非常容易。 焊接完毕之后, 利用洗板水进行清洗。 下面便可以进行测试了。 现在看, 其中还有一个飞线还没有焊接, 使用 0 欧姆的电阻进行飞线, 最终电路便焊接完毕了。
五、软件设计
通过 STM32Cobe MX 软件配置单片机资源。 使用串口辅助程序下载和调试。 PA8驱动工作状态LED。 这四个管脚对应的LED控制。 PA0 输入外部接收信号。 下面再配置其他资源。 设置 定时器1 , 使其处于 40kHz 中断状态。 配置 UART1 的参数。 选择内部时钟源, 频率为 48MHz。 最后生成可以使用的工程文件。
在 Time1 的中断中, 反转 LED 管脚, 这里测试出 20kHz 的方波, 验证了Time1 的中断频率为 40kHz。 将接收模块安装在电路板的接口上。 此时, 发送模块还没有工作。 在模块的输出端是一些随机的高低电平变化。 将发送模块打开。 此时便可以接收到发送的编码了。
序号 | 设置状态 | 编码 |
---|---|---|
1 | 0001 | 0x03aaaa |
2 | 0010 | 0x0caaaa |
3 | 0100 | 0x30aaaa |
4 | 1000 | 0xc0aaaa |
5 | 0011 | 0x0faaaa |
6 | 0101 | 0x33aaaa |
通过对接收到的编码进行观察, 可以看到发送模块四个不同的管脚为1, 只是影响最高接收字节。 后面两个字节都是 aa。 由此, 可以推断出, 后面这些字节为地址和校验信息。 前面这八位, 分成四组, 分别对应四个设置管脚的高低电平。 可以根据这个特征来确定接收到的编码是否为合法的编码信息。
现在测试发射端控制端口不同的电瓶配置。 可以看到接收端根据前面分析, 软件实现对应的 LED 等点亮。 验证了前面分析的结果。 到此, 验证了这款微型无线模块接收的特性。 并利用单片机对接收到的 SC2262 编码进行了识别。 这位后面验证功率模块发送能力奠定了基础。
D:\zhuoqing\window\ARM\IAR\STM32\Application\Test\2023\SC2262DecodeF030\Core\Src\main.c
※ 总 结 ※
本文对于这款基于 SYN480R 微型无线接受模块进行了初步测试。 利用单片机对接收到的信号进行解码。 后面将进行远距离接收测试, 看一下这个模块接受的灵敏度。
■ 相关文献链接:
● 相关图表链接:
解码相关程序
/*
**==============================================================================
** CONTROL.C: -- by Dr. ZhuoQing, 2015-11-29
**
**==============================================================================
*/
//==============================================================================
//
//------------------------------------------------------------------------------
extern TIM_HandleTypeDef htim1;
void ControlInit(void) {
HAL_TIM_Base_Start_IT(&htim1);
OUT(LED1);
OUT(LED2);
OUT(LED3);
OUT(LED4);
//--------------------------------------------------------------------------
g_ucLastStatus = VAL(INPUT);
g_nOffCount = 0;
g_nOnCount = 0;
g_ucDecodeStatus = DECODE_STATUS_NULL;
g_nReceiveCode = 0;
g_nReceiveMask = 0x1;
g_nReceiveCodeKeep = 0;
g_nWaitCount = 0xffff;
g_ucUpdateFlag = 0;
}
//------------------------------------------------------------------------------
void Time1ISR(void) {
//--------------------------------------------------------------------------
g_nWaitCount ++;
if(g_nWaitCount > 5000) {
g_ucDecodeStatus = DECODE_STATUS_NULL;
}
//--------------------------------------------------------------------------
if(VAL(INPUT)) {
// ON(LED);
if(g_ucLastStatus == 0) {
if(g_ucDecodeStatus == DECODE_STATUS_WAIT) {
g_ucDecodeStatus = DECODE_STATUS_BIT;
}
}
g_nOnCount ++;
g_nOffCount = 0;
g_ucLastStatus = 1;
} else {
// OFF(LED);
if(g_ucLastStatus != 0) {
if(g_ucDecodeStatus == DECODE_STATUS_BIT) {
if(g_nOnCount > 40) g_nReceiveCode |= g_nReceiveMask;
g_nReceiveMask <<= 1;
}
}
//----------------------------------------------------------------------
if(g_nOffCount > 500) {
if(g_ucDecodeStatus == DECODE_STATUS_BIT)
g_nReceiveCodeKeep = g_nReceiveCode;
g_ucUpdateFlag = 1;
g_nReceiveMask = 0x1;
g_nReceiveCode = 0x0;
g_ucDecodeStatus = DECODE_STATUS_WAIT;
g_nWaitCount = 0;
}
g_nOffCount ++;
g_nOnCount = 0;
g_ucLastStatus = 0;
}
}
unsigned char DecodeCode(unsigned int nCode) {
if((nCode & 0xffff) != 0xaaaa) return 0x0;
unsigned char ucCode = 0x0;
nCode >>= 16;
unsigned char ucBit2 = nCode & 0x3;
if(ucBit2 == 0x3) ucCode |= 1;
else if(ucBit2 != 0x0) return 0;
nCode >>= 2;
ucBit2 = nCode & 0x3;
if(ucBit2 == 0x3) ucCode |= 2;
else if(ucBit2 != 0x0) return 0;
nCode >>= 2;
ucBit2 = nCode & 0x3;
if(ucBit2 == 0x3) ucCode |= 4;
else if(ucBit2 != 0x0) return 0;
nCode >>= 2;
ucBit2 = nCode & 0x3;
if(ucBit2 == 0x3) ucCode |= 8;
else if(ucBit2 != 0x0) return 0;
return ucCode;
}
void SetLEDsCode(unsigned char ucCode) {
if(ucCode & 0x1) ON(LED1);
else OFF(LED1);
if(ucCode & 0x2) ON(LED2);
else OFF(LED2);
if(ucCode & 0x4) ON(LED3);
else OFF(LED3);
if(ucCode & 0x8) ON(LED4);
else OFF(LED4);
}
//==============================================================================
// END OF THE FILE : CONTROL.C
//------------------------------------------------------------------------------
/*
**==============================================================================
** CONTROL.H: -- by Dr. ZhuoQing, 2015-11-29
**
** Description:
**
**==============================================================================
*/
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//==============================================================================
//
//------------------------------------------------------------------------------
void ControlInit(void);
void Time1ISR(void);
//------------------------------------------------------------------------------
CONTROL_EXT unsigned char g_ucLastStatus, g_ucDecodeStatus, g_ucUpdateFlag;
CONTROL_EXT unsigned int g_nOffCount, g_nOnCount;
CONTROL_EXT unsigned int g_nReceiveCode, g_nReceiveMask, g_nReceiveCodeKeep;
CONTROL_EXT unsigned int g_nWaitCount;
unsigned char DecodeCode(unsigned int nCode);
void SetLEDsCode(unsigned char ucCode);
//==============================================================================
// END OF THE FILE : CONTROL.H
//------------------------------------------------------------------------------
更多推荐
所有评论(0)