《基于FPGA的智能温度控制系统设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的智能温度控制系统设计.docx(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上湖南文理学院课程设计报告课程名称: 通信系统课程设计 专业班级: 通信1101班 学号(06位 )学生姓名: 指导教师: 戴正科 完成时间: 2014年 11 月 21 日 报告成绩:评阅意见: 评阅教师 日期 2014.11.21 基于FPGA的智能温度控制的设计目录1.设计题目12.设计要求13.设计作用与目的14.所用设备(仪器)和软件25.系统设计方案25.1 系统总体设计25.2 工作原理35.2.1 温度控制系统特性研究36.智能温度控制器系统硬件设计46.1 系统方案设计46.1.1 FPGA与DAC0832结合的目的46.1.2 系统需求分析46.1.
2、3系统需求分析56.2系统结构66.2.1调试/配置电路67.智能温度控制系统软件设计87.1 软件总体设计87.1.1 设定定义87.1.2 VHDL实现87.2 软件程序设计97.2.1 分频模块97.2.2 键盘模块107.2.3 ADC0809 控制模块117.2.4 三模块连接在一块137.3 本章小结158.实验调试结果158.1 实验条件158.2 实验结果及分析158.3 本章小结179.设计中的问题及解决方法1710.设计心得1811.参考文献1812.附录18专心-专注-专业1.设计题目基于FPGA的智能温度控制的设计2.设计要求通过前向温度采集电路,采集当前孵化器内部的温
3、度信号,将采集到的模拟信号通过ADC0809模数转换芯片,转变为FPGA可控的数字信号,FPGA芯片根据输入的当前实际温度,控制输出合理的数字信号,再由DAC0832转换为模拟信号,输入到后向加热执行电路,以此来完成对整个孵化器的温度控制。整个系统中,带有温度传感器的前向温度采集电路作为系统的反馈环节,实时反映当前环境的具体温度。3.设计作用与目的在空间生命科学试验中,生命培养模拟地面环境要求,主要研究宇空间因素,如失重、宇宙辐射、真空、高温(或低温)等对生命过程的影响。其中温度对空间生命的生存有直接作用,是空间生物学研究的主要对象。同时由于空间、体积、电功率的限制,对电功率加热器和控制电路方
4、面尽量做到节能、低功耗、小体积。假设模拟地面培养箱内的温度在18。这样对控制精度和芯片必须有更高的要求。传统的温度控制方法以设定 为临界点,超出设定允许范围即进行温度调控,低于设定值就加热,反之就停止或降温。这种方法实现简单、成本低,但控制效果不理想,控制温度精度不高、达到稳定点的时间也长,因此,只能用在精度要求不高的场合。对于空间生命科学的温度控制,这样的控制过程远远达不到控制要求。FPGA是通过硬件语言描述实现并行计算机功能的硬件电路。应用FPGA实现PID控制可以提高PID运算的速度,避免了用单片机实现PID控制按顺序执行命令对运行速度延时性,非线性的影响。同时FPGA实现的PID控制的
5、内在电路可以根据现实需要进行修改,提高了系统的灵活性。采用智能PID控制温度则具有测量控制精度高、成本低、体积小、功耗低的优点。将传统的电路温度控制用芯片取代,因此利用FPGA实现PID的智能温度控制具有深远的意义4.所用设备(仪器)和软件整个系统的主芯片采用PFGA即现场可编程门阵列,FPGA在结构上由逻辑功能块排列为阵列,并且有可编程的内部连线连接功能块实现的一定的逻辑功能。FPGA由掩膜可编程门阵列可编程逻辑器件演变而来,它具有门阵列的高逻辑密度和通用性,还具有用户可编程的特性。利用功率继电器的通断作为自动开关,控制设定值与控制输入量的关系,通过串口模块和上位机进行通讯,进一步实现在用户
6、操作界面上进行在线修改,时间采样、图形显示、数据保存等功能5.系统设计方案5.1系统总体设计近百年来,温度传感器的发展大致经历以下三个阶段:第一阶段是传统的分立式温度传感器(含敏感元件);第二个阶段是模拟集成的温度传感器/控制器;第三个阶段是智能温度传感器。在近几年中,国际上的许多国家已经研发出关于智能温度控制器的系列产品。智能温度控制器具有可以输出温度控制量以及与温度数据相关的,适配各种微型控制器特点;并且它是在硬件的基础上通过软件实现测试控制功能的,其智能化程度取决于软件的开发水平。智能温度传感器最大的有点就是能对现场测量到温度值进行数据处理和传输,并与上位机进行数据通信。二十世纪九十年代
7、中期智能温度控制器问世了,智能温度控制器是在微电子技术与计算机技术还有自动测试技术的结合产物。二十一世纪以后,智能温度传感器正朝着精度高、功能强、标准化总线、安全性、可靠性、进一步开发虚拟网络温度控制器、研制温度测量还有温度控制系统,这些高科技的方向迅速发展。1.改善低精度和低分辨率过去生产的智能温度传感器存在着精度低和分辨力差的缺点,并且均采用最常用的8位数模转化器。现在很多智能温度的厂家都针对提升精度和提高分辨力方面做足了工作,分辨力达到了0.50.0625,测温精度达到0.5,数模转换器也从8位扩展到了9到12位。很多国外的公司在现有成就的基础上,又生产出不需要数模转换的,13位二进制数
8、据传输精度为0.2、分辨力最高可达到0.03125的智能温度传感器。2.增加多通道功能为了给研制和开发多路温度测量控制系统提供良好条件,许多智能温度传感器正从单通道向多通道发展,同时新型智能温度传感器的测试功能也在不断增强,还在芯片中增加存储功能。3.总线技术的标准化和规范化总线技术实现标准化和规范化,例如:一线总线、I2C总线、SM Bus总线和SPI总线等总线方式。4.安全性和可靠性5.2工作原理5.2.1 温度控制系统特性研究工程生产中,模拟的建立应该尽量简化,我们将温度控制中的各个参数当作置于温度有关的函数来处理。热量的传播方向总是从高温物体传向低温物体,就算在同一个问题内部进行热传导
9、,也是从高温部分传向低温部分。电热杯加热系统中,主要是通过电热丝产生即通过气体的相互碰撞产生热量进行热传递。温度在传递过程中一定存在时间延时,这个延时时间可能是由于体积的大小产生的。电热杯的传递函数写成GS=K1+TSe-ts 式5-1其中参数K:系统的放大系数、T:时间、t延迟时间、s:复变量。1. 放大系数K放大系数K,是被控制对象再次达到平衡状态时,变化输出量和变量输入量的比值。在输入变化作用相同的情况下,K值越大,变化输出量就越大,被控对象的自身稳定性也会越差;相反,K值越小,被控对象的自身稳定性就越好。2. 时间常数T时间常数T,是指被控对象输入影响后,输出变量达到新稳态值的快慢。时
10、间常数T,决定动态过程的时间快慢,是被控制对象的动态特性参数。3. 延迟时间t滞后时间t是描述这种现象的动态参数。6.智能温度控制器系统硬件设计6.1 系统方案设计6.1.1 FPGA与DAC0832结合的目的温度,是一种具有惯性大、滞后性大、非线性和时变性强等等特点,因此传统的控制方法想达到很高的控制要求使很难实现的。在控制过程中,在温度不断变化的过程中,环境在不断的变化,同时随着加热和降温,加热器件的特性也会变化,这些都是导致温度时变的原因;温度升高外界环境对加热系统吸收热量的程度不同,直接导致了温度的非线性变化。但是随着科学创新,工业发展的强烈需求,各行各业对温度控制的适应性、精度、稳定
11、性方面都提出了更高层次的要求,同时使温度控制进入了智能化的阶段。DAC0832温度传感器是数字型的温度传感器。在温度采集时,不需要通过模数转换器对温度值进行转换,而且在使用时不需要温度标准,就可以直接连接到电路中,因此为硬件电路搭建提供了很大的方便,可以使硬件电路结构简化。同时,DAC0832温度传感器还具有速度快,精度高,成本低的有点。FPGA有丰富的I/O引脚和触发器的资源,同时还具有动态重构、可反复编程的特点,并且可以利用计算机对器件进行功能仿真。仿真过程中如果出现问题,可以及时调整设计方案,极大的提高了FPGA的灵活性和通用性。FPGA还具有体积小、集成度高、结构标准化、可移植性好和并
12、行运算的有点。如果将FPGA和DAC0832结合,利用FPGA控制器实现DAC0832温度传感器的温度采集和控制处理的工作再结合PID智能控制,不但可以提高温度控制的速度、精度、而且还可以提高系统的稳定性。6.1.2 系统需求分析本设计以这种模拟电路控制在实际应用中很难做到恒温控制,温度会在最终归的预设值附近上下浮动,影响禽蛋的孵化。而且,孵化器的温度设置也是模拟电路,这样是完全达不到精准的温度设置。通过学习FPGA,我设想运用数字电路来对禽蛋孵化器内部温度进行控制,来实现可控,可调,温度恒定的禽蛋孵化器。具体的设计框架如下 图6-1 设计框架 6.1.3系统需求分析本设计应用FPGA控制温度
13、整体框图如图6-2所示。硬件系统可以由两部分组成,一部分是信号采集装置,主要是由温度传感器、UART(串口数据通讯电路)组成,另一部分是信号处理装置,主要由JTAG(联机测试的接口)、液晶显示器、FPGA、上位机、继电器、报警器、电源管理。 图6-2 FPGA控制温度整体框图本方案通过前向温度采集电路,采集当前孵化器内部的温度信号,将采集到的模拟信号通过ADC0809模数转换芯片,转变为FPGA可控的数字信号,FPGA芯片根据输入的当前实际温度,控制输出合理的数字信号,再由DAC0832转换为模拟信号,输入到后向加热执行电路,以此来完成对整个孵化器的温度控制。整个系统中,带有温度传感器的前向温
14、度采集电路作为系统的反馈环节,实时反映当前环境的具体温度,具体的电路图如下。 图6-3 前向温度采集电路图6.2系统结构在整个设计系统的硬件中主要包括FPGA、调制/配置电路、时钟电路、复位电路/重配置电路、系统电源电路、继电器、外存储器、LED、独立按键和拨码开关等构成。6.2.1调试/配置电路此电路设计以AD590作为温度触感器,通过添加相应的调节电阻,让温度与输出电压保持一个相对线性的关系其中: :为调零电阻. :为调满度电阻.最终得到的温度与输出电压的关系式为: 式6-1 模数转换芯片采用的是ADC0809,具体的连接电路图如下图6-4 ADC0809与FPGA的连接IN0IN7管角中
15、任选一路作为前向温度采集电路的输入,VCC与同时接+5V电压,与GND接地,OUT1OUT8数据输出端连接FPGA,START,OE,EOC,ADDA-C均连接FPGA,根据ADC0809的工作时序图,由FPGA给出相应的信号控制ADC0809。数模转换部分采用的是DAC0832,具体连接图如下图6-5 DAC0832的连接图DI0-DI7分别于FPGA的8位数据输出端相连,因为DAC0832工作在连续的负反馈电路中,故采用直通的工作方式,将WR1与WR2直接与地相连,ILE与CS,Xfer引脚均接至FPGA,有FPGA发送控制信号来控制DAC0832的工作。输出引脚Iout1与Iout2连接
16、一个流压转换器,将输出的电流信号转换为需要的电压信号,并进行适当的放大。最后输出到孵化器的加热电路。FPGA模块控制ADC0809的工作状态,并接收来自ADC0809的数字信号,与键盘输入的预设信号进行比较后,将控制信息传送给DAC0832,经由数模转换器转换后加在发热装置两端,对整个孵化器内部温度进行控制。7.智能温度控制系统软件设计7.1 软件总体设计7.1.1 设定定义在系统设计之前,首先需要提出方案、系统设计和FPGA芯片选择等前期工作。然后针对系统指标和复位程度,根据芯片的成本、资源等各方面进行衡量,选择出合理的设计方案和芯片类型。一般情况下,对FPGA的设计采用自顶向下的设计方法,
17、先把整个系统分为几个基本单元,再把每个基本单元划分为下一层的基本单元,按照上述步骤进行,直至可以使用元件库中的元件。7.1.2 VHDL实现 VHDL实现就是在设计的系统和电路中用硬件描述语言(VHDL)表示出来,并输入给EDA工具的过程。为了避免以往绘制原理图时的可移植性差、效率低下、不易维护的缺点,目前在实际开发中广泛应用的是HDL语言输入法,利用文本描述设计。最常用的两种语言HDL和VDL和VHDL是美国电气与电子工程师协会(IEEE)的标准,它们共同的优点是:语言与芯片工艺无关,利用自顶向下的设计方法,可移植性好,便于模块的划分与移植,具有很强的逻辑描述和方针功能。图7-1 FPGA的
18、开发流程图7.2 软件程序设计 本文所设计运用程序模块化编程思想将系统各功能模块化,软件系统基本可以分为三个个模块:分频模块、键盘模块、ADC0809控制模块、下面对每个模块进行详细介绍。7.2.1 分频模块图7-2 分频模块由于外界的时钟源一般都较高,而ADC0809以及键盘扫描模块需要的时钟频率较低,故需要对外界时钟源进行分频,这里外界输入时钟源为20MHz,对其进行64分频。波形仿真图如下:图7-3 分频波形仿真图从波形图可以看出,clk每经过64个脉冲,clk1跳转一次。分频模块工作正常.7.2.2 键盘模块图7-4 键盘模块键盘模块的脉冲输入来自分频模块。其中,输入端口为两位二进制数
19、,分别接两个按键,来对预设温度进行加减调控。输出有两个端口,xianshi端口作为保留端口,存储着当前预设温度的数值,可外接显示设备。zhi端口为信息传送端口,其存储值为当前预设温度值经由采集电路温度电压公式换算后的十进制数值。换算公式如下: 式7-1例:38摄氏度对应的ADC0809输出数据为5*38*256/100/5,得到十进制值为97;波形仿真图如下:图7-5 温度减按键图7-6 温度加按键图中,图7-5为温度减按键,图7-6为温度加按键,相应的预设温度对应相应的ADC0809输出值,由图2得,当预设温度为38摄氏度时,对应换算后的ADC0809输出数据为97,与计算相符。键盘输入模块
20、工作正常7.2.3 ADC0809 控制模块图7-7 ADC0809控制模块经查阅资料,DAC0832需采用直通式,故,将DAC0832的控制语句直接写在了ADC0809的控制语句块内。ile为输出到ADC0832的输入锁存允许信号,cont为ADC0832WR1,WR2,CS等引脚。Wendu为预设温度的输入引脚。din为ADC0809转换后的输出信号,dout为受FPGA控制的输出到DAC0832的控制信号。clk8为来自为频器的时钟信号。根据ADC0809的时序图,总结出相应的状态转移图,一次来编写控制ADC0809的VHDL语言文件,状态转移图如下图7-8 状态转移图具体波形仿真图如下
21、:图7-9控制ADC0809的仿真图波形仿真建立在预设温度为38摄氏度的条件下。前面提到,38摄氏度对应的ADC0809输出值为97,VHDL程序中设定,当ADC0809输入值大于或等于97时(当前温度大于或等于预设温度),FPGA输出到DAC0832的控制信号为0,即停止加热。当ADC0809输入值小于92(即36摄氏度,与设定温度相差大于两度)时,FPGA输出到DAC0832的控制信号为255,即以最大功率加热。当ADC0809输入值小于92时,将会细分为5个阶段,即以逐次递减的功率加热。由图可知,ADC0809工作正常。7.2.4 三模块连接在一块 最后,将三个模块运用元件例化语句连接在
22、一块,并进行电路观察,生成相应的逻辑电路,如下图:图7-10 三模块连接图总体波形仿真如下图:图7-11 总仿真图波形分析:刚开始,FPGAjia置1,预设温度逐渐增加,如下图:图7-12 温度增加仿真图 当温度到达38摄氏度后停止增加,即将38摄氏度作为预设温度,随后,观察FPGAin与FPGAout。当预设温度为38摄氏度时,输入为97时,对应输出为0,当为92时,对应输出为5,当为96时,对应输出为1,当输入不在92-97之间,输入大于97时,输出为0,输入小与92时,输出为255.观察上图波形仿真,完全符合程序设计。7.3 本章小结本章运用了模块化思想,将系统各个部分模块化,应用主函数
23、调用其他相应的模块,大大的提高了编程效率,减少程序修改,整合过程的工作量。8.实验调试结果8.1 实验条件实验是在恒温下调试出的结果。8.2 实验结果及分析以下图8-1、图8-2、图8-3、图8.4分别是分频模块、键盘模块、ADC0809控制模块、三模块连接在一起时在仿真正常的统计报告图:图8-1 分频模块分频模块的VHDL文件见附录1图8-2 键盘模块键盘模块的VHDL文件见附录2图8-3 ADC0809控制模块ADC0809模块的VHDL仿真文件见附录3图8-4 三模块连接图总体的VHDL程序见附录48.3 本章小结应用设计出的软件、硬件对实际的电热杯温度信息测量和控制,得到最适合被设计的
24、智能温度控制器为微分先行PID控制器。9.设计中的问题及解决方法在本次设计中主要遇到的问题是对于FPGA芯片不是很了解,需要查阅很多资料去了解FPGA芯片的一系列管脚即其功能。10.设计心得本文从智能控制的角度出发,在控制领域中应用FPGA,设计并实现了基本FPGA的智能温度控制,我在这次设计中遇到了很多的困难,资料不齐全,而且是很零散的,还重新学习了,但是我都没有放弃,还是一步一步的实现,在这次设计中刚开始我在网上找到的图片是很模糊的,所以我就用protel99这个软件重新画图,但是我已经很久没有画了,都差不多都忘了protel99,我就开始重新学习了,把图给画好了,在这次设计中我学会了怎么
25、在网上自己独立的寻找资料,还知道了自己有哪些不足的地方,自己日后则可以知道忘哪些地方学习咯11.参考文献1.刘美霞,智能温度控制系统(硕士学位论文)南京航空航天大学,2003.2. 韩雪,将国平,马幼军。数字式温度传感器DS18B20在温室环境检测中的应用,仪表技术与传感器,2002(9):29-313. 肖衡,陈春俊。PID温度控制装置的电路设计。计量与测试技术,2003(1):10-114陈文军,陈理君。FPGA在窑炉温度模糊控制系统设计。盐城工学报,2006(12):40-4312.附录附录1程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE I
26、EEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity fenpin isport(clk :in std_logic; -外部输入时钟源 clk1: out std_logic);end fenpin; -分频后的时钟源architecture b of fenpin is signal count : std_logic_vector(7 downto 0); -信号定义 signal clk2 : std_logic; beginprocess(clk) beginif(clkevent and clk=1) then
27、 -计数脉冲上升沿if(count=) thencount0);clk2=not clk2; -当达到64个脉冲时count置0,clk2取反else count=count+1; -未达到64脉冲时继续计数; end if;end if;clk1xif(x=0)then x=0; -按键减按下,判断温度是否为0 else xx=x; -其他按键情况,温度不变 end case; end if; xianshi=x; -将温度赋给显示输出端zhi=x*5*256/100/5; -将温度转化后赋给输出端end process;end beha;附录3:library ieee;use ieee.
28、std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity ADC0809 isport(din :in std_logic_vector(7 downto 0); -ADC0809输出的采样数据 clk8 :in std_logic; -时钟信号 eoc :in std_logic; -ADC0809转换结束指示,高电平有效 ale :out std_logic; -ADC0809地址锁存次信号 ile: out std_logic; -DAC0832数据锁存允许 cont: o
29、ut std_logic; -DAC0832控制信号(WR1,WR2,CS,Xfer) start :out std_logic; -ADC0809转换启动信号 oe :out std_logic; -ADC0809数据输出允许信号 wendu:in integer; -温度显示 adda :out std_logic; -ADC0809信号通道控制位 addb :out std_logic; -ADC0809信号通道控制位 addc :out std_logic; -ADC0809信号通道控制位 lock0 :out std_logic; -ADC0809观察数据锁存时钟 dout :out
30、 std_logic_vector(7 downto 0); -输出到DAC0832的8位数据end ADC0809;architecture beha of ADC0809 is type states is(st0,st1,st2,st3,st4); -定义ADC0809工作状态 signal current_state,next_state:states:=st0; -定义信号 signal regl :std_logic_vector(7 downto 0); signal shuchu :std_logic_vector(7 downto 0); signal lock :std_l
31、ogic; signal count :std_logic_vector(7 downto 0);begin adda=1; -地址输入001,选择IN1 addb=0; addc=0; dout=shuchu; -将处理后的数据传输到输出端口 lock0=lock; -数据传输 ile=1; -DAC0832的控制信号 contale=0;start=0;lock=0;oe=0;next_stateale=1;start=1;lock=0;oe=0;next_stateale=0;start=0;lock=0;oe=0;next_state=st1; if(eoc=1)then next_s
32、tate=st3; else next_stateale=0;start=0;lock=0;oe=1;next_stateale=0;start=0;lock=1;oe=1;next_statenext_state=st0; end case; end process com;reg:process(clk8) begin if(clk8event and clk8=1) then current_state=next_state; -在时钟上升沿改变状态 end if; end process reg;latch1:process(lock) begin if lock=1and locke
33、vent then regl=din; -将输入数据赋给中间变量 end if;end process latch1;kongzhi:process(regl) begin if(reglshuchushuchushuchushuchushuchushuchu=; -差值大于5时输出255 end case; else shuchu=; -当前温度大于预设温度,输出0 end if;end process kongzhi; end beha;附录4:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
34、use ieee.std_logic_arith.all;entity FPGA isport(clkin:in std_logic; -定义外部时钟端口 FPGAeoc:in std_logic; FPGAin :in std_logic_vector(7 downto 0); FPGAout:out std_logic_vector(7 downto 0); FPGAale :out std_logic; FPGAjia :in std_logic; FPGAjian :in std_logic; FPGAwendu:out integer; FPGAile: out std_logic;
35、 FPGAcont: out std_logic; FPGAstart :out std_logic; FPGAoe :out std_logic; FPGAadda :out std_logic; FPGAaddb :out std_logic; FPGAaddc :out std_logic);end entity;architecture beha of FPGA iscomponent ADC0809 is -元件例化声明port(din :in std_logic_vector(7 downto 0); clk8 :in std_logic; eoc :in std_logic; ale :out std_logic; ile: out std_logic; cont: out std_logic; start :out std_logic; wendu:in integer; oe :out std_logic; adda :out std_logic; addb :out std_logic; addc :out std_logic; lock0 :out std_logic; do