



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.基于 FPGA的恒温控制系统孵化器是一种最新的孵化禽蛋的机器,通过人工制造适合禽蛋孵化的恒温环境,来以较小的经济投入孵化禽蛋,通过调查,市面上的孵化器多数是以模拟电路的方式制造恒温环境,如下图这种模拟电路控制在实际应用中很难做到恒温控制,温度会在最终归的预设值附近上下浮动,影响禽蛋的孵化。而且,孵化器的温度设置也是模拟电路,这样是完全达不到精准的温度设置。通过学习 FPGA,我设想运用数字电路来对禽蛋孵化器部温度进行控制,来实现可控,可调,温度恒定的禽蛋孵化器。具体的设计框架如下通过前向温度采集电路,采集当前孵化器部的温度信号,将采集到的模拟信号通过ADC0809模数转换芯片,转变为FPGA
2、可控的数字信号,FPGA芯片根据输入的当前实际温度,控制输出合理的数字信号,再由 DAC0832转换为模拟信号,输入到后向加热执行电路,以此来完成对整个孵化器的温度控制。 整个系统中, 带有温度传感器的前向温度采集电路作为系统的反馈环节,实时反映当前环境的具体温度,具体的电路图如下。.前向温度采集电路图此电路设计以 AD590作为温度触感器, 通过添加相应的调节电阻, 让温度与输出电压保持一个相对线性的关系其中:RW1 为调零电阻Rw 2 为调满度电阻最终得到的温度与输出电压的关系式为:1005TU 0模数转换芯片采用的是ADC0809,具体的连接电路图如下IN0IN7管角中任选一路作为前向温
3、度采集电路的输入,VCC与 VREF同时接 +5V电压, VREF _ 与 GND接地, OUT1OUT8数据输出端连接FPGA,START,OE,EOC,ADDA-C均连接 FPGA,根据 ADC0809的工作时序图,由 FPGA给出相应的信号控制 ADC0809。数模转换部分采用的是DAC0832,具体连接图如下.DI0-DI7 分别于 FPGA的 8位数据输出端相连, 因为 DAC0832工作在连续的负反馈电路中,故采用直通的工作方式,将 WR1与 WR2直接与地相连, ILE 与 CS, Xfer 引脚均接至 FPGA,有 FPGA发送控制信号来控制 DAC0832的工作。输出引脚 I
4、out1 与 Iout2 连接一个流压转换器, 将输出的电流信号转换为需要的电压信号,并进行适当的放大。最后输出到孵化器的加热电路。FPGA模块控制 ADC0809的工作状态,并接收来自 ADC0809的数字信号,与键盘输入的预设信号进行比较后,将控制信息传送给 DAC0832,经由数模转换器转换后加在发热装置两端,对整个孵化器部温度进行控制。整个的 FPGA模块分为以下几个部分;分频模块:由于外界的时钟源一般都较高,而 ADC0809以及键盘扫描模块需要的时钟频率较低,故需要对外界时钟源进行分频,这里外界输入时钟源为 20MHz,对其进行 64分频。波形仿真图如下:.从波形图可以看出, cl
5、k 每经过 64个脉冲, clk1 跳转一次。分频模块工作正常;统计报告图如下:分频模块的 VHDL文件见附录 1.键盘模块:.键盘模块的脉冲输入来自分频模块。 其中,输入端口为两位二进制数, 分别接两个按键,来对预设温度进行加减调控。输出有两个端口, xianshi 端口作为保留端口,存储着当前预设温度的数值,可外接显示设备。 zhi 端口为信息传送端口,其存储值为当前预设温度值经由采集电路温度电压公式换算后的十进制数值。换算公式如下:1005TU 0例: 38摄氏度对应的ADC0809输出数据为 5*38*256/100/5,得到十进制值为97;波形仿真图如下:图( 1).图( 2)图中,
6、 shuru (1)为温度减按键, shuru ( 0)为温度加按键,相应的预设温度对应相应的 ADC0809输出值,由图 2得,当预设温度为 38摄氏度时,对应换算后的 ADC0809输出数据为 97,与计算相符。键盘输入模块工作正常。统计报告图如下:键盘模块的 VHDL文件见附录 2.ADC0809控制模块:.经查阅资料, DAC0832需采用直通式,故,将DAC0832的控制语句直接写在了 ADC0809的控制语句块。 ile 为输出到 ADC0832的输入锁存允许信号, cont 为ADC0832WR1,WR2,CS等引脚。Wendu为预设温度的输入引脚。 din 为 ADC0809转
7、换后的输出信号, dout 为受 FPGA控制的输出到 DAC0832的控制信号。 clk8 为来自为频器的时钟信号。根据 ADC0809的时序图,总结出相应的状态转移图,一次来编写控制ADC0809的VHDL语言文件,状态转移图如下:具体波形仿真图如下:.波形仿真建立在预设温度为 38摄氏度的条件下。 前面提到, 38摄氏度对应的ADC0809输出值为 97, VHDL程序中设定,当 ADC0809输入值大于或等于 97时(当前温度大于或等于预设温度) ,FPGA输出到 DAC0832的控制信号为 0,即停止加热。当 ADC0809输入值小于 92(即 36摄氏度,与设定温度相差大于两度)时
8、, FPGA 输出到 DAC0832的控制信号为 255,即以最大功率加热。 当 ADC0809输入值小于 92 时,将会细分为 5个阶段,即以逐次递减的功率加热。由图可知, ADC0809工作正常。统计报告图如下:ADC0809模块的 VHDL仿真文件见附录 3.最后,将三个模块运用元件例化语句连接在一块, 并进行电路观察, 生成相应的逻辑电路,如下图:.总体波形仿真如下图波形分析:刚开始, FPGAjia 置1,预设温度逐渐增加,如下图.当温度到达 38摄氏度后停止增加, 即将 38摄氏度作为预设温度, 随后,观察FPGAin与 FPGAout。当预设温度为 38摄氏度时,输入为 97时,
9、对应输出为 0,当为 92时,对应输出为 5,当为 96时,对应输出为 1,当输入不在 92-97 之间,输入大于 97时,输出为 0,输入小与 92时,输出为 255. 观察上图波形仿真,完全符合程序设计。后面给 FPGAjian 置1,预设温度会随之降低。统计报告图如下:总体的 VHDL程序见附录 4.附录 1:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;entity fenpin isport(clk :in std_logic;
10、-外部输入时钟源clk1: out std_logic);end fenpin;-分频后的时钟源architecture b of fenpin issignal count : std_logic_vector(7 downto 0);-信号定义signal clk2 : std_logic;beginprocess(clk)beginif(clkevent and clk=1) then-计数脉冲上升沿if(count=01000000) thencount0);clk2=notclk2;-当达到 64个脉冲时 count 置 0,clk2 取反elsecount=count+1;-未达到
11、 64脉冲时继续计数;end if;end if;clk1xif(x=0)thenx=0;-按键减按下,判断温度是否为0elsexx=x;-其他按键情况,温度不变end case;end if;xianshi=x;-将温度赋给显示输出端zhi=x*5*256/100/5;-将温度转化后赋给输出端end process;end beha;附录 3:library ieee;.use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity ADC0809 isport(d
12、in :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: out std_logic;-DAC0832控制信号(WR1,WR2,CS,Xfer)start :out std_logic;-ADC0809转换启动信号oe :out std_logic;-ADC0809数据输出允许信号we
13、ndu:in integer;-温度显示adda :out std_logic;-ADC0809信号通道控制位addb :out std_logic;-ADC0809信号通道控制位addc :out std_logic;-ADC0809信号通道控制位lock0 :out std_logic;-ADC0809观察数据锁存时钟dout :out std_logic_vector(7 downto 0);-输出到 DAC0832的 8位数据end ADC0809;architecture beha of ADC0809 istype states is(st0,st1,st2,st3,st4);-定
14、义 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_logic;signal count :std_logic_vector(7 downto 0);beginadda=1;-地址输入 001,选择 IN1addb=0;addc=0;dout=shuchu;-将处理后的数据传输到输出端口lock0=lock;-数据传输i
15、le=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_state=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 ;reg:process
16、(clk8)beginif(clk8event and clk8=1)then current_state=next_state;-在时钟上升沿改变状态end if;end process reg;latch1:process(lock)beginif lock=1and lockevent then regl=din;-将输入数据赋给中间变量end if;end process latch1;kongzhi:process(regl)beginif(reglshuchushuchushuchushuchushuchushuchu=11111111;-差值大于 5时输出 255end case
17、;else shuchuclkin,clk1=c);-元件例化U1:ADC0809 port map(clk8=c,wendu=n,din=FPGAin,eoc=FPGAeoc,dout=FPGAout,ale=FPGAale,ile=F PGAile,cont=FPGAcont,start=FPGAstart,oe=FPGAoe,adda=FPGAadda,addb=FPGAaddb,addc= FPGAaddc);U2:jianpan port map(clk=c,shuru(1)=FPGAjian,shuru(0)=FPGAjia,zhi=n,xianshi=FPGAwendu);end
18、 beha;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.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 issignal count : std_logic_vector(7 downto 0); -信号定义signal clk2 : std_logic;begi
19、nprocess(clk)beginif(clkevent and clk=1) then-计数脉冲上升沿if(count=01000000) thencount0);clk2=not clk2;-当达到 64个脉冲时 count置 0,.clk2 取反elsecount=count+1;-未达到 64脉冲时继续计数;end if;end if;clk1xif(x=0)thenx=0;-按键减按下,判断温度是否为0elsexx=x;-其他按键情况,温度不变end case;end if;xianshi=x;-将温度赋给显示输出端zhi=x*5*256/100/5;-将温度转化后赋给输出端end
20、 process;end beha;.library ieee;use ieee.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
21、std_logic;-DAC0832数据锁存允许cont: out 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观察
22、数据锁存时钟dout :out std_logic_vector(7 downto 0);-输出到 DAC0832的 8位数据end ADC0809;architecture beha of ADC0809 istype 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_logic;signal count :std_logic_vector(7 downto 0);beginadda=1;-地址输入 001,选择 IN1addb=0;addc=0;dout=shuchu;-将处理后的数据传输到输出端口lock0=lock;-数据传输.ile=1;-DAC083
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年互联网金融平台用户信任度提升与风险控制策略研究
- 住宅空置车位管理办法
- 企业服务专员管理办法
- 中职食堂饭菜管理办法
- 乡村土地使用管理办法
- 丰田售后维修管理办法
- 乡镇人员考核管理办法
- 休学创业学籍管理办法
- 临时生产工厂管理办法
- 企业安全预防管理办法
- “临床营养科建设与管理指南”实施细则-I级标准化临床营养科建设示范基地
- 科学活动《自制饮水机》
- 初步设计及概算评估咨询服务方案投标文件(技术方案)
- 急性中毒的治疗与护理
- 收益法评估企业价值操作指导意见试行
- 《teamLab无界美术馆(上海)的运营模式分析案例》7200字
- 尘肺病诊断试题及答案
- 眼科院感培训
- 2025年四川广安市前锋区广安鑫鸿集团有限公司招聘笔试参考题库附带答案详解
- 2025年中国体外培育牛黄行业发展监测及投资战略咨询报告
- 完整版肿瘤科医疗质量评价体系与考核标准
评论
0/150
提交评论