作者:Mike Byrne and Ken Kavanagh
在使用模数转换器设计系统时,一项关键任务是实际选择要使用的转换器。功耗、价格和尺寸等限制因素以及系统对分辨率和性能参数的要求将缩小选择范围。但是,设计人员可能仍然会留下许多转换器,乍一看,这些转换器将在应用中执行。一种选择是简单地根据数据手册信息选择转换器;但谨慎的工程师实际上希望了解零件在应用要求的条件下的性能。然而,问题在于如何尽可能少地花在评估上,因为其中大部分时间将用于评估将被排除在考虑之外的转换器。
评估转换器并非易事。需要硬件设计工作和仔细的PCB布局,以使该器件达到其指定的模拟性能。即使使用标准评估板解决了硬件问题,也需要软件例程来控制器件并回读数据。在当今多样化的市场中,各种可用的转换器,尤其是来自不同制造商的转换器,都采用专有引脚排列,通常需要不同的软件例程进行控制和访问。
鉴于这种背景,欢迎任何使设计人员能够更轻松地评估转换器的工具。这些工具可加快选择转换器的过程,为设计人员节省开发系统以评估器件所需的时间和精力。除了更快、更轻松地选择转换器外,还应通过快速简便的方法来测试应用中的部件,从而进一步加快设计过程。为了 有用, 测试 系统 应 有效 自 包含, 在 设计 者 随时 可用 的 平台 上 运行, 并 实现 两 个 不同 的 功能: 提供 一种 快速 的 方法 来 演示 转换 器 的 性能, 以及 为 在 用户 应用 中 评估 转换 器 提供 开发 平台。
这些是中高速通用模数转换器评估系统的设计目标,使用标准PC作为评估设备的平台。PC有两个用于外部通信的端口,一个串行RS-232端口和一个并行打印机端口。由于这两个端口都无法以每秒超过10,000个采样的吞吐速率运行ADC所需的速度运行,因此,如果要以指定的吞吐速率运行ADC,则无法在PC和ADC之间直接连接。
因此,为了便于控制ADC并以指定速度运行ADC,需要在PC外部提供额外的处理能力。还需要一个内存缓冲区来存储以较高吞吐率收集的数据,然后再以与其移植速度兼容的较低速率将其上传到PC。一种方法是构建具有处理能力和存储器的评估板。但这有一个缺点,即每个评估板上都需要一个处理器;评估板作为开发板的灵活性降低。
ADI位于利默里克的通用转换器应用事业部采用的方法是简化评估板,并将存储器、处理能力和PC通信移至单独的控制器板。该控制器板标有EVAL-CONTROL BOARD,提供PC的RS-232端口与目标设备的评估板之间的链路。它提供了一种控制转换器(子)板并以最大吞吐速率操作转换器的方法,同时在PC上演示结果。Eval-Control 板能够与一套子评估板一起使用,每个子评估板都针对特定转换器或系列的特定需求。用户购买一个 Eval-Control 板,可以通过标准 96 引脚连接器将子评估板连接到该控制器板。系统配置如图 1 所示。
图1.台架测试设置。
所有与 Eval-Control 板兼容的子评估板的名称都以字母 CB 结尾。迄今为止,有10个子ADC评估板可用于控制器板;其性能范围为12位、600 ksps AD7892至16位200 ksps AD976A。
为了满足设置独立的要求,可以使用具有 12A 电流容量的标准 1V 交流变压器为系统供电。然后,Eval-Control Board从中产生自身和子板所需的所有功率(图2)。该板的功能基于ADI公司ADSP-2111数字信号处理器(DSP)。ADSP-2111具有两个高速串行链路,一个2K x 24内部程序存储器RAM和一个1K x 16内部数据存储器RAM。处理器控制采样速率和评估板的数据采集。对于串行接口,它能够以 8 MHz 的比特率获取数据;对于并行接口,它的字速率为 3.2 MHz。
图2.评估控制板框图
Eval-Control Board和PC之间的通信由8051微控制器控制。8051上的UART端口连接到PC的COM-1串行端口,信息通过标准RS-232电缆传输。8051连接到ADSP-2111的主机接口端口(HIP)。相应子评估板的软件通过2111下载到ADSP-8051。同样,当ADSP-2111采集并处理数据样本后,它们会通过8051传输回PC进行分析。Eval-Control Board的8K x 16位RAM允许存储多达4000个样本,然后再将其传输到PC进行处理。它还包括一个14位单芯片DAC和ADC (AD7869)。因此,它可以获取模拟数据,并在用户愿意的情况下生成模拟输出信号。
评估软件在DOS 4.0或更高版本下运行,允许用户控制包含被测器件的子板的操作。样品以高达转换器最大吞吐速率的速率收集,然后上传到PC进行显示和分析。前端PC软件具有许多屏幕显示;这些示例如图 3 所示。
一个。正弦波及其数字化频谱。
b.直方图分析
图 3.数据呈现示例。
该软件与一系列功能键,热键和屏幕按钮一起运行。有了它,用户可以选择采样率、要采集的样本数量、模拟输入范围、工作模式和片上寄存器的控制。该软件还可以对捕获的数据执行窗口功能,执行快速傅立叶变换(FFT),计算信噪比并显示结果。它还可以显示直流输入的代码分布,并计算分布的平均值和标准偏差。该软件允许将捕获的数据存储到文件中,从中可以导出以供其他软件包处理。数据可以从文件中获取(而不是从评估板捕获)并离线处理。
因此,Eval-Control Board满足了其要求,即使用上述功能的全套软件例程来演示标称性能。一旦设计人员进入评估阶段,就可以调整这些例程,以在特定应用条件下评估器件。在这里,Eval-Control Board可以作为一个真正的开发平台运行。为了为此目的调整和开发软件,首先需要了解Eval-Control Board的软件是如何工作的。
软件
该软件分为两个主要部分。第一个是用 C 代码编写的,在 PC 上运行;第二个是在评估控制板上运行的DSP代码,基于ADSP-21xx代码。我们以具有并行数据总线的12位ADC为例。在检查 21xx 代码之前,应该了解当用户从 PC 软件中选择命令时会发生什么。
每个子评估板都需要自己的软件例程;它们存储在PC上,并在使用该特定评估板时下载到Eval-Control板。主板特定的软件文件称为主机接口端口(HIP)文件。当用户选择要加载的程序时,该程序的HIP文件将通过PC的串行端口加载到Eval控制板上。加载程序后,DSP 程序会使其等到获得命令后再执行任何进一步的操作。当用户从PC选择操作时,四字节代码通过串行端口发送到DSP。代码的格式预格式化和后格式化分别带有“S”和“E”字符。这些允许软件解释需要执行的功能(例如,取样,写入寄存器等)。当命令发送到评估控制板时,微控制器剥离“S”和“E”字节,并将4个字节加载到数据存储器(DM)地址0x3FE1,0x3FE2,0x3FE3和0x3FE4,如图所示。
HIP 寄存器地址
微控制器还将 0x03 值写入 adö3ess 0x3FE0,以指示已收到数据。这些地址称为 HIP 寄存器。地址 0x3FE6 处还有一个 HIP 状态寄存器。检查此寄存器以查看是否有任何新数据被 DSP 或 PC 写入 HIP 寄存器。如果将命令行选项 -e+ 添加到 PC 上运行的程序名称中,则可以看到发送到 DSP 的四字节代码。例如,如果使用的程序是AD7892.EXE,则命令行是AD7892.EXE-e+。
为应用程序编写代码的第一步是编写DSP的所有初始设置例程,中断向量地址,串行端口配置和可能需要的任何标志的初始化。(这部分代码取决于特定的应用程序,本文不会显示。设置DSP后,程序应等待用户向其发送命令。这是使用如下所示的Wait_Confirm子例程和 ALU 输入寄存器 AX0 和 AY1 完成的。AR 是 ALU 输出寄存器。
wait_confirm:
AX0=DM(0x3fe6); {load HIP status register into AX0}
AY1=0x0001; {load AY1 to check HIP against register 1}
AR=AX0 AND AY1; {Has anything been written?}
IF EQ JUMP wait_confirm; {If not then repeat the loop}
RTS; {return when the commands are received}
此例程仅监视 HSR6、HIP 状态寄存器 (0x3FE6),直到寄存器的 LSB 为 1 时才返回,表示某些内容已写入 HDR1 寄存器。此图标识了四个数据字节的内容:
热等静压寄存器功能
接收到数据后,可以加载定时器寄存器。操作数据以将 2 个字节重建为一个 16 位字(通过将高字节向左移动 8 位并合并),并将其存储在数据存储器中,如下所示:
AX0=DM(0X3fe2); SI=AX0; SE=8; SR=LSHIFT SI(LO);
AX0=DM(0X3fe3); AY1=0X00ff; AR=AX0 AND AY1;
AX0=AR; AY1=SR0; AR=AX0 OR AY1;
AY0=AR;AR=AY0-1;
DM(Tcount_Reg)=AR; DM(Tperiod_Reg)=AR;
最后,需要设置并行端口(在本例中为边缘连接器)的地址,以及要放置数据的内存位置的起始地址。这是使用ADSP-2111的数据地址发生器(DAG)对完成的。DAG 由三个寄存器组成,标识为 I(内存块的基/索引地址)、M(到下一个位置的增量步骤)和 L(内存块的长度;L 块是返回涉及循环缓冲区的循环开始所必需的;在此示例中,它将设置为零)。代码如下所示。
I0=0;M0=1;L0=0; {数据的内存位置地址}
I1=0x2000;M1=0;L1=0; {并行端口地址 }
现在可以设置一个循环,每次发生中断时都会读取数据样本。由于读取样本只占用整个操作(即读取和上传数据)的一小部分时间,因此可以用数据填充内存,并且只选择要上传的一部分。
AY1=1; AR=8191; {set sample increment and number of samples req’d}
MSTAT=0x20; IMASK=0x01; {start the timer and unmask the interrupt}
luup: IDLE; {wait for the interrupt to occur}
luup1: AR=AR AY1; {decrease the count}
IF NE JUMP luup; {repeat until finished}
在此示例中,代码被简化为仅使用计时器中断。这可以通过等待计时器从预设时间开始过期从而导致中断来完成。然后可以从数据总线读取数据,并在短暂延迟后(如果需要)开始下一次转换。下面的代码显示了计时器中断向量地址出现在向量表中时的外观。还显示了中断服务例程。
timer_int: jump ISR;RTI;RTI;RTI; {interrupt vector}
ISR: AX0=DM(I1,M1); {read data}
DM(I0,M0)=AX0; {Write to memory}
RESET FL0; SET FL0; {Convst}
RTI;
使用此技术时,必须忽略要返回的第一个数据值,因为它将在转换开始之前被读入;因此它是无效的。读入所有数据后,就可以将数据上传到PC。关闭中断并重置控制数据存储器的 DAG 后,可以使用以下代码检查以确定需要上传多少个样本:
IMASK=0x00;MSTAT=0x10; |
{屏蔽所有中断并停止计时器} |
I0=1;M0=1;L0=0; |
{重置DAG以启动数据存储器} |
AR=DM(0x3fe1);MY0=256;MR=AR*MY0(UU); |
{读取所需样本数} |
AY0=MR0; |
{商店计数} |
来自12位ADC的数据应进行符号扩展,以适应16位宽的数据寄存器。这可以通过检查数据来完成,如果 MSB 为 1,或者检查具有 0xF000 的数据,将最高的 4 位设置为 1,如下所示。
MORE_TO_ECHO: AX0=DM(I0,M0); |
{读取数据值} |
AY1=0x800;AR=AX0 和 AY1;如果情商跳过; |
{检查 MSB } |
AY1=0xF000;AR=AX0 或 AY1;AX0=AR; |
{如果是 1,则将上位设置为 1} |
数据现在已正确格式化,可以通过主机接口端口传输到PC。这是通过在循环中调用 OUT_HIP 例程来完成的:
OVER: |
CALL OUT_HIP; |
{upload the data value } |
AR=AY0—1; |
{decrease the count } |
|
AY0=AR; |
{and copy it back to the register} |
|
IF GE JUMP MORE_TO_ECHO; |
{if we’re not finished then repeat} |
|
GG: |
AX0=0x00FF; |
{all the data has been |
so indicate this to the PC} |
||
DM(0X3fe3)=AX0;AX0=0; |
||
DM(0x3fe0)=AX0; |
||
JUMP cloop; |
{return to start and wait for next command} |
|
OUT_HIP |
SI=AX0; |
{input the data to the barrel shifter} |
SE=—8; |
{set the number of bits to shift by} |
|
SR=LSHIFT SI(LO); |
{and shift the data} |
|
DM(0X3FE4)=SR0; |
{ HI byte } |
|
DM(0X3FE5)=SI; |
{ LO byte } |
|
AX0=1; DM(0X3FE3)=AX0; |
{ indicate that data is available } |
|
CALL WAIT_UPLOAD; |
{and upload it to the PC} |
|
RTS; |
{return when finished } |
|
WAIT_UPLOAD: |
AX0=DM(0x3FE6); |
{check contents of HIPregister 6} |
AY1=0x0001; |
||
AR=AX0 AND AY1; |
||
IF EQ JUMP WAIT_UPLOAD; |
{repeat until ready} |
|
AX0=DM(0x3FE0); |
||
AY1=0x0003; |
||
AR=AX0 - AY1; |
||
IF NE JUMP WAIT_UPLOAD; |
||
RTS; |
一旦将所需数量的样本发送到PC,程序应返回到主循环的开始并等待进一步的说明。
最后几个例程是标准集;在修改 Eval-Control Board 的 DSP 代码以满足特定应用条件时,它们很少需要更改。上面显示的所有例程都已用于HIP文件中,这些文件控制通过Eval控制板连接到PC的各种评估(子)板。此处显示它们是为了指示如何修改现有程序以获得附加功能。
审核编辑:郭婷
-
转换器
+关注
关注
27文章
8624浏览量
146860 -
控制器
+关注
关注
112文章
16197浏览量
177394 -
adc
+关注
关注
98文章
6430浏览量
544074
发布评论请先 登录
相关推荐
评论