第一次接触层次原理图时,我和大多数工程师一样,习惯性地把所有电路都画在一张图纸上。直到某次设计一个智能温控器项目,原理图上的元件密密麻麻挤在一起,连找个电阻都要Ctrl+F搜索半天,我才真正意识到模块化设计的重要性。AD21的层次原理图功能就像乐高积木,让我们能把复杂系统拆解成可复用的功能模块。
传统平坦式原理图相当于把整个电路平铺在桌面上,所有连接关系都在同一层级。而层次原理图则是立体架构——主图(Main.SchDoc)相当于项目目录,每个Sheet Symbol都是指向具体电路模块的"超链接"。这种结构特别适合智能家居控制板这类中等复杂度设计,比如我们可以把Wi-Fi模块、传感器接口、电源管理分别做成子图,通过端口(Port)和图纸入口(Sheet Entry)实现跨模块通信。
实际项目中我常用一个简单类比:主图就像一本书的目录页,每个章节标题对应一个子图,而端口就是章节间的交叉引用标记。当编译工程时,AD21会自动检查这些"标记"是否匹配,比人工核对网络标号可靠得多。最近帮客户调试的一个LED调光板项目,就是因为采用层次设计,才能让三位工程师同时开发不同模块,最后集成时一次编译通过。
现在我们来实战一个智能插座控制板的设计。这个项目包含电源转换(AC-DC)、MCU控制、继电器驱动和Wi-Fi通信四个核心模块。采用自上而下设计时,首先要像建筑师画蓝图那样规划整体框架。
在AD21新建工程后,我通常会先创建主图并放置四个Sheet Symbol。这里有个实用技巧:按快捷键P+S放置符号时,可以按住Tab键预置属性。比如给电源模块设置Designator为"PWR",File Name填"Power_ACDC.SchDoc"。特别注意Width/Height参数要根据预估的电路规模调整,我习惯先设成50mm×30mm,后期再优化。
放置图纸入口时最容易踩的坑是I/O类型设置。去年设计工业控制器时就因为把UART_RX设成Output导致信号异常。现在我的操作规范是:
完成的主图应该像城市交通图——每个Sheet Symbol是功能区块,导线就是道路。最近项目中发现AD21的智能连线功能(Ctrl+W)特别适合层次图连接,能自动避开障碍物。连接时建议先处理电源网络,因为GND和VCC通常设为全局网络(通过Place→Power Port),不需要额外端口。
从主图创建子图时,AD21会自动生成与图纸入口对应的端口。但这里有个隐藏技巧:右键点击Sheet Symbol选"Sync Sheet Entries and Ports"可以双向同步。曾有个电机驱动项目因为手动修改端口名称导致编译错误,这个功能救了命。
在绘制电源子图时,推荐先放置输入/输出端口再画电路。比如ACDC模块:
verilog复制// 端口定义示例
Port Vin_AC // 交流输入
Port Vout_12V // 直流输出
Port GND // 地线
实际布线时要注意:
常见编译错误及解决方法:
最近发现AD21的Compile Mask功能(Tools→Mask)超实用,可以临时屏蔽某些模块的检查,特别适合大型项目分段调试。
当接手遗留项目或做方案验证时,我更喜欢用自下而上方式。比如改造旧款电源模块时,可以先把现有电路保存为子图,再通过"Create Sheet Symbol From Sheet"生成主图。这种方式最大的优势是能利用现有设计资源。
操作要点记录:
有个取巧的方法:先把所有子图放进工程,然后新建主图直接拖入Sheet Symbol,AD21会自动匹配文件名。上周用这方法半小时就完成了电机控制器的架构重组。
当项目超过5个模块时,强烈建议生成层次设计表(Report→Project Hierarchy)。这个REP文件会列出所有图纸的树状结构,像这样:
code复制Main.SchDoc
├── Power.SchDoc
├── MCU.SchDoc
│ ├── Sensor_IF.SchDoc
│ └── Comm.SchDoc
└── Actuator.SchDoc
团队协作时我们这样分工:
有个经验值得分享:把复用性高的模块(如电源、MCU最小系统)做成模板库,新项目直接调用。我们团队的标准模块库已积累30+常用电路,使设计效率提升40%以上。
完成层次设计后要做关键检查:
最近发现AD21的"Cross Probe"功能(Ctrl+Shift+X)在层次图中特别强大,能自动跳转到关联图纸。生产前记得:
最后提醒:复杂项目的PCB布局也要对应层次结构,建议按功能模块分区布局。去年有个教训是把Wi-Fi模块放在电源附近导致通信不稳定,现在我的原则是"原理图怎么分,PCB就怎么摆"。