正如您可能在这篇文章中所读到的,电容是能量存储能力的一种度量。它们尤其用于整流器,旁路设备和模拟滤波器电路中。
它们是非常重要的组件,对于确保应用程序和其他组件正常工作至关重要。
但是,您如何测量这个非常重要的“大小”(“电容”)
目录
时间常数与电路
时间常数定义为系统从阶跃输入达到给定状态所花费的时间。
在这种情况下,我们希望找到“ C ”,并且只有电容器和电阻器(串联)的电路具有已知的时间响应。
那我们就可以利用!
因此,要测量电容器的电容,我们可以通过一个已知的电阻对其进行充电,并测量其达到充电电压的〜63,2%所需的时间!
电路非常简单:
- 被测电容器与已知电阻(此处为10 k Ohm)串联连接。
- 电容器电路连接到Arduino的引脚7。
- 电容器还连接到Arduino上的模拟输入以测量电压(A0)。
程序
进行此测量的固件将进行3次测量,取平均值,然后打印出打印在串行(USB)上的最终答案。
流程如下:
- Arduino通过将引脚7设置为低电平来使电容器电路放电。通过读取电容器上的电压来确保电容器为空。
- 它开始为电容器电路充电并启动计时器。
- 它持续充电直到电容器达到3,16伏(5 V的〜63,2%)。
- 当电路达到3.16伏时,它会保存累积的时间值,如果执行的次数少于3次,则会返回到1。
- 最终答案是所有测量值的平均值,结果将打印在串行端口上!
#define NO_MEASSUREMENTS 3
#define analog_pin A0
#define capacitor_pin 7
#define resistor_value 989000.0F // the value on the resistor in Ohms
unsigned long start_time = 0;
unsigned long accumulated_time = 0;
void setup() {
pinMode(capacitor_pin, OUTPUT);
Serial.begin(115200);
}
void loop() {
accumulated_time = 0;
for(uint8_t i = 0; i < NO_MEASSUREMENTS; i++){
// Make sure the capacitor is dicharged
digitalWrite(capacitor_pin, LOW);
while(analogRead(analog_pin) > 0){}
// set chargePin HIGH and capacitor charging an
digitalWrite(capacitor_pin, HIGH);
start_time = micros();
// 647 is 63.2% of 1023, which corresponds to full-scale voltage
while(analogRead(analog_pin) <= 647){}
accumulated_time += (micros() - start_time);
}
float result_time = ((float) accumulated_time) / NO_MEASSUREMENTS;
float micro_F = ( result_time / resistor_value) * 1000;
Serial.print((long)result_time);
Serial.print(" us before tau / ");
print_float(micro_F, 2);
Serial.println(" uF");
}
// from Peter H. Anderson, Baltimore, MD
void print_float(float f, int num_digits)
{
int pows_of_ten[4] = {1, 10, 100, 1000};
int multiplier, whole, fract, d, n;
multiplier = pows_of_ten[num_digits];
if (f < 0.0){
f = -f;
Serial.print("-");
}
whole = (int) f;
fract = (int) (multiplier * (f - (float)whole));
Serial.print(whole);
Serial.print(",");
// print each digit with no leading zero suppression
for (n=num_digits-1; n>=0; n--){
d = fract / pows_of_ten[n];
Serial.print(d);
fract = fract % pows_of_ten[n];
}
}
这是从串行监视器出来的:
105404 us before tau / 106,57 uF
(被测电容器被称为100 uF“大”。这种差异可能是由许多不同的原因造成的。其中包括:不正确的时序,ADC(不准确)精度,电源不精确度,当然:所称电容与实际电容之差制造商)。
结论
正如我们在这里看到的:您可以使用简单的数学“键”来测量电容,该“键”存在于时间,电阻和电容之间,并且电路简单而便宜。
但是请注意,这需要一些“升级”(尤其是在硬件方面),才能成为“高精度”测量设备。