




免费预览已结束,剩余16页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机原理及应用课程设计报告设计题目:数字式电阻测量仪学 院 专 业 班 级 姓 名 学 号 指导教师 申 明 2011 年 秋季 学期摘 要本设计电阻测量是利用A/D转换原理,将被测模拟量转换成数字量,并用数字方式显示测量结果的电子测量仪表。通常测量电阻都采用大规模的A/D转换集成电路,测量精度高,读数方便,在体积、重量、耗电、稳定性及可靠性等方面性能指标均明显优于指针式万用表。其中,A/D转换器将输入的模拟量转换成数字量,逻辑控制电路产生控制信号,按规定的时序将A/D转换器中各组模拟开关接通或断开,保证A/D转换正常进行。A/D转换结果通过计数译码电路变换成ASCII码,最后驱动显示器显示相应的数值。本系统以单片机AT89C51为系统的控制核心,结合A/D转换芯片AT89C51设计一个电阻测量表,能够测量一定数值之间的电阻值,通过LCD液晶显示。具有读数据准确,测量方便的特点。关键词:单片机(AT89C51); 电压;A/D转换;TLC548目 录设计要求11 电路的论证与对比11.1 方案一11.2 方案二21.3 方案的对比与比较22 系统硬件电路设计22.1 CPU时钟22.2 A/D转换电路模块22.2.1主要性能42.2. 2 TLC548芯片的组成原理42.2.3 TLC548引脚功能42.3 主控芯片AT89C51模块52.3.1主要功能特性62.3.2 主要引脚功能62.4 显示控制电路的设计及原理93程序设计103.1 初始化程序103.2主程序103.3显示子程序113.4 A/D转换测量子程序144系统调试与分析155元器件清单176 总结与致谢187 参考文献19附一:原理图附二:程序18电阻测量设计要求电阻测量(需要简单的外围检测电路,将电阻转换为电压)基本功能:测量0200的电阻值。功能扩展:测量01M的电阻值,由LCD液晶显示。1 电路的论证与对比1.1 方案一利用单稳或电容充放电规律等,可以把被测电阻量的大小转换成脉冲的宽窄,即脉冲的宽度Tx与Rx成正比。只要把此脉冲和频率固定不变的方波(以下称为时钟脉冲)相与,便可以得到计数脉冲,将它送给数字显示器。如果时钟脉冲的频率等参数合适,便可实现测量电阻。计数控制电路输出的脉冲宽度Tx应与Rx成正比,其电路原理图及具体555单稳态触发器的构成及仿真如图1所示。用555构成的单稳态电路在正常工作条件下输出脉冲的宽度Tx与Rx的函数关系是: 图1 方案一原理图所产生的时间误差可能达到百分之十五,再加上其他原因产生的误差,测量是的时间延迟太大。 1.2 方案二利用8位串行模数转换器TLC548采集电压信号,然后转换成数字信号存在变量中。采用的ADC是TLC548,电阻测量原理是用标准电阻与被测电阻Rx相串,将标准电阻两端的电压Vo作为ADC的参考电压,将Rx的两端电压作为ADC的被测量.那么待测的大小Rx=Ux/(Uo/Ro)=Ro*Ux/Uo,经ADC后,其中Uo为满值,则Ux/Uo=测量所得的8位数/256,则Rx=Value/265*Ro =1.3 方案的对比与比较由于课程设计的要求是电阻测量需要简单的外围检测电路,将电阻转换为电压,测量0200的电阻阻值,由数码管显示。通过比较以上两个方案,可知方案二相对来说比较适合。所以选用方案二作为实验方案。 2 系统硬件电路设计2.1 单片机提供时钟信号单片机提供时钟信号。 2.2 A/D转换电路模块1)TLC548/549TLC548和TLC549是以8位开关电容逐次逼近A/D转换器为基础而构造的CMOS A/D转换器。它们设计成能通过3态数据输出与微处理器或外围设备串行接口。TLC548和TLC549仅用输入/输出时钟和芯片选择输入作数据控制。TLC548的最高I/OCLOCK输入频率为2.048MHz,而TLC549的I/OCLOCK输入频率最高可达1.1MHz。TLC548和TLC549的使用与较复杂的TLC540和TLC541非常相似;不过,TLC548和TLC549提供了片内系统时钟,它通常工作在4MHz且不需要外部元件。片内系统时钟使内部器件的操作独立于串行输入/输出端的时序并允许TLC548和TLC549象许多软件和硬件所要求的那样工作。I/OCLOCK和内部系统时钟一起可以实现高速数据传送,对于TLC548为每秒45,500次转换,对于TLC549为每秒40,000次的转换速度。TLC548和TLC549的其他特点包括通用控制逻辑,可自动工作或在微处理器控制下工作的片内采样-保持电路,具有差分高阻抗基准电压输入端,易于实现比率转换(ratiometricconversion)、定标(scaling)以及与逻辑和电源噪声隔离的电路。整个开关电容逐次逼近转换器电路的设计允许在小于17s的时间内以最大总误差为0.5最低有效位(LSB)的精度实现转换图4 A/D转换电路原理图2.2.1主要性能1分辨率为8位二进制数。2模拟输入电压范围0V5V,对应A/D转换值为00HFFH。3每路A/D转换时间最长17s。4总失调误差最大为0.5LSB5工作频率为500kHz,输出与TTL电平兼容。6 VREF+VREF-1V,可用于较小信号的采样 AD转换连接图2.2.2极限参数电源电压:6.5V;输入电压范围:0.3VVCC0.3V;输出电压范围:0.3VVCC0.3V;峰值输入电流(任一输入端):10mA;总峰值输入电流(所有输入端):30mA;工作温度: TLC549C:070TLC549I:4085TLC549M:551252.2.3工作原理 工作原理TLC548均有片内系统时钟,该时钟与I/O CLOCK是独立工作的,无须特殊的速度或相位匹配。其工作时序如图2所示。当CS为高时,数据输出(DATA OUT)端处于高阻状态,此时I/O CLOCK不起作用。这种CS控制作用允许在同时使用多片TLC549时,共用I/O CLOCK,以减少多路(片)A/D并用时的I/O控制端口。一组通常的控制时序为: (1)将CS置低。内部电路在测得CS下降沿后,再等待两个内部时钟上升沿和一个下降沿后,然后确认这一变化,最后自动将前一次转换结果的最高位(D7)位输出到DATA OUT端上。(2) 前四个I/O CLOCK周期的下降沿依次移出第2、3、4和第5个位(D6、D5、D4、D3),片上采样保持电路在第4个I/O CLOCK下降沿开始采样模拟输入。(3)接下来的3个I/O CLOCK周期的下降沿移出第6、7、8(D2、D1、D0)个转换位,(4)最后,片上采样保持电路在第8个I/O CLOCK周期的下降沿将移出第6、7、8(D2、D1、D0)个转换位。保持功能将持续4个内部时钟周期,然后开始进行32个内部时钟周期的A/D转换。第8个I/O CLOCK后,CS必须为高,或I/O CLOCK保持低电平,这种状态需要维持36个内部系统时钟周期以等待保持和转换工作的完成。如果CS为低时I/O CLOCK上出现一个有效干扰脉冲,则微处理器/控制器将与器件的I/O时序失去同步;若CS为高时出现一次有效低电平,则将使引脚重新初始化,从而脱离原转换过程。 在36个内部系统时钟周期结束之前,实施步骤(1)(4),可重新启动一次新的A/D转换,与此同时,正在进行的转换终止,此时的输出是前一次的转换结果而不是正在进行的转换结果。若要在特定的时刻采样模拟信号,应使第8个I/O CLOCK时钟的下降沿与该时刻对应,因为芯片虽在第4个I/O CLOCK时钟下降沿开始采样,却在第8个I/O CLOCK的下降沿开始保存。 AD转换时序图 2.2.4引脚功能单片机的P1、0端口作A/D转换数据读入用,P1、1端口用作A/D转换片选P1、2端口作A/D转换数据输出用。2.3主控芯片AT89C51模块 AT89C51是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C51单片机可为您提供许多较复杂系统控制应用场合。AT89C51管脚图AT89C51有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口。3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。2.3.1主要功能特性与MCS51产品指令和引脚完全兼容8k字节可重擦写Flash闪速存储器1000次擦写周期 全静态操作:0Hz24MHz三级加密程序存储器32个可编程I/O口线低功耗空闲和掉电模式 3个16位定时/计数器可编程串行UART通道2.3.2 主要引脚功能VCC : 电源GND: 地P0 口:P0 口是一组8 位漏极开路型双向I/O 口,也即地址/数据总线复用口。P1口:P1口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX)。 P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR)时,P2口送出高八位地址。在这种应用中,P2口使用很强的内部上拉发送1。在使用8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。P1口和P2口的第二功能如下表1所示。表1 P0和P1口的第二功能引脚号功能特性P1.0T2(定时/计数器2外部计数脉冲输入),时钟输出P1.1T2EX(定时/计数2捕获/重载触发和方向控制)P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,P3口输出缓冲器能驱动4个TTL逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89C52特殊功能(第二功能)使用,在flash编程和校验时,P3口也接收一些控制信号。具体功能如表2所示:表2P3口的第二功能端口引脚第二功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2外中断0P3.3外中断1P3.4T0(定时/计数器0)P3.5T1(定时/计数器1)P3.6外部数据存储器写选通P3.7外部数据存储器读选通RST: 复位输入。晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。看门狗计时完成后,RST脚输出96个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址为8EH的SFR的第0位置 “1”,ALE操作将无效。这一位置 “1”,ALE仅在执行MOVX或MOVC指令时有效。否则,ALE将被微弱拉高。这个ALE使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当AT89C52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。EA/VPP:访问外部程序存储器控制信号。为使能从0000H到FFFFH的外部程序存储器读取指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC。在flash编程期间,EA也接收12伏VPP 电压。XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。XTAL2:振荡器反相放大器的输出端。2.4 显示控制电路的设计及原理 显示子程序采用动态扫描法实现4位数码管的数值显示。测量所得的A/D转换数据放数组中,测量数据在显示时须经过转换成为十进制ASCII码放在数组中。本系统显示部分采用液晶管动态扫描显示。动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。 1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中:电路接口设计,AT889C51的P0口作为数据的输入端,P2.0和P2.1,P2.2作为控制信号的输出端,连接图 图8 数码管显示电路3程序设计3.1 初始化程序void Init() TMOD=0x01; TH0=(65536-200)/256; TL0=(65536-200)%256; EA=1; ET0=1; TR0=1; a8255_CON=0x80; a8255_PB=0xff; a8255_PA=0xff;3.2主程序void main() /int i,j;Init(); CLK=0; while(1) ad0809(); delay(300) ; t=(float)(256-get_val); t = 10000.000*(t/(float)get_val);/ 电压变电阻值 display(t); 3.3显示子程序void display(unsigned int t) unsigned charx0,x1,x2,x3,x4,x5; x0=t%10;/个位 x1=t/10%10;/十位 x2=t/100%10;/百位 x3=t/1000%10;/千位 x4=t/10000%10;/万位 x5=t/100000%10;/十万位 a8255_PA=0xdf; a8255_PB=dis_tablex0; /个位显示 delay(180); a8255_PA=0xff; a8255_PA=0xef; a8255_PB=dis_tablex1; / 十位显示 delay(180); a8255_PA=0xff; a8255_PA=0xf7; a8255_PB=dis_tablex2; /百位显示 delay(180); a8255_PA=0xff; a8255_PA=0xfb; a8255_PB=dis_tablex3; /千位显示 delay(180); a8255_PA=0xff; a8255_PA=0xfd; a8255_PB=dis_tablex4; /万位显示 delay(180); a8255_PA=0xff; a8255_PA=0xfe; a8255_PB=dis_tablex5; delay(180);/十万位显示 a8255_PA=0xff; 3.4 A/D转换测量子程序unsigned char ad0809() ST = 0; _nop_(); _nop_(); ST = 1; _nop_(); _nop_(); ST = 0; _nop_(); _nop_(); while (EOC=0); /开始装换 _nop_(); OE = 1; get_val = P0; OE = 0; return get_val;4系统调试与分析1 软件调试将用keil编译产生的HEX文件下载到单片机开发板中,通过调节被测电阻,看数码管上的显示数值是否接近已知的电阻值,若不对,则反复调试程序,直到正确为止。对于51单片机,最初设计用晶振电路RC震荡来作为CPU的时钟,因为找不到晶振器件,询问同学发现51单片机内部自带了时钟,去掉了振荡周期部分。开始做基础部分选择0200的电阻,基准电阻选择不知如何是好,选择了电流源并联RX,RN的方法,后发现无法实现,经询问老师同学,上网查阅,改为用多档开关直接串联200电阻,作为AD转换的基准输入。发现可以实现测量100200,但是无法实现0100.初步估计基准电阻选择不合适。后尝试改变基准电阻为100,发现可以测量。得出结论,量程与测量之间的关系。扩展了多档开关种的基准电阻,1,100,1K,10K,100K,1M,量程也随之得到了扩展。最开始采用 ADC0809进行转换。结果并行输出虽然比较方便,但是因为8090没有办法设置参考电压,所以无法利用串联分压来进行电阻的计算,最后上网上查找资料,问同学,将方案改为使用TLC548。除了输入电压,更加入了参考电压部分。因为改变了AD转换芯片,则现在转换后的结果变为了串行输出。则对原来的算法也需要改正。原来的算法是将读入的电压数值变为除十求余BCD码,再由七段显示。算法相对比较简单,但现在为了方便起见,依次将读入的数据放在数组中,利用循环由高到低按位累加,变为十进制数,然后再变成相应的ASCII码,利用显示程序,直接由液晶显示。2 性能分析1.误差W=100%,如表3所示。2.误差分析AD的分辨率只有八位,分辨率小,所以测量小电阻的时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论