Чтение данных с датчика тока
Датчик ACS711KEXLT-31AB-T имеет диапазон тока +- 31 А. Напряжение с фаз A, B и C читаем с пинов PC1, PC2 и PC3 соответственно. Значения мы получаем от 0 до 4096, максимальное напряжение 3.3V. Чтобы получить ток с фаз, необходимо напряжение поделить на коэффициент Sensitivity = 45 mV/A = 0.045 V/A. Любой датчик дает некоторый шум, поэтому в самом начале установим так называемый offset - напряжение в "состоянии покоя" для каждой из фаз. При расчете тока напряжение будет сдвигаться на этот offset.
Ниже приведен пример программы, написанной на ардуино, которая читает ток с датчика и выводит его значение в амперах в Serial порт.
#include <VBCoreG4_arduino_system.h>
#define EN_GATE PB3
float sensitivity = 45; // mV/A
float i_A_offset =0;
float i_B_offset = 0;
float i_C_offset = 0;
void setup() {
analogReadResolution(12);
Serial.begin(115200);
pinMode(PC1, INPUT); //ph A
pinMode(PC2, INPUT); // ph B
pinMode(PC3, INPUT); // ph C
pinMode(EN_GATE, OUTPUT);
digitalWrite(EN_GATE, HIGH);
delay(10);
//посчитаем offset для каждой из фаз
for (int i = 0; i < 64; i++) {
i_A_offset += (3.3f * (float)analogRead(PC1) / 4096.0f);
i_B_offset += (3.3f * (float)analogRead(PC2)/ 4096.0f);
i_C_offset += (3.3f * (float)analogRead(PC3) /4096.0f);
delay(1);
}
//усредняем
i_A_offset /= 64.0f;
i_B_offset /= 64.0f;
i_C_offset /= 64.0f;
}
float i_A, i_B, i_C;
void loop() {
i_A = (3.3f*(float)analogRead(PC1)/4096.0f - i_A_offset )/(sensitivity/1000); //A
i_B = (3.3f*(float)analogRead(PC2)/4096.0f- i_B_offset )/(sensitivity/1000); //A
i_C = (3.3f*(float)analogRead(PC3)/4096.0f- i_C_offset )/(sensitivity/1000); //A
Serial.print(" A: ");
Serial.print(i_A);
Serial.print("\t ");
Serial.print(" B: ");
Serial.print(i_B);
Serial.print("\t");
Serial.print(" C: ");
Serial.print(" ");
Serial.println(i_C);
delay(100);
}
Подробнее ознакомиться с датчиком тока можно в документации
Last updated