3 振动台控制器架构设计与实现
如前所述,Zynq-7000 本身已经具有了独特的架构优势,得益于 Zynq 的
ARM+FPGA 架构,可以将控制器的核心功能分为软硬件两部分去开发,软硬件
协同完成对振动台的控制。对实时性和计算性能要求较高的采样、计算、控制等
部分交给硬件逻辑(PL)完成,而对实时性要求不高的通信等部分交给软件(PS)
完成(注意“实时”和“高速”的区别,通信可能需要高速,但不一定有采样和
控制那么高的实时性要求)。以此为基础,本章设计了 Zynq 振动台控制器的程序
架构。
3.1.2 PL-PS 数据传输
在得到了经信号调理的实际信号后,需要将它上传到上位机,同时为了方便 对比,参考信号也需要与实际信号同时传给上位机,这就需要完成从 PL 到 PS 的 数据传输。本文采用的方案是:先将数据存入 Block RAM,然后 PS 通过 AXI 总 线进行乒乓读取操作,最后再发送给上位机。PL-PS 数据传输架构如图 3.2 所示。 这里需要编写 Verilog 逻辑以实现对 Block RAM 的控制信号(详见关键模块的具 体实现)。 其中的乒乓操作指的是:使用两块存储空间,当 A 空间写入指定数量(比如 1000 个)的数据时,通知 PS 端,PS 触发中断,PS 开始读取 A 空间的数据,此 时 PL 已经开始向 B 空间继续写入数据。以此类推,两块空间交替读写,互不干 扰而又连续运作,可以保证波形数据的永续传输。 PL 端整体的实际设计效果如图 3.3 所示。
3.2 PL 端关键模块的具体实现 在前一小节中,PL 基本控制回路及寄存器组、PL-PS 数据传输两部分均涉 及到了 PL 端即 FPGA 部分的设计,其中的一些模块如 AXI Interconnect 可以由 VIVADO 工具生成,其余大部分模块需要自己编写 Verilog 逻辑来实现。本小节 就介绍 PL 端这些关键模块的设计,包括与数据采集相关的 SSI 驱动模块和 ADC 驱动模块,与数据处理相关的滑动平均滤波模块,与数据调度相关的 BRAM 读 写模块,与软硬件协同设计相关的参数分发同步模块,与输出相关的 DAC 驱动 模块。 本设计中 Zynq PL 端的时钟频率为 100MHz,每 1ms 完成一次控制,即每 1ms 更新一次控制算法的计算结果,并将 DAC 的输出电压更新一次。
3.2.1 SSI 驱动模块 如果来自模拟输入的反馈噪音会持续地带来一些不良影响,那么带有高精度 串行接口如 SSI(Synchronous Serial Interface,同步串行接口)的数字传感器是 一个行之有效的解决方案。SSI 接口设计的本意,就是要最大限度地减少信号噪 音。 SSI 是高精度绝对编码器中比较常见的接口方式,它是一种全双工的串行接 口。在主机发出的时钟信号的控制下,从最高有效位(MSB,Most Significant Bit) 开始传输数据,属于主机主动式读出方式。 SSI 通信的帧格式如图 3.5 所示,共有 Clock+、Clock-、Data+、Data-四根信 号,图中只展示 Clock+和 Clock-,数据传输采用同步方式,在空闲阶段时钟和数 据都维持高电平,此时不进行数据传输,在时钟的第一个下降沿开始载入数据, 然后每个时钟的上升沿编码器会从 MSB 到 LSB 依次送出数据,当传送完此次所 有的位数后,时钟和数据都再次置为高电平[27]。
为实现对 SSI 数据的读取,在 FPGA 中设计了 SSI 的驱动模块 SSI_driver。
模块框图如图 3.6 所示。所用的磁致伸缩 SSI 位移传感器是 25 位二进制(Binary)
编码输出的。由于硬件电路中已经支持了差分信号与单端信号的转换,所以这里
只需要单端的 SSI_clk 信号和 SSI_data 信号即可[28]。
SSI_driver 模块的仿真结果如图 3.7 所示。
3.2.2 AD7606 驱动模块
AD7606是ADI公司的一款8通道逐次逼近型同步采集模数转换器(ADC)。
每通道最快采样速度为 200KSPS,每通道的位数为 16 位[29]。
AD7606 具有多种驱动时序。支持串行输出和并行输出,本设计中采用的是
并行输出,即 8 个 16 位的数据通过 16 根并行线依次输出。支持转换期间读取和
转换后读取,本设计采用转换后读取的方式。支持独立的
CS 和
RD脉冲或相连
的
CS 和
RD脉冲,本设计采用
CS 和
RD相连的方式。
在设计 ADC 的驱动时,有一些关键时间务必要满足时序要求。几个重要的
时序特征与时序要求如表 3.2 所示。
为实现对 ADC 数据的读取,在 FPGA 中设计了 AD7606 的驱动模块
AD7606_driver。模块框图如下图所示。

状态转换图如图 3.10 所示。选用最高的采样率 200k,所以一个循环为 5us。
其中检测 busy 下降沿需要打拍操作。
AD7606_driver 模块的仿真结果如下图所示,经过反复修改调试,使其关键
信号符合数据手册中的时序要求。
信迈提供ZYNQ+AD7606解决方案。