萬用控不再是DEVO的獨家特色,任何支援ppm輸出的遙控器都能變身萬用控 : DIY-Multiprotocol-TX-Module 開源專案簡介

版權聲明:本文為介紹性質,所有相關資訊引用自DIY-Multiprotocol-TX-Module的 Github專案網頁,著作權屬於原作者

簡介

遙控模型的遙控器(以下簡稱"控"),就像許多3C產品一樣,有著等級區分,從好幾萬一隻的日/歐系品牌控,到萬元以下的強國品牌控,再到套裝機的專用控。

一般而言價格會反應在控的質感用料與手感,除此之外品牌間最關鍵的差異還是在遙控訊號的通信協定,各大品牌幾乎都有自己的專用(專利)協定,例如spektrum/JR的DSM2/DSMX,futaba的S-FHSS/FASST/FASSTest,DSM2/DSMX除了spektrum與JR的系統,也常見於有些BNF(bind and fly,自備遙控器對頻後即可飛)的微型室內/公園機。而一些迷你的直升機或多軸機也會有自己的協定,例如v911使用Flysky協定,而大家暱稱"姐姐"的JJ1000使用的則是v2x2協定。

而這些大大小小高階低階的協定除了在軟(韌) 體方面的差異,在負責發射訊號的硬體:發射模組(強國稱為"高頻頭"但也廣為國內飛友採用,以下皆稱高頻頭),也各不相同,常見的高頻頭與協定對應如下:

nRF24L01:V2x2/CX10

A7105:Flysky/Hubsan

CYRF6936:DSM2/DSMX/DEVO

CC2500:Frsky/S-FHSS

以上種種差異造成的現象就是,除非完全只玩自組機,不然總是得維護一隻以上的控,有時只是想在下雨天時在家玩玩碳刷小機,還得忍受質感手感都很差的玩具控,為什麼不能有一隻統治一切的至尊魔戒呢?

對模型稍有經驗的飛友應該都知道,其實是有的,強國廠商華科爾Walkera旗下的Devo產品線部分型號,可以透過改刷第三方的DeviationTX 韌體,硬體部分加裝nRF24L01/A7105/cc2500,再加上Devo原本內建的就是CYRF6936,可以達成一隻控支援大多數通信協定,飛遍大小機的目的。

但是(沒錯就是有但是),這麼夢幻的方案怎麼沒有席捲整個市場呢?個人看法,改機支援萬用控只能算是加值,一個系統能不能大賣還是要看本質,因為終歸還是要飛自組機的嘛。華牌的控用料手感,協定可靠度,接收的功能與體積,都算不上一流,市場自然受限制,也因此改刷DeviationTX的Devo最常扮演的角色還是飛友手中的第二隻控。

那除了Devo之外,真的就沒有辦法只用一隻控飛遍大小機了嗎?我很想用根本沒有的 18MZ 飛姐姐怎麼辦?

方法還是有的,以下要介紹的就是一個同時支援nRF24L01/A7105/CYRF6936/CC2500四合一外接模組的開源方案,特色如下:

  • 基於ATmega328p MCU開發的程式碼,可以使用標準Arduino IDE編譯 (2016/11/1 更新,已有基於STM32 MCU的新方案,請見另文介紹)
  • 主控制板可使用Arduino Pro mini 5V/16MHz(但供電需使用3.3V),或是專用電路板以縮小體積,以便安裝至支援外部發射模組的控,例如Frsky X9D的背板模組槽
  • 控與模組之間的連結,支援兩種模式
    • ppm模式
      • 相容絕大多數支援ppm輸出的控,例如教飛線
      • 必須使用硬體開關切換協定,軟體編譯前可預先選定15種協定,藉由16位旋轉編碼開關,或是4位指撥開關來切換
    • SPI模式
      • 只支援少數幾種開源系統韌體,目前僅支援er9x/ersky/opentx
      • 沒有前述15種協定的限制,也不需要透過硬體開關切換協定,在SPI模式下,可以直接在控的選單內選擇要使用的高頻頭與協定

多合一外接模組硬體共有兩個部分(成品一定是1+2的任一組合,缺一不可):

  1. 高頻頭
    1. 獨立式高頻頭
      1. 構造單純
      2. 天線多,每顆高頻頭都有自己的天線
    2. 四合一高頻頭
      1. 強國商人產品
      2. 內建天線切換晶片,四種高頻頭可共用一支天線
      3. 初期版本問題多,但據了解近期版本多已修正
  2. 控制板或稱基板
    1. 使用arduino pro mini搭配麵包板或是萬用電路板
      1. 接線與焊接簡單,技術門檻低
      2. 成品模組體積大,不利內藏或作為內嵌模組,較適合作為外掛模組盒
    2. 使用專用電路板
      1. 電路緊湊基板小
      2. 可製作出JR標準背板抽換模組尺寸的成品,直接插入支援背板抽換模組的控使用,例如Frsky X9D
      3. 使用SMD元件焊接技術門檻高,不利DIY
      4. 強國四合一高頻頭亦有搭配的專用電路基板,以完整發射模組的方式銷售。其機板的電路規劃與開源電路板不同,但是更新韌體方法相同。

以下先由韌體程式碼開始,介紹怎麼下載調整編譯韌體,進一步介紹製作硬體的方法。(先談韌體編譯是因為即使你買強國人作好的現成硬體,仍舊免不了得自己更新韌體,這是一個開源專案,隨時會有修正、更新甚至新協定加入)

程式碼下載與簡易說明

範例1 使用arduino pro mini 搭配萬用電路板的簡易版本,使用CYRF6936與ppm輸入為例

範例2 使用專用電路板製作JR相容背板抽換模組

範例3 使用STM32 MCU與專用電路板的JR相容背板抽換模組 (持續更新) (2016/11/1 更新)

模組購買連結

以下是我曾購買過,確定可用於此專案的獨立高頻頭賣場連結:

nRF24L01

https://item.taobao.com/item.htm?spm=a1z09.2.0.0.tCVV6O&id=17584284800&_u=t20ptgpb97a1

A7105

https://item.taobao.com/item.htm?spm=a1z09.2.0.0.tCVV6O&id=522174760217&_u=t20ptgpb78b4

CC2500

https://item.taobao.com/item.htm?spm=a1z09.2.0.0.tCVV6O&id=40393395007&_u=t20ptgpbc75b

CYRF6936

http://www.walkeraonline.com/walkera-wk-devo-s-mod-devo-8-or-12-to-devo-8s-or-12s-upgrade-module.html?search=WK-DEVO-S-MOD

以下為強國四合一高頻頭/完整模組賣場連結,我僅使用過四合一高頻頭(使用於STM32版本,2016/11/1更新),供參考

https://item.taobao.com/item.htm?spm=a1z0k.7385993.1997994373.d4919385.nyPBQm&id=526271178299&_u=t20ptgpb54b4

如何在已加密的 Android 8.0 手機上,透過 MiToolkit 取得小米智能家居裝置的 Token

這陣子在研究 Home Assistant,順手記錄一下心得

小米的 sensor 和開關,算是很平價實惠的選擇,當初先做過功課,透過智能網關管理的 zigbee 週邊,只要將智能網關接入 Home Assistant,就可以自動偵測到。

至於不走 zigbee/智能網關的裝置,可就麻煩了,得要間接取得裝置的 token,如果重置這類小米智能裝置的網路設定,這 token 還會隨之改變。所以個人對這類裝置敬謝不敏,太折騰了嘛。

這兩天買進了小米空氣淨化器 2S,它獨立連結 wifi,米家 app 裡的智能場景也不支援,只能排程開關機,說不得,只好從 Home Assistant 這邊想辦法。可是這玩意要接入 Home Assistant,就得搞我最不想碰的 token了。

按照  https://www.home-assistant.io/components/vacuum.xiaomi_miio/#retrieving-the-access-token 的步驟,取得 MiTookit 後,搭配舊版的米家 App (5.0.19),馬上出現了個問題,MiTookit 明確提示,建立 backup 時不要輸入密碼,但是我的 HTC 10 升級到 Android Oreo 後,儲存空間是加密的,加密空間要備份出資料,Android 會強制要求必須加密備份,否則備份無法進行。輸入密碼完成備份後,MiTookit 顯示備份成功,下一步 Extract Token 就卡住沒有回應。

鬼打牆好一會,只好上網爬資料,七拼八湊總算找到解法

  • 手機上提示備份密碼,就輸入個簡單的 123456
  • MiTookit 顯示備份成功,就直接用工作管理員終止整個 MiToolkit 的 process tree,反正它也解不開
  • 找到 MiToolkit 目錄下的 save 資料夾,將裏頭的 backup.ab 複製一份到上一層目錄(與abe.jar 同一目錄)
  • 打開命令列提示字元,cd 到 abe.jar 與 backup.ab 所在的目錄,輸入以下指令

java -jar abe.jar unpack backup.ab backup.tar

  • 提示輸入密碼時,輸入在手機上建立備份時選用的密碼
  • 使用 7-zip 或其他解壓縮工具,將上一步解密之 backup.tar 解壓縮
  • 使用 DB Browser for SQLite 或類似工具,打開上一步解壓縮得到之apps\com.xiaomi.smarthome\db\miio2.db
  • 找到名為 devicerecord 的 table,其中就會有所有的裝置列表,其中一個欄位就是token

MiTookit 解壓縮時遇到加密備份會卡住,八成就是因為解密程序要求輸入密碼,但是 MiToolkit設計時根本沒考慮這個,就這樣卡住了。

另外一個需要注意的,安裝完米家 App 後,要先在 App 內點一下目標裝置,讓App先和目標裝置完成連線,才會在手機上留下記錄,事後才能撈得出來。

如何完整使用ATmega328p的 32 KB空間?

******Fuse設定錯誤可能會鎖死MCU,風險請自負,本人對任何因設定錯誤造成的損失不負賠償責任******

 

在前文中介紹過基於 ATmega328p MCU 的萬用控,因為該專案目前支援的協定數目相當多,若將所有協定全部啟用,編譯出的韌體大小超過 ATmega328p 預設提供的 30 KB空間 (32KB減去bootloader佔用的2KB),因此必須取捨,僅挑選需要的協定啟用。

但因為該方案使用USBISP更新韌體,並不需要透過bootloader,因此可將bootloader的空間也釋放出來,讓韌體大小上限變為32KB,雖然還是不足以容納所有協定,但總是有幫助,以下說明作法:

 

編輯 [Arduino IDE安裝目錄]\hardware\arduino\avr\boards.txt,在檔案最下方插入以下內容:

##############################################################
## Multi 4-in-1 (3.3V, 16 MHz) w/ ATmega328
## --------------------------------------------------
multi.name=Multi 4-in-1

multi.upload.tool=avrdude
multi.upload.protocol=arduino

multi.bootloader.tool=avrdude
multi.bootloader.unlock_bits=0x3F
multi.bootloader.lock_bits=0x0F

multi.build.board=AVR_PRO
multi.build.core=arduino
multi.build.variant=eightanaloginputs
multi.build.extra_flags=-Wl,--relax

multi.menu.cpu.16MHzatmega328=ATmega328 (3.3V, 16 MHz)

multi.menu.cpu.16MHzatmega328.upload.maximum_size=32768
multi.menu.cpu.16MHzatmega328.upload.maximum_data_size=2048
multi.menu.cpu.16MHzatmega328.upload.speed=57600

multi.menu.cpu.16MHzatmega328.bootloader.low_fuses=0xFF
multi.menu.cpu.16MHzatmega328.bootloader.high_fuses=0xD3
multi.menu.cpu.16MHzatmega328.bootloader.extended_fuses=0xFD

multi.menu.cpu.16MHzatmega328.build.mcu=atmega328p
multi.menu.cpu.16MHzatmega328.build.f_cpu=16000000L
############################################################## 

 

請參照程式碼下載與編譯選項簡易說明調整編譯選項,在Arduino IDE中編譯原始碼時,請將Board與Processor設定如下圖:(2016/12/14更新)arduinoide_04

請改按這個Verify按鈕(不是Upload !),Arduino IDE會編譯並確認成果可燒入ATmega328p中,韌體太大(超過32KB時) 依舊會報錯

arduinoIDE_01

編譯驗證通過後,Arduino IDE下方的訊息視窗會顯示.hex檔案的路徑,請複製這個路徑,待會會用到arduinoIDE_02

將USBISP與萬用控的ISP針腳正確接上連接線,插入電腦USB埠後,在電腦上打開progisp 2.0(這個工具買USBISP時賣家應該都會提供,如果沒有,請到檔案區下載)。按照下圖的步驟1到4,修改Fuse 的 HighValue 為 D3 。

  1. 點選圖上標示的"…"按鈕打開Fuse設定對話框
  2. 按下 Read 按鈕讀取MCU目前的Fuse設定值
  3. 確認LowValue,HighValue與ExtValue三個欄位的值分別是 FF,D3與FD,若不是這三個值,請自行點選欲修改欄位後輸入。(此處主要是要修改HighValue,由原本的D2改為D3)
  4. 確認以上三個值無誤後,按下 Write 按鈕寫入 Fuse

******請務必注意步驟與LowValue,HighValue和ExtValue三個值必須正確,Fuse設定錯誤可能會鎖死MCU,風險請自負,本人對任何因設定錯誤造成的損失不負賠償責任******

progisp03

如果沒有把握,可以參考這段示範影片

Fuse設定完成後,按照以下步驟上傳韌體

progisp01

如果還是不知道怎麼做,請參考這段示範影片

如此便可使用ATmega328p MCU的完整 32KB 空間存放韌體了

外接萬用控模組-使用STM32 MCU與專用電路板 (持續更新)

如同在前一篇文章中提到的

外接萬用控模組範例-使用專用電路板製作JR相容背板抽換模組

這個萬用控專案的後續發展出現了一個新分支,也就是採用STM32 MCU以及強國版本的四合一高頻頭,與原有方案的異同整理如下:

  1. 同樣有專用電路板:可製作出相容JR背板插槽的模組
  2. 同樣支援PPM模式(使用旋轉編碼開關與對頻按鈕)與SPI模式(透過遙控器的操作選單設定與對頻)
  3. 同樣使用Arduino IDE編譯韌體
  4. 由四片獨立高頻頭,改為單片四合一高頻頭:簡化接線,並且只需要一支天線(原本每個獨立高頻頭都需要一支天線)
  5. MCU由原本的atmega328p改為STM32f103系列:內建閃存(flash)空間倍增,不需要再為了atmega328p的32kB限制刪減協定數目,且留有支援未來發展的餘裕
  6. 刷新韌體的方式改由USB/TTL (常被稱為FTDI):更新韌體時可以直接使用常見的USB/TTL工具,支援3.3V或是5V,直接在Arduino IDE內編譯並上傳至MCU。不再需要使用較難買的3.3V USBISP與難度較高的ISP上傳工具

截至2016/10,一共有兩個版本的專用電路板,舊版與新版的主要差別大致歸納如下:

新(黑)舊(綠)電路板對照

  1. 增加了部分元件:多了兩根二極管,一顆電源LED
  2. 電路重新佈局;高頻頭焊點由通孔改為單面焊盤,增加背面可用面積,表面黏著元件排列較整齊緊緻,但缺點就是無法使用排針座,將高價的高頻頭以可插拔的方式安裝,只能選擇將高頻頭焊死在電路板上
  3. USB/TTL電壓選擇針腳由2針改為3針:舊版操作方式為,使用3.3V 則接上跳線帽,使用5V 時則不接。新版改為使用3.3V時短接1-2腳,使用5V時短接2-3腳。
  4. GND/RX/TX/VCC韌體更新針腳,由左下移至右上側:這部分更動理由不清楚,但移至右上的明顯可見的缺點為過於接近天線的IPEX座,若將電路板安置在JR背板模組盒內,代表這四根針的存取孔也會很接近外部天線的基座,可能不利於模組盒上蓋製作,尤其是使用3D列印

除以上項目外,據STM32分支的主要開發者指出,新舊版本電路板在功能面上並無差異

設定Arduino IDE編譯環境

以下說明取自 https://github.com/midelic/DIY-Multiprotocol-TX-Module/blob/multi-STM32/README.md#compilation-and-programmation

  • 下載Arduino IDE 1.6.12:每個版本的Arduino IDE之間均存在些微差異,請使用指定版本勿任意使用其他版本替代。Arduino IDE有安裝版(.exe)和免安裝版(.zip),個人喜歡使用免安裝版,直接解壓縮至名稱不同的資料夾即可使用,這樣可以輕易維持多個版本的Arduino IDE且避免版本間的衝突
  • 下載 Arduino STM32 核心:Arduino STM32 是一個開源專案,讓你可以使用Arduino IDE 開發基於 STM32F103 MCU的各項應用

安裝步驟

  1. 安裝或解壓縮Arduino IDE 1.6.12,本處示範使用免安裝版,假設解壓縮至 E:\temp\arduino-1.6.12-windows_STM32\,那麼完成的資料夾結構應該如下圖01_arduino_ide
  2. 將下載回來的Arduino_STM32-master.zip 解壓縮至 E:\temp\arduino-1.6.12-windows_STM32\hardware\,並確定新增的資料夾名稱為 Arduino_STM32 (不是Arduino_STM32-master)02_stm32arduino
  3. 修改 E:\temp\arduino-1.6.12-windows_STM32\hardware\Arduino_STM32\STM32F1\cores\maple\libmaple\usart_f1.c ,將以下區塊程式碼 comment out (“設為標註",在下方區塊的前端加上 /*,後端加上*/就可以將整個區塊設為標註,見下方紅色標示處)

    /*

    void __irq_usart2(void) {
    usart_irq(&usart2_rb, &usart2_wb, USART2_BASE);
    }
    void __irq_usart3(void) {
    usart_irq(&usart3_rb, &usart3_wb, USART3_BASE);
    }

    */

  4. 啟動 Arduino IDE ,打開Boards Manager03_boardsmanager
  5. 在搜尋欄輸入"due",應該只會找到一筆,確認為下圖所示的項目後,按下右側"Install"按鈕安裝04_installdue

至此,編譯環境已經設定完成,編譯時請記得使用以下選項,板子請選 Generic STM32F103C series,有兩種版本,C8 (64k Flash) 和 CB (128k Flash),我使用的是STM32F103CBT6,所以要選下方的,然後上傳方法請務必選 Serial (很重要! )

05_boardtype

使用USB/TTL (FTDI)上傳韌體

USB/TTL (FTDI)與基板接線方式,以及基板跳線帽設定方法說明圖,以新版電路板為例:

imag0632

上傳韌體的方法一般有兩種情形:

  • 使用預先編譯好的韌體(.bin)

下載回來的.bin檔案,可以使用STMicroelectronics原廠提供的工具 STM32 Flash Loader Demonstractor上傳至STM32 MCU,將FTDI連接至基板後,見以下影片示範

  • 自行編譯源碼並上傳

設定方式見前述Arduino IDE編譯環境設定,選擇正確的Com埠後,直接使用Arduino IDE編譯上傳即可,程式碼編譯設定請見程式碼下載與簡易說明

結語

如同舊文章中提到的,此萬用高頻頭專案為遙控模型愛好者開啟了另一扇大門,不再需要因通訊協定而屈就於質感性能不佳的遙控器,而使用STM32 MCU的分支,更進一步擺脫了原有的程式碼空間束縛,僅採用單天線的設計也增加了使用的便利性。總體而言,採用了STM32 MCU的版本成熟度與可用性是更高的。

若真要說STM32版本的缺點,個人認為還是在於四合一高頻頭,這是一把兩面刃,相較於容易取得的獨立高頻頭,四合一高頻頭目前還是淘寶賣家一家獨賣,一家斷貨即全球斷貨,這顯然不是一個理想的狀態,雖說這獨家(獨賺)生意也實在想不出不做的理由就是了。

外接萬用控模組範例-使用專用電路板製作JR相容背板抽換模組

前言

這個開源方案的發展初期,許多rcgroups玩家開始用arduino pro mini發揮各種創意,製作出發射模組,但受限於arduino pro mini 本身的大小,與萬用洞洞板的繞線方式,如果想做出適合插入JR背板抽換模組槽的尺寸,勢必無法將四片獨立的高頻頭全部裝上,然而少了任何一片勢必都讓原本的萬用控理念打折,這個狀況在專用電路板(如下圖)出現後獲得了初步改善。

wp-1469840778686.png
這片專用電路板的版本為v2.3c,正面包含了A7105(左側,焊接)、nRF24L01(右側,焊接),cc2500(中央第二層,可插拔)

以及背面的CYRF6936(中央,焊接)


大致的概念就是找出收容四片獨立模組最有效率的排列方式,然後將arduino pro mini與其他必要元件打散分布並優化電路,但須注意專用電路板無法使用USB/TTL燒錄韌體,必須使用USBISP透過右上方的 6pin ISP針腳燒入

Multi ISP Pinout

(相片取自rcgroups)

16位編碼開關的位置 0 用於 SPI 模式,其他1~F分別對應 _config.h 定義的1~15號協定,詳情請見程式碼下載與簡易說明,此處不再重複。

發展至此,此方案算是有了相對較成熟的硬體設計,但是因為使用四片獨立高頻頭,因此必須使用四隻獨立天線,因此rcgroups的玩家又發揮了創意,製作出各類的天線排列方式,但是天線一多雖然氣勢很威,收納卻很麻煩

(相片取自rcgroups)

設計專用電路板的玩家接著想出了使用天線切換晶片的方式,讓四片高頻頭共用一支天線,但是RF設計真的有太多眉角,這片新的 v3.4d 電路板一直遭遇到各種訊號問題處於難產的狀態,最終只有少數開發者與玩家拿到,未能正式發布。

3.4d

我不是很在意在X9D上挖洞,所以直接用了4db的pcb天線,在X9D背板模組槽上側挖了個洞,將天線引入X9D機殼內,藏在上方左右兩側。個人只會使用萬用控操作套裝或碳刷小機,所以使否使用SMA大型天線以增加有效距離不是重點,自然以整體美觀整潔優先,需要飛長距離或是高價機種,X9D本身的ACCST協定就非常可靠了,何必捨近求遠?


再者,DEVO 10之類改裝高頻頭,其實一樣也是將天線內藏,使用的天線增益未必有4db這麼高。

強國成品

腦筋動得很快的強國人,基於此開源方案製作出了改良版的硬體,特色如下:

  1. 使用自行設計的電路,將四個高頻頭整合在一片電路板上,連接介面整合為12/13個腳位(初期版本為12腳,近期新版為13腳)
  2. 四合一高頻頭同時內建天線切換晶片,只需要一支天線
  3. 可單獨購買四合一高頻頭(需自行製作電路基板),或是帶有基板的完整發射模組,可直接插入X9D背板模組插槽

這個強國產品的價值在於四合一高頻頭的整合電路,但一如往常,在上市初期也被發現了一些設計缺失,造成部分協定的通信距離過短或是數據回傳無法使用等問題,但是近期新推出的版本據報已經解決了這些問題。

Taobao01

完整模組+高頻頭(圖片取自淘寶賣場)

taobao02

ˋ4合1高頻頭(圖片取自淘寶賣場)

因為這片四合一高頻頭的成熟與商品化,間接導致了前述v3.4d專用電路板胎死腹中。

那麼這個強國版本就真的是最終的夢幻產品了嗎? 其實也未必,關鍵還是在於ATmega328p的硬體限制,儲存空間有限,目前這個專案所支援的協定,已經超出了ATmega328p所能提供的空間,必須在編譯韌體時捨去部分協定,以塞進有限的儲存空間裡。

此開源方案的主要開發者之一也表明了下一代的軟硬體設計將會採用強國四合一高頻頭搭配STM32的MCU,主要優點除了較強的運算能力,主要還是在於更大的儲存容量,可以同時容納目前支援的所有所有協定(而且剩餘空間還很多!)。等到時機成熟會再另文介紹。

韌體燒錄

韌體的選項調整與編譯請見程式碼下載與簡易說明,這裡只針對使用USBISP燒錄韌體增加說明。首先你需要一支3.3V的USBISP,若沒有特別指明,一般買到的USBISP幾乎都是5V的,使用5V版本USBISP有燒毀高頻頭的風險,請務必注意!!

USBISP.jpg

3.3V USBISP,外殼即標有腳位定義

我自己製作了一條6pin轉接線方便連接

6pinTo10pin

請參照程式碼下載與編譯選項簡易說明調整編譯選項,在Arduino IDE中編譯原始碼時,請將Board與Processor設定如下圖:(2016/12/14更新)

arduinoide_03

請改按這個Verify按鈕(不是Upload !),Arduino IDE會編譯並確認成果可燒入ATmega328p中,韌體太大(超過30KB時) 依舊會報錯

arduinoIDE_01

編譯驗證通過後,Arduino IDE下方的訊息視窗會顯示.hex檔案的路徑,請複製這個路徑,待會會用到

arduinoIDE_02

將USBISP與萬用控的ISP針腳正確接上連接線,插入電腦USB埠後,在電腦上打開progisp 2.0,這個工具買USBISP時賣家應該都會提供,如果沒有,請到檔案區下載,按下圖說明確認各項選項

progisp01.png

點選Load Flash,然後找到剛剛記下路徑中的Multiprotocol.ino.hex,點選確定

載入完成後點下Auto按鈕,觀察下方進度條與訊息,確認看到燒錄成功的訊息,就算完工了

progisp02.png

如果還是不知道怎麼做,請參考這段示範影片

Frsky X9D+設定範例附註

如同前面提到,Frsky X9D+可以透過SPI介面與萬用高頻頭連結,直接在液晶面板上操作對頻與協定切換等功能,不需要使用編碼開關,也不必受到15組預先指定協定的數量限制,但這有個先決條件,目前仍必須使用特製版本的OpenTX 韌體。OpenTX的協作開發者之一plaisthos已經將此功能納入OpenTX 2.2之中,但OpenTX 2.2目前仍處於早期開發階段,正式發布的日期還未定,而官方並不希望把這些功能加到2.1.*的分支,為了讓眾飛友可以早日可用,他便把這些功能自行移植回2.1.* 並編譯出X9D, X9D+與X9E的 2.1.8 韌體,下載位置在:

http://plaisthos.de/opentx/

更新方法同一般的OpenTX刷韌體方式,透過Companion TX更新即可

要啟用這功能,首先建立一個新模型,然後將內建模組關閉,外接模組設為MULTI,右側選項直接選擇協定名稱,圖中展示的是JJ1000使用的V2x2協定

OpenTX_Multi.jpg

以X9D+搭配JJ1000為例,以下是對頻步驟

  1. JJ1000送電
  2. X9D開啟電源,進入模型的設定頁面,游標移動到外接模組的bind按鈕
  3. 按bind一次,觀察JJ1000燈號開始變化,再按一次bind
  4. JJ1000燈號恆亮,對頻完成

OpenTX的bind是以"模式切換"的方式運作,換句話說,按下bind會進入對頻模式,要再按一次才會離開對頻模式,不要傻傻的按著不放,OpenTX在對頻模式下也會發出小鳥叫聲提醒你。

另外需特別注意的是,目前plaisthos只針對OpenTX 2.1.8韌體部分做了這種修改,並沒有製作特別版的Companion TX,如果使用官方版Companion TX 2.1.8來編輯OpenTX 2.1.8特製版本的模型,尤其是外接模組設定為MULTI的模型,可能會把這些模型的模組設定搞亂,因為官方版的Companion TX並不"認識"MULTI這個選項,這點必須特別注意。

附註:如果刷了特製版的OpenTX 2.1.8之後還是很希望使用Companion TX來編輯X9D的設定,目前Companion TX 2.1的 nightly build 應該已加入multi module的支援,不會再把這部分的設定值搞亂。但必須提醒,nightly build裡包含了程式碼分支中的所有新功能(和可能的bug!) 使用時務必小心,記得先備份設定。

外接萬用控模組範例-使用Arduino Pro Mini 5V/16Mhz + CYRF6936

版權聲明:本文為介紹性質,所有相關資訊引用自DIY-Multiprotocol-TX-Module的 Github專案網頁,著作權屬於原作者

前言

如同前文提到,製作外接式萬用控的硬體,有兩種做法,本文要介紹的,是較為簡單的作法,使用一片Arduino Pro Mini 5V/16Mhz,加上幾樣零件與高頻頭,就可以製作出你需要的外接模組了

注意事項:

  1. Arduino Pro Mini有兩個版本,5V/16Mhz 和 3.3V/8Mhz,這個方案使用的是5V/16Mhz 版本,但是供電部分使用3.3V,原因後述。不能使用 3.3V/8Mhz 的版本,否則程式運作可能發生不可預期的錯誤。
  2. 此萬用控方案支援的四種高頻頭,其中nRF24L01/A7105/CC2500的運作電壓都是3.3V,這也是我們雖然使用5V/16Mhz版本的Arduino Pro Mini,但須降壓以3.3V供電的原因,如果以5V供電給Arduino,可能會燒毀高頻頭,必須特別注意。(本例子中的CYRF6936是一個特例,這是一顆華科爾出品的DEVO 升級模組,,它的運作電壓是5V,一般市面上其他的CYRF6936方案應該還是3.3V居多)

材料清單

  1. Arduino Pro Mini 5V/16Mhz 1片
  2. AMS1117  5V與3.3V各一顆
  3. 16V 22uf 電容3顆
  4. 4位指撥開關或是16位旋轉編碼開關1顆
  5. 按鈕開關1顆
  6. LED一顆
  7. 10k,2.2k與20k電阻各一顆
  8. 高頻頭一顆,此處使用CYRF6936,詳細型號為DEVO 8/12升級模塊 (料號:WK-DEVO-S-MOD,華科爾出品,用來將DEVO 8/12 升級為8s/12s)
  9. 排針
  10. 萬用電路板一片
  11. 3.3V的USB轉TTL

硬體製作

  1. 四合一模組線路圖如下,注意其中有部分腳位是四種高頻頭共用的schem
  2. 為了便於閱讀,我將各高頻頭用到的線路標示出來,分成四張

schem_cyrf6936圖1  CYRF6936

schem_nrf24L01

圖2   nRF24L01

schem_A7105

圖3   A7105

schem_CC2500

圖4   cc2500

  1. 使用萬用電路板製作的就是共用電路的部分,以下是共用電路以及完成品的正反面schem_commonboard02board01
  2. 成品的共用電路板搭配選擇需要的高頻頭型號,以圖1至圖4標示的方式接線,此處示範的是CYRF6936,故採用圖1的接法board03
  3. 其中CYRF6936模組接腳定義如下CYRF6936-DEVO_upg_pinout

韌體編譯與燒錄

Arduino Pro Mini沒有內建USB介面,所以必須自備一個USB轉TTL模組,也就是一般俗稱的FTDI (但其實FTDI只是一個晶片廠商,產品為USB/TTL晶片FT232,其他類似的產品還有CP2102與CH340/CH341等)。

因為USB/TTL連接Arduino Pro Mini時會一併提供電力,而如同前面提到的,這些高頻頭都必須使用3.3V供電,因此這邊使用的USB/TTL也必須是3.3V的,否則有燒毀高頻頭的可能,而一般常見的USB/TTL多半都是5V的,購買時記得與賣家確認。

USBTTL.jpg

韌體程式碼下載,細部介紹與可調整選項請見程式碼下載與簡易說明

使用Arduino IDE 1.6.12 (2016/12/14更新)  開啟Multiprotocol資料夾內Multiprotocol.ino,整個專案所需要的檔案都會自動載入。接著將USB/TTL與Arduino Pro Mini正確連接。

如下圖選擇正確的arduino型號,時脈與連接埠後,按下上傳就可以完成燒錄arduino_ide01

測試

此處的測試使用的是STORMRC S603 接收機,具6通道PPM輸出,支援DSM2/DSMX協定,在_config.h中,編號6的位置預設是DSM2協定,所以我們將編碼開關的第2與第3位設為On,如果使用旋轉編碼開關,則應該轉至6的位置,搭配APM+Misson Planner的測試影片如下

注意事項

  1. 首先要強調的是,我並非電子科班出身,對於電路設計也是門外漢,此處示範的只是一個實測可行的做法,同樣是這些零件,一定存在更有效率/簡潔的排列與連接方式,這些就請各位自由發揮了
  2. Atmega328p MCU的儲存空間有限,以目前此專案的規模來說,無法將所有的協定一次全部燒錄進去,必須取捨,建議將用不到的協定或是高頻頭直接comment掉,否則編譯是會失敗的,類似訊息如下圖:arduino_ide02

程式碼下載與編譯選項簡易說明

版權聲明:本文為介紹性質,所有相關資訊引用自DIY-Multiprotocol-TX-Module的 Github專案網頁,著作權屬於原作者

下載方式

本開源方案的專案資料可在Github的這個頁面找到

https://github.com/pascallanger/DIY-Multiprotocol-TX-Module

下載頁面左側可以選擇下載的程式碼版本,預設是最新的版本,除非很確定最新版本有問題必須使用舊版,否則不建議回頭下載舊版,直接使用master中的最新版本即可

Github_01

如下圖,點選右側的 Download ZIP就可以將程式碼包成一個.zip檔案下載回來

Github_02

資料夾結構

將下載回來的zip檔案解壓縮,解開時請務必完整解開所有檔案,並且保留原有資料夾結構,結果如下圖,Multuprotocol資料夾內就是我們需要的程式碼,而PCB v2.3d 資料夾則是 採用ATmega328p MCU專用電路板的設計檔案,可以交給電路板製造廠商生產專用電路板。

Github_03

可調整選項

程式碼編譯方式按照使用的底/基板會有些微差異,會在專文中提到,這邊只針對程式碼部分做簡單說明。

目前版本的 Multiprotocol 資料夾中共有36個檔案(之後可能因為增加協定變多),進入點為Multiprotocol.ino,也就是在Arduino IDE中開啟的主要檔案,其他檔案會自動載入。

此方案所有可調整選項都在_Config.h中

//Uncomment your TX type

#define TX_ER9X_AETR //ER9X AETR (9882012µs)

//#define TX_ER9X_TAER //ER9X TAER (9882012µs)

//#define TX_DEVO7 //DEVO7 EATR (11201920µs)

//#define TX_SPEKTRUM //Spektrum TAER (11001900µs)

//#define TX_HISKY //HISKY AETR (11001900µs)

按照控的硬體規格移除前方的//符號,啟用該項設定,主要差異在於通道順序和端點輸出,X9D使用TX_ER9X_AETR應沒有問題。

注意,同時只能啟用其中一項

//Comment if a module is not installed

#define A7105_INSTALLED

//#define CYRF6936_INSTALLED

//#define CC2500_INSTALLED

#define NFR24L01_INSTALLED

如果你使用的是淘寶的成品模組或是使用STM32 MCU+四合一高頻頭,那請將四種高頻頭都設為啟用,只有使用ATmega328p+獨立高頻頭的配置才需要按照已安裝的高頻頭移除前方的//符號,啟用該高頻頭相關的設定。

注意,啟用越多會載入越多程式碼,占用越多空間,只啟用需要的就好

//Comment a protocol to exclude it from compilation

#ifdef A7105_INSTALLED

#define FLYSKY_A7105_INO

#define HUBSAN_A7105_INO

#endif

#ifdef CYRF6936_INSTALLED

#define DEVO_CYRF6936_INO

#define DSM2_CYRF6936_INO

#endif

#ifdef CC2500_INSTALLED

#define FRSKY_CC2500_INO

#define FRSKYX_CC2500_INO

#define SFHSS_CC2500_INO

#endif

#ifdef NFR24L01_INSTALLED

#define BAYANG_NRF24L01_INO

#define CG023_NRF24L01_INO

#define CX10_NRF24L01_INO

#define ESKY_NRF24L01_INO

#define HISKY_NRF24L01_INO

#define KN_NRF24L01_INO

#define SLT_NRF24L01_INO

#define SYMAX_NRF24L01_INO

#define V2X2_NRF24L01_INO

#define YD717_NRF24L01_INO

#define MT99XX_NRF24L01_INO

#define MJXQ_NRF24L01_INO

#define SHENQI_NRF24L01_INO

#define FY326_NRF24L01_INO

#endif

針對各個高頻頭定義目前支援的協定,預設是全部,但如果前面把四個高頻頭全部啟用,這邊再載入所有協定,編譯出的韌體會超出ATmega328p的記憶體( 30 KB )大小,Arduino IDE會回報錯誤。所以有兩個原則:

  1. 只啟用實際有安裝的高頻頭
  2. 關閉(在該行最前方加上//)不需要的協定

可以多試幾次,找出不超出記憶體限制所能容納的最大/最適合協定組合。若你使用的是STM32 MCU的基板,則沒有這個限制,可以啟用所有協定

(2016/12/14更新)

ATmega328p MCU的程式碼空間事實上有32KB,其中2KB空間被 bootloader 佔用,所以只剩下 30 KB可用,但因為在這個專案中我們是使用USBISP刷入韌體,並不需要 bootloader ,因此可以把 bootloader 佔用的 2KB 空間釋放出來,使用完整的 32 KB 儲存空間,雖然仍舊無法容納所有協定 (目前約需要47 KB),但不無小補,詳細作法請見此文

如何完整使用ATmega328p的 32 KB空間?

再下方則是16位編碼開關位置1~F (0保留給SPI模式),對應的15種協定,可自行依需要調整,不是使用X9D的飛友,可以使用ppm輸出搭配這15種協定,將模組外接:

Github_04

這區塊的下方便列出了各主協定與可用的副協定名稱,例如MODE_DSM2就有DSM2與DSMX兩種副協定可指定

Github_05

調整完成後,編譯上傳到基板即可,詳細步驟請見專文說明 中的韌體燒錄段落。

以下列出幾個可以關閉以節省程式空間的選項:

#define TELEMETRY 數據回傳,只有部分協定支援,實用性有限,可以關閉(在最前方加上//)

#define ENABLE_SERIAL 如果使用PPM模式,則可以關閉這個選項(在最前方加上//)

#define ENABLE_PPM 如果使用SPI模式,可以關閉這個選項(在最前方加上//)

(ENABLE_SERIAL 與 ENABLE_PPM 按照實際狀況啟用一個即可,不需兩個都打開)

編譯注意事項

本開源方案目前支援的Arduino IDE版本為1.6.12 (2016/12/14更新),請不要使用其他版本,以免編譯過程中出現各種奇怪的錯誤

Windows免安裝執行檔下載連結:

http://arduino.cc/download_handler.php?f=/arduino-1.6.12-windows.zip

Windows 安裝檔下載連結:

http://arduino.cc/download_handler.php?f=/arduino-1.6.10-windows.exe

其他系統版本請至此網頁上 1.6.12 區塊自行下載

https://www.arduino.cc/en/Main/OldSoftwareReleases#previous

***2.6.1 OpenTX 2.1 Telemetry的改變

目前網路上很多關於OpenTX的示範影片,都是基於稍早2.0.*版本錄製的,如果你目前使用OpenTX 2.1.*版本,應該會發現跟著做到數據回傳(Telemetry)的時候,怎麼整個都不一樣了?

2.1版最大的改變之一就是重新設計的Telemetry系統,感應器改為動態偵測,必須先讓偵測並辨識到這些感應器,才能選用它們。在OpenTX Companion方面也是一樣,必須先在遙控器上偵測完感應器,然後在OpenTX Companion中讀入遙控設定,才能在Companion的 Telemetry 分頁看到這些感應器

如果遙測數據的來源不是frsky的遙測配件,而是來自第三方的飛控系統,例如Cleanflight,那就必須先完成飛控與Frsky接收機之間的數據實體接線,開啟飛控的Telemetry回傳功能,開始送出資料後,再回到遙控器進行後續操作

以下為影片示範如何在X9D+/OpenTX 2.1.7的環境下,使用SP Racing F3 / D4R II 接收,設定Cleanflight數據回傳功能

(2.1) OpenTX Companion 軟體與X9D+軔體更新方式

總整理文連結

https://www.facebook.com/groups/350319041794981/permalink/557431121083771/

曾見過老外將 OpenTX Companion 與 X9D+ 的關係,比喻為iTunes 與 iPad/iPhone,個人覺得挺貼切的。

OpenTX Companion 是一套運行於電腦端的軟體(支援Windows/Mac/Linux),主要功能如下:

1. 遙控器韌體更新與備份
2. 遙控器模型設定編輯與備份
3. 提供全功能遙控器模擬器,可以直接在電腦上調整所有設定,並且經由模擬器進行測試,確認無誤後再將設定寫回遙控器
CompanionTX_01

CompanionTX_02

X9D+雖然功能強大,但是單就遙控器上的設定介面來說,按鈕的排列和操作方式,都算不上方便與直覺,遠不如近期常見的滾輪搭配確認鈕的設計。借助 OpenTX Companion 這樣的軟體,可以將大部分的設定工作在電腦上完成,那幾顆按鈕在飛場臨時做小幅度調整,雖不方便,但也可以接受了

要用 OpenTX 遙控器,請務必安裝並試試 OpenTX Companion,保證好用!

操作示範影片

OpenTX Companion 基本操作與X9D連線方式,有中文字幕說明

https://www.facebook.com/groups/350319041794981/permalink/560676304092586/

OpenTX Companion 整體功能介紹

http://open-txu.org/looking-over-companion-tx-take-2-the-companion/

韌體更新示範