Mundarija:

Arduino yordamida quvvat manbai chastotasi va kuchlanishni o'lchash: 6 qadam
Arduino yordamida quvvat manbai chastotasi va kuchlanishni o'lchash: 6 qadam

Video: Arduino yordamida quvvat manbai chastotasi va kuchlanishni o'lchash: 6 qadam

Video: Arduino yordamida quvvat manbai chastotasi va kuchlanishni o'lchash: 6 qadam
Video: 97-dars: Qurilmalarni masofadan boshqarish, WIFI smart switch. 2024, Noyabr
Anonim
Arduino yordamida quvvat manbai chastotasi va kuchlanishni o'lchash
Arduino yordamida quvvat manbai chastotasi va kuchlanishni o'lchash

Kirish:

Loyihaning maqsadi - bu Hindistonda 220 dan 240 voltgacha 50 gtsgacha bo'lgan chastota va kuchlanishni o'lchash. Men signalni olish, chastota va kuchlanishni hisoblash uchun Arduino -dan foydalandim, sizda boshqa mikrokontrolder yoki taxtadan foydalanishingiz mumkin. O'chirish bir nechta komponentlarni talab qiladi va barcha amaliy maqsadlar uchun juda aniq.

1 -qadam: zarur komponentlar

  • Arduino Uno
  • IC LM358
  • Pastga tushadigan transformator (220 V dan 12 V gacha)
  • Kondensatorlar:

    • 0.1uF
    • 2 x 1uF
  • Rezistorlar:

    • 3 x 1kOm
    • 2 x 100kOm
    • 1,5kOm
    • 3.3 Ohm
    • 6.8kOm
  • 3 x 1N4148 diodli
  • Non paneli va o'tish kabeli (ixtiyoriy)

2 -qadam: sxematik diagramma

Sxematik diagramma
Sxematik diagramma
Sxematik diagramma
Sxematik diagramma

Yuqoridagi sxemada transformator birlamchi besleme tarmog'iga ulanadi va birlamchi o'lchash sxemamizga ulanadi

3 -qadam: O'chirish davrini tushunish

O'chirish davrini tushunish
O'chirish davrini tushunish
O'chirish davrini tushunish
O'chirish davrini tushunish
O'chirish davrini tushunish
O'chirish davrini tushunish

Funktsional xususiyatlarga ko'ra, ushbu sxemani to'rt qismga bo'lish mumkin:

Javob: Nolinchi o'tish detektori sxemasi

Sinus to'lqini ijobiydan salbiyga o'tganda, bu sxema 5V kvadrat puls hosil qiladi. R1 rezistori D1 va D2 bilan birgalikda diod birikmasida kirish voltajining o'zgarishini -0,6V dan +5,6V gacha cheklaydi (diodning oldinga kuchlanishini 0,6V deb hisoblasak). Bundan tashqari, siz R1 qiymatini oshirib, kontaktlarning zanglashiga olib kirish diapazonini oshirishingiz mumkin.

R2 va R3 rezistorlari manfiy kuchlanishni -0,24 Vtgacha cheklash uchun kuchlanish bo'luvchi hosil qiladi, chunki LM358 kirish umumiy rejimidagi kuchlanish -0,3 Volt bilan cheklangan.

R4, R5 rezistorlari, kondansatör C1 va op-amp (bu erda taqqoslagich sifatida ishlatiladi) Schmitt Trigger sxemasini hosil qiladi, bu erda R4 va R5 rezistorlari erdan +49.5mV kirishda histerezni o'rnatadi. Schmitt Trigger -ning chiqishi Arduino PIN2 -ga qo'shimcha ishlov berish uchun beriladi.

B: izolyatsiya va kuchlanish pastga tushadi

Nomidan ko'rinib turibdiki, bu qism izolyatsiyalanadi va taxminan 12Vrms ga tushadi. Bosqichli kuchlanish qo'shimcha ravishda asboblar zanjiriga beriladi.

C: tepalik detektori davri

Bu sxema kirish signalining maksimal tepalik kuchlanishini aniqlaydi. R6 va R7 rezistorlari kirish voltajini 0,23 marta kamaytiradi (12Vrms 2,76Vrmsgacha kamayadi). D3 diodi signalning faqat ijobiy yarim tsiklini o'tkazadi. C2 dagi kuchlanish to'g'rilangan signalning eng yuqori qiymatiga qadar oshadi, u Arduino analog pin A0 ga uzatiladi, bu esa kuchlanishni hisoblab chiqadi.

Bunga qo'shimcha ravishda, siz ushbu kontaktlarning zanglashiga olib kelishi mumkin bo'lgan aniq piktogramma bilan almashtirishingiz mumkin. Lekin mening namoyish maqsadlarim uchun yuqoridagi sxema etarli bo'ladi.

D: Arduino

Bu qismda Arduino Schmitt Trigger sxemasi tomonidan hosil qilingan kvadrat pulslarni ushlaydi va analog voltajni tepalik detektori zanjiridan o'qiydi. Ma'lumotlar kvadrat impulsining vaqtini (shuning uchun chastotani) (bu o'zgaruvchan tok bilan ta'minlangan odamga teng) va ta'minot kuchlanishini aniqlash uchun qayta ishlanadi.

4 -qadam: Chastotani va kuchlanishni hisoblash

Chastotani hisoblash:

Arduino yordamida biz signalning T vaqtini o'lchay olamiz. Nolinchi kesish detektorining kvadrat to'lqin pulslari 2-pinga uzatiladi, u erdan biz har bir pulsning vaqtini o'lchay olamiz. Biz Arduino ichki taymeridan (aniqrog'i Timer1) foydalanishimiz mumkin. Taymer soat aylanishiga 1 taga ko'payadi (oldindan hisoblagichsiz = 1) va qiymat TCNT1 registrida saqlanadi. Shunday qilib, 16 MGts soat har bir mikrosaniyada hisoblagichni 16 ga oshiradi. Xuddi shunday prescaler = 8 uchun taymer har bir mikrosaniyada 2 ga ko'payadi. Shunday qilib, ikki ko'tarilgan chegara orasidagi vaqt

T = (TCNT1 qiymati) / har bir hisoblash uchun olingan vaqt

Qaerda, har bir sanash uchun vaqt = prescaler / (Arduino soat tezligi (16 MGts))

Shunday qilib, chastota f = 1 / T = (Arduino soat tezligi (16 MGts) / (Prescaler * TCNT! Qiymati)

Shunday qilib, taymer tezligi (Hz) = (Arduino soat tezligi (16 MGts)) / oldindan hisoblagich bilan belgilanadi

va signal chastotasi = (Arduino soat tezligi) bilan berilgan

Shunga mos ravishda, biz f = 1/T munosabatlaridan f chastotasini hisoblashimiz mumkin.

Voltajni hisoblash:

Arduino bortidagi ADC 10 bitlik o'lchamga ega (mumkin bo'lgan qiymatlar = 2^10 = 1024), qiymatlarni 0-1023 oralig'ida qaytaradi. Tegishli analog V kuchlanishini hisoblash uchun biz quyidagi munosabatni ishlatishimiz kerak

V = (ADC o'qish) * 5/1023

Besleme zo'riqishida Vs (rms) ni hisoblash uchun biz transformator nisbati, R6R7 rezistor bo'linishi va tepalik detektori sxemasini hisobga olishimiz kerak. Biz har xil omillarni/nisbatlarni birlashtira olamiz:

Transformator nisbati = 12/230 = 0,052

Rezistor ajratuvchi = R7/(R6 + R7) = 0,23

Maksimal detektor pallasida = 1.414

Vs (rms) = V/(1.414*0.052*0.23) = (ADC o'qish)*0.289

Shuni ta'kidlash kerakki, bu qiymat haqiqiy qiymatdan uzoqdir, asosan haqiqiy transformator nisbati xatosi va diod oldinga kuchlanish pasayishi tufayli. Buni chetlab o'tishning bir usuli - kontaktlarning zanglashiga olib kelingandan so'ng omilni aniqlash. Ya'ni, besleme zo'riqishida va C2 kondansatkichidagi kuchlanishni multimetr bilan alohida o'lchab, Vs (rms) ni quyidagicha hisoblab:

Vs (rms) = ((Besleme zo'riqishida *5)/(C2 *1023 bo'ylab kuchlanish)) *(ADC o'qilishi)

mening holimda, Vs (rms) = 0.33*(ADC o'qilishi)

5 -qadam: Arduino kodi

#aniqlang volt_0 A0 // analog kuchlanish o'qi

uchuvchi uint16_t t_period; uint16_t ADC_value = 0; suzuvchi volt, chastota; bekor isr () {t_period = TCNT1; // TCNT1 qiymatini t_periodda saqlash TCNT1 = 0; // reset Timer1 ADC_value = analogRead (volt_in); // analog kuchlanishni o'qing} float get_freq () {uint16_t taymer = t_period; if (taymer == 0) 0 qaytarish; // nolga bo'linishni oldini olish uchun 16000000.0/(8UL*taymer) ni qaytaring; // chastota f = clk_freq/(prescaler*timeperiod)} tomonidan berilgan void setup () {TCCR1A = 0; TCCR1B = bit (CS11); // oldindan hisoblagichni 8 TCNT1 = 0 ga o'rnating; // Timer1 qiymatini tiklash TIMSK1 = bit (TOIE1); // faollashtirish Timer1 to'lg'azish EIFR | = bit (INTF0); // aniq INT0 uzilish bayrog'i Serial.begin (9600); } void loop () {attachInterrupt (0, isr, RISING); // tashqi uzilishni (INT0) kechiktirishni yoqish (1000); detachInterrupt (0); freq = get_freq (); volt = ADC_ qiymati*0,33; String buf; buf += String (chastota, 3); buf += F ("Hz / t"); buf += String (volt); buf += F ("Volts"); Serial.println (buf); }

6 -qadam: Xulosa

Xulosa
Xulosa
Xulosa
Xulosa

Siz sxemani non paneliga yig'ib, kodni o'zgartirishingiz va ma'lumotlarni saqlash uchun SD -kartani qo'shishingiz mumkin, uni keyinchalik tahlil qilish mumkin. Misollardan biri shundaki, siz kuchlanish va chastotani pik soatlarda tahlil qilishingiz mumkin.

Men taxtada yig'ilgan sxemada LM358 o'rniga (ikkita opamp) LM324 (to'rt opamp) ishlatilgan, chunki menda o'sha paytda IC yo'q edi va COVID-19 pandemiyasi tufayli butun mamlakat bo'ylab blokirovka qilish menga yangi ICni olishimni qiyinlashtirdi.. Shunga qaramay, bu sxemaning ishlashiga ta'sir qilmaydi.

Har qanday taklif va so'rov uchun quyida izoh qoldiring.

Tavsiya: