جدول المحتويات:

مقياس التسارع والجيروسكوب التعليمي: 3 خطوات
مقياس التسارع والجيروسكوب التعليمي: 3 خطوات

فيديو: مقياس التسارع والجيروسكوب التعليمي: 3 خطوات

فيديو: مقياس التسارع والجيروسكوب التعليمي: 3 خطوات
فيديو: How to use MPU-9250 Gyroscope, Accelerometer, Magnetometer for Arduino 2024, يوليو
Anonim
مقياس التسارع والجيروسكوب التعليمي
مقياس التسارع والجيروسكوب التعليمي

مقدمة

هذا الدليل مخصص لكل المهتمين باستخدام أجهزة قياس التسارع والجيروسكوبات بالإضافة إلى مجموعة أجهزة IMU (وحدة القياس بالقصور الذاتي) في مشاريعهم الإلكترونية

سنغطي:

  • ماذا يقيس مقياس التسارع؟
  • ما الذي يقيسه الجيروسكوب (ويعرف أيضًا باسم الجيروسكوب)؟
  • كيفية تحويل القراءات التناظرية إلى الرقمية (ADC) التي تحصل عليها من هذه المستشعرات إلى وحدات مادية (تلك ستكون g لمقياس التسارع ، ودرجة / ثانية للجيروسكوب)
  • كيفية الجمع بين قراءات مقياس التسارع والجيروسكوب للحصول على معلومات دقيقة حول ميل جهازك بالنسبة إلى مستوى الأرض

خلال المقال سأحاول أن أبقي الرياضيات عند الحد الأدنى. إذا كنت تعرف ما هي Sine / Cosine / Tangent ، فيجب أن تكون قادرًا على فهم هذه الأفكار واستخدامها في مشروعك بغض النظر عن النظام الأساسي الذي تستخدمه: Arduino ، Propeller ، Basic Stamp ، رقائق Atmel ، Microchip PIC ، إلخ.

هناك أشخاص يعتقدون أنك بحاجة إلى رياضيات معقدة من أجل الاستفادة من وحدة IMU (مرشحات FIR أو IIR معقدة مثل مرشحات Kalman ، وفلاتر Parks-McClellan ، وما إلى ذلك). يمكنك البحث عن كل هؤلاء وتحقيق نتائج رائعة ولكنها معقدة. تتطلب طريقتي في شرح الأشياء الرياضيات الأساسية فقط. أنا مؤمن كبير بالبساطة. أعتقد أن النظام البسيط يسهل التحكم فيه ومراقبته ، إلى جانب أن العديد من الأجهزة المضمنة لا تملك القوة والموارد اللازمة لتنفيذ الخوارزميات المعقدة التي تتطلب حسابات المصفوفة.

سأستخدم كمثال وحدة IMU جديدة ، Acc_Gyro Accelerometer + Gyro IMU. سنستخدم معلمات هذا الجهاز في الأمثلة أدناه. هذه الوحدة هي جهاز جيد لتبدأ به لأنها تتكون من جهازين:

- LIS331AL (ورقة البيانات) - مقياس تسارع ثلاثي المحاور 2G - LPR550AL (ورقة البيانات) - خطوة وتدحرج ثنائي المحور ، جيروسكوب 500 درجة / ثانية

يمثلون معًا وحدة قياس بالقصور الذاتي ذات 5 درجات من الحرية. الآن هذا اسم رائع! ومع ذلك ، يوجد خلف الاسم الفاخر جهاز تجميع مفيد للغاية سنقوم بتغطيته وشرحه بالتفصيل في هذا الدليل.

الخطوة 1: مقياس التسارع

التسارع
التسارع

لفهم هذه الوحدة سنبدأ بمقياس التسارع. عند التفكير في مقاييس التسارع ، غالبًا ما يكون من المفيد تصوير صندوق على شكل مكعب به كرة بداخله. قد تتخيل شيئًا آخر مثل كعكة أو كعكة ، لكنني سأتخيل كرة:

نموذج التسارع
نموذج التسارع

إذا أخذنا هذا الصندوق في مكان خالٍ من حقول الجاذبية أو في هذه الحالة مع عدم وجود حقول أخرى قد تؤثر على موضع الكرة - ستطفو الكرة ببساطة في منتصف الصندوق. يمكنك أن تتخيل أن الصندوق موجود في الفضاء الخارجي بعيدًا عن أي أجسام كونية ، أو إذا كان من الصعب العثور على مثل هذا المكان ، فتخيل على الأقل مركبة فضائية تدور حول الكوكب حيث كل شيء في حالة انعدام الوزن. من الصورة أعلاه ، يمكنك أن ترى أننا نخصص لكل محور زوجًا من الجدران (أزلنا الجدار Y + حتى نتمكن من النظر داخل الصندوق). تخيل أن كل جدار حساس للضغط. إذا تحركنا فجأة الصندوق إلى اليسار (قمنا بتسريعها مع التسارع 1g = 9.8m / s ^ 2) ، ستضرب الكرة الجدار X-. ثم نقيس قوة الضغط التي تطبقها الكرة على الحائط ونخرج قيمة -1g على المحور X.

نموذج التسارع
نموذج التسارع

يرجى ملاحظة أن مقياس التسارع سيكتشف بالفعل قوة موجهة في الاتجاه المعاكس من متجه التسارع. غالبًا ما تسمى هذه القوة القوة بالقصور الذاتي أو القوة الوهمية. شيء واحد يجب أن تتعلمه من هذا هو أن مقياس التسارع يقيس التسارع بشكل غير مباشر من خلال قوة يتم تطبيقها على أحد جدرانه (وفقًا لنموذجنا ، قد يكون نابضًا أو أي شيء آخر في مقاييس التسارع الواقعية). يمكن أن تكون هذه القوة ناتجة عن التسارع ، ولكن كما سنرى في المثال التالي ، فهي ليست دائمًا ناتجة عن التسارع.

إذا أخذنا نموذجنا ووضعناه على الأرض ، فسوف تسقط الكرة على الجدار Z- وستطبق قوة مقدارها 1 جم على الجدار السفلي ، كما هو موضح في الصورة أدناه:

نموذج التسارع
نموذج التسارع

في هذه الحالة ، لا يتحرك الصندوق ولكن ما زلنا نحصل على قراءة -1g على المحور Z. الضغط الذي تمارسه الكرة على الحائط ناتج عن قوة الجاذبية. من الناحية النظرية ، يمكن أن يكون نوعًا مختلفًا من القوة - على سبيل المثال ، إذا تخيلت أن كرتنا معدنية ، فإن وضع مغناطيس بجوار الصندوق يمكن أن يحرك الكرة بحيث تصطدم بجدار آخر. قيل هذا فقط لإثبات أن مقياس التسارع في جوهره يقيس القوة وليس التسارع. يحدث فقط أن يتسبب التسارع في قوة قصور ذاتية يتم التقاطها بواسطة آلية الكشف عن القوة في مقياس التسارع.

على الرغم من أن هذا النموذج لا يمثل بالضبط كيفية إنشاء مستشعر MEMS ، إلا أنه غالبًا ما يكون مفيدًا في حل المشكلات المتعلقة بمقياس التسارع. توجد بالفعل مستشعرات متشابهة تحتوي على كرات معدنية بداخلها ، وتسمى مفاتيح الإمالة ، ولكنها أكثر بدائية وعادة ما يمكنها فقط معرفة ما إذا كان الجهاز يميل ضمن نطاق معين أم لا ، وليس مدى الميل.

لقد قمنا حتى الآن بتحليل ناتج مقياس التسارع على محور واحد وهذا كل ما ستحصل عليه بمقاييس التسارع ذات المحور الواحد. تأتي القيمة الحقيقية لمقاييس التسارع ثلاثية المحاور من حقيقة أنها تستطيع اكتشاف قوى القصور الذاتي على جميع المحاور الثلاثة. لنعد إلى نموذج الصندوق الخاص بنا ، ودعنا ندير الصندوق 45 درجة إلى اليمين. سوف تلمس الكرة جدارين الآن: Z- و X- كما هو موضح في الصورة أدناه:

نموذج التسارع
نموذج التسارع

قيم 0.71 ليست عشوائية ، فهي في الواقع تقريبية لـ SQRT (1/2). سيصبح هذا أكثر وضوحًا عندما نقدم نموذجنا التالي لمقياس التسارع.

في النموذج السابق ، ثبتنا قوة الجاذبية وقمنا بتدوير الصندوق التخيلي. في المثالين الأخيرين ، قمنا بتحليل الإخراج في موضعين مختلفين للصندوق ، بينما ظل متجه القوة ثابتًا. في حين أن هذا كان مفيدًا في فهم كيفية تفاعل مقياس التسارع مع القوى الخارجية ، إلا أنه من العملي إجراء الحسابات إذا قمنا بإصلاح نظام الإحداثيات على محاور مقياس التسارع وتخيلنا أن متجه القوة يدور حولنا.

نموذج التسارع
نموذج التسارع

يرجى إلقاء نظرة على النموذج أعلاه ، لقد احتفظت بألوان المحاور حتى تتمكن من إجراء انتقال عقلي من النموذج السابق إلى النموذج الجديد. فقط تخيل أن كل محور في النموذج الجديد متعامد مع الوجوه الخاصة بالمربع في النموذج السابق. المتجه R هو متجه القوة الذي يقيسه مقياس التسارع (يمكن أن يكون إما قوة الجاذبية أو قوة القصور الذاتي من الأمثلة أعلاه أو مزيج من كليهما). Rx و Ry و Rz هي إسقاط للمتجه R على المحاور X و Y و Z. يرجى ملاحظة العلاقة التالية:

R ^ 2 = Rx ^ 2 + Ry ^ 2 + Rz ^ 2 (مكافئ 1)

وهو في الأساس ما يعادل نظرية فيثاغورس في الأبعاد الثلاثية.

تذكر أنني أخبرتك قبل قليل أن قيم SQRT (1/2) ~ 0.71 ليست عشوائية. إذا قمت بتعويضهم بالصيغة أعلاه ، بعد أن تذكر أن قوة الجاذبية كانت 1 جم يمكننا التحقق مما يلي:

1 ^ 2 = (-SQRT (1/2)) ^ 2 + 0 ^ 2 + (-SQRT (1/2)) ^ 2

ببساطة عن طريق استبدال R = 1 ، Rx = -SQRT (1/2) ، Ry = 0 ، Rz = -SQRT (1/2) في المعادلة 1

بعد تمهيد طويل للنظرية ، اقتربنا من مقاييس التسارع الواقعية. ترتبط القيم Rx و Ry و Rz فعليًا بشكل خطي بالقيم التي سينتجها مقياس التسارع الواقعي والتي يمكنك استخدامها لإجراء عمليات حسابية متنوعة.

قبل أن نصل إلى هناك ، دعونا نتحدث قليلاً عن الطريقة التي ستقدم بها مقاييس التسارع هذه المعلومات إلينا. تنقسم معظم مقاييس التسارع إلى فئتين: رقمي وتناظري. ستمنحك مقاييس التسارع الرقمية معلومات باستخدام بروتوكول تسلسلي مثل I2C أو SPI أو USART ، بينما ستخرج مقاييس التسارع التناظرية مستوى جهد ضمن نطاق محدد مسبقًا يتعين عليك تحويله إلى قيمة رقمية باستخدام وحدة ADC (محول تناظري إلى رقمي). لن أخوض في الكثير من التفاصيل حول كيفية عمل ADC ، جزئيًا لأنه موضوع واسع النطاق وجزئيًا لأنه يختلف من منصة إلى أخرى. ستحتوي بعض وحدات التحكم الدقيقة على وحدات ADC مدمجة وسيحتاج بعضها إلى مكونات خارجية من أجل إجراء تحويلات ADC. بغض النظر عن نوع وحدة ADC التي تستخدمها ، ستنتهي بقيمة في نطاق معين. على سبيل المثال ، ستخرج وحدة ADC 10 بت قيمة في النطاق 0..1023 ، لاحظ أن 1023 = 2 ^ 10 -1. ستخرج وحدة ADC ذات 12 بت قيمة في النطاق 0..4095 ، لاحظ أن 4095 = 2 ^ 12-1.

دعنا ننتقل من خلال النظر في مثال بسيط ، لنفترض أن وحدة ADC 10 بت الخاصة بنا أعطتنا القيم التالية لقنوات التسارع الثلاث (المحاور):

AdcRx = 586 AdcRy = 630 AdcRz = 561

سيكون لكل وحدة ADC جهد مرجعي ، دعنا نفترض في مثالنا أنه 3.3 فولت. لتحويل قيمة adc 10bit إلى جهد ، نستخدم الصيغة التالية:

VoltsRx = AdcRx * Vref / 1023

ملاحظة سريعة هنا: بالنسبة لـ 8bit ADC ، سيكون الفاصل الأخير 255 = 2 ^ 8-1 ، وبالنسبة لـ 12bit ADC سيكون الفاصل الأخير 4095 = 2 ^ 12-1.

بتطبيق هذه الصيغة على جميع القنوات الثلاث التي نحصل عليها:

VoltsRx = 586 * 3.3V / 1023 = ~ 1.89V (نقرب كل النتائج إلى نقطتين عشريتين) VoltsRy = 630 * 3.3V / 1023 = ~ 2.03V VoltsRz = 561 * 3.3V / 1023 = ~ 1.81V

يحتوي كل مقياس تسارع على مستوى جهد يساوي صفر جرام ، ويمكنك أن تجده في المواصفات ، وهذا هو الجهد الذي يتوافق مع 0 جرام. للحصول على قيمة جهد موقعة ، نحتاج إلى حساب التحول من هذا المستوى. لنفترض أن مستوى الجهد 0g لدينا هو VzeroG = 1.65V. نحسب تحولات الجهد من جهد صفر-g على النحو التالي:

DeltaVoltsRx = 1.89V - 1.65V = 0.24V DeltaVoltsRy = 2.03V - 1.65V = 0.38V DeltaVoltsRz = 1.81V - 1.65V = 0.16V

لدينا الآن قراءات مقياس التسارع الخاصة بنا بالفولت ، ولا تزال ليست بالجرام (9.8 م / ث ^ 2) ، لإجراء التحويل النهائي ، نطبق حساسية مقياس التسارع ، وعادة ما يتم التعبير عنها بالمللي فولت / غرام. لنفترض أن حساسيتنا = 478.5mV / g = 0.4785V / g. يمكن العثور على قيم الحساسية في مواصفات مقياس التسارع. للحصول على قيم القوة النهائية المعبر عنها في g ، نستخدم الصيغة التالية:

Rx = DeltaVoltsRx / الحساسية

Rx = 0.24V / 0.4785V / g = ~ 0.5g Ry = 0.38V / 0.4785V / g = ~ 0.79g Rz = 0.16V / 0.4785V / g = ~ 0.33g

يمكننا بالطبع دمج جميع الخطوات في صيغة واحدة ، لكنني مررت بجميع الخطوات لتوضيح كيف تنتقل من قراءات ADC إلى مكون متجه القوة المعبر عنه في g.

Rx = (AdcRx * Vref / 1023 - VzeroG) / الحساسية (Eq.2) Ry = (AdcRy * Vref / 1023 - VzeroG) / الحساسية Rz = (AdcRz * Vref / 1023 - VzeroG) / الحساسية

لدينا الآن جميع المكونات الثلاثة التي تحدد متجه قوة القصور الذاتي لدينا ، إذا لم يكن الجهاز خاضعًا لقوى أخرى غير الجاذبية ، فيمكننا افتراض أن هذا هو اتجاه متجه قوة الجاذبية لدينا. إذا كنت تريد حساب ميل الجهاز بالنسبة إلى الأرض ، يمكنك حساب الزاوية بين هذا المتجه والمحور Z. إذا كنت مهتمًا أيضًا باتجاه الميل لكل محور ، فيمكنك تقسيم هذه النتيجة إلى مكونين: الميل على المحور X و Y الذي يمكن حسابه كزاوية بين متجه الجاذبية ومحور X / Y. يعد حساب هذه الزوايا أكثر بساطة مما قد تعتقد ، بعد أن قمنا بحساب قيم Rx و Ry و Rz. دعنا نعود إلى نموذجنا الأخير لمقياس التسارع ونقوم ببعض الملاحظات الإضافية:

صورة
صورة

الزوايا التي تهمنا هي الزوايا بين المحاور X و Y و Z ومتجه القوة R. سنعرّف هذه الزوايا على أنها Axr و Ayr و Azr. يمكنك أن تلاحظ من مثلث الزاوية القائمة الذي شكله R و Rx أن:

cos (Axr) = Rx / R وبالمثل: cos (Ayr) = Ry / R cos (Azr) = Rz / R

يمكننا أن نخصم من المعادلة 1 أن R = SQRT (Rx ^ 2 + Ry ^ 2 + Rz ^ 2).

يمكننا الآن إيجاد الزوايا باستخدام الدالة arccos () (الدالة العكسية cos ()):

Axr = arccos (Rx / R) Ayr = arccos (Ry / R) Azr = arccos (Rz / R)

لقد قطعنا شوطًا طويلاً في شرح نموذج مقياس التسارع ، للتوصل إلى هذه الصيغ. اعتمادًا على تطبيقاتك ، قد ترغب في استخدام أي صيغ وسيطة استنتجناها. سنقدم أيضًا نموذج الجيروسكوب قريبًا ، وسنرى كيف يمكن دمج بيانات مقياس التسارع والجيروسكوب لتوفير تقديرات ميل أكثر دقة.

ولكن قبل أن نفعل ذلك ، دعونا نقوم ببعض الملاحظات المفيدة:

cosX = cos (Axr) = Rx / R cozy = cos (Ayr) = Ry / R cosZ = cos (Azr) = Rz / R

غالبًا ما يُطلق على هذا الثلاثي اسم Direction Cosine ، وهو يمثل أساسًا متجه الوحدة (المتجه مع الطول 1) الذي له نفس اتجاه متجه R الخاص بنا. يمكنك بسهولة التحقق مما يلي:

SQRT (cosX ^ 2 + دافئ ^ 2 + cosZ ^ 2) = 1

هذه خاصية رائعة لأنها تعفينا من مراقبة معامل (طول) متجه R. في كثير من الأحيان ، إذا كنا مهتمين فقط في اتجاه متجه القصور الذاتي ، فمن المنطقي تسوية مقياسه من أجل تبسيط العمليات الحسابية الأخرى.

الخطوة الثانية: الجيروسكوب

جيروسكوب
جيروسكوب

لن نقدم أي نموذج صندوق مكافئ للجيروسكوب كما فعلنا لمقياس التسارع ، وبدلاً من ذلك سننتقل مباشرة إلى نموذج مقياس التسارع الثاني وسنعرض ما يقيسه الجيروسكوب وفقًا لهذا النموذج.

صورة
صورة

تقيس كل قناة جيروسكوب الدوران حول أحد المحاور. على سبيل المثال ، سيقيس جيروسكوب ذو محورين الدوران حول (أو قد يقول البعض "حول") محوري X و Y. للتعبير عن هذا الدوران بالأرقام ، دعونا نقوم ببعض الرموز. أولا دعنا نحدد:

Rxz - هو إسقاط متجه القوة بالقصور الذاتي R على طائرة XZ Ryz - هو إسقاط متجه القوة بالقصور الذاتي R على مستوى YZ

من مثلث الزاوية القائمة الذي شكله Rxz و Rz ، باستخدام نظرية فيثاغورس نحصل على:

Rxz ^ 2 = Rx ^ 2 + Rz ^ 2 ، وبالمثل: Ryz ^ 2 = Ry ^ 2 + Rz ^ 2

لاحظ أيضًا أن:

R ^ 2 = Rxz ^ 2 + Ry ^ 2 ، يمكن اشتقاق هذا من المعادلة 1 وما فوقها ، أو يمكن اشتقاقه من مثلث الزاوية اليمنى المكون من R و Ryz R ^ 2 = Ryz ^ 2 + Rx ^ 2

لن نستخدم هذه الصيغ في هذه المقالة ولكن من المفيد ملاحظة العلاقة بين جميع القيم في نموذجنا.

بدلاً من ذلك ، سنقوم بتعريف الزاوية بين المحور Z ومتجهات Rxz ، Ryz على النحو التالي:

Axz - هي الزاوية بين Rxz (إسقاط R على مستوى XZ) والمحور Z Ayz - هي الزاوية بين Ryz (إسقاط R على مستوى YZ) والمحور Z

نقترب الآن مما يقيسه الجيروسكوب. يقيس الجيروسكوب معدل تغيرات الزوايا المحددة أعلاه. بمعنى آخر ، ستخرج قيمة مرتبطة خطيًا بمعدل تغير هذه الزوايا. لشرح ذلك ، لنفترض أننا قمنا بقياس زاوية الدوران حول المحور Y (والتي ستكون زاوية Axz) في الوقت t0 ، ونعرّفها على أنها Axz0 ، ثم قمنا بعد ذلك بقياس هذه الزاوية في وقت لاحق t1 وكانت Axz1. سيتم احتساب معدل التغيير على النحو التالي:

RateAxz = (Axz1 - Axz0) / (t1 - t0).

إذا عبرنا عن Axz بالدرجات والوقت بالثواني ، فسيتم التعبير عن هذه القيمة بالدرجة / الثانية. هذا ما يقيسه الجيروسكوب.

من الناحية العملية ، نادرًا ما يمنحك الجيروسكوب (ما لم يكن جيروسكوبًا رقميًا خاصًا) قيمة معبرًا عنها بالدرجة / ثانية. كما هو الحال بالنسبة لمقياس التسارع ، ستحصل على قيمة ADC التي ستحتاج إلى تحويلها إلى درجة / ثانية باستخدام صيغة مشابهة لـ Eq. 2 التي حددناها لمقياس التسارع. دعنا نقدم صيغة التحويل ADC إلى deg / s للجيروسكوب (نفترض أننا نستخدم وحدة ADC 10 بت ، لـ 8bit ADC استبدل 1023 بـ 255 ، لـ 12bit ADC استبدل 1023 بـ 4095).

RateAxz = (AdcGyroXZ * Vref / 1023 - VzeroRate) / حساسية Eq.3 RateAyz = (AdcGyroYZ * Vref / 1023 - VzeroRate) / الحساسية

AdcGyroXZ ، AdcGyroYZ - يتم الحصول عليها من وحدة adc الخاصة بنا وهي تمثل القنوات التي تقيس دوران إسقاط متجه R في XZ على التوالي في طائرات YZ ، وهو ما يعادل القول بأن الدوران تم حول محوري Y و X على التوالي.

Vref - هو الجهد المرجعي ADC الذي سنستخدمه 3.3 فولت في المثال أدناه VzeroRate - هو جهد المعدل الصفري ، بمعنى آخر الجهد الذي يخرجه الجيروسكوب عندما لا يخضع لأي دوران ، بالنسبة للوحة Acc_Gyro فهو كذلك على سبيل المثال 1.23 فولت (يمكنك العثور على هذه القيم في المواصفات) الحساسية - هي حساسية الجيروسكوب الخاص بك يتم التعبير عنها في mV / (deg / s) غالبًا ما يتم كتابتها على أنها mV / deg / s ، وهي تخبرك أساسًا بعدد mV سوف يزيد خرج الجيروسكوب ، إذا قمت بزيادة سرعة الدوران بمقدار درجة / ثانية. حساسية لوحة Acc_Gyro هي على سبيل المثال 2mV / deg / s أو 0.002V / deg / s

لنأخذ مثالاً ، لنفترض أن وحدة ADC الخاصة بنا أعادت القيم التالية:

AdcGyroXZ = 571 AdcGyroXZ = 323

باستخدام الصيغة أعلاه ، وباستخدام معلمات المواصفات الخاصة بلوحة Acc_Gyro ، سنحصل على:

RateAxz = (571 * 3.3 فولت / 1023 - 1.23 فولت) / (0.002 فولت / درجة / ثانية) = 306 درجة / ثانية معدل Ayz = (323 * 3.3 فولت / 1023 - 1.23 فولت) / (0.002 فولت / درجة / ثانية) = ~ -94 درجة / ثانية

بمعنى آخر ، يدور الجهاز حول المحور Y (أو يمكننا القول أنه يدور في مستوى XZ) بسرعة 306 درجة / ثانية وحول المحور X (أو يمكننا القول أنه يدور في مستوى YZ) بسرعة - 94 درجة / ثانية. يرجى ملاحظة أن الإشارة السالبة تعني أن الجهاز يدور في الاتجاه المعاكس للاتجاه الموجب التقليدي. حسب الاصطلاح ، يكون اتجاه واحد للدوران موجبًا. ستوضح لك ورقة مواصفات الجيروسكوب الجيدة الاتجاه الإيجابي ، وإلا فسيتعين عليك العثور عليه من خلال تجربة الجهاز وملاحظة اتجاه الدوران الذي يؤدي إلى زيادة الجهد على دبوس الإخراج. من الأفضل القيام بذلك باستخدام راسم الذبذبات لأنه بمجرد إيقاف الدوران ، سينخفض الجهد مرة أخرى إلى مستوى المعدل الصفري. إذا كنت تستخدم مقياسًا متعددًا ، فسيتعين عليك الحفاظ على معدل دوران ثابت لبضع ثوانٍ على الأقل ولاحظ الجهد أثناء هذا الدوران ، ثم قارنه بجهد المعدل الصفري. إذا كانت أكبر من جهد المعدل الصفري ، فهذا يعني أن اتجاه الدوران موجب.

الخطوة 3: الجمع بين مقياس التسارع والجيروسكوب

الجمع بين مقياس التسارع والجيروسكوب
الجمع بين مقياس التسارع والجيروسكوب

تجميع كل ذلك معًا - الجمع بين بيانات مقياس التسارع والجيروسكوب

إذا كنت تقرأ هذا المقال ، فمن المحتمل أنك حصلت على جهاز IMU أو تخطط للحصول عليه ، أو ربما تخطط لبناء واحد من أجهزة قياس التسارع والجيروسكوب المنفصلة.

تتمثل الخطوة الأولى في استخدام جهاز IMU مركب يجمع بين مقياس التسارع والجيروسكوب في محاذاة أنظمة الإحداثيات الخاصة بهم. أسهل طريقة للقيام بذلك هي اختيار نظام إحداثيات مقياس التسارع كنظام إحداثيات مرجعي. ستعرض معظم أوراق بيانات مقياس التسارع اتجاه المحاور X و Y و Z بالنسبة إلى صورة الشريحة المادية أو الجهاز. على سبيل المثال ، فيما يلي اتجاهات المحاور X و Y و Z كما هو موضح في مواصفات لوحة Acc_Gyro:

محاور acc_gyro
محاور acc_gyro

الخطوات التالية هي:

حدد مخرجات الجيروسكوب التي تتوافق مع قيم RateAxz و RateAyz التي تمت مناقشتها أعلاه. حدد ما إذا كانت هذه المخرجات بحاجة إلى عكسها بسبب الوضع المادي للجيروسكوب بالنسبة إلى مقياس التسارع

لا تفترض أنه إذا كان للجيروسكوب ناتجًا محددًا بعلامة X أو Y ، فسوف يتوافق مع أي محور في نظام إحداثيات مقياس التسارع ، حتى لو كان هذا الإخراج جزءًا من وحدة IMU. أفضل طريقة لاختباره. بافتراض أنك قمت بإصلاح موضع الجيروسكوب بالنسبة لمقياس التسارع. من المفترض أن تكون حدود الجيروسكوب والتسارع متوازية مع بعضها البعض ، أي أنك تضع الجيروسكوب بزاوية مضاعفة 90 درجة بالنسبة لشريحة مقياس التسارع. إذا حصلت على لوحة IMU ، فمن المحتمل أن تكون متوائمة بالفعل بهذه الطريقة. لن نناقش في هذه المقالة النماذج حيث يتم وضع الجيروسكوب بزاوية غير منتظمة بالنسبة لمقياس التسارع (لنقل 45 أو 30 درجة) ، على الرغم من أن هذا قد يكون مفيدًا في بعض التطبيقات.

فيما يلي تسلسل عينة لتحديد إخراج الجيروسكوب الذي يتوافق مع قيمة RateAxz التي تمت مناقشتها أعلاه.

- ابدأ من وضع الجهاز في وضع أفقي. كل من مخرجات X و Y لمقياس التسارع ستخرج الجهد صفر g (على سبيل المثال للوحة Acc_Gyro هذا هو 1.65V)

- ابدأ بعد ذلك بتدوير الجهاز حول المحور Y ، وهي طريقة أخرى للقول بأنك تقوم بتدوير الجهاز في مستوى XZ ، بحيث تتغير مخرجات مقياس التسارع X و Z ويظل خرج Y ثابتًا. - أثناء تدوير الجهاز بسرعة ثابتة ، لاحظ تغير خرج الجيروسكوب ، يجب أن تظل مخرجات الجيروسكوب الأخرى ثابتة - خرج الجيروسكوب الذي تغير أثناء الدوران حول المحور Y (الدوران في مستوى XZ) سيوفر قيمة الإدخال لـ AdcGyroXZ ، والتي من خلالها نحسب RateAxz - الخطوة الأخيرة هي التأكد من أن اتجاه الدوران يتوافق مع نموذجنا ، وفي بعض الحالات قد تضطر إلى عكس قيمة RateAxz بسبب الوضع المادي للجيروسكوب بالنسبة إلى مقياس التسارع - قم بإجراء الاختبار أعلاه مرة أخرى ، وقم بتدوير الجهاز حول المحور Y ، هذه المرة يراقب خرج X لمقياس التسارع (AdcRx في نموذجنا). إذا نما AdcRx (أول 90 درجة من الدوران من الوضع الأفقي) ، فيجب أن ينمو AdcGyroXZ أيضًا. وإلا فإنك تحتاج إلى عكس RateAxz ، يمكنك تحقيق ذلك عن طريق إدخال عامل إشارة في المعادلة 3 ، على النحو التالي:

RateAxz = InvertAxz * (AdcGyroXZ * Vref / 1023 - VzeroRate) / الحساسية ، حيث يكون InvertAxz هو 1 أو -1

يمكن إجراء نفس الاختبار لـ RateAyz ، عن طريق تدوير الجهاز حول المحور X ، ويمكنك تحديد إخراج الجيروسكوب الذي يتوافق مع RateAyz ، وما إذا كان يلزم قلبه. بمجرد حصولك على قيمة InvertAyz ، يجب عليك استخدام الصيغة التالية لحساب RateAyz:

RateAyz = InvertAyz * (AdcGyroYZ * Vref / 1023 - VzeroRate) / الحساسية

إذا كنت ستجري هذه الاختبارات على لوحة Acc_Gyro ، فستحصل على النتائج التالية:

- دبوس الإخراج لـ RateAxz هو GX4 و InvertAxz = -1. - دبوس الإخراج لـ RateAyz هو GY4 و InvertAyz = -1

من هذه النقطة فصاعدًا ، سننظر في أنك قمت بإعداد IMU الخاص بك بطريقة يمكنك من خلالها حساب القيم الصحيحة لـ Axr و Ayr و Azr (كما هو محدد في الجزء 1. مقياس التسارع) و RateAxz و RateAyz (كما هو محدد في الجزء 2. الجيروسكوب). بعد ذلك سنقوم بتحليل العلاقات بين هذه القيم التي تبين أنها مفيدة في الحصول على تقدير أكثر دقة لميل الجهاز بالنسبة لمستوى الأرض.

قد تسأل نفسك في هذه المرحلة ، إذا كان نموذج مقياس التسارع قد أعطانا بالفعل زوايا ميل Axr و Ayr و Azr ، فلماذا نرغب في الاهتمام ببيانات الجيروسكوب؟ الإجابة بسيطة: لا يمكن الوثوق دائمًا ببيانات مقياس التسارع بنسبة 100٪. هناك عدة أسباب ، تذكر أن مقياس التسارع يقيس قوة القصور الذاتي ، ويمكن أن تكون هذه القوة ناتجة عن الجاذبية (وبشكل مثالي عن طريق الجاذبية فقط) ، ولكن قد يكون سببها أيضًا تسارع (حركة) الجهاز. نتيجة لذلك ، حتى لو كان مقياس التسارع في حالة مستقرة نسبيًا ، فإنه لا يزال حساسًا جدًا للاهتزاز والضوضاء الميكانيكية بشكل عام. هذا هو السبب الرئيسي وراء استخدام معظم أنظمة IMU الجيروسكوب لتخفيف أي أخطاء في مقياس التسارع. ولكن كيف يتم فعل ذالك ؟ وهل الجيروسكوب خالي من الضوضاء؟

لا يخلو الجيروسكوب من الضوضاء ، ولكن نظرًا لأنه يقيس الدوران ، فهو أقل حساسية للحركات الميكانيكية الخطية ، وهو نوع الضوضاء التي يعاني منها مقياس التسارع ، ولكن الجيروسكوبات بها أنواع أخرى من المشكلات مثل الانجراف (عدم العودة إلى قيمة المعدل الصفري) عندما يتوقف الدوران). ومع ذلك ، من خلال حساب متوسط البيانات التي تأتي من مقياس التسارع والجيروسكوب ، يمكننا الحصول على تقدير أفضل نسبيًا لميل الجهاز الحالي مما نحصل عليه باستخدام بيانات مقياس التسارع وحدها.

في الخطوات التالية سأقدم خوارزمية مستوحاة من بعض الأفكار المستخدمة في مرشح كالمان ، ومع ذلك فهي أكثر بساطة وأسهل في التنفيذ على الأجهزة المضمنة. قبل ذلك ، دعونا نرى أولاً ما نريد أن تحسبه خوارزمية لدينا. حسنًا ، اتجاه متجه قوة الجاذبية R = [Rx ، Ry ، Rz] الذي يمكننا من خلاله استخلاص قيم أخرى مثل Axr أو Ayr أو Azr أو cosX ، cozy ، cosZ الذي سيعطينا فكرة عن ميل الجهاز. بالنسبة إلى مستوى الأرض ، نناقش العلاقة بين هذه القيم في الجزء 1. قد يقول المرء - ألا نمتلك بالفعل هذه القيم Rx و Ry و Rz من Eq.2 في الجزء 1؟ حسنًا ، نعم ، لكن تذكر أن هذه القيم مشتقة من بيانات مقياس التسارع فقط ، لذلك إذا كنت ستستخدمها مباشرةً في تطبيقك ، فقد تحصل على ضوضاء أكثر مما يمكن أن يتحمله تطبيقك. لتجنب المزيد من الالتباس ، دعنا نعيد تعريف قياسات مقياس التسارع على النحو التالي:

Racc - هو متجه القوة بالقصور الذاتي كما تم قياسه بواسطة مقياس التسارع ، والذي يتكون من المكونات التالية (الإسقاطات على محاور X ، Y ، Z):

RxAcc = (AdcRx * Vref / 1023 - VzeroG) / الحساسية RyAcc = (AdcRy * Vref / 1023 - VzeroG) / الحساسية RzAcc = (AdcRz * Vref / 1023 - VzeroG) / الحساسية

لدينا حتى الآن مجموعة من القيم المقاسة التي يمكننا الحصول عليها من قيم التسارع ADC. سنطلق على هذه المجموعة من البيانات "متجه" وسنستخدم الترميز التالي.

Racc = [RxAcc ، RyAcc ، RzAcc]

نظرًا لأنه يمكن الحصول على مكونات Racc من بيانات مقياس التسارع ، يمكننا اعتبارها مدخلاً لخوارزمية لدينا.

يرجى ملاحظة أنه نظرًا لأن Racc يقيس قوة الجاذبية ، فستكون صحيحًا إذا افترضت أن طول هذا المتجه المحدد على النحو التالي يساوي أو قريبًا من 1 جم.

| راك | = SQRT (RxAcc ^ 2 + RyAcc ^ 2 + RzAcc ^ 2) ،

ومع ذلك ، للتأكد من أنه من المنطقي تحديث هذا المتجه على النحو التالي:

Racc (طبيعي) = [RxAcc / | Racc | ، RyAcc / | Racc | ، RzAcc / | Racc |].

سيضمن ذلك أن يكون طول متجه Racc القياسي دائمًا 1.

بعد ذلك سنقدم متجهًا جديدًا وسنسميه

الباقي = [RxEst ، RyEst ، RzEst]

سيكون هذا ناتج خوارزمية لدينا ، وهذه قيم مصححة بناءً على بيانات الجيروسكوب واستنادًا إلى البيانات المقدرة السابقة.

إليك ما ستفعله الخوارزمية لدينا: - يخبرنا مقياس التسارع: "أنت الآن في موضع Racc" - نقول "شكرًا لك ، ولكن دعني أتحقق" ، - ثم صحح هذه المعلومات باستخدام بيانات الجيروسكوب وكذلك مع بيانات الراحة السابقة و نخرج متجهًا تقديريًا جديدًا بقية. - نحن نعتبر Rest "أفضل رهان" لدينا فيما يتعلق بالموقع الحالي للجهاز.

دعونا نرى كيف يمكننا أن نجعلها تعمل.

سنبدأ تسلسلنا من خلال الوثوق بمقياس التسارع الخاص بنا وتعيين:

الباقي (0) = Racc (0)

بالمناسبة ، تذكر أن Rest و Racc عبارة عن متجهات ، لذا فإن المعادلة أعلاه هي مجرد طريقة بسيطة لكتابة 3 مجموعات من المعادلات ، وتجنب التكرار:

RxEst (0) = RxAcc (0) RyEst (0) = RyAcc (0) RzEst (0) = RzAcc (0)

بعد ذلك ، سنقوم بإجراء قياسات منتظمة على فترات زمنية متساوية من الثواني T ، وسنحصل على قياسات جديدة سنعرّفها كـ Racc (1) و Racc (2) و Racc (3) وما إلى ذلك. سنصدر أيضًا تقديرات جديدة في كل فترات زمنية راحة (1) ، وبقية (2) ، وبقية (3) وما إلى ذلك.

افترض أننا في الخطوة n. لدينا مجموعتان معروفتان من القيم التي نرغب في استخدامها:

الباقي (ن -1) - تقديرنا السابق ، مع الباقي (0) = Racc (0) Racc (n) - مقياس التسارع الحالي لدينا

قبل أن نتمكن من حساب الراحة (ن) ، دعنا نقدم قيمة مقاسة جديدة ، يمكننا الحصول عليها من جيروسكوبنا وتقدير سابق.

سنسميها Rgyro ، وهي أيضًا متجه تتكون من 3 مكونات:

Rgyro = [RxGyro ، RyGyro ، RzGyro]

سنحسب هذا المتجه مكونًا واحدًا في كل مرة. سنبدأ بـ RxGyro.

نموذج الدوران
نموذج الدوران

لنبدأ بملاحظة العلاقة التالية في نموذج الجيروسكوب الخاص بنا ، من مثلث الزاوية القائمة الذي شكله Rz و Rxz يمكننا اشتقاق ذلك:

tan (Axz) = Rx / Rz => Axz = atan2 (Rx ، Rz)

قد تكون Atan2 دالة لم تستخدمها من قبل ، فهي تشبه atan ، إلا أنها تُرجع قيمًا في النطاق (-PI ، PI) مقابل (-PI / 2 ، PI / 2) كما تم إرجاعها بواسطة atan ، وتستغرق 2 حجج بدلاً من واحدة. يسمح لنا بتحويل قيمتي Rx و Rz إلى زوايا في النطاق الكامل لـ 360 درجة (-PI إلى PI). يمكنك قراءة المزيد عن atan2 هنا.

لذا بمعرفة RxEst (n-1) و RzEst (n-1) يمكننا العثور على:

Axz (n-1) = atan2 (RxEst (n-1) ، RzEst (n-1)).

تذكر أن الجيروسكوب يقيس معدل تغير زاوية المحور. لذلك يمكننا تقدير الزاوية الجديدة Axz (n) على النحو التالي:

Axz (n) = Axz (n-1) + RateAxz (n) * T.

تذكر أنه يمكن الحصول على RateAxz من قراءات ADC للجيروسكوب. يمكن أن تستخدم الصيغة الأكثر دقة متوسط معدل الدوران المحسوب على النحو التالي:

RateAxzAvg = (RateAxz (n) + RateAxz (n-1)) / 2 Axz (n) = Axz (n-1) + RateAxzAvg * T

بنفس الطريقة التي نجد بها:

Ayz (ن) = Ayz (n-1) + RateAyz (n) * T.

حسنًا ، لدينا الآن Axz (n) و Ayz (n). إلى أين نذهب من هنا لخصم RxGyro / RyGyro؟ من Eq. 1 يمكننا كتابة طول المتجه Rgyro على النحو التالي:

| Rgyro | = SQRT (RxGyro ^ 2 + RyGyro ^ 2 + RzGyro ^ 2)

أيضًا نظرًا لأننا قمنا بتطبيع متجه Racc الخاص بنا ، فقد نفترض أن طوله هو 1 ولم يتغير بعد الدوران ، لذلك من الآمن نسبيًا كتابة:

| Rgyro | = 1

دعنا نعتمد تدوينًا أقصر مؤقتًا للحسابات أدناه:

س = RxGyro ، y = RyGyro ، z = RzGyro

باستخدام العلاقات أعلاه يمكننا أن نكتب:

س = س / 1 = س / SQRT (س ^ 2 + ص ^ 2 + ع ^ 2)

دعونا نقسم بسط الكسر ومقامه على SQRT (x ^ 2 + z ^ 2)

x = (x / SQRT (x ^ 2 + z ^ 2)) / SQRT ((x ^ 2 + y ^ 2 + z ^ 2) / (x ^ 2 + z ^ 2))

لاحظ أن x / SQRT (x ^ 2 + z ^ 2) = sin (Axz) ، لذلك:

x = sin (Axz) / SQRT (1 + y ^ 2 / (x ^ 2 + z ^ 2))

الآن اضرب بسط ومقام الكسر داخل SQRT في z ^ 2

x = sin (Axz) / SQRT (1 + y ^ 2 * z ^ 2 / (z ^ 2 * (x ^ 2 + z ^ 2)))

لاحظ أن z / SQRT (x ^ 2 + z ^ 2) = cos (Axz) و y / z = tan (Ayz) ، لذا أخيرًا:

x = sin (Axz) / SQRT (1 + cos (Axz) ^ 2 * tan (Ayz) ^ 2)

بالعودة إلى التدوين الخاص بنا ، نحصل على:

RxGyro = sin (Axz (n)) / SQRT (1 + cos (Axz (n)) ^ 2 * tan (Ayz (n)) ^ 2)

بنفس الطريقة نجد ذلك

RyGyro = sin (Ayz (n)) / SQRT (1 + cos (Ayz (n)) ^ 2 * tan (Axz (n)) ^ 2)

الآن ، أخيرًا يمكننا أن نجد:

RzGyro = تسجيل (RzGyro) * SQRT (1 - RxGyro ^ 2 - RyGyro ^ 2).

حيث Sign (RzGyro) = 1 عندما RzGyro> = 0 ، و Sign (RzGyro) = -1 عندما RzGyro <0.

إحدى الطرق البسيطة لتقدير ذلك هي أن تأخذ:

تسجيل (RzGyro) = تسجيل (RzEst (n-1))

من الناحية العملية ، كن حذرًا عندما يقترب RzEst (n-1) من 0. يمكنك تخطي مرحلة الدوران تمامًا في هذه الحالة وتعيين: Rgyro = Rest (n-1). يتم استخدام Rz كمرجع لحساب زوايا Axz و Ayz وعندما تكون قريبة من 0 ، قد تتدفق القيم وتؤدي إلى نتائج سيئة. ستكون في مجال أرقام الفاصلة العائمة الكبيرة حيث قد تفتقر تطبيقات دالة tan () / atan () إلى الدقة.

لذلك دعونا نلخص ما لدينا حتى الآن ، نحن في الخطوة n من الخوارزمية الخاصة بنا وقد حسبنا القيم التالية:

RACC - القراءات الحالية من مقياس التسارع الخاص بنا Rgyro - تم الحصول عليها من Rest (n-1) وقراءات الجيروسكوب الحالية

ما هي القيم التي نستخدمها لحساب التقدير المحدث Rest (n)؟ ربما خمنت أننا سنستخدم كليهما. سنستخدم المتوسط المرجح ، بحيث:

الباقي (ن) = (Racc * w1 + Rgyro * w2) / (w1 + w2)

يمكننا تبسيط هذه الصيغة بقسمة كل من بسط الكسر ومقامه على w1.

بقية (ن) = (Racc * w1 / w1 + Rgyro * w2 / w1) / (w1 / w1 + w2 / w1)

وبعد استبدال w2 / w1 = wGyro نحصل على:

الباقي (ن) = (Racc + Rgyro * wGyro) / (1 + wGyro)

في المنتدى أعلاه ، يخبرنا wGyro عن مدى ثقتنا في الدوران مقارنة بمقياس التسارع الخاص بنا. يمكن اختيار هذه القيمة بشكل تجريبي ، وعادة ما تؤدي القيم بين 5..20 إلى نتائج جيدة.

يتمثل الاختلاف الرئيسي لهذه الخوارزمية من مرشح كالمان في أن هذا الوزن ثابت نسبيًا ، بينما في مرشح كالمان ، يتم تحديث الأوزان بشكل دائم بناءً على الضوضاء المقاسة لقراءات مقياس التسارع. يركز مرشح كالمان على إعطائك "أفضل" النتائج النظرية ، في حين أن هذه الخوارزمية يمكن أن تمنحك نتائج "جيدة بما يكفي" لتطبيقك العملي. يمكنك تنفيذ خوارزمية تضبط wGyro اعتمادًا على بعض عوامل الضوضاء التي تقيسها ، لكن القيم الثابتة ستعمل جيدًا لمعظم التطبيقات.

نحن على بعد خطوة واحدة من الحصول على القيم المقدرة المحدثة لدينا:

RxEst (n) = (RxAcc + RxGyro * wGyro) / (1 + wGyro) RyEst (n) = (RyAcc + RyGyro * wGyro) / (1 + wGyro) RzEst (n) = (RzAcc + RzGyro * wGyro) / (1 + wGyro)

الآن دعنا نطبيع هذا المتجه مرة أخرى:

R = SQRT (RxEst (n) ^ 2 + RyEst (n) ^ 2 + RzEst (n) ^ 2)

RxEst (n) = RxEst (n) / R RyEst (n) = RyEst (n) / R RzEst (n) = RzEst (n) / R

ونحن على استعداد لتكرار الحلقة مرة أخرى.

ظهر هذا الدليل في الأصل على starlino.com ، لقد أجريت بعض التعديلات الخفيفة وأعدت نشره بإذن. شكرا ستارلينو!

موصى به: