找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 43228|回复: 33
收起左侧

自制智能型ICL7135四位半表头

  [复制链接]
ID:223055 发表于 2017-7-28 17:16 | 显示全部楼层 |阅读模式
本文作者:Edward

本文已在《无线电》2012年12期发表。转载请注明出处。这里发表的是原文,和杂志上略有不同。

这个制作以前发过一次帖子:《最近完工的智能型ICL7135四位半表头》这次在这里将详细内容发上来,是想在网络上留个印记,方便自己引用,也是希望和大家分享一下。

正文开始:

       最近需要一个精度比较高的电压表头,但网上卖的表头多是三位半的,精度不够,也有一些四位半表头但性价比不高。正好手里有几片ICL7135,以前也有做过四位半表头的尝试,而且去年也学习了单片机,于是就有了做一个智能型ICL7135四位半表头的想法。历经2个月的学习、设计和修改,最终做出了这样一款表头。
       表头使用ICL7135作为ADC,其是一款高精度的单片4½位ADC,拥有多路复用的BCD输出以及与单片机兼容的控制信号接口,可以很容易的与单片机连接,实现智能化。生产其兼容芯片的厂家有很多,我手里是Maxim和TI生产的。ICL7135应用电路由模拟部分和数字部分组成,表头整体设计思路是:模拟部分采用典型电路和推荐元件参数,数字部分采用单片机提供ICL7135所需时钟、采集输出、驱动数码管。后来,考虑到只做一个简单功能的表头实在是无趣,所以就将单片机的部分IO口和串口引出以便实现与上位机通信或自动控制等功能。
       确定好整体思路和预期功能后就开始进行电路设计了。ICL7135模拟部分典型电路如图1所示。

174436gwdtd7vdgngfgguf.png

图1 ICL7135电路模拟部分

       模拟部分元件没什么可说的,基本都采用推荐值。其中比较关键的是积分电容的选择和基准电压的提供。积分电容对于ICL7135这类双积分ADC是至关重要的,它直接影响积分非线性、翻转、比例误差,即它的好坏直接决定了表头的准确性。而ICL7135对积分电容的要求尤为严格。积分电容必须具有低的电介质吸收特性(亦称浸润或电介质迟滞)。将基准输入(REF)接至IN HI可以检测积分电容介质吸收(此法一般称为自检),良好的积分电容读数将会是9999,与这个读数之间的任何偏差都可能是由于电介质吸收引起的。一般来说,特氟龙(聚四氟乙烯)、聚苯乙烯和聚丙烯的电介质吸收特性低至0.02%,一般陶瓷和聚碳酸酯电容的典型值为0.2%,银云母和钽电容为1.0%-5.0%,铝电解电容高达10%或以上。ICL7135手册上建议积分电容最好使用特氟龙和聚丙烯电容,要求不高时可以使用聚苯乙烯和聚碳酸酯电容。在实际选择时,优质高耐压的CBB21或CBB22电容效果不错,一般自检读数能够达到9996或以上,但是买到能有9999自检读数的电容是挺不容易的。我挑选了几批电容测试,读数从9994-9996都有,就是没有9997以上的,比较遗憾。
       开始的时候,想使用LM385作为基准,但是LM385本身参数并不很好,不同厂家的温漂从20~150ppm/℃都有,而且买到正品LM385不太容易。后来在网上搜索了一段时间,发现拆机的Linear公司产电压基准LT1009很好。LT1009是具有0.2%初始精度,15ppm典型温漂,25ppm最大温漂的2.5V并联型基准,它有一个调节引脚,可以在±5%范围内调整输出电压。LT1009的性能超过了一般的LM385,而且拆机件能够保证芯片是真品也廉价。基准电压电路如图2所示,Rref1和Rref2将LT1009输出的电压分压,通过调节电位器Rref3将分压之后的电压调整到准确的1.000V。1.000V电压的微调还有另一种比较常见的方式,即只微调分压电阻,由于种种原因我没选择这种方式。调整电位器要使用如3/8寸Square Trimpot.®微调电位器(3296电位器)等这类精密多圈电位器,以保证精确性和稳定性。

174437zt2m1cpo1ichpw0n.png

图2  基准电压电路

       传统的ICL7135表头很多是使用4MHz晶振经CD4060分频获得125kHz频率,BCD输出用74LS48之类译码,最后再用三极管或达林顿驱动器驱动数码管,电路复杂不说,成本还高。既然要使用单片机,那么就要让其完成所有功能。STC10F04XE是增强型的8051单片机,拥有4kB的ROM,512B的RAM,5kB的EEPROM以及独立波特率发生器, IO口可设置为多种输出模式;可以实现时钟信号、数据读取、数码管驱动、状态指示、按键控制和串口通信等全部功能。其引脚定义如图3所示。
174438hqvavmeeppqmhcvy.png

图3  STC10F04XE引脚图

       考虑程序的复杂度,决定采用比较简单的读取BCD方式采集ICL7135数据。以前我也尝试使用Busy信号来采集数据,但并不成功,所以这次并不打算采用这种方式。ICL7135输出数据有5位数字,D5-D1端按顺序分别输出高电平脉冲进行不间断的扫描。B8、B4、B2、B1端输出当前位的BCD值。当一次正常的数据转换结束后,D5-D1重新开始不断扫描(超量程时不是)。每次数据转换后的D5-D1的第一遍扫描过程中的每个脉冲的中间, 185631qi2x9x29rkbyirtd.png 端都会有一个很短的低电平脉冲,之后直到下次转换结束前都没有额外的脉冲。该脉冲能帮助及时采集ADC结果,防止重复采集,简化程序。上述过程的时序如图4所示。

184151fh5ff9y1yddrn5tp.png

图4  数字扫描和输出时序

       将BCD输出端和D1-D4按顺序连接在单片机的P0口(D5悬空即可),用于采集ICL7135数据,端接到单片机中断0端(P3.2)。单片机的P1.0口是独立波特率发生器的可编程输出时钟端口,用该端口输出稳定的时钟信号给ICL7135。为了良好的抑制50Hz工频干扰,ICL7135的信号积分阶段周期应是工频周期的整数倍,信号积分阶段周期为10000个时钟周期,则最佳时钟频率=50×10000/N,N为整数。所以可选的时钟频率可为100kHz、125kHz等。STC10F04XE是1T单片机,所以可以选择4MHz、6Mhz等较低频率的晶振以减小功耗和干扰,但选择晶振频率要注意保证P1.0口能输出所需的时钟频率。使用6MHz的晶振能产生100kHz、120kHz、125kHz等多种频率,但4MHz晶振无法产生120kHz等频率。本来我是想选择4MHz晶振的,但是考虑到程序中要能设定多种时钟频率,所以最终使用了6MHz晶振。为了能够直接驱动数码管和8个LED,所以选择了这种IO口可设为推挽输出的单片机。数码管各段需要用电阻限流,以防烧坏数码管和单片机。ICL7135的其余端口根据PCB布线的方便性接在单片机的不同IO口上,在P4.0口设置一轻触开关,同时单片机引出串口、中断1、部分IO口以供通信、控制之用。
       ICL7135通常需要±5V供电,提供双电源实在是不方便,所以采用手册推荐的ICL7660电荷泵负压电路,简单稳定。供电电路还额外增加了AMS1117-5.0稳压芯片,除使用5V外还可以使用6V-15V电压供电,扩展了供电范围,同时还设计了超压保护和反接保护电路,以保护芯片安全。不要小看这个超压保护和反接保护,在平时做一些实验调试时,各种线会很多很乱,各种电压也会有很多,接错线是很正常的事,如果没有这些保护,接错的后果往往很严重。我在修改测试这个表头的过程中,就有过将13V电源误接入5V供电输入上,幸好当时没偷懒,保护电路也焊上了,不然芯片肯定不保了。

180239zbusquo43qs22363.png

图5  整机电路(清晰大图请下载本贴附件)

       整机电路图见图5。将电路画好检查无误之后就开始进行电路板布线了。布线主要看个人的学习和经验了。各元件优先选择贴片元件以减小体积和成本,为了便于更换积分电容,我特意制作了能兼容多种脚距的封装。布线时要注意元件的合理布局,数字模拟要分开,模拟地和数字地要单点接地。如果想使用洞洞板搭建电路,那就要注意不要使用纸基的洞洞板,纸基的洞洞板很容易受潮,漏电大,会严重影响ICL7135模拟电路的工作。我曾经使用过纸基板搭电路,工作很不稳定。这也是我选择PCB打样的原因之一。经历两次打样和修改后,最终的PCB如下:

174443ff1zkuc8zfkf1yfd.jpg

174447ms520ujupoqqajq5.jpg

图6  PCB空板

       焊接元件时要注意首先将所有贴片元件焊接好,仔细检查已焊接元件有无错误,LED、1N4148和稳压二极管的极性不能接反。然后将除数码管、ICL7135和排针以外的直插元件焊接好,再次检查已焊接元件有无错误。最后依次焊接ICL7135、数码管和排针,数码管和ICL7135方向一定不要装反。如果想日后能够更换积分电容,可使用28Pin的IC插座来安装ICL7135。元件焊接好后,可以通电试一下机,如果没有下载过程序,LED1-8会不断闪烁。将元件焊接好之后是这样的:

174450ebjvb1bdbjau2mzf.jpg

174453m3rork66ms3srmzt.jpg

图7  焊接好元件之后

       设计工作的最后一步自然是程序设计了。其实程序设计、测试和电路板打样、修改是交互进行的。第一次打样出的PCB很可能有很多问题,如设计不合理等等。在写程序和测试时发现问题就要修改电路板,然后再编程再打样再测试,如此反复,最后设计出成品。可以说,程序是整个作品的灵魂,因为表头的全部功能都体现在程序上,程序的好坏直接决定了作品的成败。我花了很长时间来设计这个程序,也尝试使用了一些以前未曾用过的程序结构,得到了比较好的效果。整个程序最关键的自然是ADC数据的读取和显示。最初我没有使用信号和中断,结果数据读取不及时,有时还会丢字或者是重复读取,而且还不好与显示函数协调。经过反复尝试和研读ICL7135手册,最后利用的电平脉冲信号产生中断来读取和更新数据。读取ADC数据后结束中断返回正常运行,由于读取数据过程很短,能够不影响显示正常的显示、通信和控制,同时也节省了单片机资源,简化了程序。把主要的做好,其他的功能逐步添加就可以了。由于单片机的功能很强,同时也有EEPROM,可以方便的存储数据,所以我设计了一个菜单来方便功能的设置,设置数据存储在EEPROM中实现掉电不丢失。现在功能菜单也有了,就可以完全任凭自己的想象力来发挥了,因为MCU无限可能。我目前实现的功能有数据保持、串口发送测量值设定、工作频率设定、小数点位置设定、菜单超时退出和还原出厂设置等。未来要实现的功能有:开关短按功能设置,电压超阈值报警,平均值计算,差值计算,软件校准,自动控制等等。板子上只设计了一个轻触开关,基本够用了。长按按键进入设置菜单,短按按键数据保持。以后要增加短按功能设置,可以更改短按的功能。这个程序也是我第一次使用定时器来进行按键按检测。我没有使用常用的软件延时和中断检测法。因为单片机要不断扫描数码管,不能打断扫描太长时间,不然数字显示会闪烁或中断。不使用中断的原因是单片机外部中断资源比较有限,我想把中断1端口预留给以后控制使用;另外程序编写得循环很快,每次循环只扫描一个数码管,这样一次循环的时间就很短,不会影响到按键的判断。程序也有向上位机发送测量结果的功能如果设置打开了串口发送数据,那么每次测量结束就会将测量结果以BCD码通过串口发送出去。多参考单片机的数据手册,再开动脑筋就可以做出很多很有意思的功能。编写程序的时候要注意IO口的工作模式,数据接收要设为开漏,数据发送和发送接收口要设为准双向口,数码管段驱动口要根据选取的数码管类型(共阴或共阳)设为推挽或开漏,数码管位驱动口同样,要设为开漏或推挽。
       当程序编写调试完成后,在投入使用前最后一个重要工作就是对表头进行校准,以保证测量的准确性。原则上应该使用4½及以上位数的数字电压表或万用表,将其输入端与表头输入端并联,并输入一个1V左右稳定的电压,调节电位器使二者显示一致的方式来调整。但是考虑可能没有4½或以上位数的仪表,也可以用精度良好的3½或3¾位万用表来简单调整。方法是使用万用表200.0mV或400.0mV量程电压档,将其输入端与本机输入端并联,并输入一个100-200mV稳定的电压,调节电位器,调整使二者显示一致即可。
       最后就可以将表头投入使用了。由于我没有更好的积分电容,所以表头精度略差,实际满量程误差是正负十几个字左右。整机耗电在30mA左右。目前工作正常,与上位机通信也很稳定。


174457uuu5r0i2iuquraro.jpg

图8  工作中的表头

电路图大图下载:
05.png
单片机的源程序:
4.5Digital Voltmeter MCU Program V1.0.rar (5.91 KB, 下载次数: 403)
回复

使用道具 举报

ID:47634 发表于 2017-8-3 07:06 | 显示全部楼层
很好很好,学习学习
回复

使用道具 举报

ID:249545 发表于 2017-11-26 22:09 | 显示全部楼层
用英特希尔的ICL7135制做4位电压电流表,比ICL7107的3位高端了10倍!
回复

使用道具 举报

ID:249545 发表于 2017-11-26 22:10 | 显示全部楼层
感谢楼主老师分享ICL7135 4位表制做资料!
回复

使用道具 举报

ID:283207 发表于 2018-2-9 13:01 | 显示全部楼层
感谢楼主分享ICL7135 4位表制做资料,程序已下载,仔细学习。
回复

使用道具 举报

ID:289512 发表于 2018-3-9 09:32 | 显示全部楼层
很好的方案,谢谢楼主分享。
回复

使用道具 举报

ID:320325 发表于 2018-5-17 17:45 | 显示全部楼层
好东西,已收藏;
回复

使用道具 举报

ID:52915 发表于 2018-7-6 11:58 | 显示全部楼层
太好了,谢谢分享!
回复

使用道具 举报

ID:61493 发表于 2018-11-19 08:09 | 显示全部楼层
感谢楼主分享ICL7135 4位表制做资料,学习学习。
回复

使用道具 举报

ID:428400 发表于 2018-11-24 19:46 | 显示全部楼层
有去做PCB吗?
回复

使用道具 举报

ID:74143 发表于 2018-12-10 21:49 | 显示全部楼层
谢谢楼主分享。
回复

使用道具 举报

ID:162957 发表于 2018-12-11 17:33 | 显示全部楼层

谢谢楼主分享。
回复

使用道具 举报

ID:103151 发表于 2018-12-25 22:06 | 显示全部楼层
非常好的资料
回复

使用道具 举报

ID:205532 发表于 2019-1-18 09:41 | 显示全部楼层
好资料,感谢楼主分享啊
回复

使用道具 举报

ID:73762 发表于 2019-1-29 09:49 | 显示全部楼层
能分享PCB文件吗,手头有7135,向做一个
回复

使用道具 举报

ID:474288 发表于 2019-1-31 10:36 | 显示全部楼层
多谢楼主分享  辛苦
回复

使用道具 举报

ID:467275 发表于 2019-3-28 15:09 | 显示全部楼层
很好很好,学习学习
回复

使用道具 举报

ID:168038 发表于 2019-4-11 08:38 | 显示全部楼层
如果能分享PCB文件就好了,刚好手头有7135
回复

使用道具 举报

ID:42468 发表于 2019-9-12 17:04 | 显示全部楼层
学习了,单独用TCL7135可以做数显4位半电压电流表吗
回复

使用道具 举报

ID:618416 发表于 2019-10-5 06:25 | 显示全部楼层
非常感谢学习
回复

使用道具 举报

ID:149799 发表于 2019-10-8 13:41 | 显示全部楼层
学习了,程序好复杂啊
回复

使用道具 举报

ID:491577 发表于 2019-10-11 17:59 | 显示全部楼层
楼主的数码管都是单片机IO直接驱动,8个LED全亮时电流大于50mA,楼主不担心单片机会挂掉吗?
回复

使用道具 举报

ID:491577 发表于 2019-10-11 18:06 | 显示全部楼层
楼主的电源用料差了点吧,模拟、数字部分公用一个电源想要达到4位半的精度有点难,起码用两块稳压芯片分开供电。
回复

使用道具 举报

ID:11393 发表于 2019-11-15 20:22 | 显示全部楼层
很好很好,学习学习
回复

使用道具 举报

ID:106489 发表于 2019-12-24 10:11 | 显示全部楼层
谢谢分享!正好需要学习这个芯片!
回复

使用道具 举报

ID:671776 发表于 2019-12-30 15:14 | 显示全部楼层
多谢楼主分享,学习学习
回复

使用道具 举报

ID:60026 发表于 2020-1-22 16:23 | 显示全部楼层
看看学习下!谢谢分享!
回复

使用道具 举报

ID:361863 发表于 2020-4-18 20:17 | 显示全部楼层
好好学习研究一下
回复

使用道具 举报

ID:507641 发表于 2020-7-1 22:03 | 显示全部楼层
做电子需要高精度电压表,谢谢分享!学习又可以有工具。强!
回复

使用道具 举报

ID:413201 发表于 2021-6-9 00:31 | 显示全部楼层
没有图纸提供下载吗?
回复

使用道具 举报

ID:97023 发表于 2021-6-29 10:59 | 显示全部楼层
hhh402 发表于 2019-10-11 17:59
楼主的数码管都是单片机IO直接驱动,8个LED全亮时电流大于50mA,楼主不担心单片机会挂掉吗?

动态扫描LED,任意时刻只有一个在工作。
回复

使用道具 举报

ID:1013588 发表于 2022-9-23 20:40 | 显示全部楼层
要做一个电压实时显示,做一个试试,楼主牛
回复

使用道具 举报

ID:1052903 发表于 2022-12-29 12:00 | 显示全部楼层
感谢楼主分享ICL7135 4位表
回复

使用道具 举报

ID:1083475 发表于 2023-6-12 08:30 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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