基于FPGA的AD7606B控制器的设计与实现

2022-10-19 04:53张良浩孙瑞祥于安波
电子制作 2022年19期
关键词:状态机高电平寄存器

张良浩,孙瑞祥,于安波

(珠海格力电器股份有限公司,广东珠海,519070)

0 引言

在电机驱动应用领域,常见的模拟信号采样功能(ADC)通常集成在MCU中。片内多通道ADC工作模式为分时循环采样,因此无法满足某些高速多路同步的采样需求。在此类应用中,片外ADC芯片(AD7606B)可以更好地提高采样的同步性和准确性。AD7606B与DSP28335内置ADC的性能对比如表1所示[1~2]。AD7606B为同步采样、并行传输模式;DSP28335内置ADC为分时循环采样,串行传输模式。在均采用8通道采样的情况下,AD7606B的传输速率,比DSP28335内置ADC的传输速率快约10倍。

表1 AD7606B与片内ADC转换模块参数对比表

使用FPGA实现ADC芯片的控制功能,比起使用传统MCU可以进一步提升模拟数据的传输效率。使用传统MCU对ADC芯片控制会占用MCU的主频时钟,模拟数据的传输效率会受到接口读取效率和主频处理效率的限制;而FPGA本身为可编程逻辑型器件,其对信号的处理是通过对每个基本逻辑单元(CLB)的构建实现,因此其信号处理的速度与并行度要更为出色[3]。

1 硬件连接及功能说明[4~5]

为了最大限度的提升本方案的数据传输效率和准确性,AD7606B的设置采用并行接口+软件模式。FPGA与AD7606B的硬件电路连接图如图1所示。

图1 FPGA与AD7606B的硬件电路连接图

其中,OS2~OS0为硬件模式下过采样设置引脚,软件模式下全部置1;PAR/SER SEL为并行/串行接口选择输入,并行接口需置0;STBY和RANGE在软件模式下被忽略均置1;REF SELECT为内部/外部基准电压选择逻辑输入,置1选择并使能内部基准电压模式。AD7606B的其余各芯片引脚的功能及描述如表2所示。

表2 AD7606B通信接口功能表

2 控制器状态机设计

软件模式下AD7606B的控制器分为两类:一是ADC控制器,控制AD7606B的模拟数据采集及传输;二是寄存器控制器,用于FPGA对AD7606B的寄存器进行读写操作。

■2.1 ADC控制器状态机设计

并行接口模式下AD7606B的ADC读取时序图如图2所示。当AD7606B上电后,在10ms后,FPGA控制RESET信号上升。RESET保持至少3000ns高电平,即完全复位。复位完成后,经过253ns后,AD7606B进入空闲状态。此部分属于上电时序,不计入ADC控制器状态机的设计中。

图2 并行接口ADC读取时序图

在空闲状态下,FPGA控制CONVEST发出上升沿,AD7606B的8个模拟采样通道同时进行采样。CONVEST为转换开始输入信号,静默时保持高电平信号。CONVEST上升沿信号后,AD7606B给FPGA反馈BUSY高电平信号。BUSY维持高电平的时间内,AD7606B的8通道执行模拟数据转换。转换完成后,BUSY变为低电平信号,转换时间在0.65~0.85μs之间。通常情况下,应在AD7606B数据转换完成后,FPGA再对AD7606B进行数据读取,即CSn信号拉低。

在数据读取过程中,CSn保持低电平,FPGA通过依次发出8次RDn下降沿信号,AD7606B依次输出从1通道到8通道的ADC数据,RDn信号的周期需满足最小保持时间。并且AD7606B在输出1通道的转换值时,会发出高电平的FRSTDATA 信号(即1通道输出标志位),意在告知FPGA当前输出通道为1通道。完成8个通道的数据读取后,片选信号(CSn)拉高。至此完成了一个完整的AD7606B数据转换及读取流程,AD7606B再次进入空闲状态。

由上述分析,ADC控制器状态机可分为6个状态:IDLE、CONVST、BUSY、READ、READ_EDGE和RESPONSE,各状态间的转换关系如图3所示[6]。

图3 ADC模式状态机转换图

IDLE:空闲状态。所有信号及变量复位,得到控制指令,进入转换开始状态;

CONVST:转换开始状态。FPGA拉低CONVST信号,再拉高CONVST信号。得到AD7606B反馈的BUSY高电平信号,进入忙碌状态;

BUSY:忙碌状态。得到AD7606B反馈的BUSY低电平信号,进入读取状态;

READ:读取状态。FPGA拉低CSn和RDn信号,将16bit数据读入数组中,并进入读取边沿状态;

READ_EDGE:读取边沿状态。FPGA拉高RDn信号,并边沿计数加1。如果边沿计数小于8,进入读取状态;如果边沿计数为8,进入应答状态;

RESPONSE:应答状态。应答状态变量置1,并进入空闲状态。

■2.2 寄存器控制器状态机设计

AD7606B默认工作模式为ADC模式,需要通过读任意寄存器操作进入寄存器模式;当需要恢复到ADC模式时,需写入地址0x00。AD7606B的寄存器读写时序图如图4所示,包括读寄存器、写寄存器和退出寄存器模式三部分。

图4 并行接口寄存器读写时序图

寄存器读取通过两帧执行:首先将读取命令发送到AD7606B,其次是AD7606B输出寄存器内容。

在第一帧中:

CSn和WRn置0;

位DB15置1;

位DB[14:8]为读取寄存器地址;

位DB[7:0]被忽略。

在第二帧中:

CSn和RDn置0;

位DB15置0;

位DB[14:8]为被读取寄存器地址;

位DB[7:0]为读取数据。

寄存器写命令通过单帧执行:

CSn和WRn置0;

位DB15置0;

位DB[14:8]为写入寄存器地址;

位DB[7:0]为写入数据。

退出寄存器模式命令同寄存器写入命令时序格式相同,需写入地址0x00,数据被忽略。

由上述分析,寄存器控制器状态机可分为10个状态:IDLE、ADDRESS、ADDRESS_EDGE、READ、READ_EDGE、WRITE、WRITE_EDGE、EXIT、EXIT_EDGE和RESPONSE。各状态间的转换关系如图5所示。

图5 寄存器模式状态机转换图

IDLE:空闲状态。所有信号及变量复位,得到控制指令,进入寄存器读写状态;

ADDRESS:地址状态。FPGA拉低CSn和WRn信号,并对数据线写入{1'b1,address[6:0], 8'hxx},进入地址边沿状态;

ADDRESS_EDGE:地 址边沿状态。FPGA拉高WRn信号,并地址边沿计数加1,进入读取状态;

READ:读取状态。FPGA拉低RDn信号,AD7606B反馈16位并行数据。FPGA读取其中低8位所读寄存器数据,进入读取边沿状态;

READ_EDGE:读 取 边沿 状 态。FPGA拉 高RDn信号。如果地址边沿计数小于n1,进入地址状态;如果等于n1,则进入写入状态;

WRITE:写 入 状 态。FPGA拉 低WRn信号,并对数据线写入{1'b0,address[6:0],data[7:0]},进入写入边沿状态;

WRITE_EDGE:写入边沿状态。FPGA拉高WRn信号,并写入边沿计数加1。如果写入边沿计数小于n2,进入写入状态;如果边沿计数为n2,进入退出状态;

EXIT:退出状态。FPGA拉低WRn信号,并对数据线写入{1'b0,7'h00,8'hxx},进入退出边沿状态;

EXIT_EDGE:退 出 边 沿 状 态。FPGA拉高WRn信号,进入应答状态;

RESPONSE:应答状态。应答状态变量置1,并进入空闲状态。

3 测试验证

本文FPGA开发使用的Quartus开发环境,其内部集成了SignalTap II逻辑分析仪,用于分析数据变化。SignalTap II是利用FPGA内部的逻辑单元和RAM资源实时捕捉和显示信号[7]。与Modelsim仿真不同在于,SignalTap II需要与硬件结合,程序在FPGA中运行时实时显示FPGA各引脚及内部信号的测试数据。本文通过SignalTap II来测试所述状态机的工作波形,进而验证状态机设计的正确性。

■3.1 ADC模式状态机验证

FPGA在ADC模式下的测试信号波形如图6、图7所示。可以看出各控制信号线和数据信号线的工作时序与图2相一致。在数据读取段的局部波形图7中,可以更加清楚地看到各信号间的时间间隔。程序中所用时钟为50MHz,由此计算出的各信号的建立时间、保持时间等时间间隔均满足最小时限。

图6 ADC模式下测试信号波形图

图7 ADC模式下测试信号局部波形图

■3.2 寄存器模式状态机验证

寄存器模式状态机的测试波形如图8所示。测试波形由一次读取、一次写入和退出寄存器三部分组成,各控制信号和数据信号的时序均与图4一致。读取寄存器地址0x02,读取数据为0x08,为该寄存器的默认数据。写入寄存器地址0x03,写入数据为0x22,该数据设置了AD7606B的通道1、2的输入范围为±10V。退出寄存器地址0x00,数据位忽略。

图8 寄存器下测试信号波形图

4 结束语

本文通过对AD7606B的并行接口通信时序分析和状态机的设计,实现了AD7606B控制器功能。经过对通信关键信号测试,结果符合设计预期。本文中所设计的AD7606B控制器可以满足各类电机控制所需的模拟信号采集需求,并且易于广泛移植。

猜你喜欢
状态机高电平寄存器
基于Verilog 的有限状态机编程方式及研究
FPGA状态机综合可靠性探究 ①
基于有限状态机的交会对接飞行任务规划方法
TS-03C全固态PDM中波发射机开关机控制电路原理及故障分析
常用电子测速法在某数字信号处理器中的应用*
移位寄存器及算术运算应用
数字电子技术的应用
浅谈物理电路与数字电路
关于Multisim10.0的高电平调幅电路仿真研究
基于VHDL的一个简单Mealy状态机