|
Цифровой вольтметр-амперметр-ваттметр на AVR для бытовой сети, некоторые вопросы |
|
|
|
Mar 16 2011, 09:17
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980

|
Вот делаю такую штуку - сабж. Делается для себя, но хочется не только некий показометр (а-ля китайские барометры, которые показывают хрен знает что, мало зависящее от атмосферного давления), а прибор, на показания которого можно ориентироваться  . Схему измерительной части прилагаю. Резистор 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. Показания "бегают" - часто меняются в небольших пределах. Я могу поставить в цикл задержку - типа мерять раз в секунду, но меня такой способ чего-то смущает.. Может кто что посоветует? Спасибо.
Сообщение отредактировал hd44780 - Mar 16 2011, 09:19
Эскизы прикрепленных изображений
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
 |
Ответов
|
Apr 1 2011, 05:00
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 6-04-10
Из: Киев
Пользователь №: 56 447

|
Цитата(hd44780 @ Mar 31 2011, 18:53)  Доделал вольтметр полностью . Показал 188-190в при реальных 220-221в. Это без калибровки. Коэффициенты взяты на глаз. У меня вход идет через подстроечный резистор 10К на АЦП, и точность измерений я настраивал им, чтобы не использовать коэффициенты. Потому как при использовании операций умножения/деления прошивка "кабанеет" на глазах. (При использовании только одной операции умножения у меня hex вырос с 3 до 11 кБ). Поэтому умножать/делить лучше только на числа, которые являются степенями двойки.
|
|
|
|
|
Apr 1 2011, 08:32
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 6-04-10
Из: Киев
Пользователь №: 56 447

|
Цитата(777777 @ Apr 1 2011, 07:25)  Ну ни фига себе доводы! Ну так для того он и процессор, пусть работает, он железный! Тебе какое дело 3 кб там или 11? А подстроечник стоит денег и понижает надежность. Лучше выкинуть его, а коэффициент держать в EEPROM Да никакого дела, собсно, если бы не одно но: Цитата(Datasheet) 8 bit AVR Microcontroller with 8K Bytes of In-System Self-Programmable Flash
|
|
|
|
|
Apr 1 2011, 11:08
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 6-04-10
Из: Киев
Пользователь №: 56 447

|
Цитата(777777 @ Apr 1 2011, 10:56)  А, кстати, почему умножение занимает так много? Может ты в плавающей точке вычисления делаешь? Нет, умножение было целочисленным. А много потому, что нет аппаратного умножителя, а програмно получается так много.
Сообщение отредактировал SHUR1K - Apr 1 2011, 11:14
|
|
|
|
|
Apr 1 2011, 12:46
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 6-04-10
Из: Киев
Пользователь №: 56 447

|
Цитата(Stanislav_S @ Apr 1 2011, 14:33)  Страхи какие-то у вас  Повсеместно использую целочисленное умножение типа 16 х 16 или 32 * 32, и никаких таких мегаразмеров программы не получается, как же так? 16x16 и 32х32 - это совсем другое. Умножение на число, которое является степенью двойки - это просто сдвиг влево на соответствующие число позиций (степень двойки). А Вы попробуйте умножить на 11 или 13 и посмотрите как вырастет hex
|
|
|
|
|
Apr 1 2011, 18:04
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 6-04-10
Из: Киев
Пользователь №: 56 447

|
Цитата(rx3apf @ Apr 1 2011, 18:10)  Это что, первоапрельский прикол такой ? 16x16 это, простите, не умножение числа 16 на число 16, а перемножение двух произвольных 16-битных чисел. В один килобайт влезают четыре действия в плавучке и еще место останется, а уж целочисленное умножение при отсутствии команды mul - три-четыре десятка команд (меньше сотни байтов). Прошу прощения, тупанул. Перепроверил у себя, при использовании в одном выражении деления и умножения код вырастает значительно. Если делать это не в одном выражении, то прирост действительно не так велик.
|
|
|
|
|
Apr 3 2011, 14:35
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 6-04-10
Из: Киев
Пользователь №: 56 447

|
Цитата(Stanislav_S @ Apr 2 2011, 14:08)  Хм, что то у вас с компилятором, добавил деление в формуле, прирост чуть больше чем при умножении, что то у вас не так  Проверьте настройки компилятора. Нет, не с компилятором :-). Просто если использовать в одном выражении умножении и деление, ну например *3/2, то получается *1.5, а это уже дробное число, вот и растет код безбожно.
|
|
|
|
Сообщений в этой теме
hd44780 Цифровой вольтметр-амперметр-ваттметр на AVR для бытовой сети Mar 16 2011, 09:17 Vasily_ А зачем это делать http://www.conrad.com/VOLTCRAF... Mar 16 2011, 12:10 RabidRabbit 2. Результаты для тока и напряжения складывать в к... Mar 16 2011, 12:13 hd44780 Vasily_, ага. и платить 50 еврозеленых баксов . П... Mar 16 2011, 12:32 dimka76 Цитата(hd44780 @ Mar 16 2011, 15:32) И ещ... Mar 16 2011, 13:26  hd44780 Цитата(dimka76 @ Mar 16 2011, 15:26) Надо... Mar 16 2011, 14:03   kovigor Цитата(hd44780 @ Mar 16 2011, 18:03) Спас... Mar 16 2011, 16:12    hd44780 Цитата(kovigor @ Mar 16 2011, 18:12) Это,... Mar 16 2011, 17:44   defunct Цитата(hd44780 @ Mar 16 2011, 16:03) Дель... Mar 18 2011, 13:30    hd44780 Цитата(defunct @ Mar 18 2011, 15:30) Ф = ... Mar 18 2011, 14:20     KaMa3eR Цитата(hd44780 @ Mar 18 2011, 17:20) Спас... Mar 19 2011, 14:50 defunct Цитата(hd44780 @ Mar 16 2011, 14:32) И ещ... Mar 16 2011, 13:47 hd44780 На ТТ у меня диод германиевый (старый советский Д2... Mar 20 2011, 12:34 kovigor Цитата(hd44780 @ Mar 20 2011, 16:34) Насч... Mar 20 2011, 13:07 RabidRabbit Цитата(hd44780 @ Mar 20 2011, 15:34) Сред... Mar 21 2011, 14:44 hd44780 Я неточно выразился. Я не пойму, куда мне его став... Mar 20 2011, 15:46 nk@ Google рулит
Вот почитайте, насчет выпрямителей. ... Mar 20 2011, 19:43 azizcheg Добрый день всем.
Хочу сделать подобное. На мк ATM... Mar 21 2011, 06:27 hd44780 Я пока в процессе... Долбаное напряжение померить ... Mar 21 2011, 08:25 ASZ Цитата(hd44780 @ Mar 21 2011, 12:25) Я по... Mar 21 2011, 09:15  hd44780 Цитата(ASZ @ Mar 21 2011, 11:15) Мне непо... Mar 21 2011, 09:48   ASZ Цитата(hd44780 @ Mar 21 2011, 13:48) Пока... Mar 21 2011, 10:11    nk@ Цитата(ASZ @ Mar 21 2011, 12:11) А зачем ... Mar 21 2011, 10:48 azizcheg Цитата(hd44780 @ Mar 21 2011, 11:25) 3-х ... Mar 22 2011, 07:38  hd44780 Цитата(azizcheg @ Mar 22 2011, 09:38) 128... Mar 22 2011, 08:02   azizcheg Цитата(hd44780 @ Mar 22 2011, 11:02) Личн... Mar 22 2011, 08:13    hd44780 Цитата(azizcheg @ Mar 22 2011, 10:13) Что... Mar 22 2011, 08:34     RabidRabbit Цитата(hd44780 @ Mar 22 2011, 11:34) АЦП ... Mar 22 2011, 09:28 hd44780 Не понял ...
Я ж получаю полож. полуволну с верхн... Mar 21 2011, 10:34 ASZ Цитата(hd44780 @ Mar 21 2011, 13:34) Не п... Mar 22 2011, 09:12 e_one Занимался подобной задачей. Для развязки от сети и... Mar 21 2011, 12:13 hd44780 Я на С в CvAvr пишу.
float у него 4 байта вроде -... Mar 21 2011, 15:35 RabidRabbit Цитата(hd44780 @ Mar 21 2011, 18:35) В бу... Mar 21 2011, 16:32 hd44780 С буфером получается вот что:
// Для сумм
//volat... Mar 21 2011, 16:59 nk@ А AD делает отличные RMS to DC конвертеры:
http:/... Mar 21 2011, 18:55 hd44780 Еще и достать их не очень....
Правда из доки можно... Mar 21 2011, 19:21 hd44780 К вопросу о тех кольцевых буферах.
С какой частот... Mar 22 2011, 07:11 RabidRabbit Цитата(hd44780 @ Mar 22 2011, 10:11) К во... Mar 22 2011, 08:52 hd44780 RabidRabbit, спасибо. я так не пытался .
Попробую... Mar 22 2011, 09:45 RabidRabbit Цитата(hd44780 @ Mar 22 2011, 12:45) Попр... Mar 22 2011, 10:03  hd44780 Цитата(RabidRabbit @ Mar 22 2011, 12:03) ... Mar 22 2011, 10:24 ASZ Цитата(hd44780 @ Mar 22 2011, 12:45) ...s... Mar 22 2011, 12:53  hd44780 Цитата(ASZ @ Mar 22 2011, 14:53) Можно, е... Mar 22 2011, 14:04   MaslovVG Позволю себе заметиь.
Первое для определения средн... Mar 22 2011, 20:20    hd44780 Цитата(MaslovVG @ Mar 22 2011, 22:20) Изм... Mar 23 2011, 07:30 hd44780 RabidRabbit, с буферами вроде получилось. Показыва... Mar 22 2011, 17:39 hd44780 Без выпрямителя я вот такое вижу - схема. Вместо 2... Mar 23 2011, 09:39 dimka76 Цитата(hd44780 @ Mar 23 2011, 12:39) Как ... Mar 23 2011, 11:13 hd44780 dimka76, спасибо. Попробую. Mar 23 2011, 11:54 Tanya Цитата(hd44780 @ Mar 23 2011, 14:54) dimk... Mar 23 2011, 12:17  hd44780 Цитата(Tanya @ Mar 23 2011, 14:17) Попроб... Mar 23 2011, 14:11   Tanya Цитата(hd44780 @ Mar 23 2011, 17:11) Вы и... Mar 23 2011, 14:22    hd44780 Цитата(Tanya @ Mar 23 2011, 16:22) Я имел... Mar 23 2011, 15:05     Tanya Цитата(hd44780 @ Mar 23 2011, 18:05) Схем... Mar 23 2011, 16:59      hd44780 Цитата(Tanya @ Mar 23 2011, 18:59) Схема ... Mar 23 2011, 19:18       Stanislav_S Цитата(hd44780 @ Mar 23 2011, 23:18) Схем... Mar 23 2011, 19:34       Tanya Цитата(hd44780 @ Mar 23 2011, 22:18) Посл... Mar 24 2011, 09:25        hd44780 Цитата(Tanya @ Mar 24 2011, 11:25) Это бу... Mar 24 2011, 10:19         Stanislav_S Вот так это выглядет, измерение напряжения с обмот... Mar 24 2011, 10:28         Tanya Цитата(hd44780 @ Mar 24 2011, 13:19) А че... Mar 24 2011, 10:38          Stanislav_S Цитата(Tanya @ Mar 24 2011, 14:38) А заче... Mar 24 2011, 10:50           Tanya Цитата(Stanislav_S @ Mar 24 2011, 13:50) ... Mar 24 2011, 10:59            Stanislav_S Цитата(Tanya @ Mar 24 2011, 14:59) А я пр... Mar 24 2011, 11:09             Tanya Цитата(Stanislav_S @ Mar 24 2011, 14:09) ... Mar 24 2011, 11:26              Stanislav_S Цитата(Tanya @ Mar 24 2011, 15:26) А с на... Mar 24 2011, 12:21               Tanya Цитата(Stanislav_S @ Mar 24 2011, 15:21) ... Mar 24 2011, 12:25                Stanislav_S Цитата(Tanya @ Mar 24 2011, 16:25) Кто эт... Mar 24 2011, 13:09                 Tanya Цитата(Stanislav_S @ Mar 24 2011, 16:09) ... Mar 24 2011, 13:25     Stanislav_S Что то схемы измерения у вас больно альтернативные... Mar 23 2011, 17:04 hd44780 Stanislav_S, а зачем виртуальная земля? Для точнос... Mar 24 2011, 09:05 Stanislav_S Цитата(hd44780 @ Mar 24 2011, 13:05) Stan... Mar 24 2011, 10:17 hd44780 Stanislav_S, Tanya, спасибо.
Вроде понятно. Буду п... Mar 24 2011, 10:53 hd44780 Мне так видится - схема.
Со второй вторичкой/транс... Mar 24 2011, 11:38 Tanya Цитата(hd44780 @ Mar 24 2011, 14:38) Мне ... Mar 24 2011, 12:07 Sirko Извините.
А почему нельзя проще?
Если судить по п... Mar 25 2011, 15:12 SHUR1K Цитата(Sirko @ Mar 25 2011, 17:12) Извини... Mar 30 2011, 13:53  nk@ Цитата(SHUR1K @ Mar 30 2011, 16:53) ловит... Mar 30 2011, 18:34   SHUR1K Цитата(nk@ @ Mar 30 2011, 20:34) А не про... Mar 31 2011, 04:49  hd44780 Цитата(SHUR1K @ Mar 30 2011, 15:53) ловит... Mar 31 2011, 07:15 НЕХ А не проще ли поставить ADE7755 ценою меньше долла... Mar 31 2011, 05:23 777777 Наличие диодов сразу говорит о том, что достаточну... Mar 31 2011, 08:03 hd44780 Цитата(777777 @ Mar 31 2011, 10:03) Налич... Mar 31 2011, 10:53  777777 Цитата(hd44780 @ Mar 31 2011, 14:53) У ме... Mar 31 2011, 11:54   hd44780 Цитата(777777 @ Mar 31 2011, 13:54) Да ла... Mar 31 2011, 12:30        ILYAUL Цитата(SHUR1K @ Apr 1 2011, 16:46) 16x16 ... Apr 1 2011, 13:03        Stanislav_S Цитата(SHUR1K @ Apr 1 2011, 16:46) 16x16 ... Apr 1 2011, 13:29            Stanislav_S Цитата(SHUR1K @ Apr 3 2011, 18:35) Нет, н... Apr 3 2011, 15:30 hd44780 У меня и подстроечник и коэффициенты в EEPROM .
... Apr 1 2011, 06:24
2 страниц
1 2 >
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|