尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

S2-LP驱动外部PA:从14dBm到27dBm的射频设计实战

S2-LP驱动外部PA:从14dBm到27dBm的射频设计实战 做无线数传项目时S2-LP这颗sub-1GHz收发器用得挺多。它的优点大家都清楚功耗低、协议栈灵活、灵敏度也不错但有一个限制很现实——内置PA的输出能力上限不高典型配置下也就14dBm上下。LAT1385这份应用笔记讲的就是一个容易被忽略但又很实际的问题怎么用S2-LP去驱动一颗外部PA把发射功率从十几dBm抬到27dBm甚至更高同时保证频谱不发散、PA不被烧、掉线率不升高。这篇内容适合正在用S2-LP做长距离无线传感、表计、数据回传的工程师也适合准备做Sub-1GHz射频放大方案的朋友。我会从软硬件两条线拆解把TXRAMP、GPIO控制、匹配、频谱实测这些环节一次性说清楚。为什么这事值得专门写一篇因为直接把S2-LP的射频输出接到外置PA上功能上确实能出声但一上频谱仪就会看到各种问题开PA瞬间带外杂散超标、发射包络带毛刺、PA热得烫手甚至连续发几包就烧掉。问题不在PA本身而在S2-LP和PA之间的“驱动关系”没处理好。所谓驱动既包含射频信号幅度的驱动也包含PA使能、供电、斜坡时序的驱动。LAT1385把这两层都讲到了下面我按自己的实践过程展开。1. 为什么S2-LP需要外置PA发射链路瓶颈与方案权衡1.1 S2-LP内置PA的真实水平与应用上限S2-LP是一颗超低功耗Sub-1GHz收发器覆盖433/868/915MHz等主流ISM频段调制方式支持2-FSK、GFSK、4-FSK和OOK数据速率最高可以到500kbps。单看接收灵敏度和功耗这颗芯片在免执照频段里属于很能打的类型。但它的发射链路由内部集成的PA完成输出功率范围大约在-30dBm到14dBm之间通过寄存器里的PA_LVL_TX字段调整。这个14dBm上限意味着什么呢在开阔环境下如果天线增益按0dBi算接收灵敏度按-118dBm算用868MHz载波做1km传输路径损耗大概91dB链路余量也就40dB左右。看起来好像够用但一旦遇到穿墙、树叶遮挡、雨衰或者接收端灵敏度没有标称那么理想余量会迅速缩水。特别是做抄表、农田传感、路灯控制这类项目节点数量多、安装位置固定不可能靠提高接收灵敏度解决问题只能从发射端想办法。还有一种情况是OOK调制穿墙类应用外部PA带来的功率提升对穿透能力的影响非常直接。很多团队一开始用14dBm测试觉得还行等现场规模化部署碰到地下室、金属表箱、密封井盖才发现功率根本不够。这时候再改方案成本远高于一开始就规划好外部PA。1.2 外置PA的收益与成本外置PA的收益很直接发射功率可以做到27dBm、30dBm甚至更高。功率每提升6dB链路预算就多出6dB对应到开阔环境下的通信距离可以翻倍。比如14dBm提升到26dBm增益12dB链路余量多了12dB实际覆盖能力能够明显改善。但成本不能只看BOM。外置PA会带来四个绕不开的问题功耗上升。PA本身耗电随功率线性增长27dBm级别功放的供电电流动辄几百毫安如果用电池供电发射电流的设计逻辑全部要重做。谐波和杂散会跟着放大。S2-LP输出信号本身就有谐波分量内置PA模式下手册给出的谐波指标是经过内部匹配后测出来的外置PA把基波放大18-20dB的同时二次谐波、三次谐波同样会被放大必须额外加滤波。发射链路时序变复杂。外置PA不是接上线就能用它需要使能信号、供电开关、射频驱动三者按顺序配合这也是LAT1385里花大篇幅讲TXRAMP的原因。成本增加。PA芯片、匹配电感、滤波电容、可能还有射频开关对成本敏感的量产项目来说几十美分的差异都要算。所以在立项阶段就要先判断到底需不需要外置PA如果项目对电流极其敏感通信距离在几百米以内内置PA完全够用。如果目标覆盖是1-2公里甚至更远或者有穿墙需求那就老老实实上外部PA别等到现场测试翻车再补救。2. 硬件设计S2-LP如何驱动外部PA2.1 引脚分配与典型连接S2-LP驱动外部PA的硬件连接核心是把三样东西处理好射频信号通路、PA使能控制、供电开关。先看信号通路。S2-LP的RF输出脚为单端输出典型输出阻抗接近50Ω。外部PA模块的输入端一般也是按50Ω设计所以两者之间不需要复杂的匹配一个隔直电容加短走线就能连接。但注意如果S2-LP的输出电容和PA输入端的匹配网络没有处理干净会在某个频点上出现谐振导致驱动幅度不足。再看控制通路。S2-LP提供了多个GPIO引脚这些GPIO可以通过寄存器配置成不同的复用功能其中就包括TXRAMP信号输出。TXRAMP是S2-LP在发射阶段内部产生的一个斜坡信号反映发射包络的建立过程。把它配置到GPIO上再送给外部PA的使能端就能实现PA和S2-LP发射链路的同步开关。典型连接方式是这样的S2-LP的RF_OUT经过隔直电容接到外部PA的RF_IN。S2-LP的一个GPIO比如GPIO0配置为TXRAMP输出连接到PA_EN引脚。S2-LP的另一个GPIO比如GPIO1接到PA供电通路上的MOSFET栅极控制PA电源的通断。S2-LP的SDN引脚保持高电平逻辑由于S2-LP本身是低电平有效关机这里要确保正常工作时SDN为低。从外部PA的角度看它需要的是“射频驱动到位之后才允许导通”的控制逻辑。TXRAMP信号恰恰表达了射频驱动幅度的变化过程用TXRAMP去控制PA_EN本质上就是让PA在S2-LP射频输出已经稳定到足够幅度时才打开避免PA在射频信号还没建立时就导通导致开关瞬态和频谱毛刺。2.2 TXRAMP时序是成败关键我在调试中最深的感受是LAT1385全文的逻辑都是围绕时序展开的。S2-LP在发射状态下PLL锁定之后内部PA的驱动电压是逐步升高的这个过程就是TXRAMP。如果直接在S2-LP发射前把外部PA的使能拉高PA会在射频输入幅度很小甚至为零时进入放大状态这会产生一个巨大的波形毛刺。这个毛刺在时域上表现为一个窄脉冲频域上则表现为很宽的带外杂散直接冲击频谱模板。反过来如果PA使能得太晚S2-LP的前几个bit可能已经被发射出去这段数据因为没经过PA放大功率极低接收端解调时很容易因为同步头能量偏低导致丢包。尤其是GFSK调制本身对信号幅度不敏感但接收端AGC会按照前导码的能量设置增益前导码缺了一段AGC收敛就可能出错。所以正确的时序是S2-LP先开始TX ramp射频输出幅度逐渐抬高当幅度抬到接近目标电平时TXRAMP信号输出有效电平打开PAPA开启后继续完成剩余的前导码和有效载荷发送。S2-LP的TXRAMP时间可以通过寄存器配置一般可配置为16us、32us、64us、128us等档位。外置PA场景下我习惯把TXRAMP时间适当加长用64us或128us给PA留出足够的开启响应时间。PA芯片从EN拉高到工作电流稳定通常需要几us到十几usTXRAMP设置太短会导致PA开启时射频已经进入发射中段时序就对不上。在原理图设计阶段建议把TXRAMP的GPIO、PA_EN的GPIO都引到测试点方便抓波形确认时序。实际调试时用双通道示波器同时观察TXRAMP和PA_EN的上升沿就能直观看到PA开启相对发射包络的位置。这个环节值得花时间因为大部分“外置PA后频谱变差”的问题最后都能追溯到时序对不上。2.3 匹配网络设计S2-LP输出到外部PA输入之间的匹配理论上只要保证50Ω阻抗变换即可但工程上往往没有这么简单。外部PA的输入阻抗在数据手册上标注的是一组典型值实际会随频率、温度、供电电压略微变化。如果S2-LP和PA之间的距离很近比如在同一块PCB上相距不到10mm那么只要中间加一个串联电容做隔直配合并联电感做直流偏置通常能达到可以接受的驻波比。如果S2-LP和PA模块之间有一段射频线或者天线和PA之间走线较长就要注意特征阻抗控制。Sub-1GHz频段对走线宽度的要求没有2.4GHz那么苛刻但能做阻抗控制就不要偷懒。FR4板材上1.6mm板厚、1oz铜厚情况下50Ω微带线宽度大约在2.8-3mm具体值用厂商提供的阻抗计算工具确认一下更稳妥。PA输出到天线的匹配滤波则是另一个重点。外置PA基波放大后二次、三次谐波的绝对功率也变大了这些谐波如果不滤除传导杂散和辐射杂散都可能超标。我的做法是在PA输出后加一个低通滤波器通常用三阶或五阶LC低通截止频率选在工作频段的1.1-1.2倍左右。比如868MHz系统低通截止频率放在900-950MHz比较合适既能保证基波低损耗通过又能对二次谐波约1.7GHz形成足够抑制。这部分LAT1385也提到过实际验证下来五阶比三阶效果好很多当然损耗也会略大。3. 软件驱动寄存器配置与代码实现3.1 初始化流程与关键寄存器硬件连接正确的前提下软件要解决的就是让S2-LP在合适的时机输出TXRAMP信号并正确配置GPIO复用功能。整个初始化流程按顺序分四步复位S2-LP等待芯片进入就绪状态。配置射频参数载波频率、调制方式、数据速率、发射功率级别。配置GPIO复用功能把TXRAMP分配给指定GPIO。配置TXRAMP时间参数。其中发射功率级别这个点要特别说明。内置PA模式下我们会把PA_LVL_TX设置成较高的输出功率但驱动外部PA时S2-LP的射频输出是作为PA的激励源并不需要S2-LP自己全力输出。一般来说把S2-LP输出设置在0dBm到7dBm之间作为PA驱动就够用了。为什么要降下来因为外置PA通常在输入信号达到一定幅度后就会进入饱和输出区再提高激励功率只会增加S2-LP自身功耗和杂散对PA输出的增益已经没有帮助。具体驱动电平要看PA的增益参数比如一颗增益20dB的PA想得到27dBm输出理论上S2-LP只要给7dBm就够。实际可以把S2-LP输出设在0-10dBm范围里对比测试找输出频谱最干净、杂散最小的那个点。GPIO复用配置方面S2-LP每个GPIO都有一个配置寄存器字段里可以选普通GPIO输入输出、TXRAMP输出、POR、LPO等。把GPIO0配成TXRAMPGPIO1配成普通GPIO输出用于控制PA供电MOSFET这样一个GPIO管时序另一个管电源分工清晰。TXRAMP时间的配置在外置PA场景下我建议先用较大值比如在868MHz、GFSK调制的项目里用64us到128us然后通过示波器抓TXRAMP和实际发射包络来微调。时间太短PA响应不过来太长发射前导码浪费能量也拉低了实际吞吐率。3.2 发射控制代码骨架下面给出一个C语言风格的伪代码骨架重点关注S2-LP发射外部PA的时序控制逻辑。命令码以S2-LP官方数据手册为准这里只体现流程。#define CMD_STX 0x60 /* 发送命令 */ #define CMD_SRES 0x01 /* 软件复位 */ #define CMD_SABORT 0x0F /* 中止当前操作 */ #define REG_PA_LEVEL 0x0A /* 示例寄存器实际以手册为准 */ #define REG_TXRAMP_TIME 0x0B /* 示例寄存器实际以手册为准 */ #define REG_GPIO0_CONF 0x0C /* 示例寄存器实际以手册为准 */ #define PA_LEVEL_DRIVER 0x08 /* S2-LP输出约几dBm按实际调整 */ #define TX_RAMP_64US 0x02 /* 64us ramp按实际调整 */ #define GPIO0_TXRAMP 0x10 /* GPIO0复用为TXRAMP */ static void S2LP_WriteReg(uint8_t reg, uint8_t val) { CS_LOW(); SPI_Transfer(reg | 0x80); /* 写寄存器命令 */ SPI_Transfer(val); CS_HIGH(); } static void S2LP_Cmd(uint8_t cmd) { CS_LOW(); SPI_Transfer(cmd); CS_HIGH(); /* 等待芯片处理完成按实际写DELAY或查询状态 */ } void RF_PA_Enable(int on) { GPIO_WriteBit(PA_POWER_GPIO, on ? 1 : 0); } void S2LP_Init_With_External_PA(void) { S2LP_WriteReg(REG_PA_LEVEL, PA_LEVEL_DRIVER); S2LP_WriteReg(REG_TXRAMP_TIME, TX_RAMP_64US); S2LP_WriteReg(REG_GPIO0_CONF, GPIO0_TXRAMP); RF_PA_Enable(0); } void S2LP_Transmit_Packet(uint8_t *buf, uint16_t len) { /* 先关闭PA供电确保PA不处于意外开启状态 */ RF_PA_Enable(0); /* 写入发送缓冲区 */ S2LP_WriteFIFO(buf, len); /* 启动发射TXRAMP信号会从GPIO0输出自动控制PA_EN */ S2LP_Cmd(CMD_STX); /* 等待发射完成中断或查询TX状态 */ while (!S2LP_TX_Done()) { /* 等待 */ } /* 发射结束后PA_EN由TXRAMP拉低但为了保险再关一次PA电源 */ RF_PA_Enable(0); S2LP_Cmd(CMD_SABORT); }这套代码的要点是PA_EN的控制不是靠普通GPIO手动翻转而是靠TXRAMP自动完成。代码里的RF_PA_Enable(0)只是在上电复位阶段和发射结束后做保险真正控制PA开启时序的是S2-LP内部的TXRAMP逻辑这样PA的开启时间点就和射频包络严格同步不会出现手动控制来不及的情况。3.3 接收和发射自动切换S2-LP是半双工收发器接收和发射共用天线。加上外部PA之后接收链路不能经过PA放大因为PA是单向放大链路信号从天线反向灌入PA轻则导致接收灵敏度下降重则烧毁PA输出级。所以必须在天线端做射频开关或者用PA模块自带的收发切换功能。如果PA模块本身集成收发切换那就只需把S2-LP的RX/TX状态同步给PA。这里可以继续用GPIO复用功能把另一个GPIO配置成RX/TX指示或者直接在代码里在STX和SRX命令前后翻转GPIO控制射频开关切向对应通路。实际项目中我习惯用S2-LP的GPIO配置成“TX状态指示”功能这样S2-LP进入发射状态后GPIO自动为高射频开关切到PA通路进入接收状态后自动拉低切到LNA或直通模式软件上就不用额外维护状态也省了时序误差。不过这里有个容易踩的坑S2-LP的GPIO输出状态变化和射频开关切换时间是否匹配。射频开关的切换时间一般只有几十到几百ns而S2-LP的GPIO状态变化与内部状态机之间可能有微秒级延迟。在低速系统里这个延迟无所谓但在高数据速率下前导码的开头可能被射频开关的切换毛刺污染。稳妥做法是在进入接收或发射状态前先做一次GPIO预切换等一个短延时后再发STX/SRX命令。4. 实测数据与链路预算4.1 频谱实测对比把外置PA接好软件配置按上面的流程跑通之后第一件事就是上频谱仪。我记得第一次搭好电路时满怀期待地按下发射频谱仪上确实看到了27dBm的载波但旁边的带外杂散也相当“壮观”。后来把问题定位到PA使能过早TXRAMP的上升沿还没到阈值PA就已经被手动GPIO拉高导通了。改成TXRAMP控制PA_EN之后杂散瞬间干净了很多。下表是我在一个868MHz项目里实测的对比数据采用同一个S2-LP平台天线端用同样的低通滤波测试项内置PA直连S2-LP驱动外部PA发射功率dBm14.226.8发射电流mA28210二次谐波dBc-52-61邻近信道功率25kHz偏移良好良好开启瞬间毛刺无无明显毛刺二次谐波在外PA之后加了五阶LPF实测比直连模式还要好。这说明只要时序正确、滤波到位外置PA方案完全可以做得比内置PA更“干净”。之前担心的谐波放大问题在合理滤波设计下并不是什么不可逾越的障碍。4.2 链路预算计算实测功率提升之外链路预算才能说明实际通信距离的提升。以868MHz为例自由空间路径损耗公式L 32.44 20·log10(f_MHz) 20·log10(d_km)868MHz1kmL 32.44 58.77 0 91.21dB868MHz2kmL 32.44 58.77 6.02 97.23dB868MHz4kmL 32.44 58.77 12.04 103.25dB假设接收灵敏度-118dBm、发射功率14dBm时2km链路余量大约为14 118 - 97.23 34.77dB。改成外置PA输出26.8dBm后同样2km的链路余量变成了26.8 118 - 97.23 47.57dB多了近13dB。这个余量在实际环境中可以用来抵消穿墙损耗、多径衰落和天线方向性误差通信稳定性提升非常明显。但注意实际环境不是自由空间树木、地面反射、车辆移动都会带来额外的衰落。链路预算只是估算基准真实覆盖还是要靠在场强仪和实际拉距测试中验证。不过从趋势上看外部PA对覆盖距离的改善是系统性的不只是“响了一点”。4.3 功耗表现与供电设计外置PA对供电是个不小的考验。实测一个27dBm级别PA的发射电流在200mA上下如果供电是3.3V LDO直接供PA在发射瞬间的压降会很大可能导致PA输出功率跌落甚至触发S2-LP的欠压复位。设计建议是PA供电单独走一路不要和S2-LP的数字电源混用。可以在PA供电输入端加一个大容量电容100uF钽电容或者220uF电解电容具体看发射时长和间隔。发射瞬间的电流尖峰要靠这个电容先顶住然后由电池或DC-DC再补充。PCB上PA电源走线要加宽避免寄生电阻造成电压跌落。顺便说一句如果用的是支持PA/TX电源开关的电路发射前才给PA供电待机时彻底断掉能省不少电。这也是PA_POWER_GPIO存在的意义——在非发射状态PA供电是断开的待机电流可以回到S2-LP本身的uA级别。5. 常见问题与排查技巧5.1 打开PA后芯片过热甚至烧毁这是新手最容易遇到的情况。PA发烫、电流异常大很快就挂了。排查思路很简单先看PA使能是否在非发射状态被误拉高。很多人用普通GPIO直接控制PA的EN引脚GPIO初始化电平没有设置好默认输出高电平PA一开始就处于导通状态相当于拿着一颗放大器空载跑不烧才怪。解决方法是PA使能控制pin在MCU初始化时先输出低再初始化S2-LP确保PA最终由TXRAMP控制。另外检查S2-LP的SDN引脚和复位时序如果S2-LP复位期间GPIO状态不确定也容易把PA误开启。稳妥的做法是在PA电源通路串一个MOSFET用S2-LP的GPIO去控制MOSFET栅极这样即使PA_EN因为某种原因保持高电平只要供电被切断PA也起不来。5.2 频谱出现大毛刺或带外杂散场景很典型用外置PA后频谱仪上载波旁边出现一堆“草”尤其是在发射起始位置。这个几乎可以肯定是PA使能时序和发射包络没有对齐。PA开启太快射频输入还没稳定产生开关瞬态PA开启太慢发射开头一小段没被放大接收端AGC和同步出现问题。排查用双通道示波器同时抓TXRAMP和PA_EN对照波形看两者时间关系。如果PA_EN上升沿发生在TXRAMP上升沿之前说明PA开得太早需要调整TXRAMP配置或改由TXRAMP控制PA_EN。如果PA_EN上升沿明显晚于TXRAMP要把TXRAMP时间加宽或者在TXRAMP有效后再加一个小延时再开PA。另一个容易被忽略的点S2-LP的TXRAMP信号负载能力有限如果PA_EN输入阻抗太低或者走线过长TXRAMP边沿会变缓导致PA开启过程变得模糊。这种情况下可以在TXRAMP输出和PA_EN之间加一级三极管或缓冲器把驱动能力提上来。5.3 谐波超标过不了认证外置PA放大后二次、三次谐波幅度可能从-50dBc恶化到-30甚至-20dBc。传导杂散测试时天线端会量到很大的谐波直接超标。解决方法是加低通滤波器。我的经验是放在PA输出端、天线之前用三阶LC低通在高频段会有一定的衰减五阶低通更可靠。滤波器截止频率不要选得太靠近基波否则基波插损变大也不要太高否则谐波抑制不够。868MHz系统我一般用850-900MHz截止频率插损可以控制在0.5dB以内二次谐波抑制能达到40dB以上。调试时注意滤波器元件寄生参数。贴片电感在1.7GHz附近的寄生电容会导致自谐振高Q值电感要用绕线或薄膜工艺的不要随手拿一颗普通叠层电感凑合。用网分测一下S21确认滤波器的实际频率响应比凭感觉调靠谱得多。5.4 待机电流异常外置PA方案待机电流变大的原因通常很简单PA电源没有真正切断。如果PA的EN由GPIO控制而非发射状态GPIO依然输出低电平但PA的电源直连电池或LDO有些PA芯片内部电路即使EN为低依然会从电源吸取一定电流。或者是PA输出端和天线之间没有隔直电容天线上的直流偏置通过PA内部电感形成通路导致漏电。排查方法万用表测PA供电支路电流在S2-LP进入Sleep模式后看电流是否与PA单独断开时一致。不一致就说明PA供电链路有漏电路径。量产设计最好在PA电源入口加一个负载开关软件在S2-LP进入Sleep前把PA电源彻底关断。5.5 发射前导码丢包发射链路在外置PA下丢包率明显升高尤其前导码丢失。这种情况多半是PA开启太慢导致前导码后半部分才开始放大接收端的同步和前导码检测无法完成。结合TXRAMP时间把PA开启点前移或者增大TXRAMP时间让PA在射频包络建立早期就完成开启。另外检查一下射频开关切换时序如果收发切换发生在发射过程刚开始时开关动作的毛刺同样会吃掉前导码。6. 项目中的整体体会与后续扩展方向S2-LP驱动外部PA代码量不大坑全在硬件时序和射频细节里。我个人的体会是先不要急着写驱动寄存器花一天时间把TXRAMP、PA_EN、射频开关这几条控制线上在示波器上摸清楚后面调频谱会顺畅很多。还有很多项目不会只用固定发射功率而是需要多档功率切换。可以在代码里预留PA_LEVEL_TX参数通过软指令切换内置PA直连和外置PA两种模式这样近距离用低功耗直连远距离或紧急数据用高功率外置PA兼顾功耗和覆盖。如果再接一颗LNA还可以把接收灵敏度再往上涨一截整条链路预算就更充裕了。最后再分享一个调试小技巧外置PA方案第一次上电时别急着把天线上上去先用50欧负载替代天线在PA输出端加个20dB衰减器再接频谱仪这样既能保护频谱仪也方便排查PA自激问题。PA自激的一个典型征兆是即使S2-LP没在发射PA输出端也有宽谱噪声这时候先查输出匹配和电源滤波自激很多时候是电源退耦不够引起的。
返回列表