例:CAN控制器的晶振fcan_clk=10MHZ,节点间最长的距离为40m,tq不分频,直接采用控制器的时钟,总线输出延迟为50ns,接收延迟为30ns,=1/fcan_clk=1/10MHZ=100ns总线的最大传输延迟=总线的最长距离/光电速度=40/3*108≈133nsProp_Seg=2*(总线输入延迟+总线输出延迟+总线最大传输延迟)=2*(30ns+50ns+133ns)=426ns考虑冗余预留,则Prop_Seg=600ns=6tq;Sync_Seg=1tq;Phase_Seg1=1tq;Phase_Seg2=2tq(因为采样是在Phase_Seg1和Phase_Seg2之间,所以在Phase_Seg2中应包含至少1tq处理时间)真实SJW=min(Phase_Seg1,Phase_Seg2)=1tqBit_time=Sync_Seg+Prop_Seg+Phase_Seg1+Phase_Seg2=10tq=1Mbps晶振漂移容许=min(Phase_Seg1,Phase_Seg2)/2*(13*Bit_time-Phase_Seg2)=1tq/2*(13*10tq-2tq)=%寄存器配置:[0]1[TSeg2]3[TSeg1]4[SJW]2[BRP]6=[0]1[Phase_Seg2-1]3[Prop_Seg+Phase_Seg1-1]4[真实SJW-1]2[分频数-1]6=[0]1[2-1]3[1+6-1]4[1-1]2[1-1]6=[0]1[1]3[6]4[0]2[0]6=0x1600下面是从Cygnal网站论坛上看到的:#defineBTR(tseg1,tseg2,sjw,brp)(((tseg2-1)<<12)|((tseg1-1)<<8)|((sjw-1)<<6)|(brp-1))#definekBTR_1MbpsBTR(2,8,1,2)//1Mbps#definekBTR_500kbpsBTR(2,8,1,4)//500kbpsvoidset_bitrate(unsignedintbtr){unsignedcharSFR_SAVE_PAGE;SFR_SAVE_PAGE=SFRPAGE;SFRPAGE=CAN0_PAGE;|=0x41;CAN0ADR=BITREG;CAN0DAT=btr;&=0xbe;SFRPAGE=SFR_SAVE_PAGE;}set_bitrate(kBTR_1Mbps);//1Mbpsset_bitrate(kBTR_500kbps);//500kbpsTProp_seg=2x(transceiverloopdelay(150nsec)+buslinedelay(5nsec/m))//conditionfromtheCANparameterdefinition1<=BRP<=32Tq=BRP/FsysTSync_Seg=TqTq<=TProp_Seg<=8*TqTq<=TPhase_Seg1<=8*TqTq<=TPhase_Seg2<=8*TqTq<=TSJW<=4*TqTbit=TSync_Seg+TProp_Seg+TPhase_Seg1+TPhase_Seg2Tbit=1/baud(nearlyequal)//conditionfromF040exampleTP
CAN波特率计算 来自淘豆网m.daumloan.com转载请标明出处.