基于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
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号