CAN波特率设置及寄存器设置
- 格式:doc
- 大小:16.50 KB
- 文档页数:3
can波特率自动设置算法
Can总线通信中,波特率是非常重要的参数,因为它直接影响数据的传输速度和通信质量。
为了确保Can总线通信的可靠性和稳定性,需要对波特率进行精确设置。
然而,手动设置Can总线的波特率需要耗费大量时间和精力,而且容易出现误操作。
因此,研究Can波特率自动设置算法成为当前热门研究方向之一。
Can波特率自动设置算法通常基于Can总线的物理特性和协议规定,通过一系列测试和分析,自动确定最佳的波特率设置。
目前已经有很多Can波特率自动设置算法被提出,例如基于时间抽样的算法、基于误码率的算法、基于自适应滤波的算法等。
其中,基于时间抽样的算法是比较常用的一种算法。
该算法通过对Can数据帧的采样时间和数据长度进行测量和分析,来确定最佳的波特率设置。
该算法具有简单、可靠、高效的特点,并且能够适用于各种不同的Can总线应用场景。
总之,Can波特率自动设置算法的研究对于提高Can总线通信的性能和可靠性具有重要意义,未来还需要进一步深入研究和优化。
- 1 -。
STM32CAN波特率设置及采样点设置
⼀、CAN波特率
STM32 位时间定义:
●同步段(SYNC_SEG):通常期望位的变化发⽣在该时间段内。
其值固定为1
个时间单元(1 x tCAN)。
●时间段1(BS1):定义采样点的位置。
它包含CAN 标准⾥的 PROP_SEG 和
PHASE_SEG1。
其值可以编程为1 到16 个时间单元,但也可以被⾃动延
长,以补偿因为⽹络中不同节点的频率差异所造成的相位的正向漂移。
●时间段2(BS2) :定义发送点的位置。
它代表CAN 标准⾥的
PHASE_SEG2。
其值可以编程为1 到8 个时间单元,但也可以被⾃动缩短
以补偿相位的负向漂移
BRP[9:0]: 波特率分频器
PCLK1 = 36M
bps = 36M/(BRP[9:0]*(BS1+BS2+SYNC_SEG))
其中SYNC_SEG固定为1个时间单元所以 bps = 36M/(BRP[9:0]*(BS1+BS2+1)),此时注意跟同步跳转宽度SJW没关系,尽管他也⼀直设置为1.
⼆、CAN采样点
采样点位于时间段1和时间段2之间。
根据CIA推荐采样点,最好设置在85%~90%。
在⽹上查了好多,基本上都是这么计算(BS1+1)/(1+BS1+BS2),得出的结果就是BS1⽐较⼤⽽BS2⽐较⼩基本上为1.。
CAN波特率设置时的参数计算CAN(Controller Area Network)总线最早由德国 BOSCH公司提出,主要用于汽车内部测量与控制中心之间的数据通信。
由于其良好的性能,在世界范围内广泛应用于其他领域当中,如工业自动化、汽车电子、楼宇建筑、电梯网络、电力通讯和安防消防等诸多领域,并取逐渐成为这些行业的主要通讯手段。
Can控制器器只需要进行少量的设置就可以进行通信,其中较难设置的部分就是通信波特率的计算。
CAN总线能够在一定的范围内容忍总线上CAN节点的通信波特率的偏差,这种机能使得CAN总线有很强的容错性,同时也降低了对每个节点的振荡器精度。
实际上,CAN总线的波特率是一个范围。
假设定义的波特率是250KB/S,但是实际上根据对寄存器的设置,实际的波特率可能为200~300KB/S(具体值取决于寄存器的设置)。
CAN波特率设置时需要计算几个参数,这些参数共同决定波特率大小,由于计算比较复杂,希望有一个简易步骤,本人经过研究,找到一个简易办法,现贴出来分享,不对的地方请留言指正。
需要说明的是,本人使用的can控制器是AT89C51CC03单片机中的can首先,确定一下各项参数的取值范围:参数范围编程值说明BRP [1..64] 0-63 定义时间量子(时间份额)的长度tqSync_Seg 1 tq 固定长度,总线输入与系统时钟同步Prog_Seg [1..8]tq 0-7 补偿物理延时时间Phase_Seg1 [1..8]tq 0-7 可通过同步暂时延长Phase_Seg2 [1..8]tq 0-7 可通过同步暂时缩短TSJW [1..4]tq 0-3 不能比任何一相位缓冲段长以上是参数的取值范围,编程值是实际往寄存器里写的值,为实际取值减1。
下面说一下步骤:1、首先计算CAN时钟和波特率的比值;2、根据比值确定预分频器的分频值BRP,计算时间量子的数目,这个数值范围是8-25;3、将时间量子数减1(去掉Sync_Seg)后在Prog_Seg Phase_Seg1 Phase_Seg2三个参数中分配;4、Prog_Seg和整个线路的时延有关,一般不太好确定,可以按下面的原则进行分配:Prog_Seg<=Phase_Seg1<=Phase_Seg2 ;Phase_Seg1=Phase_Seg2 或者 Phase_Seg1+1=Phase_Seg2;5、SJW取Phase_Seg1和4中小的那个。
【经验分享】KE06 MSCAN 波特率相关寄存器的设置讲解本经验分享主要讲解如何设置KE06 MSCAN 模块波特率相关的寄存器, MSCAN 波特率相关的寄存器有MSCAN_CANBTR0,MSCAN_BTR1,具体控制的位有:同步跳转宽度SJW,波特率分频系数BPR ,采样配置SAMP ,时间段1 TSEG1,时间段2 TSEG2。
本文分别使用外部晶振8MHZ 以及bus 时钟20Mhz 作为MSCAN 的时钟源,讲解如何配置相关寄存器的值。
一,CAN 时钟系统CAN 时钟发生电路如下图所示:图1从图中可以看到,MSCAN 模块可以选择两种时钟源:0外部晶振和1总线时钟,选择通过MSCAN_CANCTL1[CLKSRC]选择。
CAN 协议要求时钟源的振荡器精度要求高达0.4%。
如果使用了锁相环PLL ,由于抖动,则最好选择振荡器时钟而不是总线时钟,尤其对于较快的CAN 总线速率,PLL 锁可能太宽,不能确保所需的时钟精度。
图中Tq 是经过分频后的时间份额时钟,该时钟是MSCAN 处理时间的最小单位。
fTq=fCANCLK Prescaler二,位时间KE06可编程位速率(波特率)可高达1Mbps ,位时间即可编程位速率的倒数: Bit time= 1位速率=prescaler fCANCLK (1+时段1+时段2) 其中,时段1:TSEG1+1时段2:TSEG2+1位时间可以分为三段:1)SYNC_SEG:长度固定为1,信号边沿出现在本阶段2)时段1Time Segment1:包括符合CAN总线的PROP_SEG和PHASE_SEG1,要求4~16个时间份额。
3)时段2 Time Segment2: 包括符合CAN总线的PHASE_SEG2,要求包含2~8个时间份额。
图2可以看出,位时间要求包含8~25个时间份额,所以可以通过已知波特率来确定SYNC_SEG+Time Segment1+Time Segment2整体值,其中SYNC_SEG=1,那么其他两个时间段的值如何确定呢?这个就需要遵从CAN标准的位时段设置,如下表:表1 Bosch CAN 2.0A/B 位时间设置图2中还包含了采样点,采样点有单点和三倍采样两种,具体是单点还是三倍由MSCAN_CANBTR1[SAMP]寄存器位确定.那么什么时候需要将SAMP位置1呢?通常在波特率位高的时候,SAMP 位为0,;波特率为中低,则SAMP 为1,采用三倍采样。
flexcan波特率计算
在FlexCAN中,波特率计算是非常重要的,它涉及到如何设置CAN控制器的时钟分频和时间段参数,以确保CAN总线的通信速率符合要求。
波特率的计算公式如下:
波特率 = 时钟频率 / (时间段参数1 + 时间段参数2 + 1)。
其中,时间段参数1和时间段参数2是CAN控制器的寄存器设置,时钟频率是CAN控制器的时钟频率。
首先,你需要确定你的系统时钟频率。
然后,根据你所需的波特率来选择合适的时间段参数1和时间段参数2。
一般情况下,时间段参数1和时间段参数2的和越大,波特率越小,反之亦然。
举个例子,假设你的系统时钟频率为8MHz,而你需要设置CAN 总线的波特率为500kbps。
根据上面的公式,我们可以得出:
500000 = 8000000 / (时间段参数1 + 时间段参数2 + 1)。
在这个例子中,你需要根据所使用的CAN控制器的具体要求,
选择合适的时间段参数1和时间段参数2的数值,来满足上述的波特率计算公式。
一般来说,CAN控制器的手册或者数据表中都会提供相关的公式和参数范围,以便你进行波特率的计算和设置。
除了上述的基本计算方法,还有一些高级的波特率计算技术,比如采用微调时间段参数以达到更精确的波特率控制。
这些方法需要更深入的了解和实践,但可以帮助你更好地控制CAN总线的通信速率。
总的来说,波特率的计算涉及到时钟频率、时间段参数和具体的CAN控制器要求。
通过合理的计算和设置,可以确保CAN总线的通信速率符合预期,从而保证系统的稳定和可靠的通信。
CANoe波特率设置函数详解1. 函数定义CANoe是一款用于开发、测试和分析CAN总线应用的软件工具。
它提供了丰富的功能和工具,能够模拟CAN网络、发送和接收CAN消息,并进行波特率设置。
在CANoe中,波特率设置函数用于配置和调整CAN总线的通信速率。
这些函数允许用户指定发送和接收数据的速度,以确保网络中的所有节点都能够按照相同的速率进行通信。
2. 函数用途波特率设置函数主要用于以下几个方面:2.1 确定CAN总线通信速率在一个CAN网络中,不同节点之间需要以相同的速率进行通信,才能正确地发送和接收消息。
通过使用波特率设置函数,可以将所有节点配置为相同的通信速度,以确保数据传输的准确性。
2.2 配置发送数据速率在一些应用场景中,需要按照一定频率发送数据到CAN总线上。
通过使用波特率设置函数,可以指定发送数据的速率,并控制发送频率。
2.3 配置接收数据速率类似地,在一些应用场景中,需要按照一定频率从CAN总线上接收数据。
通过使用波特率设置函数,可以指定接收数据的速率,并控制接收频率。
3. 函数工作方式波特率设置函数的工作方式如下:3.1 初始化CAN通道在使用波特率设置函数之前,需要先初始化CAN通道。
这个过程包括打开CAN通道、配置硬件参数、初始化相关寄存器等。
初始化完成后,才能调用波特率设置函数。
3.2 设置波特率参数在进行波特率设置时,需要指定一些参数,以确定CAN总线的通信速率。
这些参数包括:•波特率值:用于指定数据传输的速度。
常见的波特率值有125kbps、250kbps和500kbps等。
•触发模式:用于指定何时发送或接收CAN消息。
常见的触发模式有周期性触发和事件触发两种。
•采样点:用于指定在一个位时间内进行采样的时间点。
•同步跳转宽度:用于指定同步跳转宽度。
3.3 应用波特率参数当所有的波特率参数都配置完成后,可以将这些参数应用到CAN总线上。
应用过程中,会根据配置的参数来调整CAN控制器和物理层设备,以确保数据传输按照指定速度进行。
can波特率测试方法CAN波特率测试方法CAN(Controller Area Network)是一种广泛应用于汽车、工业控制和通信领域的串行总线通信协议。
为了确保CAN网络的正常运行,波特率测试是必不可少的步骤。
以下是一种常用的CAN波特率测试方法:1. 硬件准备:准备两台CAN总线分析仪,连接到要测试的CAN网络上。
确保分析仪与被测设备的CAN通信接口正确连接,并确保电源供应正常。
2. 设置波特率:在分析仪上设置要测试的CAN波特率。
根据实际需求,选择合适的波特率,并确保两台分析仪的波特率设置相同。
3. 发送测试帧:在一台分析仪上创建一个测试帧,并将其发送到另一台分析仪。
测试帧的内容可以是任意的数据,目的是检查CAN通信的稳定性和可靠性。
4. 检查接收:在接收测试帧的分析仪上,确认是否成功接收到测试帧。
如果接收到了完整的测试帧,说明CAN通信正常,可以继续进行下一步。
5. 测试中断能力:在一台分析仪上发送一个中断帧,观察另一台分析仪是否正确地响应并中断当前通信。
这个步骤可以测试CAN总线的中断能力和信号处理的准确性。
6. 测试误码率:在一台分析仪上发送一系列的数据帧,记录接收到的误码率。
高误码率可能是由于波特率不匹配、电缆损坏或其他原因引起的问题。
7. 调整波特率:如果测试中发现误码率较高,可能需要调整CAN设备的波特率设置。
根据误码率的变化程度,逐步调整波特率,直到获得理想的通信质量。
注意:在进行CAN波特率测试时,需要注意以下事项:- 确保测试环境的稳定性和可靠性,避免其他干扰因素对测试结果的影响。
- 如果有可能,使用专业的CAN分析仪进行测试,以确保测试结果的准确性。
- 在测试过程中,及时记录和保存测试数据,以备后续分析和比较。
总结:通过以上步骤,可以有效地进行CAN波特率测试,并确保CAN网络的正常运行。
此测试方法可以帮助识别和解决可能出现的通信问题,提高CAN网络的可靠性和稳定性。
can 常用配置参数"can" 是控制器局域网络(Controller Area Network)的缩写,它是一种用于在微控制器和其他嵌入式系统之间进行通信的串行通信协议。
在使用"can"时,有一些常用的配置参数需要考虑:1. 波特率(Baud Rate),波特率是指每秒传输的位数,它决定了"can"总线的通信速度。
常见的波特率包括 125 kbit/s、250 kbit/s、500 kbit/s 和 1 Mbit/s 等。
2. 位定时器配置(Bit Timing Configuration),这些参数包括同步段长度、传输段长度、采样点配置等,它们决定了每个"can"信号的时间分配和采样点的位置。
3. 滤波器设置(Filter Configuration),"can"控制器可以配置接收过滤器,以便只接收特定标识符的消息,这有助于减少系统的负载和提高通信效率。
4. 硬件连接(Hardware Connection),在使用"can"协议时,需要正确连接传输线路和终端电阻,以确保信号的质量和稳定性。
5. 错误处理机制(Error Handling),"can"协议具有内置的错误检测和处理机制,包括错误帧重传、错误计数器等,需要根据具体的应用场景进行合适的配置。
6. 模式设置(Mode Configuration),"can"控制器通常具有不同的工作模式,例如正常模式、环回模式、静默模式等,需要根据实际需求进行选择和配置。
综上所述,"can"协议的常用配置参数涉及到通信速率、时间分配、过滤设置、硬件连接、错误处理和工作模式等多个方面。
在实际应用中,需要根据具体的系统要求和硬件环境进行合理的配置,以确保通信的稳定性和可靠性。
附件2:CAN参数设置说明书说明书版本:V2.02更新日期:2016.06.01目录一、概述 (1)二、波特率设置 (2)2.1兼容SJA1000模式 (2)2.2高级模式 (3)三、工作模式 (6)四、滤波设置 (8)4.1滤波寄存器 (8)4.2滤波模式 (10)一、概述为方便不同用户的需求,USB-CAN适配器中对参数设置提供了两种模式:1.简洁模式,该模式下提供了波特率、工作模式、滤波模式等的简单选项,在使用随机附带的USB-CAN Tool 调试工具或用户自定义编程时,仅需进行简单选择设置即可快速配置适配器,适合入门或刚接触CAN通信不久的用户使用;2.专业模式,该模式下用户可以通过修改多种寄存器参数来实现自定义波特率,自定义硬件滤波方式等,适合较熟悉CAN通信或发烧友等用户使用。
当然,这两种模式是根据您的使用情况自由选择的。
通过调用ControlCAN.dll中的“VCI_SetReference2”函数进行参数设置,该函数的使用流程如下图,关于函数的详细介绍请参见《接口函数库(二次开发库)使用说明书.pdf》注意:CAN总线在正常收发数据的时候,尽量不要通过USBCAN适配器修改CAN总线参数或关闭CAN总线,应等数据收发停止或将USBCAN适配器脱离CAN总线再进行相应操作。
二、波特率设置2.1 兼容SJA1000模式为了方便(SJA1000)CAN控制器的用户,USB-CAN适配器中做了相应的兼容性处理,用户只需配置相应的Timing0(BTR0)、Timing1(BTR1)寄存器的值,即可配置得到相应的波特率。
而不必接触相对复杂、专业的多个寄存器参数。
通过该模式设置波特率时,SetReference2函数的RefType参数须传递10,具体应用可参考本小节后的示例代码。
常规波特率索引值对照表如下:CAN波特率Timing0(BTR0) Timing1(BTR1)10 Kbps 0x31 0x1C20 Kbps 0x18 0x1C40 Kbps 0x87 0xFF50 Kbps 0x09 0x1C80 Kbps 0x83 0xFF100 Kbps 0x04 0x1C125 Kbps 0x03 0x1C200 Kbps 0x81 0xFA250 Kbps 0x01 0x1C400 Kbps 0x80 0xFA500 Kbps 0x00 0x1C666 Kbps 0x80 0xB6800 Kbps 0x00 0x161000 Kbps 0x00 0x1433.33 Kbps 0x09 0x6F66.66 Kbps 0x04 0x6F83.33 Kbps 0x03 0x6F注:1.配置波特率时,用户只需要按照SJA1000(16MHz)给的波特率参数进行设置即可。
CAN总线能够在一定的范围内容忍总线上CAN节点的通信波特率的偏差,这种机能使得CAN总线有很强的容错性,同时也降低了对每个节点的振荡器精度。
实际上,CAN总线的波特率是一个范围。
假设定义的波特率是250KB/S,但是实际上根据对寄存器的设置,实际的波特率可能为200~300KB/S(具体值取决于寄存器的设置)。
在CAN的底层协议里将CAN数据的每一位时间(TBit)分为许多的时间段(Tscl),这些时间段包括:
A.位同步时间(Tsync)
B.时间段1(Tseg1)
C.时间段2(Tseg2)
其中位同步时间占用1个Tscl;时间段2占用(Tseg1+1)个Tscl;时间段2占用(Tseg2+1)个Tscl,所以CAN控制器的位时间(TBit)就是:
TBit=Tseg1+Tseg2+Tsync=(TSEG1+TSEG2+3)*Tscl
CAN的波特率(CANbps)就是1/TBit。
Tsync=1Tscl
但是这样计算出的值是一个理论值。
在实际的网络通信中由于存在传输的延时、不同节点的晶体的误差等因素,使得网络CAN的波特率的计算变得复杂起来。
CAN在技术上便引入了重同步的概念,以更好的解决这些问题。
这样重同步带来的结果就是要么时间段1(Tseg1)增加TSJW(同步跳转宽度SJW+1),要么时间段减少TSJW,因此CAN的波特率实际上有一个范围:
1/(Tbit+Tsjw) ≤CANbps≤1/(Tbit-Tsjw)
CAN有波特率的值四以下几个元素决定:
A.最小时间段Tscl;
B.时间段1 TSEG1;
C.时间段2 TSEG2;
D.同步跳转宽度SJW
SJW(重同步跳转宽度)决定了一次重同步期间一个位时间被延长或缩短的时间量子Tscl是通过总线时序寄存器设置计算的。
Tscl=(BRP+1)/FVBP。
FVBP为微处理器的外设时钟。
而TSEG1与TSEG2又是怎么划分的呢?TSEG1与TSEG2的长度决定了CAN数据的采样点,这种方式允许宽范围的数据传输延迟和晶体的误差。
其中TSEG1用来调整数据传输延迟时间造成的误差,而TSEG2则用来调整不同点节点晶体频率的误差。
TSEG1与TSEG2的是分大体遵循以下规则:
Tseg1≥Tseg2≥2TSJW;Tseg2≥2Tscl
总的来说,对于CAN的波特率计算问题,把握一个大的方向就行了,其计算公式可了规结为:
BitRate = Fpclk/( (BRP+1) * ((Tseg1+1)+(Tseg2+1)+1))
对于AT90CAN128的波特率:
BRP(0~63);SEG1(0~7); SEG2(0~7); SYNC(0~7);SJW(0~3)
Tbit(1) = Tsyns + Tprs + Tphs1 + Tphs2
1.Tsyns = 1 x Tscl = (BRP[5..0]+ 1)/clkIO (= 1TQ)
2.Tprs = (1 to 8) x Tscl = (PRS[2..0]+ 1) x Tscl
3.Tphs1 = (1 to 8) x Tscl = (PHS1[2..0]+ 1) x Tscl
4.Tphs2 = (1 to 8) x Tscl = (PHS2[2..0](2)+ 1) x Tscl
5.Tsjw = (1 to 4) x Tscl = (SJW[1..0]+ 1) x Tscl
Notes: 1. The total number of Tscl (Time Quanta) in a bit time must be between 8 to 25.
在一个BIT时间内Tscl的总数必须在8到25之间;
2. PHS2[2..0] 2 is programmable to be maximum of PHS1[2..0] and 1.
第二时间段是可控制在第一时间段的最大值和一个BIT时间之间。
AT90CAN128设置
CAN时序寄存器1 CANBT1
BRP5:0 :波特率预定标器
CAN控制器系统时钟Tscl周期可传播和确定单个位定时。
Tscl=(BRP[5:0]+1)/clk frequency 这里是频率的形式,也可化为周期CAN时序寄存器2 CANBT2
SJW1:0 :重复同步跳转宽度
为了比较不同总线控制器时钟振荡器间的移相,控制器必须重复同步跳转宽度来定义时钟周期的最大数。
一个位周期可由一个重复同步来缩短或者延长。
Tsjw=Tscl x (SJW[1:0]+1)
PRS2:0 :传播时间段
这部分位时间用于补偿网络中的物理延时。
它是总线上单个传播时间总和的两倍,输入比较器延时或者输出驱动器延时。
Tprs=Tscl x (PRS[2:0]+1)
CAN时序寄存器3 CANBT3
位6:4——PHS22:0 :段2
该段用于补偿段界限错误。
该段可由重复同步跳转宽度来缩短。
Tphs2=Tscl x (PHS2[2:0]+1)
位3:1——PHS12:0 :段1
该段用于补偿段界限错误。
该段可由重复同步跳转宽度来延长。
Tphs1=Tscl x (PHS1[2:0]+1)
SMP:采样点
0:一次,在采样点
1:三次,总线的“三次采样”是采样点和“两次超过Tscl周期1/2的长度”。
该结果为三个值的主要判定的响应。
晶振:4M PRS=4,PHS1=PHS2=3,BRP=59,SJW=0 CANBT1=0X76;CANBT2=0X04;CANBT3=0X36
CANGCON|=(1〈〈SWRES〉;//设置为复位模式CANBT1=0X7E; //设置波特率5k, 8MHz,25TQ, BRP=63 CANBT2=0X2E; //SJW=1,PRS=7
CANBT3=0X7F; //PH2=7,PH1=7。