怎样进行CAN波特率计算
can通讯波特率计算
can通讯波特率计算
在CAN总线通信中,波特率决定了数据传输的速度和可靠性。
CAN 总线的标准波特率为1Mbps,但实际应用中通常使用较低的波特率(如250kbps或500kbps)以提高抗干扰性能。
计算CAN通信中的波特率需要考虑以下几个因素:
1. 时钟源频率:CAN控制器的时钟源频率通常为16MHz或20MHz。
2. 分频系数:波特率发生器通过分频来产生所需的波特率。
分
频系数为时钟源频率除以所需的波特率。
3. 采样点数:CAN总线通信中采用了采样点技术来确保数据传
输的可靠性。
采样点数为每个位的采样次数。
在CAN2.0B协议中,采用了三种采样点数:75%、87.5%和100%。
根据以上计算公式可知,波特率=时钟源频率/(分频系数*采样
点数)。
例如,如果时钟源频率为16MHz,分频系数为8,采样点数为87.5%,则所得到的波特率为125kbps。
在实际应用中,为了提高通信的可靠性,我们可以通过修改采样点数来调整波特率。
同时,由于CAN总线是一种多主机共享的总线结构,不同的节点之间需要使用相同的波特率才能保证正常通信。
因此,在设计CAN总线系统时,需要仔细考虑波特率的选择和设置。
- 1 -。
STM32 can波特率的计算
500K/S的计算CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;CAN_InitStructure.CAN_Prescaler=1;每一位的Tq数目= 1 (固定SYNC_SEG) + 8 (BS1) + 7 (BS2) = 16 如果CAN时钟是8 MHz : (8M / 1 ) / 16 = 500K其中:1 为分频系数16 为每一位的Tq数目为了设置为100K, 把分频系数改为5即可, BS1 BS2 不变每一位的Tq数目= 1 (固定) + 8 (BS1) + 7 (BS2) = 16如果CAN时钟是8 MHz : (8M / 5 ) / 16 = 100K如果想得到1M 的波特率,CAN时钟仍然是8 MHz的情况下,分频系数不变应该改变BS1 BS2CAN_InitStructure.CAN_BS1=CAN_BS1_5tq;CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;每一位的Tq数目= 1 (固定) + 5 (BS1) + 2 (BS2) = 8如果CAN时钟是8 MHz : (8M / 1 ) / 8 = 1000K另外尽可能的把采样点设置为CiA 推荐的值:75% when 波特率> 800K80% when 波特率> 500K87.5% when 波特率<= 500K所以对于100K 的波特率(假定使用8MHz 时钟)可以修改该BS1 BS2 为:CAN_InitStructure.CAN_Prescaler=5;CAN_InitStructure.CAN_BS1=CAN_BS1_13tq;CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;(1+13) / (1+13+2) = 87.5%所以对于500K 的波特率(假定使用8MHz 时钟)可以修改该BS1 BS2 为:CAN_InitStructure.CAN_Prescaler=1;CAN_InitStructure.CAN_BS1=CAN_BS1_13tq;CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;(1+13) / (1+13+2) = 87.5%所以对于1000K 的波特率(假定使用8MHz 时钟)可以修改该BS1 BS2 为:CAN_InitStructure.CAN_Prescaler=1;CAN_InitStructure.CAN_BS1=CAN_BS1_5tq;CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;(1+5) / (1+5+2) = 75%个人见解, 仅供参考。
CAN波特率设置时的参数计算
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中小的那个。
STM32_CAN波特率计算
一般设置CAN_SJW = 1,总结程序发现!!!can时钟是RCC_APB1PeriphClock(APB1从APB2而来,分频系数不同,导致APB1不同,mini版中一般是APB2为72Mhz,APB1是36MHz),你要注意CAN时钟频率CAN波特率=RCC_APB1PeriphClock/(1+CAN_BS1+CAN_BS2)/CAN_Prescaler ;另外尽可能的把采样点设置为CiA 推荐的值:75% when 波特率> 800K80% when 波特率> 500K87.5% when 波特率<= 500K所以对于100K 的波特率(假定使用8MHz 时钟)可以修改该BS1 BS2 为:CAN_InitStructure.CAN_Prescaler=5;CAN_InitStructure.CAN_BS1=CAN_BS1_13tq;CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;(1+13) / (1+13+2) = 87.5%CAN波特率计算—网友总结STM32里的CAN 支持2.0A,2.0B, 带有FIFO,中断等, 这里主要提一下内部的时钟应用.bxCAN挂接在APB1总线上,采用总线时钟,所以我们需要知道APB1的总线时钟是多少. 我们先看看下图,看看APB1总线时钟:APB1时钟取自AHB的分频, 而AHB又取自系统时钟的分频, 系统时钟可选HSI,HSE, PLLCLK, 这个在例程的RC设置里都有的,然后再看看有了APB1的时钟后,如何算CAN的总线速率, 先看下图:有了上边的这个图,基本就清楚了.总线时钟MHz (3+TS1+TS2)*(BRP+1)===================================================下面是我的计算:CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;(lyp发现大部分都是设置这个SJW为1tq,导致一些人把这个当做一个系数,这是错误的,因为这个公式里的1tq是固定的同步段(SYNC_SEG),与SJW无关!!!)CAN_InitStructure.CAN_BS1 = CAN_BS1_3tq;CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;CAN_InitStructure.CAN_Prescaler = 4;//2nominal bit time(3+5+1)tq=9tq关于分频系数查看system_stm32f10x.c下面的static void SetSysClockTo72(void) 函数/* HCLK = SYSCLK *//* PCLK2 = HCLK *//* PCLK1 = HCLK/2 */所以can时钟72MHZ/2/4=9 Mhz????????============================================================================================= void CAN_Configuration(void){CAN_InitTypeDef CAN_InitStructure;CAN_FilterInitTypeDef CAN_FilterInitStructure;/* CAN register init */CAN_DeInit();CAN_StructInit(&CAN_InitStructure);/* CAN cell init */CAN_InitStructure.CAN_TTCM=DISABLE;CAN_InitStructure.CAN_ABOM=DISABLE;CAN_InitStructure.CAN_AWUM=DISABLE;CAN_InitStructure.CAN_NART=DISABLE;CAN_InitStructure.CAN_RFLM=DISABLE;CAN_InitStructure.CAN_TXFP=DISABLE;CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;CAN_InitStructure.CAN_BS1=CAN_BS1_9tq;CAN_InitStructure.CAN_BS2=CAN_BS2_8tq;CAN_InitStructure.CAN_Prescaler=200;CAN_Init(&CAN_InitStructure);/* CAN filter init */CAN_FilterInitStructure.CAN_FilterNumber=0;CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMa sk;CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_16bit; CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;CAN_FilterInit(&CAN_FilterInitStructure);}注意//#define CAN_BS1_3tq ((uint8_t)0x02) /*!< 3 time quantum */拨特率10K,公式:72MHZ/2/200/(1+9+8)=0.01,即10K,和SJA1000测试通过================================================120欧姆电阻要加上!!!哦确实是CAN->BTR = (u32)((u32)CAN_InitStruct->CAN_Mode << 30) | ((u32)CAN_InitStruct->CAN_SJW << 24) |((u32)CAN_InitStruct->CAN_BS1 << 16) |((u32)CAN_InitStruct->CAN_BS2 << 20) |((u32)CAN_InitStruct->CAN_Prescaler - 1);总结一下Fpclk=36M 时can波特率为250k 的配置为/* CAN cell init */CAN_InitStructure.CAN_TTCM=DISABLE;CAN_InitStructure.CAN_ABOM=DISABLE;CAN_InitStructure.CAN_AWUM=DISABLE;CAN_InitStructure.CAN_NART=DISABLE;CAN_InitStructure.CAN_RFLM=DISABLE;CAN_InitStructure.CAN_TXFP=DISABLE;CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack;CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;CAN_InitStructure.CAN_Prescaler=9;CAN_Init(&CAN_InitStructure); 250k======================================的:将can总线波特率设置为250k在官方的can例程上给出了100k 查询和500k 中断方式的例子分别设置如下:CAN_Polling:/* CAN cell init */CAN_InitStructure.CAN_TTCM=DISABLE;CAN_InitStructure.CAN_ABOM=DISABLE;CAN_InitStructure.CAN_AWUM=DISABLE;CAN_InitStructure.CAN_NART=DISABLE;CAN_InitStructure.CAN_RFLM=DISABLE;CAN_InitStructure.CAN_TXFP=DISABLE;CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack;CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;CAN_InitStructure.CAN_Prescaler=5;CAN_Init(&CAN_InitStructure); 100k/* CAN cell init */ CAN_InterruptCAN_InitStructure.CAN_TTCM=DISABLE;CAN_InitStructure.CAN_ABOM=DISABLE;CAN_InitStructure.CAN_AWUM=DISABLE;CAN_InitStructure.CAN_NART=DISABLE;CAN_InitStructure.CAN_RFLM=DISABLE;CAN_InitStructure.CAN_TXFP=DISABLE;CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack;CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;CAN_InitStructure.CAN_Prescaler=1;CAN_Init(&CAN_InitStructure); //500k一般设置CAN_SJW = 1,总结程序发现!!!can时钟是RCC_APB1PeriphClock(APB1从APB2而来,分频系数不同,导致APB1不同,mini版中一般是APB2为72Mhz,APB1是36MHz),你要注意CAN时钟频率CAN波特率=RCC_APB1PeriphClock/(1+CAN_BS1+CAN_BS2)/CAN_Prescaler; 如果CAN时钟为8M,CAN_SJW = 1,CAN_BS1 = 8,CAN_BS2 =7,CAN_Prescaler = 2那么波特率就是=8M/(1+8+7)/2=250K=========================================得到500Kb/s的波特率CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;CAN_InitStructure.CAN_Prescaler=1;每一位的Tq数目= 1 (固定SYNC_SEG) + 8 (BS1) + 7 (BS2) = 16如果CAN时钟是8 MHz : (8M / 1 ) / 16 = 500K其中:1 为分频系数16 为每一位的Tq数目为了设置为100K, 把分频系数改为5即可, BS1 BS2 不变每一位的Tq数目= 1 (固定) + 8 (BS1) + 7 (BS2) = 16如果CAN时钟是8 MHz : (8M / 5 ) / 16 = 100K如果想得到1M 的波特率,CAN时钟仍然是8 MHz的情况下,分频系数不变应该改变BS1 BS2CAN_InitStructure.CAN_BS1=CAN_BS1_5tq;CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;每一位的Tq数目= 1 (固定) + 5 (BS1) + 2 (BS2) = 8如果CAN时钟是8 MHz : (8M / 1 ) / 8 = 1000K另外尽可能的把采样点设置为CiA 推荐的值:75% when 波特率> 800K80% when 波特率> 500K87.5% when 波特率<= 500K所以对于100K 的波特率(假定使用8MHz 时钟)可以修改该BS1 BS2 为:CAN_InitStructure.CAN_Prescaler=5;CAN_InitStructure.CAN_BS1=CAN_BS1_13tq;CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;(1+13) / (1+13+2) = 87.5%所以对于500K 的波特率(假定使用8MHz 时钟)可以修改该BS1 BS2 为:CAN_InitStructure.CAN_Prescaler=1;CAN_InitStructure.CAN_BS1=CAN_BS1_13tq;CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;(1+13) / (1+13+2) = 87.5%所以对于1000K 的波特率(假定使用8MHz 时钟)可以修改该BS1 BS2 为:CAN_InitStructure.CAN_Prescaler=1;CAN_InitStructure.CAN_BS1=CAN_BS1_5tq;CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;(1+5) / (1+5+2) = 75%个人见解, 仅供参考。
can通讯波特率计算
can通讯波特率计算can通讯是一种常用的工业领域通讯协议,而波特率则是can通讯中的一个重要参数。
波特率是指单位时间内传输的数据量,通常以比特/秒为单位表示。
在can通讯中,波特率的计算方法如下:1. 首先确定can总线的工作频率,通常为16MHz。
2. 根据需要传输的数据量和通讯距离等因素,选择合适的波特率。
can通讯支持多种波特率,例如125kbps、250kbps、500kbps、1Mbps等。
3. 根据所选波特率,计算出一个时间量化周期Tq。
以125kbps 为例,Tq=1/125000=8us。
4. 确定传输的数据位数,通常为8位。
则一个can数据帧由一个起始位、一个ID、一个控制位、8个数据位、一个CRC、一个ACK 和一个结束位组成,共计33位。
5. 根据所选波特率和数据位数,计算出一个can数据帧的传输时间,即:Tframe = 33 * Tq = 33 * 8us = 264us6. 根据传输时间计算出可以在一个时间段内传输的数据量。
以125kbps为例,一个时间段为1秒,则可以传输的数据量为:N = 1 / Tframe = 1 / 264us = 3787帧/秒7. 根据需要传输的数据量和所选波特率,计算出每个数据帧的传输时间。
以125kbps为例,每个数据帧的传输时间为:Tcan = 8 + 1 + 1 + 8 + 15 + 1 + 8 = 42Tq = 336us8. 根据每个数据帧的传输时间和可以传输的数据量,计算出所选波特率下的最大数据传输速率。
以125kbps为例,最大数据传输速率为:R = N * 8 / Tcan = 3787 * 8 / 336us = 90.01kbps 以上即为can通讯波特率的计算方法,对于can通讯的实际应用具有重要的指导意义。
CAN总线波特率的计算方法
CAN总线波特率的计算方法
BIT时间=(BRP+1)×(SJW+BS1+BS2+1)×TQ
其中,BRP为位速率预设器,范围从1到1024
SJW为同步跳转宽度,范围从1到4
BS1为位时间段1的长度,范围从1到16
BS2为位时间段2的长度,范围从2到8
TQ为一个时间量化单位,由CAN控制器提供。
一般来说,TQ是由CAN控制器的内部振荡器的频率除以预设的位频率来得到。
例如,在CAN控制器的内部振荡器频率为16MHz的情况下,要设置一个1Mbps的位率,TQ就是16MHz / 1MHz = 16
在计算波特率时,首先需要选择一个适当的位速率预设器BRP。
BRP 的选择应满足以下条件:
1.满足位速率公式:实际位速率=CAN控制器的时钟频率
/(BRP+1)/(SJW+BS1+BS2+1)。
2.BRP的值应在1到1024之间。
其次,需要根据具体的CAN控制器和通信需求确定SJW、BS1和BS2的值。
这些值的选择应满足以下条件:
1.SJW、BS1和BS2的总和应该小于或等于TQ的数量。
2.SJW、BS1和BS2的值应在给定的范围内。
最后,通过将BRP、SJW、BS1和BS2的值代入BIT时间公式,可以计
算出波特率的实际值。
需要注意的是,位速率预设器和位时间段的选择对CAN总线数据传输
的可靠性和性能有重要影响。
较低的位速率预设器和较大的位时间段可以
提供更高的抗干扰性能,但会降低数据传输速度。
因此,在确定波特率时,需要根据具体应用场景的要求来权衡这些因素。
can总线波特率计算方法
can总线波特率计算方法CAN(Controller Area Network)总线是一种常用于汽车、工业和通信领域的网络通信协议,它的波特率是指数据传输速率,是衡量总线性能的重要指标。
CAN总线的波特率计算方法可以通过以下步骤进行。
一、了解CAN总线基本概念和术语在深入探讨CAN总线波特率计算方法之前,首先需要了解一些基本概念和术语。
1. 总线速率(bit rate):CAN总线传输数据的速率,通常用波特率(bps)表示。
2. 采样点数量(number of time quanta):一个CAN总线位周期内的时间划分数,通常是8个。
3. 位周期时间(bit time):一个CAN总线位周期的持续时间,通常由采样点数量和每个时间划分的时间(时间划分数)决定。
4. 传输速率误差(transmission rate error):实际波特率与预期波特率之间的差别,通常以百分比表示。
二、计算CAN总线的理论波特率根据CAN总线的基本概念和术语,可以计算CAN总线的理论波特率。
以下是计算波特率的步骤。
1. 确定采样点数量:根据CAN总线的需求和要求,确定一个合适的采样点数量。
常用的采样点数量为8个。
2. 计算位周期时间:位周期时间等于一个时间划分的时间乘以采样点数量。
假设每个时间划分的时间为T,位周期时间为Tbit。
例如,如果每个时间划分的时间为1微秒,采样点数量为8个,则位周期时间为8微秒。
3. 计算总线速率:总线速率等于位周期时间的倒数。
假设位周期时间为Tbit,总线速率为BR。
推导公式为:BR = 1 / Tbit。
在上述例子中,总线速率为125 kbps。
三、考虑采样点数量和传输速率误差的影响除了基本的波特率计算方法外,还需要考虑采样点数量和传输速率误差对CAN总线性能的影响。
1. 采样点数量:较多的采样点数量可以提高系统的抗噪性能,但也会增加总线负载和传输延迟。
因此,在选择采样点数量时需要综合考虑各方面因素。
CAN总线波特率的计算方法
根据 Philips 公司的独立通信控制器, 一个位周期由 3 个部分组成:同步段 (t SYNC_SEG ) 、 相位缓冲段 1 (t TSEG1 ) 和相位缓冲段 2 (t T S E G 2 ) 。 Tbit = tSYNC_SEG + tTSEG1 + tTSEG2 ( 2) 所有这些时间段, 都有一个共同的时间单元— —系 统时钟周期 (T SCL ) 。 具体到 SJA1000, T SCL 由总线时序寄 存器的值来确定。 S J A 1 0 0 0 有 2 个总线时序寄存器, 即 总线时序寄存器 0 (BTR0) 和总线时序寄存器 1 (BTR1) 。 这 2 个寄存器有自己不同的功能定义, 共同作用决定总 线的通信波特率。 总线时序寄存器 0 定义波特率预设值 B R P (共 6 位, 取值区间[ 1 , 6 4 ] ) 和同步跳转宽度 S J W (共 2 位, 取值区间[ 1 , 4 ] ) 的值。 位功能说明如表 1 所列。
( 7) TSEG1.1+1×TESG1.0+1) ( 8) TSCL × (4 × TSEG 2.2 + 2 × TSEG 2.1 + 1 × TESG 2.0 + 1)
<<1, 可以进行近似。
表 3
位 SAM 值 0 1 功 能 三倍 总线采样三次 建议在中/低速总线(A和B级)使用 有利于过滤总线上的毛刺 单倍 总线采样一次 建议使用在高速总线上(SAE C级)
TSCL, min =
TSCL,rat 1 + ∆f
( 10)
相应的系统时钟周期也会有误差。 T S C L , m i n 表示系统 时钟周期最小值, T S C L , m a x 表示系 统时钟周期最大值, T S C L , r a t 表示 系统时钟周期额定值。 由于Δ f
STM32_CAN波特率计算
一般设置CAN_SJW = 1,总结程序发现!!!can时钟是RCC_APB1PeriphClock(APB1从APB2而来,分频系数不同,导致APB1不同,mini版中一般是APB2为72Mhz,APB1是36MHz),你要注意CAN时钟频率CAN波特率=RCC_APB1PeriphClock/(1+CAN_BS1+CAN_BS2)/CAN_Prescaler ;另外尽可能的把采样点设置为CiA 推荐的值:75% when 波特率> 800K80% when 波特率> 500K87.5% when 波特率<= 500K所以对于100K 的波特率(假定使用8MHz 时钟)可以修改该BS1 BS2 为:CAN_InitStructure.CAN_Prescaler=5;CAN_InitStructure.CAN_BS1=CAN_BS1_13tq;CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;(1+13) / (1+13+2) = 87.5%CAN波特率计算—网友总结STM32里的CAN 支持2.0A,2.0B, 带有FIFO,中断等, 这里主要提一下内部的时钟应用.bxCAN挂接在APB1总线上,采用总线时钟,所以我们需要知道APB1的总线时钟是多少. 我们先看看下图,看看APB1总线时钟:APB1时钟取自AHB的分频, 而AHB又取自系统时钟的分频, 系统时钟可选HSI,HSE, PLLCLK, 这个在例程的RC设置里都有的,然后再看看有了APB1的时钟后,如何算CAN的总线速率, 先看下图:有了上边的这个图,基本就清楚了.总线时钟MHz (3+TS1+TS2)*(BRP+1)===================================================下面是我的计算:CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;(lyp发现大部分都是设置这个SJW为1tq,导致一些人把这个当做一个系数,这是错误的,因为这个公式里的1tq是固定的同步段(SYNC_SEG),与SJW无关!!!)CAN_InitStructure.CAN_BS1 = CAN_BS1_3tq;CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;CAN_InitStructure.CAN_Prescaler = 4;//2nominal bit time(3+5+1)tq=9tq关于分频系数查看system_stm32f10x.c下面的static void SetSysClockTo72(void) 函数/* HCLK = SYSCLK *//* PCLK2 = HCLK *//* PCLK1 = HCLK/2 */所以can时钟72MHZ/2/4=9 Mhz????????============================================================================================= void CAN_Configuration(void){CAN_InitTypeDef CAN_InitStructure;CAN_FilterInitTypeDef CAN_FilterInitStructure;/* CAN register init */CAN_DeInit();CAN_StructInit(&CAN_InitStructure);/* CAN cell init */CAN_InitStructure.CAN_TTCM=DISABLE;CAN_InitStructure.CAN_ABOM=DISABLE;CAN_InitStructure.CAN_AWUM=DISABLE;CAN_InitStructure.CAN_NART=DISABLE;CAN_InitStructure.CAN_RFLM=DISABLE;CAN_InitStructure.CAN_TXFP=DISABLE;CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;CAN_InitStructure.CAN_BS1=CAN_BS1_9tq;CAN_InitStructure.CAN_BS2=CAN_BS2_8tq;CAN_InitStructure.CAN_Prescaler=200;CAN_Init(&CAN_InitStructure);/* CAN filter init */CAN_FilterInitStructure.CAN_FilterNumber=0;CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMa sk;CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_16bit; CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;CAN_FilterInit(&CAN_FilterInitStructure);}注意//#define CAN_BS1_3tq ((uint8_t)0x02) /*!< 3 time quantum */拨特率10K,公式:72MHZ/2/200/(1+9+8)=0.01,即10K,和SJA1000测试通过================================================120欧姆电阻要加上!!!哦确实是CAN->BTR = (u32)((u32)CAN_InitStruct->CAN_Mode << 30) | ((u32)CAN_InitStruct->CAN_SJW << 24) |((u32)CAN_InitStruct->CAN_BS1 << 16) |((u32)CAN_InitStruct->CAN_BS2 << 20) |((u32)CAN_InitStruct->CAN_Prescaler - 1);总结一下Fpclk=36M 时can波特率为250k 的配置为/* CAN cell init */CAN_InitStructure.CAN_TTCM=DISABLE;CAN_InitStructure.CAN_ABOM=DISABLE;CAN_InitStructure.CAN_AWUM=DISABLE;CAN_InitStructure.CAN_NART=DISABLE;CAN_InitStructure.CAN_RFLM=DISABLE;CAN_InitStructure.CAN_TXFP=DISABLE;CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack;CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;CAN_InitStructure.CAN_Prescaler=9;CAN_Init(&CAN_InitStructure); 250k======================================的:将can总线波特率设置为250k在官方的can例程上给出了100k 查询和500k 中断方式的例子分别设置如下:CAN_Polling:/* CAN cell init */CAN_InitStructure.CAN_TTCM=DISABLE;CAN_InitStructure.CAN_ABOM=DISABLE;CAN_InitStructure.CAN_AWUM=DISABLE;CAN_InitStructure.CAN_NART=DISABLE;CAN_InitStructure.CAN_RFLM=DISABLE;CAN_InitStructure.CAN_TXFP=DISABLE;CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack;CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;CAN_InitStructure.CAN_Prescaler=5;CAN_Init(&CAN_InitStructure); 100k/* CAN cell init */ CAN_InterruptCAN_InitStructure.CAN_TTCM=DISABLE;CAN_InitStructure.CAN_ABOM=DISABLE;CAN_InitStructure.CAN_AWUM=DISABLE;CAN_InitStructure.CAN_NART=DISABLE;CAN_InitStructure.CAN_RFLM=DISABLE;CAN_InitStructure.CAN_TXFP=DISABLE;CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack;CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;CAN_InitStructure.CAN_Prescaler=1;CAN_Init(&CAN_InitStructure); //500k一般设置CAN_SJW = 1,总结程序发现!!!can时钟是RCC_APB1PeriphClock(APB1从APB2而来,分频系数不同,导致APB1不同,mini版中一般是APB2为72Mhz,APB1是36MHz),你要注意CAN时钟频率CAN波特率=RCC_APB1PeriphClock/(1+CAN_BS1+CAN_BS2)/CAN_Prescaler; 如果CAN时钟为8M,CAN_SJW = 1,CAN_BS1 = 8,CAN_BS2 =7,CAN_Prescaler = 2那么波特率就是=8M/(1+8+7)/2=250K=========================================得到500Kb/s的波特率CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;CAN_InitStructure.CAN_Prescaler=1;每一位的Tq数目= 1 (固定SYNC_SEG) + 8 (BS1) + 7 (BS2) = 16如果CAN时钟是8 MHz : (8M / 1 ) / 16 = 500K其中:1 为分频系数16 为每一位的Tq数目为了设置为100K, 把分频系数改为5即可, BS1 BS2 不变每一位的Tq数目= 1 (固定) + 8 (BS1) + 7 (BS2) = 16如果CAN时钟是8 MHz : (8M / 5 ) / 16 = 100K如果想得到1M 的波特率,CAN时钟仍然是8 MHz的情况下,分频系数不变应该改变BS1 BS2CAN_InitStructure.CAN_BS1=CAN_BS1_5tq;CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;每一位的Tq数目= 1 (固定) + 5 (BS1) + 2 (BS2) = 8如果CAN时钟是8 MHz : (8M / 1 ) / 8 = 1000K另外尽可能的把采样点设置为CiA 推荐的值:75% when 波特率> 800K80% when 波特率> 500K87.5% when 波特率<= 500K所以对于100K 的波特率(假定使用8MHz 时钟)可以修改该BS1 BS2 为:CAN_InitStructure.CAN_Prescaler=5;CAN_InitStructure.CAN_BS1=CAN_BS1_13tq;CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;(1+13) / (1+13+2) = 87.5%所以对于500K 的波特率(假定使用8MHz 时钟)可以修改该BS1 BS2 为:CAN_InitStructure.CAN_Prescaler=1;CAN_InitStructure.CAN_BS1=CAN_BS1_13tq;CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;(1+13) / (1+13+2) = 87.5%所以对于1000K 的波特率(假定使用8MHz 时钟)可以修改该BS1 BS2 为:CAN_InitStructure.CAN_Prescaler=1;CAN_InitStructure.CAN_BS1=CAN_BS1_5tq;CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;(1+5) / (1+5+2) = 75%个人见解, 仅供参考。
CAN波特率计算
CAN波特率计算CAN(Controller Area Network)是一种常用于实时通信的串行总线系统。
CAN总线的波特率(即数据传输速率)是非常重要的参数,它决定了CAN总线传输数据的速度和可靠性。
计算CAN总线的波特率需要考虑以下几个因素:1. 位时间(Bit Time):CAN总线被划分为若干个位时间,每个位时间由若干个时间段组成。
其中最重要的三个时间段是同步时间段(Synchronization Segment, Sync_Seg)、传播时间段(Propagation Segment, Prop_Seg)和相位段(Phase Segment, Phase_Seg)。
2. 位时间的总数:位时间的总数由同步时间段、传播时间段和相位段的时长之和决定。
位时间的总数记为N,通常有一个最小值(N_min)和一个最大值(N_max)。
3.位时间的时间分配:每个时间段的时长可以根据实际需求进行分配。
一般来说,同步时间段的时长很短,传播时间段的时长取决于总线长度和传播速度,相位段的时长取决于网络拓扑结构和所需的抗干扰能力。
4. 采样点(Sampling Point):CAN总线数据帧中每个位的采样点位置是固定的,并且通常位于相位段的中心。
5. 采样点的位置:采样点的位置可以通过同步时间段的时长(t_sync)、传播时间段的时长(t_prop)和位时间的总数(N)来计算。
采样点的位置可以用相位段的时长(t_phase)相对于整个位时间的长度(t_bit)来表示。
现在,我们来具体计算CAN总线的波特率的步骤:1.确定CAN总线的特性:首先需要确定CAN总线的物理特性,包括总线长度、传播速度等参数。
2. 确定位时间的总数(N):根据CAN总线的要求或规范,可以确定位时间的总数的最小值(N_min)和最大值(N_max)。
一般来说,N的取值范围在8到25之间。
3. 计算同步时间段的时长(t_sync):同步时间段的时长一般为1至3个时间单元(CAN位时间的最小单位)。
CAN波特率解析
CAN波特率解析CAN波特率与负载率1、背景说明:1.1为了讲清这个问题,需要先就两个概念进行说明:波特率和比特率。
波特率:单位时间内,通信通道传输码元的速率。
1个波特指每秒传输1个码元的符号。
(单位时间内调制状态改变的次数,单位为波特)比特率:单位时间内,通信通道传送的二进制位数。
1.2波特率和比特率的关系:比特率=波特率*单个调制状态对应的二进制位数(比特率=波特率*log2n)由于CAN通信中的信号是二进制的,所以对CAN来说波特率和比特率相等,只是业界习惯用bps表示CAN的波特率。
2、CAN总线的通信负载率2.1说明负载率:CAN总线实际数据传输速率与理论上能达到的数据传输速率的比值。
根据实验表明,负载率在30%的情况下,优先级高节点的平均报文传输时间和理论传输时间相差无几;而优先级低的存在20%左右的延时;当负载率达到60%的情况下,优先级最高的节点都有至少25%的延时,优先级最低的延时达到了4倍,根本无法满足实时性;当总线的平均利用率达到70%以上时,总线的通信将用可能出现拥堵的现象,极端的情况下将有可能造成错误帧的出现。
因此,负载率当然是越低越好,越能保证实时性,但是负载率太低就无法传输足够的数据,这是CAN的一个问题,在数据量大的时候无法保证实时性。
一般的说法是30%左右的负载率是最好的。
2.2需要控制通信负载率的原因:引入CAN理论中另外几个重要的概念:ID仲裁、闲时发送和最大反应时间。
CAN总线本质上是一种串口通讯,靠在时间线上对每一位的电压值进行调制来搭载不同的信号。
因为各节点共用总线介质,对总线的使用权界定就至关重要。
只有在总线空闲时,发送节点才能向总线上发送帧起始及后续帧ID,只有在帧ID赢得仲裁时,发送节点拥有总线控制权进而向总线发送报文剩余部分,在仲裁中失败的节点让出总线控制权等待下次总线空闲时继续尝试发送。
即如果某一个节点需要发送一帧报文,它需要同时满足两个条件:1、总线是空闲的,即目前没有任何节点在发送报文,在总线上表示为节点监测到11个连续的隐性位;2、所需发送的报文赢得ID仲裁,即报文优先级较高。
波特率计算
1总线定时寄存器0(BTR0)总线定时寄存器0的内容确定波特率预引比例因子(BRP)和同步跳转宽度(SJW)的值。
若复位模式有效,此寄存器是可以被访问(读/写)的。
只有选择PeliCAN模式,此寄存器在运行模式中才是可读的。
在BasicCAN模式中呈现的是‘FFH’。
总线定时寄存器0各位的说明见表3-49。
表3-49 总线定时寄存器0(BTR0)各位的说明;CAN地址6(1)波特率预引比例因子(BRP)CAN系统时钟的周期是可编程的,并决定各个位定时。
CAN系统时钟使用下式进行计算:其中,=XTAL的频率周期= 1/(2)同步跳转宽度(SJW)为补偿在不同总线控制器的时钟振荡器之间的相移,任何总线控制器必须重同步于当前发送的任何相关信号沿。
同步跳转宽度确定一个位时间可以被一次重同步所缩短或延长的时钟周期的最大数目:2总线定时寄存器1(BTR1)总线定时寄存器1的内容确定位时间的长度、采样点的位置和在每个采样点欲获取的采样数目。
如果复位模式有效,这个寄存器可以被访问(读/写)。
只有选择PeliCAN模式,这个寄存器在运行模式中才是可读的。
在BasicCAN模式中呈现的是‘FFH’。
总线定时寄存器1各位的说明见表3-50。
表3-50 总线定时寄存器1(BTR1)各位的说明;CAN地址7(1)采样(SAM)SAM位的取值说明如表3-51所示。
表3-51 采样(SAM)位的取值说明(2)时间段1(TSEG1)时间段2(TSEG2)位周期的一般结构如图3-38所示。
(TSEG1)和(TSEG2)决定每一位时间的时钟数目和采样点的位置,这里:采样点(S)可能值是BRP=000001, TSEG1=0101, TSEG2=010。
必须注意!BTR0、BTR1的设置必须满足:1.在位时间中,时间份额的总数必须被编程为至少8至25;2.重同步跳转宽度< Tseg2;3.Tseg2< Tseg1。
波特率的计算:BitRate = Fpclk/( (BRP+1) * ((Tseg1+1)+(Tseg2+1)+1)。
can波特率测试方法 -回复
can波特率测试方法-回复如何进行CAN波特率测试引言:控制器局域网络(CAN)是一种广泛应用于汽车、工业自动化和其他领域的串行通信协议。
在使用CAN协议进行通信时,合适的波特率设置对于确保数据的可靠传输至关重要。
本文将介绍CAN波特率测试的方法,以确保系统在所需的波特率下正常工作。
第一步:了解CAN波特率在开始测试之前,首先要了解CAN波特率的概念和基本知识。
CAN波特率是指在CAN总线上传输数据的速率,通常以每秒传输的位数(bps)表示。
CAN网络通常支持多种波特率选项,例如1Mbps、500kbps、250kbps 等。
第二步:选择测试设备进行CAN波特率测试时,需要一些特殊的测试设备来生成和捕获CAN信号。
常用的测试设备包括CAN波特率发生器和CAN分析仪。
CAN波特率发生器是一种用于生成指定波特率的CAN信号的设备。
它通常具有可调节的波特率和其他参数设置,以确保生成与实际应用环境相匹配的信号。
CAN分析仪是一种用于捕获、分析和解码CAN信号的设备。
它可以帮助检测和分析CAN通信中的问题,以确保正确设置的波特率。
第三步:连接测试设备在进行CAN波特率测试之前,需要将测试设备正确连接到CAN总线上。
通常,CAN波特率发生器应连接到一个或多个CAN节点,而CAN分析仪应连接到另一个节点。
确保连接正确并且电源供应稳定,以确保测试设备正常工作。
第四步:设置波特率根据测试需求和所用设备的规格要求,设置测试设备的波特率。
将波特率设置为所需的值,以确保测试信号的传输速率与实际应用中的要求一致。
第五步:生成CAN信号使用波特率发生器生成CAN信号。
根据测试设备的设置,发生器将生成指定波特率的信号,并将其发送到CAN总线上。
第六步:捕获CAN信号使用CAN分析仪捕获从CAN总线上接收到的信号。
可以使用分析仪的软件工具来检测和显示捕获的信号,以便进一步分析。
第七步:分析测试结果根据捕获的CAN信号,分析测试结果。
can总线波特率和距离公式
can总线波特率和距离公式Can总线波特率和距离公式Can总线是一种常用的数据通信协议,被广泛应用于汽车电子、工业控制等领域。
在Can总线中,波特率和通信距离是两个重要的参数。
本文将围绕这两个参数展开讨论,并介绍Can总线波特率和距离的公式计算方法。
一、Can总线波特率Can总线的波特率是指每秒钟传输的位数,通常以bps(bits per second)为单位。
波特率的选择需要考虑数据传输的速率和稳定性。
Can总线的波特率公式为:波特率 = (1 / (n + tseg1 + tseg2)) * fclk其中,n为时间段数量,tseg1为时间段1的长度,tseg2为时间段2的长度,fclk为时钟频率。
Can总线的波特率取决于时钟频率和时间段的长度。
时间段数量n 通常为20,可以根据实际情况进行调整。
时间段1的长度tseg1和时间段2的长度tseg2需要满足一定的关系,以保证数据传输的稳定性。
二、Can总线距离Can总线的通信距离是指信号能够传输的最大距离。
通信距离的选择需要考虑信号衰减、噪声干扰等因素。
Can总线的距离公式为:距离 = 速度 * 传输时间其中,速度是信号在传输介质中的传播速度,传输时间是信号从发送端到接收端的传输时间。
Can总线的传输介质通常是双绞线,其传播速度约为2/3光速。
根据传输时间和传播速度,可以计算出Can总线的通信距离。
三、波特率和距离的关系Can总线的波特率和通信距离存在一定的关系。
较高的波特率可以实现更快的数据传输速率,但通信距离较短;较低的波特率可以实现较远的通信距离,但数据传输速率较慢。
在实际应用中,需要根据具体的通信需求来选择合适的波特率和通信距离。
如果需要实现高速数据传输,可以选择较高的波特率,但需要注意通信距离的限制;如果需要实现较远的通信距离,可以选择较低的波特率,以保证数据传输的稳定性。
总结:Can总线是一种常用的数据通信协议,波特率和距离是其中两个重要的参数。
CAN特殊波特率如何计算
CAN 特殊波特率如何计算
CAN 总线采用的是异步串行通信,也就是没有单独的时钟线来保证各个收发器之间时钟的一致,每个收发器是按事先设置的波特率来对总线上的电平进行分位。
因此波特率设置准确对CAN 总线的稳定通信来说非常重要。
CAN 总线里我们可以通过对CAN 节点里的位定时寄存器的控制来实现不
同波特率的通信。
CAN 协议里将一个位时间分为同步段、传播段、相位缓冲段1 和相位缓冲段2。
每个段的时间长度都可以用一个整数的基本时间单位表示,该基本时间单位由系统的时钟振荡器分频得到。
同步段位于一个位的起始位置,CAN-bus 规定跳变沿为同步信号,但是发
送节点发送一个位跟接收节点接收到这个位之间存在网络传播延迟,传播段则是为了补偿这段传播延迟,由于采样点位置在相位缓冲段1 跟相位缓冲段2 之间,通过设置相位缓冲段1 和相位缓冲段2 的值,可以调整采样点位置,保证每个位采样点一致。
缓冲段的长度调节范围则是由同步跳转宽度(SJW)决定。
图1 CAN 位时间结构图
简单的了解了CAN 总线位时间的分段后,我们来看看一个节点的波特率
到底要如何设置。
如图2 是某ARM 内核的CAN 位时间特性寄存器
(CAN_BTR)。
图2 某ARM 内核位时间特性寄存器结构图。
sja1000 CAN波特率的计算
我假定一般应用中选取n=10,也就是:
同步段+相位缓冲段1+相位缓冲段2 =1+5+4
则(2)式简化为
m=800/Fbps
Fbps就是我们所希望得到的CAN总线频率。单位为K。
设(1)式中BTR0=m,BTR1=n,外部晶振16M,则有:
n =8000/ Fbps (2)
这样,当Fbps取我们希望的值时,就会得到一个m * n的组合值。当n选定,m值也唯一。
Tseg2≥Tscl2,Tseg2≥2TSJW,Tseg1≥Tseg2
总的来说,对于CAN的波特率计算问题,把握一个大的方向就行了,其计算公式可了规结为:
BitRate = Fpclk/( (BRP+1) * ((Tseg1+1)+(Tseg2+1)+1)
关于CAN的波特率的计算,在数据手册上已经有很详细的说明。在此,简要的把计算方法给出来:
m的最大设置值为64,SJA1000最大分频系数m*n=64x25=1600。因此标准算法中通常以16M晶振为例。其实有了公式(1),任何晶振值(6M~24M)都很容易计算。
SAM的确定:低频时,选SAM=1,即采样3次。高频100K以上时,取SAM=0,即采样1次。
SJA重同步跳宽选取: 与数字锁相环技术有关。n值选得大时,SJA可以选得大,即一次可以修正多个脉冲份额Tscl。n值小或频率低时,选SJA=1。即BTR0.7和BTR0.6都设为0。
Tphs1 + Tphs2 = bit time - Tcsc - Tprs = (16 - 1 - 7)Tcsc= 8
CAN总线的波特率计算方法
CAN总线的波特率计算方法
首先,要计算CAN总线的波特率,必须知道CAN总线的主频率F_RX (主频率也称为接收频率)。
通常,F_RX的大小由CAN总线产品的硬件
规格决定。
一般来说,F_RX的取值范围从20KHz到1MHz,通常40KHz或者50KHz的主频率能够满足不同类型的CAN总线产品,但具体实施的时候还要根据实际情况来定。
接下来,要计算的是CAN总线的比特时钟频率F_S,即波特率的基本参数。
一般来说,在满足不同CAN总线产品的要求的前提下,F_S的取值应该比F_RX要大,通常可以取5-8倍于F_RX的大小,例如在
F_RX=50KHz的情况下,可以取400KHz或者500KHz。
最后,根据CAN总线的位宽和F_S的取值,即可求得波特率的值。
一般来说,假设CAN总线的位宽是nbit,则CAN总线的波特率Baud = nbit * F_S。
我的微控制器型号是MC9S08DZ60,求助CAN通讯波特率计算
我的微控制器型号是MC9S08DZ60,求助CAN通讯波特率
计算
我的微控制器型号是MC9S08DZ60,求助CAN通讯波特率计算手册上写的很清楚啊:
波特率 = Fcanclk /psc*(1+TS1+TS2).
“求助CAN通讯波特率计算”
具体要求助什么?哪里不会?你要实现什么装置与什么装置的CAN通讯?预计跑哪个位速率?预计用什么线?误位元速率有什么要求?
飞思卡尔的微控制器MC9S08DZ60
frees./forum
有资料和教程
mc9s08dz60程式和c语言一样吗
mc9s08dz60这个只是一个晶片的型号,你说的mc9s08dz60程式就是在这个晶片上写程式,写的就是c语言,当然可以有汇编结合。
mc9s08dz60系列晶片适用于什么领域
手册写清楚啊:
波特率 = Fcanclk /psc*(1+TS1+TS2).
mc9s08dz60未使用的引脚怎么处理?
从抗干扰角度出发考虑,最好拉高或拉低
at89s52微控制器用12M晶振,波特率多少
需要和对方商定。
双方,必须使用同样的波特率。
51微控制器CAN通讯程式
51微控制器一般不带can口的,pic微控制器或者飞思卡尔微控制器一般是内建can口的,没有can口也不要紧,采用sja1000配上82c250就行了,通讯程式我有需要请给邮箱
请问飞思卡尔mc9s08dz60怎么编写pwm宣告PTE3引脚输出dz60以前用过。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SJW重同步跳宽选取:与数字锁相环技术有关。n值选得大时,SJW可以选得大,即一次可以修正多个脉冲份额Tscl。n值小或频率低时,选SJW=1。即BTR0.7和BTR0.6都设为0。
===================
CAN波特率的简单计算
作者:未知 来源:网上搜集 浏览次数:275 添加时间:2005-10-4 7:16:27
n值的取值区间为[3,25],在1个取样点时,最小值一般取4;在3个取样点时,最小值一般取5。
n值CAN规范中规定8~25。(也就是BTR1的值)基本原则为:Fbps值越高时,选取n(通过设置BTR1)值越大。其原因不难理解我假定一般应用中选取n=10,也就是:同步段+相位缓冲段1+相位缓冲段2=1+5+4
则(2)式简化为:m=800/Fbps
m的最大设置值为64,SJA1000最大分频系数m×n=64x25=1600。因此标准算法中通常以16M晶振为例。其实有了公式(1),任何晶振值(6M~24M)都很容易计算。
SAM的确定:低频时,选SAM=1,即采样3次。高频100K以上时,取SAM=0,即采样1次。
n值CAN规范中规定8~25。(也就是BTR1的值)基本原则为:Fbps值越高时,选取n(通过设置BTR1)值越大。其原因不难理解。
我假定一般应用中选取n=10,也就是:
同步段+相位缓冲段1+相位缓冲段2 =1+5+4
则(2)式简化为
m=800/Fbps
CAN波特率的简单计算
其实CAN的波特率计算特简单,只是我们无意识地把简单的问题复杂化了。
假设我们先不考虑BTR0中的SJW位和BTR1中的SAM位。那么,BTR0和BTR1就是2个分频系数寄存器;它们的乘积是一个扩展的分频系数。即:
m的最大设置值为64,SJA1000最大分频系数m*n=64x25=1600。因此标准算法中通常以16M晶振为例。其实有了公式(1),任何晶振值(6M~24M)都很容易计算。
SAM的确定:低频时,选SAM=1,即采样3次。高频100K以上时,取SAM=0,即采样1次。
BTR0×BTR1=F_BASE/Fbps (1)
其中:
内部频率基准源F_BASE = Fclk/2,即外部晶振频率Fclk的2分频。注意任何应用中,当利用外部晶振作为基准源的时候,都是先经过2分频整形的。
(1)式中,当晶振为16M时,F_BASE=8000K
2、下例BTR0和BTR1的设置有什么问题?
BTR0=0x40, BTR1=0x1C。
===================
当晶振为12M时,F_BASE=6000K
Fbps就是我们所希望得到的CAN总线频率。单位为K。
设(1)式中BTR0=m,BTR1=n,外部晶振16M,则有:
m ? n =8000/ Fbps (2)
这样,当Fbps取我们希望的值时,就会得到一个m * n的组合值。当n选定,m值也唯一。
怎样进行CAN波特率计算?
答:假设先不考虑BTR0中的SJW位和BTR1中的SAM位。那么,BTR0和BTR1就是2个分频系数寄存器;它们的乘积是一个扩展的分频系数。即:BTR0×BTR1=F_BASE/Fbps (1)
其中:内部频率基准源F_BASE = Fclk/2,即外部晶振频率Fclk的2分频。注意任何应用中,当利用外部晶振作为基准源的时候,都是先经过2分频整形的。
(1)式中,当晶振为16M时,F_BASE=8000K
当晶振为12M时,F_BASE=6000K
Fbps就是我们所希望得到的CAN总线频率,单位为K。
设(1)式中BTR0=m,BTR1=n,外部晶振16M,则有:n=8000/Fbps (2)
这样,当Fbps取我们希望的值时,就会得到一个m×n的组合值。当n选定,m值也唯一。
SJA重同步跳宽选取: 与数字锁相环技术有关。n值选得大时,SJA可以选得大,即一次可以修正多个脉冲份额Tscl。n值小或频率低时,选SJA=1。即BTR0.7和BTR0.6都设为0。
问题: 1、SJA1000中,BTR1中相位缓冲段1为什么设计的比相位缓冲段2大8个Tscl ?按道理应该一样才对。