هدف ما از انجام این پروژه چیست؟
در این بخش قصد داریم سنسور IAM20380 را به وسیله میکروکنترلر آرم، سری STM32F راه اندازی کنیم. به منظور استفاده راحت تر و بهینه تر در این پروژه از دو ماژول آماده GB300G و GebraBit STM32F303 استفاده میکنیم.
این دو ماژول شامل مینیمم قطعات لازم سنسور IAM20380و میکروکنترلر STM32F میباشند که توسط تیم جبرابیت جهت آسان سازی کار فراهم شده اند.
در این آموزش چه چیزهایی یاد میگیریم؟
شما در این بخش ضمن راه اندازی و استفاده از سنسورIAM20380 ، به طور خلاصه با تمامی رجیسترهای سنسور IAM20380، نحوه تنظیم بخش های مختلف میکروکنترلر STM32 برای راه اندازی این سنسور با استفاده از پروتکل I2C، چگونگی استفاده از فایل کتابخانه و درایور مختص ماژول GB6300G، نحوه فراخوانی توابع و در نهایت دریافت داده های سنسور در کامپایلر Keil نیز آشنا خواهید شد.
برای انجام این پروژه به چه چیزهایی نیاز داریم؟
همانطور که احتمالا میدانید برای انجام این پروژه به سخت افزارها و نرم افزارهایی نیاز داریم. عناوین این سخت افزارها و نرم افزارها در جدول زیر در اختیارتان قرار داده شده که میتوانید با کلیک روی هرکدام از آنها، آنها را تهیه/دانلود کنید و برای شروع آماده شوید.
سخت افزارهای مورد نیاز
|
نرم افزارهای مورد نیاز
|
---|---|
Keil compiler
|
|
STM32CubeMX program
|
|
ST-LINK/V2 programmer
|
اولین قدم برای راه اندازی ماژول GebraBit IAM20380 با استفاده از رابط I2C آن است که ابتدا پروتکل ارتباطی SPI را با استفاده از جامپر های روی برد انتخاب کرده و سپس مانند تصویر زیر ماژول GebraBit IAM20380 را به صورت Pin To Pin بر روی ماژول GebraBit STM32F303 قرار دهیم:
توجه : تصویر بالا صرفا برای نمایش نحوه قرار گیری ماژول GebraBit IAM20380 بر روی ماژول GebraBit STM32F303 استفاده شده است . لذا برای استفاده از پروتکل ارتباطیI2C کاربر باید نسبت به انتخاب صحیح وضعیت جامپر های روی برد اقدام کند.
تنظیمات STM32CubeMX
در ادامه تنظیمات مربوط به هریک از بخش های I2C , RCC , Debug , Clock را در میکروکنترلر STM32F303 برای راه اندازی ماژول GebraBit IAM20380 را مرور می کنیم.
تنظیمات RCC
با توجه به وجود کریستال 8Mhz در ماژول GebraBit STM32F303 ، کلاک خارجی را در بخش RCC انتخاب می کنیم:
تنظیمات Debug&Programming
با توجه به دسترسی به پین های SWCLK و SWDIO در ماژول GebraBit STM32F303 ، برای کاهش تعداد پین هنگام Debug&Programming در بلوک SYS گزینه Serial Wire را در بخش Debug انتخاب می کنیم:
تنظیمات I2C
برای ارتباط از طریق I2C با ماژول GebraBit STM32F303 پین های PB8 و PB9 را برای عدم تداخل با حالت Serial Wire هنگام Debug&Programming ، به عنوان SCL و SDA انتخاب می کنیم :
تنظیمات Clock
تنظیمات کلاک مربوط به هریک از بخش های میکروکنترلر STM32F303 در این کد به شرح ذیل می باشد:
تنظیمات Project Manager
تنظیمات Project Manager به صورت زیر بوده که در اینجا ما از کامپایلر MDK-ARM ورژن 5.32 استفاده کرده ایم:
بعد از اتمام تمام تنظیمات فوق ، بر روی GENERATE CODE کلیک کرده و با اضافه کردن کتابخانه و درایور(تهیه شده توسط GebraBit) IAM20380 ، کد خود را به راحتی توسعه می دهیم.فایل STM32CubeMX , کتابخانه و درایور و پروژه KEIL را می توانید از انتهای این آموزش دانلود کنید.
کتابخانه و درایور IAM20380
GebraBit علاوه بر طراحی ماژولار سنسورها و آی سی های مختلف ، پیشرو در ارائه انواع کتابخانه های ساختاریافته و مستقل از سخت افزار به زبان C، جهت سهولت کاربران در راه اندازی و توسعه نرم افزاری آنها نیز بوده است.
بدین منظور پس از تهیه هر یک از ماژول های GebraBit ، کاربر می تواند با مراجعه به بخش آموزش ماژول مربوطه، کتابخانه مختص به آن ماژول که حاوی فایل .h و .c (Header and Source) و یک برنامه نمونه آموزشی تحت سخت افزار های GebraBit STM32F303, GebraBit ATMEGA32A یا Arduino می باشد را دانلود کند.
تمامی توابع و Structure های تعریف شده در کتابخانه ، با جزئیات کامل، کامنت گذاری شده و تمامی پارامتر های دریافتی در آرگومان توابع و مقادیر بازگشتی از آنها ، به اختصار توضیح داده شده است.با توجه به مستقل از سخت افزار بودن کتابخانه ها،کاربر به راحتی می تواند آن را در هر یک از کامپایلر های دلخواه اضافه کرده و با میکروکنترلر و برد توسعه مورد علاقه خود، آن را توسعه دهد.
فایل هدر IAM20380.h
در این فایل بر اساس دیتاشیت سنسور یا ای سی ، تمامی آدرس رجیسترها، مقادیر هریک از رجیسترها و Struct های مربوط به تنظیمات رجیستر های مختلف برای یک کانفیگ خاص ، تعریف شده است.
ساختار Gyro_Data
تمامی اطلاعاتی که می توان از یک ماژول GebraBit IAM20380 دریافت کرد، در این ساختار تعریف شده است:
ساختار IAM_20380_Conf
تنظیمات اصلی ماژول GebraBit IAM20380 که مربوط به رجیستر های 26 و 27 می باشد، در این ساختار تعریف شده است:
ساختار IAM_20380_FIFO_CFG
تنظیمات FIFO ماژول GebraBit IAM20380 که شامل رجیستر های 26 و 35 و 56 و 106 می باشد، در این ساختار تعریف شده است:
ساختار IAM_20380_LP
تنظیمات حالت LOW POWER ماژول GebraBit IAM20380 که شامل رجیستر های 25 و 30 می باشد، در این ساختار تعریف شده است:
ساختار IAM_20380_INT_CFG
تمامی تنظیمات وقفه Interrupt ماژول GebraBit IAM20380 اعم از نوع وقفه، زمان وقوع، سطح منطق و….. که شامل رجیستر های 55 و 56 می باشد، در این ساختار تعریف شده است:
ساختار IAM_20380_INT_STATUS
وضعیت وقفه Interrupt رخ داده در ماژول GebraBit IAM20380 که با خواندن رجیستر های 54 و 58 قابل بررسی می باشد ،در این ساختار تعریف شده است:
ساختار IAM_20380_PWR
تمامی تنظیمات مربوط به POWER MANAGEMENT ماژول GebraBit IAM20380 که شامل رجیستر های 107 و 108 می باشد، در این ساختار تعریف شده است:
ساختار IAM_20380_SET
در نهایت IAM_20380_SET ساختار کلی ماژول GebraBit IAM20380 بوده که با استفاده از ساختار های ذکر شده بالا تعریف شده است.در واقع کاربر برای تنظیمات ماژول GebraBit IAM20380 ، فقط این ساختار را مقدار دهی میکند و سپس با استفاده از تابع IAM_20380_init ، تمامی مقادیر را برای ماژول GebraBit IAM20380 ، به اصطلاح Initialize می کند.
فایل سورس IAM20380.c
در این فایل که به زبان C نوشته شده ، تمامی توابع با جزئیات کامل، کامنت گذاری شده و تمامی پارامتر های دریافتی در آرگومان توابع و مقادیر بازگشتی از آنها ، بطور واضح مانند تصویر زیر، توضیح داده شده است.از این رو در این قسمت به همین توضیحات اکتفا کرده و کاربران را برای اطلاعات بیشتر به بررسی مستقیم از این فایل دعوت می کنیم.
برنامه نمونه در Keil
بعد از تولید پروژه Keil با استفاده از STM32CubeMX و اضافه کردن کتابخانه IAM20380 ارائه شده توسط GebraBit ، به بررسی قسمت اصلی برنامه آموزشی نمونه، فایل main.c و مشاهده خروجی ماژول GebraBit IAM20380 در قسمت watch در محیط Debugging برنامه Keil می پردازیم.
شرح فایل main.c
اگر به ابتدای فایل main.c دقت کنید،متوجه می شوید که هدر IAM_20380.h برای دسترسی به ساختار ها و توابع مورد نیاز ماژول GebraBit IAM20380 ، اضافه شده است.در قسمت بعدی متغیرهایی نظیر FIFO_Buffer[515] برای ذخیره بافر IAM20380 و متغیری به نام Setting_Struct از نوع ساختار IAM_20380_SET (این ساختار در هدرIAM_20380.h بوده و در بخش توضیحات کتابخانه IAM20380 توضیح داده شد) که برای پیکربندی ماژول GebraBit IAM20380 می باشد،تعریف شده است.
در بخش بعدی کد نوشته شده، پیکربندی و تنظیمات ماژول GebraBit IAM20380 با استفاده از ساختار متغیر Setting_Struct (از نوع ساختار IAM_20380_SET ) انجام شده است.در نهایت با ارجاع ساختار Setting_Struct به آرگومان تابع IAM_20380_init() ، ماژول GebraBit IAM20380 پیکربندی می شود.
و در نهایت در قسمت while برنامه ، مقادیر ماژول GebraBit IAM20380 در 3 محور X , Y , Z به طور پیوسته دریافت میشود:
در متن برنامه نوشته شده در main.c توابع دیگری نیز استفاده شده است که به صورت کامنت درآمده اند.می توانید با uncomment کردن هر یک از عملکرد آنها نیز بهره مند شوید.
خروجی برنامه
حال پروگرامر STLINK V2 را با استفاده از آداپتور تبدیل STLINKV2 به GebraBit STM32F303 متصل می کنیم:
با اتصال پروگرامر STLINK V2 به GebraBit STM32F303 دیگر نیازی به اعمال تغذیه به ماژول های GebraBit STM32F303 و GebraBit IAM20380 نمی باشد، زیرا ولتاژ کاری خود را مستقیما از پروگرامر STLINK V2 دریافت میکنند.
در نهایت وارد حالت Debug شده و با اضافه کردن متغیر Gyro_Data_Value (از نوع ساختار Gyro_Data بوده و در فایل IAM20380.C تعریف شده است) به پنجره watch و اجرای برنامه ، تغییرات مقادیر ماژول GebraBit IAM20380 را در 3 محور X , Y , Z مشاهده می کنیم:
در ادامه می توانید پروژه راه اندازی ماژول GebraBit IAM20380 را با استفاده از ماژول GebraBit STM32F303 در محیط Keil و فایل STM32CubeMX ، شماتیک ماژول ها و دیتاشیت IAM20380 را دانلود کنید.