这个是Canoe中Hardware项设置的图。硬件设备连接的是VH6501,它的晶振频率显示为16000kHz。此外其他的配置信息是: 波特率:500k。 BTL Cycles(一位多少个Tq) :16。Prescaler(预分频数):1。
那么问题来了,为什么在计算晶振频率和can波特率关系时,除了预分频数外,还差2陪?
也就是说一开始我核算的波特率如下:波特率 = 晶振频率 / (预分频BTL Cycles) = 16000 / (116) =1000 k。 结果不等于500k,差了2倍。
我找了其他的资料,发现有这样的关系:CAN时钟周期=2×晶振时钟周期×BRP,这里就乘了个2。相当于晶振频率出来先分了个二分频,再分预分频。但是不知道为啥会有个二分频,要乘以2?
can总线波特率与晶振频率为啥差两倍
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- zhazha强 2023-02-14 21:59关注
在CAN总线中,每个数据位传输需要两个时钟周期,即一个位的传输周期为2个时钟周期,其中一个时钟周期为发送者和接收者同步的时间基准,即CAN时钟周期。所以,在计算CAN波特率时,需要将晶振频率乘以2,才能得到正确的计算结果。
对于预分频器(BRP),它的作用是将晶振频率进行预分频,以满足CAN总线波特率的要求。在CAN协议中,BRP的取值范围是1~64,它决定了一个时间单元(Time Quantum,Tq)的长度。因此,波特率可以通过以下公式计算:
波特率 = CAN时钟频率 / (BRP × Tq)
其中,CAN时钟频率 = 2 × 晶振频率。因此,我们可以将上面的公式转化为:
波特率 = (2 × 晶振频率) / (BRP × Tq)
由于一个位的传输周期为2个时钟周期,所以一个时间单元(Tq)等于2个时钟周期。因此,Tq = 2 × CAN时钟周期。将其代入上面的公式,得到:
波特率 = (2 × 晶振频率) / (BRP × 2 × CAN时钟周期) = 晶振频率 / (BRP × CAN时钟周期)
因此,可以发现,计算CAN波特率时,需要将晶振频率乘以2,以满足每个数据位传输需要两个时钟周期的要求。
解决 无用评论 打赏 举报
悬赏问题
- ¥15 为什么eclipse不能再下载了?
- ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
- ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
- ¥15 特定网页无法访问,已排除网页问题
- ¥50 如何将脑的图像投影到颅骨上
- ¥15 提问一个关于vscode相关的环境配置问题,就是输入中文但是显示不出来,代码在idea可以显示中文,但在vscode不行,不知道怎么配置环境
- ¥15 netcore使用PuppeteerSharp截图
- ¥20 这张图页头,页脚具体代码该怎么写?
- ¥20 WPF MVVM模式 handycontrol 框架, hc:SearchBar 控件 Text="{Binding NavMenusKeyWords}" 绑定取不到值
- ¥15 需要手写数字信号处理Dsp三个简单题 不用太复杂