Пишу здесь, так как ориентируюсь на AVR.
Хочу померять напряжение переменного тока (сети) без выпрямления. Можно применить RMS, как мне посоветовали или другой способ - в одном и том же полупериоде меряем наряжение 2 раза, с изветным углом сдвига между ними. Зная угол и результаты измерений, можно посчитать амплитуду. Не вдаваясь в подробности - формула для расчета:
A = sqr( (x2 - (x1*cos(d))/sin(d))**2 + x1**2)
где
А - искомая амплитуда х2 - семпл 2 х1 - семпл 1 d - известный угол между первым и вторым семплом **2 - возведение в квадрат sqr - корень квадратный
зарядил следующий код (в цикле):
double calc(double x1, double x2, double x3, double x4) { double a1 = x1 * x3; double a2 = x2 - a1; double a3 = a2/x4; double a4 = sq(a3); double a5 = sq(x1); double a6 = a4 + a5; double a7 = sqrt(a6); return a7; }
проверил на симуляторах IAR/ARM7TDMI - результат примерно 20000 вычислений в секунду при расчетной частоте 60 MHz. HTech-MPLab (PIC16F870)- при 20 MHz - около 5.6 миллисек на операцию. AVR Studio - gcc - при симуляции на 4 MHz - 2.5 millisec на операцию (Атмега 168) на живом Атмега 168 (Ардуино) - 16 MHz получилось 20000 операций - 2.4 секунды
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|