Оглавление:

Измерение истинного среднеквадратичного значения переменного напряжения: 14 шагов
Измерение истинного среднеквадратичного значения переменного напряжения: 14 шагов

Видео: Измерение истинного среднеквадратичного значения переменного напряжения: 14 шагов

Видео: Измерение истинного среднеквадратичного значения переменного напряжения: 14 шагов
Видео: IoT#8.2 Измеряем действующее значение напряжения /True RMS counting 2024, Июль
Anonim
Image
Image
Демонстрация
Демонстрация

Сегодня мы будем использовать STM32 Maple Mini для чтения переменного тока. В нашем примере мы получим среднеквадратичное значение энергосистемы. Это очень полезно для тех, кто хочет контролировать электрическую сеть для Интернета вещей. Затем мы создадим приложение, используя вычислительную мощность Maple Mini, применим электронную схему, позволяющую регистрировать сигнал 127 В переменного тока, а также применим расчет среднеквадратичного значения (RMS) к образцам.

Шаг 1: демонстрация

В нашей сегодняшней сборке у нас есть STM32, в дополнение к нашей аналоговой схеме, чтобы сделать вход 110. Чтобы избежать ударов, изолируйте резистор, который входит, на 110.

Схема довольно чувствительная. У меня есть 110, но я уменьшаю его в 168 раз с помощью делителя напряжения и вставляю его в операционный усилитель, который имеет несколько функций.

У нас также есть дополнительные конденсаторы для фильтрации источника. Если ваш источник хорошего качества, вам не нужно его использовать.

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

Значение, отображаемое на мониторе последовательного порта, рассчитывается в среднеквадратичном значении, то есть идентифицируется измерителем Fluke Meter.

Шаг 2. Используемые ресурсы

Используемые ресурсы
Используемые ресурсы

• Джемперы

• Кленовый мини

• Протоборд

• Усилитель LM386

• Симметричный источник (+ 5В и -5В)

• Многооборотный подстроечный резистор 10k (или потенциометр)

• Четыре конденсатора из полиэстера 100 нФ

• Три резистора по 10 кОм

• Четыре резистора 470 кОм

• Один резистор 5 кОм

• Один стабилитрон 1n4728A

Шаг 3: блок-схема

Блок-схема
Блок-схема

Шаг 4: Схема

Схема
Схема

Это схема, которую я разработал на основе спецификаций, которые я считаю лучшими для этого измерения, но есть несколько других примеров, которые можно найти в Интернете.

Шаг 5: LM386 - закрепление

LM386 - закрепление
LM386 - закрепление

LM386 имеет два усилителя для преобразования или усиления сигнала.

Шаг 6: AmpOp - дифференциал (вычитатель)

AmpOp - Дифференциальный (вычитатель)
AmpOp - Дифференциальный (вычитатель)

Шаг 7: AmpOp - инверторный сумматор

AmpOp - инверторный сумматор
AmpOp - инверторный сумматор

Шаг 8: Maple Mini - Pinage

Клен Мини - Пинаж
Клен Мини - Пинаж

Пины отмечены на:

Красный >> 3V3 Tolerant

Зеленый >> 5 В толерантный

Шаг 9: Maple Mini - закрепление - A / D, используемый при захвате

Maple Mini - Pinning - a / D, используемый при захвате
Maple Mini - Pinning - a / D, используемый при захвате

Я подчеркиваю, что использованный мною вывод - это D11, который (в номенклатуре STMicroelectronics) - это PA0.

Шаг 10: Сборка

сборка
сборка

Для нашей схемы вам понадобится симметричный источник, подобный тому, который мы создали для этого проекта. В противном случае вам понадобятся два источника.

Шаг 11: построение графика с полученными данными

График с полученными данными
График с полученными данными

Шаг 12: Расчет среднеквадратичного значения

Расчет среднеквадратичного значения
Расчет среднеквадратичного значения

Шаг 13: Исходный код

Исходный код - Определения и константы

Сначала мы определили показание вывода как D11, а также различные константы, используемые в расчетах.

#define leituraTensao D11 // AD CH0 no pino PA0 // valor teórico divisor de tensão = 168.85714285714285714286 const float fatorDivisor = 168.40166345742404792461; // Теоретическая ценность амплификации = 1.0 const float fatorAmplificador = 1.0; // Доблесть, используемая для умножения с использованием функции const float fatorMultiplicacao = fatorDivisor * fatorAmplificador; // Теоретическая ценность питания Vcc = 3.3V const float Vcc = 3.3; // теоретическая ценность смещения do ampificador = Vcc / 2.0; const float offSet = 1.66; // Теоретический преобразователь в AD = 3.3 / 4095.0 const float fatorAD = Vcc / 4095.0; const int amostras = 71429; // результат 1, 027 segundos para cada atualização // const int amostras = 35715; // resulta em 0, 514 segundos para cada atualização

Исходный код - Глобальные переменные

Теперь мы определяем некоторые глобальные переменные.

поплавок Vrms = 0,0; // Armazena o valor rms da tensãofloat Vmax = 0.0; // использовать максимальное обнаружение доблести с плавающей запятой Vmin = 10000.0; // Вооружение или минимальное обнаружение доблести float Vmed = 0.0; // armazena o valor médio entre Vmáx e Vmín

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

Запустите последовательный порт на скорости 1 Мбит / с. Мы настроили порт AD как вход и подождали 5 секунд, прежде чем начать сбор данных. Время ожидания не является обязательным.

void setup () {Serial.begin (1000000); // инициализация последовательного порта em 1 Мбит / с pinMode (leituraTensao, INPUT); // установить порт для AD como entrada delay (5000); // aguarda 5s antes de iniciar a coleta. (опционально)}

Исходный код - Loop () - запускает переменные сбора данных

В цикле у нас есть переменная для итерации. Здесь мы также сохраняем показания AD в 0,0 и перезапускаем переменную VRMS также в 0,0.

void loop () {int я = 0; // параметр переменной float leitura = 0.0; // Armazena как лейтуры делают AD Vrms = 0.0; // reinicia a vará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); // это аналоговый порт //Serial.println(leitura); // Описать синтаксический анализатор для выполнения AD Vrms = Vrms + pow (((leitura * fatorAD) - offSet), 2.0); // вычислить сумму, равную квадрадикам, на основе теней, равных i ++; // увеличение итератора}

Исходный код - Общие расчеты выборок и определение максимума, минимума и среднего

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

// Применение мультипликатора для определения действительных значений силы Vrms = (sqrt (Vrms / amostras)) * fatorMultiplicacao; // обнаруживаем максимальную доблесть, если (Vrms> Vmax) {Vmax = Vrms; } // обнаруживаем минимальное значение доблести, если (Vrms <Vmin) {Vmin = Vrms; } // вычислить максимальную и минимальную стоимость Vmed = (Vmax + Vmin) / 2.0;

Исходный код - параметры вывода

У нас есть три варианта «рисования» выходного значения. Мы отформатировали вывод на последовательный плоттер Arduino IDE, например CSV или Jason.

// указан формат для последовательного порта плоттера IDE Arduino Serial.print (Vrms, 3); Serial.print (","); Серийный отпечаток (Vmax, 3); Serial.print (","); Serial.print (Vmin, 3); Serial.print (","); Serial.println (Vmed, 3); / * // используется формат json Serial.print ("{" instante (ms) ":"); Serial.print (миллис ()); 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 ("\" Вмед (В) ":"); Серийный принт (Вмед, 3); Serial.println ("}"); * / / * // укажите формат в 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

Я НЕТ

Рекомендуемые: