简易数字电流表设计报告.docx
- 文档编号:11770997
- 上传时间:2023-04-01
- 格式:DOCX
- 页数:28
- 大小:267.36KB
简易数字电流表设计报告.docx
《简易数字电流表设计报告.docx》由会员分享,可在线阅读,更多相关《简易数字电流表设计报告.docx(28页珍藏版)》请在冰豆网上搜索。
简易数字电流表设计报告
2.2主要元器件的介绍4
2.3控制电路模块13
2.4元件清单16
3数字式电流表的软件设计16
3.1系统程序设计总方案16
3.2系统子程序设计17
4数字式电流表的调试19
4.1软件调试19
4.2显示结果及误差分析20
5总结22
附录1.电路原理图及仿真图23
附录2.程序代码24
参考文献26
基于单片机的简易数字电流表设计
摘要
数字电流表的诞生打破了传统电子测量仪器的模式和格局。
它显示清晰直观、读数准确,采用了先进的数显技术,大大地减少了因人为因素所造成的测量误差事件。
数字电流表是建立在数字电压表的基础上,让电压表与电阻串联,其显示的是电流,数字电压表是把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式,并加以显示的仪表。
数字电流表把电子技术、计算技术、自动化技术的成果与精密电测量技术密切的结合在一起,成为仪器、仪表领域中独立而完整的一个分支,数字电流表标志着电子仪器领域的一场革命,也开创了现代电子测量技术的先河。
本设计采用了以单片机为开发平台,控制系采用AT89C52单片机,A/D转换采用ADC0809。
系统除能确保实现要求的功能外,还可以方便进行8路其它A/D转换量的测量、远程测量结果传送等扩展功能。
简易数字电流测量电路由A/D转换、数据处理、显示控制等组成。
关键词:
单片机AT89C51A/D转换ADC0809数据处理
1.概述
1.1设计意义
通过课程设计,掌握电子设计的一般步骤和方法,锻炼分析问题解决问题的能力,学会如何查找所需资料,同时复习以前所学知识并加深记忆,为毕业设计打好基础,也为以后工作作准备。
通过对选题的分析设计,学习数字电流表的工作原理、组成和特性;掌握数字电流表的校准方法和使用方法;
1.2系统主要功能
A、利用AD转换芯片和精密电阻测量0~20mA电流
B、系统工作符合一般数字电流表要求
2.1数字式电流表系统硬件设计
硬件电路设计主要包括:
AT89S51单片机系统,A/D转换电路,显示电路。
测量最大电流为20ma,显示最大值为20.00ma。
本实验采用AT89S51单片机芯片配合ADC0809模/数转换芯片构成一个简易的数字电流表。
硬件电路设计由6个部分组成;A/D转换电路,AT89C51单片机系统,LED显示系统、时钟电路、复位电路以及测量电流输入电路。
硬件电路设计框图如图2.1所示。
2.1数字式电流表系统硬件设计框图
2.2主要元器件的介绍
2.2.1单片机AT89S51
AT89S51是美国ATMEL公司生产的低功耗、高性能CMOS8位单片机。
图4.2和4.3分别为其实物图和内部总体结构图。
AT89S51片内含有4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,看门狗(WDT),两个数据指针,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,S51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
主要性能参数
与MCS-51产品指令系列完全兼容;
4K字节在系统编程(ISP)Flash闪速存储器;
1000次擦写周期;
4.0~5.5V工作电压范围;
全静态工作模式:
0Hz~33MHz;
三级程序加密锁;
128字节内部RAM;
32个可编程I/O口线;
2个16位的定时/计数器;
6个中断源;
全双工串行UART通道;
低工耗空闲和掉电模式;
中断可从空闲模式唤醒系统;
看门狗(WDT)及双数据指针;
掉电标识和快速编程特性;
灵活的在系统编程
2.2.1AT89S51的引脚
AT89S51芯片为40引脚双列直插式封装,其引脚排列如图2.2所示。
图2.2AT89S51的引脚图
(1)VCC:
电源电压;
(2)GND:
接地;
(3)P0口:
P0口是一组8位漏极开路双向I/O口,每位引脚可驱动8个TTL逻辑门路。
对P0口的管脚写“1”时,被定义为高阻抗输入。
在访问外部数据存储器或程序存储器时,它可以被定义为数据总线和地址总线的低八位。
在FLASH编程时,P0口作为原码输入口;当FLASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。
(4)P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口的输出缓冲器可驱动4个TTL逻辑门电路。
对P1口管脚写入“1”后,被内部上拉电阻拉高,可用作输入。
P1口被外部下拉为低电平时,将输出电流,这是由于内部接有上拉电阻的缘故。
在FLASH编程和校验时,P1口作为低八位地址接收。
。
(5)P2口:
P2口是一个内部提供上拉电阻的8位双向I/O口,P2口的输出缓冲器可驱动4个TTL逻辑门电路。
对P2口管脚写入“1”后,被内部上拉电阻拉高,可用作输入。
P2口被外部下拉为低电平时,将输出电流,这是由于内部接有上拉电阻的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在访问8位地址外部数据存储器时,P2口线上的内容,在整个访问期间不改变。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
(6)P3口:
P3口是一个内部提供上拉电阻的8位双向I/O口,P3口的输出缓冲器可驱动4个TTL逻辑门电路。
对P3口管脚写入“1”后,被内部上拉电阻拉高,可用作输入。
P3口被外部下拉为低电平时,将输出电流,这是由于内部接有上拉电阻的缘故。
P3口除了一般I/O线的功能外,还具有更为重要的第二功能。
P3口同时为FLASH编程和编程校验接收一些控制信号
P3口的第二功能
端口引脚
第二功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
/INTO(外部中断0)
P3.3
/INT1(外部中断1)
P3.4
T0(定时器0外部输入)
P3.5
T1(定时器1外部输入)
P3.6
/WR(外部数据存储器写选通)
P3.7
/RD(外部数据存储器读选通)
(7)RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
(8)ALE//RPOG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
(9)/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的信号将不出现。
(10)/EA/VPP:
当保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
AT89S51有256个字节的内部RAM,80H-FFH高128个字节与特殊功能寄存器(SFR)地址是重叠的,也就是高128字节的RAM和特殊功能寄存器的地址是相同的,但物理上它们是分开的。
·定时器0和定时器1:
AT89S51的定时器0和定时器1的工作方式与AT89C51相同。
定时和计数功能由特殊功能寄存器TMOD的控制位C/T进行选择,这两个定时/计数器有4种操作模式,通过TMOD的M1和M0选择。
其中模式0、1和2都相同,模式3不同。
·定时器2:
定时器2是一个16位定时/计数器。
它既可当定时器使用,也可作为外部事件计数器使用,其工作方式由特殊功能寄存器T2CON的C/T2位选择。
定时器2有三种工作方式:
捕获方式,自动重装载(向上或向下计数)方式和波特率发生器方式,工作方式由T2CON的控制位来选择。
定时器2由两个8位寄存器TH2和TL2组成,在定时器工作方式中,每个机器周期TL2寄存器的值加1,由于一个机器周期由12个振荡时钟构成,因此,计数速率为振荡频率的1/12。
在计数工作方式时,当T2引脚上外部输入信号产生由1至0的下降沿时,寄存器的值加1,在这种工作方式下,每个机器周期的5SP2期间,对外部输入进行采样。
若在第一个机器周期中采到的值为1,而在下一个机器周期中采到的值为0,则在紧跟着的下一个周期的S3P1期间寄存器加1。
由于识别1至0的跳变需要2个机器周期(24个振荡周期),因此,最高计数速率为振荡频率的1/24。
为确保采样的正确性,要求输入的电平在变化前至少保持一个完整周期的时间,以保证输入信号至少被采样一次。
·可编程时钟输出:
定时器2可通过编程从P1.0输出一个占空比为50%的时钟信号。
P1.0引脚除了是一个标准的I/O口外,还可以通过编程使其作为定时/计数器2的外部时钟输入和输出占空比50%的时钟脉冲。
当时钟振荡频率为16MHz时,输出时钟频率范围为61Hz—4MHz。
·UART:
AT89S51的工作方式与AT89C51工作方式相同。
串口为全双工结构,表示可以同时发送和接收,它还具有接收缓冲,在第一个字节从寄存器读出之前,可以开始接收第二个字节。
(但是如果第二个字节接收完毕时第一个字节仍未读出,其中一个字节将会丢失)。
串口的发送和接收寄存器都是通过SFRSBUF进行访问的。
写入SBUF的数据装入发送寄存器,对SBUF的读操作是对物理上分开的接收寄存器进行访问。
该串口有4种操作模式(模式0、模式1、模式2和模式3),在这4种模式中,发送过程是以任意一条写SBUF作为目标寄存器的指令开始的,模式0时接收通过设置R0=0及REN=1初始化,其他模式下如若REN=1则通过起始位初始化。
·中断:
AT89S51共有6个中断向量:
两个外中断(INT0和INT1),3个定时器中断(定时器0、1、2)和串行口中断。
这些中断源可通过分别设置专用寄存器IE的置位或清0来控制每一个中断的允许或禁止。
IE也有一个总禁止位EA,它能控制所有中断的允许或禁止。
定时器2的中断是由T2CON中的TF2和EXF2逻辑或产生的,当转向中断服务程序时,这些标志位不能被硬件清除,事实上,服务程序需确定是TF2或EXF2产生中断,而由软件清除中断标志位。
定时器0和定时器1的标志位TF0和TF1在定时器溢出那个机器周期的S5P2状态置位,而会在下一个机器周期才查询到该中断标志。
然而,定时器2的标志位TF2在定时器溢出的那个机器周期的S2P2状态置位,并在同一个机器周期内查询到该标志。
·时钟振荡器:
AT89S51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,振荡电路。
外接石英晶体(或陶瓷谐振器)及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。
对外接电容C1、C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性,如果使用石英晶体,我们推荐电容使用30pF±10pF,而如使用陶瓷谐振器建议选择40pF±10F。
用户也可以采用外部时钟。
采用外部时钟的电路。
这种情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。
由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。
·Flash存储器的编程:
AT89S51单片机内部有8k字节的FlashPEROM,这个Flash存储阵列出厂时已处于擦除状态(即所有存储单元的内容均为FFH),用户随时可对其进行编程。
编程接口可接收高电压(+12V)或低电压(Vcc)的允许编程信号。
低电压编程模式适合于用户在线编程系统,而高电压编程模式可与通用EPROM编程器兼容。
·数据查询:
AT89S51单片机用DataPalling表示一个写周期结束为特征,在一个写周期中,如需读取最后写入的一个字节,则读出的数据的最高位(P0.7)是原来写入字节最高位的反码。
写周期完成后,所输出的数据是有效的数据,即可进入下一个字节的写周期,写周期开始后,DataPalling可能随时有效。
·Ready/Busy:
字节编程的进度可通过“RDY/BSY输出信号监测,编程期间,ALE变为高电平“H”后,P3.4(RDY/BSY)端电平被拉低,表示正在编程状态(忙状态)。
编程完成后,P3.4变为高电平表示准备就绪状态。
·程序校验:
如果加密位LB1、LB2没有进行编程,则代码数据可通过地址和数据线读回原编写的数据,采用如图12的电路。
加密位不可直接校验,加密位的校验可通过对存储器的校验和写入状态来验证。
·芯片擦除:
利用控制信号的正确组合并保持ALE/PROG引脚10mS的低电平脉冲宽度即可将PEROM阵列(4k字节)和三个加密位整片擦除,代码阵列在片擦除操作中将任何非空单元写入“1”,这步骤需再编程之前进行。
2.2.2A/D转换芯片ADC0809
ADC0809是典型的8位8通道逐次逼近式A/D转换器,。
它可以和微型计算机直接接口。
ADC0809转换器的系列芯片是ADC0808,可以相互替换。
2.2.2ADC0809内部逻辑结构
ADC0809的内部逻辑结构图
图中多路模拟开关可选通8路模拟通道,允许8路模拟量分时输入,并共用一个A/D转换器进行转换。
地址锁存与译码电路完成对A、B、C三个地址位进行锁存与译码,如表所示。
ADC0809通道选择表
C(ADDC)
B(ADDB)
A(ADDA)
选择的通道
0
0
0
IN0
0
0
1
IN1
0
1
0
IN2
0
1
1
IN3
1
0
0
IN4
1
0
1
IN5
1
1
0
IN6
1
1
1
IN7
2.2.3ADC0809的引脚
ADC0809芯片为28引脚双列直插式芯片,其主要功能:
(1)IN0~IN7:
8路模拟量输入通道。
(2)A、B、C:
模拟通道地址线。
这3根地址线用于对8路模拟通道的选择,其译码关系如表4.3所示。
其中,A为低地址,C为高地址,引脚图中为ADDA,ADDB和ADDC。
(3)ALE:
地址锁存允许信号。
对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。
(4)START:
转换启动信号。
START上升沿时,复位ADC0809;START下降沿时启动芯片,开始进行A/D转换;在A/D转换期间,START应保持低电平。
本信号有时简写为ST。
(5)D7~D0:
数据输出线。
为三态缓冲输出形式,可以和单片机的数据线直接相连。
D0为最低位,D7为最高。
(6)OE:
输出允许信号。
用于控制三态输出锁存器向单片机输出转换得到的数据。
OE=0,输出数据线呈高阻;OE=1,输出转换得到的数据。
(7)CLK:
时钟信号。
ADC0809的内部没有时钟电路,所需时钟信号由外界提供,因此有时钟信号引脚。
通常使用频率为500KHz的时钟信号。
(8)EOC:
转换结束信号。
EOC=0,正在进行转换;EOC=1,转换结束。
使用中该状态信号即可作为查询的状态标志,又可作为中断请求信号使用。
(9)Vcc:
+5V电源,GND:
地。
(10)Vref:
参考电压。
参考电压用来与输入的模拟信号进行比较,作为逐次逼近的基准。
其典型值为+5V(Vref(+)=+5V,Vref(-)=0V)。
ADC0809的工作原理
首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。
此地址经译码选通8路模拟输入之一到比较器。
START上升沿将逐次逼近寄存器复位。
下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。
直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。
当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。
(注意:
ALE信号常与START信号连在一起,这样连接可以在信号的前沿写入地址信号,在其后沿启动A/D转换,图为ADC0809信号的时序配合图)。
ADC0809信号的时序配合
2.2.34位一体7段LED数码管
本实验的显示模块主要由一个4位一体的7段LED数码管(SM410564)构成,用于显示测量到的电压值。
它是一个共阳极的数码管,每一位数码管的原理图如图4.5所示。
每一位数码管的a,b,c,d,e,f,g和dp端都各自连接在一起,用于接收AT89C52的P1口产生的显示段码。
C1,C2,C3,C4引脚端为其位选端,用于接收AT89C52的P3口产生的位选码。
图4.5一位数码管的原理图
4位一体7段LED数码管图
2.3控制电路模块
2.3.1总电路
本课题实验主要采用AT89S51芯片和ADC0809芯片来完成一个简易的数字电压表,能够对输入的0~20ma的模拟直流电流进行测量,并通过一个4位一体的7段LED数码管进行显示,测量误差约为0.02ma。
该电流表的测量电路主要由三个模块组成:
A/D转换模块、数据处理模块及显示控制模块。
A/D转换主要由芯片ADC0809来完成,它负责把采集到的模拟量转换为相应的数字量再传送到数据处理模块。
数据处理则由芯片AT89S51来完成,其负责把ADC0809传送来的数字量经一定的数据处理,产生相应的显示码送到显示模块进行显示;另外它还控制着ADC0809芯片的工作。
显示模块主要由7段数码管及相应的驱动组成,显示测量到的电流值。
数字式电流表的设计的总电路图见附录一。
2.3.2AT89S51的复位电路和时钟电路
AT89S51的复位电路如图所示。
当单片机一上电,立即复位;另外,如果在运行中,外界干扰等因素使单片机的程序陷入死循环状态或“跑飞”,就可以通过按键使其复位。
复位也是使单片机退出低功耗工作方式而进入正常状态的一种操作。
复位电路和时钟电路
电容C和电阻R1实现上电自动复位。
增加按键开关S又可实现按键复位功能。
一般取C=10uF,R1=1KΩ。
单片机中CPU每执行一条指令,都必须在统一的时钟脉冲的控制下严格按时间节拍进行,而这个时钟脉冲是单片机控制中的时序电路发出的。
CPU执行一条指令的各个微操作所对应时间顺序称为单片机的时序。
MCS-51单片机芯片内部有一个高增益反相放大器,用于构成震荡器,XTAL1为该放大器的输入端,XTAL2为该放大器输出端,但形成时钟电路还需附加其他电路。
电路中的器件选择可以通过计算和实验确定,也可以参考一些典型电路的参数,电路中,电容器C1和C2对震荡频率有微调作用,通常的取值范围是30±10pF,在这个系统中选择了33uF;石英晶振选择范围最高可选24MHz,它决定了单片机电路产生的时钟信号震荡频率,在本系统中选择的是12MHz,因而时钟信号的震荡频率为12MHz。
2.3.3A/D转换电路
A/D转换由ADC0809完成。
ADC0809具有8路模拟输入端口,地址线(23~25脚)可决定对哪一路模拟输入作A/D转换。
22脚为地址控制,当输入为高电平时,对地址信号进行锁存。
6脚为测试控制,当输入一个2μs宽高电平脉冲时,就开始A/D转换。
7脚为A/D转换结束标志,当A/D转换结束时,7脚输出高电平。
9脚为A/D转换数据输出允许控制,当OE脚为高电平时,A/D转换数据从该端口输出。
10脚为ADC0809的时钟输入端,利用单片机AT89S51的30脚的六分频晶振频率再通过14024二分频得到1MHz时钟。
AT89S51与ADC0809的连接电路原理图如图所示。
AT89S51与ADC0809的连接电路原理图
AT89S51与ADC0809的连接必须注意处理好3个问题:
(1)在START端送一个100μs宽的启动正脉冲;
(2)获取EOC端上的状态信息,因为它是A/D转换的结束标志;
(3)给“三态输出锁存器”分配一个端口地址,也就是给OE端送一个地址译码器的输出信号。
2.3.4显示电路
由于单片机的并行口不能直接驱动LED显示器,所以,在一般情况下,必须采用专用的驱动电路芯片,使之产生足够大的电流,显示器才能正常工作[7]。
如果驱动电路能力差,即负载能力不够时,显示器亮度就低,而且驱动电路长期在超负荷下运行容易损坏,因此,LED显示器的驱动电路设计是一个非常重要的问题。
为了简化数字式直流电流表的电路设计,在LED驱动电路的设计上,可以利用单片机P0口上外接的上拉电阻来实现,即将LED的A-G段显示引脚和DP小数点显示引脚并联到P0口与上拉电阻之间,这样,就可以加大P0口作为输出口德驱动能力,使得LED能按照正常的亮度显示出数字。
系统采用动态显示方式驱动4个数码管工作,显示电路与单片机的P1口相连来显示采集到的电流值。
显示电路原理图
2.4元件清单
器件类型
器件名
数值
数量
单片机
AT89S51
1
A/D转换器
ADC0809
1
数码管
TSEG-MP*4-CA-BLUE
1
电容
C1、C2
33uF
2
电解电容
C3
10uF
1
电阻
R1
10K
2
排阻
RP1
200
1
电阻
R2
250
1
晶振
X1
12MHz
1
3数字式电流表的软件设计
3.1系统程序设计总方案
根据模块的划分原则,将该程序划分初始化模块,A/D转换子程序和显示子程序,这三个程序模块构成了整个系统软件的主程序。
数字式直流电流表主程序框图
3.2系统子程序设计
3.2.2初始化程序
所谓初始化,是对将要用到的c51系列单片机内部部件或扩展芯片进行初始工作状态设定,初始化子程序的主要工作是设置定时器的工作模式,初值预置,开中断和打开定时器等。
3.2.3A/D转换子程序
A/D转换子程序用来控制对输入的模块电流信号的采集测量,并将对应的数值存入相应的内存单元,其转换流程图。
A/D转换流程图
3.2.4显示子程序
显示子程序采用动态扫描实现四位数码管的数值显示,在采用动态扫描显示方式时,要使得LED显示的比较均匀,又有足够的亮度,需要设置适当的扫描频率,当扫描频率在70HZ左右时,能够产生比较好的显示效果,一般可以采用间隔10ms对LED进行动态扫描一次,每一位LED的显示时间为1ms。
在本设计中,为了简化硬件设计,主要采用软件定时的方式,即用定时器0溢出中断功能实现11μs定时,通过软件延时程序来实现5ms的延时。
其转换流程图如图5.3所示。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 数字 电流表 设计 报告