STM32Fxx系列CAN总线配置总结

    这是我的第一篇技术博客,很久之前就萌生写技术博客的想法,一直没有付诸实践,典型的拖延症患者。最近在使用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米的距离。





猜你喜欢

转载自blog.csdn.net/zhaoyun_zzz/article/details/45022685