|
Цифровой вольтметр-амперметр-ваттметр на 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
Эскизы прикрепленных изображений
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
11 страниц
1 2 3 > »
|
 |
Ответов
(1 - 99)
|
Mar 16 2011, 12:32
|

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

|
Vasily_, ага. и платить 50 еврозеленых баксов  . Плюс накладные расходы.... Моя конструкция в разы дешевле получится, даже если я туда граф. дисплей прилеплю и нарисую на нем большие цифры. Да и интересно просто. Я ж разработчик, а не юзер с замашками тупых бухгалтеров с единственной мыслью в голове - "нажал кнопку и оно само все посчитает"  . Я резко разбогатею, если начну паять эти ваттметры и продавать их по 50 евро  . RabidRabbit, попробую, спасибо за идею. И еще - как можно определить тот косинус угла между током и напряжением? Для определения не только полной мощности (S=UI), но и активной (P=UI*cos(phi)). Я знаю, что там как-то анализируется время выхода синусоид "из нуля", Время я могу посчитать, а что потом делать - мне непонятно  .
Сообщение отредактировал hd44780 - Mar 16 2011, 14:04
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 16 2011, 14:03
|

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

|
Цитата(dimka76 @ Mar 16 2011, 15:26)  Надо просто взять сумму произведений мгновенных значений тока на напряжение за период. Результатом и будет значение активной мощности. Спасибо. Где-то видел такое. Наверное, в AVR465. Только не понял, на фига оно ... Попробую. Цитата(defunct @ Mar 16 2011, 15:47)  Ловите переход напряжения через 0 запоминаете номер семпла, потом тока - тоже запоминаете номер семпла, Потом нехитрыми формулами вычисляете дельту между семлами, конвертируете дельту в угол, и считаете cos. Дельта - разность? И как дельту в угол перевести? Что такое "детектор фазы"?
Сообщение отредактировал hd44780 - Mar 16 2011, 15:04
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 18 2011, 13:30
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(hd44780 @ Mar 16 2011, 16:03)  Дельта - разность? И как дельту в угол перевести? Ф = 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 к ненулевому.
|
|
|
|
|
Mar 18 2011, 14:20
|

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

|
Цитата(defunct @ Mar 18 2011, 15:30)  Ф = delta * 2 Pi * F / Fd,
.... Детектор фазы это есть - способ определения где был переход через 0. Можно программно, можно компаратором. Удобнее всего просто срезать диодом отрицательную полуволну входного сигнала, тогда условием перехода через 0 будет переход от семпла равного 0 к ненулевому. Спасибо. Диоды там уже есть  . Надеюсь, на выходных проверю все это...
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 19 2011, 14:50
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 13-11-09
Из: Украина Шостка
Пользователь №: 53 609

|
Цитата(hd44780 @ Mar 18 2011, 17:20)  Спасибо. Диоды там уже есть  . Надеюсь, на выходных проверю все это... как мне кажеться у диода есть маленькая неприятность обычные кремниевые диоды имеют прямое падение напряжения около 0,6—0,7 вольт, применение диодов Шоттки позволяет снизить это значение до 0,2—0,4 вольт, а если сделать активный выпрямитель и того не останется
|
|
|
|
|
Mar 20 2011, 12:34
|

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

|
На ТТ у меня диод германиевый (старый советский Д220), в выпрямителе - кремниевые - 1N4007. Насчет активного выпрямителя - была мысль, но схемы не нашел  . Одни абстрактные размышления на тему попадались. Из которых схему трудно сделать. Мне, по крайней мере. Не подкинете ли схемку? Хотя я решил мерить амплитуду и делить ее на корень из 2 - как в букваре. Среднее арифметическое сильно "бегает" (писал выше), кольцевой буфер на 200 значений не спас, больше делать не могу - килобайта памяти в меге 8 не хватает  . Не вешать же туда SRAM на 64 КБ  ... Среднеквадратичное бегает меньше, но дает завышенные результаты - почти в 2 раза (при 230 на входе показывает 380-400  ). Я, конечно, могу подогнать коэффициентом, но мне интересно - почему идет завышение? Может потому, что диод на входе пол-периода режет и надо сперва делить, потом поднимать уровень ОУ, а в микрокоде смещать обратно? А вчера проектик нарыл - берет 1000 отсчетов, меряет по ним максимум и делит на коэффициент. Правда не знаю, как такой подход с т.з. теории. К мощности пока не приступал. Дай Бог с напряжением и током управиться  .
Сообщение отредактировал hd44780 - Mar 20 2011, 12:48
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 21 2011, 06:27
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 20-01-11
Из: Махачкала
Пользователь №: 62 364

|
Добрый день всем. Хочу сделать подобное. На мк ATMEGA128 построить вольтметр/ваттметр. Выводить на 3 семисегментных элемента. Подскажите где посмотреть. Если кто делал, напишите, пожалуйста, на azizcheg@gmail.com.
|
|
|
|
|
Mar 21 2011, 08:25
|

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

|
Я пока в процессе... Долбаное напряжение померить не могу ... Постоянку миллион раз мерил - с датчиков давления/влажности, БП делал со встроенным вольтметром - с первого раза оживало. А тут - уже неделю парюсь... Вроде все понятно, а ни фига не получается  . 3-х фазный вольтметр переменного тока - http://www.embed.com.ua/raznoe/tryohfaznyi...remennogo-toka/Как раз с 7 сегм индикатором. Правда Mega48. А зачем тебе 128 мега? Ваттметр на Mega8 - http://radiokot.ru/circuit/digital/measure/23/http://www.radiokot.ru/forum/viewtopic.php?f=25&t=25937Только ток шунтами мерить я очень не люблю. Конечно, дешевле ТТ во много раз, но и проблем полно сопутствующих.
Сообщение отредактировал hd44780 - Mar 21 2011, 08:45
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 21 2011, 09:15
|
Местный
  
Группа: Свой
Сообщений: 302
Регистрация: 24-07-06
Из: Донецк, Украина
Пользователь №: 19 042

|
Цитата(hd44780 @ Mar 21 2011, 12:25)  Я пока в процессе... Долбаное напряжение померить не могу ... Постоянку миллион раз мерил - с датчиков давления/влажности, БП делал со встроенным вольтметром - с первого раза оживало. А тут - уже неделю парюсь... Вроде все понятно, а ни фига не получается ...skipped... Мне непонятно, зачем вообще диоды ставить и иметь головную боль из-за их нелинейности? Погасить на делителе до приемлемой величины и сместить положительным напряжением до нуля посередине. И АЦПируйтесь наздоровье. Кстаати, у германиевых диодов ВАХ от температуры сильно зависит.
|
|
|
|
|
Mar 21 2011, 10:11
|
Местный
  
Группа: Свой
Сообщений: 302
Регистрация: 24-07-06
Из: Донецк, Украина
Пользователь №: 19 042

|
Цитата(hd44780 @ Mar 21 2011, 13:48)  Пока только для комнатной температуры. Пока алгоритмы не обкатаю. Потом сделаю активный делитель на ОУ со смещением. Диод по напряжению - кремниевый, из диодного моста (схема в первом посте). Или такая схема плоха? Посмотрите прямую ветвь ВАХ Ваших диодов. Диод открывается при напряжении >0,8В (? - склероз) и имеет очень большую нелинейность. Таким образом, при малых напряжениях Вы получите сверхпогрешность. А зачем вообще ставить ОУ? С трансформатора и так достаточно большое напряжение
|
|
|
|
|
Mar 21 2011, 10:48
|

Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 8-12-09
Пользователь №: 54 138

|
Цитата(ASZ @ Mar 21 2011, 12:11)  А зачем вообще ставить ОУ? С трансформатора и так достаточно большое напряжение  На ОУ собирается "прецизионный выпрямитель". Все уже давно придумано до (для) нас Можно, в принципе, засемплировать синусоиду, проинтегрировать и посчитать среднеквадратичное значение, но аналоговая техника справится с этим быстрее и точнее. Гораздо проще мерять постоянное напряжение. С ВЧ помехами, опять-же программно бороться будет не просто. Ну, это все конечно, если мы хотим иметь прибор, а не коробочку с лампочками, которая будет показывать значения в попугайчиках PS:Ну, уж если есть желание решить задачу исключительно программно, то это очень интересная и объемная тема для обсуждения.
Сообщение отредактировал nk@ - Mar 21 2011, 10:51
|
|
|
|
|
Mar 21 2011, 12:13
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 14-03-09
Пользователь №: 46 084

|
Занимался подобной задачей. Для развязки от сети использовал схему из книги Полупроводниковая схемотехника У. Тице и К. Шенк, страница 469. измерение делал 1 раз в миллисекунду. Синхронизировал начало измерений с переходом синуса через ноль. Измерял 1 полный период. по прерыванию от таймера запускал преобразование АЦП, потом USUM=(ADCW>>2)*(ADCW>>2)+USUM; и по следующем переходе через 0 подсчитывал RESULT=sqrt(USUM/N); Задача точности остро не стояла. реально пришлось увеличить количество периодов измерения до 10. Погрешность измерений примерно +-1В. Тестировал эту схему в диапазоне температур от 20 до 55 градусов и напряжений 150-230В. заметил, что оба оптрона должны иметь одну температуру - находится рядом, иначе точность теряется.
Но это было давно, сейчас вопрос возник и чтоб не создавать новую тему решил написать здесь.
Кто знает, какой минимальный уровень напряжение может быть на входе опорного напряжения АЦП меги16. В даташите молчат, может кто-то подскажет ответ?
|
|
|
|
|
Mar 21 2011, 14:44
|

Местный
  
Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040

|
Цитата(hd44780 @ Mar 20 2011, 15:34)  Среднее арифметическое сильно "бегает" (писал выше), кольцевой буфер на 200 значений не спас, больше делать не могу - килобайта памяти в меге 8 не хватает  . Не вешать же туда SRAM на 64 КБ  ... Мнэээ, а float у Вас сколько битов? Не то если по 32 - то как два буфера (напряжение и ток) 200 * 2 * 4 влезло в 1 килобайт? С сишным компилятором и один, я думаю, не влезет... А если всё-таки влезло 200 значений, то какой же должен быть разброс, болтанка в 10 вольт при таком раскладе даст изменение в результате только на 5 сотых...
|
|
|
|
|
Mar 21 2011, 16:32
|

Местный
  
Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040

|
Цитата(hd44780 @ Mar 21 2011, 18:35)  В буфер я клал 8-битовые значения с АЦП. 2 буфера - по 200 значений на напряжение и ток. Мож где ошибся в дальнейших обсчетах... Хз... Я, конечно, не спец, но если задаться интервалом в 400 вольт, да поделить этот интервал на 256 (8-битовые отсчёты), то на один бит придётся около 1.5 вольта, как-то так... И чего вы таки хотите? Для более-менее приличных результатов, по-моему, можно что-то типа оверсэмплинга применить, например 64 восьмибитных замера сложить, результат поделить на 8 (получив "одиннадцатибитный" результат), далее всё же организовать кольцевой буфер на 16 "одиннадцатибитных" значений, и, добавив очередное, считать сумму значений из буфера и поделить на 16.
|
|
|
|
|
Mar 21 2011, 16:59
|

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

|
С буфером получается вот что:
// Для сумм //volatile dword summU; volatile byte arrayU[200]; // Кол-во преобразований напряжения и тока volatile word count_U=0;
................
// ADC interrupt service routine interrupt [ADC_INT] void adc_isr(void) { word adc_data=ADCW;
adc_data>>=2; arrayU[count_U]=adc_data&0xFF; count_U++; if (count_U>=200) count_U=0; } // adc_isr
.......... // Обрабока f_sqr_summU=0.0; for (i=0;i<200;i++) { f_sqr_summU+=(float)arrayU[i]; } // for sprintf (buffer, "A=%.2f ", f_sqr_summU); hd44780_puts_xy ( 0, 0, buffer );
f_sqr_summU/=200;
// Uацп=ср*5/1024 f_sqr_summU=f_sqr_summU*5.0/1024; sprintf (buffer, "B=%.2f ", f_sqr_summU); hd44780_puts_xy ( 8, 0, buffer );
На дисплее: A=19360 B=0.47
Т.е. сумма значений в буфере - 19360 (примерно, оно меняется все время) U на входе АЦП = 0.47в, хотя на самом деле там 2.00-2.50в
Сообщение отредактировал hd44780 - Mar 21 2011, 17:00
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 22 2011, 07:11
|

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

|
К вопросу о тех кольцевых буферах. С какой частотой должны идти выборки в эти буфера? Сейчас у меня АЦП тактируется 125 кГц. Сколько там получится сэмплов в секунду я посчитать пока не удосужился (в доке как-то мутно про это написано  ), но, думается 100KSPS наберется. 1 сэмпл за 10 мкс. Т.е. 200 байт буфера полностью обновятся за 2 мс. Т.е. весь буфер не вмещает даже полпериода 50 герцового сигнала. Это нормально? Или надо понижать частоту выборки? e_one, не знаю. Посмотрел я схему, не понял ее.
Сообщение отредактировал hd44780 - Mar 22 2011, 07:15
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 22 2011, 07:38
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 20-01-11
Из: Махачкала
Пользователь №: 62 364

|
Цитата(hd44780 @ Mar 21 2011, 11:25)  128 мега потому, что они есть на фирме, а остальных нет вроде. И вообще я думал и ваттметр и вольтметр объединить в одном устройстве. А вольты выводить или ватты - переключается каким-нибудь тумблером. Возможна ли такая реализация?
Сообщение отредактировал azizcheg - Mar 22 2011, 07:41
|
|
|
|
|
Mar 22 2011, 08:02
|

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

|
Цитата(azizcheg @ Mar 22 2011, 09:38)  128 мега потому, что они есть на фирме, а остальных нет вроде. И вообще я думал и ваттметр и вольтметр объединить в одном устройстве. А вольты выводить или ватты - переключается каким-нибудь тумблером. Возможна ли такая реализация? Возможна. В принципе, все равно, какая там мега. Главное, чтобы АЦП был. Но он у любой меги есть. Идея простая - меряете всегда и все. А выводите на дисплей что-то одно. Лично у меня пока проблемы с измерениями  . Напряжение вроде нормально показывает, но все время "бегает"...
Сообщение отредактировал hd44780 - Mar 22 2011, 08:07
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 22 2011, 08:13
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 20-01-11
Из: Махачкала
Пользователь №: 62 364

|
Цитата(hd44780 @ Mar 22 2011, 11:02)  Лично у меня пока проблемы с измерениями  . Напряжение вроде нормально показывает, но все время "бегает"... Что значит бегает? Как вообще, в принципе осуществляется измерение этого напряжения(тока)? Чуть дайте теории пожалуйста :-)
|
|
|
|
|
Mar 22 2011, 08:34
|

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

|
Цитата(azizcheg @ Mar 22 2011, 10:13)  Что значит бегает? Как вообще, в принципе осуществляется измерение этого напряжения(тока)? Чуть дайте теории пожалуйста :-) Схема в первом посте темы. Мега там не нарисована, только моя измерительная часть. Программная часть у меня такая (наиболее удачный вариант на текущий момент). АЦП работает на 125кГц. Обработчик АЦП суммирует все получаемые отсчеты и считает их кол-во. Как насчитает 1000 штук - останов АЦП (по флагу, в главной программе). Далее считает среднее арифметическое этих отсчетов. По нему вычисляется напряжение на входе АЦП (формула из ДШ на проц). И умножается на коэффициент делителя (в моем случае это коэф транса*коэф деления потенциометра). Это есть напряжение в сети. "Бегает" - меняется в небольших пределах. Я "на глаз" наблюдал диапазон примерно 210..230в. Мультиметр показывает где-то 230. Наверное, можно втупую брать максимум, но я не уверен. Для тока алгоритм такой же, только последний коэффициент другой, он зависит от того, как вы ток меряете. Если шунтом - просто закон ома. Если ТТ, то иначе... Для мощности посложнее. Поэтому и хочется не коэффициентами подгонять, а понять, что там происходит.
Сообщение отредактировал hd44780 - Mar 22 2011, 08:36
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 22 2011, 08:52
|

Местный
  
Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040

|
Цитата(hd44780 @ Mar 22 2011, 10:11)  К вопросу о тех кольцевых буферах. С какой частотой должны идти выборки в эти буфера? Сейчас у меня АЦП тактируется 125 кГц. Сколько там получится сэмплов в секунду я посчитать пока не удосужился (в доке как-то мутно про это написано  ), но, думается 100KSPS наберется. 1 сэмпл за 10 мкс. Т.е. 200 байт буфера полностью обновятся за 2 мс. Т.е. весь буфер не вмещает даже полпериода 50 герцового сигнала. Это нормально? Или надо понижать частоту выборки? Семён Семёныч! В кольцевые буферы я предлагал складывать уже вычисленные значения напряжения и тока  Я думаю, вполне хватит по 16 значений тока и напряжения. Чтобы не было неоднозначностей, набросаю код. CODE #define MY_BUFFER_SIZE 16
float get_voltage( const float mesuredVoltage ) { static float voltage[MY_BUFFER_SIZE] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; static int pos = 0; int i; float result = 0;
// voltage[pos++] = mesuredVoltage; // if ( pos >= MY_BUFFER_SIZE ) pos = 0; // for ( i = 0; i < MY_BUFFER_SIZE; i++ ) { // result += voltage[i]; } // return result / MY_BUFFER_SIZE; }
И такую же фигню для тока
Сообщение отредактировал RabidRabbit - Mar 22 2011, 10:05
|
|
|
|
|
Mar 22 2011, 09:12
|
Местный
  
Группа: Свой
Сообщений: 302
Регистрация: 24-07-06
Из: Донецк, Украина
Пользователь №: 19 042

|
Цитата(hd44780 @ Mar 21 2011, 13:34)  Не понял  ... Я ж получаю полож. полуволну с верхнего входа моста .... Зачем ее смещать? Если б была 2-я вторичка, там были бы обе полуволны. А зачем вообще выпрямлять? Делителем уменьшаете ПЕРЕМЕННОЕ напряжение трансформатора напряжения до 2/3 максимального входного АЦП и смещаете его до середины шкалы. Разность Umax-Umin=Ua дает Вам амплитудное значение измеренного напряжения. Действующее значение для синусоиды U=0,707Ua. Этим избавляетесь от всяких нелинейностей от диодов и значительно упрощаете схему (3 резистора!). Это же касается и цепи тока. Лично считаю, что усложнять схему ради упрощения программы - дурной тон.
|
|
|
|
|
Mar 22 2011, 09:28
|

Местный
  
Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040

|
Цитата(hd44780 @ Mar 22 2011, 11:34)  АЦП работает на 125кГц. Обработчик АЦП суммирует все получаемые отсчеты и считает их кол-во. Как насчитает 1000 штук - останов АЦП (по флагу, в главной программе). Далее считает среднее арифметическое этих отсчетов. По нему вычисляется напряжение на входе АЦП (формула из ДШ на проц). И умножается на коэффициент делителя (в моем случае это коэф транса*коэф деления потенциометра). Это есть напряжение в сети. Как-то это по-моему не очень правильно. На мой взгляд, лучше зарядить таймер на частоту 1000 Гц, в обработчике прерывания запускать одиночное преобразование, дожидаться его завершения и результат приплюсовывать к накопителю. 100 отсчётов АЦП в таком случае перекроют 5 периодов частоты 50 Гц, что снимает необходимость ловить переход через 0 (я надеюсь, у Вас мега от кварца тактируется). По сумме этих 100 отсчётов (ну или 200, лишь бы на 20 делилось) можно вычислить напряжение. Скакать не должно
|
|
|
|
|
Mar 22 2011, 09:45
|

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

|
RabidRabbit, спасибо. я так не пытался  . Попробую. Если, конечно потянет считать float значения прямо в прерывании. Но можно и целочисленно сделать, в умноженных на 1000, например. Цитата(RabidRabbit @ Mar 22 2011, 11:28)  лучше зарядить таймер на частоту 1000 Гц, в обработчике прерывания запускать одиночное преобразование, дожидаться его завершения и результат приплюсовывать к накопителю. 100 отсчётов АЦП в таком случае перекроют 5 периодов частоты 50 Гц, что снимает необходимость ловить переход через 0 (я надеюсь, у Вас мега от кварца тактируется). По сумме этих 100 отсчётов (ну или 200, лишь бы на 20 делилось) можно вычислить напряжение. Скакать не должно  Есть у меня такая мысль. Наверное сделаю. Сейчас мега тактируется от внутренних 8MHz, просто ног не хватает  . На PB (там, где кварц) у меня ШД LCD сидит. Можно поставить и 16-ю мегу ... Цитата(ASZ @ Mar 22 2011, 11:12)  А зачем вообще выпрямлять? Делителем уменьшаете ПЕРЕМЕННОЕ напряжение трансформатора напряжения до 2/3 максимального входного АЦП и смещаете его до середины шкалы. Разность Umax-Umin=Ua дает Вам амплитудное значение измеренного напряжения. Действующее значение для синусоиды U=0,707Ua. А можно потенциометр включить ко вторичке параллельно мосту, а напряжение на движке смещать?
Сообщение отредактировал hd44780 - Mar 22 2011, 09:54
Эскизы прикрепленных изображений
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 22 2011, 10:03
|

Местный
  
Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040

|
Цитата(hd44780 @ Mar 22 2011, 12:45)  Попробую. Если, конечно потянет считать float значения прямо в прерывании. Но можно и целочисленно сделать, в умноженных на 1000, например. Вы правильно понимаете - не нужны float'ы в прерывании. В прерывании, например, можно суммировать целочисленные значения от АЦП (как есть, не надо их ни на что умножать, только в случае 8-битных значений для 100 замеров хватит 16-битной переменной, а для 10-битных значений уже надо 24-битную или 32-битную). Просуммировали 100 значений - скопировать в какую-нибудь глобальную переменную, увеличить другую глобальную переменную на 1, чтобы просигналить основной задаче о доступности нового результата, и снова суммировать сотню значений  Если я недоступно излагаю - спрашивайте в личке, например
|
|
|
|
|
Mar 22 2011, 10:24
|

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

|
Цитата(RabidRabbit @ Mar 22 2011, 12:03)  Если я недоступно излагаю - спрашивайте в личке, например  Да нет, все понятно. Спасибо. Напишу, проверю вечером. Я на работе, железо дома  . У меня отсчеты 10-битные, суммирую в беззнаковый 32 бит.
Сообщение отредактировал hd44780 - Mar 22 2011, 10:26
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 22 2011, 12:53
|
Местный
  
Группа: Свой
Сообщений: 302
Регистрация: 24-07-06
Из: Донецк, Украина
Пользователь №: 19 042

|
Цитата(hd44780 @ Mar 22 2011, 12:45)  ...skipped... А можно потенциометр включить ко вторичке параллельно мосту, а напряжение на движке смещать? Можно, если постоянное напряжение после моста НИКАК не связано с измерительной схемой.
|
|
|
|
|
Mar 23 2011, 07:30
|

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

|
Цитата(MaslovVG @ Mar 22 2011, 22:20)  Измерять лучше средне квадратичное значение и тока и напряжения и мощности без всяких выпрямителей. При этом можно измерять несинусоидальные величины. Я знаю, что среднеквадратичное лучше  . Но через выпрямитель/диод фигня получается  . Пытался. Сейчас как раз занимаюсь сборкой измерительной цепи без выпрямителя  . Жаль, что только по вечерам ...
Сообщение отредактировал hd44780 - Mar 23 2011, 07:32
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 23 2011, 09:39
|

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

|
Без выпрямителя я вот такое вижу - схема. Вместо 2-го транса можно взять 2-ю вторичку. Как сделать то же на одной обмотке, при наличии средней точки - не знаю  . Если кто знает - подскажите плиз.
Сообщение отредактировал hd44780 - Mar 23 2011, 10:42
Эскизы прикрепленных изображений
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 23 2011, 15:05
|

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

|
Цитата(Tanya @ Mar 23 2011, 16:22)  Я имела в виду схему сдвига уровня для попадания в диапазон АЦП. Понял. Мож и сделаю  .. Схема нормальная? Для тока рисовать не стал. Кстати - БП (мост) переделал. Работает. До ОУ пока руки не дошли..
Сообщение отредактировал hd44780 - Mar 23 2011, 15:22
Эскизы прикрепленных изображений
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 23 2011, 19:18
|

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

|
Цитата(Tanya @ Mar 23 2011, 18:59)  Схема нормальная. Только после выпрямителя не ставьте конденсатор с большой емкостью. А если есть еще обмотка, то лучше оттуда сигнал брать. После моста электролит 1000mF. Второй обмотки нету. Могу 2-й транс поставить, как я нарисовал. Мне кстати с ним понятнее  Цитата(Stanislav_S @ Mar 23 2011, 19:04)  Что то схемы измерения у вас больно альтернативные  Для начала выкинте все ваши подстроечники и сформируйте для начала нормальную "виртуальную" землю, затем правильно постройте с каскады усиления на ОУ, если конечно вы не хотите показометр сделать  Схема из поста 46 - взято из AVR465. Ее же вариант на ОУ - оттуда же. Только слегка упрощенный. Без переключаемого Ку. По напряжению он не нужен.
Сообщение отредактировал hd44780 - Mar 23 2011, 18:49
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 24 2011, 09:25
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(hd44780 @ Mar 23 2011, 22:18)  После моста электролит 1000mF. Второй обмотки нету. Могу 2-й транс поставить, как я нарисовал. Мне кстати с ним понятнее  Нужно считать. Вот посчитайте форму тока во вторичной обмотке. Будут импульсы на вершине синусоиды. Если умножить на сопротивление обмотки, получится ошибка напряжения, которое измеряется. При этом не нужно забывать, что эти самые вершинки вносят основной вклад в сумму квадратов. Цитата(hd44780 @ Mar 24 2011, 12:05)  Stanislav_S, а зачем виртуальная земля? Для точности измерений? Просто не сталкивался как-то  . Это буфер на ОУ, который держит половину питания. К нему можно обмотки подключать.
|
|
|
|
|
Mar 24 2011, 10:17
|

извечный пессимист
    
Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125

|
Цитата(hd44780 @ Mar 24 2011, 13:05)  Stanislav_S, а зачем виртуальная земля? Для точности измерений? Просто не сталкивался как-то  . Да именно так, тем более что ее можно завести на АЦП (хотя можно и не заводить), таким образом вы сможете ловить переходы через ноль програмно, ну и точность повысится.
--------------------
Slaves are those of this world Given freedom to lay chains upon The Master The wolf is no longer free Release the chains and come for me
|
|
|
|
|
Mar 24 2011, 10:19
|

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

|
Цитата(Tanya @ Mar 24 2011, 11:25)  Это буфер на ОУ, который держит половину питания. К нему можно обмотки подключать. Кажется, начинаю что-то понимать.... Это чтобы сместить синусоиду на 2.5в (у меня питание 5в)? А чем это отличается от того ОУ с потенциометром? Подскажите, где об этом почитать? Гуглом искал по фразе "виртуальная земля", нашел только про потенциал минусового входа ОУ в инв. усилителе ... Есть Хоровиц-Хилл, Пейтон А.Дж., Волш В "Аналоговая техника на ОУ". Бегло проглядел, не заметил Спасибо.
Сообщение отредактировал hd44780 - Mar 24 2011, 10:23
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 24 2011, 10:38
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(hd44780 @ Mar 24 2011, 13:19)  А чем это отличается от того ОУ с потенциометром? Только тем, что только один ОУ, если масштабировать не нужно. А еще тем, что эта искусственная средняя точка одна на несколько каналов. Цитата(Stanislav_S @ Mar 24 2011, 13:28)  Вот так это выглядет, А зачем такие сложности - C8... Можно же один резистор с обмотки на инвертирующий вход... Второй конец и искусственную среднюю точку - на неинвертирующий. Или я чего-то недопонимаю?
|
|
|
|
|
Mar 24 2011, 11:38
|

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

|
Мне так видится - схема. Со второй вторичкой/трансом мне все-таки больше нравится. Вместо R5 можно поставить тот буферный ОУ. Оба ОУ д.б. либо оба инвертирующие, либо оба неинвертирующие. Мне там еще сдвиг фаз напряжение-ток анализировать. Для измерения мощности.
Сообщение отредактировал hd44780 - Mar 24 2011, 11:42
Эскизы прикрепленных изображений
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 24 2011, 12:21
|

извечный пессимист
    
Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125

|
Цитата(Tanya @ Mar 24 2011, 15:26)  А с напряжением... брать с нагруженной на выпрямитель с конденсатором обмотки... не стоит, наверное. Кроме всего прочего... Ваша схема не годится для полноразмахного выхода, так как входы будут слишком сильно раскачиваться. Уж лучше и в этом случае инвертирующую схему... даже с искусственной средней точкой. Сигнал будет несимметричный, но не сильно уж. На неинвертирующий вход можно подать немного меньше половины... Или уж ИУ с базой на средней точке... Кто на первой базе....? То что не стоит брать с обмотки питания это понятно, но в данном случае изделие серийное (тираж очень большой), поэтому заказчик на дополнительный измерительный трансформатор не пошел, днег экономит  . Для полного размаха не годится конечно, но! никто не мешает пойти двумя путями, поставить rail to rail, по входу и по выходу, либо увеличить коэфициент деления входного аттенюатора, а для каскада на ОУ ввести небольшое усиление. Хотя конечно инвертирующую схему никто не отменял.
--------------------
Slaves are those of this world Given freedom to lay chains upon The Master The wolf is no longer free Release the chains and come for me
|
|
|
|
|
Mar 24 2011, 12:25
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(Stanislav_S @ Mar 24 2011, 15:21)  То что не стоит брать с обмотки питания это понятно, но в данном случае изделие серийное Кто это сказал? Автор в самом начале произнес - "Вот делаю такую штуку - сабж. Делается для себя,...." Лучше всего... - поставить инструментальный усилитель и прекратить думать о пустяках...
|
|
|
|
|
Mar 25 2011, 15:12
|
Местный
  
Группа: Участник
Сообщений: 245
Регистрация: 15-08-07
Пользователь №: 29 795

|
Извините. А почему нельзя проще?
Если судить по последней преведенной схеме, то у автора есть дополнительные обмотки. Напряжение "Напряжения" при необходимости можно поделить, прицепив еще резистор, паралельно конденсатору. Далее пусть думает проц. Это его головная боль. И совсем неясно, для чего выпрямлять сигнал физически?
|
|
|
|
|
Mar 30 2011, 13:53
|
Участник

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

|
Цитата(Sirko @ Mar 25 2011, 17:12)  Извините. А почему нельзя проще? +1. Я сейчас делаю стабилизатор и для меня важно ловить момент перехода синусоиды через 0. Поэтому я взял просто измерительный транс, сместил его выход вверх на 2,5В и пустил на вход АЦП. Семплирую 255 раз за полпериода синусоиды, что в итоге приводит к точности в 1В, чего мне вполне достаточно. АЦП запускаю единичное по прерываю таймера. В выходном потоке данных из АЦП ищу min и max потом получаю амплитуду (max-min), суммирую значения, ищу среднее и получаю напряжение. Если результат АПЦ равен (max-min)/2 - то это переход через ноль.
|
|
|
|
|
Mar 30 2011, 18:34
|

Частый гость
 
Группа: Участник
Сообщений: 78
Регистрация: 8-12-09
Пользователь №: 54 138

|
Цитата(SHUR1K @ Mar 30 2011, 16:53)  ловить момент перехода синусоиды через 0. А не проще использовать аналоговый компаратор? Про него как-то все забыли  Можно получить прерывание при переходе через 0.
|
|
|
|
|
Mar 31 2011, 04:49
|
Участник

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

|
Цитата(nk@ @ Mar 30 2011, 20:34)  А не проще использовать аналоговый компаратор? Про него как-то все забыли  Можно получить прерывание при переходе через 0. Но ведь один if поставить проще, чем даташит открыть :-) Но абсолютно с Вами согласен, более правильно использовать компаратор.
|
|
|
|
|
Mar 31 2011, 07:15
|

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

|
Цитата(SHUR1K @ Mar 30 2011, 15:53)  ловить момент перехода синусоиды через 0. Поэтому я взял просто измерительный транс, сместил его выход вверх на 2,5В и пустил на вход АЦП. Семплирую 255 раз за полпериода синусоиды, что в итоге приводит к точности в 1В, чего мне вполне достаточно. АЦП запускаю единичное по прерываю таймера. В выходном потоке данных из АЦП ищу min и max потом получаю амплитуду (max-min), суммирую значения, ищу среднее и получаю напряжение. Если результат АПЦ равен (max-min)/2 - то это переход через ноль. У меня похожий алгоритм. Но пока до отлова перехода синусоиды через ноль (2.5 в при смещенном сигнале) пока не добрался - работы навалили, не успел реализовать  ... Но усредненную и поднятую переменку нормально меряет - показывает 3.2 в (при смещении 2 в). Вольтметр DC из мультиметра показывает 3.12в и это без всяких калибровок и коррекций. И опорой в лоб от VCC. Программное убирание смещения пока не сделал. Цитата(nk@ @ Mar 30 2011, 20:34)  А не проще использовать аналоговый компаратор? А это идея  . Только сравнивать с Uсмещ. Надо будет попробовать. Хоть ради интереса. Цитата(НЕХ @ Mar 31 2011, 07:23)  А не проще ли поставить ADE7755 Проще. Еще проще поставить ADE7753, AD636, AD637 или что-то типа того. Но лично у меня принцип - как можно реже использовать разные спец. микросхемы. Тем более, что здесь алгоритмы не бог весть какие сложные. Цитата(НЕХ @ Mar 31 2011, 07:23)  .... для оценки активной мощности. и измерять честное действующее значение... Я собираюсь измерять все 3 мощности S, P, Q. При анализе сдвига фаз это вполне реализуемо. По-моему. Действующее - у меня меряется среднеквадратическое (True RMS, если не ошибаюсь) - те самые 3.2в. Что меряет мой мультиметр - не знаю  .
Сообщение отредактировал hd44780 - Mar 31 2011, 07:24
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 31 2011, 10:53
|

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

|
Цитата(777777 @ Mar 31 2011, 10:03)  Наличие диодов сразу говорит о том, что достаточную точность вы не получите. У меня собрана схема из поста 69 - http://electronix.ru/forum/index.php?showt...st&p=904668Там нету никаких диодов. Только в БП  . Цитата(777777 @ Mar 31 2011, 10:03)  Меня, вообще, всегда удивляло, почему народ так не любит отрицательные напряжения. Их не народ не любит, а АЦП. Ну не меряет АЦП микроконтроллера отрицательные напряжения. А мне проще сместить, чем искать двуполярный АЦП. Цитата(777777 @ Mar 31 2011, 10:03)  Кто мешает непрерывно оцифровывать мгновенные значения тока и напряжения, перемножать их и суммировать? Я так и делаю. Мгновенные замеры раз в 1 мс - 20 раз на период.
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Mar 31 2011, 11:54
|

Профессионал
    
Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357

|
Цитата(hd44780 @ Mar 31 2011, 14:53)  Ну это совсем другое дело! Цитата(hd44780 @ Mar 31 2011, 14:53)  Их не народ не любит, а АЦП. Ну не меряет АЦП микроконтроллера отрицательные напряжения. Да ладно, в некоторых АВРках есть псевдодифференциальные входы. Тогда тебе даже операционники не понадобятся. Цитата(hd44780 @ Mar 31 2011, 14:53)  Я так и делаю. Мгновенные замеры раз в 1 мс - 20 раз на период. Ну и как? Похоже на правду?
|
|
|
|
|
Mar 31 2011, 12:30
|

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

|
Цитата(777777 @ Mar 31 2011, 13:54)  Да ладно, в некоторых АВРках есть псевдодифференциальные входы. Тогда тебе даже операционники не понадобятся. Дифф входы работоспособны только в SMD корпусах. Я их терпеть не могу  и стараюсь не применять. Цитата(777777 @ Mar 31 2011, 13:54)  Ну и как? Похоже на правду? 1-й блин - замер поднятой переменки (на входе АЦП) у меня показал 3.2в, вольтметр - 3.12в. Правда не знаю, корректно ли сравнивать их так непосредственно.
Сообщение отредактировал hd44780 - Mar 31 2011, 12:34
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
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, 06:24
|

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

|
У меня и подстроечник и коэффициенты в EEPROM  . Можно и подстроечник убрать, но тогда нужна вторичка вольт на 1-2 переменки. У меня пока такой нету  . Когда алгоритмы отлажу, может намотаю ее. Она вроде небольшая. А сейчас у меня с обмотки измерительного транса прет 13в действующих. Транс обычный, от БП какого-то советского микрокалькулятора. Калькулятор давно помер, а транс остался  . Пихать их в ОУ, работающий от 5в мне как-то боязно. Лучше я подстроечником перестрахуюсь ...
Сообщение отредактировал hd44780 - Apr 1 2011, 06:30
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
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, 13:03
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(SHUR1K @ Apr 1 2011, 16:46)  16x16 и 32х32 - это совсем другое. Умножение на число, которое является степенью двойки - это просто сдвиг влево на соответствующие число позиций (степень двойки). А Вы попробуйте умножить на 11 или 13 и посмотрите как вырастет hex Ну и на сколько? Код ;************************************************* ;* ;;/умножение Беззнаковых 16х16;;* * ;************************************************* Mul16x16: mul temp,rab mov R13,LoMul ;| здесь AH*BH mov R14,MeMul mul temp1,rab1 mov R11,LoMul ;| здесь AL*BL mov R12,MeMul mul temp,rab1 ;| здесь AH*BL add R12,LoMul adc R13,MeMul adc R14,HiMUL mul temp1,rab ;| здесь BH*AL add R12,LoMul adc R13,MeMul adc R14,HiMUL ret
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
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, а это уже дробное число, вот и растет код безбожно.
|
|
|
|
|
Apr 3 2011, 15:30
|

извечный пессимист
    
Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125

|
Цитата(SHUR1K @ Apr 3 2011, 18:35)  Нет, не с компилятором :-). Просто если использовать в одном выражении умножении и деление, ну например *3/2, то получается *1.5, а это уже дробное число, вот и растет код безбожно. ?? мы говорили о целочисленном делении, разве нет? Если вы говорите о плавучке, тогда да, код раздувается на байт 800 примерно, но! Мы ведь говорили о целых числах
--------------------
Slaves are those of this world Given freedom to lay chains upon The Master The wolf is no longer free Release the chains and come for me
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|