ماژول RM3100 یک سنسور مغناطیسی سه محوره از محصولات شرکت PNI است. گذرگاه ارتباطی این ماژول SPI و I2C است. لذا نیازی به مبدل های آنالوگ به دیجیتال نیست. این سنسور بهترین عملکرد را در بین سنسور مشابه خود دارد بطوریکه حداقل 10 مرتبه از لحاظه رزولوشن و 20 مرتبه نویز کمتری نسبت به بهترین سنسورهای Hall Effect دارد. این سنسور با دقت بالایی میدان مغناطیسی را اندازه گیری می کند. لذا با استفاده از این سنسور می توان با دقت بالایی زاویه و جهت حرک را تشخیص داد.
این سنسور علاوه بر رزولوشن بالا و حاشیه امن سییگنال به نویز دارای توان مصرفی پایین و رنجی دینامیکی بالایی است. همچنین این سنسور قابلیت نمونه برداری بالایی است و حساسیت بسیار پایین نسبت به دما دارد.
ماژول RM3100 در شکل زیرنشان داده شده است. همچنین برای در شکل 2 ابعاد ادواتی که بر روی این ماژول قرار دارند به تصویر کشیده شده اند.
سخت افزار مورد نیاز
در این پروژه از بورد STM32F4DISCOVERY استفاده شده است. لازم به ذکر است روال راهاندازی در کلیه میکروکنترلرهای STM32 مشابه یکدیگر هستند و لزومی برای خرید این بورد نیست و میتوان از بوردهای ارزان قیمت موجود در بازار استفاده کرد.
ماژول RM3100
نرم افزار مورد نیاز
نرم افزار STM32CubeMX یک ابزار گرافیکی برای تولید برنامه برای میکروکنترلر ARM سری cortex-M است. در این پروژه از این نرم افزار برای تولید کد استفاد شده است. همچنین نرم افزار IAR Embedded work bench برای ویرایش، کامپایل و برنامه ریزی میکروکنترلر مورد استفاده قرار گرفته شده است.
در این پروژه از واحدهای GPIO، SPI و UART استفاده شده است. از GPIO برای کنترلر پایه Chip Select ماژول RM3100 و از واحد SPI برای ارتباط با ماژول RM3100 و همچنین به منظور ارسال داده به کامپیوتر از واحد UART استفاده شده است.
پایه های ماژول
Vcc: پایه ولتاژ ورودی ماژول است. مقدار آن باید بین 2 تا 3.6 ولت باشد.
GND: پایه زمین ماژول است.
DRDY: هنگامیکه اندازه گیری به اتمام برسد این پایه یک میشود.
CLK: پایه کلاک گذرگاه SPI است. حدکثر مقدار آن یک مگاهرتز است.
MISO: پایه Master In Slave Out گذرگاه SPI است.
MOSI: پایه Master Out Slave In گذرگاه SPI است.
SSN: پایه chip select گذرگاه SPI است.
نحوه اتصال
در جدول 1 نحوه اتصال ماژول به میکروکنترلر نشان داده شده است. در این پروژه از SPI3 و از پایه PA4 بعنوان Chip Select استفاده شده است. لازم به ذکر است لزومی به استفاده از SPI3 و پایه PA4 نیست و می توان از واحدهای دیگر SPI نظیر SPI1 نیز استفاده کرد.
جدول 1
میکروکنترلر STM32
ماژول RM3100
3.3V
Vcc
GND
GND
—
DRDY
PC11
MISO
PC12
MOSI
PA4
SSN
PC10
CLK
نحوه انجام تنظیمات اولیه در نرم افزار STM32CubeMX
ابتدا نوبت به تنظیم کلاک میکروکنترلر است. تنظیم کلاک با توجه به سخت افزار موردنظر انجام میشود. بعنوان مثال کلاک سیستم می تواند داخلی و یا خارجی باشد. در این پروژه از کریستال خارجی هشت مگاهرتزی استفاده شده است. در زیر چگونگی تنظیم کلاک نشان داده شده است.
تنظیم واحد SPI
در تنظیم واحد SPI باید نکات زیر را در نظر گرفت:
حداکثر فرکانس کلاک SPI یک مگاهرتز است.
ارسال داده بصورت MSB first باشد.
مد SPI باید CPOL = CPHA = 1 یا CPOL = CPHA = 0 باشد.
در شکل 4 نحوه تنظیم واحد SPI نشان داده شده است.
تنظیم UART
از UART برای ارسال داده به کامپیوتر استفاده شده است. در این پروژه آموزشی برای سادگی از حالت بدون DMA و وقفه استفاده شده است. مقدار Baudrate نیز 115200 تنظیم شده است. نحوه تنظیم آن در شکل 5 نشان داده شده است.
تنظیمات GPIO
همانطور که در بخشهای قبل ذکر گردید پایه Chip select گذرگاه SPI بصورت نرم افزاری تنظیم می شود. برای این منظور تنها کافیست در قسمت Pinout View بر روی پایه مورد نظر کلیک چپ کرده و گزینه GPIO _output را انتخاب کنید. در چگونگی تنظیم پایه نشان داده شده است.
پس از انجام تنظیمات فوق به سربرگ Project Manager رفته و نام پروژه و محل ذخیره آن را مشخص کنید و از قسمت Toolchain/IDE گزینه EWARM V8 را انتخاب کرده و در نهایت بر روی گزینه GENERATE CODE کلیک کنید. در شکل زیر چگونگی تنظیم نشان داده شده است.
در این پروژه از نرم افزار IAR استفاده شده است ولی میتوان از ابزارهایی نظیر Keil و … نیز استفاده نمود.
توسعه نرم افزار
برای خواندن داده از ماژول RM3100 دو روش وجود دارد. روش اول استفاده از مکانیزم interrupt و یا وقفه و روش دوم polling و یا سرکشی است. در روش وقفه از پایه DRDY برای ایجاد وقفه استفاده میشود. این پایه هنگامیکه داده سنسور آماده باشد یک میشود و بعد از خواندن داده مجددا صفر میشود. در روش دوم داده سنسور بطور مداوم خوانده میشود و در صورتیکه بیت DRDY در رجیستر STATUS یک باشد داده معتبر خواهد بود. در این پروژه برای سادگی از روش polling استفاده شده است.
بطور خلاصه برای استفاده از ماژول باید گامهای زیر طی شود:
تنظیم مناسب Cycle time: Cycle time تعداد کلاکهای لازم برای اندازه گیری را مشخص میکند که برای هر سنسور میتواند متفاوت باشد. هر چقدر مقدار Cycle Time بزرگتر باشد رزولوشن و بهره آن بالاتر میرود و هر چقدر کمتر باشد مدت زمان اندازه گیری کمتر خواهد بود.
برای تنظیم مقدار Cycle Time باید رجیسترهای CCX، CCY و CCZ ست شوند. طول این رجیسترها 16 بیت میباشد لذا میتواند مقدار آنها میتوانند بین 0 تا 65535 باشد. در کد زیر چونگی تنظیم این نشان داده شده است:
گام بعدی خواندن داده از سنسور است. برای خواندن داده ابتدا رجیستر CMM را تنظیم نمود. فیلدهای این رجیستر در شکل 8 نشان داده شده است. با یک کردن بیت START سنسور بصورت مداوم نمونه برداری میکند. بیت های CMX، CMY و CMZ نیز مشخص میکنند که در کدام راستا نمونه برداری انجام شود. با یک کردن هر کدام از این بیتها مکانیزم نمونه برداری در راستای متناظر با آن فعال میشود. بیت DRDM نیز رفتار پایه DRDY را مشخص میکند. در صورتیکه این بیت یک باشد، بعد از هر بار که نمونه برداری به اتمام رسید پایه DRDY یک میشود.
در صورتیکه بخواهیم از هر سه محور بخوانیم باید عدد 0x79 نوشته شود.
بعد از تنظیم رجیستر CMM میتوان مقادیر سنسورها را خواند. بایت اول دریافتی همواره رجیستر STATUS است. بیت با ارزش این رجیستر مقدار DRDY است. در صورتیکه این بیت یک باشد مقدار خوانده شده معتبر است.
در کد زیر نحوه تنظیم رجیستر CMM نشان داده شده است.
در کد زیر نیز نحوه خواندن داده از سنسور نشان داده شده است.
در نهایت تابع main بصورت کد زیر است.
لازم به ذکر است که پروژه STM32CubeMX و IAR ضمیمه گزارش شده اند.
سلام این ماژول نیاز به compensation با gyro داره ؟کالیبره کردنش به چه صورتیه؟