基于 FPGA 的恒温控制系统
孵化器是一种最新的孵化禽蛋的机器,通过人工制造适合禽蛋孵化的恒温环境,来以较
小的经济投入孵化禽蛋,通过调查,市面上的孵化器多数是以模拟电路的方式制造恒温环境,
如下图
这种模拟电路控制在实际应用中很难做到恒温控制,温度会在最终归的预设值附近上下浮
动,影响禽蛋的孵化。而且,孵化器的温度设置也是模拟电路,这样是完全达不到精准的温
度设置。通过学习 FPGA,我设想运用数字电路来对禽蛋孵化器内部温度进行控制,来实现
可控,可调,温度恒定的禽蛋孵化器。
具体的设计框架如下
通过前向温度采集电路,采集当前孵化器内部的温度信号,将采集到的模拟信号通过
ADC0809模数转换芯片,转变为 FPGA 可控的数字信号,FPGA 芯片根据输入的当前实际温
度,控制输出合理的数字信号,再由 DAC0832转换为模拟信号,输入到后向加热执行电路,
以此来完成对整个孵化器的温度控制。整个系统中,带有温度传感器的前向温度采集电路作
为系统的反馈环节,实时反映当前环境的具体温度,具体的电路图如下。
前向温度采集电路图
此电路设计以 AD590 作为温度触感器,通过添加相应的调节电阻,让温度与输出
电压保持一个相对线性的关系
其中:
W1R 为调零电阻
2wR 为调满度电阻
最终得到的温度与输出电压的关系式为:
100
T
5
0U
模数转换芯片采用的是 ADC0809,具体的连接电路图如下
IN0—IN7管角中任选一路作为前向温度采集电路的输入,VCC 与
VREF 同
VREF 与 GND 接地,OUT1—OUT8数据输出端连接 FPGA,START,
时接+5V 电压,
_
OE,EOC,ADDA-C 均连接 FPGA,根据 ADC0809的工作时序图,由 FPGA 给出相应
的信号控制 ADC0809。
数模转换部分采用的是 DAC0832,具体连接图如下
DI0-DI7分别于 FPGA 的8位数据输出端相连,因为 DAC0832工作在连续的负
反馈电路中,故采用直通的工作方式,将 WR1与 WR2直接与地相连,ILE 与 CS,
Xfer 引脚均接至 FPGA,有 FPGA 发送控制信号来控制 DAC0832的工作。输出引脚
Iout1与 Iout2连接一个流压转换器,将输出的电流信号转换为需要的电压信号,
并进行适当的放大。最后输出到孵化器的加热电路。
FPGA 模块控制 ADC0809的工作状态,并接收来自 ADC0809的数字信号,与键
盘输入的预设信号进行比较后,将控制信息传送给 DAC0832,经由数模转换器转
换后加在发热装置两端,对整个孵化器内部温度进行控制。整个的 FPGA 模块分
为以下几个部分;
分频模块:
由于外界的时钟源一般都较高,而 ADC0809以及键盘扫描模块需要的时钟频
率较低,故需要对外界时钟源进行分频,这里外界输入时钟源为20MHz,对其进
行64分频。波形仿真图如下:
从波形图可以看出,clk 每经过64个脉冲,clk1跳转一次。分频模块工作正常;
统计报告图如下:
分频模块的 VHDL 文件见附录1.
键盘模块:
键盘模块的脉冲输入来自分频模块。其中,输入端口为两位二进制数,分别
接两个按键,来对预设温度进行加减调控。输出有两个端口,xianshi 端口作为
保留端口,存储着当前预设温度的数值,可外接显示设备。zhi 端口为信息传送
端口,其存储值为当前预设温度值经由采集电路温度—电压公式换算后的十进制
数值。换算公式如下:
5
0U
100
T
例:38摄氏度对应的 ADC0809输出数据为5*38*256/100/5,得到十进制值为
97;
波形仿真图如下:
图(1)
图(2)
图中,shuru(1)为温度减按键,shuru(0)为温度加按键,相应的预设温
度对应相应的 ADC0809输出值,由图2得,当预设温度为38摄氏度时,对应换算
后的 ADC0809输出数据为97,与计算相符。键盘输入模块工作正常。
统计报告图如下:
键盘模块的 VHDL 文件见附录2.
ADC0809控制模块:
经查阅资料,DAC0832需采用直通式,故,将 DAC0832的控制语句直接写在
了 ADC0809的控制语句块内。ile 为输出到 ADC0832的输入锁存允许信号,cont
为 ADC0832WR1,WR2,CS 等引脚。Wendu 为预设温度的输入引脚。din 为 ADC0809
转换后的输出信号,dout 为受 FPGA 控制的输出到 DAC0832的控制信号。clk8为
来自为频器的时钟信号。
根据 ADC0809的时序图,总结出相应的状态转移图,一次来编写控制 ADC0809的
VHDL 语 言 文 件 , 状 态 转 移 图 如 下 :
具体波形仿真图如下:
波形仿真建立在预设温度为38摄氏度的条件下。前面提到,38摄氏度对应的
ADC0809输出值为97,VHDL 程序中设定,当 ADC0809输入值大于或等于97时(当
前温度大于或等于预设温度),FPGA 输出到 DAC0832的控制信号为0,即停止加热。
当 ADC0809输入值小于92(即36摄氏度,与设定温度相差大于两度)时,FPGA
输出到 DAC0832的控制信号为255,即以最大功率加热。当 ADC0809输入值小于92
时,将会细分为5个阶段,即以逐次递减的功率加热。由图可知,ADC0809工作正
常。
统计报告图如下: