在LTSpice中制作子电路或分层电路

作者: Digi-Key 工程师 Kaleb Kohlhase

如前所述,本系列帖是关于LTSpice的使用技巧。本帖将说明在现有库组件的基础上制作可用子电路和分层电路块的基本信息。我会将亚德诺半导体的运算放大器OP275GPZ(Digi-Key零件编号OP275GPZ-ND)的理想版本(即我在设计中使用的音频放大器)组装在一起。实际器件的数据值更加具体,所以与此版本的规格可能不尽相同。

制作第一个子电路 / 电路块

先从新建基线电路示意图开始。

  1. 在第一帖中,点击 与门 符号打开组件库并搜索 “Univ”

    UniversalOpAmp
    之前我第一次尝试执行这一步骤时感到十分困扰,因为在制作有效的Spice库组件(之后会讲)时,库里有些基本运算放大器的模型不可用。因此,最好以UnversalOpamp2器件为模型,因其具备良好的预装子电路。将上述组件之一放进电路,按键盘上的Control+E键镜像其他组件并将其放在接近第一个组件的位置。

  2. 采用与下图类似的方式连接电路。

    与上一个电路类似,电线可以向任何方向延伸,以使电路适应于自己偏好的设计。唯一要注意的是,不得将不同且未连接的电线与任何元件相连。点击相关网格位置再按键盘上的Escape键可以终接任意位置的电线。这些电线将经过标记,以便在上层电路中用作输出和输入。每个节点都必须拥有易于记忆的唯一名称,我会从OP275规格书的“OUTA”开始。

  3. 使用 网络标号 工具为未连接的输出 / 输入节点设置名称。

    A. 点击 网络标号 工具或按 F4
    LabelNetTool
    OUTA
    打开的对话框打中会显示两个全局引脚名称GND和COM。下方是需要输入的引脚自定义名称。选择端口类型也很重要,在本例中,OUTA是输出。不确定某个组件是输入还是输出?双向也许是个好选择。
    B.将网络标号放在适当的接线端 / 输出位置。


    点击“确认”后,将清晰的蓝色方框放在U1输出或U1输出的接线端,这与OUTA的功能相同。通常我会按照规格书中列出引脚1-n(其中对零件编号来说,n=8)的顺序来创建节点,n可以是任何整数,但取决于自定义零件所拥有的引脚数量。放置引脚时不必严格遵循这种顺序,但网表顺序在后期仅会对子电路造成影响。此处可以使用一种更快的方式:使用Control+C复制节点输出,将复制的标签放在所有开放连接上,再为每个标签编辑唯一的名称。下面是我的成品电路图,确保在网络标号编辑器中为电压输入和运算放大器输入编辑引脚类型。

    C.复制该电路的网表,在基本的文本编辑器或 Notepad++ 中进行一些编辑,以使该子电路生效。
    a. 第一步是以唯一名称将电路保存在主文件夹中。

    接下来一直到步骤d.都只适用于子电路
    b. 点击 View 菜单并选择 SPICE Netlist 选项,复制下面窗口中的所有文本,然后粘贴到记事本或 Notepad++ 的新建空白文本中。
    SelectAllCopytoBlankTxt
    c.确保所有的编辑都在下图中完成

    第二行和倒数第二行 非常重要 该.subckt SPICE命令采用名为OUTA、-INA、+INA、V+、+INB、-INB、OUTB和V+的有序引脚制作新的OPZ8DIP子电路。其中的引脚顺序极其重要,请务必记住。从技术上来说,引脚名称可以重新排序,但这样会变成不同的网表编号。如果在制作符号时引用了错误的网表编号,分析中就会出现意外的结果或者可能无法运行。网表顺序在子电路名称之后从1开始,以最后一个引脚名称结束。引脚名称 必须 与给定节点的名称相同。在SPICE文件中,各引脚名称需用空格分隔。使用.ends命令结束OPZ8DIP子电路。
    d.将此新文件保存为采用扩展名 .lib / .sub 的任何名称,虽然不必和子电路名称相同,但为方便起见,我通常会采用同一名称来命名。
    saveAsLib

  4. 创建新符号来代表子电路 / 电路块。
    A.点击顶部的 Hierarchy 菜单,选择 open this sheet’s symbol create a new symbol
    IMG_0175
    我更倾向于“ create a new symbol ”,因为此选项会触发额外的对话框,要求自动生成图片。自动生成的图片通常不太美观,而且引脚顺序也完全错误。分层电路和子电路的步骤有些不同,所以我会使用针对子电路的具体指导,并在子电路一节下的小节中说明具体的差异。

子电路

  1. 采用同名的 .lib 文件的顺序来放置引脚。符号图片模式具有针对绘制特定项目的快捷方式。
    PinSymbEdit
    按住键盘上的“P”键会显示引脚且总是以网表顺序1开始,这就是要记住.lib文件内引脚顺序的原因。继续按照规定的相同顺序添加引脚(与上述规格书类似)。对齐方式取决于引脚放置在哪一边。OUTA到V-引脚左对齐,其他引脚右对齐。这完全是习惯做法,你可以按所需方式进行设计。我采用这种方法是为了避免与文本和电线发生冲突。

    按住键盘上的“R”键绘制外部方框,使其与引脚中部相交。这是个对角矩形。网格中的绘制方式对鼠标移动非常敏感,并且软件提供了十字线。如果十字线稍微偏离网格点,就会以此种方式绘制。
  2. 将符号保存为电路示意图同名文件(文件类型是 .asy 格式)。
    这与“另存为”电路示意图相同,只是文件类型不同。执行这些步骤需要遵循上述3.C.中的所有步骤。
    a. Control+A 键,软件将显示符号属性。
    SymbAttribs
    b. 前缀 值编辑为 “X” ,并将 的值编辑为与上述步骤 “3.C.d.” 中保存的子电路的相同名称。确保符号类型为 “Cell” ,然后点击 确定
    EditSymAtt
    c. 再次保存符号。

分层电路块

分层电路块和子电路之间的主要区别在于,分层电路基于示意图,而子电路基于SPICE库网表(点击此处查看说明)。我会遵循此页面上列出的相同步骤,因为该页面是我用于说明不同之处的资源。在这种情况下,网表顺序无关紧要,但引脚名称必须匹配,并且电路名称需与符号(如子电路)名称相同。电路保持一致,绘制的符号也要保持一致。改变之处在于添加实例名:按住键盘上的Control+W键为符号添加“InstName”(这一操作也可用于其他流程),并且属性编辑器保持 完全空白 并且 将符号类型变为: Block 。记住,按键盘上的Control+A可显示“Attribute”编辑器。
AttributeWindowAddName
attribEditBlock
注意:有时,如果你试着使用位于单独文件夹里的电路零件,那么LTSpice可能会找不到层次零件。如果出现以下错误,则只需将你要测试的示意图移动到层次零件所在的同一文件夹内,即可解决此问题:
MissingHierarchy

使用新创建的子电路 / 电路块

先创建新的电路示意图,再点击“与”符号寻找新组件。记住,如果已经链接到之前创建的文件夹,那么查找新零件会更加简便。

  1. 再次点击 AND 符号寻找新组件,将 Top Directory 切换到适当的位置。
    locationSwitch
    注意:如果这是你第一次使用LTSpice,那么软件会显示两个测试文件夹。LTSpice通常将第一个用于保存的文件夹作为二级搜索目录。新零件会出现在此处。如果你遵循了创建.lib文件的步骤,该电路就会显示为黄色并且需要进一步指示才能正确运作。如果是分层电路块,那么默认文件夹应将符号与电路相链接(如果二者名称相同的话),而且无需向电路示意图中添加特殊SPICE命令。
    HierarchyEditor
    上图显示了分层零件的外观。右击零件,打开“Schematic Block”编辑器。
    下图表示Cell零件,右击时需要打开库SPICE文件和其编辑器。
    SymbAttribs
  2. 如果这是 .lib 版本的零件,那么不添加以下 SPICE 指令就无法运行电路。
    A.点击工具栏底部的 .op
    DotOP
    B. 在文本编辑器中输入 .lib 并点击 确定
    DotLibEditTextOk
    C. 在示意图中某处设置指令,然后右击以进行编辑。
    libEdit
    D. 点击 Browse 寻找之前创建的 .lib 文件的路径,然后点击 确定
    29
    添加这一指令的原因是,用于模拟的SPICE命令不知道去何处搜寻子电路,即使文件夹已经与相其链接。在未添加该命令的情况下试着运行示意图会出现以下错误:
    unknownSub
    这是我用子组件(.lib版本)制作的电路示例:
    CircWith2DiffModes
    左侧是倒相放大器,右侧为正相放大器。查看各模式间不同之处的最好方式就是使用运算放大器,我分别在V1和V2上进行了直流扫描分析。这是V1上从0到5伏的扫描分析:
    SweepV1
    这是V2上从0到5伏的扫描分析:
    SweepV2
    两者均在大约500mV处达到最大放大值,但反相放大器与同相放大器的运行相反。在输入电压快要增加到5时,由于运算放大器的最大值和电源电压的限制,终止电压降低了输出电压提升的速度。

英文原文链接:Making Sub-Circuits / Hierarchical Circuits in LTSpice