基于cpld_fpga的数字温度表设计课程设计(编辑修改稿)内容摘要:

()为反相输入端,表示运放输出端 Vo的信号与该输入端的位相反。 RC4558P 的引脚排列图如图 34 所示。 图 33 运算放大器 图 34 引脚排列图 对 AD590 采集到的信号进行处理的电路连接如图 35 所示。 基于 FPGA 的数字温度计的设计 10 图 35 AD590与 ADC0804 连接图 3. 2. 3 模数转换模块 ADC0804 在该设计中起到数据的模数转换以及数据锁存的作用。 ADC0804 与 FPGA的模块电路如图 36 所示。 基于 FPGA 的数字温度计的设计 11 图 36 ADC0804 与 FPGA的连接模块图 ADC0804 是属于逐次逼近式的模数转换器。 根据图 36 ADC0804 与 FPGA 的连接和图 37 ADC0804 的控制信号时序图的信号流向可知,只有 CS,WR,RD 控制着 ADC0804 动作的信号。 当 INTR 由高电平( 1)转为低电平( 0)后, ADC0804 这次的模数转换完成,DB0DB7 就是转换后的数字资料。 ADC0804 的控制信号时序如图 37 所示。 图 37 ADC0804 的控制信号时序图 如果将图 37 的动作分为 S0,S1,S2,S3 四个步骤区间的话,那么每个步骤区间的动作方式分析如下: S0:CS=0,WR=0,RD=1(由 FPGA 发出信号要求 ADC0804 开始进行数据的模数转换 ); S1:CS=1,WR=1,RD=1(ADC0804 开始转换动作,转换完毕后 INTR 由高电位转为低电位,转换时间 100μ S)。 S2:CS=0,WR=1,RD=0(由 FPGA 发出信号以 读取 ADC0804 的转换资料 )。 S3:CS=1,WR=1,RD=1(由 FPGA 读取 DB0DB7 上的转换资料 )。 根据控制时序图利用有限状态机实现模数转换的控制。 状态机分成 4 个状态: S0 启动转换 (CS=0,RD=0); S1 等待转换结束,即等待 INTR 由低电平变为高电平; S2 A/D 转换结果输出; S3 停止 A/D。 由于 FPGA 所能读取的是 VHDL 语言,所以应用 VHDL 语言描述有限状态机的设计,其进程如图 38 所示。 COM 组合进程以 INTR 和上升状态为敏感信号,当 INTR 由低电平转变为高电平时对现状态进行判断, 通过改变 CS 和 RD 的状态完成对ADC0804 的控制。 REG 时序进程以 CLK 为敏感信号,在 CLK 的上升沿将上升状态转换到下降状态。 LATCH 进程以 LOCK 为敏感信号,在 LOCK 的上升沿锁存 ADC0804 的输出值。 基于 FPGA 的数字温度计的设计 12 如图 38 状态机进程图 实验程序开始之前, A/D 转换器处于重启状态即 RST=1,以使 A/D 转换器处于初始状态,当 RST=0 时 A/D 转换器进入 S0 状态。 核心程序如下: StateChange:Block Signal Generator Begin PROCESS(CP,RST) BEGIN IF RST=39。 139。 Then Reset State nCS=39。 139。 nWR=39。 139。 nRD=39。 139。 EC=39。 039。 State=S0。 END IF; 对 S0,S1,S2,S3 四个状态作具体的分析如下: S0:由 FPGA 发出 信号通知模拟 /数字的转换开始,处于写入模拟信号状态,并且由S0 状态进入 S1 状态,核心程序如下: WHEN S0= nCS=39。 039。 nWR=39。 039。 nRD=39。 139。 EC=39。 039。 State=S1。 基于 FPGA 的数字温度计的设计 13 S1: ADC0804 进行转换时 INTR 由高电位转至低电位,等待转换结束;当转换完成后,INTR 将低电平变为高电平,并且由 S1 状态进入 S2 状态,核心程序为: when S1= nCS=‘1’; nWR=‘1’; nRD=‘1’; EC=‘0’; if nIN=‘0’then State=S2; End if; S2:由 FPGA 发出信号读取 ADC0804 的转换数据结果输出,处于读取数 字信号状态,并且由 S2 状态进入 S3 状态,核心程序为: when S2= nCS=‘0’; nWR=‘1’; nRD=‘0’; EC=‘1’; State=S3; S3:由 FPGA 读取 DB0DB7 上的数字信号,读取结束后停止 A/D 转换器,并且由 S3状态返回 S0 状态,核心程序为: when S3= nCS=‘1’; nWR=‘1’; nRD=‘1’; EC=‘0’; State=S0; when others= State=S0; 3. 2. 4 进制转换模块 通过模数转换模 [8]块处理后被送入 FPGA 器件中的数据均为二进制的数字量 , 如果要想通过数码管显示所测温度的值,我们必须把二进制数字量转 化为十进制的数字量。 这样基于 FPGA 的数字温度计的设计 14 才 能通过动态扫描模块和数码显示模块,从而将所测温度的值在 8 位七段数码管上准确的显示出来。 VHDL 核心程序如下: Conversion:Block Signal V:Std_Logic_Vector(8 downto 0)。 A/D Conversion Data Signal T:Std_Logic_Vector(7 downto 0)。 Begin V=(D amp。 39。 039。 ) 100010001。 (2) T=V(7 downto 0)。 (3) Temp=T。 (4) Value = 000000000000 When T = 0 Else 000000000001 When T = 1 Else 000000000010 When T = 2 Else 000000000011 When T = 3 Else „„ 000010011000 When T = 98 Else 000010011001 When T = 99 Else 000100000000。 100 End Block Conversion。 其中,程序( 2)将读取到的 ADC0804 的数字转换值乘以 2 的用意是将该位左移一位,然后减去 273(100010001)2。 由于所测温度范围 0℃~ 100℃ ,它们的十六进制是 0~ 64H,只要较低的 8 位就可以表示了,而且通过减去 273 之后,最高位一定是 0。 所以,在程序( 3)只取后面的 8 位。 在程序( 4)模块中利用的是查表的方法,把相减的结果,转换成对应的 12 位 BCD 码,供以后的 7 段显示器扫描电路使用。 3. 2. 5 动态扫描模块 动态扫描 [9]就是利用人眼视觉暂留的现象,只要扫描信号频率大于或者等于 24 Hz 时,人眼就 不会感觉到显示器的闪烁。 该设计系统 24Hz 的扫描脉冲由相应的外围电路提供。 在本设计中采用八进制计数器提供同步脉冲,因为动态扫描电路设计的位选信号必须要与显示的数据在时序上一一对应,这就要求电路中必须提供同步脉冲信号。 显示电路的作用是完成 BCD 码到 7 段显示器段码的译码,然后传送到显示器。 在此要求 3 个显示器轮流点亮,由于要求扫描显示的速度必须与数据选择器同步,所以需要一个计数器提供二者的扫描信号。 应用 VHDL 语言设计的显示电路如图 39 所示,主要包括数据选择器、 BCD 译码电路、可逆计数器、扫描译码 4 个部分。 基于 FPGA 的数字温度计的设计 15 数据缓存器数据选择器B C D 译 码 电 路可 逆 计 数 器扫描电路扫 描 码段 码C L K 图 39 显示电路的结构 数据选择器和扫描译码电路的核心 VHDL 程序如下: Free_Counter:Block Signal Q :STD_LOGIC_VECTOR(15 DOWNTO 0)。 Begin PROCESS(CP) Begin IF CP39。 Event AND CP=39。 139。 then Q=Q+1。 END IF。 END PROCESS。 ST=Q(15 DOWNTO 14)。 SELOUT=010WHEN ST=0 ELSE 001WHEN ST=1 ELSE 000WHEN ST=2 ELSE 111。 SEL=110WHEN ST=0 ELSE 101WHEN ST=1 ELSE 011WHEN ST=2 ELSE 111。 END Block Free_Counter。 SELECT_BCD:Block BEGIN NUM= VALUE(3 DOWNTO 0)WHEN ST=0 ELSE VALUE(7 DOWNTO 4)WHEN ST=1 ELSE基于 FPGA 的数字温度计的设计 16 VALUE(11 DOWNTO 8)。 End Block SELECT_BCD。 在上述程序中, ST 是可逆计数器的计数值(范围 0~ 2); VALUE 是数据缓存器(包含 3 组 BCD 码)。 两部分电路的驱动基于同一个计数值,工作时是完全同步的。 3. 3 系统综 合 将以上各模块加以综合,可以得出该数字温度表整体,清晰的设计思路如下: AD590 传感器在加+ 5V 电压时产生电流,此电流通过 10KΩ电阻接地,在其电阻两端产生一个电压,经过放大器 4558 放大后,模拟信号送入 ADC0804 中进行 A/D 转换,由CPLD 控制信号控制 ADC0804 转换后将数字信号输入 FPGA 芯片中,经过 S0(启动转换CS=0,RD=0, WR= 0); S1(等待转换结束,即等待 INTR 由低电平变为高电平); S2 ( A/D转换结果输出); S3(停止 A/D)四个状态后, FPGA 运算读取的二进制数值计算出 十进制数值,控制系统编码 ST 分段显示出所测量的数字温度值,从而读取测量温度值。 该数字温度测量系统的整体电路原理图如图 310 所示。 图 310 数字温度测量系统原理图 基于 FPGA 的数字温度计的设计 17 4. 系统的仿真分析及器件下载 [10] 4. 1 系统的仿真分析 该数字温度测量系统采用的编译软件为 :ALTERA 公司的 QuartusⅡ。 将上述五个设计模块的程序综合成的总程序经过 QuartusⅡ软件编译以后 ,得到的总模块图如图 41 所示。 图 41 系统总程序模块图 系统的程序编译好后 ,通过 QuartusⅡ软件的波形编辑器 (W aveform Editor)进行波形仿真 ,通过仿真可以检验设计的逻辑关系是否准确,而且能够更清楚的看到结果,在这里先将数字温控系统的显示译码电路省略,直接。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。