Microcontrollers - Boshlang'ich savollar

  • Mikrokontrolder qancha datchiklardan foydalanishini qanday aniqlaysiz?
  • Mening tushunmovchiligim C# -ni to'g'ridan-to'g'ri hech qanday mikrokontrolderda ishlata olmasligingiz mumkin, ammo siz C# -ni ishlatib, USB orqali bog'lanishingiz va muayyan portni qidirishingiz mumkin. Bu haqiqatmi?

Men o'zim uchun quyidagi uchta mikrokontrolderga tushdim:

  • Arduino
  • Netdurino
  • AVR

Men birinchi loyiha sifatida buni qilishga harakat qilaman va, albatta, bu oson loyiha bo'lmasligi mumkin.

Men termometrni ulab olishni xohlayman va daraja + -3 taglik haroratni ochganda yoki panjarani yopishganda. Bundan tashqari, termometr ma'lumotlarini MySQL ma'lumotlar bazasida saqlashni xohlayman.

Demak, taglikning harorati 80 bo'lsa, harorat 83 dan katta bo'lganida men derazani ochish istayman. Agar uning 77-sonli oynasini yopmoqchi bo'lsam.

Men oynalarni ochadigan va yopadigan aniq mexanizmga qiziqish emasman, faqat signallarni ochish yoki yopish uchun qanday yuborishni bilaman.

7
@ChrisStratton Men OCH o'ng tomonga ochilgan jismoniy oynani boshqarishni so'rayapti va portlovchi/aktuatorni harakatga keltirib yopishgan deb o'ylayman.
qo'shib qo'ydi muallif Anindo Ghosh, manba
Ushbu mikrokontroller to'plamini tekshiring. Simsiz va simsiz ravishda qabul qiluvchiga yuborilishi mumkin bo'lgan harorat sensori mavjud. Bundan ham yaxshiroq, shu jumladan berilgan misol kodi buni siz uchun qiladi. ti.com/tool/ez430-rf2500
qo'shib qo'ydi muallif Hello World, manba
Faqat FYI, Arduino va Netdurino mikrokontroller emas, balki rivojlanish kengashlari. Arduino AVR bazasida joylashgan va Netduino STM32F mikrokreditlagichiga asoslangan
qo'shib qo'ydi muallif user9409, manba

5 javoblar

Microcontroller Information:

Netduino C# -ni ishlatsa-da, boshqa mikrokontroller C dasturlashtirilgan - bu ikkita butunlay boshqa dasturlash tillari. Buning ustiga, Arduino C ++ versiyasidan foydalanmoqda.

Mikrokreditlanuvchilar odatda C yoki yig'ilishda (ASM) dasturlashtiriladi. Agar siz yangi bo'lsangiz, Men C tavsiya qilaman. Arduino mikrokontrolir emas, u foydalanishda boshqa MCU'lar mavjud bo'lsa-da, u AVR mikrokontrolderiga asoslangan (odatda) rivojlanish taxtali. MCU'larda (mikrokontrol qurilmalari) o'rnatilgan bootloader o'rnatilgan bo'ladi. Bu MCU qanday ishlashini o'zgartiradigan kodning maxsus qismi. Arduino holida, dasturiy ta'minotning standart usullaridan farqli o'laroq, maxsus kutubxona vazifalariga kirish uchun ketma-ket port orqali dasturlash imkonini beradi. Bundan tashqari, taxta (odatda) ketma-ket konverterni USB-ga aylantiradi, chunki juda ko'p chiplarda ichki USB apparati yo'q, shuning uchun USB to'g'ri muloqot qilish uchun ishlashga to'g'ri keladi.

Savol 1:

Bir MCUda I/U pinalari aniqlanadi. Ular kirish yoki chiqishi mumkin bo'lgan pinlardir. I/U pinlari bo'lgani uchun to'g'ridan-to'g'ri raqamli sensorlarni to'g'ridan-to'g'ri ulashingiz mumkin, ammo analog sensorlar mavjud bo'lgan ADC (analogga raqamli konvertor) pinlari bilan cheklangan. Barcha MCUlarda ADC birligi yo'q. Bundan tashqari, tashqi GPIO kengaytmali yoki parallel ravishda, ketma-ket chiqish registri yordamida ko'plab boshqa sensorlarni ulashingiz mumkin. Ular bir necha MCU pin yordamida nazorat qilinishi mumkin va mavjud bo'lgan I/U pinlarini ancha kengaytirishi mumkin.

Savol 2:

Siz MCUga o'rnatilgan kompyuterda dastur yozasiz. Agar kod sizga tashqi aloqa (USB, ketma-ketlik, SPI, I2C, va boshqalar) orqali ruxsat berilsa, u ishlayotgan chip bilan bog'lanishingiz mumkin. Lekin bu qobiliyat siz yozishgan kodga bog'liq. MCU bilan bog'lanish uchun foydalanadigan til siz xohlagan narsalaringiz uchun ochiqdir, chunki aslida dasturiy til emas, balki apparat tomonidan amalga oshiriladi. Ehtimol, bu sizning "C #" so'zlari bilan ifodalagan narsadir.

Loyihangiz:

Haqiqatan ham, sizning loyihangiz murakkab emas: harorat sensori bilan tanishish (analog kabi ko'rinadi) va sensorni o'qish asosida derazani ochish/yopish uchun vosita haydash. Dvigatelni to'xtatish uchun, ehtimol, derazaga o'rnatilgan boshqa sensorga asoslanadi. Bu juda kichik bir MCU bilan bir nechta pin va kichik dastur maydoni bilan amalga oshirilishi mumkin (masalan, ATtiny24 yoki ATtiny25). Lekin, avvalo, biroz kichikroq ish ustida ishlamasangiz, juda ko'p muammolarga duch kelasiz deb o'ylayman. MCU ning standart "salom dunyosi" LEDni yoqish. Keyin miltillovchi tezlikni tugma bilan boshqarishga urinib, keyinchalik vosita va h.k.

Shaxsiy fikr ...

Men hech qachon Arduino-ni ishlatish istagim yo'q. Odatda AVR MCU'lar bilan o'zimga tegishli devorlarni qurmoqchiman, lekin odamlarning ularni ishlatishining sababini tushunaman. Shaxsan, o'zingizning elektron devoringizni qanday tasarlayacağınızı va dasturni boshqalarning kodini va asarini tasodifiy narsalarni birgalikda nusxalashdan ko'ra ko'proq o'rganish yaxshiroq deb o'ylayman. Men Arduino foydalanuvchilarining aksariyatini ko'rmoqdaman. Arduinoni o'z ichiga olmaydigan mikrokontrolderlar bilan ishlashni boshlash uchun onlayn darsliklari mavjud, bu sizning kelajakda o'zingizning elektron devoringizni loyihalashtirish bo'yicha biron bir rejangiz bo'lsa, nimani nazarda tutishni taklif qilaman. Agar hech narsa o'rganishni istamasangiz, unda nusxa ko'chiring, ammo nima bo'lishini bilmasangiz, hech qachon tushuna olmaydigan narsalarni qilishning odatdagi va samarali usullari ko'pincha ogohlantirilsin.

10
qo'shib qo'ydi
Uskunalar jihatidan Arduino mos keluvchi platforma boshqa minimal elektronlardan ortiq yashirishga muhtoj. Soyutlamanın aksariyati dasturiy ta'minot tomonida.
qo'shib qo'ydi muallif Andrew Walker, manba
Bu xato taxmin bilan boshlanadi. Qurilma ro'yxatida Netduino mavjudligi C# kodi bilan ishlaydigan ko'milgan mikrokontrolderga maxsus havola.
qo'shib qo'ydi muallif Andrew Walker, manba
Arduino shilimkasi uchun -1. Dasturchi va "maker" turidagi narsalar, masalan, rassomlar va boshqalar kabi narsalarga ko'proq qiziqqan kishilar uchun MCU arxitekturasining barcha murakkabliklarini, murakkab jismoniy o'chirgichlar va hokazolarni o'rganmaslikning hech qanday yomon joyi yo'q. Ba'zi hobbilar dasturiy ta'minotga asoslangan, - ba'zilari, ba'zilari, faqat minimal harakat/tushuncha bilan ishlash uchun bir narsa xohlaydilar. Hech kimni tushunmasangiz ham, tezda ishlaydigan narsa olish uchun kimdir kodini buzish bilan hech qanday xato yo'q.
qo'shib qo'ydi muallif Brad, manba
Ma'lumotni saqlash biroz murakkab bo'lishi mumkin, ammo imkonsiz emas. USB orqali muloqot qilish oson emas, ammo siz nima qilayotganingizni bilsangiz bo'ladi. USB uchun kod yozishga urinish o'rniga (juda murakkab ...) men ketma-ketlik orqali ketma-ket konverting chipiga USB orqali foydalanishni taklif qilaman. Ko'proq, juda oddiy kodlash va bir nechta mikrokreditchilarda standart ichki apparat sifatida paydo bo'ladi. Lekin shuni aytib o'tganimdek, USB-konvertor chipi ko'plab Arduino lövhalarida ishlaydi, chunki ular qanday qilib dasturlashtirilgan.
qo'shib qo'ydi muallif Olivier, manba
Yaxshi qo'ng'iroq. Men u bilan tanish emasman.
qo'shib qo'ydi muallif Olivier, manba
@Brad: Men hech qachon biror narsa noto'g'ri ekanligini aytmaganman. Ba'zi odamlar apparat haqida qayg'urmasligini tushunaman va bu juda yaxshi. Men oddiygina, agar kimdir kelgusida devredicisi (HARDWARE) tasarlamaktan g'amxo'rlik qilsa edi, rivojlanish kengashining o'rniga yalang'och chip bilan boshlash uchun harakat qilish kerak. Bundan tashqari, "MCU arxitekturasining murakkabligi" bilan hech qanday aloqasi yo'q. Men silikonda nimalar bo'layotganiga umuman e'tibor bermayman, lekin siz ma'lumot jadvaliga qaramasdan va o'zingiz uchun biroz o'rgansangiz, chip qanday qila olishi haqida hech qanday tasavvurga ega bo'lmaysiz, faqatgina boshqa odamlar nima qilgan.
qo'shib qo'ydi muallif Olivier, manba
@ Chris Stratton, men bunday o'ylar edim ...
qo'shib qo'ydi muallif Olivier, manba

Platformalar orasidagi tanlov

  • Arduino is an open source platform built (mainly) around on AVR (ATmega) chips, with one exception: the Arduino Due is built around as Cortex-M3 CPU. It is programmed in C, C++.
  • Netduino is a platform built around Cortex-M3 and Cortex-M4 chips. It is programmed in C#
  • AVR is a family of microcontrollers by Atmel, programmed in C, C++, or Assembly. The microprocessors are at the heart of most (but not quite all) Arduinos.

Siz tanlagan qaysi biri bu shaxsiy ta'mga bog'liq. AVR, Arduino-dan ancha past darajada, shuning uchun agar yangi boshlanayotgan bo'lsangiz, Arduino tezda boshlashni osonlashtiradi. Netduino, aslida C# ni istaysizmi, ammo Arduino Netduino'dan ko'ra yaxshiroq qo'llab-quvvatlanadi.

Kompyuterning ketma-ket/USB portiga ulash

Kompyuter tomonida siz tanlaganingizga qaramay, ketma-ket port/USB orqali Arduino/Netduino/yalang'och AVR chip/devoriga interfeysni qidirasiz. Kompyuter tomonida siz istalgan dasturiy tilidan ketma-ket portlarga kirish imkonini beradigan darajada foydalanishingiz mumkin. Buning ishlash usuli Arduino/Netduino/yalang'och AVR ning ketma-ket/USB portidan o'qish va yozishni ta'minlaydi va shu bilan sizning kompyuteringiz dasturi bo'ladi. Aloqa paydo bo'ladi.

Ko'rinib turgan tomonda siz ko'rib chiqadigan narsalarning ko'pi USARTga ega bo'ladi, ya'ni ketma-ket aloqa o'rnatiladi. Shunga qaramay, insonning toza AVR chipslari qutidagi tashqi USB porti emas: Kurt E Clothier ba'zi bir fikrlarni bir necha AVR chipslari ichki USB-quvvatlashiga ega . Bir necha AVR chipsida o'rnatilgan USART qurilmasi yo'q, ammo ularni tanlash mumkin emas.

Haroratni aniqlash

As far as Haroratni aniqlash, all of the platforms you suggested will give you the capabilities for doing that. Reading a temperature can be as simple as reading an ADC if you are using LM34 or an LM35 temperature sensor. On Arduino this is accomplished with one line: myReading = analogRead(pinNumber); You will have to transform the temperature reading into actual temperature, but this is not particularly difficult.

Motorlar

The Motorlar a bit more complicated: for most (almost all) Motorlar your Arduino/Netduino/AVR chip will not be able to drive the motor directly. You will need at least a MOSFET/BJT switch (see here for more info) and a snubber diode, or, more robustly a motor driver circuit. The Arduino platform has a large variety of peripherals (in general called shields, though Olin prefers the term daughterboard) including a motor shield. If you are using a high-power motor this is the way to go.

4
qo'shib qo'ydi
@ KurtE.Clothier: Ushbu link uchun rahmat. Ishga kirishish haqida tushunchalar tuzatildi: Sizningcha, nima deb o'ylaysiz?
qo'shib qo'ydi muallif Indramani, manba
@Jippi: Siz, albatta, to'g'ri sirdasiz. Bu miya-u (matn terish kabi), ammo miya mojarolari bo'lsa,
qo'shib qo'ydi muallif Indramani, manba
DigitalRead xuddi shu ishni bajarish uchun nima uchun analogRead mavjud?
qo'shib qo'ydi muallif La raison, manba
Yaxshi tushuntirish, garchi men Arduino haqida o'ylaringiz bilan rozi bo'lmasam-da, bu osonroq. Men kelajakda nima bo'lishini bilish uchun qo'shimcha vaqtni oldinga olib chiqish sizga katta yordam beradi, deb qat'iy ishonaman. Arduino-dan foydalanish dizayn imkoniyatlarini keskin cheklaydi. Ammo keyin yana, bu mening fikrimcha - sizdan ko'ra yaroqsiz. Boshqacha qilib aytganda, USB-da ba'zi AVR chipslari mavjud, masalan: hackaday.com/2011/08/07/1-chip-usb-avr-development
qo'shib qo'ydi muallif Olivier, manba
Meni yaxshi ko'radi.
qo'shib qo'ydi muallif Olivier, manba

Netduino "micro runtime" IIRC deb nomlanuvchi .NET ish vaqti versiyasini ishga tushiradi. Siz C# kodini yozasiz va Netduino-da sharhlanadi. Netduino kutubxonalar bilan mikrokontrolerning turli funktsiyalariga kirish uchun yuboradi va bu kutubxonalar S da yoziladi. Siz yozgan C# kodi juda sekin bajariladi, ammo kutubxona kodi tezdir. Men hayot uchun C# kodini yozaman, lekin men netduino mikroprosessor uchun ajoyib tanlov deb o'ylamayman; ba'zi bir usullarda arduinolardan foydalanish qiyinroq, juda kam qo'llab-quvvatlanadi (kam misol kodi, mos kelmaydigan qo'shimcha qurilmalar) va undan ko'p xarajatlar. Men C# ning nazoratchi uchun to'g'ri til deb o'ylamayman.

Men AVRlar uchun maxsus yozma kodli loyihalar va Arduinos bilan boshqa loyihalar qildim. Agar siz faqat arduino tashqariga chiqmoqchi bo'lsangiz, u bir necha afzalliklarga ega va bitta ahvol ham xom AVR dan yuqori xarajatdir.

Men AVR va arduino uchun ba'zi tanishlarni ko'rib chiqishni tavsiya qilaman. O'ylaymanki, bu siz uchun yaxshiroq bo'lgan fikrni beradi.

2
qo'shib qo'ydi

Agar mikrokontrolderning qancha sensor ishlatishi mumkinligini qanday aniqlaysiz?

Bu sizning ijodingiz va qancha iopin mavjudligini va sizning sensori talab qiladigan qancha pinga bog'liq. Agar sizda 4 ta 3pinli sensorlar bo'lsa, ularni nazorat qilish uchun sizda 12 ta pin kerak degani emas, ularni ko'paytirishingiz va 5 pinni ishlatishingiz va 7 io pinni saqlashingiz mumkin. Shunday qilib, hamma narsa bog'liq. Lekin, sizning sensorlaringiz uchun qanchalik ko'p iin pin mavjudligini va sizning qancha sensorlaringiz talab qilayotganini bilishning bir usuli, bu sizning qancha imkoniyatlarga ega bo'lishingizga kamroq cheklov beradi. Ijodkorlik, tajriba va hamma narsaning qanday ishlashini tushunish, sensorlarning sonini oshirishi mumkin.

Mening tushuncham C# -ni to'g'ridan-to'g'ri har qanday mikrokontrolderga joylashtirishingiz mumkin emas, lekin C# -ni ishlatib, USB orqali bog'lanishingiz va muayyan portni topishingiz to'g'ri emasmi?

Men ko'p USB qilmagan bo'lsam-da, bilaman, agar siz USB-ni noldan qilsangiz, bu sizning kompyuteringizdagi drayverlarga yozishni o'z ichiga oladi. Eng ommalashgan usul - allaqachon USB protokoli va drayverlarni boshqaradigan ICni ishlatish va u kompyuteringizda ketma-ket port kabi ishlaydi. Siz asosan mikro-tekshiruvchingizning ketma-ket portiga ulanadigan USB-Seriyali ko'prikga egasiz. Menimcha, Arduino buni qilmoqda. Netduino haqida ishonchingiz komil emas. Xo'sh, ha, siz C# -ni ma'lum bir port orqali USB orqali muloqot qilishingiz mumkin (buni oson yo'l bilan va USB-seriyali ko'prikdan foydalanishingiz mumkin deb hisoblaysiz).

Siz nima taklif qilmoqchisiz, albatta. Sizning ma'lumotlar bazangizga kiradigan va mikroprotsessorga ketma-ket ma'lumotlarni yuboradigan va qabul qiladigan dastur yozishingiz mumkin.

1
qo'shib qo'ydi
@ user2278106 Avtotransport vositalari odatiy mikrolardan ko'ra ko'proq oqim talab qiladi. Eng muhimi motorli haydovchi yoki shunga o'xshash echim kerak (masalan, H-ko'prigi). Dvigatelni tanlash tizimning mexanik talablari bilan belgilanadi (oynani ochish/yopish uchun qanchalik tork kerak va qanchalik tez ochish/yopish kerak) va dvigatel tanlanganidan keyin drayvlar tanlangan/tanlangan
qo'shib qo'ydi muallif Ryan Ginstrom, manba
Har qanday vosita. Har bir dvigatel boshqarilishi kerak va mexanizmga qarab modellar, turlar va boshqalar o'rtasida farq bo'lishi mumkin. Dvigatelning qanday boshqarilishini bilganingizdan so'ng, siz bir elektronni yaratishingiz kerak (faqat bitta mikrokontrolör etarli darajada yaxshi emas) bu sizning mikrokontroleringizni motorga ulatadi.
qo'shib qo'ydi muallif user9409, manba
javob uchun rahmat. Men sparkfunda ular inspektorlar va termometrni ko'rishim mumkin, lekin qanday vosita mikrokontrolator bilan ishlaydi?
qo'shib qo'ydi muallif Zardos, manba

Muayyan nuqtaga javob berish uchun, mikrokontrolör taxminan (juda ko'p sonli) sensorga ega bo'lishi mumkin. I2c, spi, bitta sim, ketma-ket yoki boshqa avtobus protokollarining avtobus sensorlarini ishlatish, sizda x ta ko'p avtobusga ega bo'lishingizni ta'minlaydi, bu erda x - ma'lum bir avtobus chegarasi. Avtobusni elektrga ulash uchun ba'zi texnik talablarga rioya qilishingiz kerak edi, va avtobusning bir nechtasi bilan yanada kengroq bo'lishi mumkin edi.

Chegara, albatta, tezlik va pratiklik jihatidan. Minglab sensorlar bitta arduinoda bo'lishi mumkin edi, lekin men ushbu ma'lumotni oqilona muddatda namoyish qila olamanmi, o'qib chiqardim, qayta ishlashim mumkinmi? Ehtimol, siz qanchalik yaxshi kodlashingiz yoki qanchalik ijodiy bo'lasiz.

Hatto analog sezgirlar ham, masalan, multiplekserlar yoki ADC iiklari yordamida amalga oshirilishi mumkin. Yaxshiroq savol "mikroprosessor qancha datchikdan foydalanishi mumkin" emas, balki "qancha datchikka kerak" degan savolni keltirib chiqaradi.

1
qo'shib qo'ydi