İçindekiler:

True-RMS AC Voltajını Ölçme: 14 Adım
True-RMS AC Voltajını Ölçme: 14 Adım

Video: True-RMS AC Voltajını Ölçme: 14 Adım

Video: True-RMS AC Voltajını Ölçme: 14 Adım
Video: PENS TİPİ AMPER METRE / TAM AKILLI ÖLÇÜM SİSTEMİ / ANENG ST203 / AC, DC ÖLÇÜM #işbirliği 2024, Temmuz
Anonim
Image
Image
Gösteri
Gösteri

Bugün AC okuması yapmak için STM32 Maple Mini'yi kullanacağız. Örneğimizde, elektrik şebekesinin RMS değerini alacağız. Bu, Nesnelerin İnterneti için elektrik şebekesini izlemek isteyenler için çok kullanışlıdır. Daha sonra Maple Mini'nin hesaplama gücünü kullanarak bir uygulama oluşturacağız, 127Vac sinyalinin alınmasına izin verebilecek bir elektronik devre uygulayacağız ve ayrıca numuneler üzerinde ortalama kare (RMS) hesaplamasını uygulayacağız.

1. Adım: Gösteri

Bugünkü montajımızda analog devremize ek olarak 110 adet giriş yapmak için STM32 bulunmaktadır. Şoklardan korunmak için 110 ile giren direnci izole ediniz.

Devre oldukça hassastır. 110 ile giriyorum ama voltaj bölücü kullanarak 168 kat azaltıyorum ve birkaç işlevi olan işlemsel yükselticiye koyuyorum.

Ayrıca kaynak filtreleme için bazı isteğe bağlı kapasitörlerimiz var. Kaynağınız kaliteliyse bunları kullanmanıza gerek yoktur.

AD girişi, 110 olmayan (ancak iyi biçimlendirilmiş) bir sinüzoid gördüğünüz osiloskop aracılığıyla hesaplanır. Başka bir şey de, elektrik şebekemizdeki voltajın 110 değil (aslında 127 volt). Ancak bir stabilizatörden geçerken 115V'a ayarlanacaktır.

Seri monitörde görüntülenen değer, RMS'de hesaplanan, yani Fluke Meter tarafından tanımlanan değerdir.

2. Adım: Kullanılan Kaynaklar

Kullanılan Kaynaklar
Kullanılan Kaynaklar

• Süveterler

• Mini Akçaağaç

• Ana kart

• Bir LM386 amplifikatörü

• Simetrik bir kaynak (+ 5V ve -5V)

• 10k çok turlu trimpot (veya potansiyometre)

• 100nF polyesterden dört kapasitör

• Üç adet 10k direnç

• Dört 470k direnç

• Bir adet 5k6 direnç

• Bir adet 1n4728A zener diyot

Adım 3: Blok Şeması

Blok Şeması
Blok Şeması

Adım 4: Şema

Şema
Şema

Bu, bu ölçüm için en iyisi olduğuna inandığım özelliklere dayanarak geliştirdiğim bir devre, ancak internette bulunabilecek birkaç başka örnek var.

Adım 5: LM386 - Sabitleme

LM386 - Sabitleme
LM386 - Sabitleme

LM386, koşullandırma veya sinyal amplifikasyonu için iki amplifikatöre sahiptir.

Adım 6: AmpOp - Diferansiyel (çıkarıcı)

AmpOp - Diferansiyel (çıkarıcı)
AmpOp - Diferansiyel (çıkarıcı)

Adım 7: AmpOp - İnverter Toplayıcı

AmpOp - İnverter Toplayıcı
AmpOp - İnverter Toplayıcı

Adım 8: Akçaağaç Mini - Pinage

Akçaağaç Mini - Pinage
Akçaağaç Mini - Pinage

İşaretli pinler:

Kırmızı >> 3V3 Toleranslı

Yeşil >> 5V Toleranslı

Adım 9: Maple Mini - Sabitleme - a / D Yakalamada Kullanılan

Maple Mini - Sabitleme - a / D Yakalamada Kullanılan
Maple Mini - Sabitleme - a / D Yakalamada Kullanılan

Burada, kullandığım pimin (STMicroelectronics terminolojisinde) PA0 olan D11 olduğunu vurguluyorum.

Adım 10: Montaj

toplantı
toplantı

Devremiz için, bu proje için oluşturduğumuz gibi simetrik bir kaynağa ihtiyacınız olacak. Aksi takdirde, iki kaynağa ihtiyacınız olacak.

Adım 11: Elde Edilen Verilerle Grafik Oluşturun

Elde Edilen Verilerle Grafik
Elde Edilen Verilerle Grafik

Adım 12: RMS Değerinin Hesaplanması

RMS Değerinin Hesaplanması
RMS Değerinin Hesaplanması

Adım 13: Kaynak Kodu

Kaynak kodu - Tanımlar ve sabitler

İlk başta pin okumasını D11 olarak ve hesaplamalarda kullanılan çeşitli sabitleri tanımladık.

#define leituraTensao D11 //AD CH0 pino yok PA0 //valor teórico bölen de tensão = 168.85714285714285714286 const float fatorBölen = 168.40166345742404792461; //valor terorico do ganho de amplificação = 1.0 const float fatorAmplificador = 1.0; //Valor usado na multiplicação da leitura const float fatorMultiplicacao = fatorDivisor * fatorAmplificador; //Valor teórico on Tensão de alimentação Vcc = 3,3V sabit kayan nokta Vcc = 3,3; // valor teórico ofset yapmak amplificador = Vcc / 2.0; const kayan nokta offSet = 1.66; // daha fazla bilgi için AD = 3.3 / 4095.0 sabit kayan nokta AD = Vcc / 4095.0; const int amostras = 71429; //sonuç em 1, 027 segundos para cada atualização //const int amostras = 35715; //resulta em 0, 514 segundos para cada atualização

Kaynak kodu - Genel değişkenler

Şimdi, bazı global değişkenleri tanımlıyoruz.

kayan Vrms = 0.0; //armaze veya valor rms da tensãofloat Vmax = 0.0; //armazena veya valor maksimo detektif kayan nokta Vmin = 10000.0; //armazena veya valor mínimo detektif kayan nokta Vmed = 0.0; //armazena veya valor médio entre Vmáx e Vmín

Kaynak Kodu - Kurulum ()

Seri bağlantı noktasını 1 Mbps'de başlatın. AD portunu girdi olarak ayarladık ve veri toplamaya başlamadan önce 5 saniye bekledik. Bekleme süresi isteğe bağlıdır.

geçersiz kurulum() { Serial.begin(1000000); //inicia bir porta seri em 1Mbps pinMode(leituraTensao, INPUT); // AD como giriş gecikmesini bir porta ayarlayın(5000); // bir coleta'ya karşı koruma 5s antes de iniciar. (isteğe bağlı) }

Kaynak Kodu - Döngü () - Veri toplama değişkenlerini başlatır

Döngüde, yineleme için değişkenimiz var. Burada ayrıca AD okumalarını 0.0'da saklarız ve VRMS değişkenini 0.0'da yeniden başlatırız.

geçersiz döngü() { int ben = 0; //değişken para iteração float leitura = 0.0; //armazena as leituras yapmak AD Vrms = 0.0; // reinicia bir değişken Vrms

Kaynak Kodu - Her örnek için ayrı hesaplamaları yakalar ve yürütür

Bu aşamada i örneklemden küçük ise i örnek sayısına ulaşana kadar örnekleme döngüsüne başlarız. Analog portu okumak ve okuma voltajlarının karelerinin toplamını hesaplamak için analogRead çalıştırırız. Son olarak, yineleyiciyi artırıyoruz.

while (i < amostras) { //inicia um ciclo de amostragem até que i alcance o número de amostras leitura = analogRead(leituraTensao); //bir bağlantı noktası analógica //Serial.println(leitura); // AD Vrms = Vrms + pow(((leitura * fatorAD) - ofset), 2.0); //bir soma dos quadrados das tensões lidas i++; //artırma veya yineleme }

Kaynak kodu - Örneklerin genel hesaplamaları ve maksimum, minimum ve ortalamanın tanımlanması

Gerilimlerin gerçek değerini belirlemek için çarpma gerçeğini uygularız. Değerin maksimum veya minimum olduğunu tespit eder ve mevcut maksimum ve minimum değerlerin ortalamasını hesaplarız.

// Gerçek değerlerin gerçek değerlerinin birden fazla belirleyicisi için geçerli olmak Vrms = (sqrt(Vrms / amostras)) * fatorMultiplicacao; //detecta se é um valor é máximo if (Vrms > Vmax) { Vmax = Vrms; } //detecta se é um valor mínimo if (Vrms < Vmin) { Vmin = Vrms; } //bir medya dos valores máximo ve mínimo atuais Vmed = (Vmax + Vmin) / 2.0;

Kaynak Kodu - Çıkış Seçenekleri

Çıktı değerini "çizmek" için üç seçeneğimiz var. CSV veya Jason gibi Arduino IDE seri çizicisine biçimlendirilmiş çıktılarımız var.

//saída formatada para çizici seri IDE Arduino Serial.print(Vrms, 3); Seri.print(", "); Seri.baskı(Vmax, 3); Seri.print(", "); Serial.print(Vmin, 3); Seri.print(", "); Serial.println(Vmed, 3); /* // formatada ortak json Serial.print("{"anında(ms)\":"); Serial.print(millis()); Seri.print(", "); Serial.print("\"Vrms(V)\":"); Serial.print(Vrms, 3); Seri.print(", "); Serial.print("\"Vmax(V)\":"); Seri.baskı(Vmax, 3); Seri.print(", "); Serial.print("\"Vmin(V)\":"); Serial.print(Vmin, 3); Seri.print(", "); Serial.print("\"Vmed(V)\":"); Serial.print(Vmed, 3); Seri.println("}"); */ /* //CSV Serial.print(millis()); Seri.print(", "); Serial.print(Vrms, 3); Seri.print(", "); Seri.baskı(Vmax, 3); Seri.print(", "); Serial.print(Vmin, 3); Seri.print(", "); Serial.println(Vmed, 3); */ }

Adım 14: Dosyalar

Dosyaları indirin:

PDF

BEN HAYIR

Önerilen: