CK1021无线模块
操作指南
主要性能:
SPI接口无线数据传输模块
ﻩ功率可调
15dBm输出功率
ﻩ150Kb/s数据传输速率ﻩ内置曼码功能 —116dBm 高接收灵敏度 | |
深圳市超控科技有限公司 | 版权所有 201 |
0.1.20
一、模块简介
CK1021 无线模块是我司开发的一款具有较高性价比的无线数据传输产品,具有高速、高敏、高功率、低功耗、纠错强、易学、易用的特点。 工作于315/433/868/915MHz 的ISM 微功率免申请频段。 采用FSK调制方式,传输速率达150Kbps。开阔距离传输情况下传输距离0— 700米可调整。 二、基本特点 |
|
(1)433Mhz开放ISM频段免许可证使用;
(2)最高工作速率150Kb/s,高效FSK调制,抗干扰能力强,特别适合工业控制场合;(3)可软件设置频率、地址,适合跳频多点通信应用场合;
(4)内置硬件CRC检错和地址码控制;
(5)低功耗2。2- 3.6V工作,休眠状态仅为2uA可满足低功耗设备的要求;(6)收发模式切换时间<650us;
(7)可与具有通用I/O的MCU配合使用;
(8)TX Mode: 在+10dBm 情况下,电流为34mA; RX Mode: 12-14mA; |
该无线模块与单片机接口非常简单,只需要5条I/O线便可实现强大的无线数据传输功能,如下图所示。
3。1与单片机的接口示意图
DC3.3V
ﻩ | I/O 输出 | 使能 |
I/O 输出 | SPI 时钟 | |
I/O 输出 | SPI 收线 | |
I/O 输入 | SPI 发线 | |
I/O 输入 | 发送完成标志 | |
CK1021 无线模块 | ||
单片机 |
3.2管脚定义
序号 | 管脚定义 | 输入输出 | 说明 |
1 | DC3。3V | | 供电端,供电范围2。2~3。6 V |
2 | GND | | 地 |
3 | CS(PW) | 输入 | 片选 |
4 | IRQ | 输出 | 数据指示,TX:数据发送完成; RX:数据收到 |
5 | SDIO | 双向 | SPI数据,设置及发送数据时为输入,读取数据时为输出。 |
6 | SCK | 输入 | SPI 时钟 |
7 | SCS | 输入 | SPI 信号使能 |
四、软件操作
该无线模块软件控制非常简单,模块内部有16个控制寄存器,对于无线了解不太
深入的工程师,可按照料我方提供的寄存器值写入,即可实现模块配置。待慢慢熟悉该模
块后,可进一步更改寄存值,实现更多实用的功能。
ﻩ | 软件的操作流程如下: | |||
有数据发送吗? | 无 | 有数据接收到吗? | ||
设置寄存器为发送状态 | 读取缓冲区中的数据 |
向发送缓冲区写入数据 等待发送完成 | |
五、无线应用注意事项 |
|
(1)无线模块的 VCC电压范围为 1。8V-3.6V之间,不能在这个区间之外,超过3.6V将会烧毁模块。推荐电压3.3V 左右。 |
(2)除电源VCC和接地端,其余脚都可以直接和普通的51单片机IO口直接相连,无需电平转换.当然对3V左右的单片机更加适用了。
(3)硬件上面没有SPI的单片机也可以控制本模块,用普通单片机IO口模拟SPI不需要单片机真正的串口介入,只需要普通的单片机IO口就可以了,当然用串口也可以了。
模块按照接口提示和母板的逻辑地连接起来
(4)邮票孔接口,如需要其他封装接口,或其他形式的接口,可联系我们定做。
(5)任何单片机都可实现对无线模块的数据收发控制,并可根据我们提供的程序,然后结合自己擅长的单片机型号进行移植;
(6)频道的间隔的说明:实际要想2个模块同时发射不相互干扰,两者频道间隔应该至少相差1MHZ,这在组网时必须注意,否则同频比干扰。
(7)实际用户可能会应用其他自己熟悉的单片机做为主控芯片,所以,建议大家在移植时注意以下4点:
A:确保IO是输入输出方式,且必须设置成数字IO;
B:注意与使用的IO相关的寄存器设置,尤其是带外部中断、带AD功能的IO,相关寄存器一定要设置好;
C:调试时先写配置字,然后控制数据收发
D:注意工作模式切换时间
六、程序范本 |
{
ﻩSCS=0;
ﻩByteSend(CMD_RFRST);
ﻩSCS=1;
}
/************************************************************************
**CK1021_ResetTXFIFO复位发送针
************************************************************************/
voidCK1021_ResetTXFIFO(void)
{
ﻩSCS= 0;
} | ByteSend(CMD_TFR); | |
SCS = 1; | ||
|
/************************************************************************
**CK1021_ResetRXFIFO复位接收指针
************************************************************************/
voidCK1021_ResetRXFIFO(void)
{
SCS=0;
ﻩByteSend(CMD_RFR;)
SCS= 1;
}
/************************************************************************
** WriteID设置ID号
************************************************************************/
voidCK1021_WriteID(void)
{ | Uint8i; | |
Uint8 d1,d2,d3,d4; | ||
ﻩﻩByteSend(ID_Tab[i)]; |
ﻩSCS=1;
ﻩSCS=0;
ByteSend(0xA0);//readmode
d1=ByteRead();
d2=ByteRead();
ﻩd3=ByteRead)(;
d4=ByteRead();
ﻩSCS=1;
}
/************************************************************************
** CK1021_WriteReg 写寄存器
************************************************************************/ | |
void CK1021_WriteReg(Uint8 address, Uint16dataWord) | |
{
Uint8i;
SCS=0;
address|=CMD_CTRLW;
for(i=0;i<8;i++)
{
if(address&0x80)
SDIO=1;//bit=1
else
SDIO=0;//bit=0
SCK= 1;
SCK=0;
address= address<< 1;
}
//senddataword
for(i= 0;i〈16;i++)
{
if(dataWord& 0x8000)
SDIO = 1; |
}
/************************************************************************
**CK1021_ReadReg读寄存器
************************************************************************/
Uint16CK1021_ReadReg(Uint8address)
{
Uint8i;
Uint16tmp;
SCS=0;
address |=CMD_CTRLR;
{ for(i =0;i < 8; i++)
if(address&0x80)
SDIO=1;
else
SDIO=0;
SCK= 1;
SCK= 0;
address=address〈<1;
}
SDIO= 1;
//readdata code
D_SDIO=SetINPUT;
for(i=0;i<16;i++)
{
ﻩif(SDIO)
tmp= (tmp<〈1)|0x01;
else
tmp= tmp<〈1;
SCK=1;
} | SCK = 0; |
******************
** ByteSend 发送1字节
************************************************************************/
voidByteSend(Uint8src)
{
Uint8i;
for(i=0;i <8;i++)
{
if(src&0x80)
SDIO=1;
else
SDIO = 0;
SCK = 1; | |
}
}
/************************************************************************
**ByteRead读取1节节
************************************************************************/
Uint8ByteRead(void)
{
Uint8i,tmp;
//readdata code
//SDIO=1;//sdiopullhigh
D_SDIO=SetINPUT;
for(i=0;i<8;i++)
{
if(SDIO)
tmp=(tmp〈<1) | 0x01;
else
} | tmp =tmp〈< 1; |