“ KiCad 中虽然没有信号线束(Signal Harness)对象,但是通过总线和总线别名,可以实现类似信号线束的功能。 ”; e# ]: ]( Z7 I, q% ?4 [
9 y6 z7 J+ X) n6 j' C
2host15qdfu64050988639.png
4 }+ j+ S" K( N/ M% a: a
- x- [: A j' L: g什么是信号线束?信号线束是一种电气设计对象。它是一种抽象连接,可对不同信号(包括总线、导线和其他信号线束)进行逻辑分组,以提高灵活性和简化设计。信号线束允许在项目中创建和操作子电路之间更高级别的抽象连接,从而提高了设计的可读性和重复使用的潜力。在 Altium designer 中,信号线束长这个样子:$ }- ?' G5 j8 R* B1 M
$ `) _+ `: {" v( q" M: |* H/ ?- {
4zrzbcxeghl64050988739.png
- R& c- B2 h# ~0 A: n
那在 KiCad 中有没有信号线束的对象呢?答案是“没有”!
, Z4 |- E/ o8 w% U+ \% C4 q. r但是!KiCad 有一种特殊的总线,称为“分组总线”(Group Bus),完全可以实现类似信号线束的功能。我们先摘录 KiCad中总线的使用 一文中对分组总线的介绍:
4 x! F* c6 I" z, D4 X* d分组总线 是一个或多个信号和/或矢量总线的集合。分组总线可用于将相关信号捆绑在一起,即使这些信号的名称不同。分组总线使用一种特殊的标签语法:{signal1 signal2 signal3}
! h B# J( U4 }+ F* B3 p分组的成员列在大括号({})内,用空格分隔。在开头的大括号前是分组的可选名称(optional_name)。如果分组总线未命名,PCB 上的网络将只是组内的信号名称。如果分组总线有名称,生成的网络将以名称作为前缀,并用句号(.)将前缀与信号名称隔开。例如,总线 {SCL SDA} 有两个信号成员,在网表中这两个信号就是 SCL 和 SDA。总线 USB1{DP DM} 将生成名为 USB1.DP 和 USB1.DM 的网表。对于在多个类似电路中重复出现的较多的总线设计,使用这种方法可以节省时间。分组总线还可以包含矢量总线。例如,总线 MEMORY{A[7...0] D[7...0] OE WE} 既包含矢量总线,也包含普通信号,因此在 PCB 上会产生 MEMORY.A7 和 MEMORY.OE 等网。大家仔细想一下,这个不就是信号线束(Signal Harness)的使用方式吗?除了总线的名字比较长,且没有具象的图形表示之外!那有没有办法让分组总线像信号线束那样有个有意义的名字呢?这就需要要到总线别名(Bus Alias)了!Bus Alias(总线别名)
1 v$ @; ?1 k; ~7 T2 j3 @9 M" y* v% U总线别名是一种快捷方式,可让您更高效地处理大型分组总线。通过总线别名,您可以定义分组总线并为其命名一个简短的名称,然后在整个原理图中使用该名称来代替完整的分组名称。要创建总线别名,请打开 “原理图设置” 中的 “总线别名定义” 窗格。# S/ u3 K' }6 P U' F3 G
fxhzfdjkeqv64050988839.png
' K h% [% ?3 U' e! M, T3 \7 s" i别名可以命名为任何有效的信号名称。通过对话框,可以向别名中添加信号或矢量总线。作为快捷方式,您可以键入或粘贴以空格分隔的信号或总线列表,它们都将被添加到别名定义中。在本例中,我们定义了一个名为 USB 的别名,其成员包括 DP、DM 和 VBUS。定义别名后,可将别名置于分组总线的大括号内,在分组总线标签中使用:{USB}。这与总线 {DP DM VBUS} 的效果相同。还可以在分组中添加前缀名,如 USB1{USB},这样就会产生 USB1.DP 等网络。对于复杂的总线,使用别名可以大大缩短原理图上的标签。请记住,别名只是一种快捷方式,网表中并不包含别名的名称。总线别名保存在创建别名时打开的原理图文件中。总线别名定义窗口会在别名列表底部显示与所选别名相关的原理图文件。在给定原理图页中创建的任何别名都可用于同一层次设计中的任何其他原理图页。如果分层设计中的多个子原理图包含名称相同的总线别名,则这些别名必须具有相同的成员。如果多个具有相同名称的总线别名没有一致的成员,ERC 将报告违规。
! H) [, t4 ~- g6 w+ d& u导出网表
0 @) B) X0 S, y5 U+ H我们来看一个实际的例子,以Made with KiCad(七十八):Amulet 运动控制器 - 机械狗项目组件 中的原理图为例。来看一个局部:
' i( |0 z. ?1 E. O
2npwhne1yi564050988939.png
1 p) {7 [+ _) i- ]6 r0 I
图中的 MCU 与 Motor Control 连接时,使用了大量的总线别名,比如{CURRENT_SENSE},{PWM_PHASE},{DRV_SPI}。这些总线别名并不是一个信号,而是由一组信号组成的。现在打开“原理图设置”,点击“总线别名定义”选项:; Y0 r3 s" m1 ]7 u) I8 e
3rpruyhmlfo64050989039.png
3 J* n: `- u: Y$ ~5 [2 A) F% ]& g S
这里定义了原理图中所有的总线别名,以{PWM_PHASE}为例,它其实是 PWM_PHASEA、PWM_PHASEB、PWM_PHASEC 三个信号的集合(快捷方式)。但是在图形的表现形式上,并不需要那么多网络标签,只需要{PWM_PHASE} 即可,这样既能简化信号的连接,名字还可以表达出特定的功能含义。我们再看一下子图中是如何连接的:. B& h% l/ I O6 n/ L6 A; d7 y8 ?& v
cycxcrzkppi64050989139.png
4 q5 Y7 z" e l) x% G( P当然我们也可以去掉总线的图形连接以及总线入口,连接的效果完全相同:
% r3 T0 X/ }$ [0 S
lfgoapfqmd564050989240.png
8 S/ k1 o: J, s: O% B4 ?
这么看是不是和信号线束几乎完全一样了(除了少一个蓝色的大括号和一根比总线更粗的先)?当然AD中的信号线束作为对象可以进行单独编辑,而在 KiCad 中只是用别名的方式做了个简单的替代。& c7 J6 Q5 p% Z n
无论如何,使用这种方法可以简化图纸并实现类似信号线束的功能。
" E' d) [# d2 x- K. ?结束语2 L2 {6 T5 Z i; e% H# P
最后,我们把示例项目的根图完整的展示给大家,大家仔细看一下,使用分组总线和总线别名,是否基本实现了信号线束实现的功能?2 D \; g+ v/ e$ W
ffq4ek2230b64050989340.png
0 h6 @, w0 I, ?. \' J# E6 t3 z2 D( |: `
& E( B5 B/ a$ H, `7 Z' ^: Y! \! g3 N, P" b0 C* Y" G2 q4 }
注意:如果想第一时间收到 KiCad 内容推送,请点击下方的名片,按关注,再设为星标。, I9 q% q9 R" e% B/ \5 A6 b
常用合集汇总:+ J- b. A' p9 N; i' A, l, E
和 Dr Peter 一起学 KiCad
2 P0 c! C6 b- K6 f4 n2 U8 i* d; QKiCad 8 探秘合集; z4 U- r5 F# w: g( Y1 r
KiCad 使用经验分享KiCad 设计项目(Made with KiCad)常见问题与解决方法KiCad 开发笔记插件应用& u/ P) m$ p$ ]( z$ V- w8 o& W. u' F
发布记录 |