nicksean 发表于 2008-1-3 18:52:01

庆祝一下, 我的AVR频率式电容表终于做出来了!

参考网上国内国外的电路做的, 频率是通过在T2 1/54秒内对 T1计数的值测出来的, 显示出的并不是真正的频率(要乘以54才是)
http://cache.amobbs.com/bbs_upload782111/files_9/ourdev_197012.jpg
点击此处下载ourdev_197013.rar(文件大小:100K) (电路图与说明)

shark 发表于 2008-1-3 18:55:31

我也做过了,不过这东西在电容和电感都不动的时候频率会漂移,而且很大。

nicksean 发表于 2008-1-3 18:56:32

//以下是ICCAVR下的部分代码, 由于系工作成果, 不便贴出全部代码
void AddC2(void)
{
    _ADD_C2;
}

void RemoveC2(void)
{
    _REMOVE_C2;
}

unsigned char IsCountting = 1;      //计数闸门
unsigned char T1OF_counter = 0;   //计数溢出中断计数器

//Watchdog initialize
// prescale: 2048K
void watchdog_init(void)
{
    WDR(); //this prevents a timout on enabling
    //WDTCR = 0x1F; ////特别注意这一条不是ICC生成的,是后来加上的。
    WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
}
void CounterStart(void)
{
    TCNT1 = 0;
    TCNT2 = 0x27;
   
    TCCR1B = 0x06;          //外部引脚T1, 下降沿驱动
    //TCCR1B = 0x07;          //外部引脚T1, 上升沿驱动

    TCCR2 = 0x07;
}


#pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF
void timer1_ovf_isr(void)
{
    //TIMER1 has overflowed
    ++T1OF_counter;         //中断溢出计数器
}

//TIMER2 initialize - prescale:1024
// WGM: Normal
// desired value: 27Hz
// actual value: 27.002Hz (0.0%)
void timer2_init(void)
{
    TCCR2 = 0x00; //stop
    ASSR= 0x00; //set async mode
    TCNT2 = 0x27; //setup
    OCR2= 0xD9;
    //TCCR2 = 0x07; //start
}

#define _GATE_FREQUENCY         54
#define _DEVIDER    (1)         //计数的闸门时间控制
#pragma interrupt_handler timer2_ovf_isr:iv_TIM2_OVF
void timer2_ovf_isr(void)
{
    TCCR1B = 0x00;          //timer1 stop
    TCCR2 = 0x00;         //timer2 stop
    IsCountting = 0;
}

void GetFreq(unsigned long *pFreq)
{
    IsCountting = 1;      //
    T1OF_counter = 0;

    CounterStart();

    while(IsCountting);   //等待闸门关闭

    *pFreq = TCNT1 + (T1OF_counter * (unsigned int)(-1));
   
    T1OF_counter = 0;
}

benladn911 发表于 2008-1-3 18:59:43

飘移很大,不知道是不是我在洞洞板上焊接的LM311电路存在干扰~~

都扔在一边好久,有时间的时候一定要把他重新拾起来...

时间...时间...好象一直没时间 ...

nicksean 发表于 2008-1-3 19:00:19

温飘是个问题. 不过在测量之前进行一次校零就可以了, 几分钟之内的温飘应该不会很大. 有点儿像指针表测电阻前要调零一样. 呵呵, 致于说精度, 我手头也没有高精度的电容或者电容表, 无法得知了.

ghost2 发表于 2008-1-3 19:43:36

用充电+比较器可能精度好一点?

pldjn 发表于 2008-1-3 20:14:50

不知道LCR表是怎么测的.感觉还是用一个标准的正弦波发生器来测可能还好些.

Michael_Huang 发表于 2008-1-10 16:10:33

看这里
http://www.embedded.com/columns/technicalinsights/192203166?_requestid=82941

Xearo 发表于 2008-1-12 04:04:22

很好,很强!果然不务正业~~

armok 发表于 2008-1-12 04:07:01

谢谢楼主共享。COOL。

能否上传更清楚的电路图?以便我们将来的资料整理。谢谢。

stevenlu 发表于 2008-1-12 08:44:30

高人,Up一下

nicksean 发表于 2008-1-24 10:56:02

最近有点忙, 过段时间把用运放做的另一版本也贴出来.

vivalite 发表于 2008-1-24 13:59:07

非常不错,祝贺一下!

其实就算是用上万的LCR数字电桥测电容也要经常校准的,尤其是高频测电容时还要5分钟校一次,否则误差太大

wk9591 发表于 2008-1-24 23:44:39

漂移是电感的温度漂移造成的,短时间间隔校准可以消除。如果要达到数字电桥的精度,就要用漂移小、线性好的电感。

char 发表于 2008-1-25 15:38:50

数字电桥我做过,原理是DDS产生正弦波到被测元件,再检测元件的电压电流送鉴相器,得到XY轴上的参数,算出容量和损耗。

zhonghua_li 发表于 2008-1-25 16:44:17

那个0.5%的电容哪里找的,长什么样啊?

qingzhong 发表于 2009-11-4 19:06:59

标志一下。有时间再做一个

zzlcdq 发表于 2009-11-25 17:05:35

很好,很好,强!

12fen 发表于 2009-12-3 17:34:39

mark

zhoulz 发表于 2009-12-18 16:44:15

mark

undeadhuman 发表于 2009-12-20 18:56:33

good。

测试不同的电容需要切换不同的频率,呵呵。

zhigang 发表于 2010-1-4 19:29:38

Mark!

zhou0926 发表于 2010-1-14 09:38:25

mark!

zbjzxc 发表于 2010-1-14 14:56:49

顶~~~

lv998127 发表于 2010-1-14 15:41:00

./emotion/em063.gif

hitler 发表于 2010-1-14 15:42:34

直接显示频率应该很简单吧。

moon0213 发表于 2010-1-14 18:03:03

mark

12fen 发表于 2010-1-15 17:29:43

mark

MAX1223 发表于 2010-3-24 16:19:14

回复【10楼】stevenlu 老卢
-----------------------------------------------------------------------

俺等着学习学习。

chys01 发表于 2010-6-3 11:09:07

挣分路过

lcmdw 发表于 2011-5-12 16:45:23

mark

xuwenjie 发表于 2011-6-14 14:31:28

mark

lidongxin 发表于 2011-12-23 15:47:08

mark

bosw83 发表于 2012-7-2 21:06:50

想做个,MARK

lyl520719 发表于 2012-12-6 08:59:09

这种方案是网上流传最多的一种。
页: [1]
查看完整版本: 庆祝一下, 我的AVR频率式电容表终于做出来了!