标题: DIY毫安微安电流表(单片机10位ADC+LM358)程序原理图PCB及实物制作图片 [打印本页]

作者: zsw3721    时间: 2020-12-24 17:36
标题: DIY毫安微安电流表(单片机10位ADC+LM358)程序原理图PCB及实物制作图片
测试工程师一枚,实际工作中经常要测量产品的待机功耗和休眠功耗。通使用电流表来测产品的工作电流,突然萌生自己制作一个电流表的想法,然后学习了一下电流采样的原理,自己画了一个原理图,请同事帮忙画了PCB。程序方面借鉴了在51黑找到的一个测温度的例程。
基本设计:
单片机:使用 STC15W408AS,宽电压供电,8通道10位ADC,选择了SOP28封装引脚够用
电源:内置9V电池供电,使用LM1117-3.3V稳压芯片
检流电阻:毫安档使用1欧姆2512贴片电阻,微安档使用100欧姆2512贴片电阻。因考虑到产品实际待机工作电流(小于30mA)和休眠工作电流(小于100uA)。检流电阻的大小和精度可能在某些场合不合适,但已可以满足本项目需求。
运算放大器:使用LM358DR组成两路差分放大电路,分别放大毫安档和微安档检流电阻两端电压,放大倍数分别设置为10倍和50倍。
显示屏:LCD1602 3.3V版

调试结果:
实测LM358有一定的零点漂移,在程序中减掉零点漂移量后,毫安档和微安档的电流精度和万用表对比,结果精度非常高。LM358输出电压会比Vcc低大约不到1.5V,这一点一开始没有想到,这个会影响最大测量范围以及最大可测量点附近的精度。实际调试后,将量程确定为毫安档0-200mA和微安档0-400uA,已足够工作中的测试使用。如果要调整量程,只要调整检流电阻或者运放的放大倍数即可。

附件中有电路原理图和PCB及程序。比较基础的应用,分享给大家,希望可以给有需要的朋友带来帮助。
Altium Designer画的毫安微安电流表原理图和PCB图如下:(51hei附件中可下载工程文件)




制作出来的成品实物图如下:




微安档精度:


毫安档精度:





全部资料51hei下载地址:
程序.rar (38.04 KB, 下载次数: 903)
原理图和PCB.rar (10.88 MB, 下载次数: 1057)

作者: 51hei团团    时间: 2020-12-24 20:10
太棒了,我一直想制作一个.下面是楼主的程序:
  1. /***************************************/
  2. /*     基于STC15W408AS的电流表设计     */
  3. /*     测量范围0-200mA,0-400uA         */
  4. /*     创建者 :zsw                    */
  5. /*     创建时间:2020/12/21            */
  6. /***************************************/
  7. //2.5V基准电压接P1.0,uA采样接P1.1,mA采样接P1.2
  8. //毫安档使用1欧(5%)检流电阻,微安档使用100欧(1%)检流电阻。

  9. #include "STC15W408AS.H"
  10. #include "intrins.h"

  11. #define ADC_POWER    0x80    //ADC电源控制位
  12. #define ADC_FLAG    0x10    //ADC完成标志位
  13. #define ADC_START    0x08    //ADC启动控制位
  14. #define ADC_SPEED0    0x00    //ADC转换速度,一次转换需要540个时钟
  15. #define ADC_SPEED1    0x20    //ADC转换速度,一次转换需要360个时钟
  16. #define ADC_SPEED2    0x40    //ADC转换速度,一次转换需要180个时钟
  17. #define ADC_SPEED3    0x60    //ADC转换速度,一次转换需要90个时钟

  18. #define N 8    //ADC采样使用递推平均滤波算法,采样次数

  19. sbit lcdrs=P3^2;    //LCD1602指令和数据寄存器选择,高电平时为数据,低电平选择命令
  20. sbit lcdrw=P3^3;    //LCD1602读写选择,高电平为读,低电平为写
  21. sbit lcden=P3^4;    //LCD1602使能
  22. unsigned char Show[3]={0,0,0};    //显示数组mA
  23. unsigned char Show1[3]={0,0,0};    //显示数组uA
  24. unsigned int  ADC_Buf[N+1];        //采样数组mA
  25. unsigned int  ADC_Buf2[N+1];    //采样数值uA
  26. unsigned int current=0;            //采样毫安值
  27. unsigned int current2=0;        //采样微安值
  28. unsigned char num,ADCcount=0,ADCcount2=0;    //ADC采样次数变量
  29. unsigned char code table1[]="CURRENT1:";
  30. unsigned char code table2[]="CURRENT2:";

  31. /******************************
  32. 函数说明:延时函数,执行一次1毫秒,STC_ISP软件给出 @6MHz 1T单片机
  33. 入口参数:ms=延时毫秒数
  34. 出口参数:无
  35. ******************************/
  36. void Delay_MS(unsigned int ms)
  37. {
  38.     unsigned char i, j;
  39.     while(ms--)
  40.     {
  41.         i = 6;    j = 211;
  42.         do{
  43.             while (--j);
  44.         } while (--i);
  45.     }
  46. }

  47. /******************************
  48. 函数说明:LCD1602驱动
  49. ******************************/
  50. void write_com(unsigned char com)
  51. {
  52.     lcdrs=0;         //rs低电平为写命令
  53.     P2=com;            
  54.     Delay_MS(5);
  55.     lcden=1;         //EN先置高电平
  56.     Delay_MS(5);
  57.     lcden=0;         //短暂延时后EN置低电平
  58. }
  59. void write_dat(unsigned char dat)
  60. {
  61.     lcdrs=1;         //rs高电平为写数据
  62.     P2=dat;
  63.     Delay_MS(5);
  64.     lcden=1;
  65.     Delay_MS(5);
  66.     lcden=0;
  67. }
  68. /******************************
  69. 函数说明:初始化ADC寄存器
  70. ******************************/
  71. void Init_ADC(void)
  72. {
  73.     P1M1 |= 0x01;
  74.     P1M0 &= ~1;            //设P1.0为高阻输入。因3.3V电源很精确,暂未使用2.5V基准电压源。
  75.     P1ASF = 0x06;        //打开P1.2和P1.1口的ADC功能
  76.     ADC_RES = 0;   
  77.     ADC_RESL= 0;        //清掉ADC转换结果寄存器
  78.     ADC_CONTR = ADC_POWER | ADC_SPEED3;    //使能A/D供电,设置转换速度90T
  79. }

  80. /******************************
  81. 函数说明:LCD1602初始化
  82. ******************************/
  83. void LCD1602_Init(void)
  84. {
  85.     lcdrw=0;
  86.     lcden=0;
  87.     P2=0;
  88.     write_com(0x38);   //设置显示模式为两行5*8显示
  89.     write_com(0x0C);   //初始化,开显示
  90.     write_com(0x06);   //初始化,读写一个字符后地址指针自动加1
  91.     write_com(0x01);   //清屏
  92.     write_com(0x80);   //数据地址指针从0开始   
  93.     for(num=0;num<9;num++)            //第1行显示'CURRENT1:'
  94.         write_dat(table1[num]);   
  95.     write_com(0x80+0x40);   //数据地址指针从0开始
  96.     for(num=0;num<9;num++)            //第1行显示'CURRENT2:'
  97.         write_dat(table2[num]);
  98. }
  99. /******************************
  100. 函数说明:查询方式读取ADC转换结果
  101. 入口参数:ch  ADC采样通道
  102. 出口参数:int ADC_RES ADC转换结果
  103. ******************************/
  104. unsigned int Get_ADC_Result(unsigned char ch)
  105. {
  106.     unsigned int result;
  107.     ADC_RES = 0;   
  108.     ADC_RESL= 0;                    //清掉ADC转换结果寄存器
  109.     ADC_CONTR =ADC_POWER|ADC_SPEED3|ch|ADC_START;//配置ADC,设置转换通道,启动转换
  110.     _nop_();    _nop_();
  111.     _nop_();    _nop_();            //等待设置ADC_POWER完毕
  112.     while (!(ADC_CONTR & ADC_FLAG));//读取转换完毕标志位ADC_FLAG
  113.     ADC_CONTR &= ~ADC_FLAG;         //清除ADC_FLAG标志位
  114.     result = ADC_RES<<2|ADC_RESL;    //读取10位转换结果保存到result
  115.     return result;                  //返回ADC转换结果10位
  116. }
  117. /******************************
  118. 函数说明:获取mA值
  119. ******************************/
  120. void Get_Current1(void)
  121. {
  122.     unsigned char xx;
  123.     unsigned int sum,currentvalue;
  124.     sum = currentvalue =0;   
  125.     ADC_Buf[N]=Get_ADC_Result(2);    //将ADC转换结果放数组最高位
  126.     if( ++ADCcount < 8)        //采样初期不使用滤波算法
  127.     {   
  128.         for(xx=0;xx<N;xx++)    //准备滤波算法的数据
  129.         {
  130.             ADC_Buf[xx]=ADC_Buf[xx+1];//所有数据循环左移
  131.         }
  132.         currentvalue=ADC_Buf[N];//采样初期使用当前采样值
  133.     }
  134.     else     //只有采样次数大于8次以后才使用滤波算法   
  135.     {
  136.         ADCcount=8;    //采样次数超过8次后,固定设置为8
  137.         for(xx=0;xx<N;xx++)    //滤波算法
  138.         {
  139.             ADC_Buf[xx]=ADC_Buf[xx+1];//所有数据循环左移
  140.             sum+=ADC_Buf[xx];    //求和
  141.         }
  142.         currentvalue=sum/N;        //求平均值        
  143.     }   
  144.     currentvalue=currentvalue*0.3223; //ADC平均值转化成mA电流值
  145.     if(currentvalue>=2)
  146.         currentvalue=currentvalue-2;     //实测零点漂移了2~3mA
  147.     if(currentvalue<=3)                     //显示门槛
  148.         currentvalue=0;
  149.     current=currentvalue;
  150. }
  151.                                     
  152. /******************************
  153. 函数说明:显示mA值
  154. ******************************/
  155. void Display_mA(void)
  156. {
  157.     if(current<=200)
  158.     {
  159.         Show[0]=current%1000/100;        //电流值百位
  160.         Show[1]=current%100/10;    //电流值十位
  161.         Show[2]=current%10;        //电流值个位
  162.         write_com(0x80+0x0A);            //第1行第10个字符开始显示
  163.         if(Show[0]>0)                    
  164.             write_dat(0x30+Show[0]);    //写电流值百位
  165.         else
  166.             write_dat(' ');
  167.         if((Show[0]==0)&&(Show[1]==0))
  168.             write_dat(' ');                //写电流值十位
  169.         else
  170.             write_dat(0x30+Show[1]);
  171.         write_dat(0x30+Show[2]);        //写电流值个位
  172.         write_dat(' ');
  173.         write_dat('m');
  174.         write_dat('A');
  175.     }
  176.     else                               //超量程显示"999"
  177.     {
  178.         write_com(0x80+0x0A);
  179.         write_dat('9');
  180.         write_dat('9');
  181.         write_dat('9');
  182.         write_dat(' ');
  183.         write_dat('m');
  184.         write_dat('A');   
  185.     }
  186. }

  187. /******************************
  188. 函数说明:获取uA值
  189. ******************************/
  190. void Get_Current2(void)
  191. {
  192.     unsigned char xx;
  193.     unsigned int sum,currentvalue;
  194.     sum = currentvalue =0;   
  195.     ADC_Buf2[N]=Get_ADC_Result(1);    //将ADC转换结果放数组最高位
  196.     if( ++ADCcount2 < 8)        //采样初期不使用滤波算法
  197.     {   
  198.         for(xx=0;xx<N;xx++)    //准备滤波算法的数据
  199.         {
  200.             ADC_Buf2[xx]=ADC_Buf2[xx+1];//所有数据循环左移
  201.         }
  202.         currentvalue=ADC_Buf2[N];//采样初期使用当前采样值
  203.     }
  204.     else     //只有采样次数大于8次以后才使用滤波算法   
  205.     {
  206.         ADCcount2=8;    //采样次数超过8次后,固定设置为8
  207.         for(xx=0;xx<N;xx++)    //滤波算法
  208.         {
  209.             ADC_Buf2[xx]=ADC_Buf2[xx+1];//所有数据循环左移
  210.             sum+=ADC_Buf2[xx];    //求和
  211.         }
  212.         currentvalue=sum/N;        //求平均值        
  213.     }   
  214.     currentvalue=currentvalue*0.6445; //ADC平均值转化成uA电流值
  215.     if(currentvalue>=15)
  216.         currentvalue=currentvalue-15;     //实测零点漂移了15uA
  217.     if(currentvalue<=3)                     //显示门槛
  218.         currentvalue=0;
  219.     current2=currentvalue;
  220. }

  221. /******************************
  222. 函数说明:显示uA值
  223. ******************************/
  224. void Display_uA(void)
  225. {
  226.     if(current2<=400)
  227.     {
  228.         Show1[0]=current2%1000/100;        //电流值百位
  229.         Show1[1]=current2%100/10;        //电流值十位
  230.         Show1[2]=current2%10;            //电流值个位
  231.         write_com(0x80+0x40+0x0A);            //第2行第10个字符开始显示
  232.         if(Show1[0]>0)                    
  233.             write_dat(0x30+Show1[0]);    //写电流值百位
  234.         else
  235.             write_dat(' ');
  236.         if((Show1[0]==0)&&(Show1[1]==0))
  237.             write_dat(' ');                //写电流值十位
  238.         else
  239.             write_dat(0x30+Show1[1]);
  240.         write_dat(0x30+Show1[2]);        //写电流值个位
  241.         write_dat(' ');
  242.         write_dat('u');
  243.         write_dat('A');
  244.     }
  245.     else                               //超量程显示"999"
  246.     {
  247.         write_com(0x80+0x40+0x0A);
  248.         write_dat('9');
  249.         write_dat('9');
  250.         write_dat('9');
  251.         write_dat(' ');
  252.         write_dat('u');
  253.         write_dat('A');   
  254.     }
  255. }

  256. void main(void)
  257. {
  258.     Init_ADC();                //初始化ADC
  259.     LCD1602_Init();            //初始化LCD1602
  260.     while(1)
  261.     {        
  262.         for(num=0;num<8;num++)
  263.         {
  264.             Get_Current1();    //获取mA电流值
  265.             Get_Current2();    //获取uA电流值
  266. ……………………

  267. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

作者: zx929747216    时间: 2020-12-24 21:17
R8和R13有什么作用,可以去掉的吧
作者: AAA_MCU    时间: 2020-12-25 00:53
zx929747216 发表于 2020-12-24 21:17
R8和R13有什么作用,可以去掉的吧

提供运放差分输入偏置电流
作者: zsw3721    时间: 2020-12-26 17:08

新增NTC测温功能和秒表功能,采样和显示刷新周期由定时器控制。
NTC用的是P1.0口,因为电流采样很精确,所以没有使用基准电压源,把U2/R2/C5/C6/C7全拆掉,R2位置焊上10K 3435的NTC,C7位置焊上10K 1%的0603电阻。
效果好的很。

毫安微安电流表程序V2.1 增加NTC测温和秒表.rar

51.74 KB, 下载次数: 433, 下载积分: 黑币 -5

升级程序


作者: lovexulu    时间: 2020-12-26 20:11
不用提供Avref 15w408内部有1.19V基准。
作者: zsw3721    时间: 2020-12-26 22:07
lovexulu 发表于 2020-12-26 20:11
不用提供Avref 15w408内部有1.19V基准。

多谢指点!
作者: 93mxt    时间: 2021-1-19 22:45
zsw3721 发表于 2020-12-26 17:08
新增NTC测温功能和秒表功能,采样和显示刷新周期由定时器控制。
NTC用的是P1.0口,因为电流采样很精确, ...

楼主你好,我的MCU是20P 脚的能帮改一下程序吗
作者: zsw3721    时间: 2021-1-20 08:55
93mxt 发表于 2021-1-19 22:45
楼主你好,我的MCU是20P 脚的能帮改一下程序吗

也是STC15W408AS吗?20P的MCU,要调整一下IO口,建议LCD的数据口改到P3口,RS、RW、EN分别改到P1.3、P1.4、P1.5。建议你自己动手哟,这样才好玩。
作者: IdeaMing    时间: 2021-1-20 09:19
做的不错,具有实用价值的东西才是好东西!
作者: 梁廷明    时间: 2021-1-27 14:07
3D外壳想做来着、
作者: noway_r    时间: 2021-2-4 11:58
正需要这个,看着精度挺不错,下载学习,屏幕能小型化点便携就更好了
作者: kkk2020    时间: 2021-2-6 22:22
下面那行挺空的,加个电压显示就完美了,这个比较实用。我是买的成品毫安和微安表改的。测试脉冲型负载就换成指针微安表,数码管的反应跟不上
作者: ycs89554171    时间: 2021-2-24 11:46

做的不错,下载学习,
作者: 18176214303    时间: 2021-2-25 14:15
C程序小白入门 请教currentvalue=currentvalue*0.6445; //ADC平均值转化成uA电流值  这个0.6445如何的得来的
作者: zsw3721    时间: 2021-2-25 15:50
18176214303 发表于 2021-2-25 14:15
C程序小白入门 请教currentvalue=currentvalue*0.6445; //ADC平均值转化成uA电流值  这个0.6445如何的得来 ...

10位ADC有1024个采样分辨值,采样获得的值ADC=Vadc * (1024/Vcc),连续采样8次获得ADC平均值先赋给currentvalue。
微安采样电阻100欧,运放放大50倍,则AD通道的采样电压为Vadc=I(A)*100欧*50=I(uA)*100*50/1000000,代入上式,可算得I(uA)=currentvalue*3.3*1000000/(1024*100*50)=currentvalue*0.6445.

作者: 18176214303    时间: 2021-3-1 10:25
zsw3721 发表于 2021-2-25 15:50
10位ADC有1024个采样分辨值,采样获得的值ADC=Vadc * (1024/Vcc),连续采样8次获得ADC平均值先赋给curren ...

非常感谢 学习了
作者: 海阔天空8    时间: 2021-3-1 12:40
液晶显示就不能用中文吗?!
作者: aktuan007    时间: 2021-3-1 12:58
zsw3721 发表于 2020-12-26 17:08
新增NTC测温功能和秒表功能,采样和显示刷新周期由定时器控制。
NTC用的是P1.0口,因为电流采样很精确, ...

楼主能贴的元件清单不
作者: 18176214303    时间: 2021-3-1 16:39
zsw3721 发表于 2021-2-25 15:50
10位ADC有1024个采样分辨值,采样获得的值ADC=Vadc * (1024/Vcc),连续采样8次获得ADC平均值先赋给curren ...

电路上,实际是51倍放大吧,计算按50计算
作者: zsw3721    时间: 2021-3-1 21:42
18176214303 发表于 2021-3-1 16:39
电路上,实际是51倍放大吧,计算按50计算

微安档的运算放大器就是按50倍放大的,你可以看一下差分放大器的放大倍数计算公式。
作者: 18176214303    时间: 2021-3-2 08:47
zsw3721 发表于 2021-3-1 21:42
微安档的运算放大器就是按50倍放大的,你可以看一下差分放大器的放大倍数计算公式。

嗯,学习了
作者: paladina    时间: 2021-3-18 08:54
好东西,在制作一个 耐压测试仪正好用到参考
作者: paladina    时间: 2021-3-18 09:43
建议在 100Ω电阻两端并联一个正向压降(Vf)低一点的肖特基二极管,如VS-10BQ015HM3(210mV @ 1A )上正下负 ,保证 设备待机突变为开机时 R5两端压降不影响设备工作
作者: 大漠游民    时间: 2021-3-18 09:48


做的不错,学习学习。
作者: zsw3721    时间: 2021-3-18 14:23
paladina 发表于 2021-3-18 09:43
建议在 100Ω电阻两端并联一个正向压降(Vf)低一点的肖特基二极管,如VS-10BQ015HM3(210mV @ 1A )上正下 ...

不错的建议。谢谢。
作者: 3486635230    时间: 2021-3-20 21:53
照着楼主的资料,做一个
作者: c51流浪者    时间: 2021-4-2 08:45
感谢分享,能出个数码管显示的版本就好了,这样成本低一点
作者: cooleaf    时间: 2021-4-2 11:24
设计还是比较巧的,谢谢楼主无私分享!!
作者: zsw3721    时间: 2021-4-2 20:37
c51流浪者 发表于 2021-4-2 08:45
感谢分享,能出个数码管显示的版本就好了,这样成本低一点

数码管的功耗太大,显示的内容又有限。这块LCD1602 3.3V的屏大概7块钱,也能接受吧。
作者: hnqylgq    时间: 2021-6-21 11:35
感谢楼主分享,楼主还可以看到这个帖子么,请教下,单片机烧录时选用多大的晶振频率?谢谢!
作者: zsw3721    时间: 2021-6-21 21:34
hnqylgq 发表于 2021-6-21 11:35
感谢楼主分享,楼主还可以看到这个帖子么,请教下,单片机烧录时选用多大的晶振频率?谢谢!

选的内部6M的RC频率。
作者: maozj    时间: 2021-6-24 10:32
谢谢分享!正在学习51单片机。
作者: KinHimTang    时间: 2021-7-3 08:55
楼主, 有没有测试过AD跳动几个码
作者: zsw3721    时间: 2021-7-3 11:56
KinHimTang 发表于 2021-7-3 08:55
楼主, 有没有测试过AD跳动几个码

拿直流源接色环电阻,毫安和微安档测量值都很稳定,只波动1mA和1uA左右。
作者: SURUBU1976    时间: 2021-7-22 03:22
学习下,如果用彩屏更炫耀,下来看看
作者: SURUBU1976    时间: 2021-7-22 03:45
建议L358 VCC加R C滤波好的,
作者: wjqzywmm    时间: 2021-7-22 22:42
本帖最后由 wjqzywmm 于 2021-7-24 11:49 编辑

感谢楼主分享,有个小疑问:Get_Current1()中adc结果为什么要循环左移呢?小于8直接给数组赋值应该也可以吧。
今天改造自己的程序,明白了循环左移的意义

作者: yangxf0120    时间: 2021-7-22 23:21
谢谢分享DIY毫安微安电流表
作者: suqianfu    时间: 2021-8-2 16:21
kkk2020 发表于 2021-2-6 22:22
下面那行挺空的,加个电压显示就完美了,这个比较实用。我是买的成品毫安和微安表改的。测试脉冲型负载就换 ...

提高一下刷新速度就好很多了
作者: 老韩    时间: 2021-8-6 06:55
做的不错,具有实用价值的东西才是好东西!
作者: Coolguyisme    时间: 2021-9-18 21:57
电流检测的端口是串联在电路中检测,经过运放出来需要接到单片机的adc接口上吗?
作者: 13356013356    时间: 2021-9-19 13:54
太棒了,做的实在是太好了!还有精致的外壳!
作者: 勇往直前05    时间: 2021-10-22 16:31
请问下输入端没有输入时,运放还是有一定电压输出。这个问题怎么克服?

作者: zsw3721    时间: 2021-10-22 21:59
勇往直前05 发表于 2021-10-22 16:31
请问下输入端没有输入时,运放还是有一定电压输出。这个问题怎么克服?

这个运放有一定的零点漂移,程序中做了处理,减去了一个OFFSET
作者: zb651017    时间: 2021-12-4 20:11
好的资料,值得收藏借鉴。
作者: qwa1234    时间: 2022-1-6 14:06
lovexulu 发表于 2020-12-26 20:11
不用提供Avref 15w408内部有1.19V基准。

楼主用的stc15w内部基准是1.27,误差比较大,adc参考电压是vcc,在vcc不稳定的情况下才需要用内部基准先算出vcc,vcc稳定的情况下没必要用到基准电压
作者: 无名氏1957    时间: 2022-1-18 16:34
原理图和PCB.rar (10.88 MB, 下载次数: 351)
内容如下:
currentmeter.PrjPCB
currentmeter.PrjPCBStructure
Design Rule Check - PCB1.drc
Design Rule Check - PCB1.html
DocuCentre_SC2020_x32@1716_451690.exe
PCB1.PcbDoc
PCB1.PcbDoc.htm
PCB1.PcbDocPreview
PCB1 PCB ECO 2020-12-11 12-51-16.LOG
PCB1 PCB ECO 2020-12-11 17-56-19.LOG
PCB1 PCB ECO 2020-12-11 18-01-24.LOG
PCB1 PCB ECO 2020-12-11 18-08-35.LOG
PCB1 PCB ECO 2020-12-11 18-38-07.LOG
PCB1 PCB ECO 2020-12-11 8-14-41.LOG
Sheet1 SCH ECO 2020-12-10 16-14-31.LOG
Sheet1 SCH ECO 2020-12-10 16-20-19.LOG
Sheet1 SCH ECO 2020-12-10 16-20-40.LOG
Sheet1 SCH ECO 2020-12-10 16-20-55.LOG
Design Rule Check - PCB1.drc
Design Rule Check - PCB1.html
Sheet1.SchDoc
Sheet1.SchDocPreview
PCB1.PcbDocPreview
Sheet1.SchDocPreview
现有一事不明, 就是这原理图和PCB 图要如何打开,或是能清楚一二, 就好了.
作者: 矿山的生活    时间: 2022-3-23 23:17
只想看下原理图
作者: diy619    时间: 2022-3-27 08:17
请问电流检测输入端可以直接串联在产品电源正极的回路上吗?比如24V电源正的回路上。不会把LM358整坏吧?
作者: zsw3721    时间: 2022-3-27 11:55
diy619 发表于 2022-3-27 08:17
请问电流检测输入端可以直接串联在产品电源正极的回路上吗?比如24V电源正的回路上。不会把LM358整坏吧?

不能超量程使用。设定的毫安档量程是0-200mA。如果回路电流太大,在检流电阻上产生较大的电压可能会损坏检流电阻和运放电路。
作者: diy619    时间: 2022-3-27 15:31
zsw3721 发表于 2022-3-27 11:55
不能超量程使用。设定的毫安档量程是0-200mA。如果回路电流太大,在检流电阻上产生较大的电压可能会损坏 ...

谢谢回复!超量程使用是有可能会损坏运放电路。我的意思是你实际使用时,将电流检测输入端串联在电源正端应该也是没有问题的吧,比如我把电流表串联在48V电源正极端测量电流。
作者: zsw3721    时间: 2022-3-28 09:50
diy619 发表于 2022-3-27 15:31
谢谢回复!超量程使用是有可能会损坏运放电路。我的意思是你实际使用时,将电流检测输入端串联在电源正端 ...

没有问题的。我就是串在48V电池组正极与保护板之间使用的。
作者: diy619    时间: 2022-3-28 15:56
zsw3721 发表于 2022-3-28 09:50
没有问题的。我就是串在48V电池组正极与保护板之间使用的。

好的,谢谢!
作者: nyabin    时间: 2022-3-31 11:29
程序书写工整、清晰!适合下载学习。
作者: qq603599910    时间: 2022-4-1 14:37
LM358 用国产的吗?我之前测试过两款国产358,漂移和线性让我只敢当电压比较器用,当然确实是可以轨到轨运行.
作者: rayo    时间: 2022-4-20 16:29
请问电流输入输出口要连接什么
作者: zsw3721    时间: 2022-4-21 08:46
rayo 发表于 2022-4-20 16:29
请问电流输入输出口要连接什么

要串连在需要测量电流的地方,只能单向使用注意电流方向。
作者: ralphtw    时间: 2022-4-21 17:17
很棒的設計, very good skill
作者: zhl411022    时间: 2022-5-18 15:42
用tp09会好点吗
作者: linyinyun06    时间: 2022-5-19 14:57
为什么我按楼主的PCB图打的板,下载同样的程序,测试出来的电流微安波动很大?
作者: yaoyao2022    时间: 2022-5-19 20:53
很给力,是在用心做产品的。
作者: lihui2558    时间: 2022-5-21 08:43
说实话,做这个开源精神非常赞,但是这个误差绝对是非常大的,选用的元器件远远达不到UA要求
作者: szmj    时间: 2022-6-10 09:19
太赞了,没积分了,只能看看
作者: ccczzzyy    时间: 2022-6-10 09:41
最好也能测量交流电流。
作者: wuwei520    时间: 2022-6-10 11:52
这个表思路非常不错啊
作者: yygdzjs    时间: 2022-6-10 20:36
看了几张图片,业余用用,觉得还不错,想下载看看.
作者: ccczzzyy    时间: 2022-6-11 12:25
原理图和pcb是AD格式的 只能用AD打开哦

作者: ccczzzyy    时间: 2022-6-11 15:47
zsw3721 发表于 2020-12-26 17:08
新增NTC测温功能和秒表功能,采样和显示刷新周期由定时器控制。
NTC用的是P1.0口,因为电流采样很精确, ...

谢谢楼主的分享,能否将原理图和pcb转成图中要求格式。谢谢。因为 我用立创EDA,原格式打不开。


作者: ccczzzyy    时间: 2022-6-12 08:54
zsw3721 发表于 2021-10-22 21:59
这个运放有一定的零点漂移,程序中做了处理,减去了一个OFFSET

可以用op07试试,零票几乎没有‘’
作者: dl0720    时间: 2022-6-15 21:01
非常不错,正需要到这资料
作者: yctjs    时间: 2022-6-16 09:23
好东西!楼主用心了!学习学习!
作者: jxf19    时间: 2022-7-8 13:29
不错哦,找了好很久才找到你这个毫安和微安的检测电路
作者: jxf19    时间: 2022-7-11 09:09
用LM258是不是可以代替LM358?有LM258现成的
作者: kiki900330    时间: 2022-7-12 19:17
result = ADC_RES<<2|ADC_RESL;    //读取10位转换结果保存到result
这句确定可以正常运行吗?ADC_RES是8位的值,左移两位就会把高两位结果丢掉
应该先把ADC_RES的值赋值给一个16位变量后再左移
作者: lksbbs    时间: 2022-7-12 20:15
93mxt 发表于 2021-1-19 22:45
楼主你好,我的MCU是20P 脚的能帮改一下程序吗

改脚位都需要人帮忙,你咋混到工程师的哦
作者: lksbbs    时间: 2022-7-12 20:31
楼主有没有用16位或更高位的模数芯片做电压表,一次测量0.1uA 到6mA  这样,我现在纠结取样电阻,本想着使用个500Ω大电阻,这样就不需要放大电路了, 但是又测量低电压时电流上不去, 不想使用放大电路和切换电路如何搞定这个超低电压测量的问题呢?主要是速度和同时测量数量太多,使用切换电路,电路就太臃肿,速度也上不去.
作者: 红花无常    时间: 2022-7-16 22:41
大侠,能不能问一下,这个能测交流吗?我有一个实验,要测比较微弱的次级线圈的感应电流或电压,不用很准确,甚至测出多少值都无所谓,只要知道有电流还是没有电流即可,可以用这个吗?
作者: n0si9na1    时间: 2022-7-17 00:44
感谢分享,虽然是两年前的贴子,感觉淘到宝了
作者: yygdzjs    时间: 2022-7-20 08:54
使用 STC15W408AS这个型号挺多人用的,有时间找一下;觉得挺好, 对于UA电流测试学习一下.
作者: raymondau    时间: 2022-8-12 22:22
请问楼主TL431那里的C5和C6主要起到什么作用?需要用到4.7UF的陶瓷贴片电容?能用其他容量的代替吗?

作者: raymondau    时间: 2022-8-12 22:23
请问楼主TL431那里的C5和C6主要起到什么作用?需要用到4.7UF的陶瓷贴片电容?能用其他容量的代替吗?
作者: wufa1986    时间: 2022-8-13 08:51
这还是手动切换啊,其实完全可以做到软件自动切换
作者: 13872888583    时间: 2022-8-13 09:32
好东西,感谢楼主,
作者: wellhope    时间: 2022-8-17 08:14
请问这个NTC的ADC采样值怎么计算出来的?谢谢!
作者: wellhope    时间: 2022-8-17 08:17
请问一下楼主,NTC的ADC值是怎么算出来的?谢谢!
作者: heitudi    时间: 2022-9-4 23:36
建议运放端加基准偏置电源,用差分放大器的效果会更好,还有档位的切换可以考虑加mos管来控制
作者: lzh1762    时间: 2022-9-6 09:08
请问下有这个磨具的链接可以分享下吗?
作者: javahou    时间: 2022-9-6 22:12
qq603599910 发表于 2022-4-1 14:37
LM358 用国产的吗?我之前测试过两款国产358,漂移和线性让我只敢当电压比较器用,当然确实是可以轨到轨运行.

什么牌子的国产,杂牌的话,还是得注意点
作者: cdlongbo    时间: 2022-9-20 16:47
很有学习意义。
作者: luting    时间: 2022-9-21 08:53
不错!谢谢楼主分享,如果可以再分享个套件链接。
作者: shuiquan3    时间: 2022-9-28 20:31
太棒了,我一直想制作一个
作者: shuiquan3    时间: 2022-9-28 20:33
太棒了,我一直想制作一个
作者: zmc419    时间: 2022-10-2 10:17
LM358失调电压怎么样处理
作者: yyzf998    时间: 2022-10-20 23:15
怎么提升PCB文件有病毒呢?什么情况?
作者: dyx811    时间: 2022-10-21 19:37
我记得LM358灵敏度没有做到如此之高啊,达到100μV,楼主是如何做到的。

作者: dyx811    时间: 2022-10-21 19:44
dyx811 发表于 2022-10-21 19:37
我记得LM358灵敏度没有做到如此之高啊,达到100μV,楼主是如何做到的。

358灵敏度(或者分辨率)应该在1000μV(1mV)很多书籍都是这么解释的。
按电路1μA采集到的电压是100μV,我不确定358能不能检测的到,我很多使用的是OP07.
作者: dyx811    时间: 2022-10-21 19:47
dyx811 发表于 2022-10-21 19:37
我记得LM358灵敏度没有做到如此之高啊,达到100μV,楼主是如何做到的。

好多技术书籍上都说358可以能做到1mV的,但这个电路以1μA算,得到的电压是100μV,358能反应出来,实在想不通。
这么微弱的信号我习惯用OP07
作者: 张国民    时间: 2022-10-25 23:03
dyx811 发表于 2022-10-21 19:47
好多技术书籍上都说358可以能做到1mV的,但这个电路以1μA算,得到的电压是100μV,358能反应出来,实在 ...

到哪里能买到便宜又好的运放
作者: 小白艾世雄    时间: 2022-11-4 09:36
感谢楼主分享!最近关注数字电源,看帖回帖赚金子。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1