#1 2021-05-11 14:19:02

SkepticK
Учасник
Зареєстрований: 2021-04-28
Повідомлень: 12

Вольтметр переменного напряжения (Arduino uno)

Доброго времени суток, захотел сделать измерительный элемент с отображением значений для высоковольтного делителя напряжения. С измерением постоянного напряжения и выводом результатов проблем нет, попутно использую внешний АЦП ADS1115, но с переменкой проблемы и я так понял что ардуино не сильно для этого и подходит, хотя находил некоторые проекты в интернете, пробовал следующие варианты:
1) использовать следующую библиотеку https://github.com/MartinStokroos/TrueRMS;
2)следующую схему arduino-ac-voltmeter-circuit-1024x558.png и код для нее

#include <LiquidCrystal.h>    // include Arduino LCD library
 
// LCD module connections (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
 
void setup(void) {
  lcd.begin(16, 2);           // set up the LCD's number of columns and rows
  lcd.setCursor(0, 0);
  lcd.print("RMS Voltage:");
  analogReference(INTERNAL);  // set ADC positive reference voltage to 1.1V (internal)
}
 
// get maximum reading value
uint16_t get_max() {
  uint16_t max_v = 0;
  for(uint8_t i = 0; i < 100; i++) {
    uint16_t r = analogRead(A3);  // read from analog channel 3 (A3)
    if(max_v < r) max_v = r;
    delayMicroseconds(200);
  }
  return max_v;
}
 
// main loop
void loop() {
 
  char buf[10];
  // get amplitude (maximum - or peak value)
  uint32_t v = get_max();
  // get actual voltage (ADC voltage reference = 1.1V)
  v = v * 1100/1023;
  // calculate the RMS value ( = peak/√2 )
  v /= sqrt(2);
 
  sprintf(buf, "%03u Volts", v);
  lcd.setCursor(0, 1);
  lcd.print(buf);
 
  delay(100);
 
}
 
// end of code.

3)пробовал использовать диодный мост вместо одного диода в предыдущей схеме.
Во всех случаях результаты далеки от посредственных, погрешности на мой взгляд огромные (представляют собой крайне не линейный характер и доходят до 30 % от подаваемого значения). В идеале хотел бы измерять переменное напряжение до 5 В с погрешностью в 1 %. Суть моего вопроса вообще насколько это возможно, а если возможно то буду крайне благодарен за совет в его реализации. Находил проекты с использованием ОУ, но сам с ними еще не работал и вообще без году неделю начал изучать ардуино, поэтому изначально искал более казуальное решения.

Неактивний

#2 2021-05-12 17:44:47

akapulko
Гість

Re: Вольтметр переменного напряжения (Arduino uno)

"напряжение до 5В" - это 0..5В? -5..5В? -100..5В?

#3 2021-05-12 19:47:07

SkepticK
Учасник
Зареєстрований: 2021-04-28
Повідомлень: 12

Re: Вольтметр переменного напряжения (Arduino uno)

От 0 до 5 В. Сегодня начал изучать тему смещения синусоиды на 2.5 В, но пока слабо представляю реализацию выборки за период в 20 мс,вот. За любой совет буду благодарен.

Неактивний

#4 2021-05-12 21:21:40

Honey
Учасник
З Киев
Зареєстрований: 2020-09-26
Повідомлень: 66

Re: Вольтметр переменного напряжения (Arduino uno)

Если сигнал стабильный, то делается так:
1. по прерыванию компаратора запускается таймер на N тактов
2. по сработке таймера запускается ADC
3. инкрементируется N и повторяется все с начала
Так можно оцифровать сигнал с дискретностью до 1/F_CPU.
Необходимо, чтобы не срабатывали никакие другие прерывания во время этого процесса. Очень желательно этот участок писать на ассемблере.

Неактивний

#5 2021-05-12 21:47:41

SkepticK
Учасник
Зареєстрований: 2021-04-28
Повідомлень: 12

Re: Вольтметр переменного напряжения (Arduino uno)

Я думаю сделав смещение на 2.5 В попробовать использовать данную библиотекуhttps://github.com/MartinStokroos/TrueR … re_rms.ino,может кто-то ее уже использовал? Она даёт результат?

Неактивний

#6 2021-05-12 22:37:46

Honey
Учасник
З Киев
Зареєстрований: 2020-09-26
Повідомлень: 66

Re: Вольтметр переменного напряжения (Arduino uno)

Если у Вас задача найти среднеквадратическое значение напряжения (RMS), то у него есть прекрасное свойство: знак напряжения (плюс или минус) совершенно не важен (смотрите формулу, там возведение в квадрат), поэтому вместо диода сделайте выпрямитель.
Играться со смещением напряжения для данной задачи - плохая идея, т.к. потеряется реальный ноль и результаты RMS будут далеки от истины.

Неактивний

#7 2021-05-13 09:00:07

SkepticK
Учасник
Зареєстрований: 2021-04-28
Повідомлень: 12

Re: Вольтметр переменного напряжения (Arduino uno)

Пробовал использовать диодный мост, но он вносит огромную нелинейность на таком относительно маленьком диапазоне как 0-5 В.

Неактивний

#8 2021-05-13 10:56:09

Honey
Учасник
З Киев
Зареєстрований: 2020-09-26
Повідомлень: 66

Re: Вольтметр переменного напряжения (Arduino uno)

А один диод не вносит такую огромную нелинейность?

Неактивний

#9 2021-05-13 12:28:36

SkepticK
Учасник
Зареєстрований: 2021-04-28
Повідомлень: 12

Re: Вольтметр переменного напряжения (Arduino uno)

Пробовал схему с одним диодом, конденсатором и стабилитроном ac-voltmeter-using-arduino-circuit-diagram.png и результаты также были далеки от удовлетворительных, менял и емкость конденсатора и сам диод. Допускаю что сам совершаю элементарную ошибку, поэтому утверждать неработоспособность этой идеи не буду)
В данный момент сделал смещение 2.5 В и с использованием библиотеки получил значения с погрешность в 5 %.

Остання редакція SkepticK (2021-05-13 12:34:19)

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму