Используя Arduino Nano и трансформатор тока (CT), я пытаюсь почувствовать ток, протекающий через линию 120 В 60 Гц.
схема
Выходы КТ в 0-1 V
соответствии с его спецификациями Этот выход смещен AREF/2
= 2,5 В.
analogRead
Ценности
Ось X представляет номер индекса образца АЦП, а ось Y представляет значение АЦП (0-1024). Частота дискретизации составляет около 9 кГц. Разница между пиками составляет около 1026 образцов.
Это форма волны, что вы ожидаете от CT? Почему существуют регионы, где значения являются плоскими, а не постоянно меняются?
Кроме того, если мы посмотрим на кривую часть графика, почему Arduino читает значения выше 512
и ниже 512
попеременно? Он читает значение выше 512
, затем значение ниже 512
, затем значение выше 512
и так далее.
Время, затраченное на analogRead
измерение, составило 110 микросекунд для моей установки, и между пиками формы сигнала было 1026 выборок. Это означает, что в течение 1 секунды будет около 9 пиков, хотя я ожидаю 60 пиков, поскольку мы ощущаем линию 60 Гц. Что вы делаете из этого? В C1
цепи есть конденсатор, это как-то связано с этим?
Подходят ли эти значения analogRead для расчета среднеквадратичного напряжения и, следовательно, среднеквадратичного тока, проходящего через измеряемый провод? Конечной целью этого является вычисление потребления энергии после определения действующего значения тока, протекающего через провод.
Эскиз, используемый для получения значений для сюжета
void setup() {
Serial.begin(9600);
}
void loop() {
double sensorValue = analogRead(1);
Serial.println(sensorValue)
}
Фактические analogRead
данные в точках рельефа
487
534
487
535
488
537
484
536
487
538
486
536
484
540
484
539
485
540
483
540
484
541
481
539
481
540
484
540
480
543
484
539
481
540
484
541
486
542
485
538
485
538
488
535
489
534
491
530
491
529
493
531
492
526
498
526
499
524
499
520
503
518
502
518
507
График аналоговых значений
Значения analogRead теперь сохраняются в буфере перед передачей через последовательный порт. В настоящее время существует 55 точек данных АЦП, составляющих 1 период. Учитывая, что время аналогового чтения составляет 110 мкс, каждый цикл занимает 6,05 мс, что дает нам частоту 165 Гц! Что могло пойти не так?
void loop() {
double sensorValue = analogRead(1);
char buf[32];
dtostrf(sensorValue, 8, 2, buf);
value = buf;
if (stop == 0) {
if (i < 10000) {
message += ',';
message += value;
i++;
}
else {
stop = 1;
Serial.println(message);
}
}
}
analogRead()
и обнаружил, что оно составляет 110 микросекунд. Обновил вопрос.