项目2 数字电压表设计与调试_第1页
项目2 数字电压表设计与调试_第2页
项目2 数字电压表设计与调试_第3页
项目2 数字电压表设计与调试_第4页
项目2 数字电压表设计与调试_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目2

数字电压表设计与调试

子项目1

并行ADC实现数字电压表子项目2

串行ADC实现数字电压表项目2

数字电压表设计与调试子项目1并行ADC实现数字电压表教学目标掌握ADC0808用法;完成程序设计与调试。任务1十六进制显示电压表利用单片机控制ADC0808,对变阻器电压进行实时数据采集,并将电压数据按照两位十六进制形式显示在数码管上。一、任务说明任务1十六进制显示电压表1.硬件分析(1)关于ADC0808*概述:ADC0808是8位8模拟量输入通道的逐次逼近型A/D转换器。8通道多路转换器能直接连通8个单端模拟信号中的任何一个,输出8位二进制数字量。二、任务分析任务1十六进制显示电压表*ADC0808的引脚ADDCADDBADDA通道000001010011100101110111IN0IN1IN2IN3IN4IN5IN6IN7任务1十六进制显示电压表ADC0808为28脚双列直插式封装,各引脚功能如下:IN0~IN7:8路模拟量输入端,信号电压范围为0~5V。ADDA、ADDB、ADDC:模拟输入通道地址选择线,其8种编码分别对应IN0~IN7。ALE:地址锁存允许输入信号线,该信号的上升沿将地址选择信号A、B、C地址状态锁存至地址寄存器。START:A/D转换启动信号,其下降沿启动内部控制逻辑开始A/D转换。EOC:A/D转换结束信号,当进行A/D转换时,EOC输出低电平,转换结束后,EOC引脚输出高电平,可作中断请求信号或供CPU查询。任务1十六进制显示电压表OUT1~OUT8:8位数字量输出端,接单片机并行口。OE:输出允许控制端,高电平有效。高电平时将A/D转换后的8位数据送出。CLOCK:时钟输入端,它决定A/D转换器的转换速度,其频率范围为10~1280KHz,500KHz时对应转换速度约为128us。VREF(+)、VREF(-):内部D/A转换器的参考电压输入端。Vcc:+5V电源输入端,GND为接地端地。一般REF(十)与VCC连接在一起,REF(一)与GND连接在一起。任务1十六进制显示电压表*ADC0808的工作过程选择模拟量输入通道ALE、START置1START清0,启动AD转换判断EOC信号转换完成,OE置1读取数字量OE清0EOC=0EOC=1任务1电路图共阳极数码管500K信号源generators滑线变阻器POT-HG电位器(参照)模拟量通道1任务1十六进制显示电压表任务要求对变阻器电压进行实时采集和显示,设计的程序应该不断将采集到的模拟电压转换为数字量并按照两位十六进制数显示在数码管上。

所以程序应该是数码管动态显示模块(voiddisplay())和AD转换模块(voidadc0808())的无限循环。2.软件分析任务1十六进制显示电压表#include“reg51.h“//51单片机头文件

sbitADDA=P2^0;//定义关键引脚sbitADDB=P2^1;sbitADDC=P2^2;sbitSTART=P2^3;sbitOE=P2^4;sbitEOC=P2^5;unsignedchardat=0;//数字量电压值unsignedcharseg[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//共阳极七段码0~f2.软件分析—变量定义部分任务1十六进制显示电压表voiddisplay()//2位动态显示子函数{ unsignedchark; P3=0x01;//通过P3口选中个位数码管

P1=seg[dat%16];//电压值对16取余,余数就是个位显示值,//从数组seg中取对应的七段码送字型口P1

for(k=0;k<150;k++);//总线延时

P3=0x02;//通过P3口选中十位数码管

P1=seg[dat/16];//电压值除以16,商就是十位显示值,从数//组seg中取对应的七段码送字型口P1

for(k=0;k<150;k++);//总线延时}2.软件分析—数码管动态显示部分任务1十六进制显示电压表2.软件分析—AD转换部分选择模拟量输入通道ALE、START置1START清0,启动AD转换判断EOC信号转换完成,OE置1读取数字量OE清0EOC=0EOC=1任务1十六进制显示电压表voidmain()//主函数{ while(1) { display(); adc0808(); }}2.软件分析—主函数任务1十六进制显示电压表三、任务实施步骤1:在Proteus软件中建立仿真电路文件。步骤2:在Keil中设计AD转换部分程序,汇编无误后,生成目标文件(.HEX)。步骤3:在Proteus软件中加载目标文件,仿真运行观察结果。步骤4:结果无误,请求教师检查、评价。步骤5:编制项目报告。任务1十六进制显示电压表四、任务拓展显示原始电压值,例如2.25V。任务2原始电压显示电压表利用单片机控制ADC0808,对变阻器电压进行实时数据采集,并将原始电压数据显示在数码管上,如2.25。一、任务说明任务2原始电压显示电压表1.原始电压值求取思路(以2.25V为例)变阻器电压经过ADC0808转换之后得到数字量dat=2.25*255/5=115=73H将dat(73H)转化回原始电压2.25V有两种方法(1)dat除以51(255/5=51),即115/51=2.25(2)dat乘以分辨率(5/255=0.0196),即115*0.00196=2.25

二、任务分析任务2原始电压显示电压表2.原始电压值转换程序无论哪一种方法都需要编程取出个位、十分位和百分位的显示值2、2、5,送交数码管显示,个位数码管的小数点需要单独点亮。

因此先定义显示代码数组chardis[3],分别存放个位、十分位和百分位的显示值。(1)dat除以51dis[2]

=数字量dat对51取商(个位)dis[1]

=上次运算的余数扩大十倍再对51取商(十分位)dis[0]

=上次运算的余数扩大十倍再对51取商(百分位)任务2原始电压显示电压表(2)dat乘以分辨率直接乘以0.0196得到2.25,不方便取显示值,应乘以1.96,得到225,然后取显示值。因此先定义变量int

vol;vol=dat*1.96;或者vol=dat*500.0/255;dis[2]

=vol对100取商(个位)dis[1]

=vol对100取余再除以10(十分位)dis[0]

=vol对10取余(百分位)任务2原始电压显示电压表3.电压值的显示

选中右侧数码管(百分位)P1=seg[dis[0]];总线延时选中中间数码管(十分位)P1=seg[dis[1]];总线延时选中左侧数码管(个位)P1=seg[dis[2]]&0x7f;总线延时电压值个位显示值的七段码跟01111111相与清零最高位(字段dp)点亮小数点任务2原始电压显示电压表三、任务实施步骤1:在Proteus软件中调用任务1仿真电路文件。步骤2:修改显示函数,汇编无误后,生成目标文件(.HEX)。步骤3:在Proteus软件中加载目标文件,仿真运行观察结果。步骤4:结果无误,请求教师检查、评价。步骤5:编制项目报告。任务2原始电压显示电压表四、任务拓展1.如何实现4位电压显示(增加千分位)?2.如何实现多路电压巡回检测?任务3八路巡检电压表一、任务说明利用单片机控制ADC0808完成八路模拟量电压循环检测并显示。

数码管最高位显示模拟量支路编号,其余3位显示支路电压原始值每秒切换检测支路。任务3八路巡检电压表二、任务分析1.硬件分析在任务1的电路中添加另外7个模拟量电压输入量,使得ADC0808的每个模拟量输入通道都输入一个可变化的模拟量电压,如下图所示。任务3电路图支路编号电压值任务3八路巡检电压表2.软件分析-整体分析利用定时器定时1秒,主函数完成定时器和中断初始化后,不断重复调用显示子函数和AD转换子函数。

每到1秒,在中断服务子函数中修改支路编号,完成新支路的电压转换和显示。任务3八路巡检电压表2.软件分析-函数构成主函数定时器中断初始化循环调用显示和转换子函数显示最高位显示支路编号低3位显示原始电压值AD转换去掉输入通道选择部分从启动ADC0808开始中断服务每过50ms打断主函数自动进入中断服务子函数累计20次中断,实现定时1秒每秒修改支路编号,编号0-7循环支路编号判断根据支路编号完成ADC0808通道定义任务3八路巡检电压表2.软件分析-变量定义新定义无符号字符型全局变量count(统计中断次数)、number(存放支路编号)。任务3八路巡检电压表2.软件分析-主函数定时器工作方式定义定时50ms,定时器初值填装开中断启动定时器变量count、number清零调用显示子函数display();调用转换子函数adc0808();无限循环TMOD=?TH0=?TL0=?ET0=?EA=?TR0=?任务3八路巡检电压表2.软件分析-定时中断服务子函数重装定时器初值中断次数加1中断次数是否第21次中断次数清零支路编号加1支路编号是否为8支路编号清零中断返回否否任务3八路巡检电压表2.软件分析-支路编号判断子函数如果支路编号等于0,ADC0808选择通道0如果支路编号等于1,ADC0808选择通道1如果支路编号等于2,ADC0808选择通道2如果支路编号等于3,ADC0808选择通道3如果支路编号等于4,ADC0808选择通道4如果支路编号等于5,ADC0808选择通道5如果支路编号等于6,ADC0808选择通道6如果支路编号等于7,ADC0808选择通道7任务3八路巡检电压表三、任务实施步骤1:在Proteus软件中调用任务1仿真电路文件,添加模拟量支路。步骤2:对照分析修改各函数,汇编无误后,生成目标文件(.HEX)。步骤3:在Proteus软件中加载目标文件,仿真运行观察结果。步骤4:结果无误,请求教师检查、评价。步骤5:编制项目报告。任务3八路巡检电压表四、任务拓展利用6位数码管显示8路巡检电压,如下图所示项目2

数字电压表设计与调试子项目2串行ADC实现数字电压表教学目标掌握串行DAC用法;完成程序设计与调试。任务1

原始电压显示电压表利用TLC549实现模拟电压的实时检测,并将原始电压值显示在数码管上。一、任务说明任务1

原始电压显示电压表1.硬件分析(1)芯片简介TLC549是美国德州仪器公司生产的8位串行A/D转换器芯片,可与通用微处理器、控制器通过CLK、CS、DATAOUT三条口线进行串行接口。具有4MHz片内系统时钟和软、硬件控制电路,转换时间最长17μs。一、任务分析任务1

原始电压显示电压表(2)芯片引脚SCLK:串行I/O时钟输入端。CS:芯片选用通端。SDO:数字量输出端。AIN:模拟信号输入端。REF+、REF-:基准电压输入端。任务1

原始电压显示电压表(2)芯片工作时序CS变低,DO输出上次AD转换数字量最高位每个CLOCK的下降沿读1位数第8个CLOCK的下降沿后将CS置1,再次启动AD转换,此时DO保持高阻状态CS再次变低,DO输出上次AD转换数字量最高位任务1电路图任务1

原始电压显示电压表2.软件分析—整体分析整体程序应该是数码管动态显示模块(voiddisplay())和AD转换模块(voidtlc549())的无限循环。程序结构参照子项目1的任务2。任务1

原始电压显示电压表2.软件分析—TLC549工作流程CS置0dat左移1位将SDO的值送datSCLK下降沿CS置18次任务1

原始电压显示电压表三、任务实施步骤1:在Proteus软件中完成仿真电路文件。步骤2:参照ADC0808任务2完成程序,汇编无误后,生成目标文件(.HEX)。步骤3:在Proteus软件中加载目标文件,仿真运行观察结果。步骤4:结果无误,请求教师检查、评价。步骤5:编制项目报告。任务1

原始电压显示电压表四、任务拓展利用4片TLC549实现4个支路的电压巡检。任务2

四路巡检电压表一、任务说明利用4片TLC549实现4个支路的电压巡检。任务2

四路巡检电压表二、任务分析1.硬件分析4片TLC549通过各自的CS端轮流选中(置零),任意时刻只有一片549选中,选中的芯片SDO端可以读数,其余三个芯片SDO端输出为高阻状态(Z状态),因此可以采用以下接线方法:4个芯片的CS端采用独立连接4个芯片的SCLK共用4个芯片的SDO端构成单向数据总线

当EN1、EN2、EN3轮流为高电平1,且任何时刻只能有一个三态输出门工作时,则输入信号A1B1、A2B2、A3B3轮流以与非关系将信号送到总线上,而其它三态输出门由于EN=0而处于高阻状

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论