我是新来的,所以,如果我有任何错误,对不起。好吧,我正在与Arduino(Mega2560)一起构建一个电流表,发现了一个小问题... Arduino Mega测量0至5V的电压,而AnalogPins根据读数返回10位值(即, 1位代表5 /(2 ^ 10)= 4mV(大约)。但是,在电流表的情况下,我需要使用一个小电阻的电阻,这样我的电路就不会发生变化。因此,我的目标是读取电压降并从V = R.I计算电流。但是,由于电压降缓慢,引脚无法读取任何值。 例如:在我要测量的区域中有2mA的电流流过。如果电阻为0.3欧姆(我在这里找到的最小值)为:V = 2m。 0.3 = 0.6毫伏。 正如我所说,在模拟引脚中读取的最低可能值为4mV。 因此,如何提高我的阅读精度?例如,代替1023仅代表5V,相同的值代表大约30或40mV ... 0-0伏 1023-30/40 mV
答案 0 :(得分:0)
您可以使用1.1V内部参考电压,或者使用更精确的外部参考电压(可以通过analogReference
进行归档)。 BTW电流这么小,使用更大的电阻会更方便。
或者,忘记analogRead
的有限功能,直接执行。例如2.56V基准电压源,具有10倍或200倍增益的差分输入(但您会得到-512到511-> 2.56 / 512的范围)。
答案 1 :(得分:0)
在下面的示例中,voltage_meter
在大约1毫秒内读取500个样本并返回平均值。我将引用设置为1.1v
,以提高精度。
int battery_pin = A3;
float voltage_meter()
{
//read battery voltage per %
long sum = 0; // sum of samples taken
float voltage = 0.0; // calculated voltage
float output = 0.0; //output value
for (int i = 0; i < 500; i++)
{
sum += analogRead(battery_pin);
delayMicroseconds(1000);
}
// calculate the voltage
voltage = sum / (float)500;
// voltage = (voltage * 5.0) / 1023.0; //for default reference voltage
voltage = (voltage * 1.1) / 1023.0; //for internal 1.1v reference
//round value by two precision
voltage = roundf(voltage * 100) / 100;
return voltage;
}
void setup()
{
analogReference(INTERNAL); //set reference voltage to internal
Serial.begin(9600);
}
void loop()
{
Serial.print("Voltage Level: ");
Serial.print(voltage_meter(), 4);
Serial.println(" V");
delay(1000);
}