1、1.2 设计概述本报告所涉及的小型温度控制系统为教学实验系统,所以只提出功能、指标和采用元件的设计要求。(1)温度控制范围: 0100 (2)测温元件: 半导体温度传感器AD592(3)温度控制执行元件: 半导体制冷片(4)核心控制部件: C8051F系列单片机小型温度控制系统基本组成如图所示: 图1. 1 系统整体功能框图需要说明的是本报告是在第一阶段简单电路的模块化实现的基础上,通过更加复杂电路的设计与实现,并配合相关软件设计,共同完成温度控制任务。一般来说一个比较复杂的电路系统,可以按照电路实现的功能或电路的类型分为若干个模块。其中有些模块与其它模块之间的界面清晰,入口参数和出口参数明确
2、,能够独立工作,这类电路模块可以称之为独立电路模块。为了简化系统电路的设计工作,并且使系统便于组装、调试,这类电路模块可以单独进行设计、实现和调试、检测。本阶段的设计任务仍然采取模块化的方法,分模块进行设计与焊接、调试。这样可以有效降低模块设计的难度,分模块调试,也是调试更加方便,降低了系统失败的风险。本阶段上上阶段已完成电源模块、变送器模块和驱动器模块的设计与实现的基础上。继续完成单片机模块、AD模块、DA模块、键盘显示模块的设计与实现。并在各模块的基础上完成软件设计,实现环境温度的采集与显示,环境温度的闭环控制两大功能,成功完成了预期目标。2 简单电路的模块化设计与实现2.1 单片机应用电
3、路设计与实现2.1.1基本要求片选信号: 6个 地址信号: 4个数据总线: AD0AD7控制信号: WR,RD 安装: 独立电路板结构2.1.2设计方案采用以MCS-51(C8051F023)为核心的单片机做为控制芯片。MCS-51系列单片机有众多性能优异的兼容产品、成熟的开发环境、世界上最大的单片机客户群、高性价比、畅通的供货渠道,是初学者的首选机型。本电路直接采用成品单片机最小系统版,最小系统版内置晶振与复位电路,可以简化设计,方便焊接,也增加了设计与实现的成功率。是单片机模块更加可靠。图2. 1典型的51单片机的最小系统电路图本次设计采取总线结构,把单片机的P1口作为数据总线接口,P1、
4、P2口联合使用作为地址总线接口。通过总线结构设计,可以有效减轻软件设计难度,也是单片机控制的多个功能部件更加协调一致的工作。图2. 2 单片机总线设计框图如图2.2所示,控制系统在数据/地址传输上采用数据/地址分离设计;在控制上采用部分译码电路。数据/地址分离电路设计:单片机模块P3口为数据/地址复用端口,为了得到低8位地址,采用74LS373锁存器构成典型的数据/地址分离电路。地址译码电路设计:采用74LS138构成部分译码电路。具体电路图如下:图2. 3单片机系统设计电路图为便于各模块协调一致的工作,电路设计统一接口模式,方便调试与查错,单片机模块安装接口如图2.4所示。图2. 4 单片机
5、模块装结构图2.1.3单片机系统的调试调试平台:电子工程设计训练调试台调试内容:地址译码电路输出检测 适用电路:部分地址译码电路 测试设备:JTAG适配器单片机应用系统板150MHz数字双踪示波器调试方法:1、检查电路连线无误后,将电路板安装在测试台上2、断开译码电路负载,运行测试程序,检查各输出引脚是否有输出, 各个输出之间相对位置关系是否正确;3、用示波器观察CS0 CS5引脚,应有图示的波形输出。如果没有输出或者彼此关系错乱,都表明电路中存在故障。CS0 CS5输出波形图如图2.5所示:CS0:CS1:CS2:CS3:图2. 5 单片机模块调试波形图调试程序:#include C8051
6、F020.habsacc.hdata_define.c#define C1 XBYTE0x0000#define C2 XBYTE0x2000#define C3 XBYTE0x4000#define C4 XBYTE0x6000Init_Device.cvoid main(void) Init_Device(); while(1) C1=0; C2=0; C3=0; C4=0;2.1.4调试中遇到的问题刚开始调试的时候,我们直接用程序观察模拟温度的变化,发现出错。紧接着就用示波器观察CS0CS5的波形,但是并没有得到正确的波形,CS1常为高,CS3和CS5的波形也是不对。后又检查电路,发现线
7、路接线正确,又检查线路通断,发现我们的电路板本身应该相连接的暗线部分没有连通。随后进行了补救式的焊接,焊接问题这次应该解决了,我们就进行了又一次的测试,结果发现仍然是没有完全改善,CS1仍旧是常为高。这次我们检查了138、244和00这三片,发现不是芯片的问题,最后寻求老师帮助,检查得出结论,我们的单片机第6脚是坏掉的,这才导致CS1总是有问题。换了一个备用单片机,问题迎刃而解,最终得到正确波形。完成了单片机模块的设计与调试。表2. 1 常见故障及原因故障现象故障原因输出全部没有变化74LS373未接电源74LS373漏接+5V74LS373漏接地线未接ALE或ALE无效 输出关系混乱 AD0
8、 AD3接错对应引脚无输出AD0 AD3漏接2.2模/数转换电路设计与实现2.2.1实验要求输入信号范围: 0V+5V分辨率: 8bit精度: 1LSB转换时间: 1ms 独立电路板结构2.2.2设计方案本次设计AD转换电路采用芯片ADC0804,芯片主要参数如下:工作电压:+5V,即VCC=+5V。模拟输入电压范围:0+5V,即0Vin+5V。8位,即分辨率为1/2=1/256,转换值介于0255之间。100us(fCK=640KHz时)。转换误差:1LSB。参考电压:2.5V,即Vref=2.5V。模数转换器,是将模拟电信号转变成计算机能识别的数字信号。在模数转换中,应根据测量精度要求,考
9、虑转换电路的精度和分辨率,并力求降低成本。模数转换有多种方法可以实现,如采用电压/频率变换器,以频率或脉宽来计算温度,也可以采用A/D变换器或其它方法。如采用A/D变换器,应考虑转换器输入阻抗和变送器输出阻抗对信号的衰减可能引起的测试误差,并尽量降低这一误差。板间连接应注意保护。根据课设要求,温度0100 的变化是用电压05V表示的,转成数字表示,即0FFH。AD电路模块电路图如图2.6所示图2. 6AD模块工作的时序图如图2.7所示。图2. 72.2.3电路主要参数计算(1) 转换精度:A/D转换器也采用分辨率和转换误差来描述转换精度。分辨率是指引起输出数字量变动一个二进制码最低有效位(LS
10、B)时,输入模拟量的最小变化量。他反映了A/D转换器对输入模拟量微小变化的分辨能力。在最大输入电压一定时,位数越多,量化单位越小,分辨率越高。转换误差通常用输出误差的最大值形式给出,常用最低有效位的倍数表示,反映A/D转换器实际输出数字量和理论输出数字量之间的差异。(2) 转换时间:转换时间是指转换控制信号(vL)到来,到A/D转换器输出端得到稳定的数字量所需要的时间。转换时间与A/D转换器类型有关,並行比较型一般在几十个纳秒,逐次比较型在几十个微秒,双积分型在几十个毫秒数量级。实际应用中,应根据数据位数、输入信号极性与范围、精度要求和采样频率等几个方面综合考虑A/D转换器的选用。(3) 8位
11、数模转换电路主要技术指标:分辨率 - 8位:表示能够分辨的最小电压变化DATA 为 1 时的 Vi 表示最小电压变化 误差 - 1LSB转换时间 - 100微秒为便于各模块协调一致的工作,电路设计统一接口模式,方便调试与查错,模数装换模块安装接口如图2.8所示。图2. 8 模数转换电路安装结构图2.2.4 模数转换电路模块的调试改变设置温度,运行A/D测试程序,检查模/数转换结果。一般为05伏特之间改变,相应数为0255.调试源程序为:#define CS1 XBYTE0x2000#define TIMER 0x8000void delay(void); unsigned char x; wh
12、ile(1) CS1=x; delay(); x=CS1; void delay(void) unsigned int i; for(i=0;iTIMER;+i);一般故障检测方法为:查数据线是否漏接, 若A/D转换结果数值不随设置温度正比变化检查数据线是否错接;查Vin(-)是否接GND;查 Vin(+) 是否有变化,如无变化,逆向检查直至变送器输出。若电源连接正常,查CLK-IN引脚是否有锯齿波信号输出,若没有输出检查相关元件连接是否正确,若频率过高(正常约为640KHz)检查元件参数是否有误。如果元件连接及元件参数无误仍无信号输出,则ADC0804损坏。若CLK-IN引脚有正常的锯齿波信
13、号输出,可修改测试程序,将延时子程序或延时函数去掉,加快程序循环的时间,检查转换控制信号、和数据读取控制信号WR/RD是否正常。若上述控制信号正常,则可能是ADC0804损坏。2.3显示与键盘控制电路设计与实现2.3.1基本要求:1、4 位7 段数码显示,前 3 位含小数点2、0 9数字输入键及若干功能设置按键控制3、独立电路板安装结构2.3.2设计方案:单片机与LED显示器有两种接口方法。动态显示电路方案:电路简单,成本低,控制程序复杂,适用于显示位数较多的场合。可使用智能芯片8279完成。本阶段我们用74LS273 设计显示数据输出电路,然后用74LS244设计键盘状态读入电路,最后设计出
14、总的实验电路图,显示模块的电路原理图如图2.9所示。图2. 9 显示模块电路原理图矩阵键盘电路方案:按键较多时,成本低,控制程序较直读电路复杂,适用于显示位数较多的场合。键盘电路的电路图如图2.10所示。图2. 10 键盘模块电路图键盘模块工作的时序图如图2.11所示。图2. 11键盘模块工作时序图为便于各模块协调一致的工作,电路设计统一接口模式,方便调试与查错,键盘显示模块安装接口如图2.12所示。图2. 12 键盘显示模块安装结构图2.3.3显示模块模块的调试(1)显示电路模块调试源程序:#define DP1 XBYTE0x0000#define DP2 XBYTE0x0001#defi
15、ne DP3 XBYTE0x0002#define DP4 XBYTE0x0003unsigned char table =0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,0x80,0x90;void display(unsigned char x,y); unsigned char i,num=0; DP1=DP2= DP3=DP4=0xff; while(1) for(num=0;num10;+num) i+; if(i=4) display(i,num); else i=1; display(i,num); delay( ); 在使用了这个程序之后发现,
16、显示模块出现了问题,于是在张老师的帮助下,帮我们修改了程序,这才在一周实验的最后结尾部分查出了问题。程序如下:unsigned char data table1=0x10,0xF9,0x0A,0x09,0xE1,0x05,0x04,0xD9,0x00,0x01;unsigned char data table2=0x04,0xAF,0xC0,0x82,0x23,0x12,0x10,0x8F,0x00,0x02;unsigned char data table3=0x40,0xF5,0x82,0x81,0x31,0x09,0x08,0xE5,0x00,0x01;unsigned char dat
17、a table4=0x04,0xEE,0x58,0x4A,0xAA,0x0B,0x01,0x6E,0x00,0x02;void display(unsigned char x,unsigned char y) DP3=table3x; DP4=table4y; unsigned char l_val,r_val,r_state,temp,conter,x,c; int key; DP1=DP2=DP3=DP4=0xff; key=0x0004; for(x=1;x5;x+,key+) c=XBYTEkey; if(r_state=c&0x1f) for(conter=1,temp=0x01;c
18、onter6;+conter,temp=temp1) if(r_state&temp)!=0) r_val=conter; l_val=x; display(l_val,r_val); (2)显示模块故障检测方法:运行显示模块测试程序,如果电路工作正常,在4个数码管上应有数字 0-9 滚动显示。否则,说明电路存在故障,可以根据故障现象,按照下面的方法进行检查。全黑:数码管未接电源, 74LS237未接电源或地, 74LS237触发控制信号(CK)不正常, 数据线全部漏接全亮:74LS237的CLR引脚未接高电平,乱显示且无规律、无变化:74LS237触发控制信号(CK)不正常二次译码信号线上无
19、信号:一次译码信号线漏接或信号线上无信号, 二次译码电路74LS138的E2、E3连接错误, 二次译码电路74LS138漏接电源或地线, 地址信号( 74LS138 的A、B、C输入)不正常, 访问地址错误2.3.4键盘模块的调试运行键盘控制电路的测试程序,如果电路工作正常,在键盘上每按 1 个键,都会通过 2 位数码显示管,显示相应的行编码和列编码。否则,说明电路存在故障。调试源程序如下#define DP1 XBYTE0x7000#define DP2 XBYTE0x7100#define DP3 XBYTE0x7200#define DP4 XBYTE0x7300unsigned cha
20、r table=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90;void display(unsigned char x,unsigned char y) DP3=tablex; DP4=tabley;void main(void) unsigned char l_val,r_val,r_state,temp,cont,x,c; while(1) key=0x0004;x+,key+) c=XBYTEkey;0x1f) for(cont=1,temp=0x01;cont+cont,temp=temp=0) r_val=cont; l_val=
21、x; display(l_val,r_val); 用此程序我们发现虽然显示部分已经没问题了,但是键盘部分又出现了问题,幸好有张老师的帮助,老师在百忙之中帮我们修改程序,检查问题,之后我又细细检查电路,发现是由于抄写电路图时的粗心,导致线路接错。调试时修改的程序如下:#define TIMER 0xffvoid display(unsigned char x,unsigned char y); unsigned char i=0,num=0; Init_Device(); /while(1) DP1=DP2=DP3=DP4=0xff; while(1) for(num=0;9; i+; if(i
22、 else i=1; display(i,num); delay( ); delay( ); if(x=1) DP1=table1y; else if(x=2) DP2=table2y; else if(x=3) DP3=table3y; else DP4=table4y; unsigned char data i,j; for(i=0;+i) for(j=0;j+j);2.4数/模(D/A)转换电路设计与实现2.4.1基本要求:输入范围: 00H 0FFH 对应输出: -10V+10V 误差: 1%FSR 响应时间:电源供电: +5V,12V2.4.2设计方案D/A的作用是把输入的模拟信号转化为数字信号。有电流开关型、脉宽调制型等。在这里,我们采用DAC0832构成D/A电路。 DAC0832是8 位乘算型电流输出的典型产品,具有MCU兼容
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1