محاسبات كدنويسي شتاب سنج{جلسه بیست و چهارم}

مقدمه

 در صورتی که دو یا چند سنسور را باهم ترکیب کنیم یک IMU تشکیل می شود که مخفف Inertial Measurement Unit است. مثلا ترکیب یک جایروسکوپ و شتاب سنج یک IMU بسیار ساده است و در صورتی که قطب نما و GPS و… را به آن اضافه کنیم یک IMU پیشرفته داریم. بزرگترین عیب این سنسور خطاهای آن است که باید بوسیله فیلترهای Parks-McClellan، Complementary، Mahony و یا Kalman آنها را فیلتر کرد تا دقت کافی داشته باشند.

نكته مهم: در شتاب سنج درست است كه ما شتاب را اندازه گيري مي كنيم ولي در نهايت با استفاده از اين شتاب زواياي ساخته شده با سه محور را بدست مي آوريم. این سه تا زاویه ای که در انتها به دست می آوریم را با استفاده از سه تا زاویه ای که از جایروسکوپ بدست می آوریم ترکیب می کنیم و با استفاده از این سه تا زاویه دور موتورهامون رو تنظیم می کنیم. شاید تو ذهنتون این سوال پیش بیاد که وقتی شتاب سنج سه تا زاویه رو به ما میده دیگه چه نیازی به زاویه های مورد استفاده در جایروسکوپ هست؟

جواب اینه که داده های شتاب سنج دقت لازم را ندارند و نمی توان به صورت 100 درصد به آن اعتماد کرد. در جلسات بعد ما با استفاده از فیلتر کالمن و جایروسکوپ دقت را بالا می بریم.

بطور کلی همیشه برای داشتن اطلاعات صحیح در مورد حرکت یک ربات پرنده به کار بردن جایروسکوپ و شتاب سنج الزامی است.

در بازار شتاب سنج های مختلفی یافت می شود که معروف ترین آنها MPU9150، ADXL345 و MPU6050 است. شایان ذکر است که دو سنسور MPU9150 و MPU6050 در حقیقت IMU هستند که دارای شتاب سنج و جایروسکوپ درون خود می باشند.

پارامترهاي شتاب سنج

Number of axes

یعنی اینکه این شتاب سنج در چند جهت می تواند شتاب را اندازه بگیرد. تمامی شتاب سنج ها تک محوره، دو محوره و یا سه محوره هستند و در صورتی که نیاز به اندازه گیری شتاب در هر سه جهت X ، Y و Z دارید یک شتاب سنج سه محوره استفاده کنید.

Maximum Swing

در هنگام خرید شتاب سنج به پارامتری همانند 5g± و یا 6g± برخورد می کنید. حالا این پارامتر دقیقا چیه؟ چیزی که این پارامتر به ما نشان می دهند حداکثر میزان تغییرات شتابیست که سنسور می تواند اندازه گیری کند. مثلا برای یک کج شدن در اثر شتاب جاذبه استفاده از شتاب سنج های با میزان نوسان 1.5g± کافی است. اگر برای استفاده در حرکت یک ماشین و یا هواپیمای مسافربری و یا یک ربات نیاز دارید شتاب سنج های با 2g± کافی است و چنانچه برای تجهیزاتی که نیاز به استارت و پایان سریع دارند و نیاز به انجام مانور و حرکات سریع دارند باید از شتاب سنج های 5g± و بالاتر استفاده کنید.

Sensitivity

به طورکلی هر چه حساسیت بالاتر باشد بهتر است. بدین معنی که به ازای یک تغییر ایجاد شده در شتاب سنج یک تغییر بزرگتر در سیگنال ایجاد شود یا به بیان دیگر وقتی شتاب سنج شتاب را حس کرد برای ارسال سیگنال به ما از اعداد بزرگتر از اعداد اندازه گیری شده استفاده کنه بخاطر اینکه تغییرات بزرگتر در سیگنال راحتر قابل اندازه گیریست و قطعا چون اعداد بزرگتر و شفاف تری در اختیار ماست دقت هم بالاتر می رود.

Bandwidth

پهنای باند به معنی تعداد دفعات اندازه گیری مقدار شتاب در ثانیه می باشد. به بیان ساده تر در یک ثانیه چندتا عدد میتونه برای ما اندازه گیری کنه. قطعا برای حرکات و شتاب های کند پهنای باند 50Hz برای ما کافی است ولی برای اندازه گیری هایی همانند ارتعاش و یا حرکات سریع در مانورها به پهنای باند چندصد هرتز نیاز است.

 

هر جا از دستگاه مختصات اولیه و ثانویه نامبرده شد منظور از اولیه همان دستگاه مرجع تعریف شده توسط ماست و دستگاه ثانویه هم منظور دستگاه مختصات سیار با شتاب سنج است که متحرک است.

محاسبات كدنويسي شتاب سنج

فرض کنید اطلاعاتمون رو از شتاب سنج داریم. خب مسلما سه تا شتاب داریم!!! حالا این داده های آنالوگ رو می خواهیم با استفاده از ماژول ADC تبدیل کنیم. چنانچه این ماژول 10 بیتی باشد مقادیر خروجی در محدوده 1023..0 است. که نتیجه 1023 =1- 2^10 است. یک ماژول 12 بیتی مقادیر خروجی 4095..0 دارد. که نتیجه 4095 =1- 2^12 است. فرض کنید ماژول 10 بیتی ما سه تا شتاب زیر رو در سه جهت اندازه گیری کرده:

AdcRx = 586
AdcRy = 630
AdcRz = 561

هر ماژول ADC دارای یک ولتاژ مرجع است. فرض کنید ولتاژ مرجع ما 3.3 ولت است. با استفاده از ماژول ده بیتی و فرمول آنها را به ولتاژ تبدیل می کنیم.

VoltsRx = AdcRx * Vref / 1023

خروجی های شتاب سنج را به ولتاژ تبدیل می کنیم:

VoltsRx = 586 * 3.3V / 1023 =~ 1.89V
VoltsRy = 630 * 3.3V / 1023 =~ 2.03V
VoltsRz = 561 * 3.3V / 1023 =~ 1.81V

هر شتاب سنجی یک سطح ولتاژ 0 دارد که به صورت zero-g در دیتاشیت آن مشخص شده است. این ولتاژ 0g برای تعیین علامت مربوط به شتاب اندازه گیری شده است. فرض کنید ولتاژ 0g مربوط به شتاب سنج ما دارای مقدار VzeroG = 1.65V است. حال اختلاف ولتاژ هایی که در بالا حساب کردیم و ولتاژ صفر مرجع را حساب می کنیم:

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

داده هایی که در بالا داریم هنوز بر حسب g نیست و برای تبدیل این داده ها برحسب g از حساسیت شتاب سنج استفاده می کنیم. حساسیت شتاب سنج بر حسب mV/g است. به دیتاشیت مراجعه می کنیم و حساسیت شتاب سنج را می خوانیم:

Sensitivity = 478.5mV/g = 0.4785V/g

برای بیان کردن مقادیر نهایی نیروها بر حسب g داریم:

Rx = DeltaVoltsRx / Sensitivity

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

همه معادلات بالا را می توانستیم به صورت یکجا بنویسیم ولی مرحله به مرحله آن را تحلیل کردیم تا تاثیر هر کدام از پارامتر ها را به خوبی درک کنید. در زیر شکل کلی تمام معادلات بالا را مشاهده می کنید:

Rx = (AdcRx * Vref / 1023 – VzeroG) / Sensitivity
Ry = (AdcRy * Vref / 1023 – VzeroG) / Sensitivity
Rz = (AdcRz * Vref / 1023 – VzeroG) / Sensitivity

تا اینجا سه تا مولفه نیرو در جهت های X، Y و Z داریم که با استفاده از آنها می توان براحتی زاویه های مربوط به هر سه محور را حساب کرد. زاویه های بین هر سه محور را با نام خودشان به صورت Axr, Ayr, Azr نامگذاری می کنیم.

محاسبات كدنويسي شتاب سنج كوادكوپتر

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

طبق معادله معروف فیثاغورث داریم:

R = SQRT( Rx^2 + Ry^2 + Rz^2)

SQRT به معناي راديكال مي باشد.

حال با داشتن مقدار R و سه تا مقدار دیگر با معکوس کردن کسینوس داریم:

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

سه تا زاويه مربوط به شتاب سنج را بدست آورديم و مي توانيم از آنها استفاده كنيم.

برای دریافت آخرین مطالب سایت  و همچنین مطالب منحصر به فرد دیگر که در سایت منتشر نمی شوند میتوانید در کانال تلگرام ما عضو شوید و یا در اینستاگرام ما را فالوو کنید:

تا جلسه بعدی خدانگهدار

 

8 نظر

  • علی علیزاده

    سلام و عرض ادب
    ممنون بابت مطلب مفیدتون

    من یک شتاب سنج mpu6050 راه اندازی کردم
    میخواستم بدونم، عدد نشون داده شده توسط شتاب سنج (مثلا -120 در جهت x) معادل چه شتابی (بر حسب m/s^2) هستش؟؟

    سپاسگزارم

    • قاسم قاسمی

      با سلام
      برای تبدیل داده های شتاب سنج باید به نکات زیر توجه کنید:
      1- داده های مربوطه به این بستگی دارد که شما حساسیت را بر روی کدام عدد قرار داده اید که بر حسب 2g، +-4g، +-8g+- و یا 16g+- وجود دارد. البته در مورد حساسیت ژیروسکوپ داده ها به صورت زیر است: 250+-/500+-/1000+-/2000+-
      2- محدوده مورد استفاده برای داده های خام بین اعداد 32768- و 32767+ خواهد بود. که معادل 16^2 می باشد. چنانچه شتاب سنج در حالت سکون و مسطح باشد اعداد نشان داده شده به صورت زیر می باشد. البته در واقعیت اختلافی بین این مقادیر و مقادیر بیان شده به دلیل نویز وجود دارد.(حساسیت در حالت دیفالت 2g می باشد):
      -شتاب محورهای X و Y مقدار صفر می باشد.
      – شتاب محور Z مقدار 16384+ می باشد که همان 1g بر حسب m/s2 می باشد.
      -مقادیر ژیروسکوپ در محورهای X/Y/Z صفر می باشد.
      فرمول مربوطه برای محاسبه شتاب بر حسب متر بر مجذور ثانیه برای حساسیت 2g به صورت زیر می باشد:
      ax(new) = 9.80665 * ax / 16384 m/s2
      ay(new) = 9.80665 * ay / 16384 m/s2
      az(new) = 9.80665 * az / 16384 m/s2
      براي تبديل داده خام ژيروسكوپ بر حسب dps به صورت زير عمل مي كنيم. در حالت ديفالت ژيروسكوپ بر روي حساسيت 250 قرار دارد.
      GyX(new) = GyX / 131
      GyY(new) = GyY / 131
      GyZ(new) = GyZ / 131
      موفق باشید.

  • نوشتن نظر

    نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

    Optionally add an image (JPEG only)