اطلاعیه

Collapse
No announcement yet.

[آموزش] معرفی،راه اندازی و تست سنسورMPU6050 با AVR+کتابخانه+فیلم

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    [آموزش] معرفی،راه اندازی و تست سنسورMPU6050 با AVR+کتابخانه+فیلم

    با سلام.
    همان طور که قبلا در بعضی تایپیک ها وعده ی نمونه کد راه اندازی MPU6050 رو داده بودم، بالاخره یک وقت خالی گیرم اومد و کتابخانه ای برای MPU6050 آماده کردم و فیلمی هم تهیه کردم که در بلاگ ECA هم قرار گرفت و در اینجا هم لینکش رو می زارم.
    با توجه به حجم زیاد مطالب ، تا جای ممکن سعی بر خلاصه گویی شد ولی با این حال کلیپ آموزشی حدود 32 دقیقه زمان برد.

    _________________________________________
    برای خرید ماژول GY-521 می توانید به این بخش از فروشگاه مراجعه نمایید:
    ماژول GY-521


    برای خرید ماژول GY-87 می توانید به این بخش از فروشگاه مراجعه نمایید:
    ماژول GY-87

    مشهدی های عزیز، می توانند برای خرید این ماژولها و مشابهاتش با نمایندگی مرکزی مشهد(09154489800) تماس حاصل نمایند.
    _________________________________________

    دانلود پروژه راه اندازی شده به همراه فایل های کتابخانه MPU6050:
    پیوست شد
    (هرگونه کپی برداری فقط با ذکر منبع مجاز است!)
    این کتابخانه ی مقدماتی ولی کاربردی برای راه اندازی MPU6050 که در ماژول های GY87 و یا GY521 و ... بکار برده شده، توسط خودم آماده شده است، که بر اساس زبان C و در کامپایلر کدویژن پیاده سازی شده است!
    این کتابخانه در حال تکمیل است، و نسخه های پیشرفته تر آن در آینده به روز رسانی خواهد شد.
    نکته: تسلط بر AVR و بخصوص یادگیری I2C و USART از پیش نیازات کار با این کتابخانه است!

    دانلود دیتاشیت های MPU6050:
    http://dl.roboticngo.com/uploads/MPU6050-Datasheet-RoboticNGO-com-.rar
    _________________________________________
    لطفاً از پست های غیر ضروری اجتناب فرمایید.
    هر گونه سوال و یا راهنمایی پیرامون این سنسور را در این تالار عنوان نمایید.

    با تشکر S_Ahmad
    فایل های پیوست شده
    همواره يادمان باشد:
    1-مردان بزرگ اراده مي کنند و مردان کوچک آرزو
    2-افراد بزرگ، هميشه به دنبال ايده هاي بزرگند و افراد کوچک به دنبال افراد بزرگ
    3-هميشه سعي کن آنقدر کامل باشي که بزرگترين تنبيه تو براي ديگران گرفتن خودت از آنها باشد.

    #2
    چند نکته پیرامون کتابخانه

    بعضی از دوستان پیغام می دهند و ضمن تشکر ، مشکلات خود را بیان می کنند.
    ببینید در فیلم امکان آموزش USART و کتابخانه نویسی نیست و اینها جز مباحث حاشیه ای هست!
    ولی مهم ترین نکته این هست که مختصراً اشاره ای می کنم:

    اگر پروژه ای جدید تعریف کرده اید(توجه به پیکربندی صحیح USART و I2C بکنید)، برای اضافه کردن کتابخانه کافی است مراحل زیر را دنبال کنید:
    1- فایل های کتابخانه را در محلی مناسب قرار دهید(مثلاً مثل فایلی که دانلود کردید ، درون مسیر اصلی پروژه در یک پوشه)
    2- در پروژه اصلی در ابتدای برنامه MPU6050.h را include کنید.
    3-اگر کامپایلر شما کدویژن هست، از منوی Project گزینه ی Configure باز کنید.در زبانه ی Input File فایل MPU6050.c را Add کنید.
    4- برنامه را کامپایل کنید.
    _________________
    گاهی اوقات در تنظیمات نرم افزار کدویژن نکاتی را رعایت نمی کنید و بعد در هنگام نمایش اطلاعات در نرم افزار هایپرترمینال هیچ چیزی نمی بینید.
    این بخاطر این هست که تنظیمات کامپایلر در تولید کد رو رعایت نکردید.
    جنس متغیرهایی که در سریال منتقل می شوند، Float است، لذا باید در پنجره ی Configure (که از منوی Project باز میشه) زبانه ی C Compiler رو انتخاب و سپس زبانه ی Code Generation رو انتخاب و برای قسمت (s)printf Fearures گزینه ی float,width,precision رو انتخاب کنید.سپس Ok بزنید.
    _________________
    نکته ای که در فیلم از قلم افتاد، و به نوعی بد گفته شد و شاید موجب برداشت اشتباه شود:
    این هست که رجیستر RA_SMPLRT_DIV مقداری بین 0 تا 255 می تونه داشته باشه.
    ولی در فیلم به نوعی بهترین بازه ی SampleRateDiv بین 0 تا 7 رو اشاره کردیم، لذا این رو بخاطر داشته باشید که SampleRateDivمی تونه مقداری بین 0 تا 255 داشته باشه ولی به خاطر این نوع راه اندازی و طبق تجربه ی بنده این بهترین محدوده برای SampleRateDiv هست.

    با تشکر از همه! :bye
    همواره يادمان باشد:
    1-مردان بزرگ اراده مي کنند و مردان کوچک آرزو
    2-افراد بزرگ، هميشه به دنبال ايده هاي بزرگند و افراد کوچک به دنبال افراد بزرگ
    3-هميشه سعي کن آنقدر کامل باشي که بزرگترين تنبيه تو براي ديگران گرفتن خودت از آنها باشد.

    دیدگاه


      #3
      پاسخ : معرفی،راه اندازی و تست سنسورMPU6050 با AVR+کتابخانه+فیلم

      سلام
      اگه امکانش هست راجب راه اندازی قسمت dmp هم راهنمایی بکنید

      دیدگاه


        #4
        پاسخ : معرفی،راه اندازی و تست سنسورMPU6050 با AVR+کتابخانه+فیلم

        نوشته اصلی توسط pcsen
        سلام
        اگه امکانش هست راجب راه اندازی قسمت dmp هم راهنمایی بکنید
        dmp مسئله ی پیچیده ای هست ولی سخت نیست!
        برای راه اندازی dmp تمامی قسمت های سنسور اعم از FIFO , interrupt و ... راه اندازی بشه! که هر کدومشون یه داستانی برای خودشون دارن.
        لذا نمیشه در قالب یک راهنمایی یا یک فیلم آموزش داد.
        به نظر من حداقل یک کتاب می خواد.

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

        نکته ای که وجود داره با این سبکی که بنده ارائه دادم نیاز به dmp هست ، چون AVR توانایی انجام محاسبات لازمه رو نداره.
        ولی اگر شما این کتابخانه رو با همین سبک توسط ARM استفاده بکنید ،یعنی فقط اطلاعات خام و اساسی، همچنین پارامترهای مهم رو دریافت کنید سپس اونها رو در فیلترهای ذکر شده در فیلم مشارکت بدید می توانید خروجی های مختلفی رو داشته باشید و به حداکثر پایداری و دقت برسید. علت اینکه می گم ARM بدون dmp ، بخاطر اینکه همون ترکیب اطلاعات رو می شه با ARM با سرعت بالا انجام داد.
        ______________________

        ولی با این حال:
        متاسفانه شرکت Ivensense نمی خواهد که الگوریتم DMP در MPU6050 فاش شود، حتی رجیستر های اون رو در RegisterMap نشون نداده و بنده اطلاعات تکمیلی درباره ی نام رجیسترها و آدرس های اون ها رو از منابع مختلف جمع کردم و لیست رجیسترها در کتابخانه رو تکمیل کردم.

        کلاً کار DMP این هست که دیتای جایرو و شتاب رو با هم ترکیب بکنه، تا تاثیر خطای ذاتی هر سنسور رو به حداقل برسونه!

        چون درخواست راهنمایی کرده بودید باید گفت که بر اساس کنجکاوی هایی که من انجام دادم، بررسی کردم و فهمیدم که نتایج و اطلاعات خروجی DMP ، بسیار بسیار به خروجی یک فیلتر کامپلی منتاری شباهت داره!
        لذا اساساً اول باید این فیلتر رو یاد بگیرید.
        ______________________

        شما شروع کنید سوالی بود در خدمتم.
        همواره يادمان باشد:
        1-مردان بزرگ اراده مي کنند و مردان کوچک آرزو
        2-افراد بزرگ، هميشه به دنبال ايده هاي بزرگند و افراد کوچک به دنبال افراد بزرگ
        3-هميشه سعي کن آنقدر کامل باشي که بزرگترين تنبيه تو براي ديگران گرفتن خودت از آنها باشد.

        دیدگاه


          #5
          پاسخ : معرفی،راه اندازی و تست سنسورMPU6050 با AVR+کتابخانه+فیلم

          برا تبدیل این هدر فقط باید mpu6050.c رو تغییر داد ؟
          منبعی برا راه اندازی dmp سراغ دارید ؟

          دیدگاه


            #6
            پاسخ : معرفی،راه اندازی و تست سنسورMPU6050 با AVR+کتابخانه+فیلم

            نوشته اصلی توسط yusef12
            برا تبدیل این هدر فقط باید mpu6050.c رو تغییر داد ؟
            منبعی برا راه اندازی dmp سراغ دارید ؟
            بله خوشبختانه سایر بخش های کتابخانه بسیار کامل هستند.

            برای راه اندازی dmp هیچ منبع مطمئنی غیر از آردوینو وجود ندارد. ولی :
            https://github.com/jrowberg/i2cdevlib/tree/master/Arduino/MPU6050

            همواره يادمان باشد:
            1-مردان بزرگ اراده مي کنند و مردان کوچک آرزو
            2-افراد بزرگ، هميشه به دنبال ايده هاي بزرگند و افراد کوچک به دنبال افراد بزرگ
            3-هميشه سعي کن آنقدر کامل باشي که بزرگترين تنبيه تو براي ديگران گرفتن خودت از آنها باشد.

            دیدگاه


              #7
              پاسخ : معرفی،راه اندازی و تست سنسورMPU6050 با AVR+کتابخانه+فیلم

              سلام.میشه درمورد DPLF توضیح بدید.

              دیدگاه


                #8
                پاسخ : معرفی،راه اندازی و تست سنسورMPU6050 با AVR+کتا

                نوشته اصلی توسط sadeghmojtabaei
                سلام.میشه درمورد DPLF توضیح بدید.
                مخفف Digital Low Pass Filter هست!

                در رجیستر شماره 26 (Config) سه بیت اول این ضریب باید قرار بگیرد.
                محدوده ای بین 0 تا 6 دارد که طبق جدول زیر به ازای انتخاب هر ضریب، پهنای باند و تاخیر ناشی از انتخاب فیلتر پایین گذر مدنظر شما مشخص می شود.
                کد:
                   Accelerometer   |     Gyroscope     |
                  (Fs = 1kHz)      |               |
                  BW(Hz)  Delay(ms)  |  BW(Hz) 	Delay(ms) Fs(kHz) |
                0  260 	0 	 | 256 	0.98 	  8   |
                1  184 	2.0 	 | 188 	1.9 	  1   |
                2   94 	3.0 	 | 98 	2.8 	  1   |
                3   44 	4.9 	 | 42 	4.8 	  1   |
                4   21 	8.5 	 | 20 	8.3 	  1   |
                5   10 	13.8 	 | 10 	13.4 	  1   |
                6   5 	19.0 	 | 5 	  18.6 	  1   |
                همواره يادمان باشد:
                1-مردان بزرگ اراده مي کنند و مردان کوچک آرزو
                2-افراد بزرگ، هميشه به دنبال ايده هاي بزرگند و افراد کوچک به دنبال افراد بزرگ
                3-هميشه سعي کن آنقدر کامل باشي که بزرگترين تنبيه تو براي ديگران گرفتن خودت از آنها باشد.

                دیدگاه


                  #9
                  پاسخ : معرفی،راه اندازی و تست سنسورMPU6050 با AVR+کتابخانه+فیلم

                  در واقع یعنی نواسانات رو کم میکنه درسته؟
                  حالا بهترین مقدارش برای ژیروسکوپ چی میتونه باشه؟

                  دیدگاه


                    #10
                    پاسخ : معرفی،راه اندازی و تست سنسورMPU6050 با AVR+کتابخانه+فیلم

                    نوشته اصلی توسط sadeghmojtabaei
                    در واقع یعنی نواسانات رو کم میکنه درسته؟
                    حالا بهترین مقدارش برای ژیروسکوپ چی میتونه باشه؟
                    نه به این معنی که نوسان یا تغییرات رو کاهش بده، بیشتر این رو می رسونه که کاملاً بخشی از سیگنال مزاحم رو حذف می کنه! فیلتر می کنه!

                    برای جایرو به تنهایی هرچه BW بیشتر باشه، بهتره.
                    ولی از اونجا که در تنظیم DLPF شما هم تنظیمات شتاب سنج رو دارید هم جایرو لذا یک مقدار مناسب برای هردو باید در نظر گرفته بشود.

                    زیاد پارامتر حساسی نیست ، برای همین ما هم در کتابخانه رو یک رنج میانه گذاشتیم ، که نه سیخ بسوزه نه کباب !
                    همواره يادمان باشد:
                    1-مردان بزرگ اراده مي کنند و مردان کوچک آرزو
                    2-افراد بزرگ، هميشه به دنبال ايده هاي بزرگند و افراد کوچک به دنبال افراد بزرگ
                    3-هميشه سعي کن آنقدر کامل باشي که بزرگترين تنبيه تو براي ديگران گرفتن خودت از آنها باشد.

                    دیدگاه


                      #11
                      پاسخ : معرفی،راه اندازی و تست سنسورMPU6050 با AVR+کتا

                      من توی while میکرو فقط چهار دستور زیر رو نوشتم.
                      کد:
                           Get_AvrgAccel_Val();
                            Get_Accel_Angles();        
                            
                            printf("a%.1fb%.1fc%.1fd",Accel_In_g[X],Accel_In_g[Y],Accel_In_g[Z]);
                            printf("%.1fe%.1ff%.1fg",Accel_Angle[X],Accel_Angle[Y],Accel_Angle[Z]);
                      ولی حدود 0.7 ثانیه طول می کشه تا یه خط کامل روی هایپر ترمینال ظاهر بشه! که این خیلی زمان زیادی من حد اقل 6 فریم در ثانیه احتیاج دارم! می شه یه جوری این زمان رو کم کرد؟ با عوض کردن جایی در کتابخانه می شه؟

                      من اطلاعات حرکت رو به 3d max می فرستم و می خوام با تکون خوردن سنسور جسمی که تو مکس دارم هم تکون بخوره. از Accel_Angle که استفاده کردم، زاویه سنسور در x و y رو درست نشون می ده ولی در z رو نه! و Accel_In_g هم که در حالت ثابت هم عدد می اندازه و وقتی هم که حرکتش می دم، عددهاش تکون نمی خوره! فقط وقتی زاویه رو زیاد می کنم به سمتی که سنسور کج شده، عددش زیاد می شه! برای حرکت دادن جسمم چی کار کنم؟ زاویه z رو چی؟ AvrgGyro Raw یه عدد چهار رقمی با کلی نویز می فرسته!
                      توی یوتوب دیدم یه نفر خیلی نرم و با سرعت بالا هم جسم رو می چرخوند و هم حرکت می داد. لطفا راهنمایی کنین.

                      دیدگاه


                        #12
                        پاسخ : معرفی،راه اندازی و تست سنسورMPU6050 با AVR+کتابخانه+فیلم

                        محور yaw را فقط میشه با استفاده از gyroscope و قطب نما فهمید و شتاب سنج این محور را نداره.

                        دیدگاه


                          #13
                          پاسخ : معرفی،راه اندازی و تست سنسورMPU6050 با AVR+کتابخانه+فیلم

                          نوشته اصلی توسط sadeghmojtabaei
                          محور yaw را فقط میشه با استفاده از gyroscope و قطب نما فهمید و شتاب سنج این محور را نداره.
                          خوب mpu 6050 مگه gyroscope نداره؟! باید این کار رو بکنه دیگه.
                          زمان رو چی کار کنم؟ حرکت رو چی؟

                          دیدگاه


                            #14
                            پاسخ : معرفی،راه اندازی و تست سنسورMPU6050 با AVR+کتابخانه+فیلم

                            کسی نمی تونه کمک کنه؟ چه جوری زمان رو کم کنم؟ مال بقیه هم کنده؟

                            دیدگاه


                              #15
                              پاسخ : معرفی،راه اندازی و تست سنسورMPU6050 با AVR+کتابخانه+فیلم

                              برای سرعت اولا اون تابع get_avrgaccel_val نیازی نیست. حذفش کنید احتمالا سرعت دو برابر میشه. و اگر هم می خواهید سرعت باز هم بیشتر بشه داخل تابع get_accel_angles مقدار دیفاین GetAvrg را به off تغییر بدید.

                              ببینید از ژیروسکوپ می تونید زاویه بگیرید اما یه چیزی به اسم دریفت داره که همینطور به زاویه اضافه میشه به خاطر همین میان با قطب نما و توسط فیلتر های خاصی ترکیبش می کنند.

                              دیدگاه

                              لطفا صبر کنید...
                              X