基于 Zynq+AD+DA 的振动台控制器架构设计与算法实现-总体架构设计(二)

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 模块的仿真结果如下图所示,经过反复修改调试,使其关键
信号符合数据手册中的时序要求。
3.2.4 DAC81416 驱动模块
DAC81416 Texas Instruments TI ,德州仪器)的一款 16 通道 16 位数模
转换器( DAC ),可以通过 SPI 串行接口(最高支持 50MHz )对其内部一系列寄
存器进行配置 [30] 。支持读操作和写操作,本设计中只用到了 SPI 串行写操作,写
操作的时序图如图 3.14 所示。
DAC81416 上电之后、正式开始工作之前,需要进行初始化配置,本设计
中配置的寄存器如表 3.3 所示.
为实现对 DAC 的配置,使其能正确地初始化,并在正式开始工作后能够输
出正确的电压,在 FPGA 中设计了 DAC81416 的驱动模块 DAC81416_driver 。模
块框图如图 3.15 所示。其由两个子模块连接而成,子模块如图 3.16

 

DAC81416_cmd_gen 子模块的工作流程如图 3.17 所示。分为两个阶段:初
始化阶段和正常工作阶段。当接收到来自 PS 端的 start_init_dac 信号时,进入初
始化阶段,对表 3.3 所示的几个寄存器进行配置,并用 init_done_flag 信号指示初
始化的完成与否,当初始化完成后并接收到来自 PS 端的 start 信号时,才会进入
正常工作阶段。正常工作阶段是以主控状态机(控制周期为 1ms )的 10 个状态
(每个状态 0.1ms )为基础的,只在 A8 A9 状态对 DAC81416 进行配置。

 

DAC81416_spi 子模块的作用是将并行的 dac_cmd 转化为 SPI 串行信号。值
得注意的是, DAC 是在 SCLK 的下降沿采集 SDI 数据的,所以 FPGA 在发送 SDI
时最好对齐 SCLK 的上升沿,这样保证 DAC 可以采到稳定的 SDI 数据。
DAC81416_driver 模块的仿真结果如下图所示。

 

 

 信迈提供ZYNQ+AD7606解决方案。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值