- плохо ты шит читал, току в 0А на выходе ACS712 соответствует напряжение = половине питания. а в привидённом тобой куске это не учитывается.
Zero Current Output Voltage VIOUT(Q) Bidirectional; IP = 0 A, TA = 25°C– VCC × 0.5
- этот кусок тупо делает 1000 выборок без всякой привязки к количеству полупериодов и синхронизации с сетью используя режим однократного преобразования ацп.
- вообще то нужно считать среднеквадратичный ток чтобы в результате получить реальную мощность на переменном токе с изрезанной синусоидой. здесь почему то ток среднеарифметический и с какими приборами его потом сравнивать? я не знаю таких приборов.
- использование плавучки в восьмиразрядниках считается дурным тоном , поскольку она сжирает львиную долю процессорного времени . посему нужно пользовать исключительно целочисленку doble и word
*************************************************************************************************************
алгоритм:
- по прерыванию "0"-ля сети запускаем ацп в режиме непрерывного преобразования и по каждому последующему отсчитываем четное количество полупериодов ( 20-ти достаточно ).останавливаем ацп. вычисляем среднеквадратичный ток. отсчитываем четное количество полупериодов паузы (зависит от постоянной времени пид , конечно если вы хотите его рализовать).
- по прерыванию ацп ситываем , возводим в квадрат суммируем с предыдущим.
- источник опорного напряжения. максимальное выходное напряжение ACS712ELCTR-20A-T при питании 5в = 2500 + 20*100 = 4500 мВ. соответственно напряжение опоры должно быть не менее 4,5В. использоать напряжение питания с проца есть неправильно если вы хотите достичь хорошей точности, в проивном случае можно на Vref подать питание 5В через LC фильтр. всё же я рекоменду применять хорошую внешнюю опору например
REF192 на 4,5В
- вычисление среднеквадратичного тока
I = Vref * sqrt( (u1**2 + u2**2 +....+un**2) / n )/ 1024 * Ki , где Ki - коэф-т преобразования сенсора тока = 185 , 100, 66 мВ/А соответственно для 5-ти , 20, 30 А . все напряжения в мВ.
- для скептиков относительно вышесказанного. у меня это работает в металле и софте , показания сравнивал с профессинальным цифровым RMS амперметром . разница составила +/- 40мА и объясняется разрядностью ацп. ток регулировал фазоимпульсным регулятором мощности.