概述
一、前言
zigbee无线传输技术在物联网领域广泛应用,以其强大的组网能力,网络自愈能力,给物联网的控制带来比较好的鲁棒性。由于zigbee采用2.4G的频率,导致其传输距离受限,穿墙能力较弱,虽然zigbee的路由功能可以绕过障碍物,但治标不治本,假如路由节点被障碍物隔离了,通讯链路就会断开,加之公司的产品是金属框架,zigbee节点之间的通讯有时候不稳定,所以增强其穿墙能力很有必要。本文采用的是rfx2401+cc2530的PA信号增强方案,以“ZStack-CC2530-2.5.1a”协议栈为基础。
二、PA的简介
1.PA是什么--简介
PA是Power Amplifier的简称,中文名称为功率放大器,简称“功放”,指在给定失真率条件下,能产生最大功率输出以驱动某一负载的放大器。利用三极管的电流控制作用或场效应管的电压控制作用将电源的功率转换为按照输入信号变化的电流。例如扬声器,功率放大器在整个音响系统中起到了“组织、协调”的枢纽作用,在某种程度上主宰着整个系统能否提供良好的音质输出。
2.PA是什么--构成
功率放大器通常由3部分组成:前置放大器、驱动放大器、末级功率放大器。
前置放大器---起匹配作用,其输入阻抗高,输出阻抗低。同时,它本身又是一种电流放大器,输入的电压信号转化成电流信号,并给予适当的放大。
驱动放大器---起桥梁作用,它可以将前置放大器送来的电流信号作进一步放大。如果没有驱动放大器,末级功率放大器不可能送出大功率的声音信号。
末级功率放大器---起关键作用。它驱动放大器送来的电流信号形成大功率信号,带动扬声器发声,它的技术指标决定了整个功率放大器的技术指标。
3.PA是什么--原理
PA是利用三极管的电流控制作用或场效应管的电压控制作用电源的功率转换为按照输入信号变化的电流。由于声音是不同振幅和不同频率的波,三极管的集电极电流永远是基极电流的β倍,应用这一点,若小信号注入基极,则集电极流过的电流会等于基极电流的β倍,然后这个信号用隔直电容隔离出来,就得到了电流(或电压)是原先的β倍的大信号,这现象成为三极管的放大作用。经过不断的电流放大,就完成了功率放大。
4.PA是什么--分类
从1980年代早期,许多研究者致力于开发不同类型的数字放大器,这种放大器直接从数字语音数据实现功率放大而不需要进行模拟转换,这样的放大器通常称作数字功率放大器或者D类放大器。利用模拟功率放大器进行模拟信号放大,如A类、B类和AB类放大器。
A类放大器----放大器的工作点Q设定在负载线的中点附近,晶体管在输入信号的整个周期内均导通。
B类放大器----放大器的静态点在(VCC,0)处,当没有信号输入时,输出端几乎不消耗功率。
AB类放大器----晶体管的导通时间稍大于半周期,必须用两管推挽工作。可以避免交越失真。
D类放大器----是一种输入模拟音频信号或PCM数字信息变换成PWM(或PDM的脉冲信号,然后用PWM或PDM的脉冲信号去控制大功率开关器件通/断音频功率放大器。具有效率高的突出优点。
5.PA是什么--应用
众所周知,功率放大器是射频电路众多模块中功率损耗最大的,作为系统的核心和前端部分,它的效率直接影响系统效率,因此效率问题成为现代功率放大器的研究热点。
无论在全球移动通信系统、第三代移动通信系统、无线局域网等民用领域,还是在雷达、电子战、导航等军用领域,射频功率放大器作为这些系统中的前端器件,对其低耗、高效、体积小的要求迅速增加。
6.PA和LNA的区别
低噪声放大器(Low Noise Amplifier) -------------LNA
功率放大器(Power Amplifier)---------------------PA
LNA是低噪声放大器,主要用于接收电路设计中。因为接收电路中的信噪比通常是很低的,往往信号远小于噪声,通过放大器的时候,信号和噪声一起被放大的话非常不利于后续处理,这就要求放大器能够抑制噪声。PA(功放)主要功能是功率放大,以满足系统要求,最重要的指标就是输出功率大小,其次线性如何等等,一般用在发射机的最后一级。
LNA用在接收机由于对噪声要求很严格,所以其bias较低,这样就能实现很小的NF和很高的效率,但同时会导致线性区增益较低,最大输入功率不是很高(也可以说1dB压缩点吧)。PA主要是考虑高的线性区和高增益,其bias很高,这样也会造成PA效率降低。
所以呢,你会看到,LNA在放大信号的时候基本上电流很小,一方面是因为信号小,另一方面就是其效率高bias低。要知道,电流大的话NF会变差。PA的话,动不动30dB左右的gain,接近30dBm的max ouput power,可是线性度还是很好,用个bias很高的A类放大器,效率在30%左右,电流很大,不过它不管NF,反正Tx信号很强,来点noise的话根本影响不到信噪比。
三、PA功能在zigbee协议栈的移植方法
(1)添加PA宏定义
hal_broad_cfg.h中#define xHAL_PA_LNA 改为HAL_PA_LNA。
(2)修改PA驱动的引脚(我的板子上P1_0对应PA_EN,P1_1对应CE)
原理图如下:
MAC_INTERNAL_API void macRadioTurnOnPower(void)
{
/* Enable RF error trap */
MAC_MCU_RFERR_ENABLE_INTERRUPT();
//#if defined MAC_RUNTIME_CC2591 || defined MAC_RUNTIME_CC2590 ||
// defined MAC_RUNTIME_SE2431L || defined MAC_RUNTIME_CC2592
// /* table ID is referenced only when runtime configuration is enabled */
// if (macRadioDefsRefTableId & 0xf0)
//#endif /* defined MAC_RUNTIME_CC2591 || defined MAC_RUNTIME_CC2590 */
//
//#if defined MAC_RUNTIME_CC2591 || defined MAC_RUNTIME_CC2590 ||
// defined MAC_RUNTIME_SE2431L || defined MAC_RUNTIME_CC2592 ||
// defined HAL_PA_LNA || defined HAL_PA_LNA_CC2590 ||
// defined HAL_PA_LNA_SE2431L || defined HAL_PA_LNA_CC2592
// { /* either if compound statement or non-conditional compound statement */
//
// /* (Re-)Configure PA and LNA control signals to RF frontend chips.
// * Note that The register values are not retained during sleep.
// */
//
// if (paLnaChip == PA_LNA_SE2431L)
// {
// /* CPS or P0_7 maps closely to the HGM line */
// HAL_PA_LNA_RX_HGM();
//
// /* EN or CSD line is controlled via software so setting it high here to start the SE2431L frontend */
// HAL_PA_LNA_RX_CSD_HIGH();
//
// /* CTX or P1_1 maps closely to PAEN */
// RFC_OBS_CTRL0 = RFC_OBS_CTRL_PA_PD_INV;
// OBSSEL1 = OBSSEL_OBS_CTRL0;
// }
// else if(paLnaChip == PA_LNA_CC2592)
// {
// /* P1_1 -> PAEN */
// RFC_OBS_CTRL0 = RFC_OBS_CTRL_PA_PD_INV;
// OBSSEL1 = OBSSEL_OBS_CTRL0;
//
// /* P1_0 -> EN (LNA control) */
// RFC_OBS_CTRL1 = RFC_OBS_CTRL_LNAMIX_PD_INV;
// OBSSEL0 = OBSSEL_OBS_CTRL1;
// }
// else
// {
// /* P1_1 -> PAEN */
// RFC_OBS_CTRL0 = RFC_OBS_CTRL_PA_PD_INV;
// OBSSEL1 = OBSSEL_OBS_CTRL0;
//
// /* P1_4 -> EN (LNA control) */
// RFC_OBS_CTRL1 = RFC_OBS_CTRL_LNAMIX_PD_INV;
// OBSSEL4 = OBSSEL_OBS_CTRL1;
// }
//
//
// /* For any RX, change CCA settings for CC2591 compression workaround.
// * This will override LNA control if CC2591_COMPRESSION_WORKAROUND
// * flag is defined.
// */
// }
//#endif /* defined MAC_RUNTIME_CC2591 || ... || defined HAL_PA_LNA_SE2431L... */
/* P1_0 -> PAEN */
RFC_OBS_CTRL0 = RFC_OBS_CTRL_PA_PD_INV;
OBSSEL0 = OBSSEL_OBS_CTRL0;
P1SEL &=~0x01;
P1DIR |=0x01;
P1_0=0;
/* P1_1 -> EN (LNA control) */
RFC_OBS_CTRL1 = RFC_OBS_CTRL_LNAMIX_PD_INV;
OBSSEL1 = OBSSEL_OBS_CTRL1;
P1SEL &=~0x02;
P1DIR |=0x02;
P1_1=0;
if (macChipVersion <= REV_B)
{
/* radio initializations for disappearing RAM; PG1.0 and before only */
MAC_RADIO_SET_PAN_ID(macPib.panId);
MAC_RADIO_SET_SHORT_ADDR(macPib.shortAddress);
MAC_RADIO_SET_IEEE_ADDR(macPib.extendedAddress.addr.extAddr);
}
/* Turn on frame filtering */
MAC_RADIO_TURN_ON_RX_FRAME_FILTERING();
}
OBSSEL0-OBSSEL4的五个这样控制,分别对应P1.0到P1.4的管脚,OBSSEL_OBS_CTRL0和OBSSEL_OBS_CTRL1给它们赋的值代表的是置0或置1
(3)设置PA的功率
修改mac_pib.c文件,修改PA的功率phyTransmitPower为0xF5
修改mac_radio.c文件的macRadioUpdateTxPower函数,增加一行 reqTxPower=0xF5;
MAC_INTERNAL_API void macRadioUpdateTxPower(void)
{
halIntState_t s;
HAL_ENTER_CRITICAL_SECTION(s);
if (reqTxPower != macPhyTxPower)
{
if (!macRxOutgoingAckFlag && !MAC_TX_IS_PHYSICALLY_ACTIVE())
{
reqTxPower=0xF5; //long add --20170425
macPhyTxPower = reqTxPower;
MAC_RADIO_SET_TX_POWER(macPhyTxPower);
}
}
HAL_EXIT_CRITICAL_SECTION(s);
}
功率的设置参数可以参考“mac_radio_defs.c”文件里的 macRadioDefsTxPwrBare数组
const uint8 CODE macRadioDefsTxPwrBare[] =
{
3, /* tramsmit power level of the first entry */
(uint8)(int8)-22, /* transmit power level of the last entry */
/* 3 dBm */ 0xF5, /* characterized as 4.5 dBm in datasheet */
/* 2 dBm */ 0xE5, /* characterized as 2.5 dBm in datasheet */
/* 1 dBm */ 0xD5, /* characterized as 1 dBm in datasheet */
/* 0 dBm */ 0xD5, /* characterized as 1 dBm in datasheet */
/* -1 dBm */ 0xC5, /* characterized as -0.5 dBm in datasheet */
/* -2 dBm */ 0xB5, /* characterized as -1.5 dBm in datasheet */
/* -3 dBm */ 0xA5, /* characterized as -3 dBm in datasheet */
/* -4 dBm */ 0x95, /* characterized as -4 dBm in datasheet */
/* -5 dBm */ 0x95,
/* -6 dBm */ 0x85, /* characterized as -6 dBm in datasheet */
/* -7 dBm */ 0x85,
/* -8 dBm */ 0x75, /* characterized as -8 dBm in datasheet */
/* -9 dBm */ 0x75,
/* -10 dBm */ 0x65, /* characterized as -10 dBm in datasheet */
/* -11 dBm */ 0x65,
/* -12 dBm */ 0x55, /* characterized as -12 dBm in datasheet */
/* -13 dBm */ 0x55,
/* -14 dBm */ 0x45, /* characterized as -14 dBm in datasheet */
/* -15 dBm */ 0x45,
/* -16 dBm */ 0x35, /* characterized as -16 dBm in datasheet */
/* -17 dBm */ 0x35,
/* -18 dBm */ 0x25, /* characterized as -18 dBm in datasheet */
/* -19 dBm */ 0x25,
/* -20 dBm */ 0x15, /* characterized as -20 dBm in datasheet */
/* -21 dBm */ 0x15,
/* -22 dBm */ 0x05 /* characterized as -22 dBm in datasheet */
};
四、加了PA信号到底增强多少呢
用Packet Sniffer抓取zigbee通讯数据包,由于数据包后面能看到信号强度,我们可以对比一下信号增强的幅度,下面贴上两张图,
第一张是不加PA的图,
第二张是带PA的图。
可以发现,增加PA后,在同样的距离测信号强度,加了PA比不加PA的信号强度要大24DB,在远一点的距离会进一步拉大这个差距。
参考资料:
1.http://blog.csdn.net/wenwen091100304/article/details/39404523
2.http://blog.csdn.net/u011534701/article/details/50327039
3.http://blog.csdn.net/tpfgfxz/article/details/27511195
4.http://www.eepw.com.cn/article/273474.htm
5.
最后
以上就是现实洋葱为你收集整理的zigbee加PA信号增强方案:rfx2401+cc2530一、前言二、PA的简介三、PA功能在zigbee协议栈的移植方法的全部内容,希望文章能够帮你解决zigbee加PA信号增强方案:rfx2401+cc2530一、前言二、PA的简介三、PA功能在zigbee协议栈的移植方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复