试设计智能仪表智能仪课程设计论文_第1页
试设计智能仪表智能仪课程设计论文_第2页
试设计智能仪表智能仪课程设计论文_第3页
试设计智能仪表智能仪课程设计论文_第4页
试设计智能仪表智能仪课程设计论文_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

太原理工大学现代科技学院智能仪器设计课程设计专业班级自动化11-2学号姓名题目号14题目14试设计智能仪表实现智能数字显示仪表。要求8位数码管显示(4位显示测量值,4位显示设定值),4输入按钮(功能选择、数码管选择、数字增加、数字减少),可设定上下限报警(蜂鸣器报警)。适配铁铜镍热电阻,测温范围为0℃~200℃。采用比例控制、并用晶闸管脉宽调制驱动1000W电加热器(电源电压为AC220V)。摘要智能仪器是含有微型计算机或者微型处理器的测量仪器,拥有对数据的存储运算逻辑判断及自动化操作等功能。它的出现,极大地扩充了传统仪器的应用范围。智能仪器凭借其体积小,功能强,功耗低等优势,迅速的在家用电器,研单位和工业企业中得到了广泛的应用。传感器取被测参量的信息并转换成电信号,经滤波去除干扰后送入多路模拟开关;由单片机逐路选通模拟开关将各输入通道的信号逐一送入程控增益放大器,放大后的信号经A/D转换器转换成相应的脉冲信号后送入单片机中;单片机根据仪器所设定的初值进行相应的数据运算和处理(如非线性校正等);运算的结果被转换为相应的数据进行显示和打印;同时单片机把运算结果与存储于片内FlashROM(闪速存储器)或EPROM(电可擦除存贮器)内的设定参数进行运算比较后,根据运算结果和控制要求,输出相应的控制信号(如报警装置触发、继电器触点等)。本次设计使用铁-铜镍热电阻。传感器取被测参量的信息并转换成电信号,经滤波去除干扰后送入多路模拟开关;由单片机逐路选通模拟开关将各输入通道的信号逐一送入程控增益放大器,放大后的信号经A/D转换器转换成相应的脉冲信号后送入单片机中;单片机根据仪器所设定的初值进行相应的数据运算和处理(如非线性校正等);运算的结果被转换为相应的数据进行显示和打印;同时单片机把运算结果与存储于片内FlashROM(闪速存储器)或EPROM(电可擦除存贮器)内的设定参数进行运算比较后,根据运算结果和控制要求,输出相应的控制信号(如报警装置触发、继电器触点等)。此外,智能仪器还可以与PC机组成分布式测控系统,由单片机作为下位机采集各种测量信号与数据,通过串行通信将信息传输给上位机——PC机,由PC机进行全局管理。本次课程设计采用keil编译软件编写C语言源代码。经调试好后,装载入单片机进行仿真,完成智能仪器的核心设计。关键字:STC89C51单片机,A/D转换器,铁-铜镍电阻,EPROM,智能仪器,数字测温温度计目录TOC\o"1-3"\h\u摘要 2一设计目的及原理 41.1设计题目和目的 41.1.1设计题目 41.2设计基本要求 41.3设计原理 5二.硬件设计 51.1系统原理框图 51.1.1STC89C51简介 61.2基本模块简介 91.2.1铁-铜镍温度测量接口技术 91.2.2铁-铜镍热电阻信号调理电路设计 91.2.3功率输出电路 101.2.44-20mA电流输出电路 101.2.5数码管显示及指示电路 101.2.6按键电路 121.2.7报警电路 121.2.8下载电路 131.2.9通信电路 131.2.10输出驱动电路 141.2.11电源电路 141.2.12比例控制算法 141.1.13热非线性校正算法 151.3.1基于STC89C51单片机实现智能测温仪表软件设计 161.3.2基于STC89C51单片机的智能测温仪表程序框架 17三.系统流程图 19四、总原理图 204.2PCB版图 22五、电路仿真的设计与分析 235.1Proteus仿真软件介绍: 235.2仿真分析: 23六、体会心得 25附录1C语言程序: 27附录2参考文献: 35一设计目的及原理1.1设计题目和目的1.1.1设计题目实现智能数字显示仪表。要求8位数码管显示(4位显示测量值,4位显示设定值),4输入按钮(功能选择、数码管选择、数字增加、数字减少),可设定上下限报警(蜂鸣器报警)。适配铁-铜镍热电阻,测温范围为0℃~200℃。采用比例控制、并用晶闸管脉宽调制驱动1000W电加热器(电源电压为AC220V)。1.1.2设计目的涉及智能仪表硬件与软件设计。智能仪器课程设计是智能仪器课程教学的重要环节,根据设计智能仪表产品的课程改革目的,特选择一些小型智能仪表产品作为课设题目,满足教学需求。单片机综合练习是一项综合性的专业实践活动,目的是让学生将所学的基础理论和专业知识运用到具体的工程实践中,以培养学生综合运用知识能力、实际动手能力和工程实践能力。1.2设计基本要求(1)正确理解设计题目,经过查阅资料,给出正确设计方案,画出详细仪表原理框图(各个功能部分用方框表示,各块之间用实际信号线连接)。在互连网上收集题目中所用到的器件资料,例如传感器(热偶分度表等)、信号调理电路、AD转换器、单片机、继电器、电源、显示器件等。在互连网上收集相关单片机的显示、AD转换、显示、控制算法等程序。在充分研究这些资料基础之上,给出设计方案(选择信号调理电路、单片机、显示、按键输入、继电器驱动、电源等,简要说明选择的理由)(2)用Protel99SE软件设计仪表详细原理图。要求正确标记元件序号、元件数值、封装名。(3)设计PCB图在画PCB前应该购买元件,因为有了元件才知道封装尺寸,但也可以不购买元件,只到元件商店测量实际元件尺寸后,画封装图。(4)熟悉单片机内部资源,学会ADC、SPI接口、定时器、中断、串口、I/O引脚等模块的编程。(5)采用C语言开发所设计仪表的程序。按照题目要求,确定仪表需要完成的任务(功能),然后分别编制各任务的程序。程序应该有说明,并有详细注释。1.3设计原理由热电阻传感器送来的电信号在测量桥路进行冷端自动补偿后,送入放大器,一面把信号进行放大,同时把非线性信号校正为线性信号,经线性放大信号一路A/D转换电路把模拟量转换成数字信号进行数字显示,另一路传输到调节网络,进行规定的比较运算,同时输出一个需要的控制信号和进行工作状态指示。二.硬件设计1.1系统原理框图Atmega16lAtmega16l单片机按键报警指示和显示热电阻输入下载通信本设计智能温度数显表由温度监测、信号处理、输出控制三部分组成。其系统框图如图1所示,它通过Pt100热电阻传感器获取绕组温度值,经信号调理电路处理后直接送入控制器的A/D转换输入端。微控制器根据信号数据及设定的各种控制参数,按照嵌入的软件控制规律执行计算与处理,自动显示智能仪表数显表可测的温度范围、并根据当前状态输出正常、设定上下线报警等。1.1.1STC89C51简介图2STC89C51单片机引脚STC89C52系列单片机是从引脚到内核都完全兼容标准8051的单片机,有PDIP-40、PLCC-44、PQFP-44三种封装形式。Intel公司MCS-51单片机的基本结构如图1-4所示。该单片机具有如下资源:(1)一个8位算术逻辑单元(CPU)。(2)4组,共32个I/O口,每口8个引脚,可单独寻址,其中P0、P2口具有地址/数据总线功能。(3)两个16位定时/计数器(简称为定时器)。(4)全双工串行通信口。(5)5个中断源,具有两个中断优先级。(6)128B内置RAM。(7)具有64KB可寻址数据和代码区。(8)各个模块采用三总线(地址、数据和控制)连接。(9)开放总线接口,P0口分时作为8位数据总线与8位地址总线,P2口作为地址总线高8位。每个MCS-51单片机处理周期包括12个时钟周期(又称为一个机器周期),每12个时钟(一个机器)周期用来完成一个操作,例如取指令等,指令执行时间为时钟频率除以12后取倒数,如果系统时钟是12MHz,则相当于执行每条指令所需要的时间1μs。1.I/O端口I/O端口0、1、2、3驱动器与锁存器。2.存储器部分RAM:51单片机具有128字节的片内RAM,FLASH:片内ROM,用于保存代码等,片内ROM采用FLASH结构的存储器构成,具有ISP功能,容量随型号不同而不同,对于AT89S51单片机,FLASH容量为4KB。SP:栈指针3.算术与逻辑运算部分寄存器B:用于乘除等操作的寄存器,常保存运算的第2操作数。ACC:累加器,TMP1、TMP2:暂存器,用于暂时保存数据。ALU:8位算术逻辑单元ALU,PSW:程序状态字,4.指令处理部分程序地址寄存器:用于保存程序地址。缓冲器:缓冲总线数据。PC+1:程序计数器加1处理模块。PC:保存下一条指令地址的16位地址寄存器,可寻址范围为64K。DPTR:双数据指针,DPTR为两个8位缓存器(DPH和DPL)组成的16位缓存器,。5.时序控制与指令寄存部分定时与控制单元:指令寄存器:保存指令并指令译码后,在定时与控制单元的配合下,使CPU执行各种操作。WDT:看门狗。用于程序不运行时,自动复位单片机。OSC:时钟振荡器,与外接石英晶体一起组成时钟振荡器。6.ISP部分ISP端口:通过该端口与PC通信,实现在系统编程(ISP)。编程逻辑:控制ISP操作。7.外围模块部分该单片机的外围模块包括两个定时器,串行接口、4个I/O口与外中断模块。1.2基本模块简介1.2.1铁-铜镍温度测量接口技术(1)铁-铜镍金属热电阻简介铁-铜镍热电偶测温线(J型热电偶)又称铁-康铜热电偶,也是一种价格低廉的廉金属的热电偶。它的正极(JP)的名义化学成分为纯铁,负极(JN)为铜镍合金,常被含糊地称之为康铜,其名义化学成分为:55%的铜和45%的镍以及少量却十分重要的锰,钴,铁等元素,尽管它叫康铜,但不同于镍铬-康铜和铜-康铜的康铜,故不能用EN和TN来替换。铁-康铜热电偶的覆盖测量温区为-200~1200℃,但通常使用的温度范围为0~750℃J型热电偶具有线性度好,热电动势较大,灵敏度较高,稳定性和均匀性较好,价格便宜等优点,广为用户所采用。J型热电偶测温线可用于真空,氧化,还原和惰性气氛中,但正极铁在高温下氧化较快,故使用温度受到限制,也不能直接无保护地在高温下用于硫化气氛中。1.2.2铁-铜镍热电阻信号调理电路设计基于铁-铜镍传感器测温的智能测温仪表试采用STC89C51单片机实现智能测温仪表。要求8位数码管显示(上排4位显示测量值,下排4位显示设定值),4输入按钮(功能选择、数码管选择、数值增加、数值减少),可设定上下限报警(蜂鸣器报警)值。传感器为铁铜镍热电阻,测温范围为0℃~200℃。采用比例控制、并用晶闸管过零驱动1000W电加热器(电源电压为220VAC)。还可以输出与温度成正比的4-20mA电流远传到其他仪表。由题目可知,该测温仪表需要如下电路模块:(1)单片机电路(包括单片机最小系统、ADC、数码显示、按键、LED灯、电源等)。(2)铁铜镍热电阻信号调理电路(3)4~20mA输出电路与加热功率驱动电路。1.2.3功率输出电路晶闸管过零驱动电路1.2.44-20mA电流输出电路1.2.5数码管显示及指示电路A:显示电路SM1显示的是热电阻测的电加热器的实际温度值,SM2显示的是人工设计的电加热器的期望温度值。数码管是有HC595芯片来驱动的,HC595接在SPI通信的3个接口上。B:指示电路指示电路是指示按键的输入状态的。D1、D2、D3、D4与S1、S2、S3、S4一一对应,当某个按键按下时,单片机相应的引脚将置低电平,使该按键相对应的二极管发光。1.2.6按键电路4个按键与单片机的接线图及个按键的作用如上图所示;当单片机的引脚输入为低电平时,表示该引脚所对应的按键按下,单片机实现相应的功能。1.2.7报警电路当温度超过报警限时,单片机相应管脚输出一定频率的电平。蜂鸣器发出响声。1.2.8下载电路下载程序代码用的是SPI接口,用ISP电缆对单片机进行编程。1.2.9通信电路该模块用到跳线,不通信时D0、D1口作为常规I/O口使用;通信时其作为通信口使用,实现单片机与单片机或是其它上位机的通信。1.2.10输出驱动电路采用光控过零驱动晶闸管,进而控制电加热器的通断电。1.2.11电源电路1.2.12比例控制算法比例控制(P)是一种控制算法,其输出量out与温度偏差e=SV-PV成比例关系,写成数学公式是:out=kp*e+out0式中,e是测量温度值PV与设定温度值SV之间的偏差,Kp是比例系数。out是输出量。out0是对应e=0时的控制量,可由人工确定,通常取输出控制量不同比例系数Kp下对象温度变化示意图若是假设比例带为pb,控制量为out,设最大偏差值就是温度设置值。则有如下的伪代码如下:e=PV-SV;kp=1/pb;out=kp*e+out0;if(out>outm)out=outm;if(out<0)out=0;1.1.13热非线性校正算法温度范围0~200℃的铁铜镍热电阻的表格如下:unsignedcharcodeR_TABLE[21]={100,119.40,138.51,157.33,175.86,194.10,212.05};若是对于热电阻,有如下方法计算测得量RX。假设Ri代表对应温度Ti的热电阻,测量得到的热电阻值为Rx,查表可知它位于(Ri,Ti)和[R(i+1),T(i+1)]两个标定点之间,则热电阻Rx所对应的温度值Tx可由下式求得,其算法示意如图10-2所示。两相邻电阻之间差50℃,则(Ri+1-Ri)/50为直线斜率。可以得到Ri到RX的温度差为:T(Rx-Ri)=(50/(Ri+1-Ri))*(Rx-Ri)线性标度变换的前提条件是传感器的输出信号与被测参数之间呈线性关系Ax实际测量值(工程量)A0一次测量仪表的下限(测量范围最小值)。Am一次测量仪表的上限(测量范围最大值)。N0仪表下限所对应的数字量。Nm仪表上限所对应的数字量。Nx实际测量值所对应的数字量。1.3.1基于STC89C51单片机实现智能测温仪表软件设计(1)初始化任务I/O引脚初始化(按钮、LED灯、ADC、DAC、E2PROM和SPI用引脚初始化)。定时器0初始化。中断初始化。(2)按钮任务:检测按钮并执行按钮动作,需要软件消除抖动。功能选择按钮:循环选择功能,例如,正常运行、设置报警上限值、设置报警下限值、设置温度给定值、设置比例控制回差值等功能。在数值设置状态,每按一次按钮,上排4位数码管显示功能码,下排显示设置值;在正常运行状态,上排显示测量值,下排显示设定温度值。数码管选择按钮:选择需要设置数值的数码管。数值增加按钮:用于设置数值的增加,每按下一次,数值加1。数值减少按钮:用于设置数值的减少,每按下一次,数值减1。按钮设置值应该随时保存到24C02中。(3)扫描显示任务:数码管位选择与段码输出,就是将显示缓冲区的内容发送到数码管显示,将要显示的数据,组合成数组,再转换成十进制数字,发送到74HC595。不需要每个主程序循环都发送显示任务,因此可在定时器0中断中设置显示任务执行标记,当标记为1时,执行显示任务。由于显示内容随按钮选择的功能不同而不同,因此功能选择按钮任务中应该给出显示控制标记,控制显示内容。(4)TLC1549数据获取任务,需要将读TLC1549的程序写成函数。在定时器0中设置ADC任务执行标记,当该标记为1时,执行ADC数据获取任务。要求连续读取8个数据,然后取平均值。并将完成滤波后的数据存入显示数组。(5)24C02读写任务,需要编制读写24C02的函数。单片机用软件控制引脚实现I2C接口,在上电时,应该读出所有保存在24C02中的数据到数组中;在设置各种数据时,应该随时将设置的数据字节写入24C02。(6)TLC5615任务,该任务是把温度转换成的代表电流的数字写入TLC5615,实现电流输出。该任务在定时器0给出的标记控制下执行。(7)定时器0中断任务,该任务是产生间隔的定时信号,ADC转换、扫描显示、DAC输出以及采样周期、数据计算等都需要定时器0给出标记,在标记为1时,才能执行任务。(8)数据处理任务①将TLC1549输出的数字通过标度变换转成温度值。因为PT100的电阻值与温度之间呈非线性,因此需要查表法矫正。②具有回差比例控制算法实现。根据温度值控制晶闸管使接触器得电或失电,使加热器加热或是不加热。所谓回差比例控制就是当温度达到并超过设定值时,停止加热;当温度低于设定值时,开始加热。而有回差比例控制就是有两个设定值,当所测温度高于上设定值时停止加热;当低于下设定值时,开始加热,上下设定值之间的温度差称为回差。回差比例控制可以防止接触器频繁动作。③实现报警算法。上限报警与下限报警分别给出不同的报警声。④计算TLC5615需要的数字,就是将温度值转换成电流值。1.3.2基于STC89C51单片机的智能测温仪表程序框架基于STC89C51单片机的智能测温仪表程序框架如下。#include<AT89X51.H>//51单片机头文件定义数码管译码数组;定义数码管位选数组;定义保存在24C02中数据的数组;定义时间标记变量;//display_time,sample_time,control_time,DAC_time等定义其他全局数组与变量;声明函数原型;(TLC1549,TLC5615、24C02等函数)voidmain(void)

{定时器初始化;引脚初始化;//按钮、LED灯、ADC、DAC、E2PROM和软件SPI用引脚初始化其他初始化语句;从24C02读数组语句;//将保存的数据读到数组,每次单片机上电后,就使用该数组中的数据while(1){按键处理语句;{功能选择,控制周期、设定值、回差值、报警值等输入;将数组写入24C02语句;//将按键输入的数据保存到数组}//数码管显示语句:if(display_time==1)//如果显示标记display_time=1,则执行显示任务,完成一位数码管显示{数码管扫描显示语句;//采用两片74HC595扫描数码管display_time==0;}//ADC转换与数字滤波语句:if(sample_time==1)//如果数据采样标记sample_time=1,执行ADC转换任务{TLC1549转换、数字滤波与非线性校正程序;sample_time==0;}//ADC输出数值判断、报警、比例算法运算与控制量输出:if(control_time==1)//如果控制周期标记control_time=1,则实现控制算法{温度值判断与报警语句;比例算法运算语句;控制量输出语句;(引脚赋值语句)control_time=0;}//DAC转换语句:if(DAC_time==1)//如果DAC转换标记DAC_time=1,将数据写入DAC{TLC5615数据输出语句;DAC_time=0;}}//定时器0中断服务程序,用于产生显示、ADC转换与控制周期标记voidTimer0()interrupt1{staticunsignedcharn,m,k,h;n++;m++,k++;h++;if(n==display_time0)//display_time0为显示周期{n=0;display_time=1;}if(m==sample_time0)//sample_time0为ADC转换周期{m=0;sample_time=1;}if(k==control_time0)//control_time0为控制周期{k=0;control_time=1;}if(h==DAC_time0)//DAC_time0为DAC转换周期{h=0;DAC_time=1;}}系统流程图开始系统初始化DS1302时钟信号采集开始系统初始化DS1302时钟信号采集PT100温度数据采集处理读到的数据结束开始初始化函数A/D转换器进行A/D转换将转换后的电压转换为温度返回开始初始化函数A/D转换器进行A/D转换将转换后的电压转换为温度返回开始系统初始化调用时间、温度子程序调用显示子程序调用扫描按键程序图43A/D转换器流程图图45显示流程图总原理图4.1PROTEL99SE电气原理图:4.2PCB版图电源连接口,连接时注意极性,接错将损坏单片机电源连接口,连接时注意极性,接错将损坏单片机作为电源开关的跳线短路7805的跳线DX210k电位器模拟电源输出JMN1LED灯与模拟输入的跳线DA1、DA2电源指示灯按钮共阳数码管外晶体跳线、DS1302外参考电压跳线外接晶体编程接口STC89C51单片机五、电路仿真的设计与分析5.1Proteus仿真软件介绍:ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:①实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。②支持主流单片机系统的仿真。目前支持的单片机类型有:6800系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。③提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2等软件。④具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。5.2仿真分析:Proteus软件的仿真是依靠单片机程序来实现的,因此先将程序通过第三方KeilC51软件编译,连接,执行后产生一个HEX文件,再与Proteus仿真软件进行关联就可以实现仿真。本仿真电路的前置电路的两级放大电路中,通过调节一级放大器和二级放大电路的偏置电路中滑动变阻器范围来调节测温范围,使输入到A/D转换器的模拟电压在0-5V范围内,这样才能进行A/D转换。在仿真过程中由于软硬件影响,还有人为计算误差因素,使得测量温度结果与理想测量结果存在一定的误差,因此可以通过改变硬件参数和软件程序设计来减少误差。另外,在仿真过程中,按键会可能产生抖动现象,可以通过硬件来消除抖动。启动Proteus软件,按本次设计的原理图画出电路仿真图,根据元件属性设置相应元件参数。由于PT100温度传感器在仿真过程中波动较大,使得显示的温度跳跃变化,不易于温度显示与测量。因此在本次仿真中用一个电阻来代替PT100热电阻,通过改变电阻阻值来反映PT100温度测量。另外,由于在Proteus软件中不能仿真LM336恒压源,所以在本次仿真过程中采用软件自带的-2.5V的恒压原代替。对于数码管显示电路,在仿真过程中没有用三级管来驱动是为了画图的方便,这对仿真结果没多大影响,但在实际电路连接中必须在数码管加上三极管驱动。系统电路仿真图如图49所示。(仅设计了信号采集与调理,外加显示电路)六、体会心得通过这次对数字温度计的设计与制作,让我了解了设计单片机电路的程序,也让我了解了关于数字温度计的原理与设计理念,要设计一个电路总要先用仿真仿真成功之后才实际接线的。但是最后的成品却不一定与仿真时完全一样,因为,再实际接线中有着各种各样的条件制约着。而且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。本设计实现了温度的测量,在达到设计要求的同时也具备一定的扩展性,通过简单的软件修改,即可实现温度上下限控制和越限报警功能。本次设计使我更加深刻的认知到智能仪表控制的在现代仪表控制中的实用性,重要性。在以后的学习中我将加大智能仪表设计的学习。在课设中认知到了整个系统结构紧凑、简单可靠、操作灵活、功能强、性能价格比高,较好地满足现代生产和科研的需要。附录1C语言程序:#include<AT89X51.h>//STC89C51单片机头文件#include<macros.h>Flashunsignedchardisp[]={0xC0,0xF9,0xA4,0XB0,0x99,0x920x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//定义数码管译码数组Flashunsignedcharweizhi[]={0xfe,0xfd,0xfd,0xfd,0xef,0xdf,0xbf,0x7f};//定义数码管位选数组;#defineOFF0#defineON1DOUT=P2_5;//引脚定义CLK=P2_7;LATCH=P2_6;Unsignedcharxs[8];VoidLED(unsignedcharX){unsignedchari;for(i=8;i>=1;i--){if(x&0x80)P2_5=1;elseP2_5=0;P2_7=0;P2_7=1;}}SPI初始化;VoidSPI_MasterInit(void){DDRB|=(1〈〈5)|(1〈〈7);SPCR=(1〈〈6)|(1〈〈4)|(1〈〈5)|(1〈〈1)|(1〈〈0);}VoidSPI_595_Out(unsignedchari){SPDR=i;While(!SPDR&(1<<7))){;}}Voidmain(void){unsignedcharsaomiao=0;Unsignedcharw[10];DDRA=0x00;PORTA=0X00;DDRB=0XB0;PORTB=0Xff;DDRC=0XFC;PORTC=0XFF;PORTD=0X00;DDRD=0XFF;SPI_Masterlnit();While(1){{data[0]=1234;data[1]=5678;W[0]=data[0]%50;W[1]=data[0]/50%50;W[2]=data[0]/100%50;W[3]=data[0]/1000%50;W[4]=data[0]%50;W[5]=data[0]/50%50;W[6]=data[0]/100%50;W[7]=data[0]/1000%50;}voidwrite_byte(uchardat)//1302写入一字节{ uchara; ACC=dat; for(a=8;a>0;a--) { IO=ACC0; SCLK=0; //delayus(10); SCLK=1; ACC=ACC>>1; }}ucharread_byte()//向1302读出一字节{ uchara; for(a=8;a>0;a--) { ACC7=IO; SCLK=1; SCLK=0; ACC=ACC>>1; }return(ACC);}voidwrite_1302(ucharadd,uchardat)//向1302写入数据{ RST=0; SCLK=0; //delayus(5); RST=1; write_byte(add); write_byte(dat); //delayus(5); SCLK=1; RST=0; }ucharread_1302(ucharadd)//向1302读出数据{ uchartemp; RST=0; SCLK=0; //delayus(5); RST=1; write_byte(add); temp=read_byte(); //delayus(5); SCLK=1; RST=0; return(temp);}ucharBCD_Decimal(ucharbcd){ucharDecimal;Decimal=bcd>>4;return(Decimal=Decimal*10+(bcd&=0x0F));}PORTB&=~(1<<4);SPI_595_Out(weizhi[saomiao]);SPI_595_Out(disp[w[saomiao]];PORTB=|(1<<4);saomiao++;if(saomiao>=8saomiao=0;while(1){ucharj=0;uinti;DDAR=0xFF;DDRB=0XFF;PORTD=0XFF;DDRD=0X00;While(1){if((PIND|0XEE)==0XEF)For(i=0;i<1000;i++);If((PIND|0XEF)==0XEF){j++;If(j>99)j=0;}While(PIND|0XEF)==0XEF);PORTB=SHUMA[j/50];PORTC=SHUMA[j%50];PORTA=~j;}}{while(1)PORTC=SHUMA[counter];}//数码管与LED灯显示语句:if(display_time==1)//如果显示标记display_time=1,则执行显示任务,完成一位数码管显示{Xs[0]=1;Xs[1]=2;Xs[2]=3;Xs[3]=4;Xs[4]=5;Xs[5]=6;Xs[6]=7;Xs[7]=8;LED(weizhi[i]);LED(disp[Xs[i]]);P2_6=0;P2_6=1;i++;if(i==8)i=0;for(k=10;k>0;k--)for(j=0;j<10;j++);}//采用两片74HC595扫描数码管display_time==0;}//ADC转换与数字滤波语句:if(sample_time==1){sbitAD_CS=P2_4;sbitAD_CLK=P2_5;sbitAD_DAT=P2_6;unsignedintreadadc(void){unsignedchari;UnsignedintAD_Te,AD2,AD8;AD8=0;AD2=0;AD_CS=1;AD_CLK=0;AD_DAT=1;AD_CS=0;for(i=0;i<2;i++){AD_CLK=0;_nop_();AD2=AD2<<1;if(AD_DAT){AD+=0x01;}AD_CLK=1;_nop_();}}for(i=0;i<8;i++){AD_CLK=0;_nop_();AD8=AD<<8;if(AD_DAT){AD8+=0x01;}AD_CLK=1;_nop_();}AD_CLK=0;AD_CS=1;return(AD_Te);}charlp()//滤波函数{intsum=0;charcount;for(count=0;count<12;count++){sum+=get_ad();//获取ADC转换结果,并计算累加和delay();}return(char)(sum/12);}unsignedcharvadc;unsignedintvar;unsignedcharcodeK_TABLE[21]={100,103.9,107.79,111.67,115.54,119.40,123.24,127.08,130.90,134.71,138.51,142.29,146.07,149.83,153.58,157.33,161.05,164.77,168.48,172.17,175.86};//PT100分度表,每隔10℃对应一个电势值voidtab(void)//查表函数{usignedintv1=0,max,min,mid,j;v1=vadc*1000;min=0;max=100;while(1){mid=(max+min)/2;if(K_TAB[mid]=v1)var=mid*10;break;if(K_TAB[mid]>v1)max=mid;elsemin=mid;if(max-min)<=1{j=(K_TABLE[max]-K_TABLE[min])/10;j=(v1-K_TABLE[min])/j;var=10*min+j;break;}}}sample_time==0;}//ADC输出数值判断、报警、位式算法运算与控制量输出:if(control_time==1){charPV,SV-,SV+;if(PV>SV+)out=’OFF’if(PV>SV-)out=’ON’;}//具有比例算法的运算语句:{Error=SetPoint–temp_value;//求偏差LastError=Error;out=Proportion*Error//比例算法}control_time=0;}//DAC转换语句:if(DAC_time==1){sbitcs=P2^1;//TLC5615引脚sbitdin=P2^0;sbitclk=P3^7;{unsignedintj,m;unsignedchari=0,n;unsignedintdac_value;while(1){n++;if(n>=10)n=0;}while(1);for(m=0;m<3000;m++);}dac_value=value[n];//准备输出到DAC中的数值dac(dac_value);//调用DAC函数xs[0]=dac_value%10;xs[1]=dac_value/10%10;xs[2]=dac_value/100%10;xs[3]=dac_value/1000;xs[4]=5;xs[5]=6;xs[6]=7;xs[7]=8;LED(weizhi[j]);//选择数码管LED(disp[xs[j]]);//输出段码P2_6=0;//HC595锁存数据P2_6=1;j++;if(j==8)j=0;}}voiddac(unsignedintda)//DAC输出函数,直接移动18次,将低12位移入TLC5615{unsignedchari;cs=0;clk=0;for(i=0;i<18;i++){clk=0;if(da&0x8000)din=1;elsedin=0;_nop_();clk=1;da=da<<1;}cs=1;clk=0;clk=1;}DAC_time=0;}}//PCA0中断服务程序用于产生PWM输出(高优先级中断)voidPCA0_ISR(void)interrupt11//使用定时器0溢出作为时钟源{//PWM输出语句:unsignedintduty;//定义占空比变量,5000μs对应5V,1000μs对应1VTMOD=0X10;//定时器1,工作模式1,16位定时模式TH1=(65536-1000)/256;//定时1初始化TL1=(65536-1000)%256;ET1=1;//允许定时器1中断EA=1;//允许总中断TR1=1;//启动定时器1}//定时器1中断服务程序,用于产生显示、ADC转换、DAC与控制周期等标记定时器1中断服务程序:timer1()interrupt3{staticbitw;//定义位变量if(w==0)//当w=0时,P2.0输出低电平TL1=(65535-(6000-duty))%256;P2_0=0;}//这里用P2.0引脚输出PWM信号else{TH1=(65535-duty)/256;//定时器1赋初值(高电平区间)TL1=(65535-duty)%256;P2_0=1;//当w=0时,P2.0输出高电平}w=!w;}//设置定时器1中断级别低于PCAvoidtimer1()interrupt3{staticn,m,k,h;n++;m++,k++;h++;if(n==display_time0)//display_time0为显示周期{n=0;display_time=1;}if(m==sample_time0)//sample_time0为ADC转换周期{m=0;sample_time=1;}if(k==control_time0)//control_time0为控制周期{k=0;control_time=1;}if(h==DAC_time0)//DAC_time0为控制周期{h=0;DAC_time=1;}}附录2参考文献:【1】夏路易.智能仪表设计基础——基于Atmega16单片机.太原理工大学信息工程学院自动化系,2009.08【2】徐科军等.传感器与检测技术(第二版).电子工业出版社【3】牛昱光等.单片机原理与接口技术.电子工业出版社【4】中国单片机资源网/iczldata/Index.html【5】郑建国,一种高精度的铂电阻温度测量方案,自动化仪表[M],1997;【6】李志全等.智能仪表设计原理及应用[M],国防工业出版社,1998年6版;【7】李建民.单片机在温度控制系统中的应用[M],江汉大学学报,1996年6版;【8】杨振江等.智能仪器与数据采集系统中的新器件及应用[M],西安电子科技大学出版社,2001年12版;【9】刘坤.51单片机C语言应用开发技术大全[M],人民邮电出版社,2008年9版。【10】夏路易.《单片机原理及应用—基于SoC51》目录TOC\o"1-2"\h\z\u第一章总论 1一、项目概况 1二、项目提出的理由与过程 6三、项目建设的必要性 8四、项目的可行性 12第二章市场预测 15一、市场分析 15二、市场预测 16三、产品市场竞争力分析 19第三章建设规模与产品方案 22一、建设规模 22二、产品方案 22三、质量标准 22第四章项目建设地点 25一、项目建设地点选择 25二、项目建设地条件 25第五章技术方案、设备方案和工程方案 28一、技术方案 28二、产品特点 30三、主要设备方案 32四、工程方案 32第六章原材料与原料供应 35一、原料来源及运输方式 35二、燃料供应与运输方式 35第七章总图布置、运输、总体布局与公用辅助工程 37一、总图布置 37二、运输 38三、总体布局 38四、公用辅助工程 39第八章节能、节水与安全措施 44一、主要依据及标准 44

温馨提示

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

评论

0/150

提交评论