Სარჩევი:

True-RMS AC ძაბვის გაზომვა: 14 ნაბიჯი
True-RMS AC ძაბვის გაზომვა: 14 ნაბიჯი

ვიდეო: True-RMS AC ძაბვის გაზომვა: 14 ნაბიჯი

ვიდეო: True-RMS AC ძაბვის გაზომვა: 14 ნაბიჯი
ვიდეო: lab bench power supply 6-32.5V 10W power supply PSU Mini 2024, ივლისი
Anonim
Image
Image
დემონსტრაცია
დემონსტრაცია

დღეს ჩვენ გამოვიყენებთ STM32 Maple Mini- ს AC კითხვის შესასრულებლად. ჩვენს მაგალითში, ჩვენ მივიღებთ ელექტრო ქსელის RMS მნიშვნელობას. ეს ძალიან სასარგებლოა მათთვის, ვისაც სურს ინტერნეტ ქსელის ელექტრო ქსელის მონიტორინგი. შემდეგ ჩვენ შევქმნით აპლიკაციას Maple Mini– ს გამოთვლითი სიმძლავრის გამოყენებით, გამოვიყენებთ ელექტრონულ წრეს, რომელსაც შეუძლია 127Vac სიგნალის მოპოვების საშუალება მისცეს, ასევე ნიმუშებზე გამოვიყენოთ ფესვის საშუალო კვადრატის (RMS) გაანგარიშება.

ნაბიჯი 1: დემონსტრაცია

ჩვენს დღევანდელ შეკრებაზე ჩვენ გვაქვს STM32, გარდა იმისა, რომ ჩვენი ანალოგური წრე შევა 110 -ს. დარტყმების თავიდან აცილების მიზნით, გამოყავით რეზისტორი, რომელიც შემოდის 110 -ით.

წრე საკმაოდ მგრძნობიარეა. მე 110 -ით შევდივარ, მაგრამ ძაბვის გამყოფის გამოყენებით ვამცირებ მას 168 -ჯერ და ვდებ ოპერატიულ გამაძლიერებელში, რომელსაც აქვს რამდენიმე ფუნქცია.

ჩვენ ასევე გვაქვს არჩევითი კონდენსატორები წყაროს ფილტრაციისთვის. თუ თქვენი წყარო კარგი ხარისხისაა, თქვენ არ გჭირდებათ მათი გამოყენება.

AD შეყვანა გამოითვლება ოსცილოსკოპის საშუალებით, რომელშიც ხედავთ სინუსოიდს, რომელიც არ არის 110 (მაგრამ ის კარგად არის ჩამოყალიბებული). კიდევ ერთი რამ არის ის, რომ ჩვენს ელექტრო ქსელში ძაბვა არ არის 110 (ეს რეალურად 127 ვოლტია). მაგრამ როდესაც ჩვენ ვატარებთ სტაბილიზატორს, ის 115V- ზე მოერგება.

სერიულ მონიტორზე ნაჩვენები მნიშვნელობა არის ის, რაც გამოითვლება RMS– ში, ანუ Fluke Meter– ით განსაზღვრული.

ნაბიჯი 2: გამოყენებული რესურსები

გამოყენებული რესურსები
გამოყენებული რესურსები

• მხტუნავები

• ნეკერჩხლის მინი

• პროტობორდი

• LM386 გამაძლიერებელი

• სიმეტრიული წყარო (+ 5V და -5V)

• 10k მრავალბინიანი ტრიმპოტი (ან პოტენომეტრი)

• 100nF პოლიესტერის ოთხი კონდენსატორი

• სამი 10k რეზისტორი

• ოთხი 470k რეზისტორი

• ერთი 5k6 რეზისტორი

• ერთი 1n4728A ზენერის დიოდი

ნაბიჯი 3: ბლოკირების დიაგრამა

ბლოკის დიაგრამა
ბლოკის დიაგრამა

ნაბიჯი 4: სქემა

სქემა
სქემა

ეს არის სქემა, რომელიც მე შევიმუშავე იმ მახასიათებლების საფუძველზე, რომლებიც მე მჯერა, რომ საუკეთესოა ამ გაზომვისთვის, მაგრამ არსებობს კიდევ რამდენიმე მაგალითი, რომელიც ინტერნეტში შეიძლება მოიძებნოს.

ნაბიჯი 5: LM386 - ჩამაგრება

LM386 - ჩამაგრება
LM386 - ჩამაგრება

LM386– ს აქვს ორი გამაძლიერებელი კონდიცირებისთვის ან სიგნალის გასაძლიერებლად.

ნაბიჯი 6: AmpOp - დიფერენციალური (გამოკლება)

AmpOp - დიფერენციალური (გამოკლება)
AmpOp - დიფერენციალური (გამოკლება)

ნაბიჯი 7: AmpOp - ინვერტორული რეკლამა

AmpOp - ინვერტორული ადდერი
AmpOp - ინვერტორული ადდერი

ნაბიჯი 8: Maple Mini - Pinage

ნეკერჩხალი მინი - Pinage
ნეკერჩხალი მინი - Pinage

ქინძისთავები აღინიშნება:

წითელი >> 3V3 ტოლერანტული

მწვანე >> 5V ტოლერანტული

ნაბიჯი 9: ნეკერჩხლის მინი - ჩამაგრება - a / D გამოიყენება გადაღებისას

Maple Mini - ჩამაგრება - a / D გამოიყენება გადაღებისას
Maple Mini - ჩამაგრება - a / D გამოიყენება გადაღებისას

აქ ხაზს ვუსვამ, რომ პინი, რომელიც მე გამოვიყენე არის D11, რომელიც (STMicroelectronics– ის ნომენკლატურაში) არის PA0.

ნაბიჯი 10: შეკრება

შეკრება
შეკრება

ჩვენი წრისთვის დაგჭირდებათ სიმეტრიული წყარო, როგორიც ჩვენ შევიქმენით ამ პროექტისათვის. წინააღმდეგ შემთხვევაში, თქვენ დაგჭირდებათ ორი წყარო.

ნაბიჯი 11: გრაფიკი მონაცემებთან ერთად

გრაფა მოპოვებული მონაცემებით
გრაფა მოპოვებული მონაცემებით

ნაბიჯი 12: გამოთვალეთ RMS მნიშვნელობა

RMS ღირებულების გაანგარიშება
RMS ღირებულების გაანგარიშება

ნაბიჯი 13: წყაროს კოდი

წყაროს კოდი - განმარტებები და მუდმივები

თავდაპირველად, ჩვენ განვსაზღვრეთ პინის კითხვა, როგორც D11, ასევე გამოთვლებში გამოყენებული სხვადასხვა მუდმივები.

#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 = fator გამყოფი * fatorAmplificador; // Valor 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 conversã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

წყაროს კოდი - გლობალური ცვლადები

ახლა ჩვენ განვსაზღვრავთ გლობალურ ცვლადებს.

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

წყაროს კოდი - დაყენება ()

დაიწყეთ სერიული პორტი 1 Mbps– ზე. ჩვენ შევავსეთ AD პორტი შეყვანის სახით და დაველოდეთ 5 წამს მონაცემების შეგროვების დაწყებამდე. ლოდინის დრო არჩევითია.

void setup () {Serial.begin (1000000); // inicia a porta serial em 1Mbps pinMode (leituraTensao, INPUT); // ajusta a porta do AD como entrada დაგვიანებით (5000); // aguarda 5s antes de iniciar a coleta. (სურვილისამებრ)}

წყაროს კოდი - მარყუჟი () - იწყებს მონაცემთა შეგროვების ცვლადებს

მარყუჟში, ჩვენ გვაქვს ცვლადი გამეორებისთვის. აქ, ჩვენ ასევე ვინახავთ AD– ის კითხვებს 0.0 – ში და ვტვირთავთ ცვლადს VRMS ასევე 0.0 – ში.

void loop () {int i = 0; // variável para iteração float leitura = 0.0; // არმაზენა როგორც ლეიტურას აკეთებენ AD Vrms = 0.0; // reinicia a variável Vrms

წყაროს კოდი - იღებს და ასრულებს ინდივიდუალურ გამოთვლებს თითოეული ნიმუშისთვის

ამ ეტაპზე, თუ მე უფრო პატარა ვარ ვიდრე ნიმუში, ჩვენ ვიწყებთ შერჩევის ციკლს სანამ არ მივაღწევ ნიმუშების რაოდენობას. ჩვენ ვაწარმოებთ analogRead– ს, რომ წავიკითხოთ ანალოგური პორტი და გამოვთვალოთ წაკითხული ძაბვის კვადრატების ჯამი. და ბოლოს, ჩვენ ვამატებთ გამეორებას.

ხოლო (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 ++; // იტერადორის გაზრდა}

წყაროს კოდი - ნიმუშების ზოგადი გათვლები და მაქსიმალური, მინიმალური და საშუალო

ჩვენ ვიყენებთ გამრავლების ფაქტს ძაბვების რეალური მნიშვნელობის დასადგენად. ჩვენ ვადგენთ, არის თუ არა მნიშვნელობა მაქსიმალური ან მინიმალური და ვიანგარიშებთ მიმდინარე მაქსიმალური და მინიმალური მნიშვნელობების საშუალო მაჩვენებელს.

// Aplicando fator de multiplicação para determinar o valor real das tensões 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; } // calcula a média dos valores máximo e mínimo atuais Vmed = (Vmax + Vmin) /2.0;

წყაროს კოდი - გამოყვანის პარამეტრები

ჩვენ გვაქვს სამი ვარიანტი გამომავალი მნიშვნელობის "შედგენისთვის". ჩვენ გვაქვს ფორმატირებული Arduino IDE სერიული პლოტერისთვის, როგორიცაა CSV ან ჯეისონი.

// sa formatda formatada para plotter serial IDE Arduino Serial.print (Vrms, 3); Serial.print (","); სერიული. ბეჭდვა (Vmax, 3); Serial.print (","); Serial.print (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); /* // saída formatada como json Serial.print ("{" instante (ms) ":"); Serial.print (millis ()); Serial.print (","); Serial.print ("\" Vrms (V) ":"); Serial.print (Vrms, 3); Serial.print (","); Serial.print ("\" Vmax (V) ":"); სერიული. ბეჭდვა (Vmax, 3); Serial.print (","); Serial.print ("\" Vmin (V) ":"); Serial.print (Vmin, 3); Serial.print (","); Serial.print ("\" Vmed (V) ":"); Serial.print (Vmed, 3); Serial.println ("}"); * / /* // saída formatada como CSV Serial.print (millis ()); Serial.print (","); Serial.print (Vrms, 3); Serial.print (","); სერიული. ბეჭდვა (Vmax, 3); Serial.print (","); Serial.print (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); */}

ნაბიჯი 14: ფაილები

ჩამოტვირთეთ ფაილები:

PDF

ინო

გირჩევთ: