最近因實驗需要, 上網找到很多人拿來控制 Arduino 的 APC220 UART 轉 RF 的傳輸模組.

由於網路上拍賣網站眾多, 但資料大多不全, 個人研判製造商應該是 APPCON 這家公司, 因為設定工具程式 (網路上找到的) 內有這家公司的相關資訊. 以下資料主要來自從 APPCON 網站下載下來的 datasheet



APC220 套件產品照片


APC220 Front View APC200 Back

可以相容對接的產品還有 APC230 及 APC802, 三者最大的差異是傳輸功率: APC220 是 13dBm (20mW), APC230 是 20dBm (100mW), APC802 是 27dBm (500mW), 當然功率變大電流需求也會變大, 同時也可以傳更遠. 由規格看來, 傳輸功率增加 7dBm, 距離由 800m 增加到 1800m, 20log(1800)-20log(800)=7.04 符合理論計算.

技術規格


APC220/APC230 Specification
Symbol Parameter (Condition) APC220 APC230 Units
VCC 需求電壓 3.5~5.5 3.5~5.5 伏特
IDD (需求電流) 接收狀態
傳送狀態 (@20mW/@100mW)
休眠狀態
28
40
≦5
32
100
≦5
mA
mA
uA
Temp. 操作溫度 -30~85 -30~85 °C
RH 操作濕度 (相對) 10~90 10~90 %
Freq. 標準 RF 傳輸頻段
部份國家/地區
433~470
418~455
433~470
418~455
MHz
POUT RF 最大輸出功率 (不含天線) 13
20
20
100
dBm
mW
Sen. 接收靈敏度 -118@1200 -117@9600 dBm
ZANT 天線接口阻抗 50 50 Ohm
Mod. 調變方式 (Modulation) GFSK GFSK
FSKDEV 調變頻率差 (Modulation Deviation) 28.8 28.8 KHz
CHBW 頻道間隔 (Channel Bandwidth) 200 200 KHz
Duplex 傳輸多工 半雙工 (half-duplex)
Network Type 網路型態 點對點 或 點對多點
Distance 傳輸距離 (line of sight @9600bps) 800 1800 m
DRFSK RF 傳輸鮑率 2.4~19.2 2.4~19.2 Kbps
DRIN UART 傳輸鮑率 1.2~57.6 1.2~57.6 Kbps
UART Buffers UART 暫存區 256註 1 Dual 256 Bytes
Dimension 尺寸 37.5×18.3×7 39.5×18.3×7 mm
Weight 重量 30 30 g
註 1: 中文版標示 256Byte, 英文版標示 Dual 256Byte.

接腳定義


APC220/APC230 Pinout
Pin no. Definition Detail
1 GND 0V Ground
2 VCC 3.3V-5.5V Power
3 EN
  • Disable the device when apply <0.5V
  • Enable the device when leave it disconnected or apply >1.6V
4 RXD UART Rx (In)
5 TXD UART Tx (Out)
6 AUX UART Signal - Receive(low) Transmit(high)
7 SET Set parameters (low)

套件內附的 USB-UART/TTL 轉接器 (Silicon labs CP210x) 接腳如下圖 (注意: 因為和 APC220/APC230 直接對接, 所以 Pin4:TXD, Pin5:RXD, 和 APC220/APC230 相反)

USB-UART Pinout

APC220/APC230 和主機之介接方法

Host to APC220

時序圖


APC220 Timing Chart
  • T1: APC220/APC230 送電並且 Pin3:EN 由低電位拉昇到高電位 (由 sleep mode 喚醒) 50ms 後 APC220/APC230 進入工作模式開始傳輸. 反之 Pin3:EN 由高電位降至低電位則進入休眠模式.
  • T2: 設定模式. APC220/APC230 於工作模式下, Pin7:SET 送低電位, APC220/APC230 將於 1ms 後停止傳輸, 進入設定模式, 此時鮑率轉為固定 9600 bps, no parity, 主機也必需轉至 9600bps, no parity 才能設定 APC220/APC230.
  • T3: 設定回應, 主機送出設定資料後 200ms 之內 APC220/APC230 回應設定值 (成功或失敗由進行設定之主機判定).
    • Pin7:SET 拉至低電位後只能傳送一次設定, 不論成功或者失敗, Pin7:SET 必需回復為高電位. 如果要再次設定 APC220/APC230, Pin7:SET 必需再拉至低電位.
  • T4: 重新開始傳輸. Pin7:SET 回復為高電位, 10ms 之內回復工作模式開始傳輸.

設定指令格式


此節說明如何自行撰寫設定程式. 一般應用可選擇預先以工具程式設好(下一節說明), 然後用固定參數執行, 如此可忽略本節說明.

APC220/APC230 設定參數
順序 參數 Bytes 預設值 說明
1 Freq. 6 433920 433920 => 433920KHz = 433.920MHz
2 DRFSK 1 3 1: 2400 bps, 2: 4800 bps
3: 9600 bps, 4:19200 bps
3 POUT 1 9 0~9; 0 refers to -1dBm and 9 for 13dBm
4 DRIN 1 3 0: 1200 bps
1: 2400 bps, 2: 4800 bps
3: 9600 bps, 4:19200 bps
5:38400 bps, 6:57600 bps
5 Parity 1 0 0:No parity
1:Even Parity
2:Odd Parity
  • 讀取設定: 命令字串 "RD"+CR+LF
  • 寫入設定: 命令字串 "WR"+參數依序由 1~5 (各參數之間以空白字元隔開)+CR+LF
  • 回應: 二個指令的回應都相同, 為字串 "PARA"+參數依序由 1~5 (各參數之間以空白字元隔開)+CR+LF

例子

寫入設定: WR 434000 3 9 0 0↙
HEX Code:
0x57, 0x52, 0x20, 0x34, 0x33, 0x34, 0x30, 0x30, 0x30, 0x20, 0x33, 0x20, 0x39, 0x20, 0x30, 0x20, 0x30, 0x0D, 0x0A

回應: PARA 434000 3 9 0 0↙
HEX Code:
0x50, 0x41, 0x52, 0x41, 0x20, 0x34, 0x33, 0x34, 0x30, 0x30, 0x30, 0x20, 0x33, 0x20, 0x39, 0x20, 0x30, 0x20, 0x30, 0x0D, 0x0A

設定工具程式


Silicon Labs CP210x USB-UART/TTL 驅動程式, 下載點: www.silabs.com
APC220 設定工具程式, 下載點: www.appcom.cn, www.dfrobot.com

APC220 設定工具程式的主畫面如下:

RF-Magic
  • 進入前先確定已經安裝好 Silicon Labs CP210x USB-UART/TTL 的驅動程式並將 Silicon Labs CP210x USB-UART/TTL 插入主機 USB Port.
  • Windows Vista及以後的版本需以系統管理者身份執行 APC220 設定工具程式.
  • 請先執行 Read R 讀出原本之設定
  • 修改參數後執行 Write W 寫入設定
  • 要連線的(二組或以上) APC220 之間必需
    • RF Parameters 都相同 (所有要相連的 APC220)
    • NET ID 需相同
    • NODE ID 需不相同
  • Serial Parameters 則各自和相連接的主機 UART 使用相同設定
  • 如果只有其中一方會有大量資料傳給對方, 可將 Air rate (DRFSK) 和 UART rate (DRIN) 設成相同. 否則 Air rate (DRFSK, 設定畫面中的 RF TRx rate) 最好是 UART rate (DRIN, 設定畫面中的 Seriers rate) 的二倍, 這是因為 RF 介面使用半雙工模式傳輸的原故 (RF 端要混合切分時段來傳送及接收二邊的資料, 所以 RF 傳輸鮑率需要加倍).
  • 如果程式功力不高, 主程式只是一個大迴圈而 UART 的驅動程式又不是寫得很好 (沒有使用緩衝區及中斷), 這種情況下 UART 的鮑率設太低會使 CPU 花太多時間在 UART 傳送上, 這時你可以把 DRIN 設成最高 (這樣可以充分利用 APC220/APC230 的 256 byte 的緩衝暫存區), 但必需確定產生資料的速度沒有超出 DRFSK 的 60%, 同時確定單次的訊息量不會把緩衝暫存區給塞爆, 一但緩衝暫存區給塞爆了, 資料就會不完整.
    • Cper message := 每一個訊息的字元數 (含 CR+LF)
    • 公式: TAir = 10*Cper message*1K/(DRFSK*0.6) ms
    • 主機每次產生訊息字數 <= 256 字, 產生訊息的週期必需 >= TAir
    • 例如: 每次訊息字數 100 字, DRFSK = 19200, DRIN = 57600, 則訊息產生的週期必需 >= 10*100*1K/(19200*0.6) ~= 86.8ms
  • APC220/APC230 使用 FEC 技術 (Forward Error Correction with Interleaving Encoding), 具備抗干擾能力, 在嚴苛的 RF 環境中, 一樣表現良好. 但使用者仍需自行加入 CRC 循環冗餘檢查及重傳機制, 以防訊號太弱或干擾太強時之誤動作.
  • 應用時注意傳輸之延遲 (10ms ~ 100ms), 鏈路中有 Host1(開發板)/UART <=> APC220 <-air-> APC220 <=> UART/USB <=> Host2(PC) 之間至少有 3 段是延遲較大的慢速的 UART 對傳. (鮑率 9600 換算下來不到 960 characters per second, 送出一個字元需要超過 1ms. 10 個字就需要超過 10ms 時間, 要小心喔!)

後記


  • 使用套件所附的 USB-UART/TTL 轉接器 (Silicon Labs CP210x) 和 APC220 連接可以順利完成設定. 但要接收資料時卻和常用的終端機程式 TeraTerm 出現不相容的狀況, 完全接收不到資料. 最後改用另外買來的 Prolific PL2303 USB-UART/TTL 轉接器, 把 VCC, GND, RXD, TXD 接好才順利把資料接收下來, 實際的接線相片如下:
  • Prolific PL2303 & APC220
    Prolific PL2303 USB-UART/TTL 轉接器接腳圖:
    USB-UART Pinout2
  • 後來又有些小插曲:
    • Prolific PL2303 在 Win7 64bit 的主機上不需要另外安裝驅動程式, win7 會自動下載並安裝, 也可以正常工作. 但是在 Win8 x64 (及 Win10) 的主機上卻是回報找不到裝置, 不能使用.
    • Silicon Labs CP210x 在 Win7 及 Win8 上則都可以正確辨識, 但是如果要使用 TeraTerm 接收資料不可以板子疊板子直接對接, 必需改成只用四條跳線連接 VCC, GND, RXD, TXD 才能順利接收到資料
  • 其實 APC220 的功能大部份都是靠底層的 RF 晶片: Analog Devices 公司 ADF7020-1 晶片, 不過這個晶片是 SPI 介面, 而且控制暫存器的設定功能對一般的使用者來可能會有點太過複雜, 所以 APC220 算是造福普羅大眾, 把有關 RF 的複雜設定都藏起來了. 有興趣的人可以在這裡 (Analog 網站)找到相關資料及下載晶片的 Data Sheet
  • ADF7020-1 晶片的空中傳輸可以到達 200Kbps, 不知道為什麼 APC220 只實作到 19.2kbps? 是 Tx/Rx 收發電路切換後穩定工作所需的時間太長嗎? 接收端和發送端同步所需的時間太長? 還是想要在訊號太弱時依然可以保證 19.2Kbps 的傳輸速率? 以後有空來研究看看吧!
  • 查了半天沒找到天線明確的增益 (gain): 應該在 2dBi~2.5dBi 之間吧?

arrow
arrow

    MagicJackTing 發表在 痞客邦 留言(1) 人氣()