基于STEP-MAX10M08核心板实现简易电压表的设计

时间:2025-08-01  作者:Diven  阅读:0

传统的数字电压表设计通常以大规模ASIC(专用集成电路)为核心器件,并辅以少量中规模集成电路及显示器件构成。这种电压表的设计简单、精确度高,但是由于采用了ASIC器件使得欠缺灵活性,其系统功能固定,难以更新扩展。而应用FPGA设计的电压表,采用FPGA芯片控制通用A/D转换器,可使速度、灵活性大大优于通用数字电压表。

基于STEP-MAX10M08核心板实现简易电压表的设计

本文采用STEP-MAX10M08核心板和STEP Base Board V3.0底板来完成简易电压表设计,我们将设计拆分成三个功能模块实现:

ADC081S101_driver: 驱动SPI接口ADC芯片实现模拟电压信号采集。

bin_to_bcd:将二进制数据转换成BCD码的方法。

Segment_led:通过驱动独立式数码管将电压数据显示出来。

Top-Down层次设计

模块结构设计

1. ADC介绍

模数转换器即A/D转换器,或简称ADC,通常是指一个将模拟信号转变为数字信号的电子元件。通常的模数转换器是将一个输入电压信号转换为一个输出的数字信号。由于数字信号本身不具有实际意义,仅仅表示一个相对大小。故任何一个模数转换器都需要一个参考模拟量作为转换的标准,比较常见的参考标准为最大的可转换信号大小。而输出的数字量则表示输入信号相对于参考信号的大小。

模拟系统与数字系统结合模型

并行ADC和串行ADC模型

上图两个都是8位ADC模型,分辨率为 2的8次方等于256,即将Vref分成256份,能够分辨的模拟步进为Vref / 256,量化数据N = 256 * Vin / Vref 。

并行ADC与数字电路接口包含一根clk和8根data管脚,clk为芯片时钟管脚,data为芯片数据管脚,每个clk周期从data管脚采集8bit的数据,完成一次模数转换,所以clk频率等于采样率。

串行ADC(以ADC081S101为例)与数字电路接口为三根线(cs,clk,din),兼容三线SPI总线,cs为芯片使能管脚,clk为芯片时钟管脚,din为芯片数据管脚,当ADC芯片使能时每个clk周期从din采集1bit的数据,但是根据ADC081S101的时序,需要16个clk完成一次采样,所以clk频率至少等于采样率的16倍。

2. ADC模块电路连接

本设计所采用的STEP Base Board V3.0底板上的ADC模块电路,其电路图如下:

ADC模块电路

FPGA直接连接ADC081S101芯片的控制端,ADC有6个管脚,3脚Vin为VCC和Vref功能复用,即Vin = VCC = Vref。ADC前端是运放电路LMV721,运放模块为电压跟随电路,再往前端是一个跳冒排针,用来选择ADC采样信号的来源,当短路帽将1、2脚短路时,ADC采集电位计电压,当短路帽将2、3脚短路时,ADC采射频端子或P4排针信号。本设计我们是采集旋转编码器的电压,所以需要用短路帽将1、2脚短路。

3. ADC模块驱动设计

ADC081S101串行通信时序如下图:

注:

1. SCLK空闲时为高电平,CPOL = 1,上升沿(第二个边沿)采样,CPHA = 1,如果例化通用SPI核完成设计,需要采用SPI的第四种工作模式。

2. CS信号拉低有效,经过16个时钟完成一次ADC转换并采样,采样回来的数据前3位无效,接下来为DB7~DB0(有效数据),再接下来为无效数据。

针对ADC081S101时序,我们用Verilog设计一个计数器,当计数器值不同时完成不同操作,实现一次ADC采样,程序实现如下:

到这我们就完成了串行ADC芯片ADC081S101的驱动设计,整个采样周期用了35个系统时钟,如果我们采用12MHz时钟作为该模块系统时钟,采样率Fs = 12M/35 = 343Ksps,ADC主频Fsclk = 12 MHz /2 = 6MHz。

ADC081S101主频及采样率要求如下,按照要求我们当前的主频和采样率不足,所以在使用该模块时,可以使用更高的时钟(比如24MHz)以达到芯片的要求

注:时钟频率Fsclk,最小值为10MHz,最大值为20MHz,采样率在500Ksps~1Msps

模块接口如下:clk和rst_n为系统时钟及复位,adc_cs,adc_clk和adc_dat为ADC控制管脚,adc_data为ADC采样数据,adc_done产生一个脉冲对应adc_data得到一个有效数据

4. 时钟获取

因为需要更高的时钟供ADC模块使用,我们例化pll核得到24MHz时钟,同时例化pll模块和ADC081S101_driver模块,并将pll的输出与ADC081S101_driver模块的clk连线。

Pll模块和ADC081S101_driver模块的连接程序实现如下:

5. 采样结果显示

假设ADC模拟输入电压为3.3V,理论上我们得到的采样数据adc_data应该为8’hff,而电压表最终显示在数码管上的数据应该为3.3,我们如何将8’hff转换成可以显示的3.3数据呢?这就设计到ADC量化数据的逆向运算了。

我们知道量化运算 N = 256 * Vin / Vref,

那么逆向运算为Vin = N * Vref / 256,其中Vref = 3.3V,所以Vin = N * 0.0129

所以我们需要用FPGA计算adc_data * 0.0129的结果,然后为了使用十进制的显示,先将结果进行BCD转码,然后显示在数码管上。

将ADC采样数据按规则转换为电压数据(乘以0.0129),这里我们直接乘以129,得到的数据经过BCD转码后小数点左移4位即可,程序实现如下:

二进制转BCD码程序实现如下:

最后得到20位的数据输出,每4位表示一个BCD码,所以有5位有效数据,这里我们还需要将小数点左移4位,计算出来的数应该是X.XXXX伏特,1个整数位和4个小数位,核心板上只有两个数码管,取最高的两个BCD码显示到数码管X.X伏特,个位小数点点亮,分位小数点熄灭,程序实现如下:

综合后的设计框图如下:

RTL设计框图

到这一步就完成了基于FPGA的简易电压表设计。将程序下载到FPGA中,STEP Base Board V3.0底板上P3接口的1、2脚短路,旋转底板右上角的电位计,观察核心板数码管变化,也可同时用万用表测量P3短路处的电压,与数码管上的结果对比。

实物图:

猜您喜欢


现代电子产品中,贴片电阻作为重要的电子元器件,应用于各种电路设计中。贴片电阻不仅占用空间小,而且具有良好的性能和可靠性。封装功率是选择贴片电阻时必须考虑的关键参...
2025-04-15 14:01:43

字库芯片是用于存储和显示文字信息的重要电子元件,应用于各种电子设备中。根据不同的应用需求,字库芯片可以分为几种主要类型。按存储方式分类,可以分为ROM(只读存储...
2009-12-09 00:00:00

光电传感器是利用光电效应来感知和测量物体的设备,应用于工业自动化、安防监控、智能家居等领域。其主要作用是通过检测光的变化来实现对物体的识别和监测。光电传感器能够...
2008-09-14 00:00:00

分子排阻色谱法(Size Exclusion Chromatography, SEC)是应用于生物化学和分析化学中的分离技术。该方法根据样品分子的大小进行分离,...
2025-04-14 17:01:43

电流检测电阻作为电路中不可少的重要元件,应用于电源管理、汽车电子、工业控制等领域。作为国内知名的电阻制造商,PHYCOM(飞元)凭借其高品质和技术创新,推出了多...
2022-07-26 17:23:19

贴片电阻上的「103」并不是直接表示103欧姆。它实际上是一种编码方式,代表电阻的阻值。解读方法如下:前两位数字「10」代表有效数字,第三位数字「3」代表10的...
2024-11-26 11:29:17

网卡是计算机与网络之间的桥梁,根据不同的分类标准,网卡可以分为以下几种类型。从连接方式上来看,网卡可以分为有线网卡和无线网卡。有线网卡通过网线连接网络,提供稳定...
2013-05-14 00:00:00

汽车保险丝作为保护车辆电路安全的重要元件,其质量和分类越来越受到车主和维修人员的关注。华册作为国内知名的汽车保险丝品牌,凭借高品质的产品和完善的服务体系,赢得了...
2023-12-19 00:48:30

221贴片电阻,这个小小的元件在电子电路中扮演着重要的角色。那么,221到底代表什么阻值呢?其实,221是一种编码方式,它代表着220欧姆的电阻值。这种编码方式...
2024-11-26 11:29:48