基于adf7023的1瓦无线同步传输模块

基于adf7023的1瓦无线同步传输模块



N502FS基于ADI ADF7023射频收发器、PA和LNA开发的无线同步高功率模块,用于433M、868M和915MHz频段。无线同步模块使用ADF7023运动模式或分组模式。N502FS无线同步高功率模块支持1K至300Kbps的射频速率。无线同步高功率模块的最大输出功率为+30 dBm。支持AT命令。

N502FS无线同步传输模块集成了ADI ADF7023收发器芯片、PA、LNA和MCU,适用于433MHz/868MHz/915MHz频段。ADF7023收发器高功率模块具有成本低、功耗低、体积小的特点。无线同步传输高功率模块采用4层板设计,具有出色的阻抗匹配和抗干扰能力。该模块主要用于物联网、智能家居、无线抄表、科研和医疗以及中远程同步无线通信设备。ADF7023模块将UART、SPI、LED IO端口引出,用于二次开发或使用。


对于分组模式,N502FS高功率模块支持智能计量、IEEE 802.15.4g、无线MBUS、家庭自动化、过程和楼宇控制、无线传感器网络(WSN)。

对于运动模式,该模块支持专用数据无线同步传输。单个帧分组的长度可以自由设置。理论长度是无限的,并且受到DSP或MCU的存储空间的限制。单个帧数据的长度可以设置为3K字节。定制更大的单帧数据。


N502FS无线同步高功率模块功能

UART速率:115200

SPORT模式

低功率模式

频带:862 MHz至928 MHz,431 MHz至464 MHz

带宽:100 kHz、150 kHz、200 kHz、300 kHz

单个帧中的最大字节数:3072字节

VCC : 3 - 5V

SMD package

Size: 42 X 24 X 3 mm

RF port: ipex or RF pin


ADF7023无线同步收发器模块详细信息



ADF7023是ADI的射频收发器。射频速率从1 K到300 Kbps。它支持分组模式和SPORT模式。


对于分组模式,ADF7023收发器支持智能计量、IEEE 802.15.4g、无线MBUS、家庭自动化、过程和楼宇控制、无线传感器网络(WSN)。


对于SPORT模式,支持专用数据同步无线通信。单个帧分组的长度可以自由设置。理论长度是无限的,并且受到DSP或MCU的存储空间的限制。单个帧的长度可以设置为几个K字节。


ADF7023是一款非常低功率、高性能、高度集成的2FSK/GFSK/OOK/MSK/GMSK收发器,设计用于862 MHz至928 MHz和431 MHz至464 MHz频带,覆盖433 MHz、868 MHz和915 MHz的全球无许可ISM频带。它适用于在欧洲ETSI EN300-220、北美FCC(第15部分)、中国短程无线监管标准或其他类似地区标准下运行的电路应用。支持从1 kbps到300 kbps的数据速率。


发射RF合成器包含一个VCO和一个输出信道频率分辨率为400Hz的低噪声分数N PLL。VCO工作在2×或4×基频,以减少杂散发射。接收和发送合成器带宽自动且独立地配置,以实现最佳相位噪声、调制质量和稳定时间。变送器输出功率可从−20 dBm至+13.5 dBm,具有自动PA斜坡,以满足瞬态杂散规范。该部分具有单端和差分PA,允许Tx天线分集。


该接收机是非常线性的,达到IP3规格−12.2 dBm和−最大增益和最小增益分别为11.5 dBm,最大增益和最低增益的IP2规格分别为18.5dBm和27dBm。接收机在±2 MHz偏移处达到66 dB的干扰阻断规格,在±10 MHz偏移处实现74 dB的干扰抑制规格。因此,该部件对频谱噪声环境中存在的干扰具有极强的弹性。该接收机具有新颖、高速、自动频率控制(AFC)环路,允许PLL发现并纠正恢复包中的任何RF频率错误。


正在申请专利的图像抑制校准方案可通过程序下载获得。该算法不需要使用外部RF源,也不需要任何用户干预。校准的结果可以存储在非易失性存储器中,用于收发器的后续加电。


ADF7023引脚配置和功能说明




N502FS无线同步传输模块,单帧数据包最大长度为3K字节对于超过3K字节的单帧长度,需要定制。





SPORT模式软代码

void IRQ_Handler() __irq // this is a promgram for the receiver, when detected the sncywords , this used for receive the data.

{

unsigned char stop;

unsigned char temp=0;

unsigned char i;


Receive_Sign = 1;

Receive_bytes= 0;

stop=0;

while(!stop)

{


for(i=0; i<8; i++)

{

while(read_TxRxCLK()==0);

temp<<= 1 ;

temp+=read_RxDATA();

while(read_TxRxCLK()==1);

}

buff[Receive_bytes]=temp;

Receive_bytes++;

if(temp==0xFF) //if the data is 0xFF,stop receive, you change it and set your own stop word.

{

stop=1;

}

}

my_sent_cmd(CMD_PHY_ON); //back to the stutus of PHY_ON

// IRQCLR = IRQCLR|XIRQ0_BIT;

}


int main (void)

{

STMCU_Initiate(); //initial the ADuc7026

ADF7023_GPIO_config(); // config the GPIO ,both used for transmitter and receiver.

ADF7023BBRAM_TRANSMITTER_config(); // config the ADF7023 BBRAM, both used for transmitter and receiver.

my_delay(100);

Initialization();//initial the ADF7023

my_sent_cmd(CMD_PHY_OFF);//come to the stutus of PHY_OFF

put_string("Come to the Initialization: ");

my_delay(100000);

read_stutus(); //read the stutus

my_sent_cmd(CMD_PHY_ON);

put_string("Come to the ON: ");

my_delay(100000);

read_stutus();

//read_data();


TRANSMITTER(); //come to the transmitter, for the transmitter, you can delete the RECEIVER()

RECEIVER(); //come to the receiver, for the receiver, you can delete the TRANSMITTER()

}


void TRANSMITTER(void)

{

my_delay(100000);

my_sent_cmd(CMD_PHY_TX); //set the stutus to PHY_TX

my_delay(100000);

put_string("Come to the TRANSMITTER: ");

my_delay(100000);

read_stutus(); //read the stutus

my_delay(100000);


while(1)

{

buf[0]=0x55;

sent_char(buf[0]); //set the char 0x55(01010101) used for the Interrupt,you can get more detail from the datasheet

sent_char(buf[0]);

sent_char(buf[0]);

sent_char(buf[0]);

sent_char(buf[0]);

sent_char(buf[0]);

sent_char(buf[0]);

sent_char(buf[0]);


buf[0]=0xFA; //set the syncwords, you can get more detail from the datasheet

buf[1]=0xAA;

buf[2]=0xAE;

sent_char(buf[0]);

sent_char(buf[1]);

sent_char(buf[2]);

sent_string("I am get the data"); // sent the data

buf[0]=0xFF; // sent the stop word

sent_char(buf[0]);

put_string("Finished sentting the data "); //output the UART , you can see from the URAT,that the string is sent.

my_delay(1000000);

}

}


void RECEIVER(void)

{

my_sent_cmd(CMD_PHY_RX); //set the stutus to PHY_RX

my_delay(100000);

put_string("Come to the RECEIVER: ");

my_delay(100000);

read_stutus();


my_delay(10000);

IRQEN = XIRQ0_BIT ;//Enable IRQ0 Interrupt , Interrupt is set base on the syncwords

while(1)

{

if(1 == Receive_Sign)

{

unsigned char i;

Receive_Sign = 0;

put_string("The received data:"); //put the received data to the UART

for(i=1;i

{

put_char(buff[i]); // buff[] is the received data buffer

}

put_char(' ');

my_delay(100000);

put_string("The number of receive data: "); //put the number of the word to the UART

Receive_bytes=Receive_bytes-2;

buf[2]=(Receive_bytes%10)+48;

Receive_bytes=Receive_bytes/10;

buf[1]=(Receive_bytes%10)+48;

Receive_bytes=Receive_bytes/10;

buf[0]=(Receive_bytes%10)+48;

put_char(buf[0]);

put_char(buf[1]);

put_char(buf[2]);

put_char(' ');

my_delay(10000000);


IRQEN = XIRQ0_BIT; //open the Interrupt, to get another data.

my_sent_cmd(CMD_PHY_RX); //go to the stutus of PHY_RX

}

//read_stutus();

}

}


void sent_char(unsigned char ch)//sent a char based on the TxRxCLK , this clk is give by ADF7023, is not given by you .

{

unsigned char temp,i;

temp = ch;

for(i=0;i<8;i++)

{

while(read_TxRxCLK()==1)

{;}

my_delay(1);

if(temp & 0x80)

{

SET_TxDATA();

}

else

{

CLR_TxDATA();

}

temp<<=1;

while(read_TxRxCLK()==0)

{;}

}

}


void sent_stringsent_string(char *str)//sent a string by mutiply use the function sent_char.

{

unsigned int len=0,i;

while ((str[len] >31)||(str[len]==' '))

len++;

for (i=0;i

{

sent_char(str[i]);

}

}


void Initialization(void)

{

my_sent_cmd(CMD_SYNC);//sent the CMD_SYNC

ADF7023_mySPI_MEM_WR(BBRAM , 0 , ADF7023BBRAM, 64 );//config the BBRAM of ADF7023

//ADF7023_mySPI_MEM_WR(MCR , 0 , ADF7023MCR, 255);

Address= MCR_gpio_configure_Adr&0xFF;

buf[0]=0xA2;

ADF7023_mySPI_MEMR_WR(MCR ,Address , buf ); //config the gpio of ADF7023


my_sent_cmd(CMD_CONFIG_DEV);

}


unsigned char my_sent_cmd(unsigned char cmd)

{

unsigned char temp;

CLR_CS();

my_delay(10);


while((read_MISO()==0x0)); //wait for the dataready

temp=CommunicateToADF7023(cmd);


my_delay(10);

SET_CS();

return(temp);

}

unsigned char my_sent_cmd_CS(unsigned char cmd)

{

unsigned char temp;

temp=CommunicateToADF7023(cmd);

return(temp);

}


void read_stutus(void) //// read the stutus and put to the UART

{

CLR_CS();

my_sent_cmd_CS(0xFF);

buf[0]=my_sent_cmd_CS(0xFF);

my_delay(10);

SET_CS();

put_string("The stutus: ");

buf[0]=buf[0]&0x1F;

if(buf[0]==0x11)

{

put_string("PHY_OFF");

}

else if(buf[0]==0x12)

{

put_string("PHY_ON");

}

else if(buf[0]==0x13)

{

put_string("PHY_RX");

}

else if(buf[0]==0x14)

{

put_string("PHY_TX");

}

else if(buf[0]==0x15)

{

put_string("PHY_SLEEP");

}

else

{

put_string("busy");

}

put_char(' ');

my_delay(100000);

}


void read_data(void) // read the register and put to the UART

{

Address= MCR_gpio_configure_Adr&0xFF;

buf[0]=ADF7023_mySPI_MEMR_RD(MCR,Address);

put_string("The data: ");

buf[2]=(buf[0]%10)+48;

buf[0]=buf[0]/10;

buf[1]=(buf[0]%10)+48;

buf[0]=buf[0]/10;

buf[0]=(buf[0]%10)+48;

put_char(buf[0]);

put_char(buf[1]);

put_char(buf[2]);

put_char(' ');

my_delay(100000);

展开阅读全文

页面更新:2024-04-26

标签:模块   频带   接收机   增益   射频   速率   字节   功率   长度   模式

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top