मैं अपने प्रश्न का उत्तर देने की स्वतंत्रता ले रहा हूं क्योंकि मुझे इसका अधिकांश पता चल गया है और यह मेरे निष्कर्षों को साझा करने का एक अच्छा तरीका है। मुझे शुरू करने के लिए एक जगह देने और कुछ विचारों को आज़माने के लिए ओलिन लेट्रोप के लिए मेरा धन्यवाद, लेकिन अंततः, प्रोटोकॉल ओलिन के अनुमान से काफी अलग था, इसलिए मैंने इस उत्तर को पोस्ट किया।
अद्यतन: मैंने पिछले 8 बिट्स के बारे में एक अनुवर्ती प्रश्न पोस्ट किया था, जो मुझे पूरी तरह से समझ में नहीं आया था, और डेव ट्वीड ने यह पता लगाया । मैं यहां विवरण शामिल करूंगा, इसलिए यह उत्तर पूर्ण प्रोटोकॉल युक्ति के रूप में काम कर सकता है, लेकिन डेव के उत्तर की जांच करें।
मुझे यह पता लगाने के लिए कुछ अलग चीजों की कोशिश करनी थी, लेकिन मुझे पूरा विश्वास है कि मुझे यह मिल गया है। अजीब तरह से, मुझे इस प्रोटोकॉल के समान कहीं और कुछ भी नहीं मिला है, लेकिन यह बहुत ही सामान्य प्रोटोकॉल हो सकता है, जिसके बारे में मुझे अभी पता नहीं है।
वैसे भी, यहाँ मैं क्या पाया है:
प्रोटोकॉल / एन्कोडिंग
दोनों दालों और बीच में रिक्त स्थान का उपयोग डेटा को एन्कोड करने के लिए किया जाता है। एक लंबी पल्स / स्पेस बाइनरी एक (1) है, और एक छोटी पल्स / स्पेस बाइनरी जीरो (0) है। दालों को मानक उपभोक्ता अवरक्त 38kHz मॉड्यूलेशन @ 50% शुल्क-चक्र का उपयोग करके भेजा जाता है।
पल्स / स्पेस टाइमिंग मूल प्रश्न में हैं, लेकिन मैं उन्हें यहां पूर्णता के लिए दोहराऊंगा:
Bit Pulse Space
-----+---------+---------
0 | 275µs | 285µs
1 | 855µs | 795µs
सभी µ 10µs अधिकतम।, ± 5 typs टाइप .. यह 16MHz पर एक लॉजिक विश्लेषक के साथ कैप्चर किए गए नमूनों पर आधारित है; मेरे पास एक आस्टसीलस्कप नहीं है, इसलिए मुझे सटीक प्रोफ़ाइल (यानी वृद्धि / गिरावट का समय) नहीं पता है।
पैकेट्स को तब तक दोहराया जाता है जब तक कि कंट्रोल इनपुट लागू नहीं हो जाते हैं और कम से कम 100ms के अंतर पर दिखाई देते हैं।
पैकेट ट्रांसमिशन एक "पल्स 1" प्रस्तावना के साथ शुरू होता है, जो कि निश्चित है और डेटा का हिस्सा नहीं है। निम्न स्थान पैकेट का पहला डेटा बिट एन्कोड करता है, और अंतिम पल्स अंतिम बिट को एन्कोड करता है।
प्रत्येक पैकेट 32 बिट लंबा है, और हर इनपुट में रिमोट कंट्रोल प्रदान कर सकता है। मानों को छोटे एंडियन के रूप में पढ़ा जाता है, अर्थात पहले MSB।
डेटा संरचना
नीचे व्यक्तिगत पैकेट की मूल संरचना है। पिछले 8 बिट्स ने मुझे भ्रमित कर दिया था, लेकिन अब इसका पता लगा लिया गया है (नीचे देखें)।
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
--+---------------------------+-----------+---+-------+-----------
P| Yaw | Throttle | Pitch | T | Chan. | Check
P: Preamble (always a pulse-1), T: Trim, Chan.: Channel
Bit Length Description (see note below)
-----------------------------------------------
0 1 Preamble. High 1
1-6 6 Yaw. Range 0-36 for left-right, 17 being neutral
7-14 8 Throttle. Range 0-134
15-20 6 Pitch. Range 0-38 for forward-back, 17 being neutral
21-22 2 Trim. Left = 1, right = 2, no trim = 0
23-26 4 Channel. A = 5, B = 2, C = 8
27-32 6 Check bits
नोट: रंग मुझे मिले उच्चतम रीडिंग पर आधारित हैं। प्रोटोकॉल बड़ी रेंज में सक्षम है - थ्रॉटल के लिए 255 तक, पिच / यॉ के लिए 63 - लेकिन लगभग आधे पर कैप।
पिच मूल्य 14-21 (समावेशी) से एक डेडबैंड है प्रतीत होता है; केवल ऊपर या नीचे का मान वास्तव में हेलीकाप्टर प्रतिक्रिया करता है। मुझे नहीं पता कि क्या यह यव के लिए समान है (यह बताना मुश्किल है, क्योंकि हेलीकॉप्टर वैसे भी अस्थिर है, और बस अपने आप ही थोड़ा स्पिन कर सकता है)।
यहाँ यह आलेखीय शब्दों में है (मूल प्रश्न में ग्राफ़िक की तुलना करें)
6 चेक बिट्स की गणना पूर्ववर्ती सभी मूल्यों को XOR'ing द्वारा की जाती है। प्रत्येक मान को 6 बिट्स के रूप में माना जाता है। इसका मतलब यह है कि 8-बिट थ्रॉटल वैल्यू के 2 एमएसबी को केवल अनदेखा किया जाता है। अर्थात
check = yaw ^ (throttle & 0x3F) ^ pitch ^ trim ^ channel
प्रैक्टिकल नोट्स
सिग्नल की टाइमिंग और मॉड्यूलेशन को सुपर सटीक होने की आवश्यकता नहीं है। यहां तक कि मेरे Arduino का नॉट-ऑन-ऑल-सटीक टाइमिंग डोडी मॉड्यूलेशन के बावजूद ठीक काम करता है और वास्तविक रिमोट कंट्रोल की तुलना में पल्स / स्पेस ड्यूरेशन पर थोड़ा हिट और मिस करता है।
मेरा मानना है - लेकिन परीक्षण नहीं किया है - कि हेलीकॉप्टर बस पहले सिग्नल के चैनल को खोजेगा। यदि इसे बहुत लंबे समय तक सिग्नल के बिना छोड़ दिया जाता है (कुछ सेकंड में), यह अपने "खोज" मोड पर वापस जाने के लिए प्रकट होता है, जब तक कि यह फिर से सिग्नल प्राप्त नहीं करता।
यदि थ्रोटल शून्य है तो हेलीकॉप्टर पिच और जबड़े के मूल्यों की अनदेखी करेगा।
रिमोट कंट्रोल पर बटन-प्रेस के अनुसार ट्रिम कमांड केवल एक बार भेजे जाते हैं। संभवतया ट्रिम मूल्य हेलीकॉप्टर के अपने नियंत्रक में केवल वेतन वृद्धि / घटाव है; यह ऐसा कुछ नहीं है जिस पर रिमोट कंट्रोल नज़र रखता है। इसलिए इसका कोई भी कार्यान्वयन संभवत: उस योजना से जुड़ा होना चाहिए, और केवल सामयिक ट्रिम छोड़ दिया / सही मूल्य भेजें, लेकिन अन्यथा पैकेट में शून्य ट्रिम मूल्य के लिए डिफ़ॉल्ट।
मैं एक किल स्विच होने की सलाह देता हूं जो बस थ्रॉटल को शून्य पर सेट करता है। इससे हेलीकॉप्टर आकाश से बाहर गिर जाएगा, लेकिन यह कम क्षति को बनाए रखेगा जब यह अपने मोटर्स को स्पिन नहीं कर रहा हो। इसलिए यदि आप किसी चीज को क्रैश या हिट करने वाले हैं, तो गियर को मारने या ब्लेड को तोड़ने से बचने के लिए किल स्विच को हिट करें।
मूल रिमोट कंट्रोल के IR LED में> 900nm तरंग दैर्ध्य दिखाई देता है, लेकिन मुझे ~ 850nm LED के उपयोग से कोई समस्या नहीं है।
हेलीकॉप्टर का आईआर रिसीवर ठीक है, लेकिन सुपर संवेदनशील नहीं है, इसलिए आपका आईआर स्रोत जितना बेहतर होगा, उतना बेहतर होगा। रिमोट कंट्रोल श्रृंखला में 3 एलईडी का उपयोग करता है, तर्क द्वारा उपयोग किए गए 5V रेल के बजाय 9V रेल पर बैठा है। अपने वर्तमान ड्रॉ की बहुत सटीक जाँच नहीं की है, लेकिन मैं इसे 50mA हूँ।
नमूना डेटा
यहाँ किसी भी दिलचस्पी के लिए पैकेट का एक गुच्छा है (हाँ, मैंने एक डिकोडर को स्क्रिप्ट किया है; मैंने यह सब नहीं किया था)। चैनल ए पैकेट मूल प्रश्न में ग्राफ़ के समान कैप्चर से आता है।
Channel A
Yaw Throttle Pitch Tr Chan Check Description
-----------------------------------------------------------
000100 10000100 000000 00 0101 000101 Left Mid + Throttle
000000 10000110 010001 00 0101 010010 Left Max + Throttle
100001 10000110 000000 00 0101 100010 Right Mid + Throttle
100100 10000100 010001 00 0101 110100 Right Max + Throttle
010001 00000000 001011 00 0101 011111 Forward Min
010001 00000000 000000 00 0101 010100 Forward Max
010001 00000000 011000 00 0101 001100 Back Min
010001 00000000 100101 00 0101 110001 Back Max
010001 00000000 010001 01 0101 010101 Left Trim
010001 00000000 010001 10 0101 100101 Right Trim
010001 00000011 010001 00 0101 000110 Throttle 01 (min)
010001 00010110 010001 00 0101 010011 Throttle 02
010001 00011111 010001 00 0101 011010 Throttle 03
010001 00101111 010001 00 0101 101010 Throttle 04
010001 00111110 010001 00 0101 111011 Throttle 05
010001 01010101 010001 00 0101 010000 Throttle 06
010001 01011111 010001 00 0101 011010 Throttle 07
010001 01101100 010001 00 0101 101001 Throttle 08
010001 01111010 010001 00 0101 111111 Throttle 09
010001 10000101 010001 00 0101 000000 Throttle 10 (max)
Channel B
Yaw Throttle Pitch Tr Chan Check Description
-----------------------------------------------------------
000000 10000110 010001 00 0010 010101 Left Max + Throttle
100100 10000110 010001 00 0010 110001 Right Max + Throttle
010001 00000000 001001 00 0010 011010 Forward Min
010001 00000000 000000 00 0010 010011 Forward Max
010001 00000000 010111 00 0010 000100 Back Min
010001 00000000 100110 00 0010 110101 Back Max
010001 00000000 010001 01 0010 010010 Left Trim
010001 00000000 010001 10 0010 100010 Right Trim
010001 00000001 010001 00 0010 000011 Throttle Min
010001 00110100 010001 00 0010 110110 Throttle Mid
010001 01100111 010001 00 0010 100101 Throttle High
010001 10001111 010001 00 0010 001101 Throttle Max
Channel C
Yaw Throttle Pitch Tr Chan Check Description
-----------------------------------------------------------
000000 10000101 010001 00 1000 011100 Left Max + Throttle
100100 10000101 010001 00 1000 111000 Right Max + Throttle
010001 00000000 001010 00 1000 010011 Forward Min
010001 00000000 000000 00 1000 011001 Forward Max
010001 00000000 010111 00 1000 001110 Back Min
010001 00000000 100110 00 1000 111111 Back Max
010001 00000000 010001 01 1000 011000 Left Trim
010001 00000000 010001 10 1000 101000 Right Trim
010001 00000001 010001 00 1000 001001 Throttle Min
010001 00110100 010001 00 1000 111100 Throttle Mid
010001 01100110 010001 00 1000 101110 Throttle High
010001 10000101 010001 00 1000 001101 Throttle Max
जैसा कि ऊपर उल्लेख किया गया है, पिछले 8 बिट्स का पता लगाया गया है, लेकिन सिर्फ पोस्टर के लिए, यहां मेरे मूल विचार हैं। इसे पूरी तरह से अनदेखा करने के लिए स्वतंत्र महसूस करें, क्योंकि मैं अपने अनुमानों में बहुत गलत था।
अंतिम 8 बिट्स
पैकेट के अंतिम 8 बिट अभी भी रहस्य के एक बिट हैं।
23 से 26 तक के 4 बिट्स पूरी तरह से रिमोट कंट्रोल के चैनल सेटिंग से निर्धारित होते हैं। रिमोट कंट्रोल पर चैनल बदलने से किसी भी तरह से प्रोटोकॉल या मॉड्यूलेशन में बदलाव नहीं होता है; यह केवल उन 4 बिट्स को बदलता है।
लेकिन 4 बिट्स दोहरी है जो वास्तव में चैनल सेटिंग को एन्कोड करने के लिए आवश्यक है; केवल तीन चैनल हैं, इसलिए 2 बिट्स काफी हैं। इसलिए, ऊपर संरचना विवरण में, मैंने केवल पहले 2 बिट्स को "चैनल" के रूप में लेबल किया है, और अन्य दो को "एक्स" के रूप में लेबल किया गया है, लेकिन यह एक अनुमान है।
नीचे प्रत्येक चैनल सेटिंग के लिए प्रासंगिक बिट्स का एक नमूना है।
Chan. Bits 23-26
-----+-------------
A | 0 1 0 1
B | 0 0 1 0
C | 1 0 0 0
असल में, चैनल सेटिंग को प्रसारित करने के लिए ज़रूरत से ज़्यादा 2 बिट्स हैं। हो सकता है कि बाद में अधिक चैनलों के लिए अनुमति देने के लिए प्रोटोकॉल को 4 बिट्स अलग रखा गया हो, या इसलिए प्रोटोकॉल का उपयोग पूरी तरह से अलग-अलग खिलौनों में किया जा सकता है, लेकिन मुझे बस यह नहीं पता है। बड़े मानों के लिए, प्रोटोकॉल अतिरिक्त बिट्स का उपयोग करता है जिन्हें बाहर छोड़ा जा सकता है (yaw / throttle / पिच प्रत्येक कम बिट के साथ मिल सकता है), लेकिन ट्रिम के लिए - जिसमें 3 राज्य भी हैं - केवल 2 बिट्स का उपयोग किया जाता है। तो किसी को शक हो सकता है कि चैनल भी सिर्फ 2 बिट्स का है, लेकिन इसके लिए अगले 2 को छोड़ दिया जाता है।
दूसरी संभावना यह है कि पैकेट का चेकसम 8 बिट लंबा है, जिसकी शुरुआत "एक्स बिट्स" से होती है, और - चेकसमिंग मैजिक के माध्यम से - वे बस किसी भी तरह हमेशा चैनल सेटिंग को दर्शाते हैं। लेकिन फिर से: मुझे नहीं पता।
और बोलना: मुझे पता नहीं है कि उन चेक बिट्स कैसे बनते हैं। मेरा मतलब है, वे बिट्स चेक कर रहे हैं , क्योंकि वे किसी भी नियंत्रण इनपुट के अनुरूप नहीं हैं, और यदि मैं उनके साथ फिडेल करता हूं तो हेलीकाप्टर जवाब नहीं देता है। मैं अनुमान लगा रहा हूं कि यह किसी तरह का सीआरसी है, लेकिन मैं इसका पता नहीं लगा पाया हूं। चेक 6-8 बिट लंबा है, इस पर निर्भर करता है कि आप "एक्स बिट्स" की व्याख्या कैसे करते हैं, इसलिए बहुत सारे तरीके हैं जो एक साथ रखे जा सकते हैं।