
本文的先導文章 “保持冷靜,提升速度。from-aprs-1200-to-9600 ” 是數年前的,請先參考閱讀,這裡不重覆。
前言
本 Blog 以 aprs 為切入點介紹業餘無線電,雖 aprs 往往就是1200 baud 了。但也不斷尋找機會講高速 9600 baud (下文全稱 96)。
個人情感上,96 TNC 是本 Blog 在 aprs 仍缺的一塊 puzzle,極希望補上一可行,價格合理,同好可仿造的方案。齋講 1200,網上資料多的是,無需睇我。
這個 project 由年頭搞到年尾,除私務繁忙外,缺乏一個 96 on air 的平台也是一個難處。
為此我的最終方案是:
以 Direwolf 配 SDR 手指,作為一 9600 Rx-only i-Gate 和作兼容性測試。
將 FTM-350 設為 96,作為驗証,對 talk 機。
以 TH-F7 設為 96,配 aprsis-32 ,接本文介紹的 96 TNC。
最後以 96 速率,作簡單的短訊,email 通訊測試。
先講 96 tnc
首先,緊記兩件事:
Teensy 剛推出了 4.0 型號。我們用不著,選回 ver 3.6 就 ok 了。至於原作提到也可用 ver 3.2 (size 較細和便宜),本文提到的 PCB 是支援的。
但由於大部份參考文章,圖片也是用 ver 3.6,也無謂為省一點錢也購入最終不合用的東西,所以購入的是 3.6。
Arduino studio 最新版 1.8.10 暫不兼容 Teensy 的 plugin (裝不到),所以用回 1.8.9 就 ok 了。
Pi-Teensy / TNC-Pi9k6
硬件原是一開源方案,是 G8BPQ 設計,並開發出一種用在 HF 的 protocol,名為 ARDOP。
網上也有 PCB gerber 檔供下載。無需自行花時用萬用板接駁,成功率高。本文也已此為基礎。
Link: (內附線路圖)
https://www.seeedstudio.com/Teensy-TNC-for-Raspberry-Pi-V4T-g-1097792
W2FS 據此硬件為藍本,軟件修改以支援 1200bps / 9600bps kiss mode。是一商品化 open source 套件。名為 TNC-Pi9K6 。
這應是暫時唯一網上找到可供自製的 9600 速率 tnc 方案。
所以兩者線路基本上是一樣的,但 PCB,我們就是用 G8BPQ 設計的原裝貨。
原裝貨的是好處是,接到 Rpi 的 Rx/Tx pin 是用 jumper 分開的。我們只需將 Teensy 那邊接到一 TTL to USB module,就可連到電腦了。

另也設一 jumper for 電源 5V 和 GND。接到 TTL to USB 的 module 就可 USB 取電。
線路對比

Pi Teensy TNC

TNC-Pi9k6
原線路 cap c7,c6 在 TNC-Pi9k6 砍掉了。不關鍵照跟即可。
c5 如用在已內置 DC blocking cap 的收發機接口上,無需接上電容,短路之即可。
組裝
開始前詳閱 TNC-Pi9k6 的說明書。
link:
http://www.tnc-x.com/TNCPi9K6.pdf
理論解說:
https://www.tapr.org/pdf/DCC2017-TNC-Pi9k-KD0QYN.pdf
零件很少,沒難度可言。唯一留意的是 PCB 電阻用了 1/8w size 的。一般 1/4w 電阻放不下,需斜傾。1/8w 電阻在麥氏有售。
留意五枚 LED 極性方向不一,右邊一枚是反向的。
LED 功能表示由右起分別是 PTT,Rx,IRS,ISS 和 最後的不知名。用得著的只是 PTT 和 RX。其他當 reboot 時的走馬燈吧。
與 Rpi 連接的 40pin header,其實需用到的是 Rx Tx Gnd 5V GPIO18 幾針而已。最終不是用在 Rpi 的用飛線接 Rpi 即可。
Teensy 和二款 IC 在 Digikey 購入。
留意電子 Volume IC MCP4261是有分不同內阻值的。我們用的是 50K ohm,即 part no. MCP4261-503E/P。
接對講機的有三接頭可選,minidin,db9,pin header。
Mini din 無可否認較美觀,但之後如要拆開超麻煩。
Pin header 簡單但易損壞,所以還是用 DB9。

惱人的 hex file
到 TNC-Pi9k6 下載完整的 zip file
http://www.tnc-x.com/TeensyProjects.zip
爆開後,在folder “TeensyProjects\SM_Teensy” 內有一個 hex file “SM_Teensy.ino.TEENSY36.hex” ,心諗今次發達,做少好多。在 Teensy PJRC 網站下載其編程軟件,將 Teensy 的 micro USB 接到電腦的 USB port,按序將 Hex file 下載到 Teensy 內。
Boot 機係無問題,LED 如走馬燈閃一遍。但就是不能和 Rpi 設定程式溝通。由於疑點是在 Rpi 那邊,所以浪費了相當長時間 trouble shoot。
最後,還是自行 compile 的才 work。方法簡介如下:
首先確認 Arduino studio 是 ver 1.8.9 或以下。然後到 Teensy PJC 下載 plugin 並安裝之。
將上述 zip file 爆開後的 TeensyProjects ,抄到 arduino的 default location。
留意內附的兩檔案,boards.txt 和 platform.txt 需抄到的地方與說明所述有異,跟內附的 readme 做。
打開 ino 檔, board 選 Teensy 3.6,sketch Verify/Compile 並上載到 Teensy 內。
怕麻煩的,我將我的 hex file 上載到此。
完成後,將 Teensy 插到 pcb 上備用。
Rpi準備
Rpi 只是用來 config TNC 的設定,我最終的用途不是在 Rpi 上,所以簡單為主。
連 update 也不做了。在 X windows 環境下,作基本設置將 serial 打開,就下載設置 zip file。

解壓後,如放在 tmp folder,有可能 reboot 後不見了,所以抄回 download folder,按 open current folder in terminal。

由於是 Linux 環境,我們需先設置兩檔案的權限。俾盡佢 777

查看是否可和 tnc 通聯,並讀入預設值
sudo ./pitnc_getparams /dev/serial0 0

一切順利應見到這個畫面。否則你將陷入苦戰,留意 Rpi 3B的 serial port 給了 BT 使用,需轉回給系統使用。
四個 parameter 需更改。
將 on air speed 轉為 9600
sudo ./pitnc_setparams /dev/serial0 0 8 96
將 Tx delay 改為 100
sudo ./pitnc_setparams /dev/serial0 0 1 100
將 Tx 電平設為 96,即約 1V
sudo ./pitnc_setparams /dev/serial0 0 10 96
將 Rx 電平設為 0,即自動調較
sudo ./pitnc_setparams /dev/serial0 0 9 0
之後以 command reboot 一下,再讀入 parameter 確認讀數 ok。
sudo ./pitnc_setparams /dev/serial0 0 15 2
無問題可 shutdown Rpi。
拔掉兩接到 Rpi Rx Tx 的 jumper,接上一 TTL to USB module。module 需是可從 USB port 取電(5V) 供下位機那種。
一個 96 TNC 就完成了。

9600 iGate 的設立
承舊文,以 Direwolf + SDR 設立一個程序是相若的。
只是舊文是 ver1.3,現在的是 1.5。
首先跟 Raspberry Pi APRS 文件內容安裝。
然後需按 Raspberry Pi SDR iGate 安裝 rtl-sdr library 。如不安裝,下文提到的調校會出現 error 訊息。
調校
9600 要求較高,不調校的情況,盡管是用高精度的 SDR 手指,效果是相當不濟的。
調校需一個準確的訊號源,一般網上是介紹接收到電話基站的 GSM 訊號。
但以 SDR 手指自身震盪頻率去得出誤差值 ppm,這避免了接收和干擾問題。
留意所謂高精度手指,其誤差值 0.5ppm 是指線路使用基本頻率震盪器的誤差值。
乘大左後,誤差值也隨之增加。
以這個 command,每1分鐘取樣 ppm 值,等 10 鐘後再取平均值。
rtl_test -p60
以我的 SDR 手指為例,取 7ppm。

再輸入以下 command 踢著 9600 Rx iGate。
rtl_fm -p 7 -f 144.64M -o 4 -s 48000 | direwolf -c sdr.conf -r 48000 -B 9600 –

有了這個 ppm 補償值後,短期測試接收成功率是 100%。
實戰
首先將 96 tnc 接到 TH-F7。留意收發機必需支援 9600 baud 才可用在 9600 baud 方案上。
將 TH-F7 設為 9600 bps,連接方式設為 TNC。TNC 模式支援 squelch,但這個 TNC 沒 squelch 輸入。雖用回普通的 MIC/SP 也可,但就受機上的 volume 影響輸出值。用回 TNC 較易成事。
將 TNC 接到電腦一 USB Port,成功連接後到裝置管理員查看 com port 編號。
在 aprsis32 (vr2xkp-8) ,設一新 port。選該 com port 號,參數 19200,8n1。
用已設好 9600 的 FTM-350 (vr2xkp-6) 發射一個 beacon (dummy location),iGate 和 aprsis32 均可解碼。

aprsis32 發射給 FTM-350 的 SMS 訊息,也可成功解碼。

從 aprsis-32 發出中文 SMS 訊息到 Android phone (VR2XKP-3),訊息支援中文。


APRS to Email,sure no problem
有 Ham 友想為在地設立一 radio email system,作為 disaster 備用方案。這就是 Pi Gate 方案的目的。
到其官網,下載 Rpi 的 image,跟著 user guide 就可設立一個 gateway 或 client 了。
Pi Gate 方案的好處是可於 email 內嵌入圖片。
覺得複雜限制多 (不是人人都喜用 Rpi )。其實唔介意純文字 email 的,更簡單用 aprsis32 也可。
在 aprsis-32 選 email,就可發出簡單的純文字電郵訊息了。



從 aprsis-32 發出電郵,約有幾分鐘時滯才收到。
最後提醒一下,不論任何形式的 on air to email /sms,總有一個接上 Internet 的 Gateway 去處理。可以是 aprs.fi 的network,也可以是自行設立的 Pi gate 等方案。
總結
網上甚少介紹支援 9600 速率的 TNC,希望這文能帶給大家一些新點子。
這個開源的方案伸延性高:例
原方案是在 HF 下運作的 300 baud 系統,有設立 HF 電台的同好一試無妨。
將 Rx Tx 接到一 BT module 如 HC-05 等,設定好速率是 19200 和 Teensy 溝通即成為一個支援 9600 on air 的 BluetoothTNC 了。
這是一美國同好的設計,起用在地的 Teensy 模塊,是有點貴之餘,也用不盡其功能。將其開源程式移植到其他 arduino 平台如上一文的 STM32L432 上,既省錢又較易入手。
Teensy 本就內置 micro USB port 了,但就需另置 TTL-to RS232 模塊去和電腦 talk,是有點無奈的。更改程式將之用回 usb 也是一個好課題。
參數設定兩程序是在 RPi 運作的,唔用 Rpi 方案就會覺得搵搞。而這些 arduino 模塊剩餘的 GPIO 眾多,將之用來設定一些參數(如1200/9600) 也是可行的
線路上的電子 volume ic 是 MCP4261 是難尋的。但想通了也不外是兩個 vr 而已。 用兩個 50k VR 取代並以人手調校也是一個降低成本的辦法
open source 方案就是留有空間給想像。
剩餘物資免費贈有緣人

pcb 做了十塊回來,用唔哂也不值錢。本地同好想進入 9600 的世界裡,可 FB 私訊或電郵給我,先到先得,郵寄送遞,送完即止。
沒有條件,但為免浪費,來函的同好需証明你已有關鍵的兩零件,即 Teensy 3.6 和電子 volume ic MCP4261-50k。
証明可以是照片,或網上商店的訂單。總之証明到就 ok 了。所有通訊資料寄出後銷毀不留檔。