EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 HelloEE 于 2019-12-30 12:14 编辑
% `+ W* m& I8 j/ B" H1 D, j
5 t v% F% d0 E! \5 N本文提出一种针对同步优化的新型sinc滤波器结构。该滤波器可在需要严格控制反馈链时序的应用中提高测量性能。接着,还将讨论采用HDL代码实现sinc滤波器的方法,以及如何在FPGA实现上优化滤波器。最后,给出在一个基于FPGA的3相伺服驱动器上执行的测量结果。
. {. i% W) I2 s9 N
& d% O4 L( p$ _% _: k针对同步优化的sinc滤波器
/ k5 u. X6 W' |通过正确对齐sinc滤波器对PWM的脉冲响应,可以实现无混叠的∑-∆测量。尽管该方法很简单,但是很难(在很多情况下不可能)找到一个理想的系统配置。为了说明这一点,假设sinc滤波器和PWM模块共用同一个以fsys运行的系统时钟源。调制器时钟 fmclk则由公式1确定。
1 x6 }6 S' J2 W! E/ g2 t: B7 h9 a% ?, V1 \4 u
其中Dmclk是调制器时钟的时钟分频数。同样,PWM频率fpwm由公式2确定。
3 S! |$ ]+ I! V4 k3 k* F5 c1 B6 O3 d7 A9 x- `
其中DPWM是确定PWM频率的时钟分频数。最后,sinc滤波器的抽取率(数据速率)由公式3确定。 6 j: H. h: c6 K7 v0 c4 K+ ~9 u
t$ c( [+ W$ R# ]7 C+ J+ A
其中Ddec是抽取后时钟的时钟分频数。为了避免脉冲响应和PWM周期之间的漂移,一个PWM周期内包含的抽取周期数量必须为整数: * f" M) O2 F# b+ U, y3 V
4 j0 o' e$ @; Z8 ]2 S3 H* g其中N为整数。合并公式2、公式3和公式4可得: / W0 }1 g0 i, Q% d. Q
" X, n* z1 Z+ y3 N C显然,只有有限选择的时钟缩放比例Dx可满足公式5。此外,时钟缩放比例的选择方法往往也受到严格限制。例如,系统可能需要以一定的PWM频率(例如10kHz)运行或使用一定的调制器时钟(例如20MHz)。另一个麻烦是进行调制器时钟选择时,可选数值有限。例如,如果fsys为100 MHz,则Dmclk仅有的合理选择应为5到10之间有限范围内的整数(从20MHz低至10MHz)。
3 }) v% s. e; t考虑到所有这些限制,很难(即便有可能)找到可在脉冲响应和PWM之间实现所需对齐的时钟缩放比例。通常会发生的情况是,用户被迫选择满足公式5的时钟缩放比例,而非选择可产生所需PWM频率、调制器时钟和信噪比(SNR)的时钟缩放比例。而且,如果其中一个频率随时间发生变化,则无法找到有效的配置。这种情况在多轴系统中非常普遍,在这些系统中,单个运动控制器会对网络中的多个电机控制器进行同步。 . S) l2 ^7 F" q4 x. N
虽然对齐方案可提供出色的测量性能,但事实证明它不切实际。以下章节将介绍一种新型sinc滤波器。该滤波器可提供出色的测量性能,同时允许用户独立选择所有时钟分频数。 8 q, d" G; A3 Q4 N
6 M. h6 M$ {2 _$ q+ V* l! b刷新式sina滤波器
9 D* c* G2 [9 D. S! g* m, M$ L# W
传统的三阶sinc滤波器如图1所示。滤波器通过按比例缩放系统时钟来生成ADC的调制器时钟,而ADC则向滤波器返回一个1位数据流。滤波器功能本身包括三阶级联积分器1/(1– z–1)(时钟速率与调制器速率相同)和三阶级联微分器1– z–1时钟速率为抽取时钟)。
9 N4 T& [( N) y8 ~& z图1. 传统的三阶sinc滤波器。
- v- y. u8 \2 Jsinc滤波器和ADC通过施加于其上的同一个时钟连续工作。因此,滤波器以由抽取时钟确定的固定速率连续输出数据。来自滤波器的数据速率通常高于电机控制算法的更新速率,因此许多滤波器输出被拒绝。只有当脉冲响应以理想测量值为中心时,输出才会被捕获并用作反馈。 , C( a8 H, y$ F' X- g9 _
采用空间矢量调制,在每个PWM周期内仅取两次相电流平均值。据此,每个PWM周期仅有可能输出两个无混叠的sinc数据,因此没有必要让滤波器连续运行。实际上仅在需要反馈时启用测量,然后在所有其他时间禁用测量就足够了。换句话说,测量以开关模式运行,与传统的ADC不同。
1 p9 b, p9 |, @1 F开关模式运行的问题在于,调制器和滤波器时钟来源于相同的系统时钟。这意味着滤波器和ADC均以开关模式运行,我们不建议这样做,因为这会导致性能下降。其原因是ADC中的调制器是具有一定建立时间和阻尼的高阶系统。因此,当将时钟首次施加于ADC时,需要先建立调制器,然后才能信任其输出位流。为了解决这些问题,我们提出一种新型滤波器结构(参见图2)。 ( q$ ~. L$ D$ u+ E
图2. sinc滤波器设计为开关工作模式并对所有状态进行刷新。
; i# W4 A; @1 S作为标准的sinc滤波器,其核心由三阶级联积分器和三阶级联微分器组成。但是,此滤波器具有一些特性,可以允许新的工作模式。首先,滤波器具有新的时钟发生器功能,可将调制器时钟与积分器时钟分离。这样就可以连续为ADC提供时钟,但只在获取测量值时才启用积分器时钟。其次,此滤波器具有新的滤波器控制功能。以同步脉冲为基准,控制块处理滤波器工作所需的所有时序和触发。滤波器控制器的主要功能是刷新滤波器,包括初始化所有滤波器状态、在开始新测量之前的计时器滤波,以及在适当的情形下启用/禁用积分器时钟。
( j( D* l6 n0 s- f! f; b B ^
最后,滤波器具有一个新的缓冲和中断控制单元,该单元对所有输出数据进行排序并捕获正确的测量值。当新的测量值准备就绪时,缓冲和中断单元还会通过中断来通知电机控制应用。图3的时序图显示了此滤波器的工作方式。
, c# Z& g7 z/ i( }3 v6 P图3. sinc滤波器在开关模式下的时序图。
! \, P% B; x/ Q1 D" p9 G为了开始测量,将同步脉冲(sync pulse)施加于滤波器控制器。通常,此脉冲表示一个新的PWM周期的开始。同步脉冲启动一个计时器,该计时器被配置为恰好在所需测量点之前1.5个抽取周 期处失效。积分器时钟和抽取时钟在这一点启用,滤波过程开始。经过3个抽取周期(三阶sinc滤波器的建立时间)后,缓冲和中断控制器捕获数据输出并置位中断。请注意在图3中测量值如何以同步脉冲为中心。该序列在下一个同步脉冲处重复,但是调制器时钟在滤波器开始工作后就一直保持开启状态。 ) A; C! o. r' I2 O' m! c! ~
上述sinc滤波器解决了常规sinc滤波器的同步问题。该滤波器及其工作模式无需对PWM频率、调制器时钟或抽取率做出任何假设。即使PWM频率随时间变化,它也可以与所有系统配置同样配合良好。由于每次测量都会有效重置滤波器,因此它对时钟之间的漂移也不敏感。 9 O, P4 P# [( a. O: _
( K) M, [6 O! {" C+ ?
sina滤波器的HDL实现4 A/ D. L' ~7 `6 L' O/ N) P
+ N8 }) L' B( t$ T2 Z/ j* o
作者发现,一些公开可用的sinc滤波器HDL示例具有一些缺点,会对滤波器的性能产生负面影响或导致意外行为。本章节将讨论一些实现问题以及如何设计HDL代码以在FPGA上获得最佳性能。 最纯正的sinc3滤波器由三阶级联积分器和三阶级联微分器组成(参见图1)。首先,考虑z-domain2中的纯积分器: , J( a6 p0 Y6 J" y8 \ f
& C. I2 I8 R8 h' {; ^* @( h9 [ J其中u是输入,y是输出。积分器的差分方程为:
5 g+ U& p; h' O5 _2 B) b
$ q$ C0 F! ]4 N; c ^" o/ X这个一阶方程等于一个累加器,非常适合在FPGA等时钟逻辑中实现。一种常见的实现方法是D型触发器累加器,如图4所示。
2 }. S/ u, H$ c7 j$ h9 T5 B图4. 采用D型触发器的累加器实现。
. ^ u/ s" c* @' G, P该电路在FPGA上只需几个逻辑门即可实现。于是,当三个纯积分器级联时,z域中的转换函数由公式8确定。
9 J- t; r; \7 h+ ]$ i
1 n9 o! s' o, a8 Y8 t公式9显示了该三阶级联积分器的差分方程: # i! Z# W: W" b2 K& u: Z
7 A. b2 f5 E, m4 v请注意样本n的输入如何影响样本n的输出。 4 v8 c z2 m0 T0 g' \
如果使用图4所示的D型触发器累加器来实现该三阶积分器,则结果如图5所示。
$ f5 W; \8 I9 W图5. 采用D型触发器实现的三阶级联累加器。 ' o' Y" e( D( [2 b3 d3 ^( j
由于这是时钟电路,因此输入变化需要经过几个时钟周期才会影响到输出。这一点在查看级联累加器的差分方程(参见公式10)时会变得更加清晰。
- v, z8 Z2 I+ ?2 c! [4 ~/ J
7 p2 U9 u g$ V9 _" ?# I此差分方程与纯积分器的差分方程完全不同(参见公式9)。对于累加器,输入需要两个时钟周期才会影响输出,而对于纯积分器,输入会立即影响输出。为了说明这一点,图6分别显示了在5号样本处施加单位阶跃时公式9和公式10的阶跃响应。正如预期的那样,累加器相较于积分器延迟了两个样本。
3 }9 c% }" Y! i. p* W/ @图6. 三阶级联积分器和三阶级联累加器的阶跃响应。
$ M% M" F+ k+ {% {3 b' T大多数公开可用的sinc滤波器示例建议使用D型触发器累加器实现积分器。这样做的主要理由是其所需门数较少,但是这种简单的做法也需要付出一定的代价。与滤波器的群延迟相比,两个调制器时钟的额外延迟看似微不足道,但该延迟影响了滤波器高频衰减能力,因此,累加器实现相较于纯积分器可提供的有效位数更少。此外,上述刷新式sinc滤波器需要理想的转换函数才能正常工作。鉴于这些原因,任何sinc滤波器实现都不应该依赖累加器来实现积分器级。 ' ~7 e- x5 t; B* j' x% P( E
为了获得理想的sinc3响应,建议按照公式9直接实现差分。结果如图7所示。请注意功能框图包含两个组成部分:时钟逻辑部分(触发器)和组合部分(求和)。此实现需要更多门数,但是它可以提供所需的滤波器性能和延迟。 8 X6 w/ b H, K
图7. 三阶级联积分器的实现。
! ]+ L, I7 L2 ?$ P8 B微分器与积分器类似,许多公开可用的sinc滤波器示例以错误的方式实现微分器级,从而导致滤波器性能下降和意外延迟。本章节讨论了微分器级,并就如何通过FPGA实现获得最佳性能提出了建议。首先,考虑公式11中z域的纯微分器以及公式12中相应的差分。
- a/ G; J# X/ f2 Y f2 U$ Q- [
2 @$ `3 d+ t& g
) [7 c1 h" ~6 n* a9 J9 k7 r6 j要在FPGA上实现微分器,最常用的方法是采用D型触发器(参见图8)。 5 L0 q3 D& e5 Q! ]* @5 q' ]
图8. 采用D型触发器实现的微分器。 / l% W6 c/ T5 J. j$ H1 I) ~, J u
下述HDL代码片段说明了实现三阶D型触发器微分器的常见方法。这里使用的是Verilog伪码,但其原理也适用于其他语言。
4 a* d) `- S2 D$ ^8 P# Y图9. 以时钟逻辑方式实现的三阶微分器。 ' s. {8 J- g# O- [% H, _0 m
与任何时钟赋值一样,先计算所有右边的语句,并将其赋值给左边的语句。为所有语句提供时钟,并对所有赋值进行并行更新。这会产生一个问题,因为输出项(yx[n])依赖于延迟项(u[n-1]和yx[n-1]),后者需要率先更新。因此,上述Verilog代码片段的逻辑实现如图10所示。
0 H2 }+ u3 ]8 q$ m图10. 通过时钟赋值实现的微分器。
/ C1 a( V0 V+ ^3 e/ m$ f' d由于采用时钟赋值,微分器的延迟为6个时钟周期,而不是预期的3个时钟周期。由于微分器由抽取时钟提供时钟,因此滤波器的群延迟和建立时间实际都增加了一倍。但是,这也会影响滤波器的衰减,而且频率响应不是理想的三阶sinc。在已发布的sinc滤波器示例中经常可以看到图10所示的实现方式,但是我们强烈建议选择一种模拟理想微分器级的方法。 4 I c! }0 o5 c& \/ [5 k% z
上述Verilog代码片段可分为两部分:计算电流输出的组合部分和更新延迟状态的时钟逻辑部分。这种分离使得组合部分可被移至始终受时钟控制的功能块之外,如图11代码片段所示。 ) ]! H, h! @7 d
图11. 以时钟逻辑与组合逻辑混合方式实现的三阶微分器。 " P$ ]; U0 s& t+ l
使用组合赋值时,没有与yx计算相关的额外延迟,总延迟从6个时钟周期降低到理想的3个时钟周期。推荐的微分器实现功能框图如图12所示。 , E6 K3 X* k! B* o( ^) P* f
图12. 采用时钟逻辑和组合逻辑混合实现的三阶级联微分器。
( G" A- V6 K' X8 l- [' v/ F, R2 F将上述级联积分器与微分器实现结合在一起,可使sinc滤波器在衰减和延迟方面获得理想特性。所有基于∑-∆的测量都将受益于这种优化滤波器的实现,尤其是需要知道滤波器确切延迟的刷新式sinc。
. g! A) O7 M6 h7 b4 W: c* _
4 g; B7 Z* h5 e0 F# Z/ W测量
8 `6 w+ t% R. k0 ~' w* K
: b! {( T( s% G0 B6 b$ C本文提出的∑-∆测量系统已经结合基于Xilinx® Zynq®-7020SoCC的伺服电机控制器进行了实施和测试。该系统由60V3相永磁伺服电机(Kinco SMH40S)和3相开关电压源逆变器组成。SoC运行磁场定向电机控制算法和用来实时捕获测量数据的软件。 * R$ F$ B% D2 V& m3 T
对于相电流测量,该系统采用两个隔离式∑-∆ADC(ADuM7701)跟随两个三阶sinc滤波器。该sinc滤波器的实现采用了本文所讨论的设计建议,包括刷新式sinc工作模式。为了进行对比,将显示传统的连续工作模式滤波器和刷新式滤波器的两种测量结果。 8 J a9 k# r6 O# m* b
虽然控制系统具有闭环磁场定向控制,所有测量均通过开环控制进行。闭合电流环路对测量噪声很敏感,并且噪声会通过电流环路发生耦合。通过开环工作,可以消除电流控制器产生的任何影响,从而可以对结果进行直接比较。
5 h) a$ s- @/ ^) _* \5 g除模式配置和PWM对齐外,均使用相同的配置(包括抽取率均设置为125)进行测量。因此,测量结果的任何差异都会是影响sinc3脉冲响应能否与PWM正确对齐的因素。控制算法的执行频率为10kHz,调制器时钟为12.5MHz。 0 }4 @; m2 ]( H
采用连续工作模式sinc滤波器,未对齐脉冲响应在第一个示例中(参见图13a),脉冲响应与PWM波形不相关。图13b显示了电机停止但功率逆变器在所有相上以50%的占空比切换时两相电流的测量结果。在此工作模式下,测量显示了测量结果的噪声水平。图13b显示了电机以600rpm开环运行时的相电流。电机有四个极点对,因此电气周期为25ms。这两个图都显示出明显的噪声,它将严重影响任何闭环电流控制器的性能。噪声电平与基波相电流的幅度无关,因此在轻负载时噪声性能相对更差。在此示例中,噪声是由sinc滤波器脉冲响应未对齐引起的,因此对sinc滤波器的抽取率(衰减)几乎没有或完全没有任何增加。 6 `7 L+ L$ S$ i1 A* _- P% }
图13. sinc滤波器脉冲响应与PWM未对齐的连续工作模式。 2 z! I- O4 O9 [! v) h' b
采用连续工作模式sinc滤波器,对齐脉冲响应图14显示了当每个PWM周期中的抽取周期数量为整数,并且脉冲响应与理想测量点对齐时的测量结果。将图14中的结果直接与图13中的结果进行比较。 # W$ M. ^4 @/ ~* S! _, o% ]# \$ p
比较图13和图14可知,虽然滤波器使用的抽取率相同,但噪声水平已大大降低。这些示例说明系统配置和同步对于充分利用基于∑-∆的信号链性能的重要性。
3 X1 }5 {/ ~# E, o图14. sinc滤波器脉冲响应与PWM对齐的连续工作模式。 : v7 J/ P# l$ s
刷新式sinc滤波器尽管图14所示的连续工作模式sinc滤波器的结果令人满意,但该滤波器的挑战仍然在于如何找到可实现同步的配置。虽然有可能实现连续工作模式sinc滤波器与PWM同步,但这通常并不切实际。采用刷新式sinc滤波器可以解决该问题。 9 C( M' d+ z0 a( K9 d4 M
图15显示了刷新式sinc滤波器的测量结果。该滤波器配置为在理想测量点附近仅运行3个抽取周期。正如预期的那样,其性能类似于图14中的连续工作模式滤波器。 & ?4 j" k# n9 z6 w7 @
为方便对比,刷新式滤波器使用的配置与连续工作模式滤波器完全相同。不同之处在于,连续工作模式滤波器必须使用此配置,否则性能会降低,如图13结果所示。与之相反,刷新式滤波器可以在任何系统配置下保持最佳性能。
0 u, x# c' C$ O/ A& n+ z' M图15. sinc滤波器脉冲响应与PWM对齐的刷新式sinc滤波器。 8 _' _/ w* J- a+ j S+ N1 R
采用未对齐的连续工作模式sinc滤波器(图13a),其噪声大小约为一个16位信号中120LSBs。这相当于噪声导致近低7位信号的丢失。刷新式sinc滤波器(图15a)的噪声电平大约是一个16位信号中5LSBs,相当于噪声导致的信号丢失少于3位。
5 j; F1 W8 L* C- H$ l5 g' |( V# R- z9 H3 X* G
小结0 J! Q% n$ N; j7 R
, a5 M. z4 L, T0 ]' q基于∑-∆的相电流测量已广泛用于电机驱动中,但是要获得最佳性能,还需正确配置整个系统。本文讨论了可能会导致性能不佳的原因以及如何正确设置系统。, Y8 i( V& _9 [
配置系统以获得最佳电流反馈性能往往极具挑战性,在某些情况下甚至是不可能的。为了解决这个问题,本文提出了一种新型sinc滤波器。该滤波器以开关模式工作,并保证在任何系统配置下均具有出色的性能。
, Z+ r0 s. ~8 f# v4 }. p9 J+ U' q在FPGA上实现sinc滤波器需要进行HDL代码开发。本文讨论了降低滤波器延迟并增加衰减的几种实现技术。最后,本文展示了几种测量结果,这些结果说明了刷新式sinc滤波器同步的重要性及其性能。
: M- s( n' I- f/ e+ l) |0 Q7 ` |