2024-09-01
售卖作品
00

目录

全部代码

在这里插入图片描述

这个代码的原理是利用RC电路的充电时间常数来测量电容值。具体步骤如下:

  1. 初始化和配置

    • 关闭所有模拟输入 (ANSEL = 0; ANSELH = 0)。

    • 配置ADC模块以读取电压 (ANSEL |= 0X01; TRISA0 = 1; ADCON0 = 0xC1; ADCON1 = 0x80)。

    • 配置TMR1定时器用于测量时间 (T1CON = 0b00100001,开启定时器)。

  2. 电容放电

    • 设置RA1引脚为高电平 (RA1 = 1),将电容放电。

    • 延时100ms (delay_ms( 100 ))确保电容完全放电。

  3. 开始充电

    • 设置RA1引脚为低电平 (RA1 = 0),停止放电并开始充电。

    • 复位TMR1计数器 (TMR1H = 0; TMR1L = 0),并启动定时器。

  4. 测量充电时间

    • 在一个循环中不断读取ADC值 (GO = 1; while ( GO ) ;),直到ADC值达到0.632 * Vdd(即adval > 637)。

    • 0.632 * Vdd是RC电路的时间常数τ(tau)对应的电压,这时的时间rctime即为电容充电到该电压所需的时间。

  5. 计算和显示结果

    • 停止定时器 (T1CON = 0)。

    • 计算总时间(包括定时器溢出的次数)并显示在LCD上 (sprintf( xianshi, "T:%d us", (int) ( (times * 65536 + rctime) * 4) ))。

  6. 中断处理

    • 每次TMR1溢出时,会进入中断服务程序 (void interrupt high_isr( void ))并增加times计数,以记录定时器溢出的次数。

通过测量RC电路充电到0.632 * Vdd所需的时间,可以利用公式[ τ = RC ](τ是时间常数,R是已知电阻,C是待测电容)计算出电容值。代码中通过测量τ,并结合已知的电阻值,就可以计算出电容值。

全部代码

cpp
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!