在这篇文章中,我们将使用Arduino构建一个数字电容表电路,该电路可以以合理的精度测量从1微法拉到4000微法拉的电容器的电容。
当写入电容器主体的值难以辨认时,我们测量电容器的值,或者在我们的电路中找到老化电容器的值,这些电容器迟早需要更换,并且还有其他几个原因需要测量电容。
为了找到电容,我们可以使用数字万用表轻松测量,但并非所有万用表都具有电容测量功能,只有昂贵的万用表才具有此功能。
所以这是一个可以轻松构建和使用的电路。
我们专注于从1微法拉到4000微法拉的较大值的电容器,这些电容器容易因老化而失去电容,特别是由液体电解质组成的电解电容器。
在讨论电路细节之前,让我们看看如何使用Arduino测量电容。
大多数Arduino电容计依赖于RC时间常数属性。那么什么是RC时间常数?
RC电路的时间常数可以定义为电容器达到充满电的63.2%所需的时间。零伏是 0% 充电,100% 是电容器的全电压充电。
电阻值(欧姆)与电容器值(法拉)的乘积给出了时间常数。
T = R x C
T 是时间常数
通过重新排列上述等式,我们得到:
C = T/R
C是未知电容值。
T是RC电路的时间常数,为满电荷电容器的63.2%。
R 是已知的电阻。
Arduino可以通过模拟引脚检测电压,并且可以在程序中手动输入已知的电阻值。
通过在程序中应用公式C = T / R,我们可以找到未知电容值。
到现在为止,您已经知道我们如何找到未知电容的值了。
在这篇文章中,我提出了两种电容计,一种带有LCD显示屏,另一种使用串行监视器。
如果您是此电容计的常客,最好采用LCD显示屏设计,如果您不经常使用,最好使用串行显示器设计,因为它可以在LCD显示屏上节省一些费用。
现在让我们继续看电路图。
基于串行监视器的电容计:
如您所见,电路非常简单,只需几个电阻即可找到未知电容。1K欧姆是已知的电阻值,220欧姆电阻用于在测量过程中对电容器放电。Arduino 感测引脚
A0 上的上升和减少电压,该引脚连接在 1K 欧姆和 220 欧姆电阻器之间。如果您使用电解电容器等极化电容器,请注意极性。程序:
//-----------------Program developed by R.Girish------------------//
const int analogPin = A0;
const int chargePin = 7 ;
const int dischargePin = 6;
float resistorValue = 1000 // Value of known resistor in ohm
unsigned long startTime;
unsigned long elapsedTime;
float microFarads;
void setup()
{
Serial.begin(9600);
pinMode(chargePin, OUTPUT);
digitalWrite(chargePin, LOW);
}
void loop()
{
digitalWrite(chargePin, HIGH);
startTime = millis();
while(analogRead(analogPin) 《 648){}
elapsedTime = millis() - startTime;
microFarads = ((float)elapsedTime / resistorValue) * 1000;
if (microFarads 》 1)
{
Serial.print(“Value = ”);
Serial.print((long)microFarads);
Serial.println(“ microFarads”);
Serial.print(“Elapsed Time = ”);
Serial.print(elapsedTime);
Serial.println(“mS”);
Serial.println(“--------------------------------”);
}
else
{
Serial.println(“Please connect Capacitor!”);
delay(1000);
}
digitalWrite(chargePin, LOW);
pinMode(dischargePin, OUTPUT);
digitalWrite(dischargePin, LOW);
while(analogRead(analogPin) 》 0) {}
pinMode(dischargePin, INPUT);
}
//-----------------Program developed by R.Girish------------------//
将上面的代码上传到Arduino,完成硬件设置,最初不要连接电容器。打开串行监视器;它说“请连接电容器”。
现在连接一个电容器,其电容将显示如下图所示。
它还显示了达到电容器完全充电电压的63.2%所需的时间,该时间显示为经过的时间。
基于LCD的电容计的电路图:
上面的示意图是LCD显示器和Arduino之间的连接。提供10K电位器,用于调整显示器的对比度。其余的连接是不言自明的。
上述电路与基于串行监视器的设计完全相同;您只需要连接LCD显示器。
LCD电容计程序:
//-----------------Program developed by R.Girish------------------//
#include《LiquidCrystal.h》
LiquidCrystal lcd(12,11,5,4,3,2);
const int analogPin = A0;
const int chargePin = 7 ;
const int dischargePin = 6;
float resistorValue = 1000; // Value of known resistor in ohm
unsigned long startTime;
unsigned long elapsedTime;
float microFarads;
void setup()
{
Serial.begin(9600);
lcd.begin(16,2);
pinMode(chargePin, OUTPUT);
digitalWrite(chargePin, LOW);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“ CAPACITANCE”);
lcd.setCursor(0,1);
lcd.print(“ METER”);
delay(1000);
}
void loop()
{
digitalWrite(chargePin, HIGH);
startTime = millis();
while(analogRead(analogPin) 《 648){}
elapsedTime = millis() - startTime;
microFarads = ((float)elapsedTime / resistorValue) * 1000;
if (microFarads 》 1)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Value = ”);
lcd.print((long)microFarads);
lcd.print(“ uF”);
lcd.setCursor(0,1);
lcd.print(“Elapsed:”);
lcd.print(elapsedTime);
lcd.print(“ mS”);
delay(100);
}
else
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Please connect”);
lcd.setCursor(0,1);
lcd.print(“capacitor !!!”);
delay(500);
}
digitalWrite(chargePin, LOW);
pinMode(dischargePin, OUTPUT);
digitalWrite(dischargePin, LOW);
while(analogRead(analogPin) 》 0) {}
pinMode(dischargePin, INPUT);
}
//-----------------Program developed by R.Girish------------------//
完成硬件设置后,上传上述代码。最初不要连接电容器。显示屏显示“请连接电容器!!”现在您连接电容器。显示屏将显示电容器的值和达到充满电电容器的
63.2% 所花费的时间。
这里还没有内容,您有什么问题吗?
电子电路资源推荐
- 蓝牙技术原理与协议
来源:下载中心
- 电子元器件与实用电路基础(修订版)
来源:下载中心
- 东南大学电力电子基础
来源:大学堂
- 选择正确的示波器探头
来源:大学堂
- 电阻和电阻定律以及0欧电阻和上、下拉电阻的作用
来源:电路图
- 电工基础:电路的组成
来源:电路图
推荐帖子 最新更新时间:2024-11-13 09:12
- 12864显示大数字
- 除了图像取模外,有什么方法可以使12864显示较大的字符数字,比如16*32的? 12864显示大数字 除了图像取模外,有什么方法可以使12864显示较大的字符数字,比如16*32的? 12864显示大数字 调用大字体,点阵显示。其实跟取模差不多,只是省去了取模的步骤,直接调用现
- pp1234ll微控制器 MCU
- 电流采样
- 目前需要做一个直流电流采样项目,0.0001A到3.5000A的分辨率,单片机是12位的ADC,不知道各位高工有没有方案或芯片推荐,万分感谢 上述话好像表达的不够严谨。我用的单片机是12位的ADC,也就4096个单位,电流显示是0.0001到3.5000A, 350
- zhuyu630模拟电子
- 求助:关于windows mobile5的gprs上网,ppp协商过程失败
- 每次协商过程都是一样的,分析ppp协议,好像每次都是被基站拒绝,以后窜口就没有反应了。 打印信息如下: default : Other RIL_ APIs IOCTL_RIL_SETGPRSCONTEXT RilDrv: Sending cmd: AT+CGDCONT=1, IP
- cqk62嵌入式系统
- 如何在wince系统中实现sd卡的热插拔
- 在wince系统启动之前sd卡可以认得到,但是拔掉之后,系统好像还是认为sd卡仍然存在,但是却读不到数据的。再把sd卡插进去,再也无法读写sd卡了,请教各位大侠,感激不尽。 使用的wince 4.2版本的平台,cpu是三星2440a芯片,bsp包是smdk2440 如何在win
- kaixiongwuWindowsCE
- 【中科昊芯HXS320F28025C】系统初始化函数学习和熟悉库函数风格
- 上一章点灯调试串口的过程中,跳过了系统初始化部分。今天就来一起过一下吧。 0x00: Device_init()中的函数: // // Disable the watchdog // SysCtl_disableWatchdog(); //
- jixulifu2国产芯片交流
- 请教at24c08读写的问题
- 最近在弄51读写24c系列,按照 数据 手册 写出了 程序 ,但是奇怪的是可以读出数据却没法写入数据 还请大家赐教 硬件 环境是at89s52,at24c08a,12mhz晶振 ------------------------ ;定义区 EEPROM_WP BIT P2.6 EE
- cheesetree51单片机
- SM/C和SM/L 封装上的区别
- 430系统安全性的几个问题请教?
- 论坛兑换51板快完工了
- 【RISC-V MCU CH32V103测评】- 7:PWM 也不简单
- 求助~~~~~CCS3.1 报错Data verification failed
- STM32F4使用MDK5更新最新版的ARM::CMSIS编译遇到问题
- [转]电子元件封装大全及封装常识
- 单片机IO口直接驱动段式液晶显示屏
- CC3200 web server
- flash保存注册表问题求助
- 如何提高倍压整流电路的功率
- 丝印为LOW的SOT-23封装三级管是什么三级管?
- AD接外部基准源时,最好用好的基准
- 常用的放大电路分析及其应用场合
- 请教光信号稳定性处理!!
- 看一段msp430 定时器UART1通信的程序
- 如何设计稳压芯片的外围保护电路
- 后天的研讨会怎么现在还不告诉地点呀?
- 求高人指点multisim(ewb)中的几个问题
- MotionDRV直流伺服驱动器PID参数整定
- EVAL-AD7329CB,用于 AD7329、13 位、1MSPS、8CH ADC 的评估板
- STM32F103RxT6最小系统
- #第六届立创电赛#语音音箱
- OP462HRUZ-REEL耳机输出运算放大器典型应用电路
- 使用 Analog Devices 的 LT124XIS8 的参考设计
- RDR-648 - 使用 HiperPFS-4 和 HiperLCS 的 150 W 功率因数校正 LLC 电源
- DC1147A-E,用于 LTC6403-1 16 位差分 ADC 驱动器的演示板
- LT8570EMS8E-1 1MHz VFD(真空荧光显示器)电源开关的典型应用
- AD5342 并行接口、双电压输出、12 位 DAC 的典型应用
- CMT2300模块