• CAN波特率设置


    通过对CAN位定时寄存器CANBIT以及CAN波特率预分频扩展寄存器CANBRPE的设置可以得到需要的CAN通信波特率。

    CAN的位定时配置不当,将使得CAN模块无法按照目标波特率接入CAN网络,将导致CAN节点无法通信正常。

    根据CAN规范,位时间被分成4个时间段:同步段(Sync_Seg)、传播时间段(Prop_Seg)、相位缓冲段1(Phase_Seg1)和相位缓冲段2(Phase_Seg2)

    每个段由具体、可编程数量的时间份额(time quanta)组成,时间份额是位时间的基本时间单元,它的长度(tq)由CAN控制器的系统时钟(fcan)和波特率预分频器BRP定义:tq=BRP/fcan

    CAN模块的系统时钟fcan是其CAN模块时钟(CAN_CLK)输入的频率。

    各参数取值范围:

    参数                         范围                   编程值                     说明

    BRP                        1~64                   0~63                    波特率分频器,定义时间单元tq的时间长度

    Sync_Seg               1tq                                                  固定长度,总线输入与系统时钟同步

    Prop_Seg               1~8tq                  0~7                      补偿物理延时时间

    Phase_Seg1          1~8tq                  0~7                      相位缓冲段1,补偿边沿阶段的误差,可通过同步暂时延长

    Phase_Seg2          1~8tq                   0~7                      相位缓冲段2,补偿边沿阶段的误差,可通过同步暂时缩短

    SJW                       1~4t                  0~3                       同步跳转宽度,不能比相位缓冲段长

    位时间长度为:[TSEG1+TSEG2+3]tq或[Sync_Seg+Prop_Seg+Phase_Seg1+Phase_Seg2]tq

    位定时配置的编程是由两个CANBTR决定的:Prop_Seg与Phase_Seg1 的和(作为TSEG1)与Phase_Seg2(作为TSEG2)组合成一个字节,而SJW与BRP组合成另一个字节。

    SAMP  TSEG22  TSEG21  TSEG20  TSEG13  TSEG12  TSEG11  TSEG10

    SJW1   SJW0      BRP5       BRP4      BRP3       BRP2       BRP1      BRP0

    将结果配置写入寄存器:((TSeg2-1)<<12)|((TSeg1-1)<<8)|((SJW-1)<<6)|(BRP-1)

    参数的计算步骤

    1、首先计算CAN时钟和波特率的比值

    2、根据比值确定BRP和时间量子的数目,一个位时间总的时间份额值可以设置在8~25的范围内

    3、Sync_Seg的值固定为1tq,量子数目减1后再分配

    4、Prop_Seg其长度视系统测量的延迟时间而定,必须为可扩展的CAN总线系统定义最大的总线长度和最大的节点延迟。

    5、Prog_Seg<=Phase_Seg1<=Phase_Seg2;Phase_Seg1=Phase_Seg2 或者 Phase_Seg1+1=Phase_Seg2

    6、Phase_Seg2不能比CAN控制器的信息处理时间短

    7、同步跳转宽度SJW取4和 Phase_Seg1中小的那个

    总的来说,波特率BitRate=Fpclk/((BRP+1)*((TSEG1+1)+(TSEG2+1)+1)

    举例说明:

    参考来源:http://www.docin.com/p-498322094.html

                     https://blog.csdn.net/sudogod/article/details/15503867

  • 相关阅读:
    初识nginx
    Keepalived 配置实例
    ssh学习小记
    代码开发、测试及发布
    需求改进&系统设计
    软件设计原则、设计模式学习+部分实现
    自我介绍+课程 6 问
    python函数嵌套出现报错UnboundLocalError原理的猜测(有解决办法,但是对于报错原理不确定)
    python tkinter 问题(多个Listbox选取显示问题,虚拟事件的特点为何虚拟,listbox.nearest函数与虚拟事件绑定返回值错误,StringVar类参数调用时单向性,线程无响应)
    python tkinter pack布局遇到的错误和问题总结(无图)
  • 原文地址:https://www.cnblogs.com/shinedaisiki/p/9950363.html
Copyright © 2020-2023  润新知