打印

利用STC12C5410AD做电容测试中的一些疑惑~~

[复制链接]
2218|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
XZL| | 2014-1-13 17:45 | 只看该作者
利用测量充放电时间可以测量电容

使用特权

评论回复
板凳
若是射手| | 2014-1-14 14:22 | 只看该作者
芯片自带有PCA模块   专门干这个的

使用特权

评论回复
地板
coody| | 2014-1-14 14:54 | 只看该作者
可以的啊,我多年前做的一个电容测量仪就是用一路LM393做比较器测电容的,两档量程400uF(分辨率0.001uF)和40000uF(分辨率0.1uF),还可以的,电路简单,也是用的STC的MCU,LED数码管显示。

使用特权

评论回复
5
qjp1988113|  楼主 | 2014-1-15 14:48 | 只看该作者
coody 发表于 2014-1-14 14:54
可以的啊,我多年前做的一个电容测量仪就是用一路LM393做比较器测电容的,两档量程400uF(分辨率0.001uF) ...

大神,在么?、能教教小弟么。。我想要达到至少nf级别的。。可是,我用定时器记录的时间不知道为什么不准确。。时间和理论值不对啊。。而且超小。。:Q

使用特权

评论回复
6
qjp1988113|  楼主 | 2014-1-15 14:55 | 只看该作者
  void INT1_Init()
{
//   EA=1;
   EX1=1;
   IT1=0;

}
void Timer0Init(void)                //255微秒@11.0592MHz
{        EA=1;
    AUXR &= 0x7F;                //定时器时钟12T模式
        TMOD &= 0xF0;                //设置定时器模式
        TMOD |= 0x02;                //设置定时器模式
        TL0 = 0x15;                //设置定时初值
        TH0 = 0x15;                //设置定时重载值
        TF0 = 0;                //清除TF0标志
        TR0 = 1;                //定时器0开始计时
}
/*-------充电电压已到10/11VCC---------*/
  void INT1_VCC_HIG(void) interrupt 2
{       
    TR0=0; //计数时间到关闭计数器
    TIME_COUNT2= TL0;
       
//        TIME_COUNT1= TH1;
        CAP_COUNT=TIME_COUNT2; // 计shi的总量
        yellow_led=0;
//        CAP_TIME= CAP_COUNT+OVERFLOWFLAG*255;           // 得到计shi的总时间


}
void Timer0_isr(void) interrupt 1
{

  OVERFLOWFLAG++;  //溢出标志
}

单片机电源和充电电源一个开关,一上电就充。。为什么的出的时间不对啊。。理论上不是可以达到um级别的么。。我充220nf的,时间只有TL0=40,OVERFLOWFLAG=0啊。。充电电阻已改为1M,为了增大时间啊。。求大家帮帮忙啊。

使用特权

评论回复
7
coody| | 2014-1-15 15:19 | 只看该作者
qjp1988113 发表于 2014-1-15 14:48
大神,在么?、能教教小弟么。。我想要达到至少nf级别的。。可是,我用定时器记录的时间不知道为什么不准 ...

电阻太大时,你得考虑比较器的输入有偏置电流。如果用低输入电流的(比如1nA以下)就可以忽略。
我用的是LM393,输入电流是25nA,电阻是100欧姆或10K,所以输入电流可以忽略。如果你用到1M,则,误差稍大。我用的计时基准是10us,用100K电阻的话,分辨率是0.1nF。

使用特权

评论回复
8
qjp1988113|  楼主 | 2014-1-15 15:31 | 只看该作者
我用10K电阻和150nf的电容充电。我程序上是这样:一旦充到10/11Vcc,它就给INT1中断.,然后关闭定时器。读定时的值,和溢出的值。。然后T=OVERFLOWFLAG*255+TL0。这样算有问题么。可以与直接算出时间,两者对比,相差好大。t=- RC ln(1-uc/Vcc)  
t=-(10^4)*150*(10^-9)*ln(1/11)
=-150*(10^-5)*(-2.3979)
=0.15*2.3979*(10^-2)=0.00359684s=3596us啊。。
为什么单片机输出的是:TL0=124,OVERFLOWFLAG=0啊。。:Q

使用特权

评论回复
9
qjp1988113|  楼主 | 2014-1-15 15:54 | 只看该作者
没人在了么??哎。。

使用特权

评论回复
10
coody| | 2014-1-15 21:38 | 只看该作者
LM393不是Rail to Rail输入的,最大输入为VDD-1.5,这个你要留意,因为我看到了你的描述中有“10/11Vcc”。
充电超过2/3 VCC后,电压上升开始缓慢,这也是误差增加的原因。
所以,我就充电到2/3 VCC左右,基本就是保证充电时间为 R*C就OK。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

111

主题

627

帖子

2

粉丝