《电子技术》课程设计报告题目温度测量与控制电路学院(部)电子与控制工程学院专业电子科学与技术班级32050701学生姓名郭鹏学号3205070113指导教师(签字)前言随着数字时代的到来,人们对于温度的测量与控制的要求越来越高,用传统的水银或酒精温度计来测量温度,不仅测量时间长、读数不方便、精度不够高而且功能单一,已经不能满足人们在数字化时代的要求。
于是我们提出,测温电路利用温度传感器监测外界温度的变化,通过放大器将温度传感器接收到的信号进行放大,放大到比较有利于我们测量的温度范围,然后利用A/D转换器实现模拟信号到数字信号的转换,最后通过编程让FPGA实现8位二进制数与BCD码之间的转化,实现温度的显示;并利用比较器来实现对放大电压信号的控制,从而实现对温度的控制;再者还加载了报警装置,使它的功能更加完善,使用更加方便。
本设计是采用了温度的测量、信号放大、A/D转换、温度的显示、温度的控制、报警装置六部分来具体实现上述目的。
目录摘要与设计要求 (4)第一章:系统概述 (5)第二章:单元电路设计与分析 (5)1) 方案选择 (5)2)设计原理与参考电路 (6)1 放大电路 (6)2 低通滤波电路 (7)3 温度控制电路 (8)4 报警电路 (9)5 A/D转换器 (10)6 译码电路 (11)第三章:系统综述、总体电路图 (14)第四章:结束语 (15)参考文献 (15)元器件明细表 (15)收获与体会,存在的问题等 (16)温度测量与控制电路摘要:利用传感器对于外界的温度信号进行收集,收集到的信号通过集成运算放大器进行信号放大,放大后的信号经过A/D转换器实现模拟信号与数字信号间的转换,再通过FPGA编程所实现的功能将转换后的数字信号在数码管上显示出来,实现温度测量过程。
放大的信号可以与所预定的温度范围进行比较,如果超出预定范围,则自动实现声光报警功能,实现温度控制过程。
关键字:温度测量温度控制信号放大A/D转换声光报警设计要求:1. 测量温度范围为200C~1650C,精度 0.50C;2. 被测量温度与控制温度均可数字显示;3. 控制温度连续可调;4. 温度超过设定值时,产生声光报警。
第一章系统概述传感器两端的电压信号变化不大,经过放大电路和滤波电路之后就会形成一个比较大的模拟量。
这个模拟量有两个电路使用,一个是AD转换器,另一个就是控制温度电路。
当被测温度超过控制温度时控制温度电路就会产生报警信号,驱动报警电路达到报警要求。
当然,控制电压分别要接另外两个AD转换器和译码显示电路,达到数码显示的要求。
整个系统的设计思路是从A/D转换器出发的,由于A/D转换器的模拟电压输入量需要一个比较大的值,所以传感器的信号要经过放大电路,由于放大电路本身以及传感器外界的干扰因素,在放大电路之后要加一级低通滤波器。
经过滤波之后的信号就是我们需要的模拟信号。
这个模拟信号分别接两个输入端,一个是A/D转换器的输入端,另一个是控制温度输入端。
A/D转换器的数字输出接译码显示电路。
系统的硬件流程图如下图所示:第二章单元电路设计与分析1)、方案选择放大电路,低通滤波电路,报警电路以及控制电路相对比较容易实现,在数据采集的过程中,采集到得八位二进制数如何转换成十二位的BCD码,实现起来有些问题,有两种方案可供选择:1采用组合逻辑电路,用74系列的加法器283先形成BCD的一位加法器,再通过级联的方式译码。
2用FPGA芯片进行编程,输入为二进制数(并不一定是二进制自然码),输出为12位BCD码。
经过比较,第二种方案可行,并且简单,方便易懂。
第一种方案很难实现,并且某一个温度所对应的AD转换器的输出量,并不一定是这个温度对应的二进制数自然码。
所以想要实现第一种方案,还要另外在AD转换器的输出端加一个八位的加法器,这样会使电路更加复杂。
而第二种方案用VHDL编写程序,简单易懂,并且器件的执行速度快,还略去了组合逻辑电路的复杂性。
数据转换器的位数也有两种方案可供选择:1采用八位数据转换器。
因为测量电路的要求是:量程为20到165;精确到0.5,这样算下来需要至少产生290个二进制数来表示温度,也就是说AD转换器至少要9位才可以。
持这种意见的同学认为,八位AD转换器虽然少了一位,但是可以用比较器额外增加一位。
2采用16位的AD转换器。
采用16位AD转换器,可以省去数模混合电路的设计,这样电路就会更加简单。
所以决定用16位AD转换器,但是只取9位。
并且只有八位译码,另外一位控制小数点后面的0.5.这样即达到了设计要求,而且还简化了译码的程序。
2):设计原理与参考电路1、放大电路:采用三级集成运算放大电路,集成运算放大器型号为LM324,LM324系列器件为差动输入的四运算放大器。
与单电源应用场合的标准运算放大器相比,它们有一些显著优点。
该四放大器可以工作在低到3.0伏或者高到32伏的电源下,静态电流为MC1741的静态电流的五分之一。
共模输入范围包括负电源,因而消除了在许多应用场合中采用外部偏置元件的必要性。
在该放大电路中,我们将传感器收集到的信号定义为VEE,因为该信号过于微弱,所以需要经过集成运算放大器进行信号放大,放大到便于我们测量的电压值,该电路采用三级集成运算放大器,放大倍数约为1248倍,经过实际测量得到了放大后的电压值如下图所示:2 5.2482.5 5.8723 6.3953.4 6.995放大电路图如上图所示:在该电路图中,放大电路的2号引线为接收传感器信号的输入端(我们将VEE定义为传感器的输入信号),第三级放大器的9号引线为放大信号的输出端,它接的是滤波电路。
2、低通滤波器如图所示:因为传感器的输入和放大器本身不可避免的会带有一些高次谐波或高频干扰信号,这会对A/D转换器的数据采集造成干扰,为了削弱高次谐波或高频干扰的场合,提高测量的精度,所以要加一级或者多级低通滤波器(仿真中为一级)。
具体电路如上图所示。
由于同向比例放大电路的电压增益为Auf=A0+R2/R1,只要将R1的电阻值设置为远大于R2的电阻值,则电压增益可忽略不计,例如:当VCC=10V时,通过放大器后的输出电压为10.002,电压增益对于整体电路的电压输出并无决定性影响,在该电路中,电源VCC实际上是从上一级放大器接收到得放大信号,而放大器接电阻R3另一端接的是译码电路。
3、温度控制电路:控制温度电路主要由两个电压比较器组成,第一个电压比较器(上方)控制的是温度下限,第二个控制的是温度上限,当温度所对应的电压超过量程时,两个电压比较器会有一个输出高电平,比较器的电源电压控制的适当,这个高电平就可以和门电路(或门)连接。
仿真时,电源电压为5V,比较器输出电压为4V。
控制温度电路的输入端接电压跟随器,这个电压跟随器再和滤波电路的输出端连接。
控制温度电路的输出端(或门输出端)直接连接报警电路。
温度控制电路图如下图所示:4、控制报警电路:在设计报警电路时,我们采用了555多谐振荡器来实现报警功能,利用一个发光二极管来实现光报警,蜂鸣器来实现声音报警,具体电路图如下图所示:在该电路图中18接的是控制电路两个比较器出来的信号,当信号大于VDD2的电压预定值,或者小于VDD1的电压预定值时,该555报警电路会自动报警,发光二极管产生光报警信号,蜂鸣器产生声音报警信号。
5、A/D转换器:采用十六位的A/D转换器,但是由于课程设计中要求的精度为0.5V,量程为20到165,也就是说小数点后面的数字不是0就是5,所以在译码时只需要将高8位译成BCD码,用第7位来控制小数0.5,当第7位为高电平时,小数部分为0.5,当第7位为低电平时,小数部分为0.而高位的8位二进制数并不一定是二进制自然码,这个问题会在译码电路中得到解决。
AD转换器的其他管脚悬空即可。
AD转换器的模拟量输入端在与放大电路连接之前要加电压跟随器,这样可以防止压降的变化,减小误差。
假设当温度为20摄氏度时,传感器的电压为0.5mV,当温度为165摄氏度时,假设温度为3.4mV(如果温度和电压值不能对应,可以改进桥式电路,或者加一个上拉电阻,使传感器的电压值增大)AD转换器如图所示:在该电路中,Vin接的是低通滤波器传过来的放大信号,D7到D15接的是译码电路,即PLD 芯片,Vref+和Vref-接的是一个电压范围,即在该范围内工作,SOC为输入的脉冲信号。
6、译码电路:由于经过A/D转换器输出的为二进制数,这些二进制数在数码管上并不能完全显示,为了能很好的再数码管上显示温度,本次的课程设计采用的译码电路为FPGA芯片,利用VHDL 编程来实现译码功能。
VHDL源程序如下:ibrary ieee;use ieee.std_logic_1164.all;entity BCD isport(reset: in std_logic;OE: in std_logic;Vin:in std_logic_vector(7 downto 0);Vout1: out std_logic_vector(3 downto 0);Vout2: out std_logic_vector(3 downto 0);Vout3: out std_logic_vector(3 downto 0));end entity;architecture behave of BCD issignal temp_q: integer range 0 to 199;signal temp_q0,temp_q1,temp_q2,temp_q3:integer range 0 to 99; FUNCTION vector_to_int(input :in std_logic_vector(7 downto 0))return integer isVARIABLE q,p:integer :=0;beginfor i in 7 downto 0 loopp:=0;if(input(i)='1') thenp:=2**(i-0);elsenull;end if;q:=q+p;end loop;return (q);end vector_to_int;beginprocess(reset,OE)beginif(OE='0')thenVout1<="0000";Vout2<="0000";Vout3<="0000";elsif(OE='1' and reset='1')thenVout1<="0000";Vout2<="0000";Vout3<="0000";elsetemp_q<=vector_to_int(Vin);if(temp_q>=100 )thentemp_q3<=1;temp_q0<=temp_q-100;temp_q1<=temp_q0 REM 10;temp_q2<=temp_q0-temp_q1;else if(temp_q<100 and temp_q>0)thentemp_q3<=0;temp_q0<=temp_q;temp_q1<=temp_q0 REM 10;temp_q2<=temp_q0-temp_q1;end if;end if;end if;case temp_q1 iswhen 0=>Vout1<="0000";when 1=>Vout1<="0001";when 2=>Vout1<="0010";when 3=>Vout1<="0011";when 4=>Vout1<="0100";when 5=>Vout1<="0101";when 6=>Vout1<="0110";when 7=>Vout1<="0111";when 8=>Vout1<="1000";when 9=>Vout1<="1001";when others =>Vout1<="0000";end case;case temp_q2 iswhen 0=>Vout2<="0000";when 10=>Vout2<="0001";when 20=>Vout2<="0010";when 30=>Vout2<="0011";when 40=>Vout2<="0100";when 50=>Vout2<="0101";when 60=>Vout2<="0110";when 70=>Vout2<="0111";when 80=>Vout2<="1000";when 90=>Vout2<="1001";when others =>Vout2<="0000";end case;case temp_q3 iswhen 0=>Vout3<="0000";when 1=>Vout3<="0001";when others =>Vout3<="0000";end case;end process;end behave;分别定义FPGA的清零端reset,使能端OE,八个输入Vin0到Vin7和三个输出Vout3(3 downto 0)Vout2(3 downto 0)Vout1(3 downto 0)。