Mundarija:

I2C sensorli interfeysini ishga tushirish? - EMA32 yordamida MMA8451 interfeysi: 8 qadam
I2C sensorli interfeysini ishga tushirish? - EMA32 yordamida MMA8451 interfeysi: 8 qadam

Video: I2C sensorli interfeysini ishga tushirish? - EMA32 yordamida MMA8451 interfeysi: 8 qadam

Video: I2C sensorli interfeysini ishga tushirish? - EMA32 yordamida MMA8451 interfeysi: 8 qadam
Video: Winson WCS1800 WCS2750 WCS1500 Hall Effect Current Sensor with dispaly with over current protection 2024, Iyul
Anonim
I2C sensorli interfeysini ishga tushirish? - EMA32 yordamida MMA8451 interfeysi
I2C sensorli interfeysini ishga tushirish? - EMA32 yordamida MMA8451 interfeysi

Ushbu qo'llanmada siz boshqaruvchi (Arduino, ESP32, ESP8266, ESP12 NodeMCU) bilan ishlaydigan I2C qurilmasini (akselerometr) qanday ishga tushirish, ulash va olish haqida hamma narsani bilib olasiz.

1 -qadam: I2C - Inter IC muloqotining ajoyib dunyosini qanday boshlash kerak

Arduino, ESP Series, PIC, Rasberry PI va boshqalar ajoyib. Ammo sizda bitta narsa bo'lsa, nima qilasiz?

Eng yaxshisi, sensor va boshqalarni qo'shish. Bugungi kunda juda ko'p yangi texnologiyalar I2C protokoli yordamida kompyuter, telefon, planshet yoki mikrokontrollerga sensorlar bilan gaplashishga imkon beradi. Smartfonlar, agar ular akselerometr sensori bilan gaplasha olmasalar, sizning telefoningiz qaysi tomonga qaraganini bilishmasa, aqlli bo'lardi.

2 -qadam: I2C haqida umumiy ma'lumot

I2C-ketma-ket, sinxron, yarim dupleks aloqa protokoli bo'lib, u bitta avtobusda bir nechta xo'jayin va qullarning birgalikda yashashiga imkon beradi. I2C avtobusi ikki qatordan iborat: ketma -ket ma'lumotlar liniyasi (SDA) va ketma -ket soat (SCL). Ikkala chiziq ham tortishish rezistorlarini talab qiladi.

SDA (ketma -ket ma'lumotlar) - master va qul ma'lumotlarini yuborish va qabul qilish liniyasi. SCL (Serial Clock) - soat signalini uzatuvchi chiziq. Ishlab chiqarishning soddaligi va arzonligi kabi afzalliklari bilan I2C asosan past tezlikli periferik qurilmalarning qisqa masofalarda (bir fut ichida) aloqasi uchun ishlatiladi.

I2C haqida ko'proq bilishni xohlaysizmi? …

3 -qadam: I²C sensorlarini qanday sozlash kerak

Loyihaga kirishdan oldin, siz datchikning bir necha asoslarini tushunishingiz kerak. Sho'ng'ishdan oldin o'zingizga bir chashka qahva quying:)? …

I2C -ning ajoyib kuchi shundaki, siz bir xil to'rtta simga juda ko'p datchiklarni qo'yishingiz mumkin. Ammo bir nechta oldindan tayyorlangan modullar ulangan bloklar uchun siz bir necha smd rezistorni uzilishlardan olib tashlashingiz kerak bo'ladi, aks holda avtobusda tortishish juda agressiv bo'lishi mumkin.

Ma'lumotlar jadvalidan qanday ma'lumotlarni xohlaymiz?

  1. Sensor funktsiyasi
  2. Pinlar va pinlarning funktsional imkoniyatlari
  3. Interfeys tavsifi ("I2c manzil tanlash jadvali" ni ko'rishni unutmang)
  4. Ro'yxatdan o'tish !!

Hammasi yaxshi, siz uni osongina topasiz, lekin Ro'yxatdan o'tish ?? REGISTERS - bu I²C qurilmasidagi xotira joylari. Berilgan datchikda nechta registr borligi va ular boshqaradigan yoki o'z ichiga olgan narsalar haqida xulosa registr xaritasi deyiladi. Sensor ma'lumotlar varag'idagi ma'lumotlarning aksariyati har bir registr qanday ishlashini tushuntirishga bag'ishlangan va ular o'qish qiyin bo'lishi mumkin, chunki ma'lumot kamdan -kam hollarda to'g'ridan -to'g'ri ko'rsatiladi.

Sizga nimani nazarda tutayotganimni tushunish uchun: Ko'p turdagi registrlar bor, lekin men ularni kirish uchun ikkita umumiy turga ajrataman: Boshqarish va Ma'lumotlar registri.

1) nazorat registri

Sensorlarning aksariyati boshqaruv registrlarida saqlangan qiymatlarga asoslanib ishlashini o'zgartiradi. Boshqaruv registrlarini yoqish/o'chirish tugmachalari banklari sifatida tasavvur qiling, ularni bir oz 1 ga o'rnatib, 0 ni o'chirib qo'yasiz. I²C chipli sensorlar odatda bit kabi narsalar uchun o'nlab yoki undan ko'p operatsion sozlamalarga ega. Rejimlar, uzilishlar, o'qish-yozishni nazorat qilish, chuqurlik, namuna olish tezligi, shovqinni pasaytirish va hk

2) Ma'lumotlar registrlari Boshqaruv registrlarini almashtirish tugmalaridan farqli o'laroq, men ma'lumotlar chiqarish registrlarini raqamli ikkilik shaklda saqlanadigan konteynerlar deb o'ylayman. Shunday qilib, siz ma'lumotni bilishni xohlaysiz, har doim ma'lumot registrlarini o'qing, men kimman, qurilmani identifikatsiyalash uchun ro'yxatdan o'taman, holatlar reestri va boshqalar.

Shunday qilib, I²C sensorini ishga tushirish ko'p bosqichli jarayondir va operatsiyalarning to'g'ri tartibi ko'pincha ma'lumotlar jadvalining o'rniga teskari yo'nalishda yoziladi. "Bu sensordan o'qish uchun (1), (2), (3), (4) va boshqalarni bajaring" degan ro'yxat hech qachon aytilmaydi, lekin siz bu erda bit x ni o'rnatishdan oldin "registr bitlari" ta'rifini topasiz. Ro'yxatdan o'tish uchun siz boshqa nazorat registrida y ni o'rnatishingiz kerak.

Shunga qaramay, men har doim ma'lumot varag'i ko'p matnlarga qaraganda ko'proq interaktiv ekanligini topaman. Agar siz unga biron bir ma'lumot yoki ma'lumot uchun murojaat qilsangiz va u sizga barcha tafsilotlar, ulanishlar va havolalarni beradi. O'zingizning barcha ma'lumotnomalaringizni bilish uchun o'tiring va o'qing.:)

4 -qadam: Harakat - akselerometr bilan boshlang

Zamonaviy akselerometrlar-bu mikroelektromekanik tizimlar (MEMS), ya'ni ular eng kichik gadjetlar ichidagi kichik chipga sig'ishi mumkin. MEMS akselerometrlarida ishlatiladigan tezlanishni o'lchash usullaridan biri buloqlarga osilgan kichik o'tkazgich massasidan foydalanishdir. Qurilmaning tezlashishi buloqlarning cho'zilishiga yoki qisqarishiga olib keladi va o'tkazgich massasining burilishini yaqin, qattiq plitalarga sig'imning o'zgarishi orqali o'lchash mumkin.

Akselerometrlar quyidagi xususiyatlar bilan belgilanadi:

  1. Spetsifikatsiya diagrammalarida X, Y va Z deb belgilangan bitta o'qdan uchgacha bo'lgan o'qlar soni. E'tibor bering, ba'zi akselerometrlar 6 o'qli yoki 9 o'qli deb ataladi, lekin bu ularning boshqa MEMS qurilmalari, masalan, giroskop va/yoki magnitometrlar bilan birlashtirilganligini anglatadi. Ushbu qurilmalarning har birida uchta o'q bor, shuning uchun 3, 6 yoki 9 o'qli inert o'lchov birliklari (IMU) mavjud.
  2. Analog yoki raqamli chiqish turi. Raqamli akselerometr tezlashuv ma'lumotlarini I2C yoki SPI orqali o'qilishi mumkin bo'lgan raqamli tasvirga formatlash bilan shug'ullanadi.
  3. Tezlanish diapazoni g bilan o'lchanadi, bu erda 1g - Yerning tortishish kuchi tufayli tezlanish.
  4. MCU -dan olingan ma'lumotlarni tahlil qilish uchun zarur bo'lgan ba'zi hisob -kitoblarni yuklaydigan koprosessorlar. Akselerometrlarning ko'pchiligi tezlashtirish chegarasi (zarba) va 0-g (erkin tushish) holatini aniqlash uchun oddiy uzilish qobiliyatiga ega. Boshqalar MCUga yanada mazmunli ma'lumotlarni taqdim etish uchun xom ma'lumotlarni qayta ishlashni amalga oshirishi mumkin.

5 -qadam: Tekshirgich bilan interfeys

Biz ESP mikrokontrollerlarini trendda bilganimiz uchun, biz o'z misolimiz uchun ESP32 dan foydalanamiz. Shunday qilib, avval sizga Nodemcu-32s kerak.

Agar sizda boshqa ESP taxtasi yoki hatto Arduino bo'lsa, tashvishlanmang !!! Siz Arduino IDE va konfiguratsiyangizni Arduino, ESP NodeMCU, ESP32s va boshqalar uchun ishlab chiqish platalaringizga mos ravishda sozlashingiz kerak bo'ladi … Bundan tashqari, sizga I2C qismlari kerak bo'ladi. raqamli akselerometrni kesish taxtasi.

Va bir nechta o'tish simlari ….

6 -qadam: ulanishlar

Ulanishlar
Ulanishlar

Va bu erda tartib.

Men yuqoridagi moduldan Nodemcu-32s moduliga quyidagi ulanishni qo'lladim.

ESP32 - modul

3v3 - Vin

Gnd - Gnd

SDA 21 - SDA

SCL 22 - SCL

"Esingizda bo'lsin, ko'pincha hamma ishlab chiqish platalarida (asosan ESPda) qaysi pinlar ishlatilishini aniqlashga yordam beradigan aniq pin bor emas !! Shunday qilib, ulanishdan oldin, SDA va SCL uchun qaysi pimlardan foydalanish kerakligini biling."

7 -qadam: kod

Buning uchun Adafruit kutubxonasi kerak

downloads.arduino.cc/libraries/github.com/adafruit/Adafruit_MMA8451_Library-1.1.0.zip saytidan

Yuklab oling, oching va siz misollar papkasini topasiz, papkada Arduino IDE -da MMA8451demo -ni oching va mana bu erga borasiz ….

MMA8451 sensori interfeysi uchun quyidagi kodni tekshirgich bilan ko'rasiz

#qo'shing

#include #include Adafruit_MMA8451 mma = Adafruit_MMA8451 (); void setup (void) {Serial.begin (9600); Wire.begin (4, 5); / * nodeMCU ning SDA = D1 va SCL = D2 bilan i2c avtobusiga qo'shilish */ Serial.println ("Adafruit MMA8451 testi!"); if (! mma.begin ()) {Serial.println ("Ishga tushmadi"); vaqt (1); } Serial.println ("MMA8451 topildi!"); mma.setRange (MMA8451_RANGE_2_G); Serial.print ("Range ="); Serial.print (2 << mma.getRange ()); Serial.println ("G"); } void loop () {// "xom" ma'lumotlarni 14-bitli sonlarda o'qing mma.read (); Serial.print ("X: / t"); Serial.print (mma.x); Serial.print ("\ tY: / t"); Ketma -ket chop etish (mma.y); Serial.print ("\ tZ: / t"); Serial.print (mma.z); Serial.println (); / * Yangi sensor hodisasini oling */ sensors_event_t hodisasi; mma.getEvent (& hodisa); / * Natijalarni ko'rsatish (tezlanish m/s^2 bilan o'lchanadi) */Serial.print ("X: / t"); Serial.print (event.acceleration.x); Serial.print ("\ t"); Serial.print ("Y: / t"); Serial.print (hodisa. tezlashishi.y); Serial.print ("\ t"); Serial.print ("Z: / t"); Serial.print (event.acceleration.z); Serial.print ("\ t"); Serial.println ("m/s^2"); / * Sensor yo'nalishini oling */ uint8_t o = mma.getOrientation (); switch (o) {case MMA8451_PL_PUF: Serial.println ("Old portret"); tanaffus; MMA8451_PL_PUB holati: Serial.println ("Orqaga portret"); tanaffus; MMA8451_PL_PDF ishi: Serial.println ("Portret pastda"); tanaffus; MMA8451_PL_PDB ishi: Serial.println ("Orqaga portret"); tanaffus; ish MMA8451_PL_LRF: Serial.println ("Landshaft o'ng old"); tanaffus; ish MMA8451_PL_LRB: Serial.println ("Orqa tarafdagi manzara"); tanaffus; ish MMA8451_PL_LLF: Serial.println ("Landshaft chap old"); tanaffus; ish MMA8451_PL_LLB: Serial.println ("Orqa tarafdagi manzara"); tanaffus; } Serial.println (); kechikish (1000); }

Saqlash, tasdiqlash va yuklash ….

Seriyali monitorni oching, shunda siz shunga o'xshash narsani ko'rasiz, men sensorni harakatga keltirdim, shuning uchun har xil o'qishlar

X: -2166 Y: 1872 Z: 2186

X: -2166 Y: 1872 Z: 2186X: -4,92 Y: 5,99 Z: 4,87 m/s^2

Landshaft chap tomoni

X: -224 Y: -2020 Z: 3188

X: -5.10 Y: -3.19 Z: 7.00 m/s^2

Old tomondan portret

Xo'sh, agar hamma narsa kerakli darajada bo'lgan bo'lsa, endi sizda I2C asoslari va qurilmangizni qanday ulash haqida ma'lumot bor.

Lekin qurilma ishlamayapti ?? !

Faqat keyingi bosqichga o'ting ….

8 -qadam: I2C qurilmangizni ishga tushiring

I2C qurilmasini ishga tushirishning asosiy bosqichlari

Keling, tergov qilaylik ….

  • Ulanish to'g'ri … (yana tekshiring)
  • Dastur to'g'ri.. (Ha, bu test misoli..)

Yechish uchun bosqichlardan boshlang ….

1 -bosqich: qurilma manzilini tekshirish uchun I2C qurilmalarini skanerlash dasturini ishga tushiring va avval sizning I2C qurilmangiz yaxshi

Siz eskizni yuklab olishingiz va chiqishni tekshirishingiz mumkin.

Natija - qurilma ishlamoqda va sensorning manzili to'g'ri

I2C skaner. Tekshirilmoqda…

Topilgan manzil: 28 (0x1C) Bajarildi. 1 ta qurilma topildi.

2 -bosqich: Sensorlar kutubxonasini tekshiring

Adafruit_MMA8451.h faylini oching va qurilma manzilini toping

Natija - Manzil mening qurilmamdan farq qiladi?.

/*=============================================== =========================== I2C ADDRESS/BITS --------------------- -------------------------------------------------- * /#define MMA8451_DEFAULT_ADDRESS (0x1D) //! <Standart MMA8451 I2C manzili, agar A GND bo'lsa, uning 0x1C /*======================= ================================================= */

Do - Notepad -dan faylni tahrirlash (manzilni o'zgartirish) + Saqlash + IDE -ni qayta ishga tushirish

Bu ish. Biroq, siz o'qishingiz mumkin.

Shunday emas … ???

3 -bosqich: Wire.begin ustidan yozilganligini tekshiring?

Adafruit_MMA8451.c faylini oching va Wire.begin -ni toping.

Natija - bu bayonot ustidan yozilgan

/*********************************************** ************************* //*! @brief HW ni o'rnatadi (koeffitsientlar qiymatlarini o'qiydi va hokazo)* / / ******************************** **************************************/ bool Adafruit_MMA8451:: start (uint8_t i2caddr) {Wire.begin (); _i2caddr = i2caddr;

Do - Notepad -dan faylni tahrirlash (izoh bayonoti) + Saqlash + IDE -ni qayta ishga tushirish

Va nihoyat, qurilma ishlay boshladi …

Men bu o'quv qo'llanmani deyarli yuklayman, chunki uning asosiy maqsadi qanday qilib ishga tushirish, ma'lumotlar jadvalidan ma'lumotlarni olish, ulanish va I2C qurilmasini juda oddiy misol bilan ishlashini tushuntirish edi. Umid qilamanki, hamma narsa kerakli tarzda o'tadi va Sensorni ishga tushirish foydali bo'ladi.

Tavsiya: