:從射頻匹配到低功耗設計)
STM32WL5x系列估計很多做物聯(lián)網(wǎng)的老哥已經(jīng)盯了很久了。這芯片最大的特點是它把sub-GHz無線電直接塞進了MCU里而且是雙核Arm Cortex-M4M0的架構跑協(xié)議棧與跑應用各干各的互不干擾。配合LoRa、FSK、GFSK、MSK等調制方式一顆芯片就能搞定遠距離低功耗無線通信。作為一個從早期就接觸無線模塊后來被通訊距離折磨過的人看到這顆料的時候第一反應是終于不用再外掛SX126x這樣單獨的射頻芯片去堆硬件了。當然集成度越高參考手冊越厚踩坑的地方也越多。所以這篇我把手冊里比較關鍵的思路和實際調板經(jīng)驗結合起來聊聊STM32WL5x這套sub-GHz方案到底怎么落地。1. 為什么是sub-GHz從無線選頻到STM32WL5x的定位提示如果你做的是室內短距設備2.4GHz可能夠用但凡是涉及園區(qū)、農(nóng)場、煙囪表計、環(huán)境監(jiān)測這類場景sub-GHz的穿透性和繞射能力是剛性的需求。1.1 sub-GHz與2.4GHz差異的直觀對比先看一張常用對比表雖然不夠嚴謹?shù)奖闳腴T。頻段波長特點典型應用優(yōu)勢劣勢2.4GHz波長短衰減大WiFi、BLE、Zigbee頻段免授權、速率高墻厚一點就丟包同頻干擾多433/470/868/915MHz波長較長繞射強LoRa、FSK遙測、工業(yè)表計覆蓋遠、穿透好數(shù)據(jù)速率低天線尺寸偏大實際選型時我們更關心的是“鏈路預算”。同樣的發(fā)射功率sub-GHz的頻率每降低一半自由空間路徑損耗會小6dB左右。而參考手冊里STM32WL5x的發(fā)射功率最高可以配置到22 dBm接收靈敏度大概在-141 dBm這一級別超低速率下的LoRa模式。簡單算一下鏈路預算能到163dB左右這在野外幾公里的通信是有可能的。所以這顆料并不是要取代高頻短距連接而是專門為廣覆蓋、低速率、電池供電的設備設計的。1.2 STM32WL5x的雙核設計解決了什么參考手冊開篇就會講這個內部架構。Cortex-M4作為主核跑應用和網(wǎng)絡協(xié)議棧比如LoRaWANCortex-M0作為副核專門管理無線電。ST這樣設計的邏輯在于無線電的調度時隙極其嚴格尤其LoRaWAN Class B這種需要定時收發(fā)窗口的功能如果和應用邏輯混在一起很容易因為中斷優(yōu)先級、任務搶占導致收發(fā)超時。M0把射頻事務“托管”之后M4只管業(yè)務數(shù)據(jù)開發(fā)難度直接降一個臺階。這跟以前用單片機上定時器去控制SX1278模塊的狀態(tài)機完全是兩種體驗。以前我每次切換接收/發(fā)射都要算準時間還得防著被別的中斷打斷。現(xiàn)在副核自動管理狀態(tài)機主核只需要往寄存器里寫好數(shù)據(jù)包等著中斷回來就行。雙核共享一塊RAM通過硬件信號量同步避免了雙核同時寫同一區(qū)域的問題。手冊里有專門的mailbox機制說明這部分建議細讀因為數(shù)據(jù)進出射頻緩沖區(qū)必須要走“發(fā)送請求—釋放緩沖—更新統(tǒng)計”的流程不太能隨意繞過。1.3 參考手冊里藏著哪些關鍵章節(jié)STM32WL5x的參考手冊RM0461加起來一千多頁。做產(chǎn)品的建議不要從頭讀。我通常先看這三塊第一個是電源管理章節(jié)因為射頻發(fā)射瞬間電流會往上沖需要設計好穩(wěn)壓退耦第二個是“Radio”外設寄存器描述因為寫驅動的人離不開它第三個是“RF subsystem”部分的調頻與匹配指南尤其是匹配網(wǎng)絡計算。看完這三個其他的比如GPIO、DMA、SPI都是通用外設按需查表就行。2. 核心細節(jié)解析射頻前端、匹配網(wǎng)絡與天線設計這部分是很多人在原理圖階段就翻車的地方。STM32WL5x雖然把射頻收發(fā)器集成進去了但射頻前端PA、LNA的匹配網(wǎng)絡和天線還是需要自己做。手冊給出的一堆電感電容值不是隨便抄就完事必須按實際板子的疊層和PCB寄生參數(shù)調整。2.1 RF_TX/RF_RX引腳和匹配電路原理找ST官方推薦的參考設計通常RF部分只用了兩個引腳一個用于發(fā)射一個用于接收再加上一個RFIRF input引腳。發(fā)射路徑經(jīng)過一個不平衡變壓器balun把單片機的差分輸出轉成單端50歐。接收路徑則通過一個匹配網(wǎng)絡把天線端的高阻抗匹配到接收機內部低噪聲放大器的輸入。為什么必須匹配你可以把射頻功率想象成水管里流動的水。管徑突變水流就會在接頭處反射實際送進水缸的流量變小。頻率越高這種阻抗不匹配造成的反射損耗越明顯。在sub-GHz頻段微帶線或元件的寄生電容、電感對匹配影響極大所以這也是為什么抄參考設計的時候連走線的寬度和過孔位置都要盡量保持一致。2.2 板材、走線與元件選型經(jīng)驗做無線產(chǎn)品PCB的板材盡量選FR4高頻版本或者Rogers混壓至少保證介質損耗角正切不要太大。對于433MHz普通FR4勉強能跑但868MHz/915MHz時介質損耗就會開始限制靈敏度。另外RF走線必須短盡量一層走完不要跨層不要走直角過孔要打在地包圍的旁邊。參考手冊和AN5405里都專門講過這些規(guī)則。元件選型方面匹配網(wǎng)絡里的電感最好選高Q值的高頻電感例如線藝Coilcraft0402系列電容用NP0/C0G材質。普通多層陶瓷電容MLCC用在高頻諧振回路里容易發(fā)熱Q值差而且容值會隨DC偏置變化。手冊里給出的所有匹配網(wǎng)絡參數(shù)都是在規(guī)定寄生下的參考值實際量產(chǎn)后通常需要使用網(wǎng)絡分析儀或至少用頻譜儀加電橋微調。2.3 天線設計的落地要點天線是整個鏈路里又關鍵又玄學的一環(huán)。手冊雖然不會教你怎么畫天線但會給出天線的阻抗要求通常50歐。你可以用彈簧天線、PCB天線、外置膠棒天線。如果是做窄帶產(chǎn)品建議直接用SMA座外接天線調試方便。如果為了降成本做板載天線就參考ST的參考設計盡量用倒F天線IFA或螺旋天線。倒F天線這個結構在PCB上就一段走線加一個接地腳調參主要看輻射臂長度和距離地平面的距離。一個經(jīng)驗是用網(wǎng)分實測回波損耗S11在目標頻點低于-10dB基本能用不到就剪天線短一點或加長一點一點一點來。要注意天線下面不能鋪銅四周保持凈空這也直接決定輻射效率。2.4 參考手冊里的頻段配置范圍STM32WL5x可以工作在150MHz到960MHz的連續(xù)頻段。這個范圍覆蓋了全球主流的ISM頻段433MHz、470MHz國內計量較多、868MHz歐洲、915MHz北美。配置時通過Radio控制器設置中心頻率和帶寬。需要注意的是不同國家有對應的法規(guī)與發(fā)射功率限制。我在實際項目里會先查當?shù)責o線電管理機構的規(guī)定別等到樣品送檢才發(fā)現(xiàn)頻率超標那就得重新改匹配網(wǎng)絡。3. 實操過程用STM32WL5x搭建一個LoRa點對點通信工程紙上談兵不如跑一遍。下面我以一個簡單的兩個節(jié)點互聯(lián)為例說明從CubeMX到收發(fā)的基本流程。這里假設你已經(jīng)有了一塊NUCLEO-WL55JC開發(fā)板或者自己畫的板子。3.1 CubeMX配置與初始化Radio用STM32CubeMX新建工程后選擇STM32WL55JCI單片機。在“Categories”里可以找到“SubGHz_Phy”這是ST提供的Sub-GHz物理層驅動中間件。啟用它并配置如下關鍵參數(shù)Frequency470000000或者根據(jù)本地頻段設Modulation使用LoRaTX Power14 dBm調試階段先別上滿功率Bandwidth125 kHzSpread FactorSF7Coding Rate4/5設置完記得把“Radio Active Mode”設為Sleep或Standby根據(jù)功耗需求來。CubeMX會自動生成初始化代碼但是建議手動檢查一下射頻部分的GPIO默認狀態(tài)比如RF_SW的開關控制。3.2 發(fā)送端的關鍵代碼片段使用ST的SubGHz_Phy驅動發(fā)送過程一般長這樣uint8_t tx_buffer[32] hello sub-ghz; Radio.SetTxConfig(MODEM_LORA, TX_TIME_OUT, 0, 0, 0, 0, TX_POWER); Radio.Send(tx_buffer, sizeof(tx_buffer));關鍵在SetTxConfig的各個參數(shù)分別對應超時時間、包格式、數(shù)據(jù)長度、單個包的前導碼長度等。很多新手不設置超時一旦鏈路沒建立程序就卡在發(fā)送狀態(tài)后面全亂套。建議把超時設為0表示無限等待或者設一個具體毫秒數(shù)超時后驅動會回調錯誤事件。發(fā)送完成會進入Radio事件回調void Radio_Events(void) { // process event, e.g. set tx_done_flag }在這個回調里做狀態(tài)置位再回到主循環(huán)處理后續(xù)業(yè)務不要把復雜的邏輯塞進去。回調是中斷上下文執(zhí)行時間長了會讓射頻收到新的中斷時響應變慢。3.3 接收端配置與注意事項接收端在初始化時設置接收配置然后進入Rx模式Radio.SetRxConfig(MODEM_LORA, 0, 0, 0, 0, 0, 0, 0, 0, false, 0, 0, 0, 0); Radio.SetRxTimeOut(0); // 單次接收需要超時0表示一直等待 Radio.Rx(0);比較關鍵的是前導碼、包頭格式和同步字必須與發(fā)送端匹配。LoRa模式下同一速率、同一頻點但同步字不同也不會解出數(shù)據(jù)。這一點經(jīng)常被忽略兩塊板子明明都可以發(fā)射就是收不到對方的包結果查了一晚上發(fā)現(xiàn)一個同步字配置是0x12另一個是0x34。接收完一幀數(shù)據(jù)在回調里拿到長度和緩沖區(qū)復制到自己的數(shù)組里盡快處理。因為驅動層緩沖被設計成環(huán)形如果業(yè)務處理太慢后續(xù)的包會覆蓋之前的造成數(shù)據(jù)丟失。建議做一個簡單的隊列把數(shù)據(jù)包從Radio庫的buffer中拷貝到自己的FIFO中。3.4 低功耗收發(fā)與喚醒機制如果做電池供電不能一直讓接收機工作。接收模式下電流一般都在幾毫安到十幾毫安不是特別低所以需要配合周期喚醒或者CAD信道活動檢測。STM32WL5x的Radio外設支持CAD模式在監(jiān)聽LoRa前導碼時候功耗相對低。CAD的原理是周期性掃描信道檢測到前導碼再切到完整接收這樣大部分時間都在休息。參考手冊里對CAD的時間參數(shù)有詳細說明。實際測試下來CAD一次大概需要2個符號時間。如果帶寬125kHz、SF7一個符號時間約1ms多一點那么CAD約2~3ms配合占空比控制能把平均接收電流壓到幾十微安。這種參數(shù)搭配需要根據(jù)實際業(yè)務去調沒有萬能的模板只能實測。4. 常見問題與排查技巧實錄調射頻最容易讓人頭禿的幾個問題我挑典型的出來講講。4.1 發(fā)射功率上不去實際測到的功率比配置的少10dB最常見的原因是電源供電不足。發(fā)射瞬間電流可能達到幾百毫安如果電池或LDO輸出能力不夠電壓被拉低PA就會限制輸出。解決方法是測發(fā)射瞬間VDD波形看有沒有跌落。另外檢查PA的供電引腳是否接了足夠容量的電容通常RF部分要單獨放一個10uF100nF的退耦組合。其次看匹配網(wǎng)絡是否按頻段設計。有些工程師做了433MHz的板子硬要在868MHz上跑匹配當然不工作。此時回波損耗高功率反射回芯片輕則功率低重則損壞PA。4.2 接收靈敏度差誤碼率超標先排除天線因素。用矢量網(wǎng)絡分析儀VNA測天線S11確認在目標頻點的回波損耗小于-10dB。若沒有VNA一個簡易的辦法是用頻譜儀加一個信號源直接測天線端接收到的信號強度和示例板對比。如果差距大說明匹配沒有調整好。還有一個常被忽略的是晶振頻率校準。STM32WL5x內部有TCXO或外部晶振頻率偏移會導致通道失諧。如果接收機在離中心頻點幾十kHz的地方就解不出數(shù)據(jù)那先檢查晶振精度和電容負載配置。參考手冊中有頻率誤差補償寄存器的寫入步驟可以用已知信號源標定。4.3 通信距離近隔一堵墻就沒信號距離近通常不是單點的問題。發(fā)射功率、天線效率、接收靈敏度、數(shù)據(jù)速率都影響鏈路。首先把SF調高比如從SF7改到SF12。雖然速率變低但靈敏度會提升好幾dB距離也有顯著改善。其次確認自己是否用了擴頻因子不同導致的“同頻失配”LoRa要求通信雙方SF一致。第三看天線與地面夾角手持設備的話天線方向性也要留意。4.4 收發(fā)不同步、經(jīng)常丟第一包LoRa網(wǎng)絡里對時間對齊比較敏感。如果收發(fā)模式切換太快或者發(fā)射完成后立刻切接收余輝可能會導致起始數(shù)據(jù)缺失。可以在發(fā)送完成和接收之間插入一個簡單的延時比如2ms等待射頻前端完全釋放。另外檢查RF開關切換的GPIO邏輯發(fā)射時切換到PA路徑接收時切換到LNA路徑邏輯搞反了也會丟包。5. 從官方方案到實際應用的擴展思考參考手冊畢竟是手冊但產(chǎn)品落地時往往還要結合應用場景做很多周邊設計。比如無線電愛好者喜歡討論的頻譜監(jiān)測、SDR之類STM32WL5x的Radio外設其實也可以用來做一些簡單的定制頻譜分析。但要注意無線電發(fā)射、監(jiān)測設備在不同地區(qū)有嚴格的管理要求個人實驗請務必遵守當?shù)胤ㄒ?guī)使用合法頻段和功率并取得相應操作許可。5.1 如何借助手冊做產(chǎn)品級低功耗設計我習慣先列一個功耗賬單把每個狀態(tài)下的電流和時間填進去。無線通信設備的平均功耗主要由三部分決定休眠電流、喚醒時間和通信電流。STM32WL5x手冊里提供了Stop模式的低功耗參數(shù)配合Radio的Sleep狀態(tài)可以在大部分時間處于微安級。但在實際中必須注意外設的漏電。一個上拉電阻沒處理好就把省下的功耗吃回去了。用我們的功耗分析儀實測時經(jīng)常發(fā)現(xiàn)電路板在休眠狀態(tài)下還有幾十微安漏電最后定位到是某個傳感器的電源沒有完全切斷。如果你做的是燃氣表、水表這類超低功耗設備建議把整個板按功能區(qū)隔供電射頻部分、傳感器部分和主控部分用MOS管或負載開關分開。射頻模塊只在發(fā)送時才上電發(fā)送完立刻斷電這樣能明顯拉長電池壽命。5.2 網(wǎng)絡協(xié)議棧的選擇LoRaWAN、Sigfox還是私有協(xié)議STM32WL5x可以跑LoRaWAN也支持Sigfox還可以自定義私有協(xié)議。選擇不能只看通信距離還要看功耗、成本、網(wǎng)絡所有權。協(xié)議優(yōu)勢劣勢適合場景LoRaWAN廣覆蓋、標準生態(tài)、節(jié)點省電需要網(wǎng)關有占空比限制智慧城市、農(nóng)業(yè)、水氣表Sigfox極簡、超低功耗部分地區(qū)基站覆蓋有限依賴運營商簡單上報類設備私有協(xié)議自由度高、無服務費需自己管理碰撞與功耗點對點應急通信、工廠內部從開發(fā)速度角度來看LoRaWAN現(xiàn)成SDK能省很多事但如果你的場景是固定點對點穿透測試私有協(xié)議反而更靈活能直接控制包格式和重傳策略。5.3 結合SDR與頻譜監(jiān)測的頭腦風暴很多無線電發(fā)燒友會關注SDR接收機聽FM廣播、航空波段等這屬于接收范疇相對風險較小。STM32WL5x畢竟不是一臺全雙工SDR它的Radio只能按配置的調制方式收發(fā)不能像真正的軟件無線電那樣隨意解調任意信號。不過可以用它做窄帶頻譜掃描器比如在470~470.2MHz之間逐頻點測量RSSI把數(shù)據(jù)傳送到上位機畫頻譜圖。這種應用特別適合無線環(huán)境調查、干擾源定位。如果確實需要寬頻段SDR還是應該選用專門的SDR芯片或前端STM32WL5x的價值還是在長距離低功耗通信鏈路里。做這類玩具實驗時也別忘了監(jiān)聽、解調他人通信內容在很多地區(qū)是非法的尤其是航空通信、應急通信千萬不要越界。嚴格把實驗限制在自己的合法設備、合法頻段內技術樂趣才長久。5.4 調試工具推薦與最終小經(jīng)驗最后分享一點調試經(jīng)驗和工具。開發(fā)sub-GHz項目幾樣東西值得備頻譜儀入門級的RTL-SDR也好用、矢量網(wǎng)絡分析儀哪怕簡陋的也要有以及一個可調的衰減器。如果不想投入太多至少準備一個相對準確的頻率計和功率計。我在調板過程中經(jīng)常用頻譜儀加近場探頭來查輻射泄漏確認匹配網(wǎng)絡是否把功率真正送到了天線而不是輻射到PCB的地平面上。經(jīng)驗上多準備兩套微調電容和電感不同批次的板材介電常數(shù)會有小的漂移預留微調位置能節(jié)省來回打板的時間。另外每一個版本修改都要記錄匹配網(wǎng)絡參數(shù)和實測S11曲線方便對比。我在項目中就養(yǎng)成了隨手拍頻譜曲線的習慣后來排查起問題快很多。如果回到最開始那個問題“STM32WL5x到底好不好用”我的感覺是它比分離方案省心但絕不是零射頻功底就能隨便上。參考手冊里每一節(jié)都有它存在的意義尤其是射頻匹配和電源設計部分值得反復讀。踏踏實實走一遍參考設計再動手改參數(shù)這條路最穩(wěn)。