打印

基于FPGA的数字电压表设计

 关闭 [复制链接]
1382|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
星星之火红|  楼主 | 2012-10-11 21:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
伴随着集成电路(IC)技术的发展,电子设计自动化(EDA)逐渐成为重要的设计手段,己经广泛应用于模拟与数子电路系统等许多领域。目前电子技术的发展主要体现在EDA领域,数字系统的设计正朝着速度快、容量大、体积小、重量轻的方向发展。电子设计自动化是近几年迅速发展起来的将计算机软件、硬件、微电子技术交叉运用的现代电子设计学科。其中EDA设计语言中的VHDL语言是一种快速的电路设计工具,功能涵盖了电路描述、电路合成、电路仿真等三大电路设计工作。本电压表的电路设计正是用VHDL语言完成的。此次设计主要应用的软件是美国ALTERA公司自行设计的Quartus II。
本次所设计的电压表的测量范围是0~5V,精度为0.01V。此电压表的设计特点为:通过软件编程下载到硬件实现,设计周期短,开发效率高。

使用特权

回复

相关帖子

沙发
星星之火红|  楼主 | 2012-10-11 21:59 | 只看该作者
1 系统设计原理

  本设计利用ADC0809作为电压采样端口,FPGA作为系统的核心器件,用LED(发光二极管)进行数码显示。

  采用Alterla公司FLEX10K系列EPF10K20TC144-4 芯片FPGA作为系统的核心器件,负责ADC0809的A/D转换的启动、地址锁存、输入通道选择、数据读取。同时,把读取的8位二进制数据转换成便于输出的3位十进制BCD码送给数码管,以显示当前测量电压值。这些工作由ADC0809转换控制模块、数据转换模块、译码模块完成。

使用特权

回复
板凳
星星之火红|  楼主 | 2012-10-11 21:59 | 只看该作者
2 FPGA软件设计及模块仿真

2.1 A/D转换控制模块的软件设计

  本模块完成ADC0809的初始化、A/D转换的启动、地址锁存、通道选择、状态读取及数据读取、数据锁存等功能。此模块的软件设计主要采用VHDL的多进程状态机完成[4]。

  工作时序如下:上电瞬问,FPGA初始化,ADD置成"01",状态机处于第1个状态,此时ALE、START、OE、LOCK(数据锁存信号)均置0,初始化ADC0809。第1个上升沿到来时,状态机由状态1转换到状态2,ALE、START置1,OE、LOCK为0,此时地址锁存信号有效,由ALE将ADD的"01"状态锁存到地址锁存器并译码,选择IN1即通道1作为模拟信号输入端,同时STRAT信号有效,启动采样。第2个上升沿到来时,状态机由状态2转换到状态3,ALE、START返回到低电平,OE、LOCK继续为低电平,此时如果FPGA检测到ADC0809的EOC引脚由低电平变成高电平(A/D转换完成),则当时钟上升沿到来时,转换到状态3,否则继续保持在状态2,直到转换完成。由状态2转换到状态3后,OE置高电平,允许转换数据输出,其余信号状态保持不变。时钟上升沿再次到来时,状态机由状态3转换到状态4,LOCK置高电平,其余信号与状态3一样。当LOCK由低电平转换到高电平的瞬问,稳定的数据锁存到锁存器。上升沿再次到来,则状态机返回状态0。控制器在时钟信号控制下完成状态转换,实现对ADC0809的控制[3]。

使用特权

回复
地板
星星之火红|  楼主 | 2012-10-11 21:59 | 只看该作者
2.2 数据转换模块的软件设计

  本设计采用5 V参考电压,测量范围为0~5 V,由于转换器件为8位,则电压的最小分辨率为0.02V,因此待转换数据。

  编一个查表程序,对上述电压进行BCD码编码,然后根据对应的4位BCD码相加的结果决定是否进位,从而得到待处理数据的BCD码[5]。例如:从AD0809上取得的数据为"11011110",1101对应的电压值为4.16 V,其对应的BCD编码为"010000010110",1110对应的电压值为0.28 V,其对应的BCD编码为"000000101000"。低4位相加为1110,大于9,加6将其调整为BCD码,其值为0100,并且向前有一进位。4位相加的结果为0011,由于低位有进位,因此最终结果为0100。高4位的结果为0100。3位合计的值为4.44 V,与4.16+0.28的结果相符。

使用特权

回复
5
星星之火红|  楼主 | 2012-10-11 21:59 | 只看该作者
2.3 译码输出模块的软件设计

  本模块的任务是把数据处理模块处理得到的BCD码转换成能被数码管识别的字型编码。8位二进制数转换成BCD码后为12位,因此需3个数码管显示结果。为了节省资源,采用扫描方式控制数码管的显示,扫描时钟由CK提供,其频率应大于100 Hz,否则会有闪烁现象。

3 系统仿真及验证


  当FPGA从AD0809上读取的数据为0F8H(十进制248)时输出的段码为66H、6FH、7D,分别对应字符4、9、6,加上小数点就是4.96 V,而其分辨率为0.02 V,则A/D转换得到的电压值应为0F8x0.02 V=4.96 V。显示结果与理论推算完全相符。

  选EPF10K10TC20TC144-4作为目标器件并进行正确的引脚锁定后,将程序下载到目标配置器件[6]。改变ADC0809的模拟通道输入电压,观察数码管的输出,其输出随着输人电压的变化而变化,当输入电压变为0时,数码管的输出为0,输人为5 V时数码管输出也为5.00 V,其余情况下输入与输出也一致,至此,基于FPGA的数字电压表设计完成。本设计的结果已通过硬件测试。

使用特权

回复
6
星星之火红|  楼主 | 2012-10-11 21:59 | 只看该作者
4 结束语

  本设计只用了ADC0809的一个通道,在不改变硬件电路的前提下,只要稍微改变VHDL的源程序,就可实现其余通道的利用,构成复杂的数据采集系统。数据处理模块用查表方式设计,设计比较简单,易于理解,但对FPGA的芯片资源利用率不高,因此要想编写出更高效率的数据处理源程序,可以用权位相加的方法实现,其原理见文献[5]。这种方法不是很好理解,但是其资源利用率明显高于查表方式;同时可以用LCD(液晶显示器)代替LED显示,用LCD显示时译码程序要进行相应更改,以便与LCD驱动时序同步。编码用ASCII码,并且由于LCD的速度较慢,因此时钟频率不能过高,否则将不能对LCD进行读写。本设计通过添加一些前置电路就可扩展其功能,如果采用16位A/D转换器,则可以提高其分辨率。

使用特权

回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

101

主题

1782

帖子

22

粉丝