اطلاعیه

Collapse
No announcement yet.

کمک در راه اندازی I2C

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

    #46
    پاسخ : کمک در راه اندازی I2C

    ببینید من با استفاده از mpu6050 به تنهایی و بدون قطب نما تونستم زاویه yaw رو بدست بیارم و اینم نتابج کارم:

    در اینجا در ابتدا فرض شده که جسم در راستای شمال جغرافیایی قرار دارد (ψ=0) .پس از حدود 30 نمونه داده شروع به چرخش سیستم به اندازه 90 درجه (1.57 رادیان) مثبت کرده و پس از مدتی 90 درجه مثبت دیگر به چرخش ادامه میدهیم به طوریکه جسم 180 درجه (3.14 رادیان) با شمال اختلاف دارد. این تغییرات در شکل 1 از نمونه حدود 30 تا 120 مشخص است. در ادامه 90 درجه منفی سیستم را چرخش داده و دو باره به حالت اولیه بر میگردانیم. در انتها میبینیم که این خطای به وجود آمده حدود 0.1 رادیان یا حدود 6 درجه است.
    کل زمان گرفتن 300 نمونه 52 ثانیه بوده است، که تعداد نمونه ها کم بوده بعنی فرکانس نمونه گیری کمتر از 6Hz بوده البته سیستم رو هم آروم حرکت دادم و میشه با کار بیشتر خطا رو کمتر هم کرد
    در هر حال امیدوارم بدون فیلم شما بپذیرید که اینکار امکان پذیره!
    لازم به ذکره توی شکل زاویه برحسب رادیان نشان داده شده.
    کد مربوط به محاسبات رو توی نرم افزار متلب نوشتم و برای گرفتن اطلاعات از سنسور هم از avr استفاده کردم.
    محاسبات پیچیدس و به جز این زاویه ، زوایای roll و pitch و سرعت در سه جهت جغرافیایی و موقعیت رو میده که البته خطای بالایی دارن

    در ضمن در مورد فیلتر کالمن همونظور که آقا احمد گفتن یه تخمین زنندس ، من زیاد در موردش نمیدونم ولی در این حد میدونم که داده های مثلا سرعت که میشه با محاسبات از mpu6050 بدست آورد رو با داده های سرعت از یه سنسور دیگه یا مثلا gps مقایسه میکنه و تخمین خطا رو محاسبه میکنه و از این تخمین برای اصلاح خطا استفاده میکنه.

    دیدگاه


      #47
      پاسخ : کمک در راه اندازی I2C

      نوشته اصلی توسط pcsen
      ببینید من با استفاده از mpu6050 به تنهایی و بدون قطب نما تونستم زاویه yaw رو بدست بیارم و اینم نتابج کارم:

      در اینجا در ابتدا فرض شده که جسم در راستای شمال جغرافیایی قرار دارد (ψ=0) .پس از حدود 30 نمونه داده شروع به چرخش سیستم به اندازه 90 درجه (1.57 رادیان) مثبت کرده و پس از مدتی 90 درجه مثبت دیگر به چرخش ادامه میدهیم به طوریکه جسم 180 درجه (3.14 رادیان) با شمال اختلاف دارد. این تغییرات در شکل 1 از نمونه حدود 30 تا 120 مشخص است. در ادامه 90 درجه منفی سیستم را چرخش داده و دو باره به حالت اولیه بر میگردانیم. در انتها میبینیم که این خطای به وجود آمده حدود 0.1 رادیان یا حدود 6 درجه است.
      کل زمان گرفتن 300 نمونه 52 ثانیه بوده است، که تعداد نمونه ها کم بوده بعنی فرکانس نمونه گیری کمتر از 6Hz بوده البته سیستم رو هم آروم حرکت دادم و میشه با کار بیشتر خطا رو کمتر هم کرد
      در هر حال امیدوارم بدون فیلم شما بپذیرید که اینکار امکان پذیره!
      لازم به ذکره توی شکل زاویه برحسب رادیان نشان داده شده.
      کد مربوط به محاسبات رو توی نرم افزار متلب نوشتم و برای گرفتن اطلاعات از سنسور هم از avr استفاده کردم.
      محاسبات پیچیدس و به جز این زاویه ، زوایای roll و pitch و سرعت در سه جهت جغرافیایی و موقعیت رو میده که البته خطای بالایی دارن

      در ضمن در مورد فیلتر کالمن همونظور که آقا احمد گفتن یه تخمین زنندس ، من زیاد در موردش نمیدونم ولی در این حد میدونم که داده های مثلا سرعت که میشه با محاسبات از mpu6050 بدست آورد رو با داده های سرعت از یه سنسور دیگه یا مثلا gps مقایسه میکنه و تخمین خطا رو محاسبه میکنه و از این تخمین برای اصلاح خطا استفاده میکنه.
      اولاً ممنون ، دوماً بی زحمت کدش رو هم بزارید ما هم یه تستی بکنیم، بد نیست؟ بی زحمت یه توضیحی هم بدید.
      __________________
      خب ، من یه سوال دارم آیا با این وجود حتی با کار بیشتر فکر می کنید در عمل میشه از این استفاده کرد؟

      من این همه دادم زدم ، که بابا ! در عمل نمیشه این زاویه yaw رو از جایرو انتظار داشت: زاویه Yaw که می گوییم منظور تمام 360 درجه است.
      نوشته اصلی توسط S_Ahmad
      حرف اصلی من اینه:
      در عمل امکان استفاده از جایروسکوپ برای بدست آوردن زاویه چرخش حول محور قائم بر سنسور فقط برای چند ثانیه امکان پذیر است.
      لذا در عمل نمی توان از جایرو برای زاویه چرخش حول محور قائم بر سنسور استفاده کرد.
      شما هر کاری بکنید این خطا وجود داره! عرض کرده بودم این خطای ذاتی جایرو هست. وقتی این خطا توی ذات جایرو هست شما هیچ راهی برای از بین بردن اون ندارید، جز تخمین زدن، که خود تخمین هم با خطا همراه هست!

      لذا حتماً باید برای رفع این خطا از یک عنصری با ماهیت متفاوت مثل شتاب فیدبک بگیرید تا زمینه ی حذف اون پیدا بشه.
      البته تاکید می کنم همان طور که قبلاً اشاره کردم، برای لحظات بسیار کوچک دیتای جایرو معتبر است.
      ____________________

      یکی از دوستان سال 88 این سنسور معروف ADXRS300 رو با قیمت باور نکردنی بعد از چند واسطه از آمریکا ، بعد مالزی و بعد ایران بدست آورد و روی یک ربات میکروماوس پیاده کرد به این امید که بشه ازش استفاده کرد.
      خلاصه بعد از چند ماه تلاش حاصلش این شد که زاویه چرخش مثل شما بدست می آمد ولی در عمل با خطا همراه بود.یعنی چی؟ یعنی اینکه زمانی که قرار بود 10 بار 360 درجه بچرخه، آخرش با +- 90 درجه اختلاف توقف می کرد. من از اون زمان فهمیدم که بله داستان از این قرار هست!
      ____________________

      حالا ، بازم خوبه ، شما با این برنامه برای اهدافی که زمان در اون خیلی کوچک هست(زیر 1 ثانیه) می تونید استفاده کنید.
      منتظر کد هستم، چون دوست دارم با روش کار شما آشنا بشوم.البته اگر اشکالی نداره!

      با سپاس


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

      دیدگاه


        #48
        پاسخ : کمک در راه اندازی I2C


        [color=rgb(51, 68, 102)]راهندازی سنسور MPU6050[/color]
        9 ساعت ago معرفی: سنسور InvenSense Mpu-6050 شامل شتاب سنج و جایرو MEMS در یک چیپ است،که دقت ... [color=rgb(51, 68, 102)]بیشتر بخوانید[/color] »

        دیدگاه


          #49
          پاسخ : کمک در راه اندازی I2C


          راهندازی سنسور MPU60509 ساعت ago معرفی: سنسور InvenSense Mpu-6050 شامل شتاب سنج و جایرو MEMS در یک چیپ است،که دقت ... بیشتر بخوانید»

          دیدگاه


            #50
            پاسخ : کمک در راه اندازی I2C

            دوستان عزیز سلام...
            میخواستم از دوستان صاحب تجربه یه راهنمایی بگیرم
            من بورد gy-521 و gy-85 رو برای پروژه دانشگاهم انتخاب کردم (به همراه یه بورد آموزشی بر پایه atmega32a). قصد دارم با gy-521 کارم رو شروع کنم. (هدف اولیه: راه اندازی mpu6050 بر روی بورد و خوندن مقادیر سنسور هستش.)
            به تازگی شروع کردم به یاد گرفتن codevision و اطلاعات محدودی درباره سنسور ها و کلا میکرو ها دارم. تو اینترنت دیدم منابع خوبی برای بورد های arduino وجود داره ولی بورد من arduino نیست متاسفانه...
            سوال اینکه آیا میشه با بورد خودم و codevision این ماژول رو راه بندازم؟ (از کجا شروع کنم و به چه چیزایی نیاز دارم؟)
            یا بهتره برم یکی از بورد های arduino رو بخرم و کلا یادگیریم رو بر اساس زبان خود arduino پیش ببرم؟ (کدوم بورد رو بخرم و از کجا یادگیری رو شروع کنم؟)

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

            دیدگاه


              #51
              پاسخ : کمک در راه اندازی I2C

              با بورد خودتون میتونید. نمونه کد راه اندازی شتابسنج ADXL345 با I2C در کدویژن تو انجمن هست سرچ کنید. دیتاشیت سنسورهاتون رو هم مطالعه کنید و عملکرد رجیسترهاشو خوب درک کنید

              دیدگاه


                #52
                پاسخ : کمک در راه اندازی I2C

                با سلام خدمت دوستان
                من میخوام ماژول l3g4200d رو راه اندازی کنم ولی گیر کردم
                دیتاشیته اونو کامل خوندم و مقداری هم با i2c کار کردم ولی نمیدونم چطورباید برنامشو برای ماژولم بنویسم :sad:
                به زبان بیسیک میشه نوشت؟
                میشه خواهش کنم منو راهنمایی کنید

                دیدگاه


                  #53
                  پاسخ : کمک در راه اندازی I2C

                  نوشته اصلی توسط lili61lili666
                  با سلام خدمت دوستان
                  من میخوام ماژول l3g4200d رو راه اندازی کنم ولی گیر کردم
                  دیتاشیته اونو کامل خوندم و مقداری هم با i2c کار کردم ولی نمیدونم چطورباید برنامشو برای ماژولم بنویسم :sad:
                  به زبان بیسیک میشه نوشت؟
                  میشه خواهش کنم منو راهنمایی کنید
                  هنوزم گیری؟؟
                  یا بگم برات
                  با تشکر

                  دیدگاه


                    #54
                    پاسخ : کمک در راه اندازی I2C

                    هنوزم گیری؟؟
                    یا بگم برات
                    با تشکر



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

                    دیدگاه


                      #55
                      پاسخ : کمک در راه اندازی I2C

                      سلام
                      با این یه برنامه که قبلا کار میکردیم
                      فقط جای print که تو هایپر ترمینال نشون میده رو lcd نشون بده
                      دیتا شیت رو هم یکم بخونی متوجه میشی
                      کد:
                      $regfile  = "m32def.dat"
                      $crystal  = 16000000
                      $baud    = 38400
                      $hwstack  = 64
                      $swstack  = 64
                      $framesize = 64
                      
                      dim tick    as dword          ' used for 100Hz tick count
                      dim tickn   as dword          ' used for next timer tick event
                      dim n     as integer         ' temp var for visual positioning
                      
                      dim X     as integer
                      dim Xl     as byte at X + 0 overlay
                      dim Xh     as byte at X + 1 overlay
                      
                      dim Y     as integer
                      dim Yl     as byte at Y + 0 overlay
                      dim Yh     as byte at Y + 1 overlay
                      
                      dim Z     as integer
                      dim Zl     as byte at Z + 0 overlay
                      dim Zh     as byte at Z + 1 overlay
                      
                      dim Temp    as byte
                      dim Status   as byte
                      dim Test_gyro as Byte
                      
                      Const WHO_AM_I    = &H0F
                      
                      Const L3G4200D_R   = &HD3
                      Const L3G4200D_W   = &HD2
                      
                      Const CTRL_REG1   = &H20
                      Const CTRL_REG2   = &H21
                      Const CTRL_REG3   = &H22
                      Const CTRL_REG4   = &H23
                      Const CTRL_REG5   = &H24
                      
                      Config Timer2= Timer, Prescale= 1024, Compare = Disconnect, Clear Timer= 1
                      OCR2A = 180 - 1
                      On OC2A TickCounter_isr
                      Enable OC2A
                      
                      $LIB "I2C_TWI.LBX"     ' uncomment for hardware I2C
                      'Config Scl = Portc.0    ' uncomment for software I2C
                      'onfig Sda = Portc.1    ' uncomment for software I2C
                      Config Twi = 400000
                      I2cinit
                      
                      Config Serialout = Buffered, Size = 254
                      Enable Interrupts
                      print
                      print "InitGyro: ";
                      gosub InitGyro
                      
                      do
                        if tick >= tickn then
                         Gosub Read_Gyro
                         print "Temp : "; temp;              "{027}[K"
                         print "Gyro-X: "; x;                "{027}[K"
                         print "Gyro-Y: "; y;                "{027}[K"
                         print "Gyro-Z: "; Z;                "{027}[K"
                      
                         n= x/256 : n=n+ 40
                         n= y/256 : n=n+ 40
                         n= z/256 : n=n+ 40
                      
                      
                      
                         tickn= tickn + 20
                        endif
                      
                        CONFIG POWERMODE = idle
                      Loop
                      
                      End
                      
                      TickCounter_isr:
                        incr tick
                      return
                      
                      InitGyro:
                        I2cstart
                        I2cwbyte L3G4200D_W
                        I2cwbyte WHO_AM_I
                        I2cstart
                        I2cwbyte L3G4200D_R
                        I2crbyte Test_gyro , Nack
                        I2cstop
                      
                      
                        I2cstart
                        I2cwbyte L3G4200D_W
                        I2cwbyte CTRL_REG1
                        I2cwbyte &B00000_1111     'Enable x, y, z and turn off power down
                        I2cstop
                      
                        I2cstart
                        I2cwbyte L3G4200D_W
                        I2cwbyte CTRL_REG2
                        I2cwbyte &B0010_1001     'adjust/use the HPF
                        I2cstop
                      
                        I2cstart
                        I2cwbyte L3G4200D_W
                        I2cwbyte CTRL_REG3
                        I2cwbyte &B0000_1000
                        I2cstop
                      
                        I2cstart
                        I2cwbyte L3G4200D_W
                        I2cwbyte CTRL_REG4
                      '  I2cwbyte &B0000_0000     'scale 250
                      '  I2cwbyte &B0001_0000     'scale 500
                        I2cwbyte &B1011_0000     'scale 2000
                        I2cstop
                      
                        I2cstart
                        I2cwbyte L3G4200D_W
                        I2cwbyte CTRL_REG5
                        I2cwbyte &B0000_0000     'high-pass filtering of outputs
                        I2cstop
                      return
                      
                      Read_Gyro:
                        I2cstart
                        I2cwbyte L3G4200D_W
                        I2cwbyte &B1010_0110     ' (OUT_TEMP AND &B10000000)
                        I2cstart
                        I2cwbyte L3G4200D_R
                        I2crbyte Temp,  Ack
                        I2crbyte Status, Ack
                        I2crbyte Xl,   Ack
                        I2crbyte Xh,   Ack
                        I2crbyte Yl,   Ack
                        I2crbyte Yh,   Ack
                        I2crbyte Zl,   Ack
                        I2crbyte Zh,   Nack
                        I2cstop
                      Return

                      دیدگاه


                        #56
                        پاسخ : کمک در راه اندازی I2C

                        ممنونم rekima از راهنماییتون
                        یه برنامه مشابه همین رو از یه سایته خارجی گرفته بودم که فقط یه بار خروجی رو نشون میداد و اونم اوله روشن کردنه مدار بود
                        ولی من با مگا 16 بسته بودم الان با برنامه شما با مکا32 هم تست کردم همین مشکل رو داشت
                        نمیدونم اشکال از چیه

                        دیدگاه


                          #57
                          پاسخ : کمک در راه اندازی I2C

                          سلام.ببخشید من میخوام ماژول adxl345 رو با هدربرد lpc1768 راه اندازی کنم.میشه راهنمایی کنید؟

                          دیدگاه

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