Arduino bilan DC vosita tezligini nazorat qilish
DC vosita robototexnika va elektronikada eng ko'p ishlatiladigan vosita turidir. Bunday dvigatelning tezligini boshqarish uchun turli usullardan foydalanish mumkin, ammo bu loyihada biz bu maqsadda impuls kengligi modulyatsiyasidan (PWM) foydalanamiz. Potansiyometr yordamida doimiy tok dvigatelining aylanish tezligini uning tugmachasini aylantirib boshqaramiz.
PWM dan foydalanishning umumiy printsipi
PWM modulyatsiya tezligini (Pulse Width Modulation, PWM) nazorat qilish orqali siz, masalan, LED porlashining kuchini sozlashingiz mumkin - bu tamoyil quyidagi rasmda tushuntirilgan. Xuddi shunday mexanizm dvigatelning aylanish tezligini boshqarish uchun ishlatiladi.
Agar ko'rsatilgan rasmda kalit biroz vaqt yopiq bo'lsa, u holda bir vaqtning o'zida lampochka yonadi. Agar kalit 8 ms yopilsa va 10 ms oralig'ida 2 ms ochiq bo'lsa, u holda yorug'lik faqat 8 ms oraliqda yonadi. Ushbu misolda biz o'rtacha chiqish voltaji (lampochkada) batareya kuchlanishining 80% bo'lishini aytishimiz mumkin.
Aks holda, kalit 5ms uchun yopiladi va 10ms oraliqda bir xil 5ms uchun ochiladi, shuning uchun lampochkaning o'rtacha kuchlanishi akkumulyator kuchlanishining 50% ni tashkil qiladi. Odatda, agar batareya zo'riqishida 5V bo'lsa va ish aylanishi 50% bo'lsa, u holda terminal qurilmasidagi (lampochka) o'rtacha kuchlanish 2,5V bo'ladi.
Rasmda ko'rsatilgan uchinchi holatda band aylanishi 20% ni tashkil qiladi va shuning uchun terminal qurilmasidagi (lampochka) o'rtacha kuchlanish akkumulyator kuchlanishining 20% ni tashkil qiladi.
Biz ko'rib chiqayotgan vosita tezligini boshqarish misolida aytilganlarning barchasini qo'llagan holda, shuni aytishimiz mumkinki, PWM ning ish aylanishi qanchalik katta bo'lsa (yoqilgan holat davomiyligining davrga nisbati), vosita tezligi shunchalik yuqori bo'ladi. bo'l.
Kerakli komponentlar
Arduino UNO platasi ( AliExpress-da sotib oling ).
DC motor.
Transistor 2N2222 ( AliExpress-da sotib oling ).
Potansiyometr 100 kOm ( AliExpress-da sotib oling ).
Kondensator 0,1 nF ( AliExpress-da sotib oling ).
Non taxtasi.
Ulanish simlari.
Dasturning to'liq matni maqolaning oxirida berilgan, ushbu bo'lim kodning asosiy elementlarining maqsadini tushuntiradi.
Quyidagi kod satrlarida biz c1 va c2 o'zgaruvchilarini ishga tushiramiz va potentsiometrning chiqishiga A0 analog pinini tayinlaymiz va PWM uchun 12-pin ishlatiladi.
1
2
3
4
|
int pwmPin = 12;
int pot = A0;
int c1 = 0;
int c2 = 0;
|
Quyidagi kod satrlarida biz ma'lumotlarni kiritish uchun A0 pinini va ma'lumotlarni chiqarish uchun pin 12 (bu PWM pin) ni o'rnatdik.
1
2
3
4
|
void setup() {
pinMode(pwmPin, OUTPUT); // pin 12 - на вывод данных
pinMode(pot, INPUT); // pin A0 - на ввод данных
}
|
Endi loop() funksiyasida analogRead(pot) funksiyasi yordamida A0 pinidagi analog qiymatni o'qiymiz va uni c2 da saqlaymiz. Keyin 1024 dan c2 ni ayirib, natijani c1 da saqlaymiz. Keyin biz PWM ning 12-piniga yuqori darajani (HIGH) qo'llaymiz va c1 o'zgaruvchisi tomonidan aniqlangan kechikishdan so'ng biz ushbu pinga past darajani (LOW) qo'llaymiz. Shundan so'ng, biz LOW o'zgaruvchisi tomonidan belgilangan kechikishni bajaramiz va tsiklni boshidan davom ettiramiz.
Analog qiymatni 1024 dan ayirish sababi quyidagicha. Gap shundaki, Arduino Uno analog-raqamli konvertori (ADC) 10 bit ruxsatga ega, ya'ni u 0 - 2 ^ 10 \u003d 1024 oralig'ida butun qiymatlarni qabul qilishi mumkin. u 0 dan 5 V gacha bo'lgan diapazondagi kirish kuchlanish qiymatini 0 dan 1024 gacha bo'lgan oraliqda butun qiymatga aylantiradi. Shunday qilib, agar kirish kuchlanish qiymatini 5/1024 ga ko'paytirsak, biz kirish kuchlanishining raqamli qiymatini olamiz. .
Arduino
1
2
3
4
5
6
7
8
|
void loop()
{
c2= analogRead(pot);
c1= 1024-c2;
digitalWrite(pwmPin, HIGH); // подаем напряжение высокого уровня на pin 12
delayMicroseconds(c1); // ждем c1 микросекунд (high time)
digitalWrite(pwmPin, LOW); // подаем напряжение низкого уровня на pin 12
delayMicroseconds(c2); // ждем c2 микросекунд (low time)
|
1
2
3
4
|
void setup() {
pinMode(pwmPin, OUTPUT); // pin 12 - на вывод данных
pinMode(pot, INPUT); // pin A0 - на ввод данных
}
|
Endi loop() funksiyasida analogRead(pot) funksiyasi yordamida A0 pinidagi analog qiymatni o'qiymiz va uni c2 da saqlaymiz. Keyin 1024 dan c2 ni ayirib, natijani c1 da saqlaymiz. Keyin biz PWM ning 12-piniga yuqori darajani (HIGH) qo'llaymiz va c1 o'zgaruvchisi tomonidan aniqlangan kechikishdan so'ng biz ushbu pinga past darajani (LOW) qo'llaymiz. Shundan so'ng, biz LOW o'zgaruvchisi tomonidan belgilangan kechikishni bajaramiz va tsiklni boshidan davom ettiramiz.
Analog qiymatni 1024 dan ayirish sababi quyidagicha. Gap shundaki, Arduino Uno analog-raqamli konvertori (ADC) 10 bit ruxsatga ega, ya'ni u 0 - 2 ^ 10 \u003d 1024 oralig'ida butun qiymatlarni qabul qilishi mumkin. u 0 dan 5 V gacha bo'lgan diapazondagi kirish kuchlanish qiymatini 0 dan 1024 gacha bo'lgan oraliqda butun qiymatga aylantiradi. Shunday qilib, agar kirish kuchlanish qiymatini 5/1024 ga ko'paytirsak, biz kirish kuchlanishining raqamli qiymatini olamiz. .
void setup() {
pinMode(pwmPin, OUTPUT); // pin 12 - на вывод данных
pinMode(pot, INPUT); // pin A0 - на ввод данных
}
Endi loop() funksiyasida analogRead(pot) funksiyasi yordamida A0 pinidagi analog qiymatni o'qiymiz va uni c2 da saqlaymiz. Keyin 1024 dan c2 ni ayirib, natijani c1 da saqlaymiz. Keyin biz PWM ning 12-piniga yuqori darajani (HIGH) qo'llaymiz va c1 o'zgaruvchisi tomonidan aniqlangan kechikishdan so'ng biz ushbu pinga past darajani (LOW) qo'llaymiz. Shundan so'ng, biz LOW o'zgaruvchisi tomonidan belgilangan kechikishni bajaramiz va tsiklni boshidan davom ettiramiz.
Analog qiymatni 1024 dan ayirish sababi quyidagicha. Gap shundaki, Arduino Uno analog-raqamli konvertori (ADC) 10 bit ruxsatga ega, ya'ni u 0 - 2 ^ 10 \u003d 1024 oralig'ida butun qiymatlarni qabul qilishi mumkin. u 0 dan 5 V gacha bo'lgan diapazondagi kirish kuchlanish qiymatini 0 dan 1024 gacha bo'lgan oraliqda butun qiymatga aylantiradi. Shunday qilib, agar kirish kuchlanish qiymatini 5/1024 ga ko'paytirsak, biz kirish kuchlanishining raqamli qiymatini olamiz. .
Taqdim etilgan sxemada biz 100 kŌ potentsiometr yordamida DC motorining aylanish tezligini nazorat qilamiz, uning tugmachasini aylantirib, biz PWM signalining ish aylanishini o'zgartiramiz. 100 kŌ potentsiometr Arduino UNO ning analog kirish piniga A0 ulangan va shahar motori Arduino ning 12 piniga (bu PWM piniga) ulangan. Dasturning printsipi A0 analog pinidan kuchlanish qiymatini o'qishiga asoslanadi. Ushbu analog pindagi kuchlanish qiymati potansiyometr yordamida o'zgartiriladi. Keyinchalik, kerakli hisob-kitoblardan so'ng, PWM ning ish aylanishi ushbu qiymatga muvofiq o'rnatiladi.
Misol uchun, agar biz analog kirishdan 256 qiymatini (ya'ni, bu allaqachon o'zgartirilgan raqamli qiymat) olsak, bu holda PWM pinidagi yuqori daraja 768 ms (1024-256) uchun bo'ladi va past daraja 256 ms uchun bo'ladi. Shuning uchun, PWM ish aylanishi 75% bo'ladi. Inson ko'zi bunday yuqori chastotali tebranishlarni ajrata olmaydi, shuning uchun unga dvigatel doimiy ravishda maksimal 75% tezlikda aylanayotgandek tuyuladi.
Do'stlaringiz bilan baham: |