短距离ISM频段无线数据传输的应用设计
扫描二维码
随时随地手机看文章
引言
近些年来,随着集成电路技术的发展,ISM频段单芯片的无线数据通信IC的性能日益提高,短距离无线应用领域也在不断的扩大,其中包括家用电器,消费电子产品,工业控制,安防,自动抄表,汽车遥控控制等诸多领域。
本文介绍一种基于ATMEL公司的单芯片多频点,工作于ISM频段的收发芯片 ATA5428在无线数据传输中的应用。
ATA5428是ATMEL公司新推出的一款包含了射频功能和逻辑控制功能的集成电路。可以工作于431.5MHz~436.5MHz。ATA5428具有低功耗和高集成度,传输的距离远,接收的灵敏度高等优点,其内部集成压控振荡器、锁相环电路、功率放大电路、解调电路、变频器、中放电路等。由于高度的集成化使复杂无线电路大大简化,以往较难处理的射频部分,被简化到只需在IC外围加上几个免调试的分立元件。
ATA5428内部含有自动定时接收唤醒数字逻辑控制电路,可以设定唤醒的周期,选择这个功能后仅仅增加一些收发延迟,但会成倍的降低接收功耗。
ATA5428内部含有7个控制寄存器,可以非常简单的对频率、收发速率、调制方式进行设置。 ATA5428内部还包含一个16字节先进先出RAM缓冲器,利用这个功能减少对MCU的依赖,使MCU有更多的时间处理其它的事务。所以,MCU既使运行在比较低的频率,在收发双方不小于100ms响应下,依然能够正常工作。
系统电路设计
本系统使用了AVR系列单片机ATmega88。ATA5428与ATmega88通讯采用SPI接口,与外部通信采用UART接口。由于高度集成化ATA5428外围零件已经很少,所以设计的关键是RF前端的匹配电路的设计。一般的RF芯片发射与接收端口的阻抗并不是标准的50Ω阻抗,而是在不同频率下都可以等效为一个实部加一个虚部 ,例如ATA5428在433.92MHz的频率下输入阻抗可以等效为(32-j169)Ω,要达到最佳的接收效果必须将输入阻抗通过外围器件的补偿使之与50Ω的天线匹配,
图1中L4与C1的作用是补偿输入阻抗成为50Ω,同样L2与C8的作用是用于补偿使输出阻抗为50Ω,同时L2还起到高频扼流的作用。C9,L1,C10组成一个三阶低通滤波电路,3dBm的截止频率约为500MHz左右,低通滤波电路一方面可以抑制发射的高次谐波,另一方面可以衰减输入噪音。必须注意,为了降低输入输出网络的互相影响,在ATA5428 的内部增加了一个天线开关,在发射状态时开关闭合,输入网络前的20mm×0.4mm传输线由于长度远远小于1/4波长,所以等效与一个电容接地,而在接收时,等效一个电感,这部分的设计必须注意的是分布参数影响。另外高频部分的走线尽量的短粗,元器件参数要根据线路板的实际情况作出适当的调节,以抵消分布参数的影响。
ATA5428的灵敏度已经相当理想,当有些特殊场合需较远的通信距离的应用时,如双向汽车遥控器等,可以在ATA5428的RF输入端加一级低噪声放大器LNA(见图2),以进一步提高ATA5428的接收灵敏度。放大电路的输入和输出都采用了LC匹配网络。放大器的实际增益高达近20dB,可以提高4dB到6dB的灵敏度,相当于增加30%~80%的距离。
软件设计
众所周知,一般无线数字接收机在接收有效数据之前,必须要识别数据开始的标志信息及前导码PREAMBLE和同步头SYNCWORD(见图3)。前导码是由若干01010…数据组成主要是用于恢复与同步无线接收机的时钟,同步头可以是若干特定的数据,它标志着数据的开始,ID FIELD是个可选项,用于识别接收机的地址。 数据域DATA FIELD是真正的数据区,数据的长度通常是可变的,CRC是对ID FIELD和DATA FIELD的效验,可以选择CRC16或CRC32。ATA5428推荐用Manchester 编码以区别与其他同类IC,ATA5428检测前导码采用比较每个比特的脉冲宽度,并有一个可设置比特数据的长度的范围窗口,其他同类IC则采用识别是否有01010…数据来识别前导码,ATA5428这种比较前导码的方式,显然具有明显的优点,抗干扰能力大大增强。
ATA5428有2种接收工作模式,普通模式和透明模式。我们这个应用采用的是普通模式。在普通模式下,接收的过程是当检测到前导码和同步头后,激活收发数据缓冲控制逻辑,并且把数据写入收发数据缓冲区,如图4所示。这里需注意的是ATA5428只有16字节的缓冲区。如果数据队列长度超过16个字节,那么会发生缓冲溢出,所以数据的及时读入非常重要,这样可以避免数据的溢出。ATA5428有一个显示接收数据的计数器,当计数器的值到达了某一个值后,可以通过中断的方式与MCU进行通信。
ATA5428在工作之前需要对其初始化,下面仅给出在普通接收模式下的初始化函数与发送的初始化函数。
void receive_init()
{
__disable_interrupt(); //disable all
interrupts
SETBIT(PORTD,CS_5428); //CS___/----
spi(write_ctr_reg|5); //0xa5--->ctr6
spi(write_ctr_reg|4); //0x50--->ctr5
spi(0x90); //6 bits check, lim_min:
16,4b
spi(write_ctr_reg|3); //0x80--->ctr4
spi(0x00);
//FREQ = (frf/fxto-32.5)*16384-20.5,3928
spi(write_ctr_reg|2); //0x7b--->ctr3
spi(0x7b); //vsout on, clock out on
spi(write_ctr_reg|1); //0xb0--->ctr2
spi(0xb1); //manchester modulator on
spi(write_ctr_reg|0); //0x42--->ctr1
spi(0x26); //tx mode.send 1data
every time
CLRBIT(PORTD,CS_5428);//close 5428
spi interface
SETBIT(PORTD,CS_5428);
spi(cancel_IRQ);
CLRBIT(PORTD,CS_5428);//close 5428
spi interface
send.sum_value = 0;
}
发送的过程首先是初始化,然后从SPI口送出2-3字节的01010…前导码,由于设置的是Manchester,发送几个0XFF即可,后面的格式可以参照图4的数据的传输格式。发送函数如下。
void transfer_data()
{
SETBIT(PORTD,CS_5428);//CS_5428
___/----
spi(write_TRX_buffer);//write writing
buffer command
spi(0xFF);//send 0xFF ,for bit check
spi(0xFF);//send 0xFF ,for bit check
spi(0x55); //for SYNCWORD
spi('T');//send 'T'
.
.
ID FIELD和DATA FIELD
CRC16
.
.
CLRBIT(PORTD,CS_5428);//CS_5428 ---
-____
SETBIT(PORTD,CS_5428);//CS_5428
___/----
spi(write_ctr_reg|0);//0x00 -> ctr1
spi(0x00);//go to IDLE mode
CLRBIT(PORTD,CS_5428);//CS_5428 ---
-____
}
ATA5428收到数据后,主动发出中断请求,MCU响应中断,并且调用接收函数,接收过程首先是判断同步码是否正确,然后将数据域和CRC效验接收下来,若效验通过则输出到UART口。
结语
实验表明本设计具有成本低,功耗小,通信距离远等特点,经过实际的运行测量,开阔地通信距离超过500m。特别在应用环境较为复杂,数据信号容易受到各种噪声干扰的情况下,该方案的可靠性明显优于超再生的数据传输方案。
参考文献:
1. ATA 5428 datasheet, ATMEL公司