基于FPGA的温度监控系统设计
基于fpga的智能温度控制系统的设计
基于fpga的智能温度控制系统的设计随着科技的发展,智能控制系统被广泛应用于工业领域和智能家居中,其中智能温度控制系统是其中的一种。
智能温度控制系统能够根据环境温度变化自动控制加热或制冷设备,从而保证环境温度始终在设定值范围内,提高生产效率和舒适度。
本文将介绍一种基于FPGA的智能温度控制系统设计方案。
1. 系统设计该系统由传感器、FPGA、驱动器以及显示器组成。
传感器用于检测环境温度变化,FPGA用于对传感器信号进行处理,驱动器用于控制加热或制冷设备,显示器用于显示系统状态。
系统设计流程如下:1.1 传感器传感器可以选择温度传感器、热敏电阻传感器或热电偶传感器等。
本系统选用温度传感器,将传感器输出的模拟信号转化为FPGA可读的数字信号,从而实现数字信号化。
1.2 数字信号化将模拟信号数字化是实现控制系统的关键所在。
数字信号化是通过模数转换器(ADC)将模拟信号转化为数字信号的过程。
本系统将模拟信号转化为12位数字信号。
1.3 FPGA处理FPGA芯片(Field-Programmable Gate Array)是一种可编程逻辑器件,它能够快速地对数字信号进行处理。
FPGA芯片是本系统的核心处理器,它被用来对传感器信号进行处理,根据环境温度的变化决定加热还是制冷,从而保持环境温度在设定范围内。
具体的处理流程如下:(1)读取温度传感器数据。
(2)将传感器输出的模拟信号转变为数字信号。
(3)将数字信号与设定的环境温度范围进行比较,以决定是否需要进行加热或制冷。
(4)对加热或制冷设备进行控制。
1.4 驱动器设计由于加热或制冷设备的控制电源电平和FPGA的电平不一致,需要通过驱动器进行转换。
本系统使用驱动器将FPGA输出的信号转化成能够控制加热或制冷设备的继电器信号。
1.5 显示器设计本系统使用7段LED数码管作为显示器,用于显示当前环境温度以及系统状态。
系统状态包括温度过高、温度过低、正常等状态,以告知用户系统运行情况。
基于FPGA的温度控制系统设计与实现
[ 关 键 词 ] FG P A; V ro D ; PD控制 ; D 1B 0 测温 el H L ig I S82 ; 【 中图分类号] T 2 3 P7 [ 文献标识码] A
基于微处理器的温度控制系统改变 了传统模拟温度控制系统参数整定不灵活的问题。但是常规微 处理器无法避免在恶劣环境下程序跑飞的问题。利用 F G P A实现温度控制系统的设计 , 不仅可以提高
位置型数字 PD控制算法如式 ( ) I 2
( ): [( )+ 后 e尼
=
()+ 。
]
() 2
| ()+ :( + ek ek 1] j k k e ) k[()一 ( 一 ) } e
收稿 日 2 1 — 1 3 期: 0 1 — 0 0
基金项 目: 陕西省教育厅基金资助项目(9K 7 ) 0J38 。
1 1 P D控 制 器的 实现 . I
常规 PD控制器结构清晰 、 I 参数调节方便、 鲁棒性强 , 并且算法简单高效 , 在工业现场是应用最广泛
的控制器。模拟 PD控制表达式如 I
() [ )+ t
eT d ( ) r+
]
() 1
其 中, 为比例增益 , 为积分时间常数 , 为微分时间常数 ,() , t - () e£ =- ) y £为偏差 , () ( u t为控制量。
V0 . 7 No 2 12 .
第 2 卷第 2期 7
[ 文章编号]6 3 2 4 (0 1 0 0 1 o 17 — 94 2 1 )2— 05一 5
基于 F G P A的温 度控制 系统设计 与实现
王春 侠 聂 , 翔2
(. 1陕西理工学 院 电气 工程 系 , 陕西 汉 中 730 ; . 203 2 陕西理工学 院 电信工程系 , 陕西 汉 中 730 ) 203
基于FPGA的智能温度控制系统设计
湖南文理学院课程设计报告课程名称:通信系统课程设计专业班级:通信1101班学号(06位)学生姓名:指导教师:***完成时间:2014年11 月21 日报告成绩:基于FPGA的智能温度控制的设计目录1.设计题目 (1)2.设计要求 (1)3.设计作用与目的 (1)4.所用设备(仪器)和软件 (2)5.系统设计方案 (2)5.1 系统总体设计 (2)5.2 工作原理 (3)5.2.1 温度控制系统特性研究 (3)6.智能温度控制器系统硬件设计 (4)6.1 系统方案设计 (4)6.1.1 FPGA与DAC0832结合的目的 (4)6.1.2 系统需求分析 (4)6.1.3系统需求分析 (5)6.2系统结构 (6)6.2.1调试/配置电路 (6)7.智能温度控制系统软件设计 (8)7.1 软件总体设计 (8)7.1.1 设定定义 (8)7.1.2 VHDL实现 (8)7.2 软件程序设计 (9)7.2.1 分频模块 (9)7.2.2 键盘模块 (10)7.2.3 ADC0809 控制模块 (12)7.2.4 三模块连接在一块 (13)7.3 本章小结 (15)8.实验调试结果 (15)8.1 实验条件 (15)8.2 实验结果及分析 (15)8.3 本章小结 (17)9.设计中的问题及解决方法 (18)10.设计心得 (18)11.参考文献 (18)12.附录 (18)1.设计题目基于FPGA的智能温度控制的设计2.设计要求通过前向温度采集电路,采集当前孵化器内部的温度信号,将采集到的模拟信号通过ADC0809模数转换芯片,转变为FPGA可控的数字信号,FPGA芯片根据输入的当前实际温度,控制输出合理的数字信号,再由DAC0832转换为模拟信号,输入到后向加热执行电路,以此来完成对整个孵化器的温度控制。
整个系统中,带有温度传感器的前向温度采集电路作为系统的反馈环节,实时反映当前环境的具体温度。
3.设计作用与目的在空间生命科学试验中,生命培养模拟地面环境要求,主要研究宇空间因素,如失重、宇宙辐射、真空、高温(或低温)等对生命过程的影响。
基于FPGA的PID温度控制系统的设计与实现
() 中, 2式 T为采样 周期 , k为采样 序号. 1 式 、2 由( ) ( )
式可得数字式 PD算 法公 式为 : I
基于微处理器 的数字 PD控制改变了传统模拟 PD控 I I
制参数调 整不灵活 的问题 , 但用微 处理器 来实 现温度 的控 制时, 实现 的是 PD软算法 , I 微处理器 中的程序 在恶劣环境 下运 行时可能产生跑 飞的现象 , 引起输 出值 的大 幅度变 会
PD算法结构 清晰 , I 参数 可调 , 算法 简单 高效 , 可在 现 场根据实际来调节 比例 、 积分 、 微分三个参 数来达到较好 的
控制效果 , 在温度控制系统中被广泛采用. 完整 的模拟 PD I
度进行 比较 , 所得 差值经 PD算法处 理后输 出给 P I WM 模
块. 3 在 P ( ) WM模块 中, 根据 PD运算得 出的控制量 , I 控制 P WM波的输 出 占空 比 , 而控 制控 温 装 置 的加 热 功 率. 从
成 本 和 时 间 等 优 点 . 此 利 用 F G 实 现 温 度 控 制 系 统 具 因 PA
有较大 的应用价值 . 1 数 字 PD算法的原理 I
量, 采集 输 入 到 F G P A进 行 处 理 , 理 过 程 包 括 : 1 将 处 () L C23 T 19 采集 到的数 字量 转化 为温度 值输 出, 时显示设 同 定 的目标温度值 2 将所 测 的实际 温度 与设 定 的 目标 温 ()
( : [( - u ) [( ( = P )+T Ze ) P )+』 。 ()+
.பைடு நூலகம்
]
( 3 )
即:
“ k ek ( )= ( )+K e k [( )一 ( 一1 ] ( )+ e k e k )
基于FPGA的温度监控系统
基于FPGA的温度监控系统摘要本论文介绍了一个基于FPGA的数字温度计电路的设计与实现。
该电路采用数字温度传感器DS18B20采集外界环境温度,同时结合该传感器的数据接口和特点,使用FPGA作为控制器,严格控制DS18B20 的时序,在单总线上实现读写功能,完成测量数字温度的功能。
再将采集的二进制数转换为BCD码,并通过数码管显示。
该系统软件设计通过Verilog HDL 语言进行编译。
这次设计相比于传统的数字温度计具有结构简单,抗干扰能力强,功耗小,可靠性高,反应时间短等优点。
关键词:数字温度计;FPGA ;Verilog HDL ;DS18B20ABSTRACTThis paper expounds a design and implementation of a digital thermometer circuit based on FPGA. The circuit adopts the digital temperature sensor DS18B20 collecting the environment temperature, combining with the characteristics of the sensor data interface, using FPGA as the controller, strict control over the timing of DS18B20, read and write functions on 1-wire, complete the function of digital temperature measurement. Then measure the binary number into BCD code, and display it on the digital tube. The program design of the system is compiled by Verilog HDL language. Compared to the traditional digital thermometer, it has many advantages such as simpler structure, strong anti-interference ability, low consumption, high reliability, short reaction time.Keywords:Digital thermometer, FPGA, Verilog HDL, DS18B20目录1绪论 (1)1.1课题研究意义 (1)1.2课题相关技术的发展 (3)1.3课题的主要研究容 (4)1.4论文结构安排 (4)2 总体方案的论证 (6)2.1 方案的选择 (6)2.2 方案论证与确立 (8)2.3 Quartus II介绍 (9)3. 系统的硬件设计 (12)3.1 系统的总体结构设计 (12)3.2 数据处理模块 (18)3.3数码管显示模块 (26)4 系统总体模块设计 (29)4.1 Verilog HDL语言介绍 (29)4.2 软件程序设计 (31)5整体编译结果与分析 (37)5.1 整体编译 (37)5.2 程序的下载调试 (38)6 设计中遇到的问题 (41)7结束语 (43)参考文献 (45)附录 (47)附录A系统总体电路图 (49)附录B 系统总程序 (49)附录C 外文翻译 (72)1绪论1.1课题研究意义温度是生活中最基本的环境参数。
基于FPGASOPC的温度控制系统设计
20科技资讯 SCIENCE & TECHNOLOGY INFORMATION信 息 技 术DOI:10.16661/ki.1672-3791.2018.21.020基于FPGA/SOPC的温度控制系统设计①王佳宁 于存江 程子轩(长春大学电子信息工程学院 吉林长春 130000)摘 要:本文介绍了一种基于FPGA/SOPC和温度传感器DS18B20的硬件电路温度控制方法。
利用DS18B20采集数字信号,采用FPGA芯片进行数据处理,并通过处理后的数据对继电器进行控制,从而实现对温度的实时调控。
本设计利用Verilog HDL在开发环境下进行硬件电路的设计。
最后利用MODELSIM软件进行模拟仿真试验,在0℃~55℃范围内,测量误差为±1℃,从而实现硬件电路的温度控制。
关键词:FPGA SOPC DS18B20 温度控制中图分类号:TN47 文献标识码:A 文章编号:1672-3791(2018)07(c)-0020-02现今,电子元器件在工业领域当中得到了非常广泛的应用,但是其应用效果和作用在不同的温度环境下的表现也有较大差距。
那么,如何更好地发挥元件的功能,就需要提高整个元件的稳定性,也要保持元件的最佳工作温度。
在这里,温度控制链路就起着非常重要的作用。
然而,普通的温控系统对温度采集和数据处理间存在很多不平衡的缺点,如何解决温度采集和处理数据的实时性和精确性,就需要合理的设计方案。
综合考虑,本设计是一种在FPGA 上实现SOPC温度采集和监测控制系统。
SOPC (System On a Programmable Chip )即可编程片上系统,它将CPU、ROM、RAM、I/O端口和DSP集成到一个FPGA芯片中。
SOPC的设计灵活开放,可以软硬件剪裁、扩展、升级、并具有可编程功能。
1 系统总体方案设计温度控制系统的设计包括以下几个部分:F P GA、DS18B20、MAX232、报警模块、继电器模块和1602LCD 等。
基于FPGA的温度自动控制系统
p o lms I r e o i r v h tb l y a d a c r c , e t mp r t r o t ls se u e S 51a o t lc r a d rb e . n o d rt mp o e t e s i t n c u a y t e eau e c n r y t m s d MC - s c n r o e, n a i h o o c mb n d a f n in l c u s in c r ut whc s c n it d o r cso e mo o p e C li st mp r t r e s rL 5 o ie o tsg a q ii o ic i, ih i o ss f p e i n t r c u l e su e e au e s n o M3 r a t e a i h
a d 1 - i p e i o o v  ̄ m n 2 b t r cs n AD c n e e ADS 8 6 a d te p we o to i ut whc s ma e u fF GA,ti lcr d i 7 8 , n o rc n r lcr i, ih i d p o P h c r ee t e AC - o
摄 氏 温度 传 感 器和 精 密 A D 转 换 器构 成 的前 级 信 号 采 集 电路 和 由 F GA、 向 可 控 硅 、 / P 双 内置 过 零 检 测 的光 电耦 合 器
基于fpga的智能温度控制系统的设计方案
基于FPGA的智能温度控制系统是一种集成了数字逻辑、模拟电路和控制算法的智能化设备,通过对温度传感器采集的数据进行实时处理和分析,实现对温度控制设备的智能控制。
本文将介绍基于FPGA的智能温度控制系统的设计方案,并详细阐述系统的原理、结构和实施步骤。
一、设计原理基于FPGA的智能温度控制系统的设计原理主要包括数据采集、数字信号处理和控制策略实施三个方面。
系统通过温度传感器采集环境中的温度数据,经过FPGA进行数字信号处理和控制算法的运算,最终控制温度调节设备的工作状态,以实现温度的精准控制。
二、系统结构1. 传感器模块:包括温度传感器、模拟信号采集电路等,用于采集环境温度数据并转换为数字信号。
2. FPGA芯片:作为系统的核心处理器,负责接收传感器数据、进行数字信号处理和实施控制算法。
3. 数字模拟转换模块:将采集到的模拟信号转换为FPGA可处理的数字信号。
4. 控制执行模块:通过数字信号输出控制温度调节设备,如加热器或制冷器。
5. 显示模块:用于显示当前温度、设定温度和系统状态等信息。
三、系统功能1. 温度采集:实时采集环境温度数据,并进行数字化处理。
2. 控制策略:根据设定的温度范围和控制算法,实现对温度调节设备的精准控制。
3. 实时监测:实时显示环境温度、设定温度和控制设备状态,并可以通过外部接口进行数据传输。
4. 报警功能:当环境温度超出设定范围时,系统能够发出报警信号。
四、实施步骤1. 传感器接入:将温度传感器连接至FPGA的模拟输入引脚,通过模数转换电路将模拟信号转换为数字信号。
2. FPGA程序设计:编写FPGA程序,包括数字信号处理、控制算法和外部接口的设计。
3. 硬件连接:按照设计需求,将FPGA芯片、传感器模块、控制执行模块和显示模块等连接至一块PCB板上。
4. 系统调试:将控制系统连接至温度调节设备,进行系统调试和测试,验证系统功能和稳定性。
5. 性能优化:根据测试结果对控制算法和硬件电路进行优化,提高系统的响应速度和稳定性。
基于FPGA的温度自动控制系统
基于FPGA的温度自动控制系统温度控制系统应用广泛,温度是一个重要而普遍的热工参数。
常规的温度控制方法是设定一个温度范围,超出设定允许范围即进行温度调控。
这种方法实现简单、成本低,但控制效果不理想,控制温度精度不高、达到稳定点的时间长,因此,只能用在精度要求不高的场合。
而采用PID 算法进行温度控制,具有控制精度高、能够克服容量滞后的特点,适用于控制品质要求高的控制系统。
单片机作为控制系统的核心部分,广泛应用。
利用单片机控制温度系统,对环境检测具有极高的灵敏度,能够实时实现温度调节,且效率极高。
1 系统总体方案设计该温度控制系统的前级采用LM35 型模拟集成温度传感器来采集温度信号并转化为电压信号,再经过前级放大后送入ADS7886 采样输出数字信号,将得到的数字信号送入单片机,单片机通过对采样信号和用户输入信号的分析自动选取合适的PlD 系数并计算出相应的加热(或制冷)波形的占空比系数,接着将占空比系数送入FPGA,由FPGA 内部构建的DDS 读取相应的占空比并转化为波形输出,驱动制冷片工作,从而实现木箱内部温度的自动控制,系统总体设计框图如图1 所示。
该系统设计采用大屏幕点阵式LCD 和按键进行人机交互,使得系统操作简单快捷,同时LCD 还可实时显示测量得到的温度值,并绘制出坐标图像,统计信息明确直观。
2 系统硬件设计2.1 前级采样电路LM35 是电压输出型温度传感器,当温度在0 ℃时输出电压为零,当电压每上升1℃输出电压便增加10 mV。
较小的电压对A/D 采样的精度会造成比较高的影响。
所以在LM35 输出端连接一个同相放大器。
考虑放大时的精度和对共模干扰信号抑制需要,这里选用精密高共模抑制比的运算放大器OPA277。
由于实验要求测量精度为0.1℃,要求在。
基于FPGA的自适应多态热沉温控系统设计
基于FPGA的自适应多态热沉温控系统设计基于FPGA的自适应多态热沉温控系统设计摘要:本文提出了一种基于现场可编程门阵列(FPGA)的自适应多态热沉温控系统设计方案。
该系统通过利用FPGA的灵活可重构性和强大的计算能力,实现了对热沉温度的实时控制和调节。
通过模拟的研究和实际的测试,验证了该系统设计的有效性和可行性。
这项研究为热沉温控技术的发展提供了新思路和方法。
关键词:FPGA;自适应多态;热沉温控;系统设计1. 引言随着科技的不断进步和社会的快速发展,电子产品的功能越来越强大,性能越来越好,而能耗也随之增加。
由于电子器件在工作过程中产生大量的热量,为了确保电子产品的长时间稳定工作,需要对其进行热控制。
而热沉作为一个重要的热传输和散热部件,对于保持电子产品的温度稳定起着重要的作用。
因此,设计一种有效的自适应多态热沉温控系统对于电子产品的性能和稳定性具有重要意义。
2. FPGA的特点与优势FPGA是一种基于可编程逻辑门的数字电路设备,具有灵活可重构性、并行处理能力强等特点。
相比于传统的固定功能电路,FPGA可以根据特定需求重新配置硬件逻辑,具有更高的灵活性和扩展性。
因此,选择FPGA作为本文研究的基础硬件平台,能够更好地满足自适应多态热沉温控系统的要求。
3. 自适应多态热沉温控系统架构设计本文设计的自适应多态热沉温控系统由三个主要部分组成:FPGA芯片、温度传感器和温控装置。
FPGA芯片负责实时采集和处理温度传感器所得到的数据,并根据系统的需求进行控制和调节。
温度传感器负责实时监测热沉的温度变化情况,并将相关数据传输给FPGA芯片。
温控装置根据FPGA芯片的控制信号,对热沉进行调节,以实现温度的控制和稳定。
4. 自适应多态热沉温控系统工作原理该系统的工作原理如下:首先,FPGA芯片通过温度传感器获取热沉的实时温度数据。
然后,根据预设的温度范围和控制策略,FPGA芯片对数据进行处理,并生成相应的控制信号。
(完整版)基于FPGA的温度传感器课程设计
FPGA课程设计论文学生姓名周悦学号20091321018院系电子与信息工程学院专业电子科学与技术指导教师李敏二O一二年5月28 日基于FPGA的温度传感器系统设计1引言温度是一种最基本的环境参数,人们的生活与环境的温度息息相关,在工业生产过程中需要实时测量温度,在农业生产中也离不开温度的测量,因此研究温度的测量方法和装置具有重要的意义。
测量温度的关键是温度传感器,温度传感器的发展经历了三个发展阶段:传统的分立式温度传感器;模拟集成温度传感器;智能集成温度传感器。
目前,国际上新型温度传感器正从模拟式向数字式,从集成化向智能化、网络化的方向飞速发展。
本文将介绍采用智能集成温度传感器DS18B20,并以FPGA为控制器的温度测量装置的硬件组成和软件设计,用液晶来实现温度显示。
2电路分析系统框图如下:第一部分:DS18B20温度传感器美国 Dallas 半导体公司的数字化温度传感器 DS1820 是世界上第一片支持 "一线总线"接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。
全部传感元件及转换电路集成在形如一只三极管的集成电路内。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
现在,新一代的 DS18B20 体积更小、更经济、更灵活。
使你可以充分发挥“一线总线”的优点。
DS18B20 的主要特性:(1)适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电(2)独特的单线接口方式,DS18B20 在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20 的双向通讯(3)DS18B20 支持多点组网功能,多个DS18B20 可以并联在唯一的三线上,实现组网多点测(4)DS18B20 在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内(5)温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃(6)可编程的分辨率为 9~12位,对应的可分辨温度分别为 0.5℃、0.25℃、0.125℃和 0.0625℃,可实现高精度测温(7)在 9 位分辨率时最多在93.75ms 内把温度转换为数字,12 位分辨率时最多在 750ms 内把温度值转换为数字,速度更快(8)测量结果直接输出数字温度信号,以"一线总线"串行传送给 CPU,同时可传送 CRC 校验码,具有极强的抗干扰纠错能力(9)负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。
基于FPGA的智能温度控制系统的设计
基于FPGA的智能温度控制系统的设计智能温度控制系统是一种基于FPGA(现场可编程门阵列)的系统,旨在实现对温度的精确控制和自动调节。
随着科技的进步和人们对舒适生活的不断追求,温度控制在日常生活和工业生产中变得越来越重要。
传统的温度控制方法常常需要人工干预和手动调节,效率低下且容易产生误差。
因此,开发一种智能温度控制系统来解决这些问题变得至关重要。
本文的目的是设计一种基于FPGA的智能温度控制系统,通过使用FPGA的高度可编程性和强大的实时处理能力,实现对温度的准确测量、控制和调节。
同时,系统将具备智能化的特点,能够根据预设的温度范围和环境条件,自动调节温度并保持在合适的水平。
通过该系统的应用,可以提高温度控制的精确性和效率,提供更加舒适和节能的环境。
本文的框架将按照以下顺序展开:首先,介绍智能温度控制系统的基本原理和架构;然后,详细阐述FPGA在温度控制系统中的应用;接着,说明设计过程中的关键问题和解决方法;最后,对系统进行性能测试和实验验证,并对结果进行分析和讨论。
通过这些内容的阐述,旨在为读者提供有关基于FPGA的智能温度控制系统设计的全面参考,为今后的研究和应用奠定基础。
本文所提出的基于FPGA的智能温度控制系统设计具有一定的创新性和实用性,有望在温度控制领域产生积极的影响。
本文详细描述了基于FPGA的智能温度控制系统的设计过程,包括硬件和软件设计。
硬件设计硬件设计是构建基于FPGA的智能温度控制系统的关键步骤。
以下是硬件设计的主要内容:温度传感器:选择合适的温度传感器,例如热敏电阻或数字温度传感器。
将温度传感器与FPGA连接,以实时获取温度数据。
温度控制器:设计一个可调节的温度控制系统,可以根据测量到的温度对输出进行调整。
使用FPGA内部逻辑和外部元件(如开关和继电器)来实现温度控制功能。
显示界面:设计一个用户友好的显示界面,用于显示当前的温度和控制系统的状态。
可以使用液晶显示屏或LED显示器等显示设备。
基于FPGA的多通道热电偶温度测量系统的设计与实现
基于FPGA的多通道热电偶温度测量系统的设计与实现基于FPGA的多通道热电偶温度测量系统的设计与实现摘要:本文介绍了一种基于FPGA(现场可编程门阵列)的多通道热电偶温度测量系统的设计与实现。
该系统具有高精度、多通道、实时测量等特点,可以广泛应用于工业自动化控制系统中的温度测量和监控方面。
关键词:FPGA;热电偶;温度测量系统1. 引言热电偶是一种常用于温度测量的传感器,广泛应用于工业自动化控制系统中。
传统的热电偶温度测量系统一般采用模拟电路和微处理器等组成,但存在精度不高、测量通道少、响应时间长等问题。
为了解决这些问题,本文设计了一种基于FPGA的多通道热电偶温度测量系统。
2. 系统设计与实现2.1 硬件设计系统的硬件由热电偶、放大器电路、FPGA和数字显示器等部分组成。
热电偶通过接头与放大器电路相连接,放大器电路负责对热电偶输出信号进行放大和滤波。
FPGA作为系统的核心部件,负责对放大器电路输出的模拟信号进行数字化处理,并将处理结果通过数字显示器实时显示出来。
2.2 系统架构系统采用了分时多路复用的方式实现多通道温度测量。
通过FPGA的多输入多输出功能,可以同时对多个热电偶进行温度测量。
在每个时钟周期内,FPGA依次对每个通道的热电偶进行采样和计算,然后将计算结果储存到内部存储器中,并通过数字显示器显示出来。
2.3 系统实现在FPGA的开发环境中,使用硬件描述语言进行系统的设计和实现。
首先,根据系统的功能需求,设计了热电偶接口模块、放大器电路模块和数字显示模块等。
然后,将这些模块相连接,并通过FPGA引脚进行连接。
最后,对FPGA进行配置,将设计好的逻辑电路加载到FPGA中,即可完成系统的实现。
3. 系统测试与结果分析为了验证系统的性能,设计了一组实验,对系统进行了测试。
通过与标准温度计进行比较,对系统的测量精度进行了评估。
实验结果表明,该系统具有较高的测量精度和稳定性,可以满足工业自动化控制系统对温度测量的要求。
基于FPGA的温度显示系统
生产实习报告基于FPGA的温度显示系统现代电子系统质量提高工程报告专业:电子科学与技术班级:电子12-1姓名:学号: 1206040124一、生产实习任务极其完成情况1.设计任务设计了一种基于FPGA和LM75A的温度测量系统。
硬件设计上,系统以EP4CE6E22C8N 为主控芯片,采用数字温度传感器LM75A 检测环境温度,并利用LM75A 自带的IIC 总线接口传输数据,通过数码管将温度实时显示出来;软件设计上,采用自顶向下模块化设计思想,先设计出IIC 通信模块、温度显示模块,然后再编写顶层模块,将 2 个模块整合。
2.电路图3. 程序流程图开始温度采集蜂鸣器报警数码管温度超限极限值设定结束是否4. 编写的程序 (一)功能模块: library ieee;use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; --实体--entity at24c08 isport(clk : in std_logic; --时钟信号rst : in std_logic; --复位信号scl : out std_logic; --i2c时钟线sda : inout std_logic; --i2c数据线urv_1 : in std_logic; --上限值1urv_2 : in std_logic; --上限值2sel : out std_logic_vector(3 downto 0);seg : out std_logic_vector(7 downto 0);beep : out std_logic --蜂鸣器输出信号线);end at24c08;--结构体--architecture arch_at24c08 of at24c08 issignal clk_sslow : std_logic;signal counter : std_logic_vector(23 downto 0);signal readdata_reg_buf : std_logic_vector(15 downto 0);signal readdata_ten : integer range 0 to 24564;signal readdata_std : std_logic_vector(15 downto 0);signal qian : std_logic_vector(3 downto 0);signal bai : std_logic_vector(3 downto 0);signal shi : std_logic_vector(3 downto 0);signal ge : std_logic_vector(3 downto 0);signal qian_0 : integer range 0 to 10;signal bai_0 : integer range 0 to 10;signal shi_0 : integer range 0 to 10;signal ge_0 : integer range 0 to 10;--数码管部分信号signal sel_0 : std_logic_vector(3 downto 0);signal seg_0 : std_logic_vector(7 downto 0);signal count : std_logic_vector(13 downto 0);signal clk_slow : std_logic;signal scan_num : std_logic_vector(1 downto 0);signal seg_data_buf : std_logic_vector(3 downto 0);--i2c部分信号signal sda_buf : std_logic; --i2c输入/输出数据寄存器signal link : std_logic; --sda输入输出方向寄存器signal readdata_reg : std_logic_vector(15 downto 0);--i2c读回的数据寄存器signal sda_0 : std_logic; --与sda端口连接信号signal scl_0 : std_logic; --与scl端口连接信号--按键消抖部分信号signal delay_cnt : std_logic_vector(19 downto 0); --消抖延时计数器signal start_delay : std_logic; --按键延时开始--分频部分信号signal clk_div : std_logic_vector(12 downto 0); --分频计数器,5000分频,10khz--蜂鸣器部分信号signal beep_en : std_logic; --蜂鸣器使能信号signal beep_buf : std_logic; --与beep端口连接的信号--时钟部分信号signal level_high : std_logic; --高电平中间值,1249signal level_low : std_logic; --低电平中间值,3749 signal level_hig_edge : std_logic; --上升沿,4999signal level_low_edge : std_logic; --下降沿,2499--状态机部分信号signal main_state : std_logic_vector(1 downto 0); --状态机主状态signal i2c_state : std_logic_vector(2 downto 0); --i2c状态signal i2c_per_state : std_logic_vector(3 downto 0); --i2c每一步状态--分频部分常量constant div_parameter : std_logic_vector(12 downto 0):="1001110001000";--分频系数,500--状态机部分常量--操作状态常量constant read_init : std_logic_vector(2 downto 0) :="000";--EEPORM 初始化constant read_high : std_logic_vector(2 downto 0) :="001";--读高位数据状态constant read_low : std_logic_vector(2 downto 0) :="010";--读低位数据状态--i2c每一步状态常量constant start : std_logic_vector(3 downto 0) :="0000";--开始位constant first : std_logic_vector(3 downto 0) :="0001";--数据第一位constant second : std_logic_vector(3 downto 0) :="0010";--数据第二位constant third : std_logic_vector(3 downto 0) :="0011";--数据第三位constant fourth : std_logic_vector(3 downto 0) :="0100"; --数据第四位constant fifth : std_logic_vector(3 downto 0) :="0101"; --数据第五位constant sixth : std_logic_vector(3 downto 0) :="0110"; --数据第六位constant seventh : std_logic_vector(3 downto 0) :="0111"; --数据第七位constant eighth : std_logic_vector(3 downto 0) :="1000"; --数据第八位constant ack : std_logic_vector(3 downto 0) :="1001"; --应答位constant stop : std_logic_vector(3 downto 0) :="1010"; --停止位--结构体开始beginscl <= scl_0;seg <= seg_0;sda_0 <= sda_buf when (link)='1' else 'Z';sda <= sda_0;sel <= sel_0;beep <= beep_buf;--按键消抖key : process(clk,rst)beginif(not rst='1') thendelay_cnt <= (others => '0');elsif (clk'event and clk='1') thenif start_delay='1' thenif(delay_cnt /= "11110100001001000000") then --20ms延时delay_cnt <= delay_cnt+'1';elsedelay_cnt <= (others => '0');end if;end if;end if;end process key;--分频部分div : process(rst,clk)beginif(not rst='1') thenclk_div <= "0000000000000";level_high <= '0';level_low <= '0';level_hig_edge <= '0';level_low_edge <= '0';elsif(clk'event and clk='1') thenif(clk_div /= div_parameter-'1') thenclk_div <= clk_div+'1';elseclk_div <= "0000000000000";end if;if(level_high='1') thenlevel_high <= '0';elseif(clk_div="10011100001") thenlevel_high <= '1';end if;end if;if(level_low_edge='1') thenlevel_low_edge <= '0';elseif(clk_div="100111000011") thenlevel_low_edge <= '1';end if;end if;if(level_low='1') thenlevel_low <= '0';elseif(clk_div="111010100101") thenlevel_low <= '1';end if;end if;if(level_hig_edge='1') thenlevel_hig_edge <= '0';elseif(clk_div="1001110000111") thenlevel_hig_edge <= '1';end if;end if;end if;end process div;--EEPROM操作部分state : process(clk,rst)beginif(not rst='1') thenstart_delay <= '0';scl_0 <= '1';sda_buf <= '1';link <= '0';readdata_reg <= "0000000000000000";main_state <= "00";i2c_state <= read_init;i2c_per_state <= start;elsif(clk'event and clk='1') thencase main_state is--初始化EEPROMwhen "00" =>--等待读写要求scl_0 <= '1';sda_buf <= '1';link <= '0';i2c_state <= read_init;i2c_per_state <= start;main_state <= "10";--读取EEPRO数据when "10" =>if(level_hig_edge='1') thenscl_0 <= '1';elseif(level_low_edge='1') thenscl_0 <= '0';end if;end if;case i2c_state iswhen read_init => --读命令地址case i2c_per_state iswhen start =>if(level_high='1') thensda_buf <= '0';link <= '1';end if;if((level_low and link)='1') thenlink <= '1';sda_buf <= '1';i2c_per_state <= first;end if;when first =>if(level_low='1') thensda_buf <= '0';link <= '1';i2c_per_state <= second;end if;when second =>if(level_low='1') thensda_buf <= '0';link <= '1';i2c_per_state <= third;end if;when third =>if(level_low='1') thensda_buf <= '1';link <= '1';i2c_per_state <= fourth;end if;when fourth =>if(level_low='1') thensda_buf <= '0';link <= '1';i2c_per_state <= fifth;end if;when fifth =>if(level_low='1') thensda_buf <= '0';link <= '1';i2c_per_state <= sixth;end if;when sixth =>if(level_low='1') thensda_buf <= '0';link <= '1';i2c_per_state <= seventh;end if;when seventh =>if(level_low='1') thensda_buf <= '1';link <= '1';i2c_per_state <= eighth;end if;when eighth =>if(level_low='1') thenlink <= '0';i2c_per_state <= ack;when ack =>if(level_hig_edge='1') thensda_buf <= sda;end if;if(level_high='1') thenif(sda_buf='1') thenmain_state <= "00";end if;end if;if(level_low='1') thenlink <= '0';i2c_state <= read_high;i2c_per_state <= first;end if;when others => null;end case;when read_high => --读回数据case i2c_per_state iswhen first =>if(level_hig_edge='1') thensda_buf <= sda;end if;if(level_high='1') thenreaddata_reg(15 downto 9) <= readdata_reg(14 downto 8);readdata_reg(8) <= sda;end if;if(level_low='1') theni2c_per_state <= second;when second =>if(level_hig_edge='1') thensda_buf <= sda;end if;if(level_high='1') thenreaddata_reg(15 downto 9) <= readdata_reg(14 downto 8);readdata_reg(8) <= sda;end if;if(level_low='1') theni2c_per_state <= third;end if;when third =>if(level_hig_edge='1') thensda_buf <= sda;end if;if(level_high='1') thenreaddata_reg(15 downto 9) <= readdata_reg(14 downto 8);readdata_reg(8) <= sda;end if;if(level_low='1') theni2c_per_state <= fourth;end if;when fourth =>if(level_hig_edge='1') thensda_buf <= sda;end if;if(level_high='1') thenreaddata_reg(15 downto 9) <= readdata_reg(14 downto 8);readdata_reg(8) <= sda;end if;if(level_low='1') theni2c_per_state <= fifth;end if;when fifth =>if(level_hig_edge='1') thensda_buf <= sda;end if;if(level_high='1') thenreaddata_reg(15 downto 9) <= readdata_reg(14 downto 8);readdata_reg(8) <= sda;end if;if(level_low='1') theni2c_per_state <= sixth;end if;when sixth =>if(level_hig_edge='1') thensda_buf <= sda;end if;if(level_high='1') thenreaddata_reg(15 downto 9) <= readdata_reg(14 downto 8);readdata_reg(8) <= sda;end if;if(level_low='1') theni2c_per_state <= seventh;end if;when seventh =>if(level_hig_edge='1') thensda_buf <= sda;end if;if(level_high='1') thenreaddata_reg(15 downto 9) <= readdata_reg(14 downto 8);readdata_reg(8) <= sda;end if;if(level_low='1') theni2c_per_state <= eighth;end if;when eighth =>if(level_hig_edge='1') thensda_buf <= sda;end if;if(level_high='1') thenreaddata_reg(15 downto 9) <= readdata_reg(14 downto 8);readdata_reg(8) <= sda;end if;if(level_low='1') theni2c_per_state <= ack;end if;when ack =>if(level_high='1') thenlink <= '1';sda_buf <= '0';i2c_per_state <= first;end if;when others => null;end case;when read_low =>case i2c_per_state iswhen first =>if(level_hig_edge='1') thenlink <= '0';sda_buf <= sda;end if;if(level_high='1') thenreaddata_reg(7 downto 1) <= readdata_reg(6 downto 0);readdata_reg(0) <= sda;end if;if(level_low='1') theni2c_per_state <= second;end if;when second =>if(level_hig_edge='1') thenlink <= '0';sda_buf <= sda;end if;if(level_high='1') thenreaddata_reg(7 downto 1) <= readdata_reg(6 downto 0);readdata_reg(0) <= sda;end if;if(level_low='1') thenend if;when third =>if(level_hig_edge='1') thenlink <= '0';sda_buf <= sda;end if;if(level_high='1') thenreaddata_reg(7 downto 1) <= readdata_reg(6 downto 0);readdata_reg(0) <= sda;end if;if(level_low='1') theni2c_per_state <= fourth;end if;when fourth =>if(level_hig_edge='1') thenlink <= '0';sda_buf <= sda;end if;if(level_high='1') thenreaddata_reg(7 downto 1) <= readdata_reg(6 downto 0);readdata_reg(0) <= sda;end if;if(level_low='1') theni2c_per_state <= fifth;end if;when fifth =>if(level_hig_edge='1') thenlink <= '0';sda_buf <= sda;end if;if(level_high='1') thenreaddata_reg(7 downto 1) <= readdata_reg(6 downto 0);readdata_reg(0) <= sda;end if;if(level_low='1') theni2c_per_state <= sixth;end if;when sixth =>if(level_hig_edge='1') thenlink <= '0';sda_buf <= sda;end if;if(level_high='1') thenreaddata_reg(7 downto 1) <= readdata_reg(6 downto 0);readdata_reg(0) <= sda;end if;if(level_low='1') theni2c_per_state <= seventh;end if;when seventh =>if(level_hig_edge='1') thenlink <= '0';sda_buf <= sda;end if;if(level_high='1') thenreaddata_reg(7 downto 1) <= readdata_reg(6 downto 0);readdata_reg(0) <= sda;end if;if(level_low='1') theni2c_per_state <= eighth;end if;when eighth =>if(level_hig_edge='1') thenlink <= '0';sda_buf <= sda;end if;if(level_high='1') thenreaddata_reg(7 downto 1) <= readdata_reg(6 downto 0);readdata_reg(0) <= sda;end if;if(level_low='1') theni2c_per_state <= ack;end if;when ack =>if(level_high='1') thenlink <= '1';sda_buf <= '1'; --非应答位-- i2c_per_state <= stop;end if;if(level_low='1') thenlink <= '1';sda_buf <= '0';i2c_per_state <= stop;end if;when stop =>if(level_high='1') thenlink <= '1';sda_buf <= '1'; --停止位end if;if(level_low='1') thenmain_state <= "00";end if;when others => null;end case;when others => null;end case;when others => null;end case;end if;end process state;--数据处理部分anly1 : process(readdata_reg_buf)beginreaddata_ten <= conv_integer(readdata_reg_buf)*12;qian_0 <= readdata_ten/1000;bai_0 <= (readdata_ten/100) rem 10;shi_0 <= (readdata_ten/10) rem 10;ge_0 <= readdata_ten rem 10;end process anly1;anly2 : process(qian_0,bai_0,shi_0,ge_0)beginqian <= conv_std_logic_vector(qian_0,4);bai <= conv_std_logic_vector(bai_0,4);shi <= conv_std_logic_vector(shi_0,4);ge <= conv_std_logic_vector(ge_0,4);end process anly2;--数码管显示部分scan : process(rst,clk)beginif(not rst='1') thencount <= (others => '0');clk_slow <= '0';elsif(clk'event and clk='1') thenif(count="11111011011111") thencount <= (others => '0');clk_slow <= not clk_slow;elsecount <= count + '1';end if;end if;end process scan;seg1 : process(clk_slow,rst)beginif(not rst='1') thenscan_num <= "00";elsif(clk_slow'event and clk_slow='1') then if(scan_num="11") thenscan_num <= "00";elsescan_num <= scan_num + '1';end if;end if;end process seg1;seg2 : process(seg_data_buf)begincase seg_data_buf iswhen "1111" => seg_0 <= "10001110";when "1110" => seg_0 <= "10000110"; when "1101" => seg_0 <= "10100001";when "1100" => seg_0 <= "11000110";when "1011" => seg_0 <= "10000011";when "1010" => seg_0 <= "10011000";when "1001" => seg_0 <= "10010000";when "1000" => seg_0 <= "10000000";when "0111" => seg_0 <= "11111000";when "0110" => seg_0 <= "10000010";when "0101" => seg_0 <= "10010010";when "0100" => seg_0 <= "10011001";when "0011" => seg_0 <= "10110000";when "0010" => seg_0 <= "10100100";when "0001" => seg_0 <= "11111001";when "0000" => seg_0 <= "11000000";when others => seg_0 <= "11111111";end case;end process seg2;seg0 : process(scan_num)begincase scan_num iswhen "00" =>sel_0 <= "1110";seg_data_buf <= ge;when "01" =>sel_0 <= "1101";seg_data_buf <= shi;when "10" =>sel_0 <= "1011";seg_data_buf <= bai;when "11" =>sel_0 <= "0111";seg_data_buf <= qian;when others => null;end case;end process seg0;--数据缓存部分ss : process(clk,rst)beginif(not rst='1') thenclk_sslow <= '0';counter <= (others => '0');elsif(clk'event and clk='1') thenif(counter /= "111111111111111111111110") thencounter <= counter + '1';elsecounter <= (others => '0');clk_sslow <= not clk_sslow;end if;end if;end process ss;buf : process(clk_sslow)beginif(clk_sslow'event and clk_sslow='1') thenreaddata_reg_buf <= readdata_reg;elsereaddata_reg_buf <= readdata_reg_buf;end if;end process buf;--蜂鸣器报警部分bep : process(clk,rst)variable count : integer range 0 to 50000; --1KHz方波beginif(not rst='1') thencount := 0;beep_en <= '0';elsif(clk'event and clk='1') thenif(beep_en='1') thencount := count+1;if(count>50000) thencount := 0;beep_buf <= not beep_buf;end if;elseif(not urv_1='1') thenif(readdata_reg>"0000000000000011") thenbeep_en <= '1';end if;elsif(not urv_2='1') thenif(readdata_reg>"1111111111100000") thenbeep_en <= '1';end if;end if;end if;end if;end process bep;end arch_at24c08;(二)测试模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity tb is--null;end tb;architecture behv_tb of tb iscomponent at24c08port(clk : in std_logic; --时钟信号rst : in std_logic; --复位信号scl : out std_logic; --i2c时钟线sda : inout std_logic; --i2c数据线urv_1 : in std_logic; --上限值1urv_2 : in std_logic; --上限值2sel : out std_logic_vector(3 downto 0);seg : out std_logic_vector(7 downto 0);beep : out std_logic --蜂鸣器输出信号线);end component;constant clockperiod : time := 20ns;signal clk_tb : std_logic := '0';signal rst_tb : std_logic;signal scl_tb : std_logic;signal sda_tb : std_logic;signal urv_1_tb : std_logic;signal urv_2_tb : std_logic;signal sel_tb : std_logic_vector(3 downto 0);signal seg_tb : std_logic_vector(7 downto 0);signal beep_tb : std_logic;beginmyuit : at24c08 port map(clk => clk_tb,rst => rst_tb,scl => scl_tb,sda => sda_tb,urv_1 => urv_1_tb,urv_2 => urv_2_tb,sel => sel_tb,seg => seg_tb,beep => beep_tb);process(clk_tb)beginclk_tb <= not clk_tb after clockperiod/2;end process;rst_tb <= ‘0',‘1' after 1000ns;end behv_tb;5.实物照片二、实习体会经过了三个星期的生产实习,我对这段时间的努力和收获颇感欣慰,在这段时间里,我学会了很多东西,同时,也有一些感触。
基于单片机和FPGA的远程温度监控系统
基于单片机和FPGA的远程温度监控系统于数据总线,该总线本身也可以向所挂接的DS18B20 供电,而无需额外电源。
DS18B20 能提供9 位温度读数,它无需任何外围硬件即可方便地构成温度检测系统。
DS18B20 体积更小、适用电压更宽、更经济。
测量温度范围为- 55~+125℃,在-10~+85℃范围内,精度为±0.5℃。
单片机控制DS18B20 完成温度的采集过程必须经过初始化、写操作、读操作3 个步骤,而且必须有严格的时间间隙。
2.2 NiosⅡ处理器的说明Altera 公司的NiosⅡ处理器是一种用户可随时配置和构建的32 位指令集和数据通道的嵌入式系统微处理器IP 核,采用Avalon 总线结构通信接口,带有增强的内存调试和软件功能。
LWIP 是一种专门针对嵌入式系统应用而设计的网络通信协议,支持因特网信息控制协议(ICMP),用户数据报协议(UDP),动态主机分配协议(DHCP),地址解析协议(ARP)以及对应用程序提供的标准Socket 接口,因而可以完成传统的TCP/IP 协议的大部分功能,资源占用却比TCP/IP 协议小,所以非常适合以NiosⅡ处理器为核心的系统。
基于以上考虑,嵌入式Web 服务器以NiosⅡ处理器为核心,LWIP 为网络通信协议,实现简单的网页浏览功能。
用户可以通过网络浏览存储在FLASH 中的网页。
2.3 硬件电路设计说明本系统硬件电路包括单片机温度采集电路、电平转换电路及基于NiosⅡ嵌入式上位机系统。
2.3.1 温度采集电路温度采集电路主要由DS18B20 和单片机构成,如图2 所示。
系统以8051 单片机(U1)作为核心;C1,C2 和Y1 组成时钟电路,晶振为12MHz;S1,C12 和R3 组成复位电路;U1 的P1.0 接一个发光二极管,用于程序执行指示灯;R5 为限流电阻;DQ 接到8051 的P2.1 端;R1 为信号和5 V 电源之间的上拉电阻。
基于FPGA的智能温度控制器设计.
I中文摘要中文摘要在空间生命科学模拟地面生命培养实验中,温度对于生命的生长和存活有至关重要的影响。
同时由于空间、体积、电功率的限制,选择芯片级温度控制器就变得至关重要。
本设计采用数字温度传感器DSl8820为温度采集器,采用FPGA实现芯片化的智能温度控制器。
根据PID算法具有并行运算的特点,运用FPGA实现并行结构的PID温度控制器,这样不仅可以解决一般温度控制器的结构复杂、控制性能差的缺点,还可以提高运行速度。
使用Mauab对PID的各种算法进行仿真,选择一种适合本设计的控制方法,采用VerilogVHDL语言进行编程,生成控制模块、温度采集器等。
利用功率继电器的通断作为自动开关,控制设定值与控制输入量的关系,通过串口模块和上位机进行通讯,进一步实现在用户操作界面上进行在线修改,时间采样、图形显示、数据保存等功能。
结果表明,该温度控制系统,测温范围在.55℃'-'-'+125℃,其中.10℃"--+100"C时精度为士0.5℃。
关键词智能温度控制器;FPGAtPID算法;VerilogVHDL语言●■黑龙江大学硕士学位论文AbstractAnaloggroundinthespacelifescience,lifeandcultureexperiments,thetemperatureforthegrowthandsurvivaloflifehaveacrucialimpact.Atthesametimeduetospace,volume,electricalpowerconstraints,∞lectthechip-leveltemperaturecontrolbecomescrucial.T0solvetheaboveproblems,thedesignwhichanalogselectriccupasthecontrolledobject’useacli.gitaltemperatureserlsorDS18820觞thetemperatureacquisition,appliesthedevelopmentofFPGAtechnology,achievethechipofthesmsrttemperaturecontroller,appliesPmalgorithmhasthefeatureofparallelcomputing.啊地墩ofparaUelstructureofFPGAPIDtemperaturecontroller,whichcannotonlysolvethecomplexstructureofthegeneraltemperaturecontrollertocontroltheshortcomingsofpoorperformance,butalsoCallincreasethespeed.OnthePmusingtheMauabsimulationofvariousalgorithmstoselectacontrolmethodforthedesign,usingVerilogI-IDLprogramminglanguagetogeneratecontrolmodule,temperaturemeasurement,etc.PCviatheserialcommunicationmoduleandfurtherimplementtheuserinterfaceon—linemodification,timesampling,graphicaldisplay,datastorageandotherfimetioms.KeywordsintelligenttemperaturecontrollerFPGAPIDalgorithmVerilogVHDL.11舱resultsshowthatthetemperaturecontrolsystem,temperaturerange.55℃一+125℃,.10"12一+100℃themwhentheaccuracyof4-0.5℃.KeywordsIntelligenttemperaturecontroller;FPGA:PIDalgorithmlVerilogHDL-n.203Ⅲ0㈣4㈣9川YI●-目录目录中文摘要…………………………………………………………………………………………IAbstract………...….…………………….…………………………………………………………………….…..II目录………………………………………………………………………………………。
基于FPGA的多功能温度控制器设计
摘要本论文所设计的是一个基于FPGA的多功能数字温度控制器。
本设计克服了传统数字温度计精度低的缺点,并且除了传统温度计的测量温度功能外还具有一定的控制功能,能更好的对所测量的温度进行处理,控制模块的加入让其比传统温度计具有更强的实用性。
本设计采用EDA技术自上而下的设计思路,对系统的结构划分为温度采集模块、温度显示模块、输入数据对比模块,输出控制模块。
在Quartus II软件下应用VHDL语言进行电路设计并仿真,根据仿真的结果。
该方案能够较好的实现测温功能并且能对温度进行有效的控制。
关键字:温度控制;FPGA;VHDL;AbstractDesigned by this paper is a multifunctional digital temperature controller based on FPGA. This design overcomes the drawback of traditional digital thermometer low accuracy, and in addition to the traditional thermometer temperature function also has the certain control function, can better handle and on the measured temperature control module to join its than traditional thermometer has stronger practicability. This design adopts the top-down design EDA technology, the structure of system is divided into temperature acquisition module, display module, the input data contrast module, output control module. Under the Quartus II software circuit design and simulation using VHDL language, according to the result of simulation. The scheme can achieve a better temperature measurement function and can carry on the effective control of temperature.KeyWords:Temperature control FPGA VHDL目录第1章绪论 (1)1.1课题背景及国内外研究概况 (1)1.2课题相关技术发展 (1)1.3课题研究的必要性 (1)1.4课题研究的主要内容 (2)1.5课题所设计的温度控制器的优点 (2)第2章 FPGA的简介 (3)2.1FPGA的概述 (3)2.2FPGA的基本结构 (3)2.3FPGA系统设计流程 (5)2.4FPGA开发编程原理 (6)第3章 DS18B20温度传感器简介 (8)3.1传统温度采集器件的简述 (8)3.2DS18B20的引脚 (8)3.3DS18B20内部结构 (8)3.4DS18B20的时序 (10)3.5DS18B20的工作原理 (11)3.6DS18B20的性能特点 (12)3.7DS18B20使用过程中的注意事项 (12)第4章 QUARTERS II软件简介 (13)4.1Q UARTUS II软件概况 (13)4.2软件界面简介 (13)4.3Q UARTUS II的设计流程 (14)第5章温度控制器的设计总流程 (17)5.1温度控制器系统结构图 (17)5.2DS18B20温度采集模块的驱动设计 (17)5.3FPGA温度显示模块的设计 (19)5.4FPGA数据比较模块的设计 (19)5.5FLEX10K开发箱上的下载 (20)第6章结论 (22)附录 (23)附录1 (23)基于FPGA的多功能温度控制器设计第1章绪论1.1 课题背景及国内外研究概况温度控制无论是在工业生产过程中,还是在日常生活中都起着非常重要的作用,而在当今,我国农村锅炉取暖,农业大棚,养鸡场内等多数都没有实用的温度控制系统,还有部分厂矿,企业还一直沿用简单的温度设备和纸质数据记录仪,无法实现温度数据的实时测量与控制。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要本论文介绍了一个基于FPGA的数字温度计电路的设计与实现。
该电路采用数字温度传感器DS18B20采集外界环境温度,同时结合该传感器的数据接口和特点,使用FPGA作为控制器,严格控制DS18B20 的时序 ,在单总线上实现读写功能,完成测量数字温度的功能。
再将采集的二进制数转换为BCD码 ,并通过数码管显示。
该系统软件设计通过 Verilog HDL 语言进行编译。
这次设计相比于传统的数字温度计具有结构简单,抗干扰能力强,功耗小,可靠性高,反应时间短等优点。
关键词:数字温度计;FPGA ;Verilog HDL ;DS18B20ABSTRACTThis paper expounds a design and implementation of a digital thermometer circuit based on FPGA. The circuit adopts the digital temperature sensor DS18B20 collecting the environment temperature, combining with the characteristics of the sensor data interface, using FPGA as the controller, strict control over the timing of DS18B20, read and write functions on 1-wire, complete the function of digital temperature measurement. Then measure the binary number into BCD code, and display it on the digital tube. The program design of the system is compiled by Verilog HDL language. Compared to the traditional digital thermometer, it has many advantages such as simpler structure, strong anti-interference ability, low consumption, high reliability, short reaction time.Keywords:Digital thermometer, FPGA, Verilog HDL, DS18B20目录1绪论 01.1课题研究意义 01.2课题相关技术的发展 (1)1.3课题的主要研究容 (2)1.4论文结构安排 (2)2 总体方案的论证 (4)2.1 方案的选择 (4)2.2 方案论证与确立 (6)2.3 Quartus II介绍 (6)3. 系统的硬件设计 (9)3.1 系统的总体结构设计 (9)3.2 数据处理模块 (14)3.3数码管显示模块 (21)4 系统总体模块设计 (23)4.1 Verilog HDL语言介绍 (23)4.2 软件程序设计 (24)5整体编译结果与分析 (29)5.1 整体编译 (29)5.2 程序的下载调试 (30)6 设计中遇到的问题 (32)7结束语 (33)参考文献 (34)附录 (35)附录A系统总体电路图 (36)附录B 系统总程序 (36)附录 C 外文翻译 (48)1绪论1.1课题研究意义温度是生活中最基本的环境参数。
温度的监测与控制,对于生物的生存与生长,工业生产发展都有着非同一般的意义。
温度传感器的应用涉及机械制造、工业过程控制、汽车电子产品、消费电子产品和专用设备等各个领域。
传统的常用温度传感器有热电偶、电阻温度计RTD和NTC热敏电阻等。
但信号调理,模数转换及恒温器等功能全都会增加成本。
现代集成温度传感器通常包含这些功能,并以其低廉的价格迅速占据了市场。
Dallas Semiconductor 公司推出的数字式温度传感器DS18B20采用数字化一线总线计数具有很多的优异特性。
其一,它将控制线、地址线、数据线合成一根导线,允许在同一根导线上挂接多个控制对象,形成多点一线总线测控系统。
布线施工方便,成本低廉。
其二,线路上传送的是数字信号,所受的干扰和损耗小,性能好。
本课题旨在分析和设计数字化温度测控系统。
本系统采用FPGA实现一个数字温度计,采用Verilog HDL作为开发语言,实现对温度的测量。
由于单片机设计的控制器生产成本较低,所以过去人们通常使用这种方法来设计数字温度计。
这种设计方法的缺点是它并不能完成很复杂的功能,只能进行一些简单的运算和控制,并且设计的控制器性能也很一般。
因此,在这种情况下,研究人员要是想进一步的提升技术,就不得不冒着牺牲机器性能的风险来扩展外部硬件电路,显然用这种传统的方法设计数字温度计,既具有局限性又具有一定的难度,所以我们要寻找一种新的设计方法来替代这种传统的研究方法。
FPGA是Xilinx公司率先提出的概念,又名现场可编程门阵列,它是以PAL等可编程器件为基础发展起来的一种高密度可编程逻辑器件,作为一种半定制电路,FPGA弥补了定制电路的不足之处,并且在结构上能够实现复杂系统所需要的主要功能,此外,使用FPGA设计产品也非常便利。
首先用硬件描述语言设计电路,然后经过布局仿真验证实验结果,最后烧入到FPGA 中进行现场测试。
因此,用FPGA设计能解决传统设计中遇到的一些不可避免的难题。
利用FPGA设计产品能够有效避免很多前期的风险投资,并且在软件阶段就可以准确评估出设计的正确性,从而极大的提高产品开发效率。
综上所述,FPGA是原型设计最理想的载体。
本次课题使用FPGA设计数字温度计是一种新颖的设计方法,它能解决使用单片机这种传统设计方法所带来的能源供需以及电路复杂等问题,同时,对温度测量的发展前景有着极其重要的现实研究意义。
1.2课题相关技术的发展当今电子产品正向功能多元化,体积最小化,功耗最低化的方向发展。
它与传统的电子产品在设计上的显著区别是大量使用大规模可编程逻辑器件,使产品的性能提高,体积缩小,功耗降低。
同时,广泛运用现代计算机技术,提高产品的自动化程度和竞争力,缩短研发周期。
EDA技术正是为了适应现代电子技术的要求,吸收众多学科最新科技成果而形成的一门新技术。
美国ALTERA公司的可编程逻辑器件采用全新的结构和先进的技术,加上QUARTUSⅡ开发环境,更具有高性能,开发周期短等特点,十分方便进行电子产品的开发和设计[1]。
EDA技术以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译,逻辑化简,逻辑分割,逻辑映射,编程下载等工作。
最终形成集成电子系统或专用集成芯片的一门新技术[2]。
新产品、新技术层出不穷,电子技术的发展更是日新月异。
可以毫不夸的说,电子技术的应用无处不在,电子技术正在不断地改变我们的生活,改变着我们的世界。
近些年,随着科技的发展和社会的进步,人们对温度计的要求也越来越高,不管在哪里,人们都想知道此刻的温度和天气状况等一些信息,传统的温度计由于它的局限性以及不方便性,已不能满足人们的需求。
温度计等待一次革命,不管在性能还是在样式上它都将发生质的变化,于是数字温度计的时代悄然来临。
1.3课题的主要研究容首先在深入研究了数字温度计的总体原理后,分析其系统的组成,做出了该系统相应的整体框架,然后利用QUARTUSⅡ软件进行开发,用Verilog HDL语言描述其数据采集模块、数据处理模块、BCD译码模块、动态扫描模块等各功能模块的设计,并利用图形编辑实现各模块的顶层连接。
最后将程序下载到FPGA芯片上,通过数码显示管显示出预期的测量效果。
1.4论文结构安排本论文各部分容如下:第一部分对课题的背景及意义进行研究,了解课题相关技术的发展,最后概述了该课题的主要容和研究方法。
第二部分通过与单片机设计方案进行比较,得到用FPGA设计本课题更加合理的结论,再将AD590与DS18B20温度传感器进行简单比较后,得出用DS18B20更具有优越性,最后介绍本课题最重要的工具Quartus II。
第三部分为系统的硬件设计部分,详细介绍了温度采集模块,数据处理模块,数码显示模块所用得到硬件资源,并介绍了其在设计中的功能。
第四部分为系统软件设计部分,将整个课题按性质分为各个小模块,用Verilog HDL语言进行设计。
第五部分为整个设计的总体编译、结果与分析。
最后对整个课题进行总结,研究其不足之处。
2 总体方案的论证2.1 方案的选择2.1.1 总体方案比较过去数字温度计普遍采用单片机来实现,不过随着可编程逻辑控制器件的不断发展,控制器部分也开始频繁使用可编程逻辑器件来实现功能。
下面分别提供了单片机和FPGA作为控制器的方案,最后进行比较选择。
方案一:此方案是基于单片机设计数字温度计,使用的是AT89C51单片机处理各个单元电路的工作。
本方案采用的是AD590温度传感器,首先通过温度系统采集相关温度数据,然后经过A/D转换器进行转换,将模拟信号转换成数字信号,并将转换后的数字信号直接送给单片机,再由单片机控制显示。
其框图如图2.1所示。
图2.1 基于单片机的数字温度计系统框图方案二:此方案以FPGA作为核心控制设备,利用高精度的数字温度传感器DS18B20进行温度采集,将采集到的温度直接以数字信号提供给FPGA控制器,不需要经过A/D转换,采集到的温度可以通过数码管显示。
其框图如图2.2所示。
图2.2 基于FPGA的数字温度计系统框图2.1.2 温度传感器的选择温度传感器的主要作用是感受温度并将感受到的温度转化成可用输出信号,它是温度测量仪器的核心部分。
随着技术的不断发展,温度传感器的品种繁多,下面分别提供了AD590和DS18B20传感器的特性,最后进行比较选择。
方案一:采用AD590温度传感器AD590是AD公司制成的电流输出型两端温度传感器,其正向电流与温度成比例。
在4V到30V电压之间,此器件相当于一个高阻抗的恒流源。
AD590具有精度高、线性好等特点,另外它还可以承受4V正向电压和20V 反向电压,所以当器件反接时不会被损坏。
但是它也有一些自身的缺点,例如需要模拟转数字电路、成本高、测量点数量少、电路繁多以及对线阻有要求等。
方案二:采用DS18B20温度传感器DS18B20是DALLAS公司生产的单总线器件,它具有线路简单、体积小等特点,因此多个DS18B20可以并联在2根或3根线上,只需要一根端口线就可以和很多DS18B20进行通信。