Isi kandungan:

Mengukur Voltan AC True-RMS: 14 Langkah
Mengukur Voltan AC True-RMS: 14 Langkah

Video: Mengukur Voltan AC True-RMS: 14 Langkah

Video: Mengukur Voltan AC True-RMS: 14 Langkah
Video: Cara Mudah Mengukur Voltage/Tegangan DC/AC Menggunakan Multimeter|Multitester|AVO FLUKE 179 2024, Julai
Anonim
Image
Image
Demonstrasi
Demonstrasi

Hari ini, kita akan menggunakan STM32 Maple Mini untuk melakukan pembacaan AC. Dalam contoh kami, kami akan mendapat nilai RMS grid kuasa. Ini sangat berguna bagi mereka yang ingin memantau rangkaian elektrik untuk Internet of Things. Kami kemudian akan membuat aplikasi menggunakan kekuatan komputasi dari Maple Mini, menerapkan litar elektronik yang mampu memungkinkan pemerolehan isyarat 127Vac, serta menerapkan pengiraan kuadrat akar (RMS) pada sampel.

Langkah 1: Demonstrasi

Dalam perhimpunan kami hari ini, kami mempunyai STM32, selain litar analog kami untuk membuat input 110. Untuk mengelakkan kejutan, isolasikan perintang yang masuk sebanyak 110.

Litarnya cukup sensitif. Saya masuk dengan 110, tetapi saya mengurangkannya sebanyak 168 kali menggunakan pembahagi voltan dan memasukkannya ke dalam penguat operasi, yang mempunyai beberapa fungsi.

Kami juga mempunyai beberapa kapasitor pilihan untuk penapisan sumber. Sekiranya sumber anda berkualiti, anda tidak perlu menggunakannya.

Input AD dikira melalui osiloskop, di mana anda melihat sinusoid, yang tidak 110 (tetapi terbentuk dengan baik). Perkara lain ialah voltan dalam rangkaian elektrik kita tidak 110 (sebenarnya 127 volt). Tetapi ketika kita menjalani penstabil, ia akan menyesuaikan diri dengan 115V.

Nilai yang dipaparkan pada monitor bersiri adalah apa yang dikira dalam RMS, iaitu yang dikenal pasti oleh Fluke Meter.

Langkah 2: Sumber yang Digunakan

Sumber Yang Digunakan
Sumber Yang Digunakan

• Pelompat

• Mini Maple

• Protoboard

• Penguat LM386

• Sumber simetri (+ 5V dan -5V)

• Potongan berbalik 10k (atau potensiometer)

• Empat kapasitor poliester 100nF

• Tiga perintang 10k

• Empat perintang 470k

• Satu perintang 5k6

• Satu diod zener 1n4728A

Langkah 3: Gambarajah Blok

Gambarajah blok
Gambarajah blok

Langkah 4: Skim

Skim
Skim

Ini adalah rangkaian yang saya buat berdasarkan spesifikasi yang saya percaya adalah yang terbaik untuk pengukuran ini, tetapi ada beberapa contoh lain yang boleh didapati di internet.

Langkah 5: LM386 - Sematkan

LM386 - Penyematan
LM386 - Penyematan

LM386 mempunyai dua penguat untuk pengkondisian atau penguat isyarat.

Langkah 6: AmpOp - Pembezaan (pengurang)

AmpOp - Pembezaan (pengurang)
AmpOp - Pembezaan (pengurang)

Langkah 7: AmpOp - Penambah Inverter

AmpOp - Penambah Inverter
AmpOp - Penambah Inverter

Langkah 8: Maple Mini - Pinage

Maple Mini - Pinage
Maple Mini - Pinage

Pin yang ditandakan pada:

Merah >> Toleran 3V3

Hijau >> Toleran 5V

Langkah 9: Maple Mini - Pinning - a / D Digunakan dalam Menangkap

Maple Mini - Pinning - a / D Digunakan dalam Menangkap
Maple Mini - Pinning - a / D Digunakan dalam Menangkap

Saya menekankan di sini bahawa pin yang saya gunakan adalah D11 yang (dalam nomenklatur STMicroelectronics) adalah PA0.

Langkah 10: Perhimpunan

perhimpunan
perhimpunan

Untuk rangkaian kami, anda memerlukan sumber simetri, seperti yang kami buat untuk projek ini. Jika tidak, anda memerlukan dua sumber.

Langkah 11: Grafik Dengan Data Diperolehi

Grafik Dengan Data Diperolehi
Grafik Dengan Data Diperolehi

Langkah 12: Mengira Nilai RMS

Mengira Nilai RMS
Mengira Nilai RMS

Langkah 13: Kod Sumber

Kod sumber - Definisi dan pemalar

Pada mulanya, kami mendefinisikan bacaan pin sebagai D11, serta pelbagai pemalar yang digunakan dalam pengiraan.

#define leituraTensao D11 // AD CH0 no pino PA0 // valor teórico divisor de tensão = 168.85714285714285714286 const float fatorDivisor = 168.40166345742404792461; // valor teórico do ganho de amplificação = 1.0 const float fatorAmplificador = 1.0; // Valor usado na multiplicação da leitura const float fatorMultiplicacao = fatorDivisor * fatorAmplificador; // Nilai teórico da Tensão de alimentação Vcc = 3.3V const float Vcc = 3.3; // valor teórico do offset do amplificador = Vcc / 2.0; const float offSet = 1.66; // fator teórico da converão do AD = 3.3 / 4095.0 const float fatorAD = Vcc / 4095.0; const int amostras = 71429; // resulta em 1, 027 segundos para cada atualização // const int amostras = 35715; // resulta em 0, 514 segundos para cada atualização

Kod sumber - Pemboleh ubah global

Sekarang, kami menentukan beberapa pemboleh ubah global.

apungan Vrms = 0.0; // armazena o valor rms da tensãofloat Vmax = 0.0; // armazena o valor máximo detectado float Vmin = 10000.0; // armazena o valor mínimo Detado float Vmed = 0.0; // armazena o valor médio entre Vmáx e Vmín

Kod Sumber - Persediaan ()

Mulakan port bersiri pada 1Mbps. Kami menyesuaikan port AD sebagai input dan menunggu 5 saat sebelum mula mengumpulkan data. Masa bersedia adalah pilihan.

batal persediaan () {Serial.begin (1000000); // inicia a porta serial em 1Mbps pinMode (leituraTensao, INPUT); // ajusta a porta do AD como entrada delay (5000); // aguarda 5s antes de iniciar a coleta. (pilihan)}

Kod Sumber - Gelung () - Memulakan pemboleh ubah pengumpulan data

Dalam Gelung, kita mempunyai pemboleh ubah untuk lelaran. Di sini, kami juga menyimpan bacaan AD dalam 0.0 dan memulakan semula pemboleh ubah VRMS juga dalam 0.0.

gelung kekosongan () {int i = 0; // variável para iteração float leitura = 0.0; // armazena sebagai leitura melakukan AD Vrms = 0.0; // reinicia a variável Vrms

Kod Sumber - Menangkap dan melaksanakan pengiraan individu untuk setiap sampel

Pada tahap ini, jika saya lebih kecil daripada sampel, kita memulakan kitaran pensampelan sehingga saya mencapai jumlah sampel. Kami menjalankan analogRead untuk membaca port analog dan mengira jumlah kuasa dua voltan baca. Akhirnya, kami menaikkan iterator.

sementara (i <amostras) {// inicia um ciclo de amostragem até que i alcance o número de amostras leitura = analogRead (leituraTensao); // lê a porta analógica //Serial.println(leitura); // Descomente se quiser ver o sinal bruto do AD Vrms = Vrms + pow (((leitura * fatorAD) - offSet), 2.0); // calcula a soma dos quadrados das tensões lidas i ++; // incrementa o iterador}

Kod sumber - Pengiraan umum sampel dan pengenalpastian maksimum, minimum, dan purata

Kami menggunakan fakta pendaraban untuk menentukan nilai sebenar voltan. Kami mengesan sama ada nilai maksimum atau minimum, dan kami mengira purata nilai maksimum dan minimum semasa.

// Aplicando fator de multiplicação para determinar o valor real das tensões Vrms = (sqrt (Vrms / amostras)) * fatorMultiplicacao; // detecta se é um valor é máximo jika (Vrms> Vmax) {Vmax = Vrms; } // detecta se é um valor mínimo if (Vrms <Vmin) {Vmin = Vrms; } // calcula a média dos valores máximo e mínimo atuais Vmed = (Vmax + Vmin) / 2.0;

Kod Sumber - Pilihan Keluaran

Kami mempunyai tiga pilihan untuk "merancang" nilai output. Kami mempunyai output yang diformat ke plotter siri Arduino IDE, seperti CSV atau Jason.

// saída formatada para plotter bersiri IDE Arduino Serial.print (Vrms, 3); Cetakan bersiri (","); Serial.print (Vmax, 3); Cetakan bersiri (","); Serial.print (Vmin, 3); Cetakan bersiri (","); Serial.println (Vmed, 3); / * // saída formatada como json Serial.print ("{" instante (ms) ":"); Serial.print (milis ()); Cetakan bersiri (","); Serial.print ("\" Vrms (V) ":"); Serial.print (Vrms, 3); Cetakan bersiri (","); Serial.print ("\" Vmax (V) ":"); Serial.print (Vmax, 3); Cetakan bersiri (","); Serial.print ("\" Vmin (V) ":"); Serial.print (Vmin, 3); Cetakan bersiri (","); Serial.print ("\" Vmed (V) ":"); Serial.print (Vmed, 3); Serial.println ("}"); * / / * // saída formatada como CSV Serial.print (millis ()); Cetakan bersiri (","); Serial.print (Vrms, 3); Cetakan bersiri (","); Serial.print (Vmax, 3); Cetakan bersiri (","); Serial.print (Vmin, 3); Cetakan bersiri (","); Serial.println (Vmed, 3); * /}

Langkah 14: Fail

Muat turun fail:

PDF

INO

Disyorkan: