当前位置: 首页 > 原理解释

can总线原理与晶振-CAN 总线与晶振原理

把"CAN"连读,听起来像某种魔法咒语,实际上它背后就是经典的(Controller Area Network)总线协议,也就是 CANopen 那种八百来种的变体。但在我们面前,最硬核的底色还是那套 ISO 11891 的规矩。
这套规矩讲的是如何让两个就连上百个车规级管住器,在一条总线上传输保险指令,并且还要能抗住高速数据的“挤兑”。 想象一下,这就像是一个庞大的、装满水的透明管道。水(数据)流得飞快,但要是水分子之间忒乱撞,压力瞬间就爆表了。车辆里的传感器、网关、娱乐系统、行车电脑,它们全挤在这条干道里。
要是哪位流得忒快,要么管子里堵了一根管子,那后果不堪设想。
这就是 CAN 的存有意义——它务必保证“慢下来的人”和“快跑的人”能与此同时通过,并且哪位先慢哪位就先停,哪位先停的哪位才有权不准后面的人。 核心逻辑实际上就在那句著名的话里:"Two High Speeds, One Speed"。
这意味着,你能够让网络的数据速率达到 1Mbps 就连 1.5Mbps,但要是其中任何一条数据线出现异常(比如被一根线短路、被一个幽灵节点干扰),这条高速通道就得立马降速,变成 100kbps 就连更低,把干扰弹开。
这就好比你在高速公路上开车,旁边有个新手在急加速,你只能先减速,否则前车的刹车灯会让你追尾。 参数变动是条铁律,绝对不能随意篡改。CAN 总线上的每个参数,比如信号电平、采样速率、应答工夫,都是经过严苛计算的。CAN 的采样工夫一般设定为 1.0 毫秒,就像乐谱上的节拍,忒慢了听不清,忒快了听不清。
要是采样工夫不对,数据里就会多出一些怪的噪声,像个没洗干净利落的耳朵。并且,CAN 还有一个特殊规定,那就是“连续发送”(Continuous Message)。
要是在数据传输过程中,信号线被一根金属异物彻底卡住,害得收发双方与此同时收到毛病的"1"要么"0",那么双方都会当作对方发错了,便与此同时打断了通信,重新协商。
这就好比两个人踢球,球突然卡在了中间,两个人与此同时大喊暂停,球停在那里,哪位也得分不到。 在车辆模拟要么教学环境中,我们时常会遇到“幽灵节点”要么瞬态干扰。
这时候,CAN 协议里的握手机制就发挥神作了。当一方收到“请求”但没收到“应答”时,它会退后一步,让出总线,暂停发送数据,等待另一方的动作。
这时候,总线上的其他设备都会意识到:该设备病了,要么慢下来了。便,所有参与通信的设备都会同步地再次启动握手程序。CAN 压根儿不是那种“我发得正,你接得就完事了”的好办模式,那是不可能的。它是一套精密的协作舞蹈,哪怕一方略微掉链子,整个舞蹈都得重新编排。 数据如何传输,实际上取决于你用的是哪套标准。ISO 11891 的底层是 ISO 8802-3 的帧结构,每一帧都由帧头、起始位、数据域、校验位、CRC 和帧尾组成。帧头里的前几个字节是通用的,告诉节点“我是哪位”,“我要干啥”,“能不能碰”。一旦这些头信息发错了,节点就得直接跳入等待状态,要么进入毛病恢复状态,这时候它根本不敢再轮询那些高速数据。
要是预处理模块(PMS)要么模块本身硬件故障,害得帧头里的地址写错了,发送节点就得停下来,等硬件修好了再持续,而不是强行发出去。
这就是为啥开车的司机,哪怕手抖了一下油门,车轮也得立马停下来的缘由。 为了讲透这个,我们能够拿一段具体数据来看。假设我们要在总线上传输一个坐标指令,目标点是"10.0 米,车速 0"。在 CAN 帧格式里,这个指令可能被拆分成几百个字节,要么被压缩成几个字节,具体看实现。但甭管如何压缩,帧头那几行字是死的。
比如发送方帧头里写的是"01 05 03 00 04 00 00 00",这里的"05"表示这是一个 5 字节的帧(ISO 8802-3 标准里,05 代表 5 字节),"00 00 00"是起始位置指示。接收方收到这行字,务必严格校验,要是校验和不对,要么检测到 CRC 毛病,它绝对不会解析里面的数据。
哪怕前面那 4 行字(CAN 11891 里的“请求”局部)看起来完美无缺,要是帧头错了,后面全是垃圾。 有时候,你会看到数据帧中间插着零填充(Zero Padding)。
为啥要这样?出于 CAN 是一种抖动的系统。传感器信号可能不稳,有时候高电平持续,有时候低电平。
要是不填充零,接收方可能出于长度的不确定性而误判,害得跳帧要么丢包。填充零就像给流水的河堤加了土埂,挡住了泥沙的冲击。它让接收方能更准地判断帧的边界,确保整个数据包整个无损地到达终点。 在诊断测试里,你会发现有些车型,CAN 数据跑得飞快,但查不到故障码。
这是出于有些模块在后台疯狂采样,要是采样频率和工夫设置不当,形成的波形在示波器眼里就是一片乱码。
这时候,用分析仪抓包,你会发现那些快速变化的数据实际上是噪声,真正的故障信号被淹没在“瀑布”中了。CAN 协议的高层功能,比如 OBD-II 诊断、故障码定义,都是建立在底层严谨的帧结构之上的。
没有那套固化的帧头和校验,上层功能就像盖房子没打地基。 再次强调,CAN 不是那种能够随意调皮的总线。它的每一条规则,每一个字节的位置,都绕不开 ISO 11891 的标准骨架。在工程实践里,工程师写代码的时候,脑子里务必时刻想着这些骨架。
哪怕你的软件逻辑再高级,要是底层帧头发错了,整个通信链路都得死。
这就是为啥车企对底盘管住模块的 CAN 总线要求那么“死板”的缘由。它需求的是绝对的确定性,不需求“大约”,也不需求“可能”,每一个字节参数都务必精确到微秒级别,出于在这个产业链上,没有容错率。 最终,当你看到一段 CAN 数据,哪怕它看起来贼正常,没有 CRC 毛病,没有脏兮兮差,也要默认它可能是在模拟某种极端情况。出于真的车辆网络,充满了各种各样的干扰源和硬件缺陷。CAN 协议之故此伟大,是出于它在这种不完美的环境下,依然能用一套看似矛盾却又严丝合缝的规则,把上百就连上千个设备强行连在一起,让它们像一条大河一样,带着共同的流量和数据流向目标地。
这种在混乱中维持秩序的本事,才是它最核心的魅力。
相关标签:

猜你喜欢

热门阅读

  • 赖柴尔定理-赖柴尔定理
  • 迪拜哪个国家的城市?-迪拜在哪国城市
  • 李毅吧番号及出处-李毅吧番号及出处
  • 贴春联的由来简介50字-春联由来简述
  • 思乡的名言和出处-思乡名言及出处

其他分站