0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是循环分析及如何解决循环分析难题

PCB线路板打样 来源:LONG 2019-08-08 10:13 次阅读

模拟和混合信号不连续系统的环路分析,例如PLL,delta-sigma转换器,开关电容滤波器,PWM放大器和开关 - 模式电源,提出了一个独特的问题。传统方法依赖于模拟每个环路分量的低频行为的线性模型网络的交流分析。但线性模型并未反映原始组件的底层电路。你怎么知道模型是正确的并且结果是有意义的?

您经常使用负反馈来控制流程的输出。实例包括炼油厂的温度和流量控制以及简单的运算放大器。您可以使用负反馈电路来线性化某些非线性增益器件,例如音频放大器;允许小信号控制大过程;提供一种倍频方法,例如在PLL中;以及许多其他应用程序。图1a显示了经典的控制回路。

在理想的世界中,您永远不必担心循环分析。不幸的是,你无法单独获得收益;所有组件都会导致延迟,这会导致理想的控制环 - 纯负反馈 - 变得明显低于理想纯正反馈。补偿此问题的最常用技术是在前向路径中添加低通滤波器,以便在寄生延迟将环路相位驱动至360°之前降低高频信号分量的环路增益。

不幸的是,低通滤波器本身增加了90°的相移。因此,即使不存在其他寄生延迟,总环路相移为270°,在环路变得不稳定之前仅留下90°。并且,实际上,控制回路仅需要30到45°的寄生偏移才能开始表现出不可接受的行为。相位和增益裕度分析允许对此移位进行适当的分析和补偿。

相位和增益裕度分析是在宽工作范围内预测控制环行为的常用且可靠的方法。通过检查控制回路带宽内的增益和相位,您可以准确预测设计的闭环性能。同样,通过检查极限和环路带宽之外的增益和相位,您可以准确地预测环路的稳定性。

您可以将这些技术扩展到增益和相位裕度分析系列检查非线性系统的行为。此外,此方法产生的结果与您在原型设计期间从测试仪器(如网络和频率响应分析仪)获得的结果类似。由于这些原因和其他原因,相位和增益裕度分析是控制回路设计的一个很好的工具。

测量增益和相位裕度

执行循环分析的传统方法是在某个方便的位置打破循环,用1级交流电源驱动循环,并执行标准交流分析(图1b)。

然而,这种方法仅适用于低增益或完全理想的系统,其中环路可以可靠地偏置到其线性区域。如果您的任何型号包括直流偏移(例如输入偏移电压)和饱和极限(例如有限输出电压),则几乎不可能使电路偏置,使得所有模型都保持在其线性范围内。

您可以应用多种技术来解决此问题。一种技术是用大电感闭合环路,并通过高值电容将交流电源耦合到环路。在直流时,电感器闭合回路,电容器从电路中移除交流电源。然后电感基本上打开环路,电容器连接在交流电源中。

另一种技术是用交流电阻断开环路,交流电阻是Mentor的Eldo模拟仿真器的标准组件。您可以将此器件设置为具有极低的直流电阻和极高的交流电阻。如果您使用HDL-A或VHDL-AMS进行编码,也可以创建类似的设备。

然而,由于模拟环境为您提供了自由,打开循环的最通用方法是放置刺激源与循环串联在一个方便的点,以打破循环(图1c)。然后,您可以设置直流幅度为零且任何方便值的交流幅度的刺激。通过这种方式,您可以使直流环路短路,以便它可以找到一个稳定的工作点,并且环路在零以上打开并提供环路扰动。

然后,您可以测量环路周围任何位置的增益和相位通过将测量点的复杂交流结果除以参考点并计算结果的大小和相位(或测量两个点,并减去它们的分贝幅度和相位)。为了测量整个环路,将信号直接在激励的上游通过信号直接在其下游进行分频。

该技术对于断开缺少驱动高阻抗的低阻抗源的控制环路也很有用。加载。这种技术的例子包括一个晶体管放大器,其中一个级的基极加载前一级的集电极。

然而,所有这些技术都需要为所有环路元件开发可靠的交流模型。幸运的是,这项任务并不困难。

建模不连续设备

要开发线性模型,请考虑行为没有高频载波的电路。例如,PWM形成恒定电压和频率输出,其占空比与输入电压成比例。去除输出信号的高频分量会产生一个信号,其电压与输入电压成正比。因此,PWM的简单线性模型是增益模块。

如果PWM是采样器件,则向模型添加纯延迟(e -j * * delay/2p )等于一个采样周期。如果PWM不是采样器件并且具有三角形生成的双边输出,则添加足够的延迟来表示电路数字部分的传播延迟。

压控振荡器( VCO)产生不断增加的输出相位,其斜率与输入电压成正比。因此,您将一个简单的VCO建模为具有增益的积分器。同样,您可以添加一个周期的延迟或仅增加纯传播延迟,具体取决于VCO的设计。

分频器将不断上升的相位作为输入,并在此处产生不断上升的相位。输出。输出信号到输入信号斜率的斜率等于器件的分频比。因此,分频器的简单线性模型只是一个恒定的衰减器。

相位检测器比较两个不断上升的输入相位信号的值并输出相位差。对此的简单线性模型是减法器。您可以在执行减法之前通过获取每个输入的模数2p来添加循环滑动。例如,该技术可用于线性瞬态分析。请注意,此相位检测器模型的精确增益取决于器件的输出电压以及器件是采用2,4或6p设计。

您可以通过乘以信号轻松建模延迟值为e - j * * delay 。在用于VCO的简单HDL-A(模拟硬件描述语言)模型中,感兴趣的主要线路表明输出电压等于输入电压的积分乘以常数(清单1)。您可以使用指定设备有效范围端点的输入参数来计算常量。

要为此HDL-A模型添加延迟,您可以在此行中添加以下因子:

Dig_OUT.v%= twopi * slope * INTEG(a_in)* exp(0.0,1.0)* complex(omega,0.0)* complex(delay,0.0)),

其中“omega”是一个关键字,等于当前的交流分析步骤,“延迟”是一个常数 - 通常是用户输入的VCO中最慢的预期频率的周期。

确保您选择的模型是正确的,你可以检查他们的步骤反应,并希望最好的。但是,为了确保您正确计算了VCO的斜率并模拟了设计的其他参数,您应该更仔细地分析应用不连续开环分析的设计。

这种技术适用于大约10个谐波相关正弦波源作为环路扰动到一个否则达到稳定状态的环路。您可以将谐波置于环路的预期交叉频率内和周围,这在环路增益等于1时发生。您可以将电压设置得足够低,以使所有模型都保持在正常工作范围内。要执行分析,请在循环周围的感兴趣点执行离散傅立叶变换(DFT)。您可以指定DFT,使得您计算的每个分量都完全取决于扰动信号的每个谐波。

您可以使用所有非线性和不连续模型运行模拟,包括模拟HDL,Verilog和VHDL。在PLL电路中,您使用实际输出数字信号的VCO模型。同样,分频器接收脉冲流并输出较低频率的脉冲流。与PLL一样,在电荷泵进入之前,信号不会重新进入模拟域。

在环路达到稳定后,必须至少对一个最低扰动谐波周期运行模拟。州。然后,您可以在仍然处于复杂状态时对两个感兴趣的信号划分DFT的结果,或者可以在从原始复数中计算它们之后减去分贝的幅度和相位。

结果相位和增益表示两个选定点之间的相位和增益差。如果选择扰动源两侧的点,则结果是控制环周围的总增益和相位。然后,您可以使用相位和增益图来执行传统的相位和增益裕度分析,以确定环路稳定性。

自顶向下PLL设计

此示例演示了典型设计过程的每个阶段:构建线性模型;执行开环和闭环交流分析,闭环线性瞬态分析,闭环非连续瞬态分析,闭环IC级瞬态分析和不连续开环分析;

PLL为2p型,环路低通滤波器为滞后引线型,极点为65 Hz,零点为4 kHz(图2)。 VCO的极限在4.5V时为16MHz,在0.5V时为6MHz;其中心频率为11 MHz。分频器是400的因子。您可以使用模拟HDL或CommLib部件对所有器件进行建模,并使用Accusim进行仿真

在开环交流分析中,您将替换输入(激励块)在图中)与地面短。您可以使用线性模型对所有组件进行建模,并使用标准模拟库零极点功能对过滤器进行建模。由于这些都是没有直流偏移的理想元件,因此您可以使用传统技术打破环路并使用简单的单侧交流电源驱动它。

结果显示环路周围的总相移为低频时为270°,相位检测器为180°,VCO为90°(图3)。然后,超前滞后滤波器中的极点使相位继续向360°移动90°。然后,由于超前滞后滤波器中的零点,相位自身反转90°。增益曲线显示,由于VCO中的积分器和滤波器极点与零点之间区域的40-dB-per-decade斜率,低频时的每十倍频程下降20 dB。

在增益超过0 dB的频率处测量相位,确定相位裕度为24°。 0-dB点是环路周围的总增益等于1.这一点值得关注,因为在这一点之下,反馈不会导致不稳定。如果总环路相移在总环路增益为1的点处为360°,则电路将是稳定的振荡器。这个循环频率适用于时钟发生器,但不适用于控制高炉的循环!

所以,如果你在考虑,“很好,所以我可以有负相位余量,只要当环路增益为0 dB时,相位不是360°,“等等!这些数字并不适用于现实世界。请记住,当环路中的任何组件通过削波或饱和开始超出其工作范围时,环路增益会下降。请放心,环路将尽最大努力达到所需的饱和度,以便在相位超过360°时将增益降低到0 dB。

闭环交流分析使用与开路相同的模型-loop版本。唯一的区别是,在闭环分析中,交流电源为输入供电,低值电阻关闭环路。正如您所预测的那样,考虑到24°的相位裕度,闭环交流分析显示闭环增益图中的峰值(图4)。这种峰值导致瞬态响应在该频率处显示振铃。

闭环瞬态分析再次使用与开环版本相同的模型。每个HDL-A模型都有一个程序部分,用于交流和瞬态分析,就像清单1中的VCO模型一样。现在,您可以通过2.5到3.5V分段线性(PWL)步进输入来激励输入,关闭循环。因此,环路输出以环路交叉频率振铃(图5)。

使用线性模型,此模拟运行时间不到2秒,为执行“假设”测试提供平台,蒙特卡罗分析和设计居中,因为您可以在合理的时间内评估许多配置和元件值的影响。

不连续的开环分析

在不连续的开环分析中,控制回路输入(“控制”值)是一个固定频率,等于VCO的中心频率(图6)。在这种情况下,重复的VCO产生该信号。您可以使用非线性模型,不连续模型或两者模拟所有组件。 VCO,分频器和相位检测器都是模拟HDL内置的数字模型,用于混合模式仿真。

一系列250和500 Hz以及1,2,4和8 kHz正弦波形扰乱了滤波器和VCO之间的断开环路。这些源的直流值为0V,因此对于直流分析,环路基本上是闭合的。这些源是纯谐波,从250 Hz开始,以8 kHz结束。源的幅度足够小,以至于它不会在其工作范围的极限附近驱动任何环路分量。不连续 - 开环模拟的原始结果表明,环路有1毫秒的稳定时间,然后被模拟4毫秒(图7)。 250 Hz项指定4毫秒运行时间,8-kHz项指定必须计算的傅里叶项的数量。

您可以在循环上使用现成的FFT算法输入和输出信号并减去分贝幅度和相位以获得循环结果。但是这些算法计算了太多的术语,这些术语是线性间隔而不是指数间隔。这种过剩不仅需要更多的时间来计算,而且还使得得到的图表几乎不可读。这些算法也难以处理模拟仿真器通常产生的不均匀间隔的输入数据点。

因此,Mentor Graphics为此应用开发了一个自定义Ample代码DFT算法,其概要如下:

F(jw)= integ(exp(-jvt)* f(t))dt

使用Euler身份:

F(jw)= integ(cos(vt) * f(t))dt-j * iteg

(sin(vt)* f(t))dt

设定A =积分(cos(vt)* f(t) ))dt

和B = -integ(sin(vt)* f(t))dt

然后| F(jw)| = sqrt(A ** 2 + B ** 2)

和阶段= arctan(B/A)

基本DFT算法是输入信号与两个正交正弦波的比较。您可以通过积分正弦波和输入信号的乘积来比较这些波。点击此处下载整个代码清单。它包括一个外环,每个DFT分量执行一次,其精确频率对应于环路扰动中的正弦波形。内环对输入波形进行采样,将它们乘以参考正弦曲线,并对结果进行积分。然后组件变成复数,从中得出相位和幅度。

结果证实线性模型是正确的;它们在1.6 kHz时获得了相位裕度为24°的相同结果。当您在同一图表上绘制不连续开环分析和线性交流分析时,两个图之间的一致性在感兴趣的频率范围内约为1 dB。

您可以考虑使用线性瞬态分析,使用行为模型进行非线性瞬态分析,使用晶体管级模型进行非线性瞬态分析。在所有这三种情况下,您都可以通过PWL步骤响应来激励输入,从而关闭循环。唯一的区别是您为每个块使用的模型。

第一种情况使用所有HDL-A和CommLib线性模型。第二种情况是使用CommLib和HDL-A非线性不连续模型的完全混合模式模拟。第三种情况是混合模式仿真,用实际的晶体管实现取代了一些行为部分。在这种情况下,晶体管级实现取代了电荷泵模型,您可以使用行为模型对电路的其余部分进行建模。这种方法使您可以专注于设计的一个区域,而无需在细节层面模拟整个设计。

三个瞬态模拟的结果是合理的一致(图8)。与往常一样,当您提高模拟中的细节水平时,您必须权衡模拟运行时间:行为模拟需要2秒才能运行,非线性行为模拟需要198秒,非线性IC级模拟需要628秒。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • PCB打样
    +关注

    关注

    17

    文章

    2968

    浏览量

    21637
  • 华强PCB
    +关注

    关注

    8

    文章

    1831

    浏览量

    27710
  • 华强pcb线路板打样

    关注

    5

    文章

    14629

    浏览量

    42967
收藏 人收藏

    评论

    相关推荐

    循环神经网络的基本概念

    循环神经网络(Recurrent Neural Network,简称RNN)是一种具有循环结构的神经网络,其核心思想是将前一个时间步的输出作为下一个时间步的输入,从而实现对序列数据的建模。本文将从
    的头像 发表于 07-04 14:31 565次阅读

    什么是PLC循环移位指令 PLC循环移位的特点

    PLC循环移位指令包括循环左移指令和循环右移指令。在循环移位过程中,移出的位并不会丢失,而是会放回空出的位上,形成一个环形移位。
    的头像 发表于 03-07 16:57 1937次阅读
    什么是PLC<b class='flag-5'>循环</b>移位指令 PLC<b class='flag-5'>循环</b>移位的特点

    arduino如何停止loop循环

    Arduino的loop循环是其主要的程序执行部分,该循环将在Arduino开发板上持续运行,并且只有在程序被重新上传或开发板断电重启时才会停止。然而,在某些情况下,你可能需要在程序执行过程中停止或
    的头像 发表于 02-14 16:24 4150次阅读

    arduino中while循环怎么跳出

    Arduino 是一款开源的硬件平台,广泛应用于各种物联网和嵌入式系统项目。在 Arduino 上编写代码时,循环结构起到了至关重要的作用。而其中的 while 循环更是常用于需要根据特定条件重复
    的头像 发表于 02-14 16:22 2347次阅读

    循环指令loop规定循环次数

    循环指令是计算机编程中非常重要的概念,它允许程序重复执行一段代码块,使得程序可以更有效地处理大量数据和重复性任务。在本文中,我们将详尽、详实、细致地介绍循环指令的相关概念、语法和应用场
    的头像 发表于 02-14 16:10 1435次阅读

    python怎么设置循环次数

    在Python中,可以使用循环语句来重复执行一段代码多次。要设置循环次数,可以使用循环的计数器来控制循环的执行次数。以下是几种常用的设置循环
    的头像 发表于 11-23 15:50 5029次阅读

    python循环创建变量并赋值

    循环是Python编程中非常重要的一个概念,它可以让我们轻松地重复执行某些代码块,从而简化编程过程并提高代码的效率。在循环中,我们经常需要创建变量并赋值,这是非常常见的操作。接下来,我将详尽地解释在
    的头像 发表于 11-23 14:51 1603次阅读

    for循环里的变量是局部变量吗

    对于一个普通for循环而言,循环变量是局部变量。在大多数编程语言中,循环变量只在循环内部的作用域中可见。换句话说,循环变量的声明和赋值仅在
    的头像 发表于 11-23 14:50 2499次阅读

    c语言在while中嵌套if循环

    C语言是一种广泛使用的面向过程编程语言,它提供了许多控制结构来帮助程序员实现复杂的逻辑和流程控制。其中,while循环和if语句是非常常见和重要的控制结构。本文将详细介绍C语言中在while循环
    的头像 发表于 11-22 10:09 5635次阅读

    while循环用法格式

    while循环是一种常用的循环结构,能够按照指定条件多次重复执行一段代码。它的一般用法格式如下: while 条件表达式:循环体 在执行while循环时,首先会判断条件表达式的值。如果
    的头像 发表于 11-22 10:02 1698次阅读

    for循环的基本例子

    for循环是一种常见的循环结构,用于重复执行一段代码。它通常由三个部分组成:循环变量的初始化、循环条件和循环变量更新。下面将通过详细的例子来
    的头像 发表于 11-22 10:00 2061次阅读

    python循环里的输出结果汇总

    循环是计算机编程中常用的一种控制结构,用于重复执行一段代码。Python提供了多种类型的循环结构,包括for循环和while循环。在这篇文章中,我们将详细介绍Python
    的头像 发表于 11-22 09:59 1587次阅读

    for循环的执行流程

    for循环是编程中常用的一种循环结构,它可以重复执行一段代码块,直到达到指定的条件才结束循环。在这篇文章中,我将详细介绍for循环的执行流程,以帮助读者深入理解该
    的头像 发表于 11-21 14:55 1660次阅读

    python最简单for循环例子

    Python是一种简单而又强大的编程语言,通过其清晰的语法和丰富的功能库,我们可以实现各种各样的任务。其中一个最基本的语法结构就是for循环,让我们来看一下如何使用for循环来编写一个最简单的例子
    的头像 发表于 11-21 14:53 948次阅读

    for in range循环怎么使用

    for-in range 循环是Python中的一种循环结构,用于重复执行一段代码,而且循环次数是已知的。 在Python中,for-in range 循环有以下几种用法: 通过指定
    的头像 发表于 11-21 14:49 1.3w次阅读