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

 9150

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

در صورتی که دو یا چند سنسور را باهم ترکیب کنیم یک 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 برای ما کافی است ولی برای اندازه گیری هایی همانند ارتعاش و یا حرکات سریع در مانورها به پهنای باند چندصد هرتز نیاز است.

 

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

sensor acc

فرض کنید اطلاعاتمون رو از شتاب سنج داریم. خب مسلما سه تا شتاب داریم!!! حالا این داده های آنالوگ رو می خواهیم با استفاده از ماژول 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 نامگذاری می کنیم.

axle

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)

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

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

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

 

شاید دوست داشته باشید مطالب زیر را هم بخوانید :

4 نظر

  • ali

    عالييييييييييييييييييي

  • amin

    سلام
    اموزش هاتون خیلی خوبه
    به شدت و سریع به ترکیب داده ها دوتا سنسور با فیلتر کالمن یا هر چی احتیاج دارم (کد نویس و …)
    ما منتظریم

  • حمیدرضا

    سلام
    خیلی عالی بود آموزش ها
    بی صبرانه منتظر ادامش هستم
    لطفا سریعتر ادامه بدید
    خیلی نیاز دارم به آموزش هاتون

  • احسان

    مرسی بابت مطاب مفیدتون…بیصبرانه منتظر مطالب بعدیتون هستم…

  • نوشتن نظر

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

    Optionally add an image (JPEG only)