|
измерение среднеквадратичного напряжения сети |
|
|
|
Jun 21 2010, 19:05
|
Местный
  
Группа: Свой
Сообщений: 388
Регистрация: 27-02-06
Из: Москва
Пользователь №: 14 759

|
Вопрос может быть не совсем в теме, но... Интересует действующее значение в каждом периоде. В mega88 через делитель 1180kOm и 3.3kOm завел напряжение сети. Опора внутренняя 1.1 В Чтобы просматривать обе полуволны пропустил через диодный мост. Знаю, что можно завести сразу обе на разные входы АЦП чтобы не было погрешностей вносимых мостом, но вопрос не в этом. В приложенном файле выведено несколько замеров. Там первая строка-количество отсчетов, второй строкой массив замеров (полученные от АЦП). Третьей-полученный результат. Результат-это сумма квадратов отсчетов, поделенная на количество отсчетов, и изьятие корня квадратного. Теперь вопросы. -не слишком ли большой разброс полученного значения? -как его привести к нормальным величинам? Читал что есть 2 варианта. Один-непосредственно полученные от АЦП данные приводить перед вычислениями. И второй (получше) приводить результат. Ну и вообще послушал бы советы бывалых. Спасибо
|
|
|
|
|
 |
Ответов
|
Jun 26 2010, 02:52
|

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

|
В общем это, чтобы прекратить бессмысленные споры вот C-модель способа (реализовано не все, - вчастности фильтрации нет, т.к. стартуем с Fi=0): CODE #include "math.h"
#define TRUE 1 #define FALSE 0 #define COUNT(some_array) ( sizeof(some_array)/sizeof(some_array[0]) ) #define M_PI 3.14159265358979323846
/******************************************************* * Method related * *******************************************************/ typedef struct tagV_CHANNEL { float Sum; float K; float Vdet; float LastSample; int nSamples; int Active;
} V_CHANNEL, *PV_CHANNEL;
V_CHANNEL chanA;
void vChanPrepare(PV_CHANNEL pChan) { pChan->LastSample = -1; pChan->nSamples = 0; pChan->Active = FALSE; pChan->Vdet = 0; pChan->Sum = 0; }
void vChanUpdate( PV_CHANNEL pChan, float CurrentSample ) { // try to detect start of the positive sample to activate integrator if (CurrentSample > 0 && pChan->LastSample <= 0) pChan->Active = TRUE;
if (pChan->Active) { pChan->nSamples += 1; pChan->Sum += CurrentSample;
// detect start of the negative sample if (CurrentSample <= 0 && pChan->LastSample > 0) { pChan->Active = FALSE; pChan->Vdet = pChan->Sum / pChan->nSamples / pChan->K; pChan->Sum = 0; pChan->nSamples = 0; }
}
pChan->LastSample = CurrentSample;
}
/******************************************************* * Signal simulation * *******************************************************/ float Vref[ 240 ];
void BuildReferenceSignal( float Vrms ) { for( int i = 0; i < COUNT( Vref ); i++) { Vref [ i ] = (Vrms / 0.707) * sin( 2 * M_PI * i / (COUNT( Vref) / 3) ); } }
/******************************************************* * ADC sampling simulation * *******************************************************/ void RunAlg(void) { vChanPrepare( &chanA );
// feed reference data in. for( int i = 0; i < COUNT( Vref); i++) vChanUpdate( &chanA, Vref[ i ] ); }
/******************************************************* * Does calibrating * * and then estimating error of the * * RMS calculation method w/o squares * *******************************************************/ int main(void) { float err;
printf("Building reference signal Vrms=220V\r\n"); BuildReferenceSignal( 220.0 ); printf("Calibrating...."); chanA.K = 1;
RunAlg();
chanA.K = chanA.Vdet / 220.0; printf("OK, K = Ves / Vref, K=%0.3f, Ves=%0.3f, Vref=%0.3f\r\n", chanA.K, chanA.Vdet, 220.0);
// now when K is calibrated, lets estimate method error on signals with diff rms (from 40V to 380V) for( float i = 40; i < 380; i += 2.5) { BuildReferenceSignal( (float)i );
RunAlg(); err = abs( chanA.Vdet - i) * 100 / i; // error in percent printf("Vref=%0.6fV, Vdet=%0.6fV, error - %0.6f%%\r\n", (float)i, chanA.Vdet, err ); }
printf("\r\nenjoy the simplicity, no squares no square root calculation, 0% RMS error ...\r\n");
return 0; }
А в атаче результат работы модели, если кому интересно. На чистом синусе - погрешность метода - 0%, при калибровке одной точкой. Ну а на "грязном" - можно проверить в модели, хватает ли точности метода под конкретную задачу.
Прикрепленные файлы
result.txt ( 7.85 килобайт )
Кол-во скачиваний: 87
|
|
|
|
Сообщений в этой теме
axalay измерение среднеквадратичного напряжения сети Jun 21 2010, 19:05 =GM= Для синуса с амплитудой 800, эффективное значение ... Jun 21 2010, 21:52 axalay Цитата(=GM= @ Jun 22 2010, 01:52) Для син... Jun 22 2010, 04:56 dimka76 Среднеквадратичное значение напряжения ЭТО
Вот и... Jun 22 2010, 06:37 Tanya Цитата(dimka76 @ Jun 22 2010, 10:37) Вот ... Jun 22 2010, 07:35  dimka76 Цитата(Tanya @ Jun 22 2010, 11:35) Интегр... Jun 22 2010, 08:06   Tanya Цитата(dimka76 @ Jun 22 2010, 12:06) Я же... Jun 22 2010, 08:09    axalay Поправте если я не прав.
у меня на АЦП 220 для из... Jun 22 2010, 15:18     Tanya Цитата(axalay @ Jun 22 2010, 19:18) Прост... Jun 22 2010, 15:52     rezident Цитата(axalay @ Jun 22 2010, 21:18) В мое... Jun 22 2010, 17:13      axalay Цитата(rezident @ Jun 22 2010, 21:13) Т.е... Jun 22 2010, 18:15       rezident Цитата(axalay @ Jun 23 2010, 00:15) Тока ... Jun 22 2010, 19:03 axalay Цитата(dimka76 @ Jun 22 2010, 10:37) Вот ... Jun 22 2010, 07:44  Tanya Цитата(axalay @ Jun 22 2010, 11:44) А охо... Jun 22 2010, 07:55 defunct Цитатаизмерение среднеквадратичного напряжения сет... Jun 23 2010, 23:19 777777 Цитата(defunct @ Jun 24 2010, 03:19) 4. в... Jun 25 2010, 08:26  defunct Цитата(777777 @ Jun 25 2010, 11:26) так к... Jun 25 2010, 12:59   777777 Цитата(defunct @ Jun 25 2010, 16:59) Прич... Jun 25 2010, 15:31    defunct Цитата(777777 @ Jun 25 2010, 18:31) Даже ... Jun 25 2010, 16:22     777777 Цитата(defunct @ Jun 25 2010, 20:22) Цита... Jun 28 2010, 05:23      defunct Цитата(777777 @ Jun 28 2010, 08:23) Если ... Jun 28 2010, 06:25       Tanya Цитата(defunct @ Jun 28 2010, 10:25) Согл... Jun 28 2010, 07:30        defunct Цитата(Tanya @ Jun 28 2010, 10:30) Мне во... Jun 28 2010, 07:44         Tanya Цитата(defunct @ Jun 28 2010, 11:44) Допу... Jun 28 2010, 07:54          defunct Цитата(Tanya @ Jun 28 2010, 10:54) Если н... Jun 29 2010, 13:00           Tanya Цитата(defunct @ Jun 29 2010, 17:00) 1. У... Jun 29 2010, 16:34            defunct Цитата(Tanya @ Jun 29 2010, 19:34) Так чт... Jun 30 2010, 12:22             akken Цитата(defunct @ Jun 30 2010, 15:22) И чт... Jun 30 2010, 13:02             Tanya Цитата(defunct @ Jun 30 2010, 16:22) И чт... Jun 30 2010, 14:08   GetSmart Цитата(defunct @ Jun 25 2010, 17:59) С кв... Jun 25 2010, 16:34    defunct Цитата(GetSmart @ Jun 25 2010, 19:34)
1 ... Jun 25 2010, 21:12     GetSmart Цитата(defunct @ Jun 26 2010, 02:12) А вс... Jun 26 2010, 02:55 Alex11 defunct, не вводите человека в заблуждение. То что... Jun 24 2010, 05:03 defunct Цитата(Alex11 @ Jun 24 2010, 08:03) defun... Jun 24 2010, 11:07 ARV можно не привязываться к началу периода сети: важн... Jun 25 2010, 08:50 Tanya Цитата(ARV @ Jun 25 2010, 12:50) проблема... Jun 25 2010, 12:42 axalay Цитата(ARV @ Jun 25 2010, 12:50) можно не... Jun 26 2010, 05:15
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|