Главная » Ардуино » Измерение изолированного переменного напряжения с помощью Arduino и усилителя AMC1301

Измерение изолированного переменного напряжения с помощью Arduino и усилителя AMC1301

В этом проекте показано, как можно измерить переменное напряжение до 600 вольт с помощью платы Arduino UNO и изолированного усилителя с дифференциальным входом и выходом AMC1301. С помощью этой схемы мы можем легко измерить напряжение между фазой/нейтралью (230 В) и фазой/фазой (400 В) напряжение в домашних условиях.

Внимание!

На этот проект не распространяется гарантия, поэтому делайте это на свой страх и риск! Часть схемы проекта может быть под высоким напряжением, которое очень вредно для человеческого организма, поэтому будьте осторожны!

Принципиальная схема проекта показана ниже:

Схема

Компоненты схемы:

  • Arduino Uno или эквивалентная плата, такая как Arduino Nano
  • Изолированный усилитель AMC1301
  • Операционный усилитель MCP6022
  • ИОН — MCP1501-20 2.048
  • Изолированный DC/DC преобразователь B0505S (1 или 2 Вт)
  • ЖК-экран 1602
  • Резистор 6 x 1 МОм (R3, R4, R5, R12, R13, R14)
  • Резистор 3 х 10 кОм (R17, R19, R22)
  • Резистор 6 х 4,7 кОм (R6, R8, R9, R15, R16, R18)
  • Резистор 2 кОм (R7)
  • Резистор 330 Ом (R11)
  • Резистор 100 Ом (R2, R20)
  • Резистор 68 Ом (R1)
  • Резистор 10 Ом (R21)
  • Переменный резистор 10кОм
  • Конденсатор 10 мкФ (C2)
  • Конденсатор 2 х 4,7 мкФ (C1, C5)
  • Конденсатор 2 х 2,2 мкФ (C13, C14)
  • Конденсатор 4 х 0,1 (C3, C6, C7, C8)
  • Конденсатор 2 х 1 нФ (C11, C12)
  • Конденсатор 3 х 220 пФ (C4, C9, C10)

Описание схемы

Перед подачей высоковольтного сигнала к входу АЦП Arduino его необходимо уменьшить, изолировать и отфильтровать. Измеряемое переменное напряжение подключается  к клеммам VIN1 и VIN2. Затем это напряжение уменьшается с помощью схемы делителя напряжения, состоящей из шести резисторов номиналом 1 МОм (R3, R4, R5, R12, R13, R14) и одного резистора номиналом 2 кОм (R7).

Схема делителя напряжения разработана таким образом, что она может снизить входное напряжение до ±250 мВ, чтобы соответствовать диапазону усилителя AMC1301. Например, входное среднеквадратичное значение 400 В будет уменьшено до 120 мВ среднеквадратичного значения (±170 мВ пикового значения). Это означает, что мы можем безопасно подключить схему к разности потенциалов (напряжению) приблизительно 600 В среднеквадратичного значения (на самом деле это около 589 вольт).

AMC1301 от Texas Instruments представляет собой изолированный усилитель, в котором его дифференциальный вход отделен от дифференциального выхода изолирующим барьером.

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

Для усилителя AMC1301 требуется два источника питания, один из которых подключен к высокой стороне (вход), а другой к низкой стороне (выход). Источники питания высокой и низкой стороны должны быть гальванически изолированы, иначе развязка усилителя не будет иметь никакого смысла.

AMC1301 имеет фиксированный коэффициент усиления 8,2 В/В и предназначен для измерения дифференциальных сигналов ±250 мВ с изолированным дифференциальным выходом ±2,05 В, имеет синфазное выходное напряжение (синфазное смещение) 1,44 В и полосу пропускания 200 кГц.

В этом проекте, как показано на принципиальной схеме выше, низкая сторона AMC1301 питается 5 В от платы Arduino Uno, а верхняя сторона питается от изолированного преобразователя постоянного тока B0505S.

B0505S позволяет получить гальванически изолированный источник 5В от выхода 5В платы Arduino Uno. Причина использования B0505S  — низкая стоимость, малый размер, проста в использовании и небольшое количество внешних компонентов.

B0505S имеет только 4 контакта: 2 входа и 2 выхода. В этом проекте мы можем использовать B0505S-1W или B0505S-2W.

Делитель напряжения, который преобразует входное высокое напряжение в низкое, состоит из резисторов: R3, R4, R5, R7, R12, R13, R14 и входного импеданса AMC1301 (от VINP до VINN). Входное сопротивление составляет примерно 18 кОм и включено параллельно R7 (2 кОм).

Таким образом, коэффициент усиления делителя напряжения можно рассчитать по следующей формуле:

(R7 // 18 кОм) / (R7 // 18 кОм + R3 + R4 + R5 + R12 + R13 + R14) = 1,8/6001,8

Дифференциальный выход AMC1301 подключен к схеме дифференциального усилителя, который фильтрует сигнал, усиливает с коэффициентом усиления 0,5 В/В, устраняет смещение 1,44 постоянного тока и добавляет еще одно смещение 1,024 В.
Основным компонентом этой схемы является микросхема двойного операционного усилителя Microchip MCP6022. Питание на микросхему  5В подается от платы Arduino.

Поскольку R9 = R18, R8 = R15 и R6 = R16, коэффициент усиления схемы дифференциального усилителя (MCP6022) равен:

R18/(R16 + R15) = 4,7/(2 x 4,7) = 0,5

Таким образом, общий коэффициент усиления схемы равен:

(1,8/6001,8) x 8,2 x 0,5 = 7,38/6001,8

Это означает, что входное среднеквадратичное значение 230 В будет воспринято аналоговым входом Arduino как:

230 x 7,38/6001,8 = 282,8 мВ

Таким образом, сигнал переменного тока на входе аналогового канала колеблется в диапазоне ±400 мВ (±√2 x 282,2) и при добавлении 1,024 В DC offset сигнал будет колебаться между 1,424 В и 0,624 В.

Прежде чем ослабленный сигнал переменного тока поступит на аналоговый канал (A0) Arduino, он проходит через RC-фильтр нижних частот, состоящий из элементов R1 и C3. Частоту этого фильтра можно рассчитать с помощью следующего уравнения:

f = 1/(2 x π x R x C) = 23,4 кГц

Смещение напряжения 1,024 В составляет всего 2,048 В, деленное на 2 с помощью резисторов R17 и R19, второй операционный усилитель MCP6022 используется в качестве повторителя напряжения для получения источника напряжения с низким импедансом (буфер напряжения), на который не должны влиять другие компоненты схемы, такие как как Р18.

В схеме использован чип MCP1501-20, чтобы получить точное напряжение 2,048 В, которое затем используется в качестве положительного опорного напряжения для модуля АЦП микроконтроллера Arduino. MCP1501-20 также питается от платы Arduino напряжением 5 В. Его выход фильтруется и подключается к выводу AREF Arduino.

ЖК-экран 1602 (2 строки и 16 столбцов)  подключен к плате Arduino следующим образом:

  • RS —> контакт D2 Arduino
  • E —> контакт D3 Arduino
  • D4 —> контакт D4 Arduino
  • D5 —> контакт D5 Arduino
  • D6 —> контакт D6 Arduino
  • D7 —> контакт D7 Arduino
  • VSS, RW, D0, D1, D2, D3 и K подключены к GND
  • VEE к переменному резистору 10 кОм (потенциометр)
  • VDD к Arduino 5В и A к Arduino 5В через резистор 330 Ом

Вывод VEE используется для управления контрастностью ЖК-дисплея. A (анод) и K (катод) — это контакты светодиода подсветки.

Скетч

Код проекта приведен ниже, он был протестирован с платами Arduino Uno и Nano.
Код пытается вычислить среднеквадратичное значение сигнала переменного тока, поступающего на аналоговый вход A0 Arduino.

Он может измерять только напряжение переменного тока. Когда на входные клеммы подается постоянное напряжение, устройство будет отображать 0 вольт, потому что постоянное (или среднее) напряжение вычитается от всего сигнала входного напряжения.

Просто среднее значение (среднее значение или смещение постоянного тока) в дискретном времени представляет собой сумму всех значений выборки, деленную на количество выборок:

среднее значение

А среднеквадратичное значение в дискретном времени можно рассчитать с помощью следующего уравнения:

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

 

Микроконтроллер платы Arduino UNO (ATmega328P) имеет 10-битный модуль АЦП, положительное опорное напряжение равно 2,048 В, это означает, что 2,048 В в цифровом виде представлено 1023, а 0 В представлено 0 (1 цифра на каждые 2 мВ).

/
/************************************************************************
 * 
 * AC Voltage measurement with Arduino.
 * Voltage values are printed on 1602 LCD screen.
 * This is a free software with NO WARRANTY - Use it at your own risk!
 * https://simple-circuit.com/
 *
 ************************************************************************/

#include <LiquidCrystal.h>   // include Arduino LCD library

// LCD module connections (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

// define analog channel input
#define INPUT_CHANNEL  A0

void setup(void) {
  delay(1000);

  lcd.begin(16, 2);     // set up the LCD's number of columns and rows
  lcd.setCursor(0, 0);  // move cursor to column 0, row 0 [position (0, 0)]
  lcd.print("RMS Voltage =");

  analogReference(EXTERNAL);    // set positive reference voltage to external

}

const uint16_t n = 512;  // total number of samples (readings)
int16_t r_array[n];      // readings array
float average, rms;

void loop() {

  average = 0;
  rms = 0;

  // read voltage at INPUT_CHANNEL 'n' times and save data to 'r_array'
  for (uint16_t i = 0; i < n; i++) {
    r_array[i] = analogRead(INPUT_CHANNEL);
    delayMicroseconds(200);
  }

  // calculate signal average (DC offset)
  for (uint16_t i = 0; i < n; i++)
    average += r_array[i];
  average = average / n;

  // calculate AC signal RMS value
  for (uint16_t i = 0; i < n; i++) {
    if( abs(r_array[i] - average) > 3)
      rms += sq( r_array[i] - average );
  }
  // calculate Arduino analog channel input RMS voltage in millivolts
  rms = 2 * sqrt(rms/n);  // 2 = 2048/1024
  // now calculate actual RMS input voltage (6001.8/7.83 is inverse of whole circuit gain)
  rms = rms * 6001.8 / 7.38;

  char _buffer[8];
  lcd.setCursor(0, 1);

  if(rms >= 100000.0)        // if voltage >= 100000.0 mV = 100.0 V
    sprintf( _buffer, "%3u.%1u V", (uint16_t)(rms/1000), (uint16_t)(rms/100) % 10 );
  else if (rms >= 10000.0)   // if voltage >= 10000.0 mV = 10.0 V
    sprintf( _buffer, " %2u.%1u V", (uint8_t)rms/1000, (uint16_t)(rms/100) % 10 );
  else   // if voltage < 10 V
    sprintf( _buffer, "  %1u.%1u V", (uint8_t)(rms/1000), (uint8_t)(rms/100) % 10 );

  lcd.print(_buffer);

  delay(1000);
}

// end of code.

 

Оставить комментарий

Ваш email нигде не будет показан. Обязательные для заполнения поля помечены *

*

..