Mündəricat:

True-RMS AC Gərginliyinin Ölçülməsi: 14 Addım
True-RMS AC Gərginliyinin Ölçülməsi: 14 Addım

Video: True-RMS AC Gərginliyinin Ölçülməsi: 14 Addım

Video: True-RMS AC Gərginliyinin Ölçülməsi: 14 Addım
Video: AVO Meter I Analog Meter and Digital Meter I Multimeter I Hobby Electronic #6 2024, Iyul
Anonim
Image
Image
Nümayiş
Nümayiş

Bu gün bir AC oxu etmək üçün STM32 Maple Mini -dən istifadə edəcəyik. Misalımızda, elektrik şəbəkəsinin RMS dəyərini alacağıq. Əşyaların İnterneti üçün elektrik şəbəkəsini izləmək istəyənlər üçün bu çox faydalıdır. Daha sonra Maple Mini -nin hesablama gücündən istifadə edərək bir tətbiq yaradacağıq, 127Vac siqnalının alınmasına imkan verən bir elektron dövrə tətbiq edəcəyik və nümunələrə kök orta kvadrat (RMS) hesablamasını tətbiq edəcəyik.

Addım 1: nümayiş

Bugünkü məclisimizdə 110 -un girişini etmək üçün analoq dövrə əlavə olaraq STM32 -ə sahibik. Şokların qarşısını almaq üçün 110 -a girən rezistoru təcrid edin.

Dövrə olduqca həssasdır. 110 -a girirəm, amma gərginlik ayırıcıdan istifadə edərək onu 168 dəfə azaldıram və bir neçə funksiyası olan əməliyyat gücləndiricisinə qoyuram.

Mənbə süzgəci üçün bəzi isteğe bağlı kondansatörlerimiz də var. Mənbəniz keyfiyyətli olsa, onlardan istifadə etməyinizə ehtiyac yoxdur.

AD girişi 110 olmayan bir sinusoid gördüyünüz osiloskop vasitəsi ilə hesablanır (amma yaxşı əmələ gəlir). Başqa bir şey elektrik şəbəkəmizdəki gərginliyin 110 olmamasıdır (əslində 127 voltdur). Ancaq bir stabilizatordan keçdiyimiz üçün 115 V -a uyğunlaşacaq.

Serial monitorda göstərilən dəyər, RMS -də hesablanan dəyərdir, yəni Fluke Ölçən tərəfindən müəyyən edilən dəyərdir.

Addım 2: İstifadə olunan mənbələr

İstifadə olunan mənbələr
İstifadə olunan mənbələr

• Tullananlar

• Ağcaqayın Mini

• Protoboard

• LM386 gücləndiricisi

• Simmetrik bir qaynaq (+ 5V və -5V)

• 10k çox turlu trimpot (və ya potensiometr)

• 100nF polyesterdən ibarət dörd kondansatör

• Üç ədəd 10k rezistor

• Dörd 470k rezistor

• Bir ədəd 5k6 rezistor

• Bir ədəd 1n4728A zener diod

Addım 3: Blok Şeması

Blok diaqram
Blok diaqram

Addım 4: Sxem

Sxem
Sxem

Bu ölçü üçün ən yaxşısı olduğuna inandığım xüsusiyyətlərə əsaslanaraq hazırladığım bir sxemdir, lakin internetdə tapıla biləcək bir neçə başqa nümunə var.

Addım 5: LM386 - Bərkitmə

LM386 - Bərkitmə
LM386 - Bərkitmə

LM386, kondisioner və ya siqnal gücləndirilməsi üçün iki gücləndiriciyə malikdir.

Addım 6: AmpOp - Diferensial (çıxarıcı)

AmpOp - Diferensial (çıxarıcı)
AmpOp - Diferensial (çıxarıcı)

Addım 7: AmpOp - İnverter Adder

AmpOp - çevirici çevirici
AmpOp - çevirici çevirici

Addım 8: Maple Mini - Pinage

Maple Mini - Pinage
Maple Mini - Pinage

İşarələnmiş sancaqlar:

Qırmızı >> 3V3 Tolerant

Yaşıl >> 5V Tolerant

Addım 9: Maple Mini - Pinning - a / D Capturingdə istifadə olunur

Maple Mini - Pinning - a / D Capturingdə istifadə olunur
Maple Mini - Pinning - a / D Capturingdə istifadə olunur

Burada istifadə etdiyim pinin D11 olduğunu (STMicroelectronics -in nomenklaturasında) PA0 olduğunu vurğulayıram.

Addım 10: Quraşdırma

Məclis
Məclis

Dövrümüz üçün bu layihə üçün yaratdığımız kimi simmetrik bir mənbəyə ehtiyacınız olacaq. Əks təqdirdə iki mənbəyə ehtiyacınız olacaq.

Addım 11: Alınan Məlumatlarla Qrafik

Alınan Məlumatlarla Qrafik
Alınan Məlumatlarla Qrafik

Addım 12: RMS dəyərinin hesablanması

RMS dəyərinin hesablanması
RMS dəyərinin hesablanması

Addım 13: Mənbə Kodu

Mənbə kodu - Təriflər və sabitlər

Əvvəlcə pin oxunmasını D11 olaraq təyin etdik, həm də hesablamalarda istifadə olunan müxtəlif sabitləri.

#define leituraTensao D11 // AD CH0 no pino PA0 // cəsarətin bölücü hissəsi = 168.85714285714285714286 const float fatorDivisor = 168.40166345742404792461; // şücaət qüvvəsi = 1.0 gücləndirici fatorAmplificador = 1.0; // FlatMultiplicacao = fatorDivisor * fatorAmplificador; // Dəyər vermə qüvvəsi Vcc = 3.3V const float Vcc = 3.3; // valor teórico do offset do amplificador = Vcc /2.0; const float offSet = 1.66; // AD = 3.3 / 4095.0 sabit float fatorAD = Vcc / 4095.0; const int amostras = 71429; // nəticə 1, 027 gündən etibarən // const int amostras = 35715; // nəticə 0, 514 gündən sonra əldə edilə bilər

Mənbə kodu - Qlobal dəyişənlər

İndi bəzi qlobal dəyişənləri təyin edirik.

float Vrms = 0.0; // cəsarətli qüvvələr Vmax = 0.0; // üzgüçülüyün müəyyən edilməsi float Vmin = 10000.0; // üzgüçülüyün müəyyən edilməsi üzgüçülük Vmed = 0.0; // cəsarətli bir araşdırma üçün Vmáx e Vmín

Mənbə Kodu - Quraşdırma ()

Serial portu 1Mbps -də işə salın. AD portunu giriş olaraq düzəltdik və məlumat toplamağa başlamazdan əvvəl 5 saniyə gözlədik. Gözləmə müddəti isteğe bağlıdır.

void setup () {Serial.begin (1000000); // 1Mbps pinMode (leituraTensao, INPUT) seriyalı portlar; // AD komanda giriş gecikməsi (5000); // 5 -ci illərin əvvəlində bir məqalə. (isteğe bağlı)}

Mənbə Kodu - Loop () - Məlumat toplama dəyişənlərini işə salır

Döngədə, iterasiya üçün dəyişənimiz var. Burada da AD oxunuşlarını 0.0 -da saxlayırıq və dəyişən VRMS -i də 0.0 -da yenidən başladırıq.

boşluq döngəsi () {int i = 0; // dəyişkənlik üçün float leitura = 0.0; // armazena, leituralar kimi AD Vrms = 0.0; // yenidən qurulmuş Vrms

Mənbə Kodu - Hər bir nümunə üçün fərdi hesablamalar aparır və aparır

Bu mərhələdə, əgər mən nümunədən kiçik olsam, nümunə sayına çatana qədər nümunə götürmə dövrünə başlayırıq. Analog portu oxumaq və oxunan gərginliklərin kvadratlarının cəmini hesablamaq üçün analogRead proqramını işə salırıq. Nəhayət, iteratoru artırırıq.

while (i <amostras) {// inosia um ciclo de amostragem até que i alcance o número de amostras leitura = analogRead (leituraTensao); // bir növ analoqika //Serial.println(leitura); // AD Vrms = Vrms + pow (((leitura * fatorAD) - offSet), 2.0); // hesablar birdən -birə açılır və mən ++; // artım və ya artım}

Mənbə kodu - Nümunələrin ümumi hesablamaları və maksimum, minimum və ortalamanın eyniləşdirilməsi

Gərginliyin həqiqi dəyərini təyin etmək üçün vurma faktını tətbiq edirik. Dəyərin maksimum və ya minimum olduğunu təsbit edirik və cari maksimum və minimum dəyərlərin ortalamasını hesablayırıq.

// Aplicando fator de multiplicaçoo for a determinar is a valorable real das tensões Vrms = (sqrt (Vrms /amostras)) * fatorMultiplicacao; // deta se é um valor é máximo if (Vrms> Vmax) {Vmax = Vrms; } // algılarsa, (Vrms <Vmin) {Vmin = Vrms; } // hesablama metodu Vmed = (Vmax + Vmin) /2.0;

Mənbə Kodu - Çıxış Seçimləri

Çıxış dəyərini "qurmaq" üçün üç seçimimiz var. CSV və ya Jason kimi Arduino IDE serial plotterinə formatlaşdırılmış çıxışımız var.

// serial IDE Arduino Serial.print (Vrms, 3); Serial.print (","); Serial. çap (Vmax, 3); Serial.print (","); Serial. çap (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); /* // komanda json Serial.print ("{" anında (ms) ":"); Serial. çap (millis ()); Serial.print (","); Serial.print ("\" Vrms (V) ":"); Serial.print (Vrms, 3); Serial.print (","); Serial.print ("\" Vmax (V) ":"); Serial. çap (Vmax, 3); Serial.print (","); Serial.print ("\" Vmin (V) ":"); Serial. çap (Vmin, 3); Serial.print (","); Serial.print ("\" Vmed (V) ":"); Serial.çap (Vmed, 3); Serial.println ("}"); * / /* // CSV Serial.print (milis ()) ilə birlikdə formatlaşdırmaq; Serial.print (","); Serial. çap (Vrms, 3); Serial.print (","); Serial. çap (Vmax, 3); Serial.print (","); Serial.çap (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); */}

Addım 14: Dosyalar

Faylları yükləyin:

PDF

MƏN YOX

Tövsiyə: