搜索
bottom↓
回复: 24

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

[复制链接]

出0入0汤圆

发表于 2011-5-31 22:29:24 | 显示全部楼层 |阅读模式

(原文件名:2011-05-31 22 13 50.png)

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

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

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2011-5-31 22:49:38 | 显示全部楼层
没看明白,但是要顶。

出0入0汤圆

 楼主| 发表于 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;
}

出0入0汤圆

发表于 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.

出0入0汤圆

发表于 2011-5-31 23:07:34 | 显示全部楼层
用这种方法测电容可以精确到pf吗

出0入0汤圆

 楼主| 发表于 2011-5-31 23:09:12 | 显示全部楼层
回复【3楼】millwood0  
-----------------------------------------------------------------------

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

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

出0入0汤圆

 楼主| 发表于 2011-5-31 23:15:05 | 显示全部楼层
回复【4楼】luhuaneda  
-----------------------------------------------------------------------

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

出0入0汤圆

发表于 2011-5-31 23:16:31 | 显示全部楼层
用运放的那种就算了。
为什么呢?能讲解一下吗。
我搭过用运放做的恒流源电路,还挺准的,就是用供电比较麻烦。

出0入0汤圆

发表于 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.

出0入0汤圆

发表于 2011-5-31 23:25:15 | 显示全部楼层
mark!!

出0入0汤圆

 楼主| 发表于 2011-5-31 23:46:43 | 显示全部楼层
回复【8楼】millwood0  
-----------------------------------------------------------------------

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

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

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

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

出0入0汤圆

发表于 2011-5-31 23:51:12 | 显示全部楼层
"你提到的在电容两端并联大阻值电阻,会影响线性吧?多大值为好呢? "

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

出0入0汤圆

发表于 2011-6-1 00:50:10 | 显示全部楼层
应该R11小于R1 ,使分流量为10~15倍的基极电流,可得最佳稳定性。

出0入0汤圆

发表于 2011-6-1 08:18:57 | 显示全部楼层
用运放电流积分
那样精度就能上去了

出0入0汤圆

发表于 2011-6-1 08:50:00 | 显示全部楼层
我见人有用过这种方法,有点不一样,不用比较器,直接用被测电压对电容充电,检测PIN为为有效高电平时的充电时间就可以得出电压了。

出0入0汤圆

 楼主| 发表于 2011-6-1 13:40:51 | 显示全部楼层
回复【11楼】millwood0  
-----------------------------------------------------------------------

明白了。。


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

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

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

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


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


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

出0入0汤圆

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

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

出0入0汤圆

发表于 2011-6-3 10:27:35 | 显示全部楼层
不错,学习!不知道可否将源文件上传。我还是没弄明白它的工作过程……

出0入0汤圆

 楼主| 发表于 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

出0入0汤圆

发表于 2011-6-3 13:18:19 | 显示全部楼层
回复【18楼】huayuliang  花生
-----------------------------------------------------------------------

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

出0入0汤圆

 楼主| 发表于 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,电流镜都有这个特点。)这个问题倒是容易解决了。

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

出0入0汤圆

 楼主| 发表于 2011-6-3 23:48:49 | 显示全部楼层
线性部分基本算是解决了,程序上的问题,俺忘记了去除比较器的最小值带来误差影响。

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

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

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


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


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

出0入0汤圆

 楼主| 发表于 2011-6-5 19:09:50 | 显示全部楼层

(原文件名:2011-06-05 18 59 12.png)

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

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

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

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

出0入0汤圆

 楼主| 发表于 2011-6-8 22:05:08 | 显示全部楼层
再次补充:
镜像恒流源或者利用发射结做温度补偿的恒流源可以直接使用普通的孪生三极管(英文名为:Multi-Chip  General  Purpose  Amplifier)
可以在google搜索到很多型号,淘宝也有销售的,价格也不高。
比如FFB3904 FFB3906或者BC847 BC857.

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

出0入0汤圆

发表于 2011-6-8 23:32:23 | 显示全部楼层
谢谢,分享!顶花生好贴!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 01:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表