Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



RMS вольтметр

Сообщений 1 страница 4 из 4

1

Вечер добрый.. Помогите решить проблему, на днях сгорел стабилизатор Forte SDC-5000VA , как показало вскрытие вышел из строя контроллер samsung s3f9454 и ключи на двигатель. как я понял контроллер выполняет функцию 2 канального rms вольтметра. может у кого есть наработки .. буду благодарен, очень надо.. очень большие скачки в сети до 260 , уже телек сгорел.. с ресом бороться невозможно, спасаюсь стабилизатором.

нашел исходник на с 3х фазный  мож кто поможет переделать под баском

Код:
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;    
}

Отредактировано Yuriy.pv (2011-12-03 18:36:26)

0

2

этот вольтметр, вообще то, пиковый

0

3

Сигнал подают через конденсатор на вход ADC0. Этот вход соединить к делителю напряжения состоящего из двух сопротивлений по 470 ком. Источник- http://elektronik-labor.de/AVR/AVR.html а именно http://elektronik-labor.de/AVR/Millivolt.html

0

4

Зачем стабилизатору RMS? Сделайте обычный среднеквадратичный на  делителе, диодном мостике и конденсаторе.

0