मैग्नेटोमीटर et के आकार का अंशांकन


15

3-अक्ष इलेक्ट्रॉनिक कम्पास का उपयोग करते हुए मोबाइल फोन और अन्य उपकरणों में, एक 8/8 / एस आकार का आंदोलन इन वीडियो में दिखाए अनुसार मैग्नेटोमीटर को कैलिब्रेट करने के लिए उपयोग किया जाता है ।

यह आंदोलन क्यों किया गया है, सिद्धांत क्या है, और क्या कोई इसे लागू करने के लिए कुछ उदाहरण सी कोड दे सकता है?

आपको मेरे अन्य समान प्रश्न से गुजरना होगा जिसमें अधिक जानकारी होगी।


इस विशेष प्रश्न के लिए कुछ अतिरिक्त जानकारी: AVR स्टूडियो 5 का उपयोग कर, प्लेटफॉर्म 8-बिट AtMega32 है।

अब तक मैंने कोशिश की है: मैंने मैग्नेटोमीटर के 2 सदिश मानों को आकार देकर औसत विभाजित करने की कोशिश की । विचार करने से ऑफसेट की गणना करने में मदद मिल सकती है। मुझे लगता है कि आकार के दो समान भाग / पक्ष पृथ्वी के चुंबकीय क्षेत्र को रद्द कर रहे हैं और ऑफसेट मूल्यों को कैसे दे रहे हैं। मैं गलत हो सकता हूं। लेकिन विशेष रूप से आकार आधारित अंशांकन के लिए यह वह जगह है जहां मैं वर्तमान में हूं। मुझे लगता है कि अंशांकन इस तरह से काम करता है। यह पता लगाना है कि क्या यह इस तरह से काम करता है?


ठीक है, जिसके द्वारा मैं ऑफ़सेट्स की गणना कर सकता हूं और बाद में कच्चे चुंबकीय 3 डी वेक्टर से उन्हें घटा सकता हूं। मैं पूरी तरह से गलत हो सकता हूं और इसका कोई स्पष्टीकरण नहीं है कि यह कैसे काम करता है। वीडियो और क्षेत्र पर डेटा के बाद देखकर, किसी तरह मेरे विचार में तेजी आई है और मैंने समीकरण के रूप में उस विचार का उपयोग किया है। बी)

कोड:

Read_accl();और Read_magnato(1);कार्यों सेंसर डाटा पढ़ रहे हैं। मुझे उम्मीद है कि कोड आत्म व्याख्यात्मक है। उम्मीद के मुताबिक पीपीएल निश्चित रूप से इसका बेहतर तरीके से उपयोग कर रहा है। : \

void InfinityShapedCallibration()
{
    unsigned char ProcessStarted = 0;
    unsigned long cnt = 0; 

    while (1)
    {

            Read_accl();

            // Keep reading Acc data
            // Detect Horizontal position
            // Detect Upside down position
            // Then detect the Horizontal position again.
            // Meanwhile an infinity shaped movement will be created.
            // Sum up all the data, divide by the count, divide by 2 .
            // !We've offsets.          

                if (ProcessStarted!=3)
                {
                //
                    //USART_Transmit_String("\r");
                    //rprintfFloat(4, g_structAccelerometerData.accx_RAW);
                    //USART_Transmit_String(",");
                    //rprintfFloat(4, g_structAccelerometerData.accy_RAW);
                    //USART_Transmit_String(",");
                    //rprintfFloat(4, g_structAccelerometerData.accz_RAW);

                }


            if (
             abs( g_structAccelerometerData.accx_RAW) < 100 
            && abs(g_structAccelerometerData.accy_RAW) < 100 
            && g_structAccelerometerData.accz_RAW < -350 
            && ProcessStarted != 2 && ProcessStarted != 3 && ProcessStarted != 1 )
            {
                ProcessStarted = 1; 
            }   

            if (ProcessStarted==1)
            { 

            Read_magnato(1);

                structMagnetometerOffsetDataToEEPROM.Off_X += g_structMegnetometerData.magx_RAW;
                structMagnetometerOffsetDataToEEPROM.Off_Y += g_structMegnetometerData.magy_RAW;
                structMagnetometerOffsetDataToEEPROM.Off_Z += g_structMegnetometerData.magz_RAW;

                cnt++;

            }               
                if ( g_structAccelerometerData.accz_RAW > 350 
                && ProcessStarted==1)
                {
                    ProcessStarted = 2; 
                }

                if ( g_structAccelerometerData.accz_RAW < -350 
                && ProcessStarted == 2 )
                {
                    ProcessStarted=3; 
                    structMagnetometerOffsetDataToEEPROM.Off_X /= cnt;
                    structMagnetometerOffsetDataToEEPROM.Off_X /= 2;

                    structMagnetometerOffsetDataToEEPROM.Off_Y /= cnt;
                    structMagnetometerOffsetDataToEEPROM.Off_Y /= 2;

                    structMagnetometerOffsetDataToEEPROM.Off_Z /= cnt;
                    structMagnetometerOffsetDataToEEPROM.Off_Z /= 2;  

                    UpdateOFFSETDATAinEEPROM();  

                    break;

                } 
    }   
} 

इन ऑफ़सेट्स को प्राप्त करने के बाद मैंने उन्हें निम्नानुसार इस्तेमाल किया:

void main()
{
...

Read_magnato(1);
        g_structMegnetometerData.magx_RAW -= structMagnetometerOffsetDataToEEPROM.Off_X ;
        g_structMegnetometerData.magy_RAW -= structMagnetometerOffsetDataToEEPROM.Off_Y ;
        g_structMegnetometerData.magz_RAW -= structMagnetometerOffsetDataToEEPROM.Off_Z ;
...
}

जैसा कि मैंने उल्लेख किया।


2
इस सवाल के लिए बहुत मदद की जरूरत है। क्या आपको प्रोग्रामिंग की मदद चाहिए? मैग्नेटोमीटर के बारे में सिद्धांत? क्या मंच? आपने क्या प्रयास किया या देखा?
केलेंजेब

अंशांकन आरंभ करने के लिए केवल 8 संकेत नहीं है?
ज्यामितीय

1
मुझे नहीं पता कि ppl क्यों व्यवहार करते हैं जैसे कि वे रोबोट हैं। मैंने उसी काम के लिए एक लिंक दिया है। मैंने उस पर बहुत काम किया और बिना जाने-समझे, बस उसे वोट दे दिया। मुझे यह घृणा है कि जब मेरा प्रश्न मेरे अस्पष्ट प्रश्न के कारण मत दिया गया है। कृपया पूछें कि मतदान करने से ठीक पहले क्या आवश्यक है। मैं वास्तव में आउटपुट प्राप्त करने के लिए मर रहा हूं और इसे वोट करने से पहले पीपीएल भी नहीं सोचता। यह बुरा लगता है और मुझे सही दिशा में काम करने से हटाने की कोशिश करता है। कृपया, मुझे वोट के दोनों ओर मदद की ज़रूरत नहीं है।
रिक 2047 7

1
@Kellenjb: मैं एक साधारण 8-बिट atmega32 का उपयोग करके IMU पर काम कर रहा हूं। मैंने इस पर काम करने की कोशिश की और निष्कर्ष निकाला कि एक 32 बिट यूसी सुई की जगह एक तलवार का उपयोग करने जैसा है। (मेरी पहेली के लिए क्षमा करें:)) मैंने मैग्नेटोमीटर के सभी रॉ मानों को आकार देने की कोशिश की। फिर आदानों की संख्या से विभाजित करें। सोच ऑफसेट की गणना में मदद कर सकती है। मुझे लगता है कि आकृति के दो समान भाग / किनारे पृथ्वी के चुंबकीय क्षेत्र को कैसे रद्द करते हैं और ऑफसेट मूल्यों को कैसे देते हैं। मैं गलत हो सकता हूं। लेकिन विशेष रूप से आकार आधारित अंशांकन के लिए यह वह जगह है जहां मैं वर्तमान में हूं। मुझे लगता है ...
रिक 2047

1
समस्या सवाल के साथ नहीं थी, लेकिन इस साइट पर उन लोगों की संख्या के साथ जो सवालों को कम कर देंगे, क्योंकि वे विषय के साथ पर्याप्त परिचित नहीं हैं कि क्या पूछा गया है। यदि आप नहीं जानते हैं, तो इसे अकेला छोड़ दें!
क्रिस स्ट्रैटन

जवाबों:


21

8 / एस आकार का पैटर्न मोबाइल फोन और अन्य उपकरणों में मैग्नेटोमीटर को जांचने के लिए उपयोग किया जाता है।

पृष्ठभूमि

विशिष्ट मोबाइल फोन युग मैग्नेटोमीटर तीन ऑर्थोगोनल कुल्हाड़ियों के साथ चुंबकीय क्षेत्र की ताकत को मापता है, जैसे:

m=mxı^+myȷ^+mzk^

द्वारा दिए गए क्षेत्र के परिमाण के साथ,

m=mx2+my2+mz2

और प्रत्येक अक्ष से रोटेशन के कोण के रूप में

θk=cos1mkm, where k[x,y,z]

कैलिब्रेशन

चूँकि पृथ्वी का मैग्नेटिक क्षेत्र अपेक्षाकृत स्थिर है, इसलिए चुंबक के मापक के रूप में मापे गए क्षेत्र की भयावहता भी स्थिर होनी चाहिए, चाहे सेंसर के उन्मुखीकरण की परवाह किए बिना । यदि कोई सेंसर को चारों ओर घुमाने और 3 डी में , , और प्लॉट करने के लिए था, तो पथ को लगातार त्रिज्या के साथ एक गोले की सतह को बाहर करना चाहिए।m y m zmxmymz

आदर्श रूप में इसे कुछ इस तरह देखना चाहिए:

क्षेत्र

हालांकि कठोर और नरम लोहे के प्रभाव और अन्य विकृतियों के कारण, यह एक विकृत क्षेत्र की तरह दिखता है:

विकृत

इसका कारण यह है कि सेंसर द्वारा मापा गया चुंबकीय क्षेत्र का परिमाण अभिविन्यास के साथ बदल रहा है। परिणाम यह है कि ऊपर दिए गए सूत्रों के अनुसार गणना करने पर चुंबकीय क्षेत्र की दिशा सही दिशा से अलग है।

अंशांकन तीन अक्ष रीडिंग में से प्रत्येक को समायोजित करने के लिए किया जाना चाहिए ताकि परिमाण अभिविन्यास की परवाह किए बिना निरंतर हो - आप इसे सोच सकते हैं क्योंकि विकृत क्षेत्र को एक परिपूर्ण क्षेत्र में विकृत किया जाना चाहिए। LSM303 आवेदन टिप्पणी है कि यह कैसे प्रदर्शन करने के लिए पर विस्तृत निर्देश के बहुत सारे है।

तो क्या आंकड़ा 8 पैटर्न के बारे में !?

ऊपर के विकृत क्षेत्र के भाग ing पैटर्न का पता लगाता है। प्राप्त निर्देशांक से, क्षेत्र के विरूपण का अनुमान लगाया जा सकता है, और प्राप्त अंशांकन गुणांक। एक अच्छा पैटर्न वह है जो सबसे बड़ी श्रेणी के झुकावों से गुजरता है और इसलिए सही निरंतर परिमाण से सबसे बड़े विचलन का अनुमान लगाता है।

विकृत क्षेत्र के आकार का अनुमान लगाने के लिए, कम से कम वर्ग दीर्घवृत्त फिटिंग का उपयोग किया जा सकता है। LSM303 एप्लीकेशन नोट में भी इस बारे में जानकारी है।

एक बुनियादी अंशांकन के लिए एक सरल विधि

ऐप नोट के अनुसार यदि आप सॉफ्ट-आयरन डिस्टॉर्शन नहीं मानते हैं, तो विकृत क्षेत्र झुका नहीं होगा। इसलिए एक मूल अंशांकन के लिए एक सरल विधि संभव हो सकती है:

  • प्रत्येक अक्ष के लिए अधिकतम और न्यूनतम मान ज्ञात करें, और 1/2 रेंज और शून्य बिंदु प्राप्त करें

rk=12(max(mk)min(mk))

zk=max(mk)rk

  • प्रत्येक अक्ष माप को शिफ्ट और स्केल करें

mk=mkzkrk

  • का उपयोग करने से पहले मानों की गणना करेंmk

यह यहां पाए गए कोड से आधारित है

कम से कम वर्गों का उपयोग करके हल करना

MATLAB कोड को कम से कम वर्गों का उपयोग करके हल करने के लिए नीचे दिखाया गया है। कोड एक चर मानता है magजहां कॉलम xyz मान हैं।

H = [mag(:,1), mag(:,2), mag(:,3), - mag(:,2).^2, - mag(:,3).^2, ones(size(mag(:,1)))];
w = mag(:,1).^2;
X = (H'*H)\H'*w;
offX = X(1)/2;
offY = X(2)/(2*X(4));
offZ = X(3)/(2*X(5));
temp = X(6) + offX^2 + X(4)*offY^2 + X(5)*offZ^2;
scaleX = sqrt(temp);
scaleY = sqrt(temp / X(4));
scaleZ= sqrt(temp / X(5));

एक गतिशील आंकड़ा 8 अंशांकन करने के लिए, आप हर नए पढ़ने के साथ कम से कम वर्गों की दिनचर्या चला सकते हैं और ऑफ़सेट और स्केल कारकों को स्थिर होने पर समाप्त कर सकते हैं।

पृथ्वी का चुंबकीय क्षेत्र

ध्यान दें, पृथ्वी का चुंबकीय क्षेत्र आमतौर पर सतह के समानांतर नहीं होता है और एक बड़ा घटक हो सकता है।


नमस्ते, यह एक सराहनीय प्रयास है जो आपने आंकड़ा 8 पैटर्न के मुद्दे को स्पष्ट करने के लिए किया है। अब मैं अपने पहले के कुछ कार्यों को वर्तमान कार्य से जोड़ सकता हूं। मैंने कुछ सुधार देखे, लेकिन अंक तक नहीं। जैसा कि मैंने पहले बताया था केवल प्रश्न, 8 आकार बनाने के बाद आउटपुट डेटा का उपयोग करके NEWS को सही तरीके से दिखाया गया है, फिर सभी वैक्टरों के औसत का आधा हिस्सा प्राप्त कर रहा है। आश्चर्यजनक रूप से यह क्षैतिज योजना (फ्लक्स द्वारा) के लिए काम करता है। फिर से मैं उसी स्थान पर हूं। जहां मैंने 8 आकार के एल्गो पर काम करना शुरू कर दिया था। मैं "लेस्टर स्क्वायर" के बाद वापस आ जाऊंगा। हालांकि मैं फ्लूक को समझने में सक्षम नहीं हूं।
रिक 2047

... मेरे मामले में भी लगता है कि क्षेत्र Z अक्ष पर विकृत है। कृपया जान लें कि प्लॉटेड 3 डी क्षेत्र पर हार्ड और सॉफ्ट आयरन के प्रभाव से मैं अवगत हूं। मैं इसे फिर से 3 डी पर प्लॉट करने की कोशिश करूंगा। देखते हैं।
रिक 2047

@ राहुल 2047 खैर मुझे उम्मीद है कि यह सही है, लेकिन यह मेरे लिए समझ में आता है। मुझे एक ऐसे उपकरण के लिए एक समान अंशांकन करना होगा जो मैं बना रहा हूं, लेकिन मैं अभी तक कोड को लागू करने के लिए काफी नहीं हूं।
जियोमेट्रिअकल

मुझे आश्चर्य है कि फोन के लिए जो आमतौर पर केवल क्षैतिज विमान में दिशा में रुचि रखते हैं, एक सरल इशारा सभी आवश्यक बिंदुओं को कवर करता है। क्या आप matlab का उपयोग करते हैं? इसमें फिट होना आसान है। कम से कम वर्ग त्रुटि माप विधि को संदर्भित करता है।
जियोमेट्रिअकल

1
इस लेख में कुछ छवि लिंक टूट गए - क्या आप छवियों को फिर से जोड़ सकते हैं? एसई में अब एक फ़ंक्शन है जो भविष्य में टूटने से बचाने के लिए छवियों को अपलोड करता है और उन्हें स्थानीय रूप से संग्रहीत करता है। धन्यवाद!
न्यू अलेक्जेंड्रिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.