找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6437|回复: 18
打印 上一主题 下一主题
收起左侧

DIY高精度电压表电流表 12位ADC XPT2046 单片机程序原理图PCB

  [复制链接]
跳转到指定楼层
楼主
在实际测试中,不管是研发还是维修,我们经常需要测量设备的电压电流,根据这个情况,我做了一个电压电流表。

单片机:由于手头上STC89C52RC很多,而且这也是大多数人比较常用的,所以我用了89C52RC做处理器。
ADC采样:这个单片机没有内置ADC,我采用XPT2046做ADC采集,XPT2046不仅精度高(12位ADC),
                而且有四个通道,还很便宜,非常适合ADC采样。
基准电压:由于随着输入电压与负载的波动,会使得XPT2046的电压不是标准的5V,虽然XPT2046内置了
                基准电压,但是太小了,会导致这个表的量程不够,所以我采用了TL431产生一个基准电压。
采样电阻:电流采样使用一个0.1欧姆1%精度,2512封装的贴片电阻,如果有1A电流,则产生0.1W的功耗,
                取样电阻不会发烫,但是此时电阻只有0.1V的电压理论ADC采集是没问题,但是如果流过0.1A,
                那只有0.01V的电压,ADC采样就不合适,所以需要放大。电压采样采用两个0603的电阻并联,
                由于接了跟随器,所以这两个电阻可以取大一些降低功耗(虽然问题不大)。
放大电路:采用LM358,一路做电流采样的放大,本项目是放大10倍,另一路做电压采样跟随器。
                 LM358存在零点漂移,所以在设置放大倍数的适合可能需要进行微调。
显示:使用了OLED,测试0.96寸的,实际可以使用0.91寸即可。
电路原理图(json格式的):如下:


PCB文件(json格式的):


制作出来的实物图如下:


校正方法:接入负载,输出一个足够大的电流,1A最好,然后测试取样电阻的电压,应该是0.1V,然后可以微调LM358的电阻使得OLED的显示正确,也可以在代码微调,代码里面有微调系数。附加功能:加了三个按键,可以额外开发更多功能。代码留有很多开发的余地,并且可以自己编程序显示电阻和功率。


单片机源程序如下:
  1. #include "oled.h"
  2. #include "bmp.h"
  3. #include "xpt2046.h"
  4. typedef unsigned int u16;
  5. #define  v_verf 3.6  //基准电压最大值
  6. #define  v_aver 2 //分压比例
  7. #define  v_correction 1
  8. #define  i_correction 0.95
  9. void delay(unsigned int i)
  10. {
  11.         while(i--);
  12. }
  13. void v_datapros()
  14. {
  15.         u16 v_value;
  16.         u16 v;
  17.         
  18.     delay(50000);
  19.         v_value= Read_AD_Data(0xD4);
  20.         delay(50000);
  21.         
  22.     v=(float)v_value*v_verf/4095*1000*2; //4944
  23.         
  24.         OLED_ShowChar(8,2,v/1000+0x30,16);
  25.         OLED_ShowChar(16,2,'.',16);
  26.         OLED_ShowChar(24,2,v%1000/100+0x30,16);
  27.         OLED_ShowChar(32,2,v%100/10+0x30,16);
  28.         OLED_ShowChar(40,2,v%10+0x30,16);
  29.         

  30. }        

  31. void i_datapros()
  32. {
  33.         u16 i_value;
  34.         u16 i;
  35.         delay(50000);
  36.         i_value= Read_AD_Data(0x94);
  37.     delay(50000);
  38.         
  39. //        OLED_ShowChar(8,6,i_value/1000+0x30,16);
  40. //        OLED_ShowChar(16,6,i_value%1000/100+0x30,16);
  41. //        OLED_ShowChar(24,6,i_value%100/10+0x30,16);
  42. //        OLED_ShowChar(32,6,i_value%10+0x30,16);
  43.         
  44.         i=(float)i_value*v_verf/4095*1000*i_correction;     //ma
  45.         
  46.     OLED_ShowChar(8,6,i/1000+0x30,16);
  47.         OLED_ShowChar(16,6,i%1000/100+0x30,16);
  48.         OLED_ShowChar(24,6,i%100/10+0x30,16);
  49.         OLED_ShowChar(32,6,i%10+0x30,16);


  50.         

  51. }
  52. void main(void)
  53. {
  54.         OLED_Init(); //OLED初始化
  55.         OLED_Clear();
  56. //        OLED_DrawBMP(0,0,128,1,BMP1);
  57.     delay(50000);        
  58.         while(1)
  59.         {
  60.                 v_datapros();
  61.                 i_datapros();
  62.         }
  63. }
复制代码


Keil代码和立创格式的json文件下载:

代码.7z (122.63 KB, 下载次数: 145)


评分

参与人数 2黑币 +55 收起 理由
小当 + 5
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏21 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:307493 发表于 2022-6-24 09:51 | 只看该作者
这个制作不错
回复

使用道具 举报

板凳
ID:149799 发表于 2022-6-24 19:07 | 只看该作者
详细,做工精细,谢谢分享。
回复

使用道具 举报

地板
ID:232366 发表于 2022-6-25 14:00 | 只看该作者
不知道测量范围多大
回复

使用道具 举报

5#
ID:491577 发表于 2022-6-28 11:35 | 只看该作者
89C52只适合学习,用来做产品还ADC只能呵呵,ADC不是初学者可以做好的, 首先是电源,ADC芯片、运放必须是线性稳压电源,第二是运放,LM358与高精度无源,楼主如果在意价格把STC89C52RC和XPT2046换成STC8H,省下的钱足够买一个好点的运放。
回复

使用道具 举报

6#
ID:1028260 发表于 2022-7-1 16:17 | 只看该作者
lm358可换成op07,零漂几乎没有。
回复

使用道具 举报

7#
ID:491577 发表于 2022-7-1 17:41 | 只看该作者
ccczzzyy 发表于 2022-7-1 16:17
lm358可换成op07,零漂几乎没有。

op07虽然零漂小但是需要正负电源,不合适
回复

使用道具 举报

8#
ID:1028260 发表于 2022-7-1 18:34 | 只看该作者
hhh402 发表于 2022-7-1 17:41
op07虽然零漂小但是需要正负电源,不合适

op333可单电源,零漂几乎没有
回复

使用道具 举报

9#
ID:582138 发表于 2022-7-5 16:15 | 只看该作者
现在的零漂移运算放大器太多了,可以试一下
回复

使用道具 举报

10#
ID:620098 发表于 2022-7-21 14:53 | 只看该作者
楼主做完后测试效果如何,特别是线性度如何?
回复

使用道具 举报

11#
ID:627942 发表于 2022-7-29 20:14 | 只看该作者
可以,留个标记.
回复

使用道具 举报

12#
ID:893997 发表于 2022-8-10 10:56 | 只看该作者
hhh402 发表于 2022-6-28 11:35
89C52只适合学习,用来做产品还ADC只能呵呵,ADC不是初学者可以做好的, 首先是电源,ADC芯片、运放必须是 ...

这个ADC用的是XPT2046,没有51
回复

使用道具 举报

13#
ID:893997 发表于 2022-8-10 10:57 | 只看该作者
ccczzzyy 发表于 2022-7-1 16:17
lm358可换成op07,零漂几乎没有。

确实,只是手头LM358比较多
回复

使用道具 举报

14#
ID:893997 发表于 2022-8-10 10:57 | 只看该作者
SHANWAZI 发表于 2022-6-25 14:00
不知道测量范围多大

可以自己更改取样电阻
回复

使用道具 举报

15#
ID:893997 发表于 2022-8-10 10:58 | 只看该作者
mengfc 发表于 2022-7-21 14:53
楼主做完后测试效果如何,特别是线性度如何?

可以符合100ma-2a正常读数
回复

使用道具 举报

16#
ID:1043853 发表于 2022-9-6 21:29 来自手机 | 只看该作者
很好,很实用
回复

使用道具 举报

17#
ID:1045132 发表于 2022-9-21 15:32 | 只看该作者
431基准是不是不稳定
回复

使用道具 举报

18#
ID:1083475 发表于 2023-6-12 08:52 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

19#
ID:1083996 发表于 2023-6-16 08:43 | 只看该作者
hhh402 发表于 2022-6-28 11:35
89C52只适合学习,用来做产品还ADC只能呵呵,ADC不是初学者可以做好的, 首先是电源,ADC芯片、运放必须是 ...

这个可能就是一个创意提示方案,真的做产品肯定根据实际条件选元器件;
实际很多时候对于国内的同行来说,缺乏的只是一个创意灵感;
看国外很多的创意很值钱,后期他们买到手之后还要经过大量的实验和工艺改进才能量产化,我们对一些最初的能从零开始先驱者,总是缺乏一些关爱和包容……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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