2024年2月21日发(作者:)

邵阳学院课程设计(论文)

1引言

1.1课题研究的目的和意义

粮食是人类赖以生存的基本物质,是关系国民生计的重要物资,也是军需民食的特殊商品。中国有句老话:“常将有日思无日,莫待无时想有时”,居安思危,未雨绸缪,永远不会过时。随着粮食流通体制改革的不断深化、粮食市场全面放开已成定局,随着人民生活水平的提高,全社会对粮食质量问题提出了新的要求;加入世界贸易组织后粮食贸易的全球化,客观上也要求粮食质量工作与国际接轨。面对新形势,如何加强储粮工作,发挥粮食部门在粮食储存方面的优势,是摆在粮食储备工作面前的一个重要课题。目前我国地方各大型粮库都存在着不同程度的粮食储存变质的问题。大部分粮库还采取人工测量温度的方法,不仅增大了粮库工作人员的工作量,而且工作效率底,尤其是大型粮库的温度测量不能及时而彻底的完成,导致大面积坏粮的情况时有发生。据统计,我国每年因粮食储存不当而发霉变质的粮食就达上亿斤,造成无法估量的的经济损失。

粮食的温度是影响粮食储藏的重要参数,两者之间是相互关联的,粮食在正常储藏条件下(即安全条件下),含水量一般在12%以下,不会使粮食温度发生突变,一旦粮食受潮含水量增加,超过20%以上时,就满足了粮粒发芽的条件,新陈代谢加快而产生呼吸热,使局部粮温升高,必然引起粮食发热和霉变,且极易产生连锁反应,从而造成难以挽回的损失因此,粮食温度监控技术在农业上的应用是十分重要的。

1.2粮仓温度监控技术的研究现状

随着计算机科学和自动化水平的不断提高,在各种应用领域都大量采用自动控制系统。自动控制系统在现代化的进程中有着极其重要和广泛的应用。自动控制技术的采用使各种被控对象成生明显令人惊羡的结果:减轻人的劳动强度,提高生产效率,改进了产品质量,改善了工作环境,减少了能量的损耗,增加了资源材料的利用率。特别是20世80年代以来,控制理论的进一步发展和计算机在控制系统中的应用,使自动控制取得了辉煌成果。单片机的应用,使嵌入式自动控制系统成为一种崭新的形式,大大扩大了自动控制的应用领域,使自动控制成为无处不在的一种技术。

早期粮情监测主要采用温度计测量法,它是将温度计放入特制的插杆中,根据经验插在粮堆的多个测温点,管理人员定期拔出读数,确定粮温的高、低,决定是否倒粮。这种方法对储粮有一定的作用,但由于温度计精度、人工读数的人为因素等原因,温度检测不仅速度慢,而且精度低,抽样不彻底,局部粮温过高不易被及时发现,导致因局部粮食发霉变质引起大面积坏粮的情况时有发生。

1

邵阳学院课程设计(论文)

1.3温度传感器技术

传感器技术是现代信息技术的主要内容之一,信息技术包括计算机技术、通信技术和传感器技术。计算机和通信技术发展极快,相当成熟,而传感器应用技术因为需要使用模拟技术,而模拟技术还有很多问题难以解决,因此传感器应用技术也有待进一步发展。为了适应现代科学技术的发展,世界众多国家都把传感器技术列为现代的关键技术之一。通常将能把非电量转换为电量的器件称为传感器,其实质上是一种功能块,作用是将来自外界的各种信号转换成电信号。它是实现测试与自动控制系统的首要环节。如果没有传感器对原始参数进行精确可靠的测量,那么无论是信号转换或信息处理,或者最佳数据的显示和控制都将无法实现。

温度传感器,使用范围广,数量多,居各种传感器之首。温度传感器的发展大致经历了以下三个阶段:传统的分立式温度传感器(含敏感元件),主要是能够进行非电量和电量之间转换;模拟集成温度传感器/控制器;智能温度传感器。目前,国际上新型温度传感器正从模拟式向数字式、集成化、智能化及网络化的方向发展。温度传感器按传感器与被测介质的接触方式可分为接触式温度传感器和非接触式温度传感器两大类,其中,接触式温度传感器的测温元件与被测对象要有良好的热接触,通过热传导及对流原理达到热平衡,这个示值即为被测对象的温度。这种测温方法精度比较高,并可测量物体内部的温度分布。但对于运动的、热容量比较小的及对感温元件有腐蚀作用的对象,这种方法将会产生很大的误差。非接触测温的测温元件与被测对象互不接触。常用的是辐射热交换原理。此种测温方法的主要特点是可测量运动状态的小目标及热容量小或变化迅速的对象,也可测量温度场的温度分布,但受环境的影响比较大。

温度传感器的发展大致可分为以下几种:

(1)热电偶传感器。热电偶传感器是工业测量中应用最广泛的一种温度传感器,它与被测对象直接接触,不受中间介质的影响,具有较高的精度;测量范围广,可从-50℃~1600℃进行连续测量,特殊的热电偶如金,铁,镍,铬最低可测到-269℃,钨,铼最高可达2800℃。

(2)模拟集成温度传感器。采用硅半导体集成工艺制成的,因此亦称硅传感器或单片集成温度传感器。模拟集成温度传感器是在20世纪80年代问世的,它将温度传感器集成在一个芯片上、可完成温度测量及模拟信号输出等功能。模拟集成温度传感器的主要特点是:功能单一、测温误差小、价格低、响应速度快、传输距离远、体积小、微功耗等,适合远距离测温,不需要进行非线性校准,外围电路简单。

2

邵阳学院课程设计(论文)

(3)光纤传感器。光纤测温技术可分为两类:全辐射测温法,单辐射测温法,双波长测温法,多波长测温法等。特点是:光纤挠性好、透光谱段宽、传输损耗低,无论是就地使用或远传均十分方便而且光纤直径小,可以单根、成束、Y型或阵列方式使用,结构布置简单且体积小。缺点是:测量起来困难,难于实现较高的精度,工艺比较复杂,且造价高,推广应用有一定困难。

(4)半导体吸收式光纤温度传感器。半导体吸收式光纤温度传感器是利用了半导体材料的吸收光谱随温度变化的特性实现的。一种传光型光纤温度传感器,是指在光纤传感系统中,光纤仅作为光波的传输通路,而利用其它如光学式或机械式的敏感元件来感受被测温度的变化。在这类传感器中,半导体吸收式光纤温度传感器是研究得比较深入的一种。

(5)智能温度传感器。智能温度传感器(亦称数字温度传感器)是在20世纪90年代中期问世的。它是微电子技术、计算机技术和自动测试技术(ATE)的结晶。目前,国际上已开发出多种智能温度传感器系列产品。智能温度传感器内部包含温度传感器、A/D传感器、信号处理器、存储器(或寄存器)和接口电路。有的产品还带多路选择器、中央控制器(CPU)、随机存取存储器(RAM)和只读存储器(ROM)。智能温度传感器能输出温度数据及相关的温度控制量,适配各种微控制器(MCU),并且可通过软件来实现测试功能,即智能化取决于软件的开发水平。

随着科学技术的不断进步与发展,温度传感器的种类日益繁多,数字温度传感器更因适用于各种微处理器接口组成的自动温度控制系统具有可以克服模拟传感器与微处理器接口时需要信号调理电路和A/D转换器的弊端等优点,被广泛应用于工业控制、电子测温计、医疗仪器等各种温度控制系统中。其中,比较有代表性的数字温度传感器有DS1820、MAX6575、DS1722、MAX6635等。相比较而言,传统的温度检测以热敏电阻为温度敏感元件,热敏电阻成本低,但需要后续信号处理电路,而且热敏电阻的可靠性相对较差,测量温度的准确度低,检测系统的精度差。数字式温度传感器的种类也不少,并且在实际工程设计中具有上述诸多优点。

3

邵阳学院课程设计(论文)

2系统总体方案设计

本章首先进行系统需求分析,然后介绍系统实现方案。

2.1系统需求分析

本系统主要进行温度的控制,温度对粮食储藏的影响是巨大的,因此,从温度对粮食储藏的影响的角度进行系统需求分析。

粮食入库后,在通常情况下,粮堆水分会不断发生变化。其主要原因是:

第一,外湿引起粮堆水分变化。外湿一般只影响到粮食的表层,表层以下无明显的日变化,只有幅度不大的年变化,年变幅度平均为1%左右。第二,粮堆内部水分的转移引起水分变化。不同水分的粮食混同入库后,根据吸湿平衡的规律,原来水分含量高的粮粒会散发部分水汽而减少水分,而原来水分含量低的粮粒则会吸收水汽而增加水分,一直达到水分相对平衡,这种现象叫“水分再分配”。另外一种现象叫“湿热扩散”,也能引起粮堆水分变化。当粮堆局部温高湿大时,其湿热空气由于水汽压力较大,便会根据热量传导的方向移动,即由高温部位向低温部位移动,导致低温部分湿度增加,水分增大。粮堆各部分之间温差越大,湿热扩散就越严重,即使粮食水分较小,如温差过大,也可能发生湿热扩散。第三,温差结露引起粮堆水分变化。粮食在贮藏过程中,由于外界温度的变化和粮堆内生物成分的生命活动而引起粮堆各部位出现温差时,在湿热扩散和空气对流的作用下,粮堆内外均易产生结露现象。它是引起粮堆外层和局部水分增加的最重要原因。粮堆结露,能使局部水分迅速增加,造成贮粮发热霉变以至发芽的严重后果。因此,必须注意防止结露。若出现局部水分突然上升,则要采取措施,果断处理,以防事故扩大。气温、粮温和仓温之间的相互影响如表2.1所示。

表2.1 三温的一般规律变化表

气温

仓温

粮温

日变

日出前最低,午后2小时左右最高

最低最高仓温出现的时间迟后气温1—2小时

年变

一二月最低,七八月最高

气温上升季节,仓温低于气温;气温下降季节,仓温高于气温。

最低最高仓温出现的时间迟后气温1二三月最低,八九月最低,迟后气—2小时。一般只波及粮面30厘米深,温一个月以上。

每天只升降0.5°C—1°C

粮温的高低,直接影响到贮粮的安全。在一定的温度范围内,粮食的呼吸强度随着温度的上升而增加,粮食的劣变速度也随着温度的上升而加快。实验表明,常温下贮藏的小麦经过一段时间都会导致品质下降,在化学成分上一般是干物质的分解,

4

邵阳学院课程设计(论文)

而在低温下(指15℃以下)贮藏的小麦,其劣变速度明显减缓。另外,在低温下贮藏小麦,可以保持其新鲜程度,改进小麦的工艺、食用和烘焙品质。低温还能抑制虫、霉的生长,对安全贮粮十分有利。因此,在生产实践中常常使用低温贮粮技术解决面粉、大米等成品粮度夏难的问题。

粮食入库后,正常的粮温主要随大气温度的变化而变化,即气温影响仓温,仓温影响粮温。但由于仓库具有一定的密闭、隔热性能,粮堆又是热的不良导体,粮温、仓温的升降速度及升降幅度均滞后于气温。粮温受气温影响的大小,还与粮堆的孔隙度和仓库的隔热和密闭性能、堆装方式以及入库的时间等多种因素有关。因此,在分析粮温变化时,必须综合多方面的情况加以考虑,才能准确地判断粮温是否正常,以便及早发现问题,做好预防工作。

2.2系统框架

系统主要由温度传感器、单片机、串口通讯电路、上位机、控制电路、时钟电路、键盘输入电路、显示电路、执行装置等组成。后面的控制电路用FPGA(可编程逻辑门阵列)对温度信号进行处理,以及对执行机构进行控制。本系统进行了如下结构设计:粮仓温度监控系统组成框图2.1所示。

图2.1 粮仓温湿度监控系统组成框图

由单片机通过温度传感器控制采集温度信息,并将温度信息送入控制电路;单片机选用51系列单片机AT89S52,除用于采集温度信息外,还通过串口通讯电路,将温度信息传入上位机;上位机为PC机,用于存储温度信息;串口通讯采用异步全双工通讯方式,考虑到通讯距离问题,采用485通讯方式,并在上位机端进行485/232电平转换;控制电路中设定了度的期望值,键盘输入电路根据实际需要,用于改变该期望值;显示电路用于显示温度信息的期望值和实测值;时钟电路为单片机和控制电路提供工作时钟;控制电路除进行输入、显示控制外,还通过模糊控制理论控制执行电路进行升温/降温。

5

邵阳学院课程设计(论文)

3系统硬件电路设计

硬件电路设计是设计整个粮仓监控系统的基础,本章主要进行硬件系统的设计和实现,主要包括温度数据采集电路,单片机部分以及其它电路的设计,其中其它电路包括本节进行串口通讯电路、时钟电路、键盘电路、显示电路、控制电路以及执行装置的设计。下面逐一介绍各个部分。

3.1温度数据采集电路

用于粮仓温湿度监控系统的温度传感器主要是Dallas的DS1820系列温度传感器。DS1820是美国DALLAS公司生产的单线数字温度传感器,它具有微型化、低功耗、高性能、抗干拢能力强、易配微处理器等优点,特别适合于构成多点温度测控系统,可直接将温度转化成串行数字信号供微机处理,而且每片DS1820都有唯一的产品号并可存入其ROM中,以便在构成温湿度测控系统时在单线上挂接任意多个DS1820芯片。从DS1820读出或写入DS1820信息仅需要一根口线,其读写及温度变换功率来源于数据总线,该总线本身也可以向所挂接的DS1820供电,而无需额处电源。DS1820能提供九位温度读数,它无需任何外围硬件即可方便地构成温度检测系统,因而使用DS1820可使系统结构更趋简单.可靠性更高。

3.1.1 DS1820温度传感器

温度传感器选用一总线温度传感器DS1820。DS1820是美国DALLAS半导体公司生产的可组网数字式温度传感器,与其它温度传感器相比,DS1820具有以下特性:独特的单线接口方式,DS1820在与微处理器连接时仅需要一条口线即可实现微处理器与DS1820的双向通讯。DS1820支持多点组网功能,多个DS1820可以并联在唯一的三线上,实现组网多点测温。DS1820在使用中不需要任何外围元件,全部传感器元件及转换电路集成在形如一只三极管的集成电路内。温度范围-55℃~+125℃,固有测温分辨率±0.5℃;测量结果直接输出数字温度信号,以“一线总线”串行传送给CPU,同时可传送CRC效验码,具有极强的抗干扰纠错能力;测量结果以9位数字量方式串行传送。

DS1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:

(1)系统的硬件虽然简单但需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。

(2)在DS1820的有关资料中均未提及单总线上所挂DS1820数量问题,容易使

6

邵阳学院课程设计(论文)

人误认为可以挂任意多个DS1820,在实际应用中并非如此。当单总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。

(3)连接DS1820的总线电缆有长度限制。由于信号电缆本身存在电阻,距离过长时将导致信号衰减。试验中,当采用普通信号电缆传输长度超过50m时,读取的测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m。

DS1820有PR-35和SOIC两种封装形式,管脚排列如表3.1所示。本系统选用PR-35封装形式。DS1820返回温度值虽然只有9位,如图3.1所示。

表3.1 DS1820管脚排列

管脚

8脚SOIC 3脚PR-35

2 1

1 2

8 3

3 4 5 6 7

管脚定义

GND

I|O

VCC

NC

说明

数据输入端

电源

空脚

图3.1 DS1820温度值表示方法

D9为符号位,0表示正,1表示负,高字节的其他位(D10~D15)是以符号位的扩展位表示的;D0~D8为数据位,以二进制补码表示。温度是以1/2℃LSB形式表示的。表3.2为数值和温度的关系。

表3.2 DS1820数值和温度的关系

温度

+125

+25

+0.5

0

+0.5

-25

-55

数据(二进制)

0000 0000 1111 1010

0000 0000 0011 0010

0000 0000 0000 0001

0000 0000 0000 0000

1111 1111 1111 1111

1111 1111 1100 1110

1111 1111 1001 0010

数据(十六进制)

00FAH

0032H

0001H

0000H

FFFFH

FFCEH

FF92H

因到粮仓内环境温度不能出现负温情况,因此本系统不考虑负温情况,这样,在硬件选取上可以考虑选用商业级器件,不必要选用工业级器件,可以大幅度降低成本。因此单片机读取温度信息后,只需将低字节(D0~D8)送入上位机和控制电路即可。

7

邵阳学院课程设计(论文)

3.1.2 测温电路图

DS1820测量温度时使用特有的温度测量技术。DS1820内部的低温度系数振荡器能产生稳定的频率信号f0,高温度系数振荡器则将被测温度转换成频率信号f。当计数门打开时,DS1820对f 0计数,计数门开通时间由高温度系数振荡器决定。芯片内部还有斜率累加器,可对频率的非线性予以补偿。测量结果存入温度寄存器中。

在64位ROM的最高有效字节中存有循环冗余校验码(CRC)。主机根据ROM的前56位来计算CRC值,并和存入DS1820中的CRC值作比较,以判断主机收到的ROM数据是否正确。CRC的函数表达式为:CRC=X8+X5+X3+1(占君等.2006)。此外,DS1820尚需依上式为暂存器中的数据来产生一个8位CRC送给主机,以确保暂存器数据传送无误。

在系统安装及工作之前应将主机逐个与DS1820挂接,以读出其序列号。其工作过程为:主机发出一个脉冲,待“0”电平大于480μs后,复位DS1820,在DS1820所发响应脉冲由主机接收后,主机再发读ROM命令代码33H,然后发一个脉冲(15μs),并接着读取DS1820序列号的一位。用同样方法读取序列号的56位。另外,由于DS1820单线通信功能是分时完成的,遵循严格的时隙概念,因此,系统对DS1820和各种操作必须按协议进行,即:初始化DS1820(发复位脉冲),发ROM功能命令,发存储器操作命令,处理数据。

DS1820单点测温电路框图如图3.2所示,其中,网络定义P3.4为89S52的P3.4引脚。

图3.2 DS1820单点测温电路图

8

邵阳学院课程设计(论文)

3.2单片机设计部分

单片机选用ATMEL公司的可在线编程的AT89S52,用于温度采集及数据通讯。AT89S52具有一下特点:完全兼容MCS-51指令系统;8Kb的可反复擦写FLASH ROM(程序存储器);256个字节的内RAM;32个可编程的双向I/O口(并行I/O口);3个16位定时器/计数器;8个中断源;1个串行I/O口;内置看门狗电路,在程序死机后自动复位。

AT89S52有3个并行I/O端口,P0:P0.0~P0.7、P1.0~P1.7、P2.0~P2.7。P0端口在没有片内存储器时,可以作为普通I/O口使用,外接存储器时作为地址线/数据线使用。P1端口可以作为普通I/O口使用,同时P1.0、P1.1、P1.5~P1.7还具备特殊功能,如表3.3所示。P2端口在没有片外存储器时,可以作为普通I/O口使用,外接存储器时作为高8位地址使用。

表3.3 AT89S52 P1端口的特殊功能

引脚

P1.0

P1.1

P1.5

P1.6

P1.7

特殊功能

T2: 定时器|计数器2的外部计数器输入

T2EX: 定时器|计数器2的捕捉|重载触发及方向控制

MOSI: 用于在线编程(ISP)

MOSI: 用于在线编程(ISP)

SCK: 用于在线编程(ISP)

表3.4 AT89S52 P3端口的特殊功能

引脚

P3.0

P3.1

P3.2

P3.3

P3.4

P3.5

P3.6

P3.7

特殊功能

RXD (串行口输入)

TXD (串行口输入)

INT0 (外部中断输入0)

INT1 (外部中断输入1)

T0(定时器0外部输入)

T1(定时器1外部输入)

WR (外部数据存储器写控制)

RD (外部数据存储器读控制)

单片机在本粮仓温度监控系统中主要用于通讯及温度采集。P0口用于将温度信息送入控制电路,P3.0、P3.1用于与上位机的串行通讯,P3.4接DS1820。单片机与控制电路共用一个外部时钟,采用片内存储器,设有上电复位功能。电路图见图3.3,选用PLCC-44封装的AT89S52。

9

邵阳学院课程设计(论文)

图3.3 AT89S52连接关系图

4软件设计及实现

4.1 FPGA控制电路源程序

library IEEE;

use _LOGIC_;

use _LOGIC_;

use _LOGIC_;

entity c6 is

pro(clk,pt0,pt1,pt2,pt3,pt4,pt5,pt6,pt7,ph,pdt1,pdt2,pdt3,pdt4,pdh1,pdh2,pdh3,pdh4;in

std_logic;

a,b,c,d,e,f,g,db,t_100,t_10,t_1,t_db,t0_10,t0_1,h_10,h_1,h0_10,h0_1:out std_logic);

end c6;

architecture Behavioral of c6 is

signal cnt4:std_logic_vector(3 downto 0);

signal tn_cnt7:std_logic_vector(6 downto 0);

signal tn_cnt12:std_logic_vector(11 downto 0);

signal tn_H:std_logic_vector(3 downto 0);

signal tn_C:std_logic_vector(3 downto 0);

signal tn_L:std_logic_vector(3 downto 0);

signal tn_Hout:std_logic_vector(3 downto 0);

signal tn_Cout:std_logic_vector(3 downto 0);

signal tn_Lout:std_logic_vector(3 downto 0);

signal tn0_cnt7:std_logic_vector(6 downto 0);

10

邵阳学院课程设计(论文)

signal tn0_cnt8:std_logic_vector(7 downto 0);

signal tn0_H:std_logic_vector(3 downto 0);

signal tn0_L:std_logic_vector(3 downto 0);

signal tn0_Hout:std_logic_vector(3 downto 0);

signal tn0_Lout:std_logic_vector(3 downto 0);

signal hn_cnt7:std_logic_vector(6 downto 0);

signal hn_cnt8:std_logic_vector(7 downto 0);

signal hn_H:std_logic_vector(3 downto 0);

signal hn_L:std_logic_vector(3 downto 0);

signal hn_Hout:std_logic_vector(3 downto 0);

signal hn_Lout:std_logic_vector(3 downto 0);

signal hn0_cnt7:std_logic_vector(6 downto 0);

signal hn0_cnt8:std_logic_vector(7 downto 0)

signal hn0_H:std_logic_vector(3 downto 0);

signal hn0_L:std_logic_vector(3 downto 0);

signal hn0_Hout:std_logic_vector(3 downto 0

signal hn0_Lout:std_logic_vector(3 downto 0

signal cnt9:std_logic_vector(8 downto 0);

signal cntout:std_logic_vector(3 downto 0);

signal tn:std_logic_vector(6 downto 0);

signal tn1:std_logic_vector(6 downto 0);

signal dtn:std_logic_vector(6 downto 0);

signal kn:std_logic_vector(6 downto 0);

signal kn1:std_logic_vector(6 downto 0);

signal hn:std_logic_vector(6 downto 0);

signal hn1:std_logic_vector(6 downto 0);

signal dhn:std_logic_vector(6 downto 0);

signal dth:std_logic_vector(7 downto 0);

signal t0:std_logic_vector(6 downto 0);

signal h0:std_logic_vector(6 downto 0);

signal dt0:std_logic_vector(6 downto 0);

signal dh0:std_logic_vector(6 downto 0);

signal fdt0:std_logic_vector(6 downto 0);

signal fdh0:std_logic_vector(6 downto 0);

signal tn0:std_logic_vector(6 downto 0);

signal hn0:std_logic_vector(6 downto 0);

signal x1:std_logic_vector(6 downto 0);

signal x2:std_logic_vector(6 downto 0);

signal x3:std_logic_vector(6 downto 0);

signal dx1:std_logic_vector(6 downto 0);

signal dx2:std_logic_vector(6 downto 0);

signal dx3:std_logic_vector(6 downto 0);

signal y1:std_logic_vector(6 downto 0);

signal y2:std_logic_vector(6 downto 0);

11

邵阳学院课程设计(论文)

signal y3:std_logic_vector(6 downto 0);

signal dy1:std_logic_vector(6 downto 0);

signal dy2:std_logic_vector(6 downto 0);

signal dy3:std_logic_vector(6 downto 0);

signal ct:std_logic_vector(5 downto 0);

signal ch:std_logic_vector(5 downto 0);

signal led:std_logic_vector(6 downto 0);

signal tzero,clk1,clk2,hclk,kt,led_dth_in:std_logic;

signal t_a1,t_a2,t_a3,t_a4,t0_a1,t0_a2,h_a1,h_a2,h0_a1,h0_a2,db1:std_logic;

begin

--时钟部分--

process(clk)

begin

if clk'event and clk='0'then

cnt4<=cnt4+'1';

cnt9<=cnt9+'1';

end if;

end process;

clk1<=cnt9(8);--采样周期

clk2<=cnt9(6);--键盘输入控制时钟

--温度初始目标值设定--

t0<='0010100'';--温度初始设定,20.0度

--键盘输入部分,用于手动改变温度设定值--

dth_in(0)<=pdt1;

dth_in(1)<=pdt2;

dth_in(2)<=pdt3;

dth_in(3)<=pdt4;

dth_in(4)<=pdh1;

dth_in(5)<=pdh2;

dth_in(6)<=pdh3;

dth_in(7)<=pdh4;

process(clk2)

begin

if clk'event and clk2='1'then

case dth_in is

when"00000001"=>dt0<=dt0+'1';

when"00000010"=>fdt0<=fdt0+'1'1;

when"00000100"=>dt0<=dt0+''1010'';

when"00001000"=>fdt0<=fdt0+''1010'';

when"00010000"=>dh0<=dh0+'1';

when"00100000"=>fdh0<=fdh0+'1';

when"01000000"=>dh0<=dh0+''1010'';

when"10000000"=>fdh0<=fdh0+''1010'';

when"00000000"=>led_dth_in<='1';

12

邵阳学院课程设计(论文)

when others=>led_dth_in<='0';--报警,同时按下两个或两个以上按键--

end case;

end if;

end process;

--温度初始目标值设定--

tn0<=t0+dt0-fdt0;

hn0<=h0+dh0-fdh0;

--温度及其增量采集部分--

th(0)<=pt1;

th(1)<=pt2;

th(2)<=pt3;

th(3)<=pt4;

th(4)<=pt5;

th(5)<=pt6;

th(6)<=pt7;--th:温度整数部分

tzero<=pt0;--tzero:温度小数不分

hclk<=ph;

process(hclk)

begin

if hclk'event and hclk='1'then

kn<=kn+'1';

end if;

end process;

process(clk)

begin

if clk'event and clk='1'then

if tn>=tn1 then--tn1,kn1,hn1:tn,kn,hn的前一状态

dtn<=tn-tn1;--dtn:温度增量

kt<='0';--kt:符号位,为'0'表示温度升高,为'1'表示温度降低

else

dth<=tn1-tn;

kt<='1';

end if;

if kn>=kn1 then

hn<=kn-kn1;--hn:温度

if kn-kn1>=hn1 then

dhn<=kn-kn1-hn1

kn<='0'

else

dhn<=hn1-(kn-kn1);

kh<='1';

end if;

else

hn<="1111111"-kn1+kn;

13

邵阳学院课程设计(论文)

if"1111111"-kn1+kn>=hn1 then

dhn<="1111111"-kn1+kn-hn1

kh<='0'

else

dhn<=hn1-("1111111"-kn1+kn);

kh<='1';

end if;

end if;

end if;

if clk'event and clk1='0'then

tn1<=tn;

kn1<=kn;

hn1<=hn;

end if;

end process;

4.2 单片机测温源程序

测温程序代码:

DS1820.C

#include

sbit DQ=P3^4;//定义端口

typedef unsigned char byte;

typedef unsigned int word;

//延时

void delay(word useconds)

{

for(;useconds>0;useconds--);

}

//复位

byte ow_reset(void)

{

byte presence;

DQ=0;//DQ低电平

delay(29);//480us

DQ=1;//DQ高电平

delay(3);//等待

presence=DQ;//presence信号

delay(25);

return(presence);

}//0允许,1=禁止t

//从1-wire总线上读取一个字节byte read_byte(void)

{

byte i;

14

邵阳学院课程设计(论文)

byte value=0;

for(i=8;i>0;i--)

{

value>>=1;

DQ=0;

DQ=1;

delay(1);

if(DQ)value|=0x80;

delay(6);

}

return(value);

}

//向1-WIRE总线上写一个字节void write_byte(char val)

{

byte i;

for(i=8;i>0;i--)//一次写一字节

{

DQ=0;

DQ=val&0x01;

delay(5);

DQ=1;

val=val/2;

}

delay(5);

}

//读取温度

char Read_Temperature(void)

{

union{

byte c[2];

int x;

}temp;

ow_reset();

write_byte(0xCC);//跳过ROM

write_byte(0xBE);//读

temp.c[1]=read_byte();

temp.c[0]=read_byte();

ow_reset();

write_byte(0xCC);

write_byte(0x44);//开始

return temp.x/2;

}

15

邵阳学院课程设计(论文)

5结论

本系统是以XILINX公司的FPGA(可编程逻辑门阵列)作为粮仓温度监控系统控制电路的核心,实现了对执行机构的模糊控制。外围电路主要有键盘显示电路、时钟电路、执行机构控制电路、温度采集与串口电路等。

控制电路部分,整个控制电路由FPGA、键盘和显示电路、执行机构组成。本系统具有以下优点:

(1)采用一总线数字温度传感器DS1820,彻底避免了模拟传感器带来的供地干扰和线路干扰问题,简化了系统复杂度,提高了系统测量的准确度和智能化程度,在一定程度上降低了系统的成本。

(2)用FPGA完成了模糊控制器的设计,实现了对粮仓温度的控制。用FPGA来实现模糊控制算法,省去了相当数目复杂的门电路。减少了系统的大量的外围数字电路的设计,提高系统集成度、可靠性、低功耗、低成本,优化系统性能并缩短设计周期,开发费用最低、风险最小。

(3)FPGA使用非常灵活,同一片FPGA通过不同的编程数据可以产生不同的电路功能。本系统中的时钟电路,温度初始目标值的设定,键盘输入电路,温度及其增量采集,模糊控制部分,显示部分的功能都由FPGA的具体编程来实现。

16

邵阳学院课程设计(论文)

参考文献

[1] 陈波.中国粮食安全成本及其结构优化研究[D].华中农业大学学报.2007

[2] 陈京培.基于AT89S52高性能单片机串行通信电路的设计[J].科技信息(学术研究) .2007

[3] 陈意军.基于VHDL的FPGA开发[J].电子与封装.2006

[4] 程耀林.FPGA的系统设计方法解析[J].微型电脑应用.2007

17