搜索
bottom↓
回复: 34

软硬兼施解决100mA以下的电流显示问题(春风及时出手,提供电路改动方案)

[复制链接]

出0入0汤圆

发表于 2010-10-2 18:27:33 | 显示全部楼层 |阅读模式
【硬件:】

100m以下电流显示解决方案:在电流AD采样端加一个1M的电阻,上拉到+12V电源

(具体原理春风已作详细分析,可参考这里的15楼 http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4299438&bbs_page_no=1&bbs_id=3071)

借春风兄的图加个文字标注说明:



(原文件名:背面加的3个电阻位置与阻值.jpg)

注:----网友 page555 说在他的电源上上图中两个靠在一起的电阻,加大到4.7M 才行,

出0入0汤圆

 楼主| 发表于 2010-10-2 18:32:05 | 显示全部楼层
【软件】:

测试发现电流显示比实测电流值要小,100mA之内小1.6mA左右;电流越大这个差值越大,于是在春风的0924版的源代码中加入了“分段补偿”,经测试,精度基本满意,修改后的源程序(10-02 23:42修正电流显示没有小数点的问题):




前面传的程序电流显示没有小数点,这个是修正的ourdev_587228RJKHCZ.rar(文件大小:586K) (原文件名:20100924版程序研究修改电流显示分段补偿.rar)

出0入0汤圆

 楼主| 发表于 2010-10-2 18:36:44 | 显示全部楼层
软硬兼施之后的测试结果:
(为了拍照,临时找了一块半透明蓝色胶带贴在数码管上,因陋就简,呵呵)



3mA (原文件名:3mA.jpg)


8mA (原文件名:8MA.jpg)


14mA (原文件名:14MA.jpg)


51mA (原文件名:51MA.jpg)


77mA (原文件名:77MA.jpg)


129mA (原文件名:129MA.jpg)


160mA (原文件名:160MA.jpg)


181mA (原文件名:181MA.jpg)


228mA (原文件名:228MA.jpg)


277mA (原文件名:277MA.jpg)


340mA (原文件名:340MA.jpg)


350mA (原文件名:350MA.jpg)

出0入0汤圆

 楼主| 发表于 2010-10-2 18:38:20 | 显示全部楼层

701mA (原文件名:701MA.jpg)


849mA (原文件名:849MA.jpg)


880mA (原文件名:880MA.jpg)

出0入0汤圆

 楼主| 发表于 2010-10-2 18:43:36 | 显示全部楼层
只测过1A以下的电流显示,大于1A的没有测试过,但是如果大家发现大电流时显示偏离实测值太大,可在源代码中把电流值再分几段,分别补偿。

出0入0汤圆

发表于 2010-10-2 19:22:38 | 显示全部楼层
赞!从这个电源里学到好多东西,每个电源都有个体差异,所以一个程序也许并不能适合所有的硬件,根据自己的实际参数适当的修改程序,这也是DIY的乐趣所在


另外,请问LZ是用KEIL4编译的吗?

出0入0汤圆

 楼主| 发表于 2010-10-2 19:41:54 | 显示全部楼层
春风的这个电源确实好玩!

编译用这个: KEIL4 (MDK412)

还是春风帮我找的,迅雷下载:http://big.cr173.com/Kei_MDK.zip

出0入0汤圆

发表于 2010-10-2 20:02:53 | 显示全部楼层
谢谢,正在下,有204M,

出0入0汤圆

发表于 2010-10-2 20:15:50 | 显示全部楼层
串个可调电阻把失调电压调到最小再换上固定阻值,会不会好点?

出0入0汤圆

 楼主| 发表于 2010-10-2 20:52:50 | 显示全部楼层
回复【8楼】awfi
串个可调电阻把失调电压调到最小再换上固定阻值,会不会好点?

-----------------------------------------------------------------------

这个想法好像很有道理!

出0入0汤圆

发表于 2010-10-2 22:37:23 | 显示全部楼层
回复【9楼】wandy2010
-----------------------------------------------------------------------

每个084的失调电压都不一样的,根据我的板子,实测是,没加电阻的时候是-19.6毫伏,加1兆电阻时就变成正的48点几毫伏,显然电阻还是小了点,然后把那个电阻加到2兆时,失调电压就是15毫伏左右了,这时候的显示电流和实测电流也是很接近了,相信,用一个2兆的电阻和一个2兆左右的电位器串联调节,应该能把失调电压降到接近于0,

出0入0汤圆

 楼主| 发表于 2010-10-3 00:00:07 | 显示全部楼层
终于开窍了,这样理解的:

当电源输出端开路(不接负载)时,输出电流当然是等于 0的;此时测量AD-A点,电压一般都是偏离0v的(也有可能是负值),将这个AD-A采样点与+12V之间连接一个可调电阻,将这个电压调到大于0(正值)并且接于0,则输出电流的AD采样就从0开始了,AD采样值=0时,输出电流I也=0.

出0入0汤圆

 楼主| 发表于 2010-10-3 00:00:28 | 显示全部楼层
此时电源输出电流从0开始起调,AD采样值也从0开始,二者形成了简单的比例关系 AD= k*I
这样理论上输出电流显示值与实际值就会非常接近了,而且不用管电流值在哪一个区段内。
值得一试!如果这样搞定,程序就应该不用“分段补偿”了

出0入0汤圆

 楼主| 发表于 2010-10-3 01:39:01 | 显示全部楼层
试过了,回来报告:

我将AD-A端到+12V之间的电阻撤掉,测得此点(输出电流=0时)电压为-5.48mV(这就是直接使用春风0924版固件电流显示0000的罪魁祸首)。
电阻=1M, 此点电压=49.37mV (有点大了)。
后调整到电阻=8M,此点电压=1.71mV (危险边缘,再增大电阻,又要成负值了)。
然后直接烧春风0924版的固件,测试发现100mA以内显示值始终比实测电流约小2mA;电流增大到1A以上时,这个差值也增大。
看来电流显示的“软件分段补偿”还是有必要再加上。
注:AD-A点的电阻阻值改过之后,重新校正过;程序里面的3个补偿参数也要改一下。
与“软件分段补偿”有关的程序段(这次测到试过0-3A,精度满意):
/**********************分段补偿法来提高电流显示精度,开始************************/

               
                aa = (4.000 - 0.100) / (float)(ADIcal4 - ADIcal01);//计算AD值的每个LSB对应的实际电流值(步长)
            j = (ADIcal01 - (u16)(0.100 / aa));  //计算AD的0v电压时的底数

                //电流0.1A(100mA)以上(由AD采样值与0.1V校准数据对比)
                if(I >= ADIcal01)
                {
                  if(I > j) { I =  I - j;}    //如果AD返回值大于0V输出是的AD数据值(底数),则减掉底数
                  else  {I = 0;}                    //如果AD返回值小于或等于0v底数,就算是0电流输出
              aa = ((float)(I* aa))*1.005 ;        //乘以【1.005】补偿系数
                }
                //电流1mA到100mA之间以下(由AD采样值估计)
                else
                {
                  if(I>=(j+((u16)(ADIcal01-j)/100)))//电流介于1mA-100mA(0v底数+0.1v时AD净值的1%)
                  {
                    if(I > j) { I =  I - j;}    //如果AD返回值大于0V输出是的AD数据值(底数),则减掉底数
                    else  {I = 0;}                    //如果AD返回值小于或等于0v底数,就算是0电流输出
                aa = ((float)(I* aa))+0.002 ;//加上【2mA】补偿值
                  }
                  else        // 电流小于1mA(由AD采样值估计)
                  {
                    if(I > j) { I =  I - j;}    //如果AD返回值大于0V输出是的AD数据值(底数),则减掉底数
                    else  {I = 0;}                    //如果AD返回值小于或等于0v底数,就算是0电流输出
                aa = ((float)(I* aa))+0.0009 ;//加上【0.9mA】补偿值
                        if(aa<=0.0009){aa=0;} //加了补偿后小于1mA,就当0处理  
                  }
                }

/********************分段补偿法来提高电流显示精度,结束************************/

出0入0汤圆

发表于 2010-10-3 09:58:01 | 显示全部楼层
嗯,如果这个误差是线性的,倒是比较容易补偿的,看了你的补偿算法,我想基本上每个人都能根据自己的实际误差修改补偿系数了,嘿嘿,连我这个对C,7窍通了6窍的也能自己试试了

出0入0汤圆

发表于 2010-10-3 10:21:58 | 显示全部楼层
从软件上去补偿,那是非正规的做法啊。

出0入0汤圆

发表于 2010-10-3 11:45:57 | 显示全部楼层
回复【15楼】xpxp
从软件上去补偿,那是非正规的做法啊。
-----------------------------------------------------------------------

那什么叫正规的做法呢?你具体说说哪里不正规,有什么缺陷,不要轻描淡写的几句就了事,因为这坛子里的大多是没那么厉害的,说详细点大家才能理解透彻。

回复楼主:
另外我测试加电阻只是把电位抬高或拉低,并不影响线性,也不需要分段补偿的。
我原来分段处理是因为0点附近有偏移,现在偏移都是正向的了,把底数去掉就可以了,并不需要分段处理了。

出0入0汤圆

 楼主| 发表于 2010-10-3 12:46:44 | 显示全部楼层
回复【16楼】kdtcf 春风

回复【15楼】xpxp  
从软件上去补偿,那是非正规的做法啊。
-----------------------------------------------------------------------
那什么叫正规的做法呢?你具体说说哪里不正规,有什么缺陷,不要轻描淡写的几句就了事,因为这坛子里的大多是没那么厉害的,说详细点大家才能理解透彻。
回复楼主:
另外我测试加电阻只是把电位抬高或拉低,并不影响线性,也不需要分段补偿的。
我原来分段处理是因为0点附近有偏移,现在偏移都是正向的了,把底数去掉就可以了,并不需要分段处理了。
-----------------------------------------------------------------------

我用这样的办法做的电流显示偏差测试:
1、电流AD值处理中的这一行:
//拆分各个位送显示电流
                aa = (4.000 - 0.100) / (float)(ADIcal4 - ADIcal01);//计算AD值的每个LSB对应的实际电流值
                j = (ADIcal01 - (u16)(0.100 / aa));//计算AD的0电压时的底数

里面的0.100/aa,改成0.1000/aa,获得多了一位精度的数据,

2、在aa值分位显示时,aa=aa*1000 改为aa=aa*10000

这样小点电流显示时,最末位就是十分之一毫安了,比如13.2毫安显示:0132,然后以这个显示值与实测值比较,结论是:

【输出电流在1mA-100mA之间时,显示值比实测值少2mA左右,差值比较固定;超过100mA后,这个差值逐渐加大,1A左右时会相差4mA】

所以还是采用了分段补偿的做法。

现在对以上现象没有分析到原因(感觉理论上显示电流与实测电流之间应该是线性关系,差值应该不变),春风有时间的时候,再帮忙研究一下吧!

出0入0汤圆

发表于 2010-10-3 16:58:31 | 显示全部楼层
我按图加3个电阻,刷修改版程序(20100924版程序研究修改电流显示分段补偿.rar),重新校准后,设定恒流1.000A,但实际工作时候电源显示1.004A,外接万用表显示1.000A,现在该采取什么措施?

出0入0汤圆

发表于 2010-10-3 17:15:21 | 显示全部楼层
刷回春风9.24版,显示值和设定值一致,比实际测量值从1mA开始到4A范围内小2到3mA的样子

出0入0汤圆

发表于 2010-10-3 17:34:31 | 显示全部楼层
回复【16楼】kdtcf 春风

回复【15楼】xpxp  
从软件上去补偿,那是非正规的做法啊。
-----------------------------------------------------------------------
那什么叫正规的做法呢?你具体说说哪里不正规,有什么缺陷,不要轻描淡写的几句就了事,因为这坛子里的大多是没那么厉害的,说详细点大家才能理解透彻。
回复楼主:
另外我测试加电阻只是把电位抬高或拉低,并不影响线性,也不需要分段补偿的。
我原来分段处理是因为0点附近有偏移,现在偏移都是正向的了,把底数去掉就可以了,并不需要分段处理了。
-----------------------------------------------------------------------

    运放的失调电压并不一成不变的吧?拿个电吹风吹一吹电路板,观察看看是不是会发生变化?如果改变了,软件上又该如何补偿?

出0入0汤圆

发表于 2010-10-3 17:44:08 | 显示全部楼层
回复【20楼】xpxp

  运放的失调电压并不一成不变的吧?拿个电吹风吹一吹电路板,观察看看是不是会发生变化?如果改变了,软件上又该如何补偿? -----------------------------------------------------------------------
好家伙,又给给我提出3个问题,你倒是说说具体怎么做呀,就会说风凉话。

出0入0汤圆

发表于 2010-10-3 18:40:41 | 显示全部楼层
春风,别理他们,你设计的是电源,不是万用表,小电流误差在低成本下难以解决。
当然,采用开机时,先关输出,测量零漂,再通电,计算时扣除零漂,但如果出现负零漂,也没有办法。

出0入0汤圆

发表于 2010-10-3 18:53:24 | 显示全部楼层
换抵失调运放会不会好点.
另,可以换成4个OP07吗?

出0入0汤圆

发表于 2010-10-3 18:58:30 | 显示全部楼层
回复【22楼】cock
春风,别理他们,你设计的是电源,不是万用表,小电流误差在低成本下难以解决。
当然,采用开机时,先关输出,测量零漂,再通电,计算时扣除零漂,但如果出现负零漂,也没有办法。
-----------------------------------------------------------------------

我们加的电阻就是把电压拉到正偏移,如果是负的偏移,AD采集不到没办法补偿的。




回复【23楼】awfi
换抵失调运放会不会好点.
另,可以换成4个op07吗?

-----------------------------------------------------------------------

换运放是个简单的办法,我赶紧去找找看。
OP07是单运放,没办法直接代换,得转接,最好是pin to pin 的。

出0入0汤圆

发表于 2010-10-3 19:16:17 | 显示全部楼层
估计很难解决,我建议用一小块PCB,放上四个OP07,SO8封装,加上调零电位器,作成一块厚膜电路,代替原来的TL084。
以前我看到你用TL084,就隐隐不安。但一想是台电源,应该能对付。没想到大家的口味这么刁。

出0入0汤圆

发表于 2010-10-3 19:31:24 | 显示全部楼层
回复【25楼】cock  
估计很难解决,我建议用一小块pcb,放上四个op07,so8封装,加上调零电位器,作成一块厚膜电路,代替原来的tl084。
以前我看到你用tl084,就隐隐不安。但一想是台电源,应该能对付。没想到大家的口味这么刁。
-----------------------------------------------------------------------
这方法可能比较省钱.

出0入0汤圆

发表于 2010-10-3 19:32:54 | 显示全部楼层
回复【25楼】cock
估计很难解决,我建议用一小块pcb,放上四个op07,so8封装,加上调零电位器,作成一块厚膜电路,代替原来的tl084。
以前我看到你用tl084,就隐隐不安。但一想是台电源,应该能对付。没想到大家的口味这么刁。
-----------------------------------------------------------------------

TL084的失调是有些大,不过补偿下是够用的,阿莫买的安捷伦电源里面也是用的TL084,我就也用了TL084。

出0入0汤圆

发表于 2010-10-3 19:33:12 | 显示全部楼层
OP07速度慢,不知能否应付?

出0入0汤圆

发表于 2010-10-3 19:39:52 | 显示全部楼层
20楼说的运放失调有些吹毛求疵了,TL084的输入失调温漂是10uV/℃,就算变化范围30℃,那么10uV * 30℃ = 300uV,只有不到初始失调的十分之一,跟本就不用考虑这个问题。

出0入0汤圆

发表于 2010-10-3 20:33:15 | 显示全部楼层
25楼的办法可以考虑,春风有条件的话可以试试,我等拭目以待
另:也不是说口味刁,这个本来就是DIY的乐趣之一,没有最好,只有更好

出0入0汤圆

发表于 2010-10-3 20:50:20 | 显示全部楼层
回复【26楼】awfi
回复【25楼】cock   
估计很难解决,我建议用一小块pcb,放上四个op07,so8封装,加上调零电位器,作成一块厚膜电路,代替原来的tl084。
以前我看到你用tl084,就隐隐不安。但一想是台电源,应该能对付。没想到大家的口味这么刁。
-----------------------------------------------------------------------
这方法可能比较省钱.

-----------------------------------------------------------------------

出来了我也要订一块

出0入0汤圆

 楼主| 发表于 2010-10-3 22:05:12 | 显示全部楼层
个人感觉小电流显示零点几mA的误差,1A有1mA的误差,可以接受了,其实比一般的3位破数字表都准了。

不论是控制,还是检测,软件补偿都是正常有效的手段。

出0入0汤圆

 楼主| 发表于 2010-10-5 08:45:26 | 显示全部楼层
回复【18楼】yqjyy
我按图加3个电阻,刷修改版程序(20100924版程序研究修改电流显示分段补偿.rar),重新校准后,设定恒流1.000a,但实际工作时候电源显示1.004a,外接万用表显示1.000a,现在该采取什么措施?
-----------------------------------------------------------------------

13楼的方法可以吗?

出0入0汤圆

发表于 2010-10-5 09:21:51 | 显示全部楼层
回复【33楼】wandy2010
回复【18楼】yqjyy  
我按图加3个电阻,刷修改版程序(20100924版程序研究修改电流显示分段补偿.rar),重新校准后,设定恒流1.000a,但实际工作时候电源显示1.004a,外接万用表显示1.000a,现在该采取什么措施?
-----------------------------------------------------------------------
13楼的方法可以吗?
-----------------------------------------------------------------------

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

本版积分规则

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

GMT+8, 2024-5-10 03:37

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

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