DSM2 讀書心得

這一陣子在RC group上有讀了一些關於DSM2的東西, 主要有兩篇: 1. Build your own DSM2 transmitter module (its working!) 2. DSM2 compatible TX module 非常有意思, 跟大家分享一下.... 之前有一陣子 大家都在討論 2.4G latency的事情, 說PPM多落伍多落伍, 其實如果看了AM-FM-PPM-PCM-digital 2.4G的演變, 會覺得PPM其實算是一代功臣(其實latency最大的是PCM,但是大家當時可是把她當寶啊)
DSM2不論他科技的程度如何, 已經大量攻下市場, 再說去哪找那麼便宜的接收, 一顆6動不到300NT.....以前72PPM多要1000NT.... DSM2也有出DM9/DM8的模組, 給FF9 or 9XII等來改, 基本上是用了一顆MCU解開PPM, 再丟進去RF module裏, 只是不知道為什麼, Spektrum的DM8只能解8 channel, DM9才能解9 channel, 聽說解9以下的會出問題.....也許是市場考量吧.... 老外拿起了MCP的小四動, 拆開, 一步一步解出了DSM2的接收介面跟格式,細節請參照原鍊結, 這算是很多人的努力: UART, boudrate 125000(這算是特殊一點了), 8,N,1 拆了我的LP4DSM, 跟著老外接, 接到我的3.3V UART轉USB, 正確的設定terminal, 125000,8,N,1 出現了!!

00 00 00 AA 05 FF 0A 1B 0D E3 13 54 14 AA
00 00 00 AA 05 FF 0A 1B 0D E3 13 54 14 AA
00 00 00 AA 05 FF 0A 1B 0D E3 13 54 14 AA
00 00 00 AA 05 FF 0A 1B 0D E3 13 54 14 AA
00 00 00 AA 05 FF 0A 1B 0D E3 13 54 14 AA
00 00 00 AA 05 FF 0A 1B 0D E3 13 54 14 AA
根據老外的記載, 00 00是 header bytes, 後面各是各channel的high/low bytes, 所以這隻小四動其實是有6動的, 那兩動藏在哪呢? 把 兩隻sticker往下按就會發現了...很有趣..... 把每個channel的high/low bytes組起來以後, 數值會介於0x0000 跟0x03FF,代表每一動的10bits的resolution, 以DM9來說, 0x0000對應成0.8ms的PPM, 0x03FF則是代表2.2ms. 這個數值也許會根據module得不同會有不同....
前面的header也是大有文章, RCgourp 一位德國人的PO文
DSM2/DSMX mode: 18 00 AA AA BB BB CC CC DD DD EE EE FF FF
DSM2/DSMX mode, range test: 38 00 AA AA BB BB CC CC DD DD EE EE FF FF
DSM2/DSMX mode, bind: 98 00 00 00 05 FF 09 FF 0D FF 10 AA 14 AA
DSM2 mode: 10 00 AA AA BB BB CC CC DD DD EE EE FF FF
DSM2 mode, range test: 30 00 AA AA BB BB CC CC DD DD EE EE FF FF
DSM2 mode, bind: 90 00 00 00 05 FF 09 FF 0D FF 10 AA 14 AA
France mode: 00 00 AA AA BB BB CC CC DD DD EE EE FF FF
France mode, range test: 20 00 AA AA BB BB CC CC DD DD EE EE FF FF
France mode, bind: 80 00 00 00 05 FF 09 FF 0D FF 10 AA 14 AA
所以可以推測, module都是同一個, 裏面的firmware會根據送進來的資料去處理RF該做的事.... 也有人推測第一個byte裏的每個bit可能是.... bit 7 - 1 -> bind mode enable bit 6 - unknown, always 0 bit 5 - 1 -> range test enable bit 4 - 1 -> normal mode, 0 -> france mode bit 3 - 1 -> DSMX enable bit 2 - unknown, always 0 bit 1 - unknown, always 0 bit 0 - unknown, always 0 了解了這麼多, 用 MCU來解PPM, 管你是6動, 8動,9動, 應該都是可以做的....再從uart送進DSM的RF module.... 這樣應該做得到.... 最佳選擇當然是arduino....當然, 人家也寫好了....當然....你也可以加東加西.... 我看大約有3分arduino的版本在第一個rc group的link,我個人是比較喜歡C2PO公布的這個, 原因是單純, 易懂 他的原始計畫是把futaba接上LP4DSM的RF module... 這是它拆下來接線的圖, 那個藍線, 我不知道是啥,沒管他.... 方孔那排中間是ground, 右邊是3.3V,左邊是他的RX....要注意的是上面那一排圓孔, RX跟3.3V相反, 所以要注意!!
下圖是整個的接線圖:
他用的是3.3V 8Mhz的Pro Mini 328, 其實這個code很小, 不須這麼大, 如果你要用常見的5V 168也可以, code裏面 tick_per_us要改成2.... 但是最好是用3.3V的, 因為DSM的RF module是3.3V, 使用3.3V就可以直接接.... C2PO的code 剛好我也有一片3.3V 328, 真不知道當時怎麼會買這片, 依樣畫葫蘆....搞定!!
再來就是努力找個module的殼, 用力的把東西都塞進去.....再外接一隻大一點的天線.....這個RF module是low power的, 只好拿大隻的天線來補.... 這個code比較有彈性, 不管是FF9或是3動的3PK都可以讀....
那那個第二個link在幹嘛? 這個就更猛了, 有人解開了DSM2的protocol, 非常值得追蹤...... 如果你有DSM衛星天線, 你會覺得那個LP4DSM的RF module很眼熟, 一樣吧...起碼我的hobbyKing 衛星接收是一樣的..... 有個老外, 把小橘子接收改成了Low Power的發射模組.... 當然他也搞定了DSM的protocol....

留言

  1. Hello Henry

    看了你的文章 "DSM2讀書心得" 覺得很有趣,一直以來,覺得dsm2很神,很厲害,但經由您的文章分享,也能知道它一點點知識....
    逛過很多論壇,好像少有這類技術上的文章..至少在國內兩大模型網沒看見!!
    自從2.4G變主流後~~很討厭的是,每一家都不能通用,買了A家的控,就得用A家的接收,某種程度是種資源浪費..

    可否~想請教您一個問題
    DSM2接收機,有可能自己DIY嗎?
    用現有成品畫出電路,依樣畫葫蘆方式DIY,
    會有哪些困難度?
    我知道現在買一個很便宜,山寨版價錢低到一顆一百多元
    買著買著,自己也有7-8顆DSM2接收!

    Thanks..

    回覆刪除
    回覆
    1. 作者已經移除這則留言。

      刪除
    2. DSM2接收機, DIY是可行的....
      但問題不在硬體, 你還要從頭到尾搞清楚DSM2得RF coding方式, 才能通....

      RC group上有人DIY了TX, RX應該也不是問題吧...但是要下蠻多苦工的...

      http://www.rcgroups.com/forums/showthread.php?t=1482559

      刪除
  2. 我想也是~~問題不在硬體,而是在於軟體.
    找了一下,國外和對岸,網上的資料,似乎很少
    甚至連dsm2接收用的CYPRESS CYRF69103這顆單晶片相關討論也很少.
    可能要看..哪位高手願意來分享才有可能實現.

    題外話~~現今好玩,有趣的電路幾乎都是單晶片.
    再看看,我們遙控模型的電子配備,全都是用單晶片達成所要的功能.

    回覆刪除

張貼留言

這個網誌中的熱門文章

Heltec ESP32+OLED+Lora, hardware testing

micro SD card for ESP32, on lolin32 with OLED and heltec 32 lora oled

Install Network Time Protocol(NTP) on BeagleBone with Angstrom linux and set local time zone