本文是两篇系列文章的第2部分。第1部分介绍了在电机控制应用中,使用sinc滤波器对sum-∆编码数据进行解调。虽然文中说明了同步sinc滤波器的脉冲响应对脉冲宽度调制(PWM)的重要性,并提出了同步策略,但是,同步方案会导致难以正确配置系统。
作为本系列的第2部分,本文提出一种针对同步优化的新型sinc滤波器结构。该滤波器可在需要严格控制反馈链时序的应用中提高测量性能。接着,第2部分还将讨论采用HDL代码实现sinc滤波器的方法,以及如何在FPGA实现上优化滤波器。最后,给出在一个基于FPGA的3相伺服驱动器上执行的测量结果。
针对同步优化的sinc滤波器
如第1部分所述,通过正确对齐sinc滤波器对PWM的脉冲响应,可以实现无混叠的sum-∆测量。尽管该方法很简单,但是很难(在很多情况下不可能)找到一个理想的系统配置。为了说明这一点,假设sinc滤波器和PWM模块共用同一个以fsys运行的系统时钟源。调制器时钟fmclk则由公式1确定。
其中Dmclk是调制器时钟的时钟分频数。同样,PWM频率fpwm由公式2确定。
其中DPWM是确定PWM频率的时钟分频数。最后,sinc滤波器的抽取率(数据速率)由公式3确定。
其中Ddec是抽取后时钟的时钟分频数。为了避免脉冲响应和PWM周期之间的漂移,一个PWM周期内包含的抽取周期数量必须为整数:
其中N为整数。合并公式2、公式3和公式4可得:
显然,只有有限选择的时钟缩放比例Dx可满足公式5。此外,时钟缩放比例的选择方法往往也受到严格限制。例如,系统可能需要以一定的PWM频率(例如10kHz)运行或使用一定的调制器时钟(例如20MHz)。另一个麻烦是进行调制器时钟选择时,可选数值有限。例如,如果fsys为100MHz,则Dmclk仅有的合理选择应为5到10之间有限范围内的整数(从20MHz低至10MHz)。
考虑到所有这些限制,很难(即便有可能)找到可在脉冲响应和PWM之间实现所需对齐的时钟缩放比例。通常会发生的情况是,用户被迫选择满足公式5的时钟缩放比例,而非选择可产生所需PWM频率、调制器时钟和信噪比(SNR)的时钟缩放比例。而且,如果其中一个频率随时间发生变化,则无法找到有效的配置。这种情况在多轴系统中非常普遍,在这些系统中,单个运动控制器会对网络中的多个电机控制器进行同步。
虽然对齐方案可提供出色的测量性能,但事实证明它不切实际。以下章节将介绍一种新型sinc滤波器。该滤波器可提供出色的测量性能,同时允许用户独立选择所有时钟分频数。
刷新式sinc滤波器
传统的三阶sinc滤波器如图1所示。滤波器通过按比例缩放系统时钟来生成ADC的调制器时钟,而ADC则向滤波器返回一个1位数据流。滤波器功能本身包括三阶级联积分器1/(1z1)(时钟速率与调制器速率相同)和三阶级联微分器1z1(时钟速率为抽取时钟)。
图1.传统的三阶sinc滤波器。
sinc滤波器和ADC通过施加于其上的同一个时钟连续工作。因此,滤波器以由抽取时钟确定的固定速率连续输出数据。来自滤波器的数据速率通常高于电机控制算法的更新速率,因此许多滤波器输出被拒绝。只有当脉冲响应以理想测量值为中心时,输出才会被捕获并用作反馈。
采用空间矢量调制,在每个PWM周期内仅取两次相电流平均值。据此,每个PWM周期仅有可能输出两个无混叠的sinc数据,因此没有必要让滤波器连续运行。实际上仅在需要反馈时启用测量,然后在所有其他时间禁用测量就足够了。换句话说,测量以开关模式运行,与传统的ADC不同。
开关模式运行的问题在于,调制器和滤波器时钟来源于相同的系统时钟。这意味着滤波器和ADC均以开关模式运行,我们不建议这样做,因为这会导致性能下降。其原因是ADC中的调制器是具有一定建立时间和阻尼的高阶系统。因此,当将时钟首次施加于ADC时,需要先建立调制器,然后才能信任其输出位流。为了解决这些问题,我们提出一种新型滤波器结构(参见图2)。
图2.sinc滤波器设计为开关工作模式并对所有状态进行刷新。
作为标准的sinc滤波器,其核心由三阶级联积分器和三阶级联微分器组成。但是,此滤波器具有一些特性,可以允许新的工作模式。首先,滤波器具有新的时钟发生器功能,可将调制器时钟与积分器时钟分离。这样就可以连续为ADC提供时钟,但只在获取测量值时才启用积分器时钟。其次,此滤波器具有新的滤波器控制功能。以同步脉冲为基准,控制块处理滤波器工作所需的所有时序和触发。滤波器控制器的主要功能是刷新滤波器,包括初始化所有滤波器状态、在开始新测量之前的计时器滤波,以及在适当的情形下启用/禁用积分器时钟。最后,滤波器具有一个新的缓冲和中断控制单元,该单元对所有输出数据进行排序并捕获正确的测量值。当新的测量值准备就绪时,缓冲和中断单元还会通过中断来通知电机控制应用。图3的时序图显示了此滤波器的工作方式。
图3.sinc滤波器在开关模式下的时序图。
为了开始测量,将同步脉冲(syncpulse)施加于滤波器控制器。通常,此脉冲表示一个新的PWM周期的开始。同步脉冲启动一个计时器,该计时器被配置为恰好在所需测量点之前1.5个抽取周期处失效。积分器时钟和抽取时钟在这一点启用,滤波过程开始。经过3个抽取周期(三阶sinc滤波器的建立时间)后,缓冲和中断控制器捕获数据输出并置位中断。请注意在图3中测量值如何以同步脉冲为中心。该序列在下一个同步脉冲处重复,但是调制器时钟在滤波器开始工作后就一直保持开启状态。
上述sinc滤波器解决了常规sinc滤波器的同步问题。该滤波器及其工作模式无需对PWM频率、调制器时钟或抽取率做出任何假设。即使PWM频率随时间变化,它也可以与所有系统配置同样配合良好。由于每次测量都会有效重置滤波器,因此它对时钟之间的漂移也不敏感。
sinc滤波器的HDL实现
作者发现,一些公开可用的sinc滤波器HDL示例具有一些缺点,会对滤波器的性能产生负面影响或导致意外行为。本章节将讨论一些实现问题以及如何设计HDL代码以在FPGA上获得最佳性能。
积分器
最纯正的sinc3滤波器由三阶级联积分器和三阶级联微分器组成(参见图1)。首先,考虑z-domain2中的纯积分器:
其中u是输入,y是输出。积分器的差分方程为:
这个一阶方程等于一个累加器,非常适合在FPGA等时钟逻辑中实现。一种常见的实现方法是D型触发器累加器,如图4所示。
图4.采用D型触发器的累加器实现。
该电路在FPGA上只需几个逻辑门即可实现。于是,当三个纯积分器级联时,z域中的转换函数由公式8确定。
公式9显示了该三阶级联积分器的差分方程:
请注意样本n的输入如何影响样本n的输出。
如果使用图4所示的D型触发器累加器来实现该三阶积分器,则结果如图5所示。
图5.采用D型触发器实现的三阶级联累加器。
由于这是时钟电路,因此输入变化需要经过几个时钟周期才会影响到输出。这一点在查看级联累加器的差分方程(参见公式10)时会变得更加清晰。
此差分方程与纯积分器的差分方程完全不同(参见公式9)。对于累加器,输入需要两个时钟周期才会影响输出,而对于纯积分器,输入会立即影响输出。为了说明这一点,图6分别显示了在5号样本处施加单位阶跃时公式9和公式10的阶跃响应。正如预期的那样,累加器相较于积分器延迟了两个样本。
图6.三阶级联积分器和三阶级联累加器的阶跃响应。
大多数公开可用的sinc滤波器示例建议使用D型触发器累加器实现积分器。这样做的主要理由是其所需门数较少,但是这种简单的做法也需要付出一定的代价。与滤波器的群延迟相比,两个调制器时钟的额外延迟看似微不足道,但该延迟影响了滤波器高频衰减能力,因此,累加器实现相较于纯积分器可提供的有效位数更少。此外,上述刷新式sinc滤波器需要理想的转换函数才能正常工作。鉴于这些原因,任何sinc滤波器实现都不应该依赖累加器来实现积分器级。
为了获得理想的sinc3响应,建议按照公式9直接实现差分。结果如图7所示。请注意功能框图包含两个组成部分:时钟逻辑部分(触发器)和组合部分(求和)。此实现需要更多门数,但是它可以提供所需的滤波器性能和延迟。
图7.三阶级联积分器的实现。
微分器
与积分器类似,许多公开可用的sinc滤波器示例以错误的方式实现微分器级,从而导致滤波器性能下降和意外延迟。本章节讨论了微分器级,并就如何通过FPGA实现获得最佳性能提出了建议。首先,考虑公式11中z域的纯微分器以及公式12中相应的差分。2
要在FPGA上实现微分器,最常用的方法是采用D型触发器(参见图8)。
图8.采用D型触发器实现的微分器。
下述HDL代码片段说明了实现三阶D型触发器微分器的常见方法。这里使用的是Verilog伪码,但其原理也适用于其他语言。
图9.以时钟逻辑方式实现的三阶微分器。
与任何时钟赋值一样,先计算所有右边的语句,并将其赋值给左边的语句。3为所有语句提供时钟,并对所有赋值进行并行更新。这会产生一个问题,因为输出项(yx[n])依赖于延迟项(u[n-1]和yx[n-1]),后者需要率先更新。因此,上述Verilog代码片段的逻辑实现如图10所示。
图10.通过时钟赋值实现的微分器。
由于采用时钟赋值,微分器的延迟为6个时钟周期,而不是预期的3个时钟周期。由于微分器由抽取时钟提供时钟,因此滤波器的群延迟和建立时间实际都增加了一倍。但是,这也会影响滤波器的衰减,而且频率响应不是理想的三阶sinc。在已发布的sinc滤波器示例中经常可以看到图10所示的实现方式,但是我们强烈建议选择一种模拟理想微分器级的方法。
上述Verilog代码片段可分为两部分:计算电流输出的组合部分和更新延迟状态的时钟逻辑部分。这种分离使得组合部分可被移至始终受时钟控制的功能块之外,如图11代码片段所示。
图11.以时钟逻辑与组合逻辑混合方式实现的三阶微分器。
使用组合赋值时,没有与yx计算相关的额外延迟,总延迟从6个时钟周期降低到理想的3个时钟周期。推荐的微分器实现功能框图如图12所示。
图12.采用时钟逻辑和组合逻辑混合实现的三阶级联微分器。
将上述级联积分器与微分器实现结合在一起,可使sinc滤波器在衰减和延迟方面获得理想特性。所有基于sum-∆的测量都将受益于这种优化滤波器的实现,尤其是需要知道滤波器确切延迟的刷新式sinc。
测量
T本文提出的sum-∆测量系统已经结合基于XilinxZynq-7020SoCC的伺服电机控制器进行了实施和测试。4该系统由60V3相永磁伺服电机(KincoSMH40S5)和3相开关电压源逆变器组成。SoC运行磁场定向电机控制算法和用来实时捕获测量数据的软件。
对于相电流测量,该系统采用两个隔离式sum-∆ADC(ADuM7701)跟随两个三阶sinc滤波器。该sinc滤波器的实现采用了本文所讨论的设计建议,包括刷新式sinc工作模式。为了进行对比,将显示传统的连续工作模式滤波器和刷新式滤波器的两种测量结果。
虽然控制系统具有闭环磁场定向控制,所有测量均通过开环控制进行。闭合电流环路对测量噪声很敏感,并且噪声会通过电流环路发生耦合。通过开环工作,可以消除电流控制器产生的任何影响,从而可以对结果进行直接比较。
除模式配置和PWM对齐外,均使用相同的配置(包括抽取率均设置为125)进行测量。因此,测量结果的任何差异都会是影响sinc3脉冲响应能否与PWM正确对齐的因素。控制算法的执行频率为10kHz,调制器时钟为12.5MHz。
采用连续工作模式sinc滤波器,未对齐脉冲响应
在第一个示例中(参见图13a),脉冲响应与PWM波形不相关。图13b显示了电机停止但功率逆变器在所有相上以50%的占空比切换时两相电流的测量结果。在此工作模式下,测量显示了测量结果的噪声水平。图13b显示了电机以600rpm开环运行时的相电流。电机有四个极点对,因此电气周期为25ms。这两个图都显示出明显的噪声,它将严重影响任何闭环电流控制器的性能。噪声电平与基波相电流的幅度无关,因此在轻负载时噪声性能相对更差。在此示例中,噪声是由sinc滤波器脉冲响应未对齐引起的,因此对sinc滤波器的抽取率(衰减)几乎没有或完全没有任何增加。
图13.sinc滤波器脉冲响应与PWM未对齐的连续工作模式。
采用连续工作模式sinc滤波器,对齐脉冲响应
图14显示了当每个PWM周期中的抽取周期数量为整数,并且脉冲响应与理想测量点对齐时的测量结果。将图14中的结果直接与图13中的结果进行比较。
比较图13和图14可知,虽然滤波器使用的抽取率相同,但噪声水平已大大降低。这些示例说明系统配置和同步对于充分利用基于sum-∆的信号链性能的重要性。
图14.sinc滤波器脉冲响应与PWM对齐的连续工作模式。
刷新式sinc滤波器
尽管图14所示的连续工作模式sinc滤波器的结果令人满意,但该滤波器的挑战仍然在于如何找到可实现同步的配置。虽然有可能实现连续工作模式sinc滤波器与PWM同步,但这通常并不切实际。采用刷新式sinc滤波器可以解决该问题。
图15显示了刷新式sinc滤波器的测量结果。该滤波器配置为在理想测量点附近仅运行3个抽取周期。正如预期的那样,其性能类似于图14中的连续工作模式滤波器。
为方便对比,刷新式滤波器使用的配置与连续工作模式滤波器完全相同。不同之处在于,连续工作模式滤波器必须使用此配置,否则性能会降低,如图13结果所示。与之相反,刷新式滤波器可以在任何系统配置下保持最佳性能。
图15.sinc滤波器脉冲响应与PWM对齐的刷新式sinc滤波器。
采用未对齐的连续工作模式sinc滤波器(图13a),其噪声大小约为一个16位信号中120LSBs。这相当于噪声导致近低7位信号的丢失。刷新式sinc滤波器(图15a)的噪声电平大约是一个16位信号中5LSBs,相当于噪声导致的信号丢失少于3位。
小结
基于sum-∆的相电流测量已广泛用于电机驱动中,但是要获得最佳性能,还需正确配置整个系统。本文讨论了可能会导致性能不佳的原因以及如何正确设置系统。
配置系统以获得最佳电流反馈性能往往极具挑战性,在某些情况下甚至是不可能的。为了解决这个问题,本文提出了一种新型sinc滤波器。该滤波器以开关模式工作,并保证在任何系统配置下均具有出色的性能。
在FPGA上实现sinc滤波器需要进行HDL代码开发。本文讨论了降低滤波器延迟并增加衰减的几种实现技术。
最后,本文展示了几种测量结果,这些结果说明了刷新式sinc滤波器同步的重要性及其性能。