STM32Fxx系列CAN总线配置总结
来源:互联网 发布:千里眼淘宝插件手机版 编辑:程序博客网 时间:2024/04/30 14:19
这是我的第一篇技术博客,很久之前就萌生写技术博客的想法,一直没有付诸实践,典型的拖延症患者。最近在使用CAN总线的过程中遇到一些问题,就以此作开始,记录自己的技术成长之路,且方便以后查阅。
STM32F系列的CAN总线配置分为接收和发送两部分的配置;其中接收部分的过滤器以及CAN总线速率选择配置尤为重要。因带有测试性质,所以我选择的是1M的通信速率,看看能否达到40米的通信距离。CAN总线的基本配置:
1> 采用扩展帧格式,其中EXID的0-15位被看做是各个节点的地址,其余各位用于控制读 写操作以及命令标识ID,区分不同的操作命令
2> 通信速率为1M,使能自动重传
3> 接收过滤器采用标示符屏蔽模式,且只根据自定义的地址位进行屏蔽
下面重点总结一下关于速率与过滤器配置的注意事项。
位时间特性逻辑通过采样来监视串行的CAN总线,并且通过与帧起始位的边沿进行同步,及通过与后面的边沿进行重新同步,来调整其采样点。 它的操作可以简单解释为,如下所述把名义上的每位时间分为3段:
● 同步段(SYNC_SEG):通常期望位的变化发生在该时间段内。其值固定为1个时间单元(1 x Tcan)。
● 时间段1(BS1):定义采样点的位置。它包含CAN标准里的PROP_SEG和PHASE_SEG1。其值可以编程为1到16个时间单元,但也可以被自动延长,以补偿因为网络中不同节点的频
率差异所造成的相位的正向漂移。
● 时间段2(BS2):定义发送点的位置。它代表CAN标准里的PHASE_SEG2。其值可以编程为1到8个时间单元,但也可以被自动缩短以补偿相位的负向漂移。 重新同步跳跃宽度(SJW) 定义了,在每位中可以延长或缩短多少个时间单元的上限。其值可以编程为1到4个时间单元。有效跳变被定义为,当bxCAN自己没有发送隐性位时,从显性位到隐性位的第1次转变。如果在时间段1(BS1)而不是在同步段(SYNC_SEG)检测到有效跳变,那么BS1 的时间就被延长最多SJW那么长,从而采样点被延迟了。 相反如果在时间段2(BS2)而不是在SYNC_SEG检测到有效跳变,那么BS2 的时间就被缩短最多SJW那么长,从而采样点被提前了。
CAN总线的时钟为36MHz,根据如下图的位时间与波特率的关系,根据采样点设置 CiA 推荐的值:
75% when 波特率 > 800K
80% when 波特率 > 500K
87.5% when 波特率 <= 500K
CAN总线分频为4,分频后时钟9MHz,
BS1 = 6Tcan,BS2 = 2Tcan,采样点的值为(1 + 6)/(1 + 6 + 2) = 77.77%,满足采 样点的推荐值
关于接收过滤器的设置,采用32位屏蔽模式,屏蔽位为EXID0-EXID15,注意屏蔽 位的设置需要向左移3位,如下图所示。
CAN双绞线规格如下:
总线长度
导线电阻
导线横截面
终端电阻
最大通信速率
0-40m
<70mΩ/m
0.25-0.34mm2
AWG23、AWG22
124Ω %1
1Mbit/s
at 40m
40-300m
<60mΩ/m
0.34-0.6mm2
AWG22、AWG20
127Ω %1
>500Kbit/s
at 100m
300-600m
<40mΩ/m
0.5-0.6mm2
AWG20
127Ω %1
>100Kbit/s
at 500m
600-1000m
<20mΩ/m
0.75-0.8mm2
AWG18
127Ω %1
>50Kbit/s
at 1000m
位速率/kbps
1000
500
250
125
100
50
20
10
最大距离/m
40
130
270
530
620
1300
3300
6700
终端电阻采用双绞线传输时必须在干线的两端安装终端电阻,以避免出现信号反射。终端电阻要求如下:120偶姆1%金属膜1/4瓦
注意:终端电阻只能安装在干线两端,不可安装在支线末端。根据以上配置,选择家用的网线进行测试;1MHz速率下,已达到25米的距离。
- STM32Fxx系列CAN总线配置总结
- CAN总线使用总结
- can总线总结-硬件
- CAN总线基础总结
- CAN总线基础总结
- CAN总线学习总结
- CAN总线基础总结
- can总线资源总结
- can总线配置
- PIC32MX的CAN总线配置
- STM32系列第25篇--CAN总线
- STM32——CAN总线系列
- STM32 CAN 总线 自我学习总结
- STM32的CAN总线学习总结
- STM32的CAN总线过滤器的配置
- CAN总线与LIN终端配置方法
- STM32F103 CAN总线配置与通信小记
- CAN总线学习系列之七——CAN总线软件编程
- unix环境高级编程——库函数的缓冲区
- 使用Python的元类实现AOP监控类方法调用过程
- RFID作业(第三次)
- java的xml学习[JDOM方式解析XML文档]
- leetCode | Add Two Numbers
- STM32Fxx系列CAN总线配置总结
- Java获取本机ip的方法
- LeetCode(034) Search For a Range (Java)
- Linux下使用Shell脚本实现ftp的自动上传下
- 即时通信之Bmob开发11
- 二分查找法
- Android Settings(系统设置)源码分析(一)
- 如何系统地学习数据挖掘?
- 人大金仓-逻辑备份、还原