Mündəricat:
- Addım 1: nümayiş
- Addım 2: İstifadə olunan mənbələr
- Addım 3: Blok Şeması
- Addım 4: Sxem
- Addım 5: LM386 - Bərkitmə
- Addım 6: AmpOp - Diferensial (çıxarıcı)
- Addım 7: AmpOp - İnverter Adder
- Addım 8: Maple Mini - Pinage
- Addım 9: Maple Mini - Pinning - a / D Capturingdə istifadə olunur
- Addım 10: Quraşdırma
- Addım 11: Alınan Məlumatlarla Qrafik
- Addım 12: RMS dəyərinin hesablanması
- Addım 13: Mənbə Kodu
- Addım 14: Dosyalar
2025 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2025-01-13 06:56
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
• 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ı
Addım 4: 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, kondisioner və ya siqnal gücləndirilməsi üçün iki gücləndiriciyə malikdir.
Addım 6: AmpOp - Diferensial (çıxarıcı)
Addım 7: AmpOp - İnverter Adder
Addım 8: 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
Burada istifadə etdiyim pinin D11 olduğunu (STMicroelectronics -in nomenklaturasında) PA0 olduğunu vurğulayıram.
Addım 10: Quraşdırma
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
Addım 12: 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:
MƏN YOX