اطلاعیه

Collapse
No announcement yet.

خواندن زاویه از gyro مدل rm-g145 جهت استفاده در ربات پرنده

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

    خواندن زاویه از gyro مدل rm-g145 جهت استفاده در ربات پرنده

    با سلام خدمت دوستان عزیز.
    من به همراه دوستانم در حال ساخت یک روبات پرنده quadrotor هستیم. برای تشخیص زاویه روبات نسبت به زمین در سه محور x و y و z، اقدام به خریداری یک gyro که مدل آن rm-g145 است کردیم. ولی متاسفانه در خواندن زاویه ها با مشکل برخورد کردیم.
    دسترسی به این gyro از طریق پورت i2c هستش و همانطور که می دونید در code vision برای کار با i2c کتابخانه ای به نام i2c.h وجود داره که شامل توابع آماده برای دسترسی به وسایلی است که از طریق پورت i2c میکرو به میکرو متصل شده اند. ما از این توابع برای ازسال اطلاعات به gyro استفاده می کنیم.
    برای اینکه سرتون رو درد نیارم مشکلم رو فعلا به ضورت کلی بیان می کنم و اگه نیاز شد به صورت جزئی تر مشکلم رو شرح می دم.
    مشکل اینه که من آدرس i2c جایرو رو برای دسترسی به رجیستر های اون ندارم. شایدم دارم ولی نمی دونم چطوری باید اطلاعات رجیستری که مثلا زاویه در جهت محور x رو نگه می داره رو بخونم. در کاتالوگ این مدل gyro که ما خریدیم نوشته آدرس i2c این gyro عدد 0x21 (مبنای 16) هستش ولی خروجی این دستور ما (i2c_write(0x21 همراره صفره. چون اگه اون آدرس معتبر باشه این دستور باید خروجی 1 بده. اون 1 در واقع همون acknowledge هستش که در صورت موفقیت آمیز بودن عمل نوشتن از سمت دستگاه slave ارسال میشه.
    در ابتدا می خوام بدونم کسی با این نوع gyro کار کرده؟ و آیا کسی اصول دسترسی به رجیستر های gyro ای که با پورت i2c کار می کنه رو می دونه؟

    خیلی ممنون

    #2
    پاسخ : خواندن زاویه از gyro مدل rm-g145 جهت استفاده در quadrotor

    آدرس I2C هفت بیتی هست (0x21=0100001)و شما برای خوندن از آی سی یه دونه 1 به کم ارزشترین بیت بذار میشه آدرس هشت بیتی و برای نوشتن در آیسی یه 0 بذار تو کم ارزشترین بیت در نتیجه نوشتن میشه آدرس 0x42 و موقع خوندن آدرس میشه 0x43. تو مثال زیر نحوه خوندن یک رجیستر آی سی HMC5843 رو نشون دادم
    کد:
    [LEFT]/// Slave add+write=0x3C , Slaveadd+Read=0x3D
    /// 7bit address is 0x1E
    
    //////// Read HMC5843 register on address add
    unsigned char read5843reg(unsigned char add)
    {
      unsigned char regvalue=0;
      while(!i2c_start())   //wait here to free bus
      {#asm("wdr")}
      i2c_write(0x3C);    //slave adress+write
      i2c_write(add);     //set register address
      i2c_stop();       //restart (stop followed by start)
      i2c_start();
      i2c_write(0x3D);    //slave adress+Read
      regvalue=i2c_read(0x00);
      i2c_stop();
      return(regvalue);  
    } [/LEFT]
    جدیدترین ویرایش توسط فکر; ۱۲:۰۲ ۱۳۹۵/۰۳/۱۳. دلیل: نظم بخشیدن به متن

    دیدگاه


      #3
      پاسخ : خواندن زاویه از gyro مدل rm-g145 جهت استفاده در quadrotor

      از راهنمایی تون واقعا متشکرم.
      اگه اجازه بدید چند تا از سوالاتی که برام باقی مونده در مورد کدی که لطف کردید نشون دادید مطرح کنم:
      1- آیا این برنامه مقدار موجود در رجیستر add رو می خونه و کلمه add همون آدرس رجیستریه که می خوایم ازش بخونیم؟ اگر بله این آدرس رو من توی gyro خودم چطوری بدست بیارم چون توی کاتالوگ gyro اشاره ای به اون نشده. مثلا نمی دونم آدرس رجیستری که زاویه نسبت به محور x رو نگه می داره چیه.
      2- اگر می خواستیم در یکی از رجیستر های آی سی مورد نظر شما چیزی بنویسیم آیا باید بعد از i2c_write(add); مقدار مورد نظر خودمون رو i2c_write می کردیم؟

      دیدگاه


        #4
        پاسخ : خواندن زاویه از gyro مدل rm-g145 جهت استفاده در quadrotor

        در مورد سوال 1- بله اون کد رجیستر واقع در آدرس add رو میخونه . آدرس رجیسترهای داخلی قطعه رو باید در دیتا شیتش پیدا کنید پس یه بار دیگه دیتا شیت رو کامل بخونید(دیتا شیت رو از سایت شرکت سازنده بهتره که دانلود کنید تا کامل باشه)
        2- برای نوشتن در رجیسترهای داخلی آی سی معمول اینه که بعد از write آدرس آی سی ، آدرس رجیستر و بعدش هم مقداری که میخوایم رو write میکنیم
        اینم یه مثال برای راه اندازی اولیه همون آی سی که توی چند تا از رجیسترهاش مینویسیم
        کد:
        [LEFT]
        /////// initilize HMC5843
        void init_5843(void)
        {
          while(!i2c_start())   //wait here to free bus
           {#asm("wdr")}
          i2c_write(0x3C);    //slave adress+write
          i2c_write(0x00);    //Configuration Register A
          i2c_write(0x18);    //Normal mode, 50Hz
          i2c_stop();       
          delay_ms(10);
        
          while(!i2c_start())   //wait here to free bus
           {#asm("wdr")}
          i2c_write(0x3C);    //slave adress+write
          i2c_write(0x02);    //Mode Register
          i2c_write(0x00);    //Continuous-Conversion Mode
          i2c_stop();       
          delay_ms(10);
          #asm("wdr");// Reset WDT   
        }[/LEFT]
        جدیدترین ویرایش توسط فکر; ۱۲:۰۶ ۱۳۹۵/۰۳/۱۳. دلیل: نظم بخشیدن به متن

        دیدگاه


          #5
          پاسخ : خواندن زاویه از gyro مدل rm-g145 جهت استفاده در quadrotor

          از راهنمایی تون خیلی ممنونم.
          من تازه فهمیدم که مدل gyro من idg650 هست. من هرچی کاتالوگ این قطعه رو خوندم نتونستم آدرس رجیسترهایی که زاویه ها و همچنین دما رو نگه می دارند رو بدست بیارم. البته توی سایت شرکت roboard یک کد نمونه برای کار با idg650 هستش ولی به زبان ویژوال سی هستش نه code vision. در این مثالی که تو سایت بود از کتابخانه های آماده ای استفاده شده بود که توسط خود شرکت roboard ساخته شده بود و من نتونستم معادل code vision اون رو بنویسم. کد نمونه شرکت roboard از این لینک http://www.roboard.com/Files/G144/RM...ample_Code.zip قابل دانلود هستش.
          مثلا یکی از مشکلاتی که دارم اینه که i2c_read یک بایت رو میخونه ولی در اون مثال توابعی هست که دو بایت پر ارزش و کم ارزش رو می خونه.
          اگه مثالی در مورد idg650 که در code vision نوشته شده رو قرار بدید ممنون می شم.
          با تشکر مجدد

          دیدگاه


            #6
            پاسخ : خواندن زاویه از gyro مدل rm-g145 جهت استفاده در quadrotor

            تو اکثر آی سی هایی که با I2C کار میکنن برای کم کردن حجم ارتباط کنترلر با آی سی از روش افزایش آدرس خودکار استفاده میشه . این یعنی چی ؟ اگه تو کدی که من برای گذاشتم دقت کرده باشی مثلا برای خوندن خروجی محور X دو بار باید ثباتهای داخلی آی سی خونده بشه که معنیش میشه دو بار START دوبار تنظیم آدرس Slave دو بار تنظیم آدرس رجیستر و وووووووو
            در حالیکه در روش افزایش آدرس خودکار ، شما وقتی محتویات یه رجیستر رو میخونی بلافاصله (یعنی بدون STOP و Start دوباره) یه بار دیگه از آی سی میخونی اون بطور خودکار محتویات رجیستر بعدی رو میفرسته بیرون که اینطوری کلی تو وقت میکرو صرفه جویی میشه. توی کدی هم که لینکش رو دادی از همین روش استفاده کرده
            (توی کد مثلا configuration register آدرسش 0x02 اومده)

            دیدگاه


              #7
              پاسخ : خواندن زاویه از gyro مدل rm-g145 جهت استفاده در quadroto

              این ماژول رو از کحا خریدی؟
              چند؟
              https://www.linkedin.com/in/mohammadhosseini69

              http://zakhar.blog.ir

              دیدگاه


                #8
                پاسخ : خواندن زاویه از gyro مدل rm-g145 جهت استفاده در quadrotor

                برای خرید ماژ<لهای شتابسنج، ژایرو و IMU میتونید برید اینجا پاساژ فرقانی بل الکترونیک
                http://bel-elc.com/index.php?option=...amp;cid=6:gyro

                دیدگاه


                  #9
                  پاسخ : خواندن زاویه از gyro مدل rm-g145 جهت استفاده در quadrotor

                  کسی نمیتونه کمک کنه؟؟؟؟؟

                  دیدگاه

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