CAN总线波特率配置与计算实例
4星 · 超过85%的资源 需积分: 21 139 浏览量
更新于2024-09-11
收藏 17KB DOCX 举报
"CAN总线的波特率计算涉及到多个参数,包括CAN控制器的晶振频率、总线传输延迟、接收延迟、同步段、传播段、相位缓冲段1和2,以及同步跳跃宽度(SJW)。计算过程需确保满足CAN协议的要求,以确保通信的准确性和稳定性。"
在CAN总线通信中,波特率是衡量数据传输速率的一个关键指标,它定义了每秒传输的位数。CAN总线的波特率计算通常基于以下几个步骤:
1. **确定CAN控制器的晶振频率(fcan_clk)**: 在示例中,fcan_clk为10MHz,这意味着每个时钟周期为100ns。
2. **计算最小时间量子(tq)**: tq等于1除以fcan_clk,即tq = 1/10MHz = 100ns。
3. **评估总线传输延迟**: 包括总线的最长距离(40m)与光速的关系,以及节点的总线输出延迟(50ns)和接收延迟(30ns)。总线最大传输延迟 = 最长距离 / 光速 ≈ 133ns。
4. **计算传播段(Prop_Seg)**: Prop_Seg = 2 * (总线输入延迟 + 总线输出延迟 + 总线最大传输延迟) = 426ns。由于需要冗余预留,Prop_Seg设置为600ns = 6tq。
5. **设定同步段(Sync_Seg)**: Sync_Seg通常为1tq。
6. **设置相位缓冲段1(Phase_Seg1)和2(Phase_Seg2)**: 采样发生在Phase_Seg1和Phase_Seg2之间,因此Phase_Seg2应包含至少1tq的处理时间。所以,Phase_Seg1设为1tq,Phase_Seg2设为2tq。
7. **确定同步跳跃宽度(SJW)**: SJW是最小的调整量,这里为1tq。
8. **计算位时间(Bit_time)**: Bit_time = Sync_Seg + Prop_Seg + Phase_Seg1 + Phase_Seg2 = 10tq,这对应于1Mbps的波特率。
9. **计算晶振漂移容许值**: 漂移容许值(min(Phase_Seg1,Phase_Seg2) / 2 * (13 * Bit_time - Phase_Seg2)) = 0.39%。
10. **配置寄存器**: 根据计算结果配置CAN控制器的波特率寄存器,如例子中所示的0x1600。
此外,示例还提供了宏定义BTR来简化波特率配置,如kBTR_1Mbps和kBTR_500kbps分别用于设置1Mbps和500kbps的波特率。`void set_bitrate(unsigned int btr)`函数用于设置CAN总线的波特率。
CAN波特率的计算是一个精确的过程,涉及到多个参数的调整,以适应不同的通信需求和环境条件,确保CAN总线网络的高效、可靠运行。
2020-07-11 上传
2010-01-14 上传
2023-10-31 上传
2021-10-07 上传
wulei527
- 粉丝: 0
- 资源: 3
最新资源
- Android圆角进度条控件的设计与应用
- mui框架实现带侧边栏的响应式布局
- Android仿知乎横线直线进度条实现教程
- SSM选课系统实现:Spring+SpringMVC+MyBatis源码剖析
- 使用JavaScript开发的流星待办事项应用
- Google Code Jam 2015竞赛回顾与Java编程实践
- Angular 2与NW.js集成:通过Webpack和Gulp构建环境详解
- OneDayTripPlanner:数字化城市旅游活动规划助手
- TinySTM 轻量级原子操作库的详细介绍与安装指南
- 模拟PHP序列化:JavaScript实现序列化与反序列化技术
- ***进销存系统全面功能介绍与开发指南
- 掌握Clojure命名空间的正确重新加载技巧
- 免费获取VMD模态分解Matlab源代码与案例数据
- BuglyEasyToUnity最新更新优化:简化Unity开发者接入流程
- Android学生俱乐部项目任务2解析与实践
- 掌握Elixir语言构建高效分布式网络爬虫