CAN总线的采样位和同步跳转宽度

本文详细介绍了CAN控制器中同步跳转宽度(SJW)的概念及其计算方法,并通过一个具体的例子展示了如何根据SJW设置计算同步跳转宽度位域时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

采样位:对采样动作进行设置的标志位,采样位可以设置为多次或一次。波特率较低时建议将采样位设置为一次,波特率高时设置为多次,波特率高低以100kbps作为分界。

同步跳转宽度:用于兼容不同波特率的总线,除了本身设定的 波特率,还能接收一个上下容差范围内的波特率。其设置为SJW[1:0],计算公式为tsjw = 系统时钟 × (2×sjw1+sjw2+1)

例题:假设我SJA1000 CAN控制器所拥有的晶体频率为16MHz,系统时钟Tscl6.25微妙,SJW.1SJW.0都被置一,请求出同步跳转宽度位域的时间是?

 

Tsjw Tscl ( 2*SJW.1 SJW.0 

 6.25微妙 (2+1+1)

 6.25微妙 4

 25微妙

 

同步跳转宽度位域时间与总线波特率上下限容差值关系为:

总线下届容差  <    总线波特率      <      总线上限容差

1(Tbit +  Tsjw )   <   1/(Tbit)     <    1/(Tbit - Tsjw)

### 关于CAN通信中同步跳转宽度 #### 解释与定义 在CAN总线协议中,同步跳转宽度(Synchronization Jump Width, SJW)是一个重要的参数,其持续时间为tSJW。该段并非标称时间的一部分,而是规定了在重新同步情况下能够延长或缩短比特周期的时间量子(TQ)的最大数量[^1]。 #### 作用 相SEG1可能会因为再同步而被延长,或者相SEG2会被相应地缩短;这种变化受到由SJW所设定的一个上限约束。具体来说,为了适应不同节点间存在的微小频率差异以及由此引起的时钟漂移现象,CAN控制器允许对单个比特的时间间隔做出适当调整——即增加或减少一定数目(通常是整数倍)的时间单TQ来实现这一目的。这些针对时间所做的最大幅度修正被称为同步跳变宽度(SJW)。 通过设置合理的SJW值,可以在一定程度上补偿因各节点内部振荡器精度不够理想而导致的偏差问题,从而确保整个网络内所有设备之间保持良好的通讯协调性稳定性。当发生重同步事件时,利用SJW可灵活调节相缓冲区段(Phase_Seg1Phase_Seg2),使得即使存在轻微的不同步情况也能得到及时纠正而不影响正常的数据交换过程。 ```python # Python伪代码展示如何基于给定的SJW其他参数计算可能的新采样置 def calculate_new_sample_point(sjw, phase_seg1, phase_seg2): max_adjustment = sjw * time_quantum # 计算最大调整量 new_phase_seg1_max = phase_seg1 + max_adjustment new_phase_seg2_min = phase_seg2 - max_adjustment return (new_phase_seg1_max, new_phase_seg2_min) sjw = 4 # 假设SJW为4个时间单元 phase_seg1 = 8 # 初始相段1长度 phase_seg2 = 7 # 初始相段2长度 time_quantum = 1 # 时间量化单 result = calculate_new_sample_point(sjw, phase_seg1, phase_seg2) print(f"新的相段1最大值:{result[0]}, 新的相段2最小值:{result[1]}") ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值