模拟电路课程设计报告格式.doc
广西大学行健文理学院模拟电路课程设计报告题目: 温度控制器的设计 学 部: 电气信息学部 班 级: 2011级通信工程1班 姓 名: 陈斌 学 号: 指导教师: 唐琳 撰写日期: 2013年12月 目 录第一章 课程设计要求及电路说明11.1课程设计要求与技术指标11.2课程设计电路说明2第二章 课程设计及结果分析42.1课程设计思想42.2课程设计问题及解决办法122.3调试结果分析12第三章 课程设计方案特点及体会13 3.1 课程设计方案特点133.2 课程设计心得体会13参考文献15附 录16第一章 课程设计要求及电路说明1.1 课程设计要求与技术指标温度控制器的设计设计要求与技术指标:1、设计要求(1)设计一个温度控制器电路;(2)根据性能指标,计算元件参数,选好元件,设计电路并画出电路图;(3)撰写设计报告。2、技术指标温度测量范围099,精度误差为0.1;LED数码管直读显示;温度报警指示灯。1.2课程设计电路说明1.2.1系统单元电路组成温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89S51,温度传感器采用DS18B20,用3位LED数码管以串口传送数据实现温度显示。主 控 制 器LED显 示温 度 传 感 器单片机复位时钟振荡报警电路1.2.2设计电路说明主控制器:CPU是整个控制部分的核心,由STC89C52芯片连同附加电路构成的单片机最小系统作为数据处理及控制模块.显示电路:显示电路采用4个共阳LED数码管,用于显示温度计的数值。报警电路:报警电路由蜂鸣器和三极管组成,当测量温度超过设计的温度时,该电路就会发出报警。温度传感器:主要由DS18B20芯片组成,用于温度的采集。时钟振荡:时钟振荡电路由晶振和电容组成,为STC89C52芯片提供稳定的时钟频率。第二章 课程设计及结果分析2.1课程设计2.1.1设计方案论证与比较显示电路方案方案一:采用数码管动态显示使用一个七段LED数码管,采用动态显示的方法来显示各项指标,此方法价格成本低,而且自己也比较熟悉,实验室也常备有此元件。方案二:采用LCD液晶显示采用1602 LCD液晶显示,此方案显示内容相对丰富,且布线较为简单。综合上述原因,采用方案一,使用数码管作为显示电路。测温电路方案方案一:采用模拟温度传感器测温由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。方案二:采用数字温度传感器经过查询相关的资料,发现在单片机电路设计中,大多数都是使用传感器,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。综合考虑,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。2.1.2设计总体方案根据上述方案比较,结合题目要可以将系统分为主控模块,显示模块,温度采集模块和报警模块,其框图如下:主控制器STC89C52DS18B20驱动显示电路 报警电路2.1.3数字温度计的硬件电路设计控制电路CPU是整个控制部分的核心。在考虑经济性和满足需求的前提下,本系统选用宏晶公司生产的8位STC89C52单片机作为整个系统的控制中心。STC89C52是宏晶公司生产的低功耗,高性能CMOS8位单片机,片内含4k bytes的可系统编程的Flash只读程序存储器,器件采用宏晶公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚,它集Flash存储器既可在线编辑(ISP)也可用传统方法进行编辑及通用8位微处理器于单片芯片中,功能强大STC89C52单片机可为您提供许多高性价比的应用场合。本次设计中,由STC89C52芯片连同附加电路构成的单片机最小系统作为数据处理及控制模块,其中,使用P0口作为数码管显示电路数据传输口,P2.4、P2.5、P2.6分别作为数码管的位选接口,P2.0作报警控制接口,P2.2作DS18B20的总线接口。其电路连接图如下: 温度传感器设计引脚功能说明:VDD :可选电源脚,电源电压范围35.5V。当工作于寄生电源时,此引脚必须接地。DQ :数据输入/输出脚。漏极开路,常态下高电平。GND :为电源地(1)存贮器 DS18B20的存贮器由一个高速暂存(便笺式)RAM和一个非易失性、电可擦除EEPROM组成,后者存贮高温度和低温度触发器TH和TL。暂存存贮器有助于在单线通信时确保数据的完整性。数据首先写入暂存存贮器,在那里它可以被读回。当数据被校验之后,复制暂存存贮器的命令把数据传送到非易失性EEPROM。这一过程确保了更改存贮器时数据的完整性。高速暂存RAM的结构为9字节的存储器,结构如3.6图所示。前2字节包含测得的温度信息。第3和第4字节是TH和TL的拷贝,是易失的,每次上电复位时刷新。第5字节为配置寄存器,其内容用于确定温度值的数字转换分辨率,DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。其中,低5位一直为1;TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式,在DS18B20出厂时,该位被设置为0,用户不要去改动;R1和R0决定温度转换的精度位数,即用来设置分辨率。R1 R0 分辨率/位 温度最大转换时间/ms0 0 9 93.750 1 10 187.51 0 11 3751 1 12 750DS18B20分辨率配置寄存器位定义高速暂存的第6、7、8字节保留未用,表现为全逻辑1。第9字节是前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。高速暂存RAM结构图当DS18B20接受到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩张的二进制补码形式存储在暂存RAM的第1、2字节中。单片机可以通过单线接口读出数据。读数据是,低位在先,高位在后,数据格式以0.0625/LSB形式表示。温度值格式如图所示:低字节 高字节 温度数据值格式图中,S表示符号位。当S=0时,表示测得的温度值为正值,可以直接将二进制转换为十进制;当S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制值。(2)DS18B20的测温原理 如图3.8所示,图中低温度系数振荡器的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数振荡器随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。DS18B20测温原理图 图中还隐含着计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55所对应的一个基数分别置入减法计数器1和温度寄存器中,减法计数器和温度寄存器被预置在-55所对应的一个基数值。减法计数器1对低温度系数振荡器产生的脉冲信号进行减法计数,当减法计数器1的预置减到0时,温度寄存器的值将加1,减法计数器1的预置值将重新被装入,并重新开始对低温度系数振荡器产生的脉冲信号进行计数。如此循环,知道减法计数器2计数到0时,停止温度计数器值的累加,此时温度寄存器中的数值就是所测温度值。图中的斜率累加器用于补偿和修正测温过程的非线形性,直到温度寄存器达到被测温度值。显示电路显示电路由一个数码管、排阻组成。2.1.4软件设计系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。主程序主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见图所示。Y发DS18B20复位命令发跳过ROM命令发读取温度命令读取操作,CRC校验9字节完?CRC校验正?确?移入温度暂存器结束NNY 初始化调用显示子程序1S到?初次上电读出温度值温度计算处理显示数据刷新发温度转换开始命令NYNY主程序流程图 图3-13 读温度流程图读温度子程序读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。温度转换命令子程序温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。计算温度子程序计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,Proteus 进行仿真程序编写完以后,我们先对其进行仿真,初步验证电路图和程序的可行性和正确性。Protel99 SE软件Protel99 SE 5共分5个模块,分别是原理图设计、PCB设计(包含信号完整性分析)、自动布线器、原理图混合信号仿真、PLD设计。2.2 课程设计问题及解决方法2.3结果分析第三章 课程设计方案特点及体会3.1课程设计方案特点(1)使用的器件较少。(2)通过软件可以方便的设定温度范围。(3)采用DS18B20芯片收集温度,大大简化了电路的复杂程度。(4)采用STC89C52芯片,课程设计的扩展性能比较好。3.2心得体会本次的课程设计,分别进行了BS18D20电路原理图的设计,电路仿真图的设计以及实物电路板的焊制三个过程。经过这次的课程设计,我们不仅加深了对Protel99 SE软件的应用和Proteus仿真软件的了解和使用,还学到了许多课本上没有涉及知识,练习了电路原理图的设计和仿真运行,同时对这一学期学习的单片机课程进行了一次全面的复习和巩固,收益很大。我们知道,课程设计一般强调能力培养为主,在独立完成设计任务的同时,还要注意其他几方面能力的培养与提高,如独立工作能力与创造力;综合运用专业及基础知识的能力,解决实际工程技术问题的能力;查阅图书资料、产品手册和各种工具书的能力;书写技术报告和编制技术资料的能力。在专业知识与研究方法方面为日后的毕业设计乃至毕业后的工作奠定良好的基础第一周是对BS18D20电路原理图设计,刚开始感觉有一定的难度,主要是对软件及功能的不了解。但在老师和同学的帮助下还是顺利的完成了。整个课设的过程就是一个学习的过程。因为在课设的过程中,我们必须熟悉电路原理及器件的使用特点,这些都是对课本知识复习和巩固。所以 我觉得课设是一个很重要的学习环节,值得我们应该很认真的去对待!由于本次课程设计是由分组进行完成的,所以通过这次的课设我更加了解到合作的重要性。两周的设计中,我们组成员都参加了设计的各个方面的讨论和动手实践,大家更具自己的实际情况做了不同的分工,合理的利用了时间,感觉得到了很好的经验。这次课设让我对单片机有了进一步的了解,而且对Proteus仿真软件有了一定了解。体会到了Proteus仿真软件和Protel99 SE软件的强大。最主要的是我们能够自己通过单片机焊接事物,这是我们在课堂上是学不到的。极大地增强了我们的动手实践能力。通过本次课设,能够使我们熟练掌握单片机控制电路的设计、程序编写和整体焊接及系统调试,从而全面地提高我们对单片机的软件、硬件等方面的理解,进而增强我们在实践环节的动手操作能力。譬如,我们可以根据实验指导书的要求,完成BS18D20电路的硬件设计、电路器件的选择、单片机软件的运行、以及整体系统调试,并写出完善的设计报告。在进行课设之前,要求我们具备数字电路、模拟电路、电路基础、微机原理、电力电子、电机学和单片机等相关课程的知识,并具备一些基本的实践操作水平,为以后的就业打好一定的基础。总的来说,这次的课程设计自己还是很满意的,感觉收获了不少东西,相信此次学到的知识在以后的生活和学习中对我会有很大的帮助!参考文献:1 李广弟.单片机基础. 北京:北京航空航天大学出版社,19942 倪晓军.单片机原理与接口技术教程.北京:清华大学出版社,20093 姚年春 向华Protel99SE基础教程. 北京.人民名邮电出版社,20094 周灵彬;张靖武.PROTEUS的单片机教学与应用仿真J.单片机与嵌入式系统应用;2008年01期附录实验原理图实验PCB图成品图程序附录#include <reg51.h> #define uint unsigned int#define uchar unsigned char /宏定义sbit dula=P27;sbit p35=P24;sbit p36=P25;sbit dp=P07;sbit p37=P26;sbit DQ=P22; /定义DS18B20总线I/Osbit LING=P20; /定义响铃signed char m; /温度值全局变量signed char shangxian=99; /上限报警温度,默认值为99signed char xiaxian=0; /下限报警温度,默认值为0uchar code LEDData=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf;/*延时子程序*/void Delay(uint i) while( i- );/*初始化DS18B20*/void Init_DS18B20(void) unsigned char x=0; DQ=1;/ 给脉冲信号 Delay(8); /稍做延时 DQ=0; /单片机将DS18B20总线拉低 Delay(80); /精确延时,大于480us DQ=1; /拉高总线 Delay(14); x=DQ; /稍做延时后,如果x=0则初始化成功,x=1则初始化失败 Delay(20);/*读一个字节*/unsigned char ReadOneChar(void) unsigned char i=0; unsigned char dat=0; for (i=8;i>0;i-) DQ=0; / 给脉冲信号 dat>>=1;/右移1位并赋值 DQ=1; / 给脉冲信号 if(DQ) dat|=0x80;/与0x80位或运算 Delay(4); return(dat);/*写一个字节*/void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i>0; i-) DQ=0; DQ=dat&0x01; Delay(5); DQ=1; dat>>=1; void Tmpchange(void) /发送温度转换命令 Init_DS18B20(); WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0x44); /启动温度转换/*读取温度*/unsigned int ReadTemperature(void) unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; Tmpchange(); Init_DS18B20(); WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0xBE); /读取温度寄存器 a=ReadOneChar(); /读低8位 b=ReadOneChar(); /读高8位 t=b; t<<=8;/左移8位并赋值 t=t|a; tt=t*0.0625; t= tt*100+0.5; /放大10倍输出并四舍五入 return(t);/*显示温度子程序*/Disp_Temperature() /显示温度 uint a,b,c,e; e=ReadTemperature(); /获取温度值 a=e/1000; /计算得到十位数字 b=e/100-a*10; /计算得到个位数字 c=(e%100)/10; /计算得到小数点后一位 m=e/100; if(m>shangxian | m<xiaxian) LING=0; /温度不在范围内报警 else LING=1;p35=0;p36=0;p37=0; dula=1; P0 =LEDDatac; /显示小数点后一位 dula=0; P0=0xff;p35=1;p36=0;p37=0; Delay(300);p35=0;p36=0;p37=0;dula=1; P0 =LEDDatab; /显示个位dp=0;dula=0;P0=0xff;p35=0;p36=1;p37=0; Delay(300);p35=0;p36=0;p37=0; dula=1; P0 =LEDDataa; dula=0; /显示十位 P0=0xff;p35=0;p36=0;p37=1; Delay(300);p35=0;p36=0;p37=0; /关闭显示/*主函数*/void main(void) ReadTemperature(); LING=1;while(1) Disp_Temperature();