hd44780 0 16 марта, 2011 Опубликовано 16 марта, 2011 (изменено) · Жалоба Вот делаю такую штуку - сабж. Делается для себя, но хочется не только некий показометр (а-ля китайские барометры, которые показывают хрен знает что, мало зависящее от атмосферного давления), а прибор, на показания которого можно ориентироваться . Схему измерительной части прилагаю. Резистор R2 - многооборотный. На выходе ТТ предполагается еще поставить ОУ с переключаемым Ку как в AVR465 (для низкоточных нагрузок), но пока его там нету - сразу в ATMega8. БП на LM7805, мегу и LCD рисовать не стал - все стандартно. Генератор внутренний, 8МГц. Я принципиально не стал ставить шунт и делитель. С гальванической развязкой надежнее. Измерительные узлы отдельно от МК и цифровой части проверены обычным мультиметром на различных нагрузках (от 25Вт паяльника до 10КВт кухонной печки) - они полностью адекватны и работают нормально. Обработка данных такая: 1. АЦП на частоте 125 кГц цифрует сигнал. Обработчик прерывания Считает суммы отсчетов и их кол-во: // ADC interrupt service routine interrupt [ADC_INT] void adc_isr(void) { dword adc_data, temp; // Read the AD conversion result adc_data=ADCW&0xFFFE; if(isU) { // U temp=adc_data; //*adc_data; sqr_summU+=temp; countU++; } // if else { // I temp=adc_data; //*adc_data; sqr_summI+=temp; countI++; } // else } // adc_isr 2. Главная программа меряет по очереди ток и напряжение: ............. // Измерение напряжения isU=1; sqr_summU=0; countU=0; ADMUX&=0xFE; // ADC0 - канал напряжения // Запуск АЦП ADCSRA|=0x40; // ADCSC - Start ADC startMs=ms; // ожидание 21 мс (20мс - период 50 Гц) while (abs (ms-startMs)<21); // стоп АЦП ADCSRA&=0xBF; // 10111111 = BF ............. для тока также, только переменные другие. Переменная ms глобальная - TC1 по прерыванию считает миллисекунды. 3. Когда оба померяли, вычисляем // Расчет напряжения // Среднеквадратическое // Urms=sqrt(sum(u(i)^2)/N); u(i) - мгновенные отсчеты (с АЦП), i=1..N f_sqr_summU = ((float)sqr_summU)/countU; // ср. арифм. // f_sqr_summ=sqrt(f_sqr_summ); // Urms (отсчеты АЦП) // Uацп=ADC*Vref/1024=ADC*0.005 U = f_sqr_summU*0.005; // Uвх=Urms*109.52 U*=109.52; // Расчет тока // Среднеквадратическое // Urms=sqrt(sum(u(i)^2)/N); u(i) - мгновенные отсчеты (с АЦП), i=1..N f_sqr_summI = ((float)sqr_summI)/countI; // ср. арифм. // f_sqr_summ=sqrt(f_sqr_summ); // Urms (отсчеты АЦП) // Uацп=ADC*Vref/1024=ADC*0.005 I = f_sqr_summI*0.005; // Iн=500*Uацп/148,86 =Uацп*3.359 I*=3.359; // S - Полная мощность S_temp=((dword)I*U); S=S_temp; 4. после этого вывод на дисплей. Калибровки пока нету, но будет. Заметил странности: 1. При среднеквадратических было завышение показаний почти в 2 раза - вместо 220-230в показывал 380-400. По току аналогично. Поставил среднеарифметическое - нормально стало.... Почему? Или я чего-то прозевал? 2. Показания "бегают" - часто меняются в небольших пределах. Я могу поставить в цикл задержку - типа мерять раз в секунду, но меня такой способ чего-то смущает.. Может кто что посоветует? Спасибо. Изменено 16 марта, 2011 пользователем hd44780 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vasily_ 45 16 марта, 2011 Опубликовано 16 марта, 2011 · Жалоба А зачем это делать http://www.conrad.com/VOLTCRAFT-ENERGY-LOG...f75c01%2Fmd5%7D и это работает точно! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RabidRabbit 0 16 марта, 2011 Опубликовано 16 марта, 2011 · Жалоба 2. Результаты для тока и напряжения складывать в кольцевой буфер, выводить среднее арифметическое для значений в буфере. Чем длиннее буфер, тем (по-моему) меньше будет прыгать :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 16 марта, 2011 Опубликовано 16 марта, 2011 (изменено) · Жалоба Vasily_, ага. и платить 50 еврозеленых баксов :rolleyes: . Плюс накладные расходы.... Моя конструкция в разы дешевле получится, даже если я туда граф. дисплей прилеплю и нарисую на нем большие цифры. Да и интересно просто. Я ж разработчик, а не юзер с замашками тупых бухгалтеров с единственной мыслью в голове - "нажал кнопку и оно само все посчитает" :blink: . Я резко разбогатею, если начну паять эти ваттметры и продавать их по 50 евро . RabidRabbit, попробую, спасибо за идею. И еще - как можно определить тот косинус угла между током и напряжением? Для определения не только полной мощности (S=UI), но и активной (P=UI*cos(phi)). Я знаю, что там как-то анализируется время выхода синусоид "из нуля", Время я могу посчитать, а что потом делать - мне непонятно :crying: . Изменено 16 марта, 2011 пользователем hd44780 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 16 марта, 2011 Опубликовано 16 марта, 2011 · Жалоба И еще - как можно определить тот косинус угла между током и напряжением? Для определения не только полной мощности (S=UI), но и активной (P=UI*cos(phi)). А его и не надо определять. Надо просто взять сумму произведений мгновенных значений тока на напряжение за период. Результатом и будет значение активной мощности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 16 марта, 2011 Опубликовано 16 марта, 2011 · Жалоба И еще - как можно определить тот косинус угла между током и напряжением? Для определения не только полной мощности (S=UI), но и активной (P=UI*cos(phi)). Я определял с помощью детектора фазы. Ловите переход напряжения через 0 запоминаете номер семпла, потом тока - тоже запоминаете номер семпла, Потом нехитрыми формулами вычисляете дельту между семлами, конвертируете дельту в угол, и считаете cos. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 16 марта, 2011 Опубликовано 16 марта, 2011 (изменено) · Жалоба Надо просто взять сумму произведений мгновенных значений тока на напряжение за период. Результатом и будет значение активной мощности. Спасибо. Где-то видел такое. Наверное, в AVR465. Только не понял, на фига оно ... Попробую. Ловите переход напряжения через 0 запоминаете номер семпла, потом тока - тоже запоминаете номер семпла, Потом нехитрыми формулами вычисляете дельту между семлами, конвертируете дельту в угол, и считаете cos. Дельта - разность? И как дельту в угол перевести? Что такое "детектор фазы"? Изменено 16 марта, 2011 пользователем hd44780 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 5 16 марта, 2011 Опубликовано 16 марта, 2011 · Жалоба Спасибо. Где-то видел такое. Наверное, в AVR465. Только не понял, на фига оно ... Это, кажись, прямо из учебника Бессонова по ТОЭ. Там про мощности в цепи переменного тока хорошо написано ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 16 марта, 2011 Опубликовано 16 марта, 2011 (изменено) · Жалоба Это, кажись, прямо из учебника Бессонова по ТОЭ. Там про мощности в цепи переменного тока хорошо написано ... Книжку нашел (учебник 1996 г), почитаю. Изменено 17 марта, 2011 пользователем hd44780 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 18 марта, 2011 Опубликовано 18 марта, 2011 · Жалоба Дельта - разность? И как дельту в угол перевести? Ф = delta * 2 Pi * F / Fd, где Ф - искомый угол, F - частота входного сигнала, Fd - частота дискретизации, delta - разность между номером семла перехода напряжения через 0 и номером семпла перехода тока через 0. На практике у вас, например, есть частота дискретизации Fd = 4kHz с которой оцифровывается входной сигнал и частота входного сигнала - 50Гц. За период входного сигнала, будет 4K / 50 = 80 семлов, 80 семплов это 2Pi, формула преобразования соотв: Ф = delta * 2 Pi / 80. Детектор фазы это есть - способ определения где был переход через 0. Можно программно, можно компаратором. Удобнее всего просто срезать диодом отрицательную полуволну входного сигнала, тогда условием перехода через 0 будет переход от семпла равного 0 к ненулевому. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 18 марта, 2011 Опубликовано 18 марта, 2011 · Жалоба Ф = delta * 2 Pi * F / Fd, .... Детектор фазы это есть - способ определения где был переход через 0. Можно программно, можно компаратором. Удобнее всего просто срезать диодом отрицательную полуволну входного сигнала, тогда условием перехода через 0 будет переход от семпла равного 0 к ненулевому. Спасибо. Диоды там уже есть . Надеюсь, на выходных проверю все это... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kama3er 0 19 марта, 2011 Опубликовано 19 марта, 2011 · Жалоба Спасибо. Диоды там уже есть . Надеюсь, на выходных проверю все это... как мне кажеться у диода есть маленькая неприятность обычные кремниевые диоды имеют прямое падение напряжения около 0,6—0,7 вольт, применение диодов Шоттки позволяет снизить это значение до 0,2—0,4 вольт, а если сделать активный выпрямитель и того не останется :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 20 марта, 2011 Опубликовано 20 марта, 2011 (изменено) · Жалоба На ТТ у меня диод германиевый (старый советский Д220), в выпрямителе - кремниевые - 1N4007. Насчет активного выпрямителя - была мысль, но схемы не нашел :( . Одни абстрактные размышления на тему попадались. Из которых схему трудно сделать. Мне, по крайней мере. Не подкинете ли схемку? Хотя я решил мерить амплитуду и делить ее на корень из 2 - как в букваре. Среднее арифметическое сильно "бегает" (писал выше), кольцевой буфер на 200 значений не спас, больше делать не могу - килобайта памяти в меге 8 не хватает :(. Не вешать же туда SRAM на 64 КБ ... Среднеквадратичное бегает меньше, но дает завышенные результаты - почти в 2 раза (при 230 на входе показывает 380-400 :) ). Я, конечно, могу подогнать коэффициентом, но мне интересно - почему идет завышение? Может потому, что диод на входе пол-периода режет и надо сперва делить, потом поднимать уровень ОУ, а в микрокоде смещать обратно? А вчера проектик нарыл - берет 1000 отсчетов, меряет по ним максимум и делит на коэффициент. Правда не знаю, как такой подход с т.з. теории. К мощности пока не приступал. Дай Бог с напряжением и током управиться :rolleyes: . Изменено 20 марта, 2011 пользователем hd44780 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 5 20 марта, 2011 Опубликовано 20 марта, 2011 · Жалоба Насчет активного выпрямителя - была мысль, но схемы не нашел :( Странно. Например, см. у М.Джонса в "Практической электронике". Да и у Хоровица и Хилла должно быть. Это же классическая схема - активный выпрямитель на ОУ ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 20 марта, 2011 Опубликовано 20 марта, 2011 · Жалоба Я неточно выразился. Я не пойму, куда мне его ставить? Если б была 2-я вторичка на понижащем трансе, там понятно, а тут .... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться