Съдържание:

Измерване на истинско RMS променливо напрежение: 14 стъпки
Измерване на истинско RMS променливо напрежение: 14 стъпки

Видео: Измерване на истинско RMS променливо напрежение: 14 стъпки

Видео: Измерване на истинско RMS променливо напрежение: 14 стъпки
Видео: Measuring voltage the right way #electronics #electricity #electrician #voltage #outlet 2024, Ноември
Anonim
Image
Image
Демонстрация
Демонстрация

Днес ще използваме STM32 Maple Mini за отчитане на променлив ток. В нашия пример ще получим RMS стойността на електрическата мрежа. Това е много полезно за тези, които искат да наблюдават електрическата мрежа за Интернет на нещата. След това ще създадем приложение, използвайки изчислителната мощ на Maple Mini, ще приложим електронна схема, способна да позволи получаване на 127Vac сигнал, както и ще приложим изчислението на средноквадратичния (RMS) извадки.

Стъпка 1: Демонстрация

В нашето събрание днес имаме STM32, в допълнение към нашата аналогова схема, за да въведем 110. За да избегнете удари, изолирайте резистора, който влиза с 110.

Веригата е доста чувствителна. Влизам със 110, но го намалявам 168 пъти с помощта на делителя на напрежението и го поставям в операционния усилвател, който има няколко функции.

Имаме и някои допълнителни кондензатори за филтриране на източника. Ако вашият източник е с добро качество, не е нужно да ги използвате.

AD входът се изчислява чрез осцилоскопа, в който виждате синусоида, която не е 110 (но е добре оформена). Друго нещо е, че напрежението в нашата електрическа мрежа не е 110 (всъщност е 127 волта). Но тъй като преминаваме през стабилизатор, той ще се настрои на 115V.

Стойността, показана на серийния монитор, е това, което се изчислява в RMS, тоест тази, идентифицирана от Fluke Meter.

Стъпка 2: Използвани ресурси

Използвани ресурси
Използвани ресурси

• Джъмпери

• Maple Mini

• Protoboard

• Усилвател 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

Maple Mini - Pinage
Maple Mini - Pinage

Игли, маркирани на:

Червен >> 3V3 Толерантен

Зелен >> 5V Толерантен

Стъпка 9: Maple Mini - Pinning - a / D Използва се при заснемане

Maple Mini - Pinning - a / D Използва се при заснемане
Maple Mini - Pinning - 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 = fatorDivisor * fatorAmplificador; // Valor teórico da Tensão de alimentação Vcc = 3.3V const float Vcc = 3.3; // доблест теорико до отместване до усилвател = Vcc /2.0; const float offSet = 1.66; // fator teórico da razgovaão do AD = 3.3 / 4095.0 const float fatorAD = Vcc / 4095.0; const int amostras = 71429; // резултат em 1, 027 segundos para cada atualização // const int amostras = 35715; // Резултати от 0, 514 сегундос пара cada atualização

Изходен код - Глобални променливи

Сега дефинираме някои глобални променливи.

float 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 dolor mínimo detectado float Vmed = 0.0; // armazena o valor médio entre Vmáx e Vmín

Изходен код - Настройка ()

Стартирайте серийния порт при 1Mbps. Нагласихме AD порта като вход и изчакахме 5 секунди, преди да започнем да събираме данни. Времето в режим на готовност не е задължително.

void setup () {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. (по избор)}

Изходен код - Loop () - Стартира променливите за събиране на данни

В цикъла имаме променливата за итерация. Тук също съхраняваме показанията на AD в 0.0 и рестартираме променливата VRMS също в 0.0.

void loop () {int i = 0; // variável para iteração float leitura = 0.0; // армазена като leituras do AD Vrms = 0.0; // reinicia a variável Vrms

Изходен код - улавя и изпълнява отделните изчисления за всяка извадка

На този етап, ако i е по -малък от пробата, започваме цикъл на вземане на проби, докато i достигне броя на пробите. Изпълняваме analogRead, за да прочетем аналоговия порт и да изчислим сумата от квадратите на напреженията за четене. Накрая увеличаваме итератора.

while (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); // изчисляваме a soma dos quadrados das tensões lidas i ++; // увеличаване на iterador}

Изходен код - Общи изчисления на пробите и идентифициране на максимални, минимални и средни стойности

Ние прилагаме факта за умножение, за да определим действителната стойност на напреженията. Ние откриваме дали стойността е максимална или минимална и изчисляваме средната стойност на текущите максимални и минимални стойности.

// Aplicando fator de multiplicação para determinar o valor real das tensões Vrms = (sqrt (Vrms /amostras)) * fatorMultiplicacao; // откриваме, че сме смели и смели, ако (Vrms> Vmax) {Vmax = Vrms; } // detecta se é um valor mínimo if (Vrms <Vmin) {Vmin = Vrms; } // изчислява a média dos valores máximo e mínimo atuais Vmed = (Vmax + Vmin) /2.0;

Изходен код - Опции за изход

Имаме три възможности за "начертаване" на изходната стойност. Имаме изход, форматиран към серийния плотер на Arduino IDE, като CSV или Jason.

// формуляри за плотер сериен IDE Arduino Serial.print (Vrms, 3); Serial.print (","); Serial.print (Vmax, 3); Serial.print (","); Serial.print (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); /* // форматът е създаден като json Serial.print ("{" instante (ms) ":"); Serial.print (millis ()); Serial.print (","); Serial.print ("\" Vrms (V) ":"); Serial.print (Vrms, 3); Serial.print (","); Serial.print ("\" Vmax (V) ":"); Serial.print (Vmax, 3); Serial.print (","); Serial.print ("\" Vmin (V) ":"); Serial.print (Vmin, 3); Serial.print (","); Serial.print ("\" Vmed (V) ":"); Serial.print (Vmed, 3); Serial.println ("}"); * / /* // информация за CSV Serial.print (millis ()); Serial.print (","); Serial.print (Vrms, 3); Serial.print (","); Serial.print (Vmax, 3); Serial.print (","); Serial.print (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); */}

Стъпка 14: Файлове

Изтеглете файловете:

PDF

АЗ НЕ

Препоръчано: