核心内容摘要
Fish Speech 1.5在卷积神经网络教学中的语音解释应用
TJA1050内部原理图我想知道他是怎么把单端ttl转换为双端can差分TJA1050 是一款独立的 CAN 收发器它的核心功能之一正是将来自微控制器的单端 TTL/CMOS 逻辑信号转换为 CAN 总线所需的差分信号。
下面结合其内部结构解释这个转换过程。
核心转换原理TJA1050 内部的关键模块是差分驱动器CAN 差分信号生成电路和差分接收器将总线差分信号转回逻辑电平。
我们主要关注“发送方向”的转换逻辑输入信号TXD 引脚接收来自 MCU 的单端逻辑信号TTL/CMOS 电平0V 显性
3V/5V 隐性。
内部驱动逻辑根据 TXD 电平控制一对互补的推挽输出级分别驱动 CANH 和 CANL 引脚。
差分输出当 TXD 0显性位时CANH 被拉高≈
5VCANL 被拉低≈
5V差分电压 VdiffVCANH−VCANL≈2V。
当 TXD 1隐性位时CANH 和 CANL 都接近 VCC/2≈
5V差分电压 Vdiff≈0V。
内部结构简化示意图--------------------- | TJA1050 内部 | TXD (TTL) ---| 输入缓冲 - 控制逻辑 |---- 差分驱动器 | | | | | | CANH CANL | | | | | 差分接收器 --------|-------|------| | | | | | | V | | | | 输出缓冲 - RXD | | | --------------------- | | | | 120Ω 120Ω (终端电阻在总线两端) | | V V
详细工作过程
1 显性位TXD 0控制逻辑检测到 TXD 为低电平激活“显性”输出模式。
内部驱动电路上拉 CANH 到高电位通过内部 MOS 管接高侧电源。
下拉 CANL 到低电位通过内部 MOS 管接地。
结果CANH ≈
5VCANL ≈
5VVdiff≈2V符合 CAN 显性位标准。
2 隐性位TXD 1控制逻辑检测到 TXD 为高电平进入“隐性”状态。
内部驱动电路关闭高侧和低侧驱动 MOS 管CANH 和 CANL 通过内部偏置电阻拉到中间电压≈
5V。
结果CANH ≈ CANL ≈
5VVdiff≈0V符合 CAN 隐性位标准。
关键设计要点共模范围TJA1050 的 CANH/CANL 输出能承受 -27V 到 40V 的共模电压确保抗干扰能力。
斜率控制内部集成斜率控制电路通过 Rs 引脚可调节输出边沿速率减少 EMI。
总线故障保护当 CANH/CANL 短路到电源或地时内部保护电路限制电流防止芯片损坏。
典型应用电路简化MCU_TXD --- TJA1050_TXD MCU_RXD --- TJA1050_RXD | TJA1050_CANH --- CAN 总线 TJA1050_CANL --- CAN 总线 | VCC (5V) GND
总结TJA1050 通过内部的互补推挽输出级将 TXD 的单端逻辑电平转换为 CANH/CANL 的差分电压显性位CANH 高、CANL 低 → 差分电压 ≈ 2V。
隐性位CANH 和 CANL 均为中间电平 → 差分电压 ≈ 0V。
这个转换过程是 CAN 物理层实现的基础确保信号在长距离、有噪声的环境下可靠传输。
谁规定输入0就是显性输入1就是隐性显和隐有什么区别这是一个非常好的问题它触及了CAN总线协议设计的核心逻辑。
这个“0显性1隐性”的规则并不是由TJA1050这个芯片随意规定的而是由CAN协议标准ISO 11898所定义并且具有深刻的物理和逻辑意义。
下面分两部分解释
为什么是“0显性1隐性”物理与逻辑的映射这个规定源于CAN总线的“线与”逻辑和“非归零”编码方式。
物理层定义显性位在物理总线上表现为有电压差CANH CANL约2V。
这对应于逻辑“0”。
隐性位在物理总线上表现为无电压差CANH ≈ CANL。
这对应于逻辑“1”。
逻辑层定义在CAN协议中显性位0具有更高的优先级。
你可以把它想象成一个“强信号”或“覆盖信号”。
隐性位1具有较低的优先级。
你可以把它想象成一个“默认信号”或“弱信号”。
为什么这样设计——为了实现“线与”逻辑和总线仲裁。
CAN总线允许多个节点同时发送。
当两个节点同时发送不同电平时如果一个节点发送“0”显性另一个发送“1”隐性。
在物理总线上显性位0会“覆盖”隐性位1。
总线上的最终结果将是“0”显性。
这就像一群人节点在讨论只有大声说话显性/0的人才能让声音被听到小声嘀咕隐性/1的人会被淹没。
TJA1050的角色TJA1050作为收发器只是忠实地执行这个标准映射MCU说TXD 0→ 芯片产生显性电平有电压差。
MCU说TXD 1→ 芯片产生隐性电平无电压差。
显性和隐性的具体区别特性显性 (Dominant)隐性 (Recessive)逻辑值01物理状态CANH ≈
5V, CANL ≈
5V有差分电压 (≈2V)CANH ≈
5V, CANL ≈
5V无差分电压 (≈0V)总线行为主动驱动总线消耗电流释放总线高阻态不驱动优先级高能“赢”过隐性位低会被显性位覆盖作用
表示数据“0”
用于仲裁赢得发送权
表示帧的开始SOF
表示错误错误帧
表示数据“1”
表示“我不发言”或“默认状态”
举例说明总线仲裁假设节点A要发送数据0b101节点B要发送数据0b110。
它们同时开始发送第1位A发送1隐性B发送1隐性。
总线结果隐性1。
不分胜负继续。
第2位A发送0显性B发送1隐性。
总线结果显性0因为显性覆盖隐性。
仲裁结果节点B“看到”自己发送的是1但总线是0意识到有更高优先级的节点在发言于是立即停止发送转为接收模式。
节点A赢得仲裁继续发送剩下的位。
这个机制使得CAN总线不需要中央控制器多个节点可以“和平竞争”总线使用权且优先级高的消息ID值小因为ID中0越多越容易显性总能先发送。
总结谁规定的ISO 11898 CAN标准。
这是CAN总线实现无冲突仲裁的基础。
显性0是“强信号”有电压差用于主动驱动总线、赢得仲裁、表示帧的开始和错误。
隐性1是“弱信号/默认信号”无电压差表示“不发言”或数据1。
TJA1050只是这个逻辑的物理实现者将MCU的逻辑“0/1”转换为总线上的“显性/隐性”电平。
逻辑反过来不是更符合逻辑吗你的直觉其实很有道理因为在我们通常的逻辑里“1”代表“有/真/激活”感觉上更像“显性”。
但在CAN总线里这个“反直觉”的设计恰恰是经过深思熟虑的是为了解决一个核心问题如何在多个设备同时说话时不需要裁判就能自动分出胜负。
我们可以用几个角度来理解为什么“0显性”反而更符合CAN的“逻辑”。
物理层面的“线与”逻辑电子电路里有一种天然的“线与”特性如果一个设备把总线拉低输出0不管别的设备想输出什么总线都会被强制拉低。
如果一个设备只是不驱动总线输出1高阻态总线状态由其他设备决定。
这就天然形成了0拉低 强制改变总线状态 显性Dominant1不驱动 默认状态 隐性Recessive这个物理特性是硬件固有的协议设计是顺应了这个特性而不是强行规定。
为什么“1显性”在分布式系统中会“更不符合逻辑”假设我们反过来规定“1显性0隐性”。
问题1如何实现“仲裁”在刚才的例子里节点A发101节点B发110。
如果1是显性第1位A发1显性B发1显性。
总线是1平手。
第2位A发0隐性B发1显性。
总线是1显性。
现在A“看到”自己发的是0隐性但总线是1显性A就知道输了停止发送。
等等这听起来好像也能仲裁确实能但看下一个问题。
问题2如何表示“总线空闲”CAN总线在没人说话时必须有一个明确的“空闲”状态。
在现行标准中总线空闲 隐性位1。
这非常合理因为“1”代表“不驱动”是默认状态。
如果反过来总线空闲 显性位1。
这就很可怕了。
总线上一旦出现“空闲”就是一个强信号这会干扰通信而且无法区分“有人在发1”和“总线空闲”。
问题3逻辑一致性“默认”与“强制”在系统设计中“默认状态”通常意味着“无影响”或“被动”。
隐性1作为默认状态节点不上电也能保持总线隐性不干扰系统。
如果显性1是默认状态任何一个故障的节点把总线拉成1整个网络就瘫痪了因为1是“强制发言”。
用“权力”来类比现行标准0显性不说话 隐性1 没有权力不干涉他人。
想说话 显性0 行使权力覆盖他人。
这符合“权力只有在行使时才显现”的逻辑。
反向假设1显性不说话 隐性0 ...要把总线拉低这很奇怪。
想说话 显性1 行使权力。
这会导致“默认状态”也是一种“强制状态”逻辑上很混乱。
与TTL逻辑的对比你之所以觉得“反了”可能是因为你习惯了TTL/CMOS的逻辑TTL高电平
3V/5V通常代表“1”和“有效/激活”。
CAN高电平隐性/1代表“无效/不激活”。
关键区别在于TTL是点对点通信CAN是广播式、多主通信。
在点对点通信中“1”是主动信号在多主通信中需要一种机制让“沉默”成为默认状态而“发言”成为一种“覆盖”动作。
总结虽然直觉上“1有显性”似乎更顺但CAN总线的设计是基于分布式系统的物理约束和逻辑需求顺应硬件利用“拉低”作为“强制”动作的物理特性。
确保安全让“默认/空闲”状态是“无影响”的隐性状态防止单点故障瘫痪全网。
仲裁高效用“0”作为“覆盖”信号实现了简洁优雅的“位仲裁”机制。
所以这个设计不是“反逻辑”而是在多主通信这个特定场景下经过权衡后最符合逻辑的选择。
型号工作电压核心定位关键特性适用场景TJA1050