时间:2024-05-04
张良浩,孙瑞祥,于安波
(珠海格力电器股份有限公司,广东珠海,519070)
在电机驱动应用领域,常见的模拟信号采样功能(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]。
为了最大限度的提升本方案的数据传输效率和准确性,AD7606B的设置采用并行接口+软件模式。FPGA与AD7606B的硬件电路连接图如图1所示。
图1 FPGA与AD7606B的硬件电路连接图
其中,OS2~OS0为硬件模式下过采样设置引脚,软件模式下全部置1;PAR/SER SEL为并行/串行接口选择输入,并行接口需置0;STBY和RANGE在软件模式下被忽略均置1;REF SELECT为内部/外部基准电压选择逻辑输入,置1选择并使能内部基准电压模式。AD7606B的其余各芯片引脚的功能及描述如表2所示。
表2 AD7606B通信接口功能表
软件模式下AD7606B的控制器分为两类:一是ADC控制器,控制AD7606B的模拟数据采集及传输;二是寄存器控制器,用于FPGA对AD7606B的寄存器进行读写操作。
并行接口模式下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,并进入空闲状态。
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,并进入空闲状态。
本文FPGA开发使用的Quartus开发环境,其内部集成了SignalTap II逻辑分析仪,用于分析数据变化。SignalTap II是利用FPGA内部的逻辑单元和RAM资源实时捕捉和显示信号[7]。与Modelsim仿真不同在于,SignalTap II需要与硬件结合,程序在FPGA中运行时实时显示FPGA各引脚及内部信号的测试数据。本文通过SignalTap II来测试所述状态机的工作波形,进而验证状态机设计的正确性。
FPGA在ADC模式下的测试信号波形如图6、图7所示。可以看出各控制信号线和数据信号线的工作时序与图2相一致。在数据读取段的局部波形图7中,可以更加清楚地看到各信号间的时间间隔。程序中所用时钟为50MHz,由此计算出的各信号的建立时间、保持时间等时间间隔均满足最小时限。
图6 ADC模式下测试信号波形图
图7 ADC模式下测试信号局部波形图
寄存器模式状态机的测试波形如图8所示。测试波形由一次读取、一次写入和退出寄存器三部分组成,各控制信号和数据信号的时序均与图4一致。读取寄存器地址0x02,读取数据为0x08,为该寄存器的默认数据。写入寄存器地址0x03,写入数据为0x22,该数据设置了AD7606B的通道1、2的输入范围为±10V。退出寄存器地址0x00,数据位忽略。
图8 寄存器下测试信号波形图
本文通过对AD7606B的并行接口通信时序分析和状态机的设计,实现了AD7606B控制器功能。经过对通信关键信号测试,结果符合设计预期。本文中所设计的AD7606B控制器可以满足各类电机控制所需的模拟信号采集需求,并且易于广泛移植。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!