2017年11月2日 星期四

LoRa Gateway / Concentrator


總之這是一個真正的LoRa Gateway,在說明之前我先釐清一下部分人的概念。
LoRa的Modulation除了有頻率的差別以外,還有一個很重要的是Spread Factor(SF),
這些參數要完全對上,一個普通的LoRa Transciver(SX127x)才有辦法收的到。

坊間很多人因為無知或是惡意誤導,會拿SX127x的那種Single Channel的IC去宣稱自己是Single Channel Gateway,這種和SX1301的Level完全不同。

真正在架設LoRa網路的所用的方法,是拿一顆(or 以上)專用的IC(SX1301/8)去弄,
SX1301/8前端有兩個個0.8Mhz的BW的RFFE把Raw IQ送給SX1301/8
然後SX1301/8內部的DSP有49個LoRa decoder去解在這1.6Mhz裡面的LoRa封包。

而其中最主要的LoRa Channel是 8個Frequency x 7~12 SF 的48ch decoder,這48組可以同時解,也就是說即使Frequency相同,SF不同的狀況下都能解出來,不過這48組的BW被限制在125Khz。另外一組LoRa則隨意設定,還有個FSK的Channel則是為了短距離的通訊(因為速度夠快,而且因為距離近,收訊沒啥問題,速度夠快On The Fly就短,對於發射裝置來說耗電低,對於接收端來說單位時間所能收的客戶也變多)

所以LoRa Gateway請指名SX1301/8

First Try

續之前的LoRa project,我最主要的是需要一個Mult-Channel的Receiver,這計畫的第一版因為失敗,所以後來的7688 receiver才變成四個Channel的Single channel receiver去撐multi-channel。

那時候失敗最主要的原因是因為我沒有辦法把SX1301的FW成功的Load進去,但是SPI Bus的壓力測試是通過的,也就是裡面的那顆FPGA跑不起來所以整個卡半天都弄不好。

這大概是一年前的Project,那時候受限於SX1301這顆晶片並沒有放完整的Datasheet出來,我所參照的電路圖來自Microchip的LoRa Gateway User Guide,裡面有整個Gateway的完整電路圖,第一版的作法是SX1301那邊照抄,SX1255/7的部分因為有Datasheet,所以抄Datasheet。

不過到了今年年中的時候我發現SX1301竟然Release了Datasheet,所以茅起來檢查一下問題在哪,結果對了Pin腳對半天,竟然......
Reset的電位是拉高Reset,而不是常見的拉低Reset,所以不只是我沒有放電阻拉,後續補上的還拉錯方向。
另外一個比較小的問題是耗電量,我的第一版沒想太多就用LDO上,結果PO到Github就被別人發issue說LDO不夠用,一聽才知道,幹,SX1301的1.8V Rail吃掉0.6A....

所以就打算修正再來試一次,由於我那時候剛好在美國交換一兩個月,Pi Zero買了一堆
就做了一張給PI Zero用的版本,由於Layout塞不下,把一組RFFE拿掉,留一個SX1255/7
但是因為另外一邊超空,所以塞GPS模組提供PPS,然後因為我不想要拖一個天線在外面,就拿了一個有內建天線的模組來用。當然啦,也把LDO換成Switching,不過3.3V Rail就直接從RPI上面拿。
Ver2
這版終於跑起來了,整個超爽der,越想越爽就想說那就做一個RPI用的版本吧。

然後就做完了,不過不只是把第二個FE加回去而已,大致上第二版還是有幾個問題
第一個就是LoRawan所提供的lib裡面關於GPS校正時間的軟體,由於吃uBlox專用的指令,所以基本上只支援uBlox的GPS模組,所以沒辦法只好改用很兇的MAX-7Q上,懶得改lib。
第二個就是RX增加了Bias的位置與SAW Filter,最主要是因為SX1255/7是直接downconvert,而且IC內部並沒有SAW,又因為取樣的BW只有0.8Mhz,所以在這外面的訊號通通會變雜訊灌進來,所以還是放了Filter在上面,而Bias則是因為SX1255/7並沒有一個放大用的LNA,所以還是得加一個,而為了接線方便,同時考慮到天線頗長,所以設計上是有個小的板子接在天線正後方,負責Filter與Amp,然後透過RF上面放個DC的Bias去供應這張板子的電流。最後的小細節就是在SAW前面還有一個TSV,防ESD打壞SAW。
直接接起來大概長這樣,注意的是中間可以牽一段很長的SMA線沒問題

然後因為RPI的SPI device有兩個CE0/1,所以在背面也留了一個Jumper可以跳
像上面那張就是疊了一個915+一個433的版本。另外天線接頭的部分也為了選擇多樣性,用的是SMA/U.FL複合體,所以要上哪種都OK。最後就是SX1301運作的時候真的溫度不低,所以拿RPI用的散熱銅片貼上去這樣。

當然啦,以上這幾個改進都回到RPI Zero的版本

歷經一年的Project終於完工,我終於能夠用到同時 8-ch frequency x 7~12 SF的正常Gateway惹。



不過目前這版問題還是有的

第一個就是TX效能很差,因為直接從RFFE拉出來,內建有Driver,但是Power不大,
對我目前只需要Multi-Channel的狀況是還好,但是之後應該會需要用到TX,所以勢必是需要加一個PA,不然就是需要把SX1301的PA enable腳位拉出來,這樣我就可以另外接上一個PA然後用enable作為PA的開關。
第二個是Bias的問題,因為我現在只留了一個電感在那邊,所以用U.FL的時候,一旦不小心接到地,Bias會直接短路燒掉,所以我暫時的改法是後面接電阻,但是因為pad是0402,所以焊接的時候電感和電阻成三角形的方式焊接上去。