1. FPGA 数字控制软件架构(仅显示单通道)
FPGA 控制软件由通信域和控制域两个区域组成,通信域负责 FPGA 与上位机(MCU 或
控制卡)的数字接口通讯,包括位置指令和控制指令的传输。
1.1 通信域模块
XY2-100 解码模块负责解码来自 XY2-100 总线的 X,Y 轴位置指令,合并传入 FIFO 中
交由控制环路进行处理。
SPI 收发模块负责传输控制指令,直接对状态控制模块进行读写。包括设置控制器域的同
步或异步模式、控制环路的时钟频率、PIV 环路的各项系数以及保护模块的参数等信息。
1.2 控制域模块
状态控制模块对整个系统进行系统级调控管理,其状态参数由上位机或外部控制器通过
SPI 接口写入。其包含了控制环路参数寄存器(PIV 模块的参数配置寄存器)、同步/异步
模式选择、FIFO 状态控制、控制环路频率配置、保护参数配置、ADC/DAC 参数配置等
寄存器。
PIV 模块负责电机控制环路的数学运算,通过目标参数以及实时反馈数据计算出当前输出
值对电机进行控制。其由斜率限制、比例、微分、积分、前馈模块组成,详细信息将在后
续章节讨论。
ADC 驱动模块通过读取 ADC 配置寄存器的参数对 AD7606 进行配置,比如输入量程,数
字滤波器的过采样倍率,ADC 的复位与使能,并产生相应的驱动时序读取 X, Y 电机的电
流,位置实时数值提供给 PIV 模块进行运算。
DAC 驱动模块通过读取 DAC 配置寄存器的参数对 DAC7731 进行配置,并将 PIV 模块输
出的运算结果转换为 DAC7731 的驱动时序让其产生对应的模拟控制电压。
保护模块负责读取保护寄存器的参数,比如电源过欠压阈值,电机位置限制值,温度保护
点,并与当前电源电压输入,电机实时位置以及电机温度进行比较,如果检测到超出允许
范围内的输入,则开启功率放大器的 MUTE 功能,保护电机。
1.3 其他模块
时钟发生器模块负责生成各个驱动时序和控制模块需要的时钟,每个部分的时钟可以由时
钟配置急寄存器进行独立控制。
FIFO 模块负责协调通信域和控制域的频率差异,进行跨时钟域同步。这仅在异步模式下
启开启。
2. 工作模式
2.1 同步模式
在同步工作模式下,通信域与控制环路域工作在同一个时钟下,意味着一旦 XY2-100 模
块成功解码一帧数据,这个数据将被立即送往 PIV 模块进行运算。因此这要求上位机的
XY2-100 的帧率必须和控制环路时钟保持一致且保持稳定,否则会导致电机输出的不均
匀。
2.2 异步模式
在异步工作模式下,通信域可以工作在与控制环路域异步的时钟下,且可以大于,等于,
小于控制时钟。此时控制环路时钟完全由内部时钟发生器产生,位置指令由 FIFO 进行跨
时钟域同步。这个情况下,上位机的 XY2-100 帧率可以不稳定。
3. 模块介绍
3.1 PIV 模块
PIV 模块结构如图所示,其输入输出均为 16 位,Q8.8 有符号定点数表示, 内部模块可根
据计算需求扩展至 32 位定点。输入斜率限制模块防止输入设置信号产生过大突变导致后
续差分计算饱和,其斜率绝对值可由 slope_limit 参数设置。积分器可以设置积分比率绝
对值,由 integ_slope 参数设置,并且有饱和设计,如果积分结果溢出,则置位 overflow
指示。 前馈模块可配置延时周期数 delay_value 以调节系统响应速度。其余加法器每个
输入均可配置比例系数。
系数名称/属性
slope_limit
数据类型
作用
Q8.8 无符号定点
限制目标设定值的斜率,代表输入设定每个周
期内最大允许变化的值
integ_slope
Q8.8 有符号定点
积分器的斜率,积分器每个周期的变化为
输入值* integ_slope
delay_value
16 位无符号整型
前馈模块的延迟周期数
xxx_coeff
Q8.8 有符号定点
加法器各个节点的系数,
加法器输出 = Σ各节点输入 *xxx_coeff
3.2 DAC 驱动模块
DAC7731 使用类 SPI 接口进行通讯,由 CS 使能,SCLK 时钟,SDI 串行输入,SDO 串
行输出以及装载信号 LDAC 组成。时序图如下:
每当传输完一帧 16bit 数据后,数据在 LDAC 信号的上升沿装载进输出寄存器,DAC 开
始建立输出电压。而 SDO 作为 SDI 的 16 位延迟移位输出,这允许多个 DAC7731 级
联,上一级的 SDO 连接在下一级的 SDI 上。n 个级联时,主机只需一次性传输 n*16 bit
数据, 再同步使能全部 LDAC 即可。硬件设计中允许选择级联或者独立的方式,请参考硬
件设计文件。
SPI 写模块以 SPI_CLK 输入时钟作为 SPI 时钟,建议输入 10MHz,其负责产生 MOSI 数
据和使能信号。SPI 控制模块负责给 SPI 写模块提供数据,以及根据 SPI 写模块写完成信
号给出 LDAC 同步。
3.2 ADC 驱动模块
ADC 驱动模块由 AD7606 控制模块和读取模块组成。AD7606 采用并行接口,其中
CONVSTA,B 触发 ADC 转换,为了方便所有通道同步读取,硬件上他们直接相连为
CONVST 信号。CONVST 信号触发后,BUSY 信号自动拉高,代表转换中。一旦 BUSY
置低,则进入读取状态。时序图如下。
AD7606 控制模块维护了一个状态机,在空闲,触发,等待转换,读取,复位五个主要状
态之间进行转换。读取模块负责在读取状态时分别将 8 个通道的数据分别寄存在 8 个数
据寄存器中准备读取。AD7606 的 RST, CONVST, BUSY, CS 接入控制模块,
DATA[15:0], RD, FSDATA 接入读取模块。ADC 模块总状态机转移图由下图所示。
3.3 状态控制模块
状态控制模块由 SPI Slave 读写模块和 64 个 16 位寄存器组组成,寻址宽度为 8 位。寄
存器通过上位机 SPI Master 分别写入 8 位地址和 16 位数据进行操作。寄存器列表待定
义。
3.3 保护模块
保护模块在系统运行条件超过预设值时触发,通过直接使能功率放大器的 MUTE 引脚,
同时强制 DAC 输出为 0 保护电机和功率放大器。保护模块监测的系统参数有:系统输入
电压,电机瞬时电流,电机反馈角度,电机温度,PIV 模块积分器溢出信号。每个限值均
可通过状态控制模
块写入寄存
器组。保护模块工
作示意图如
下。