huayuliang 发表于 2011-5-31 22:29:24

利用AVR比较器的A/D仿真图。

http://cache.amobbs.com/bbs_upload782111/files_40/ourdev_644523QWDRQ1.png
(原文件名:2011-05-31 22 13 50.png)

折腾了好长时间。。。。。也算是比较满意了。

为了能有满意的线性,增加了恒流源。。。但发现晶体管构成的镜像恒流源在对电容充电期间稳定性很差,于是换成了现在这个。。。不知叫啥名字~~
从图片上能看到电流稳定性比较好,A/D转换的线性也提高了很多,但仍不理想。如果再适当调整下参数,误差能在0.005V左右(更正下,仿真的结果,误差在0.005~0.05之间),倒是横满足一般要求了。

tangwei039 发表于 2011-5-31 22:49:38

没看明白,但是要顶。

huayuliang 发表于 2011-5-31 22:59:16

回复【1楼】tangwei039
-----------------------------------------------------------------------

原理倒是很简单。。对电容充电,充电期间计数。单片机内部的比较器翻转,结束计数。代码也很少。。适合不带AD而带比较器的单片机。

等同于单积分A/D转换器。
代码:

uint16_t ad_convert(void){
    uint16_t res=0;
    DDRB |= 1<<PB0;
    PORTB &= ~(1<<PB0);
    _delay_us(10);

    DDRB &= ~(1<<PB0);
    PORTB &= ~(1<<PB0);
    //PORTB |= 1<<PB0;
    while(!(ACSR&_BV(ACO))){
       res++;
    }
    DDRB |= 1<<PB0;
    PORTB &= ~(1<<PB0);
    return res;
}

millwood0 发表于 2011-5-31 23:04:35

you don't even need a comparator if you pick the pin to be a schmitt-trigger pin:

1) discharge the capacitor;
2) turn on the ccs;
3) wait until the capacitor pin turn high.

the time it takes the capacitor pin to turn high is dependent on the capacitance.

that's the single slope operation. if you can also use a standard capacitor and then you have a double slope adc.

luhuaneda 发表于 2011-5-31 23:07:34

用这种方法测电容可以精确到pf吗

huayuliang 发表于 2011-5-31 23:09:12

回复【3楼】millwood0
-----------------------------------------------------------------------

俺考虑内部的比较器要比用普通引脚要好得多。也曾经仿真过利用普通引脚的,不过太感觉太差了点。

另外就是,整个线性似乎还是受恒流源影响。还有哪种类型的恒流源比这个好的呢?用运放的那种就算了。

huayuliang 发表于 2011-5-31 23:15:05

回复【4楼】luhuaneda
-----------------------------------------------------------------------

应该是可以的。不知实际使用如何。
稍微改动下主程序就可以测电容。

luhuaneda 发表于 2011-5-31 23:16:31

用运放的那种就算了。
为什么呢?能讲解一下吗。
我搭过用运放做的恒流源电路,还挺准的,就是用供电比较麻烦。

millwood0 发表于 2011-5-31 23:21:29

this approach depends critically on the leakage current, both from the capacitor and from the io pin - leakage increases the time it takes to charge up the capacitor, thus inflate its reading. you can simulate its impact by paralleling a high value resistor to the capacitor.

to null it, your ccs has to generate a current significantly larger than the leakage - this limits its usable range.

your ccs is pretty good. its downside is likely linearity (which depends on the gain and voltage drop over the ccs), and thermal stability.

to increase gain, you can use an ic based solution. for example, you can use a tl431 in place of Q2. this helps with thermal stability as well.

to alleviate the voltage drop issue, you can use a current transfer circuit (aka a current mirror) to isolate the control side from the charge-up side.

lixupeng 发表于 2011-5-31 23:25:15

mark!!

huayuliang 发表于 2011-5-31 23:46:43

回复【8楼】millwood0
-----------------------------------------------------------------------

你说的对,实际的使用我也打算用TL431来稳定Q1。
单片机内部的高阻抗也不知多大,开始的时候也想过在比较器的引脚和电容之间增加个大电阻,不过放电就麻烦了。
热稳定性啥的还没考虑,仿真还没OK呢。

突然想起来,也没必要做这么宽的电压范围,0~2.5V的就足够了,而且线性会提高很多。

你提到的在电容两端并联大阻值电阻,会影响线性吧?多大值为好呢?

回复【7楼】luhuaneda
-----------------------------------------------------------------------
其实只是因为手里有不少从插座拆下来的90S2313.....也不想用太多元件。所以运放那种恒流源就算了,如果再使用运放做恒流源,还不如用带AD的呢。

millwood0 发表于 2011-5-31 23:51:12

"你提到的在电容两端并联大阻值电阻,会影响线性吧?多大值为好呢? "

no. that was to show you how you can assess the impact of leakage.

yeutay 发表于 2011-6-1 00:50:10

应该R11小于R1 ,使分流量为10~15倍的基极电流,可得最佳稳定性。

JSXA 发表于 2011-6-1 08:18:57

用运放电流积分
那样精度就能上去了

wjf0509 发表于 2011-6-1 08:50:00

我见人有用过这种方法,有点不一样,不用比较器,直接用被测电压对电容充电,检测PIN为为有效高电平时的充电时间就可以得出电压了。

huayuliang 发表于 2011-6-1 13:40:51

回复【11楼】millwood0
-----------------------------------------------------------------------

明白了。。


回复【12楼】yeutay
-----------------------------------------------------------------------

是的,应该至少一个数量级才能得到较好的稳定性。

不过昨天又用ISIS自带的恒流源仿真了下,A/D转换线性只有很小的提高,看来问题不仅仅是在恒流源上。。
哦,还试验了 wilson 电流镜,也有稍好的效果。

需要考虑的几点:
1、为提高精度和线性,单重积分的时间就要长一些,但这要求电容增大或者积分电流减小。
   相对来说,电容越大,特性也越差。获得较小的积分电流比较麻烦,稳定性是个问题(考虑温度的变化)。
2、引脚的高阻到底多大?对积分电路有多大的影响尚未可知。


关于使用运放:
如果使用运放做电流源,还不如直接用运放做积分(这样也能得到线性的电压上升),输出至比较器。
假如真的用运放,那干脆做双重积分好了。


什么时候有空,做个 monte carlo A/D 转换的仿真玩玩。。

huayuliang 发表于 2011-6-3 00:05:45

在面包板上试验了下这个单重积分电路:
室温环境下,温度影响还可以接受,对固定电压连续测量(1次/秒),变化在 +/- 0.005v 之内。
线性还需提高,暂时先不考虑用软件的方式处理。

不同种类的电容影响极大。。。

wangqh1983 发表于 2011-6-3 10:27:35

不错,学习!不知道可否将源文件上传。我还是没弄明白它的工作过程……

huayuliang 发表于 2011-6-3 13:03:26

回复【17楼】wangqh1983吴鸣
-----------------------------------------------------------------------

机器装的7.7SP2,模拟分析那个图表都不敢最大化,如果你用7.7SP2我再给你发好了。。俺大致说下吧。

恒流源那个就不用说了,电流约为几十微安,这个不重要,保证稳定即可。大小与充电时间有关。

2313的12脚、13脚是比较器的两个输入端。比较器的输出与寄存器ACO直接相连,转换时要关闭中断。

过程很简单:
1、令12脚输出低电平,使电容放电。
2、令12脚为高阻、无上拉,同时这也是比较器工作的要求。
       此时电流源对电容充电,电压开始上升,程序不断检测ACO的状态,一旦ACO=1,则电容电压达近似等于输入电压。
       充电期间,使用一变量,不断累加,作为计数器,实际上就是测量时间。时间与电压成比例。。。。
3、测量完成。去除比较器的最小值带来误差影响(减去最低有效电压时的计数值即可)。之后计算比值....

下面是 1.000V下的测量结果:
1.002
1.003
0.990
0.991
1.002
1.003
0.991
0.990
1.002
1.003
1.002
0.999
1.002
1.003
1.002
0.990
0.991
1.004
1.003
0.990

wangqh1983 发表于 2011-6-3 13:18:19

回复【18楼】huayuliang花生
-----------------------------------------------------------------------

谢谢你的回复,大概了解了!

huayuliang 发表于 2011-6-3 17:51:13

1.002
1.002
1.002
1.002
1.002
1.003
1.003
1.003
1.003
1.003
1.003
1.003
1.003
1.003
1.003
1.002
1.002
1.002
1.002
1.002
1.002
1.002
1.002
1.002
1.002

改用 wilson 电流镜之后,跳动很小。。。

不过受温度影响特别大,继续想办法。。
(发现wilson电流镜的三个PNP管之间如果有良好的热耦合则受温度影响很小,之后再次看了wikepedia,电流镜都有这个特点。)这个问题倒是容易解决了。

只剩下线性问题仍未得到满意的解决。不过用示波器测量电容的充电电压,线性是很好的。问题出在哪儿呢?

huayuliang 发表于 2011-6-3 23:48:49

线性部分基本算是解决了,程序上的问题,俺忘记了去除比较器的最小值带来误差影响。

测量范围 0.01~4.99 (MCU 5V 供电)内误差小于 +/-0.01。比较满意了。。嘿嘿。

电容的影响不大似乎不大。
手里只有叠层电容、MKT、涤纶电容。
看来瓷片电容确实不可用,稳定起来非常慢。而且测量结果不稳定。

只剩下实际使用中的温度影响。。没做PCB。暂时就这样了。实际使用时,会用导热硅胶把三个晶体管粘结在一起。


============================================================================================================


求蒙特卡罗法的A/D转换资料...............

huayuliang 发表于 2011-6-5 19:09:50

http://cache.amobbs.com/bbs_upload782111/files_40/ourdev_645992B6SXOJ.png
(原文件名:2011-06-05 18 59 12.png)

wilson 电流镜,用手触摸三个晶体管的塑料部分(使温度上升),蛮有意思的:

触摸图中的QS3时,测量得到的数据不变;
触摸图中的QS2时,测量得到的数据增大;
触摸图中的QS1时,测量得到的数据减小;

同时触摸 QS2、QS1时,测量的到的数据变化很小。看来采用配对的PNP管并做好热耦合即可解决温度的影响。

至此,算是彻底完事了。。结贴。

huayuliang 发表于 2011-6-8 22:05:08

再次补充:
镜像恒流源或者利用发射结做温度补偿的恒流源可以直接使用普通的孪生三极管(英文名为:Multi-ChipGeneralPurposeAmplifier)
可以在google搜索到很多型号,淘宝也有销售的,价格也不高。
比如FFB3904 FFB3906或者BC847 BC857.

这样就无需处理热耦合问题了。

wangqh1983 发表于 2011-6-8 23:32:23

谢谢,分享!顶花生好贴!
页: [1]
查看完整版本: 利用AVR比较器的A/D仿真图。