Ви не увійшли.
Доброго времени суток, захотел сделать измерительный элемент с отображением значений для высоковольтного делителя напряжения. С измерением постоянного напряжения и выводом результатов проблем нет, попутно использую внешний АЦП ADS1115, но с переменкой проблемы и я так понял что ардуино не сильно для этого и подходит, хотя находил некоторые проекты в интернете, пробовал следующие варианты:
1) использовать следующую библиотеку https://github.com/MartinStokroos/TrueRMS;
2)следующую схему и код для нее
#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 %. Суть моего вопроса вообще насколько это возможно, а если возможно то буду крайне благодарен за совет в его реализации. Находил проекты с использованием ОУ, но сам с ними еще не работал и вообще без году неделю начал изучать ардуино, поэтому изначально искал более казуальное решения.
Неактивний
"напряжение до 5В" - это 0..5В? -5..5В? -100..5В?
Если сигнал стабильный, то делается так:
1. по прерыванию компаратора запускается таймер на N тактов
2. по сработке таймера запускается ADC
3. инкрементируется N и повторяется все с начала
Так можно оцифровать сигнал с дискретностью до 1/F_CPU.
Необходимо, чтобы не срабатывали никакие другие прерывания во время этого процесса. Очень желательно этот участок писать на ассемблере.
Неактивний
Я думаю сделав смещение на 2.5 В попробовать использовать данную библиотекуhttps://github.com/MartinStokroos/TrueR … re_rms.ino,может кто-то ее уже использовал? Она даёт результат?
Неактивний
Если у Вас задача найти среднеквадратическое значение напряжения (RMS), то у него есть прекрасное свойство: знак напряжения (плюс или минус) совершенно не важен (смотрите формулу, там возведение в квадрат), поэтому вместо диода сделайте выпрямитель.
Играться со смещением напряжения для данной задачи - плохая идея, т.к. потеряется реальный ноль и результаты RMS будут далеки от истины.
Неактивний
Пробовал схему с одним диодом, конденсатором и стабилитроном и результаты также были далеки от удовлетворительных, менял и емкость конденсатора и сам диод. Допускаю что сам совершаю элементарную ошибку, поэтому утверждать неработоспособность этой идеи не буду)
В данный момент сделал смещение 2.5 В и с использованием библиотеки получил значения с погрешность в 5 %.
Остання редакція SkepticK (2021-05-13 12:34:19)
Неактивний
Бред какой-то
Метод TrueRMS - в вычислении среднего от квадрата мгновенного напряжения.
Для Ардуины это означало бы сэмплирование АЦП с какой-то достаточной частотой, возведение обработанного-нормированного напряжения в квадрат, суммирование-накопление в переменной какое-то время и выдача результата - корня из суммы, делённой на количество сэмплов.
Такой алгоритм дает правильное значение действующего напряжения при хитрой форме сигнала, наличии гармоник, итп.
В скетче идёт тупо вычисление пикового максимума за 200мс и деление его на корень из 2. Такое работает только для ровной, красивой синусоиды.
В схеме нарисован делитель-"усреднитель" с диодом в верхнем плече. Такое
1. Пропускает только положительный полупериод.
2. Имеет крайне кривое отношение к определяемому _пиковому_ значению. Ибо пиковое исходного сигнала превращается в среднее положительного полупериода + вклады гармоник с разными множителями от делителя. Ибо делитель с кондёром в нижнем плече для разных частот имеет разные коэффициенты деления для разных частот.
3. Не учитывается падение напряжения на диоде, которое в зависимости от типа может быть сильно разным.
Остання редакція theoristos (2021-06-26 17:18:24)
Неактивний
Сделайте выпрямитель в высоковольтной части схемы, а потом делителем на резисторах или с помощью ОУ приведите к диапазону 0-5В. Так уменьшите влияние нелинейности и падения напяжения на диодах.
Остання редакція Honey (2021-06-20 13:03:40)
Неактивний
Я бы вообще не рисковал с подачей высокого напряжения на контроллер, даже через резисторы. Я в своё время делал тиристорный стабилизатор и в качестве датчика использовал небольшой трансформатор 380/9В, зависимость высокого и низкого напряжения прямолинейная. Питание контроллера также держит 380В. Рассчитал делитель напряжения при котором 5В - 380В, далее ваши 220В тоже по пропорции. Поставил диодный мост и мерял в каждой полуволне, ёмкость и стабилитрон могут вносить погрешность хоть и маленькую. Правда с диодами пришлось повозиться пока нашёл с маленьким падением напряжения, чтобы не учитывать его в расчётах при измерении.
Есть возможность избежать высокого напряжения, обязательно воспользуюсь.
Остання редакція Воха с паяльником (2022-11-12 20:04:06)
Неактивний