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

مقدمه

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

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

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

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

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

شتاب سنج ها بر دو نوع هستند:

1- شتاب سنج های دیجیتال

2- شتاب سنج های آنالوگ

شتاب سنج های آنالوگ فقط یک ولتاژ را به ما بر می گرداند ولی شتاب سنج های دیجیتال یک عدد را به ما بر می گرداند.

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

Number of axes

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

Maximum Swing

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

Sensitivity

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

Bandwidth

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

 

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

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

برای اینکه با معماری داخلی یک شتاب سنج بیشتر آشنا شوید ما معماری داخلی MPU6050 که ترکیبی از شتاب سنج و ژیروسکوپ است را در زیر آورده ایم. همانطور که مشاهده می کنید این ماژول دارای یک شتاب سنج و یک ژیروسکوپ دیجیتال است که با استفاده از مبدل های آنالوگ به دیجیتال داده های آنالوگ را به دیجیتال تبدیل می کنند. در شکل نیز می بینید که هر محوری برای خودش یک مبدل ADC مجزا دارد.

شتاب سنج

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

به همین ترتیب بر حسب اینکه حساسیت شتاب سنج را بر روی چه مقداری قرار داده اید عدد 16384 مربوط به فرمول بالا با اعداد جدول زیر جایگزین می شود. مثلا اگر محدوده نوسان را بر روی 4g تنظیم کرده اید عدد 8192 را در فرمول بالا قرار دهید.

شتاب سنج کوادروتور

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

شتاب سنج

cos(Axr) = Ax / R
cos(Ayr) = Ay / R
cos(Azr) = Az / R

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

R = SQRT( Ax^2 + Ay^2 + Az^2)

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

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

Axr = arccos(Ax/R)
Ayr = arccos(Ay/R)
Azr = arccos(Az/R)

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

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

 

 

16 نظر

  • حمید زارع

    با سلام.

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

    با تشکر بابت آموزش و همچنین جوابدهی تون.

    • قاسم قاسمی

      سلام جناب زارع
      دقتي كه براي زاويه بيان مي كنيد چيزي نيست كه به صورت يك عدد باشد و قاعدتا همانگونه كه در ديتاشيت اين سنسور مشاهده مي كنيد چيزي با نام دقت براي زاويه ذكر نشده است زيرا اين سنسور به صورت مستقيم زاويه را اندازه گيري نمي كند. در حقيقت ژيروسكوپ سرعت زاويه اي را اندازه گيري مي كند و سپس از روي سرعت زاويه اي زاويه به دست مي آيد و شتاب سنج هم شتاب را اندازه مي گيرد و از شتاب زاويه به دست مي آيد و اين مقادير فقط و فقط با فيلتري كه شما در انتها براي آنها تعيين مي كنيد دقتشان بالا مي رود. پس نوع فيلتر و رنج اندازه گيري كه براي آنها انتخاب مي كنيد در دقت نهايي تاثير دارند.
      موفق باشيد

  • احمدرضا نجفی

    با عرض سلام و ادب و احترام

    میخواستم بدونم اگه ما یک شتاب سنج تک جهته MEMS داشته باشیم چطور میشه از روی تغییرات ولتاژش شتاب اعمالی به شتاب سنج بدست بیاریم منظورم رابطه ریاضی دقیق بین V و a است؟

    • قاسم قاسمی

      سلام جناب نجفی
      توضیحات کاملی در یکی از جلسات شتاب سنج داده ایم که خلاصه ای از آن را در زیر برایتان شرح می دهم:
      با فرض اینکه شتاب سنج شما از نوع آنالوگ می باشد و سه خروجی ولتاژ به صورت زیر در اختیاز ما قرار داده است:

      VoltsAx =1.613V
      VoltsAy = 1.258V
      VoltsAz = 1.515V

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

      DeltaVoltsAx = 1.613V – 1.2V = 0.413V
      DeltaVoltsAy = 1.258V – 1.2V = 0.58V
      DeltaVoltsAz = 1.515V – 1.2V = 0.315V

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

      Sensitivity = 350mV/g = 0.35V/g

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

      Ax = DeltaVoltsAx / Sensitivity

      Ax = 0.413V / 0.35V/g =~ 1.18g
      Ay = 0.58V / 0.35V/g =~ 1.65g
      Az = 0.315V / 0.35V/g =~ 0.9g
      و بدین ترتیب تمامی مقادیر مربوط به ولتاژها به شتاب تبدیل شدند.
      موفق باشید

  • shahab73_gh

    سلام خسته نباشید

    خواستم ببینم ایا میشه حرکت میزان حرکت رو با استفاده از این سنسور به دست اورد ؟

    منظورم اینه که مثلا اگه ما به اندازه 3cm این سنسور رو به سمت +x حرکت بدیم ، ایا میشه دقیقا همین خروجی رو هم ببینیم یعنی x=+3cm

    ممنون

    • قاسم قاسمی

      سلام و احترام
      در مورد سوالي كه پرسيديد اگر با اين دقتي كه شما عرض كرديد نتايج را مي خواهيد جواب خير است. البته نوع شتاب سنج هم بسيار مهم مي باشد و بايد بتواند زواياي مربوط به شتاب گرانش و شتاب ناشي از حركت را با دقت بالايي محاسبه كند.
      در صورتی که از اين روش استفاده كنيد نیاز دارید که ثوابت انتگرال گیری از شتاب را محاسبه کنید که در هر مرحله ممکن است مقداری خطا داشته باشد و به صورت مرتبه 2 افزایش می یابد که خطای بسیار زیادی است و عملا کار با این سیستم اینرسی برای جاهایی که به دقت نیاز داریم غیرممکن است. در این روش ابتدا از شتاب انتگرال گیری می کنند تا سرعت بدست آید و سپس از سرعت انتگرال گیری می کنند تا مکان جسم بدست آید. فرض کنید جسم در لحظه t=t0 در مکان [ x0 , y0 , z0 ] قرار دارد و دارای سرعت اولیه [ vx0 , vy0 , vz0 ] است حال جسم در زمان t=t1 قرار میگیرد و شما مقدار شتاب از روی شتاب سنج(شتاب متوسط از زمان t0 تا زمان t1) را به صورت [ ax1 , ay1 , az1 ] می خوانید با انتگرال گیری از آن سرعت در زمان t=t1 را بدست می آورید:
      [ vx1 و vy1 و vz1 ] = [ vx0 + ax1 * (t1 – t0) و vy0 + ay1 * (t1 – t0) و vz0 + az1 * (t1 – t0) ]
      سرعت متوسط بین t0 و t1 به صورت زیر است:
      [ vx01 و vy01 و vz01 ] = [ (vx0 + vx1) / 2 و (vy0 + vy1) / 2 و (vz0 + vz1) / 2 ]
      و مکان در زمان t=t1 به صورت زیر بدست می آید:
      [ x1 و y1 و z1 ] = [x0 + vx01 * (t1 – t0)و y0 + vy01 * (t1 – t0)و y0 + vy01 * (t1 – t0) ]
      همانطور که در معادلات بالا مشاهده می کنید رشد خطا با توان 2 است.
      با آرزوي موفقيت براي شما

  • علی علیزاده

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

    من یک شتاب سنج 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
      موفق باشید.

      • shahab73_gh

        سلام خیلی ممنون بابت پاسخگوییتون

        خواستم ببینم ایا میشه شتاب رو در جهت x و y بدست اورد؟

         

        • قاسم قاسمی

          سلام مجدد
          بله مي توان اين شتاب را در هر سه جهت X , Y و Z به دست آورد. در حالت عادي كه يك شتاب سنج سه محوره بر روي زمين ساكن است شتاب در جهت هاي X و Y را صفر نشان مي دهد و شتاب در جهت Z را g كه همان شتاب گرانش است در نظر مي گيرد. در جلسه مربوط به سقوط آزاد و شتاب سنج اين نكات را شرح داده ايم كه مي توانيد از مطالب كوادكوپتر مشاهده كنيد.
          موفق باشيد

  • نوشتن نظر

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

    Optionally add an image (JPEG only)