您好,欢迎访问三七文档
华南理工大学广州学院《数字式电压表设计》课程报告姓名:黄日志学号:201230085232序号:01学院:电子信息工程学院班级:12电信(1)指导老师:李欣完成时间:2013-12-31目录序言一.系统设计要求……………………………………………1二.系统设计思路……………………………………………1三.元器件选择与介绍………………………………………2四.设计方案…………………………………………………4五.电路与电路图……………………………………………6六.作品调试…………………………………………………9七.总结……………………………………………………12参考文献数字式电压表设计课程报告序言数字电压表是指表面从指针改为数字的电压表,即采用数码管显示或者液晶面板显示。传统的指针式刻度电压表功能单一,精度低,容易引起视差和视觉疲劳,因而不能满足数字化时代的需求。采用单片机的数字电压表,将连续的模拟量如直流电压转化成不连续的离散的数字形式并加以显示,从而精度高、抗干扰能力强,可扩展性强、集成方便,还可与PC实时通信。数字电压表是诸多数字化仪表的核心与基础。以数字电压表为核心,可以扩展成各种通用数字仪表、专用数字仪表及各种非电量的数字化仪表。因此,我们很有必要对数字式电压表做更深更全面的研究学习。一.系统设计要求1.可以测量0-5V的8路输入电压值;2.测量结果可在四位LED数码管上轮流显示后单路选择显示;3.测量最小分辨率为0.019V;4.测量误差约为+0.02V;二.系统设计思路1.根据设计要求,选择AT89S51单片机作为核心控制器件。2.A/D转换采用ADC0809实现。与单片机的接口为P0口和P2端口的高四位引脚。3.电压显示采用4位一体的LED数码管。4.LED数码管的段码输入,由并行端口P1产生;位码输入,由并行端口P3低三位产生。图11主控模块显示模块A/D转换模块三.元器件选择与介绍1.单片机的选择AT89S52是美国ATMEL公司生产的低功耗、高性能CMOS8位单片机。AT89S52片内含有4k字节Flash闪速存储器,128b内部RAM,4个8位I/O口线,看门狗(WDT),两个数据指针,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,S51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。因此我选择AT89S52为系统的控制器。AT89S51芯片为40引脚双列直插式封装,其引脚排列如图2所示2.A/D转换器的选择A/D转换器大致分有三类:一是双积分A/D转换器,二是逐次逼近式A/D转换器,三是并行A/D转换器。在转换精度、转换速率、以及经济上的考虑,该系统决定选用逐次逼近式A/D转换器的ADC0809型。ADC0809是典型的8位MOS型8通道逐次逼近式A/D转换器,每采集一次一般需100μs。2图3ADC0809的内部逻辑结构图图中多路模拟开关可选通8路模拟通道,允许8路模拟量分时输入,并共用一个A/D转换器进行转换。地址锁存与译码电路完成对A、B、C三个地址位进行锁存与译码。3.4位一体7段LED共阴数码管图4一位数码管的原理图图54位一体7段LED数码管图34.所需元器件清单器件类型器件名单位数量单片机AT89S5211A/D转换器ADC080911数码管**4-CC-BLUE11开关按键开关11电容C1、C233uF2电解电容C310uF1电阻R11K1排阻RP111变阻器RV11K1晶振X11MHz1表1四.设计方案1.系统程序设计总方案根据模块的划分原则,将该程序划分初始化模块,A/D转换子程序和显示子程序,这三个程序模块构成了整个系统软件的主程序,如图6所示。图6数字式直流电压表主程序框图2.系统子程序设计4开始初始化调用A/D转换子程序调用显示子程序结束(1)初始化程序所谓初始化,是对将要用到的MCS_51系列单片机内部部件或扩展芯片进行初始工作状态设定,初始化子程序的主要工作是设置定时器的工作模式,初值预置,开中断和打开定时器等。(2)A/D转换子程序A/D转换子程序用来控制对输入的模块电压信号的采集测量,并将对应的数值存入相应的内存单元,其转换流程图如图7所示。图7A/D转换流程图(3)显示子程序显示子程序采用动态扫描实现四位数码管的数值显示,在采用动态扫描显示方式时,要使得LED显示的比较均匀,又有足够的亮度,需要设置适当的扫描频率,当扫描频率在70HZ左右时,能够产生比较好的显示效果,一般可以采用间隔10ms对LED进行动态扫描一次,每一位LED的显示时间为1ms。在本设计中,为了简化硬件设计,主要采用软件定时的方式,即用定时器0溢出中断功能实现11μs定时,通过软件延时程序来实现5ms的延时。其转换流程图如图8所示。5启动转换A/D转换结束?输出转换结果数值转换显示结束开始图8显示子程序流程图五.电路与电路图1.总电路本课课实验主要采用AT89S21芯片和ADC0809芯片来完成一个简易的数字电压表,能够对输入的0~5V的模拟直流电压进行测量,并通过一个4位一体的7段LED数码管进行显示,测量误差约为0.02V。该电压表的测量电路主要由三个模块组成:A/D转换模块、数据处理模块及显示控制模块。A/D转换主要由芯片ADC0809来完成,它负责把采集到的模拟量转换为相应的数字量再传送到数据处理模块。数据处理则由芯片AT89S51来完成,其负责把ADC0809传送来的数字量经一定的数据处理,产生相应的显示码送到显示模块进行显示;另外它还控制着ADC0809芯片的工作。显示模块主要由7段数码管及相应的驱动组成,显示测量到的电压值。6动态显示子程序选择通道显示缓冲区首地址送R0指向右边第一位取出要显示的数据查等显示数据的显示码送7段码到P1口IS延时处理4位显示完成?返回计算下一位位选码修改显示缓冲区地址N图9总电路图2.AT89S52的复位电路和时钟电路AT89S52的复位电路如图10所示。当单片机一上电,立即复位;另外,如果在运行中,外界干扰等因素使单片机的程序陷入死循环状态或“跑飞”,就可以通过按键使其复位。复位也是使单片机退出低功耗工作方式而进入正常状态的一种操作。图10复位电路与时钟电路73.A/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的连接电路原理图如图11所示。图11AT89S52与ADC0809的连接电路原理图4.显示电路由于单片机的并行口不能直接驱动LED显示器,所以,在一般情况下,必须采用专用的驱动电路芯片,使之产生足够大的电流,显示器才能正常工作[7]。如果驱动电路能力差,即负载能力不够时,显示器亮度就低,而且驱动电路长期在超负荷下运行容易损坏,因此,LED显示器的驱动电路设计是一个非常重要的问题。8图12数码管显示六.作品调试1.软件调试软件调试的主要任务是排查错误,错误主要包括逻辑和功能错误,这些错误有些是显性的,而有些是隐形的,可以通过仿真开发系统发现逐步改正。Proteus可以完成单片机系统原理图电路绘制、PCB设计,更为显著点的特点是可以与uVisions4工具软件结合进行编程仿真调试。(1)软件代码#includereg51.h#defineucharunsignedchar#defineuintunsignedintucharcctable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};ucharcctabledp[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};ucharaddata;//数字量uintvvalue;//模拟量sbitale=P3^0;sbitoe=P3^1;sbiteoc=P3^2;sbitstart=P3^3;sbitclk=P3^4;sbitw0=P2^0;sbitw1=P2^1;sbitw2=P2^2;sbitw3=P2^3;9voiddelay(uintx){uinti,j;for(i=x;i0;i--)for(j=110;j0;j--);}voidt0init(){TMOD=0x02;TH0=255;TL0=255;EA=1;ET0=1;TR0=1;}voidt0serv()interrupt1{clk=~clk;}voiddisp()//显示函数{P0=cctabledp[vvalue/1000];w0=0;delay(1);w0=1;P0=cctable[vvalue%1000/100];w1=0;delay(1);w1=1;P0=cctable[vvalue%100/10];w2=0;delay(1);w2=1;P0=cctable[vvalue%10];w3=0;delay(1);w3=1;}voidadc()//转换函数10{ale=1;start=1;ale=0;start=0;while(eoc==0);oe=1;addata=P1;oe=0;vvalue=addata*1.0*5/256*1000;//数字量转换成模拟量显示}voidmain(){t0init();while(1){adc();disp();}}2.硬件调试(1)按照总电路图,手工认真焊出作品:(2)通电前检查作品的开路短路情况,是否有虚焊或漏焊等情况:(3)把程序烧进单片机;(4)发现程序不能正常运行,可以按照以下步骤排查问题:1)检查原理图连接是否正确;2)检查原理图与器件上引脚是否一致;3)用万用表检查是否有虚焊,引脚短路现象;4)飞线。用别的的口线进行控制,看看能不能对其进行正常操作,多试验,才能找到问题出现在什么地方等等。(5)完成通电后,发现数码管有几段不亮,把单片机p1口置0,逐个排查:(6)发现数码管的小数点不对,进行程序修改.3.误差分析(1)实际使用中元件器参数会随着使用环境而变化,如温度湿度等等。(2)由于单片机AT89C52为8位处理器,当输入电压为5.00V时,ADC0808输出数据值为255(FFH),因此单片机最高的数值分辨率为0.0196V(5/255)。这就决定了电压表的最高分辨率只能到0.0196V。11七.总结通过差不多半个月的努力,终于我们把作品完成了,我们确实产生了许多感想,有许多的心得体会。下面简要列出一些:(1)细节决定成败:使用软件和编写程序时一定要注意每一个细节,一个分号的遗漏也会造成错误。制作前一定要做好规划设计,反复论证和计算,防止考虑不到的地方使得做好的东西需要翻工。如果制作或使用中发现问题,既极大地打击积极性和自信心,还会极大地消耗时间,拖延项目的进度。制作硬件也一定要耐心细致,极小的失误都会造成短路等问题而直接造成大错。在设计中,如果没有考虑到哪怕任何一个细节,都有可能让没考虑到的情况造成BUG,使各个子程序的时序和运行之间可能会互相干涉和冲突。(
本文标题:单片机课程报告
链接地址:https://www.777doc.com/doc-4188733 .html