电容传感器在我们的生活中用处广泛,如何测量电容,电容测量电路也是一个讨论甚广的电路。
本期我们分享一种利用NE555测量电路的方法。
NE555有着电子小甲虫之称,其使用非常非常的广泛,并且稳定性经过了时间的考验。在NE555的基础上有着许多的电路设计例如施密特触发器、单稳态触发器等等,本期我们使用NE555构成无稳态振荡器来实现电容的测量。
01电容器件的测量

上图这种利用NE555的无稳态电路被广泛的使用,利用R1和R2以及C1构成的充电放电电路在这个特定的电路之下使得3脚输出一个频率的方波

利用这个公式我们可以推算出频率和电容电阻的关系

我们利用Multisim进行仿真,可以看到理论频率为4800HZ,我们利用频谱分析仪测出的频率则是在4877HZ,1.6%的误差(应该可以纠正, 而且是频谱分析仪,而且是仿真。)
02测量电路与数据处理
本期我们想要测量10pf到100pf的电容,事实上在测量这种小电容的时候会受到电路分布电容的影响。

由于两个引脚相距很近,所以事实上这两个IO自己就会构成一个电容,因此当我们测微小电容的时候引脚之间的电容是不能忽视的。

简单的用洞洞板做了个电路,R1和R2分别选用328K电阻(可能也有点误差)。

我们发现,电路空载的时候存在一个168.4KHZ的方波,这个信号就是由电路的分布电容引起的振荡。
接着我们将168.4KHZ代入公式。
1.44/(328+2*328)/168.4 = 0.0000086uF,即约等于8pf的电容。
之后我们测量多组数据,将实际电容值和理论电容值记录下来
利用拟合工具进行拟合。

可以看到线性度还是非常不错的(我自己做的工具欸)这样子数据处理的部分我们就完成了。
03程序运行程序部分本来打算使用51单片机的(主打一个丐版),因为频率在168KHZ,51单片机完全可以采集到168KHZ的信号,因此但是手上并没有合适的51单片机和屏幕,于是就打算使用STM32单片机来进行测试,我们使用外部中断来获取频率数,利用定时器定时触发来计算频率数量,之后转换成电容值进行数据处理后打印在LCD屏幕上。

使用PB2作为外部中断,定时器2作为时间计数。
定义一个数字变量,在外部中断的中断回调函数中进行频率计数,定时器每秒统计频率计数用一个变量来存储。
long number = 0;
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
number++;
}
int i = 0;
double Fre = 0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
i++;
if(i == 25) //计时一秒
{
i = 0;
Fre = number;
number = 0;
}
}
之后再把我们获得的频率利用公式计算出理论电容,之后把理论电容通过拟合曲线转换为实际电容。
LCD_ShowString(30,30,480,40,32,"Frequent: HZ");
LCD_ShowxNum(140,30,Fre,10,32,1);
CC = 1.44*1000*1000/(324*3)/Fre*1000;//转化为理论电容值
CC = (-11.139 + 0.969*CC)*1000;//最小二乘法拟合
if(CC<0)
{
CC = 0;//阈值设定
}
LCD_ShowString(30,70,480,40,32,"C Value: . pF");
LCD_ShowxNum(65,70,(int)(CC)/1000,10,32,1);//显示整数部分
LCD_ShowxNum(140,70,(int)(CC)%1000,10,32,1);//显示小数部分
HAL_Delay(1000);
