我们都知道欧姆定律:两个端子之间的电压降即是电流值乘以这两个端子之间的电阻。
V = R I
因此,利用这个大略的公式可以很随意马虎地丈量电阻器两端之间的电流。
在该图中,我们可以看到我们在负载两端施加电压VT,在这种情形下是灯泡和电阻器串联。我们想要丈量流过灯泡的电流,由于它们是串联连接的,以是电流同样流过电阻器。因此,如果我们知道电阻器的电阻并丈量其端子之间的电压降,我们就可以利用上面的欧姆定律打算电流。问题是我们须要利用一个低阻值电阻,由于如果电阻过大,电阻电压降会影响到我们利用灯泡的电压。
例如,假设我们想对灯泡施加12伏电压。流过的电流约为1安培。如果电阻值是10欧姆,那将在地电压和10欧姆电阻之间产生电压降VR,这意味着我们向灯施加电压达不到12伏VL。灯两端的电压只有12-10 = 2伏特。
为理解决这个问题,我们不能利用普通的电阻器。办理方案是利用具有非常低阻值的分流电阻器。非常低阻值的电阻器非常适于此目的,该种类电阻器常日称为分流器。该名称源于它们在老式移动线圈式电流表的利用,个中分流器直接连接在电流表端子上。其目的是将大部分电流“分流”阔别电流表,电流表本身设计为仅处理几毫安以使指针满量程偏转。
我从网上买了这个分流器。当你购买它们时,你必须要看它的规格。下面是分流器规格的一个例子。
电流:10A
电压降:75mV
准确度:0.5级
环境条件:-40~ + 60°C,相对温度≤95%(35°C)
有几个参数对付选用分流电阻非常主要。分流电阻的最大额定电流。电阻值由最大额定电流下的电压降打算出。例如,额定电流为100A和电压降50mV的分流电阻的电阻为50/100 = 0.5 mOhm。最大电流下的电压降常日为50,75或100 mV。在这种情形下,我们的分流器为10A,最大电压降为75mA。这让我们打算出该电阻阻值:
75mV / 10A = 7.5mOhm。
以是现在我们的电路具有一个非常低电阻的分流电阻。现在,如果我们有1A的电流流过分流电阻器,那么电压降仅为7.5mV,这将不会影响我们想要运用于灯泡的12伏电压。
但现在我们还有另一个问题。为了丈量电流,我们必须首先丈量分流电阻器电压降并将其除以电阻值。但由于分流电阻器电阻较低,电压降非常小,以至于我们的Arduino ADC只能丈量较大电流值。
例如,像我们说的,我们想要丈量1A的电流。这将使VR低落7.5mV。Arduino ADC有10位。这意味着它将为o伏对应0值,为5伏对应1024,这是该微掌握器的最大Vref电压。
5伏---------- 1024
0.0075volts ------- X.
如果我们打算出“X”,它将为我们供应以1.5为单位的ADC,用于7.5mV的压降。这基本上意味着我们丈量精度会非常小。为了能够以更高的精度进行丈量,我们必须放大此电压降。为此,我们将利用仪表放大器。我们不该用大略的运放,由于我们须要高增益和更高的精确度。我们将利用AD623AN仪表放大器。从数据表中可以看出,它的增益设置为单个1%电阻(或者,如果您想随时变动增益,可能还有预设的可变电阻)。
如果我们看一下AD623AN数据表,我们就可以看到增益取决于引脚1和8之间的Rg电阻。我们知道,对付10安培,分流端子之间的最大电压降为7.5mV。利用500增益,我们将从放大器输出3.75伏电压,这对我们的Arduino ADC非常有用。但是,得到高收益可能会给我们带来缺点。请查看数据表以查找每个增益的缺点图。因此,对付501增益,我们必须利用200欧姆Rg电阻。我们该当添加一个100欧姆的可调电阻以进行微调。
因此我们为arduino供应5伏的放大器,由于它不会利用太多的电流。放大器将放大分流电阻之间的电压降。现在我们可以丈量电压降,范围在0到5伏之间。设置放大器的增益,使得当我们丈量最大10A电流时,输出电压将低于5伏。现在我们须要做的便是将下面代码上传到我们的arduino并开始丈量当前。请记住安装lyquid crystal i2C库以利用i2c LCD屏幕。
你可以下载lyquid crystal i2C库, 要安装它,我们只需转到Sketch - > Include库,然后打开我们刚刚下载的.zip文件。
库文件请关注微信公众年夜众号 电子爱好谈论分享 获取。
以下为代码:
//LCD config
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3f,20,4); //sometimes the adress is not 0x3f. Change to 0x27 if it dosn't work.
////////////////////////////////////////////////////////////////////////////////////////////////////////
int analogInputAmps = A3; //Connect the output of the amplifier to this pin
int readAmpsADC = 0;
float voltage = 0.0;
float amps = 0.0;
void setup(){
pinMode(analogInputAmps, INPUT);
lcd.init();
}
float fmap(float x, float in_min, float in_max, float out_min, float out_max) {
return (x - in_min) (out_max - out_min) / (in_max - in_min) + out_min;
}
void loop() {
readAmpsADC = analogRead(analogInputAmps);
voltage = fabs(fmap(readAmpsADC, 0.0, 1024.0, 0.00, 5.0)); //this maps the measured voltage in volts from 0 t 5V
amps = voltage (10.0/3.7575); //Because we have 10A when the voltage is 3.7575 for a 501 gain (0.0075V 501)
lcd.setCursor(0,0);
lcd.print(\"大众SCALE: 0A-10A\"大众);
lcd.setCursor(0,1);
lcd.print(amps,3);
lcd.setCursor(15,1);
lcd.print(\"大众A\"大众);
delay(500);
}
//You can always fine tune the gain at the same time that you measure the current with the
//arduino meter and a normal high precision multimeter to compare.
//Precission = 13mA