0 引 言
传统的数字电压表设汁通常以大规模ASIC(专用集成电路)为核心器件,并辅以少量中规模集成电路及显示器件构成。ASIC完成从模拟量的输入到数字量的输出,是数字电压表的心脏。这种电压表的设计简单、精确度高,但是这种设计方法由于采用了ASIC器件使得它欠缺灵活性,其系统功能固定,难以更新扩展。后来发展起来的用微处理器(单片机)控制通用A/D转换器件的数字电压表的设计的灵活性明显提高,系统功能的扩展变得简单,但是由于微处理器的引脚数量有限,其控制转换速度和灵活性还是不能满足日益发展的电子工业的需求。而应用EDA(电子设汁自动化)技术及FPGA(现场可编程门阵列),其集成度高、速度快、性能十分可靠、用户可自由编程且编程语言通俗易懂、系统功能扩展非常方便[1]。采用FPGA芯片控制通用A/D转换器可使速度、灵活性大大优于由微处理器和通用A/D转换器构成的数字电压表。
1 系统设计原理
本设计利用ADC0809作为电压采样端口,FPGA作为系统的核心器件,用LED(发光二极管)进行数码显示。
采用Alterla公司FLEX10K系列EPF10K20TC144-4 芯片FPGA作为系统的核心器件,负责ADC0809的A/D转换的启动、地址锁存、输入通道选择、数据读取。同时,把读取的8位二进制数据转换成便于输出的3位十进制BCD码送给数码管,以显示当前测量电压值。这些工作由ADC0809转换控制模块、数据转换模块、译码模块完成。
2FPGA软件设计及模块仿真
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]。
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的结果相符。
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的数字电压表设计完成。本设计的结果已通过硬件测试。
4 结束语
本设计只用了ADC0809的一个通道,在不改变硬件电路的前提下,只要稍微改变VHDL的源程序,就可实现其余通道的利用,构成复杂的数据采集系统。数据处理模块用查表方式设计,设计比较简单,易于理解,但对FPGA的芯片资源利用率不高,因此要想编写出更高效率的数据处理源程序,可以用权位相加的方法实现,其原理见文献[5]。这种方法不是很好理解,但是其资源利用率明显高于查表方式;同时可以用LCD(液晶显示器)代替LED显示,用LCD显示时译码程序要进行相应更改,以便与LCD驱动时序同步。编码用ASCII码,并且由于LCD的速度较慢,因此时钟频率不能过高,否则将不能对LCD进行读写。本设计通过添加一些前置电路就可扩展其功能,如果采用16位A/D转换器,则可以提高其分辨率。