Hiệu chuẩn từ kế


15

Trong điện thoại di động và các thiết bị khác sử dụng la bàn điện tử 3 trục, chuyển động hình / 8 / S được sử dụng để hiệu chỉnh từ kế như trong các video này .

Tại sao phong trào này được thực hiện, lý thuyết là gì và bất cứ ai cũng có thể đưa ra một số ví dụ mã C để thực hiện nó?

Bạn phải đi qua một câu hỏi tương tự khác của tôi có chứa nhiều thông tin hơn.


Một số thông tin bổ sung cho câu hỏi cụ thể này: Nền tảng là 8 bit AtMega32, sử dụng AVR Studio 5.

Cho đến bây giờ tôi đã thử: Tôi đã thử chia trung bình cho 2 giá trị vectơ của Từ kế tạo thành hình dạng. Suy nghĩ có thể giúp tính toán bù đắp. Tôi nghĩ một số cách hai phần / mặt giống hệt nhau của hình dạng đang hủy bỏ từ trường của trái đất và đưa ra các giá trị bù. Tôi có thể sai. Nhưng đặc biệt đối với hiệu chuẩn dựa trên hình dạng, đây là nơi tôi đang ở. Tôi nghĩ rằng hiệu chuẩn làm việc theo cách này. Ý tưởng là để tìm ra rằng làm việc theo cách này?


Ok mã mà tôi có thể tính toán các độ lệch và sau đó chỉ cần trừ chúng khỏi vectơ 3D từ tính Nguyên. Tôi có thể hoàn toàn sai và không có lời giải thích làm thế nào nó hoạt động. Nhìn thấy sau video và dữ liệu được vẽ trên quả cầu, bằng cách nào đó đã tăng tốc suy nghĩ của tôi và tôi đã sử dụng suy nghĩ đó dưới dạng phương trình. B)

Mã số:

Các chức năng Read_accl();Read_magnato(1);đang đọc dữ liệu cảm biến. Tôi hy vọng mã là tự giải thích. Hy vọng ppl khôn ngoan chắc chắn sẽ sử dụng điều này theo những cách tốt hơn nhiều. : \

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;

                } 
    }   
} 

Sau khi nhận được những bù đắp này, tôi đã sử dụng chúng như sau:

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 ;
...
}

Như tôi đã đề cập.


2
Câu hỏi này cần rất nhiều sự giúp đỡ. Bạn có cần giúp đỡ về lập trình không? Lý thuyết về từ kế? Nền tảng gì? Những gì bạn đã cố gắng hoặc tìm kiếm?
Kellenjb

không phải hình 8 chỉ đơn giản là một cử chỉ để bắt đầu hiệu chuẩn?
geometrikal

1
Tôi không biết tại sao ppl cư xử như thể họ là robot. Tôi đã đưa ra một liên kết cho cùng một công việc. Tôi đã làm việc rất nhiều về điều đó và ppl chỉ cần không biết, chỉ cần bỏ phiếu xuống. Tôi ghét nó khi câu hỏi của tôi bị bỏ phiếu vì câu hỏi không rõ ràng của tôi. Xin hỏi những gì cần thiết ngay trước khi bỏ phiếu xuống. Tôi thực sự mong muốn có được kết quả đầu ra và ppl thậm chí không suy nghĩ trước khi bỏ phiếu. Nó cảm thấy tồi tệ và cố gắng chuyển hướng tôi làm việc đúng hướng. Xin vui lòng, tôi cần sự giúp đỡ không phải là một trong hai phía bỏ phiếu.
Rick2047

1
@Kellenjb: Tôi đang làm việc trên IMU bằng cách sử dụng atmega32 8 bit đơn giản. Tôi đã thử làm việc với nó và kết luận rằng uC 32 bit giống như sử dụng thanh kiếm thay cho kim. (Xin lỗi vì câu đố của tôi :)) Tôi đã thử cộng tất cả các giá trị RAW của Từ kế tạo thành hình dạng. Sau đó chia cho không có đầu vào. Suy nghĩ có thể giúp tính toán bù đắp. Tôi nghĩ rằng một số cách hai phần / cạnh giống hệt nhau của hình dạng là một số cách hủy bỏ từ trường của trái đất và đưa ra các giá trị bù. Tôi có thể sai. Nhưng đặc biệt đối với hiệu chuẩn dựa trên hình dạng, đây là nơi tôi đang ở. Tôi nghĩ rằng ...
Rick2047

1
Vấn đề không nằm ở câu hỏi, nhưng với số lượng người trên trang này, những người sẽ hạ thấp câu hỏi chỉ vì họ không đủ quen thuộc với vấn đề này để hiểu những gì đã được hỏi. Nếu bạn không biết, hãy để nó yên!
Chris Stratton

Câu trả lời:


21

Mẫu hình 8 / S được sử dụng để hiệu chỉnh từ kế trong điện thoại di động và các thiết bị khác.

Lý lịch

Từ kế thời đại điện thoại di động điển hình đo cường độ từ trường dọc theo ba trục trực giao, ví dụ:

m= =mxTôi^+myȷ^+mzk^

Với độ lớn của trường được đưa ra bởi,

m= =mx2+my2+mz2

và góc quay từ mỗi trục như

θk= =cos-1mkm, Ở đâu k[x,y,z]

Hiệu chuẩn

mxmymz

Lý tưởng nhất là nó sẽ trông giống như thế này:

quả cầu

Tuy nhiên do hiệu ứng sắt cứng và mềm và các biến dạng khác, cuối cùng nó trông giống như một quả cầu bị biến dạng:

biến dạng

Điều này là do cường độ của từ trường được đo bằng cảm biến đang thay đổi theo hướng. Kết quả là hướng của từ trường khi tính theo các công thức trên khác với hướng thực.

Hiệu chuẩn phải được thực hiện để điều chỉnh từng trong ba lần đọc trục sao cho cường độ không đổi bất kể định hướng - bạn có thể nghĩ về nó như hình cầu biến dạng phải được biến thành một hình cầu hoàn hảo. Các LSM303 ứng dụng lưu ý có rất nhiều hướng dẫn chi tiết về cách thực hiện điều này.

Vậy còn mẫu hình số 8 thì sao!?

Thực hiện mô hình hình 8 'dấu vết' một phần của hình cầu bị biến dạng ở trên. Từ tọa độ thu được, biến dạng của hình cầu có thể được ước tính, và các hệ số hiệu chuẩn thu được. Một mô hình tốt là một mô hình theo dõi phạm vi định hướng lớn nhất và do đó ước tính độ lệch lớn nhất so với cường độ không đổi thực sự.

Để ước tính hình dạng của hình cầu bị biến dạng, có thể sử dụng khớp hình elip hình vuông nhỏ nhất . Ghi chú ứng dụng LSM303 cũng có thông tin về điều này.

Một phương pháp đơn giản để hiệu chuẩn cơ bản

Theo ghi chú của ứng dụng nếu bạn cho rằng không có biến dạng sắt mềm, hình cầu biến dạng sẽ không bị nghiêng. Do đó, một phương pháp đơn giản để hiệu chuẩn cơ bản có thể là có thể:

  • Tìm giá trị tối đa và tối thiểu cho mỗi trục và lấy phạm vi 1/2 và điểm 0

rk= =12(tối đa(mk)-tối thiểu(mk))

zk= =tối đa(mk)-rk

  • Thay đổi và chia tỷ lệ từng trục đo

mk'= =mk-zkrk

  • mk'

Điều này dựa trên mã được tìm thấy ở đây.

Giải các ô vuông nhỏ nhất

Mã MATLAB để giải quyết bằng cách sử dụng bình phương tối thiểu được hiển thị bên dưới. Mã giả định một biến magtrong đó các cột là các giá trị 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));

Để thực hiện hiệu chỉnh hình 8 động, bạn có thể chạy thói quen bình phương nhỏ nhất với mỗi lần đọc mới và chấm dứt khi các yếu tố bù và tỷ lệ đã ổn định.

Từ trường của trái đất

Lưu ý, từ trường của Trái đất thường không song song với bề mặt và có thể có một thành phần lớn.


Xin chào, Đó là một nỗ lực đáng kể mà bạn đã thực hiện để dọn đường cho vấn đề mẫu hình 8. Bây giờ tôi có thể kết nối một số công việc trước đây của mình với công việc hiện tại. Tôi đã thấy một số cải tiến nhưng không đạt được. Tôi đã giải thích trước đó trong phần này chỉ hỏi, TIN được hiển thị chính xác bằng cách sử dụng dữ liệu đầu ra sau khi tạo hình 8, sau đó lấy một nửa trung bình của tất cả các vectơ. Thật ngạc nhiên là nó hoạt động cho kế hoạch ngang (bởi fluke). Một lần nữa tôi lại ở cùng một nơi nơi tôi bắt đầu làm việc với 8 hình dạng. Tôi sẽ quay lại sau "Quảng trường nhỏ nhất". Tuy nhiên, tôi không thể hiểu được sán.
Rick2047

... Có vẻ như trong trường hợp của tôi, hình cầu cũng bị biến dạng trên trục Z. Xin lưu ý rằng tôi biết về hiệu ứng Hard và Soft Iron trên quả cầu 3D được vẽ. Tôi sẽ cố gắng vẽ lại nó trên 3D. Để xem.
Rick2047

@ Rahul2047 Vâng, tôi chỉ hy vọng nó là chính xác, nhưng nó có ý nghĩa với tôi. Tôi phải thực hiện một hiệu chuẩn tương tự cho một công cụ tôi đang xây dựng nhưng tôi chưa hoàn thành việc triển khai mã.
geometrikal

Tôi tự hỏi rằng đối với điện thoại thường chỉ quan tâm đến hướng trong mặt phẳng ngang, một cử chỉ đơn giản bao gồm tất cả các điểm cần thiết. Bạn có sử dụng MATLAB? Nó là dễ dàng để làm phù hợp trong đó. Bình phương tối thiểu đề cập đến phương pháp đo lỗi.
geometrikal

1
Một số liên kết hình ảnh trong bài viết này đã bị hỏng - bạn có thể thêm lại hình ảnh không? SE hiện có chức năng tải lên hình ảnh và lưu trữ cục bộ, để tránh bị vỡ trong tương lai. Cảm ơn!
New Alexandria
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.