1、波特率的设定

首先是几个名词的含义,CAN里面1个位的构成如下。注意采样点的位置在PBS1和PBS2的中间。根据这个位时序就可以计算波特率了。

最小时间单位(Tq,Time Quantum)

同步段(SS,Synchronization Segment)1Tq

传播时间段(PTS,Propagation Time Segment)1-8Tq

相位缓冲段1(PBS1,Phase Buffer Segment1)1-8Tq

相位缓冲段2(PBS2,Phase Buffer Segment2)2-8Tq

再同步补偿宽度(SJW,reSynchronization Jump Width)1-4Tq

波特率分频器(BRP,Baud Rate Prescaler)

AN位时序寄存器(CAN_BTR)用于设置TS1、TS2、BRP、SJW等参数,直接决定CAN的波特率。

SJW[1:0]再同步补偿宽度;

TS1[3:0]时间段1;

TS2[2:0]时间段2;

BRP[9:0]波特率分频器;

呀,没有SS同步段的设置,因为SS恒等于1

除此之外,我们还需要设置APB1的时钟频率,STM32F1通常为36MHz(外部8M晶振)。

CAN波特率计算公式(寄存器)

再同步补偿宽度(SJW)的具体作用是增大或减少CAN波特率的容许偏差量,也就是说它的大小和波特率的值没有很大关系,属辅助类的,可以理解为波特率精度调节。这里要注意的是这个值应该设计的尽可能大,满足位宽度容忍测试中,大于3%的要求。

其公式为trjw=tq*(sjw+1),指为了重新同步,该参数定义了CAN硬件在每位中可以延长或者缩短多少个时间单元的上限。在实际写程序时,这个sjw通常被定义为0。关于这个再同步补偿宽度很多资料中都写得很模糊,在这里我举个例子帮助大家理解下。这里先用库函数了,下面的第一个图是CAN_SJW_4tq时,用USBCAN分析仪探测的波特率结果,有5个波特率可以实现CAN通讯;下面的第二个图是CAN_SJW_1tq时,用USBCAN分析仪探测的波特率结果,这时只有3个波特率可以实现CAN通讯了。也就是容错性能变小了。这个值大些好还是小些好,需要日后研究了。

CAN_SJW_4tq时的情况,有效波特率段比较大

CAN_SJW_1tq时的情况,有效波特率段比较小

CAN_BTR寄存器

我们举个例子,假如SJW为0,TS1为8,TS2为7,BRP为3,那么波特率应该是36M/[(1+9+8)*4]=500kbps。

采样率的设定

除了波特率,我们还应该考虑一个叫做采样率的公式。这个公式如下。实际上我们可以看出来,采样率表示的是采样点在整个位中的相对位置。对上面的例子来说,采样率为(1+8+1)/(1+8+1+7+1)=55.6%,偏低。

当波特率大于800kbps时,推荐采样率为75%;当波特率为500k-800kbps时,推荐采样率80%左右;当波特率不大于500kbps时,推荐采样率为87.5%。采样点如果偏离这个标准过多,可能会导致一致性问题。

库函数中需要设置的值

刚才我们说STM32单片机中CAN的波特率主要由4个参数共同决定。他们分别是重新同步跳跃时间单元(tsjw)、时间段1的时间单元(tbs1)、时间段2的时间单元(tbs2)、波特率分频器(brp)。对应到STM32单片机的库函数中,分别对应的是CAN_SJW、CAN_BS1(即tbs1+1)、CAN_BS2(即tbs2+1)、CAN_Prescaler等4个参数。库函数中只需完成这4个参数的设定即可。比如设置CAN_SJW=1tq,CAN_BS1=6tq,CAN_BS2=1tq,CANPrescaler=9,则波特率=36M/[(1+6+1)*9]=500Kbps。

采样率=(1+6)/(1+6+1)=87.5%。要注意CAN_SJW没有参与任何公式的计算,波特率公式的那个位置是SS段,故而为1。

在这里推荐一个很不错的STM32-CAN波特率计算软件can_config.exe,如果有需要可以留言。但这个软件中,公式里面提到的CAN_SJW参与波特率运算的说法是错误的,要订正。

硬件设计注意

设计硬件时要注意收发器芯片的选取,如果系统5V供电可以选择NXP的82C251、TJA1050、MCP2551等,如果3.3V供电可以选择VD230。部分芯片的8脚有唤醒功能,需要详细阅读datasheet。MCU引脚的CAN_TX应接到收发器的TXD上,MCU的CAN_RX应接到收发器的RXD上。下图说明了信号的流向,CAN_TX对于MCU来说,属于输出;而CAN_RX对于MCU来说,属于输入

其他

同步跳转宽度(SJW):SJW的值直接影响到重同步时相位缓冲段的可调节的范围,SJW的值可以在1~4之间选择,我们选择3、4可以使总线获得更宽的波特率容忍度;

采样次数:分为单次采样跟三次采样,三次采样在设计之初虽然是为了过滤掉总线上毛刺,但是采用三次采样经常会影响SJW的跳转,所以实际应用中我们一般都会采用单次采样。

建议

波特率选取规则建议如下:

  1. TSEG2 >= SJW;
  2. BRP(波特率预分频)尽量小,SJW(同步跳转宽度)尽量大;
  3. SMP(采样点)选取在75%~85%之间。
  4. 采用单次采样。

如何处理CAN通讯故障相关推荐

  1. 面试时与人事交谈时间_如何与您的技术负责人交谈并解决通讯故障

    面试时与人事交谈时间 by Greg Sabo 由格雷格·萨博(Greg Sabo) 如何与您的技术负责人交谈并解决通讯故障 (How to talk to your tech lead and fi ...

  2. rj45接口引脚定义_简单修复数控主机网络接口通讯故障

    中国电路板维修人关注平台:技术分享.学习交流.案例视频.行业招聘资讯 [案例:某品牌数控主机网络接口无法通讯故障维修] 故障现象:网络接口无法使用,IP地址为192.168.1.101 解决方法: 此 ...

  3. 通讯故障_伦茨lenze全数字直流调速器通讯故障维修经验很丰富

    使用基本装置的串行接口通过写入可以方便地更换.功率部分:电枢和励磁回路电枢回路为三相桥式电路:(1)单象限工作装置的功率部分电路为三相全控桥b6c.(2)四象限工作装置的功率部分为两个三相全控桥(b6 ...

  4. 通讯故障_掌握PLC必备知识,人机界面和 PLC 出现通讯故障如何分析解决

    此次主要在阐述人机界面和 PLC 通讯时的模式状态,并列举了通讯故障实例.帮助大伙加深对这俩者的了解,掌握起来也不再是难题,解决掉拦路虎. 一 台数 显 四 辊 卷 板 机PLC 控 制 系 统 核 ...

  5. 通讯故障_PLC与变频器通讯故障处理实例

    S7-200smart加台达触屏BS07410,大功率设备普传PI500系列30KW变频器.调试初期,变频器没有启动,调试PLC跟触摸屏程序,一切正常. 等启动变频器后,问题出现,PLC跟变频器通讯失 ...

  6. opc服务器不稳定的原因,OPC Client和OPC Server容易出现通讯故障,原因是什么?

    OPC Server是一套利用微软的COM/DCOM技术实现工业自动化资料获取的架构.OPC Server提供OPC接口,它将与之相连的物理设备(PLC)的信息值通过接口返回到客户端应用程序.也就是说 ...

  7. 三菱电梯服务器维修,三菱电梯通讯故障维修分析总结

    三菱电梯通讯故障维修分析总结 主板:三菱758主板 主板故障代码:74E,F35,F36,F3A,F45,F46,F52,F54 门机板故障代码:0串行通讯故障 故障现象:外呼黑屏,电梯返平层后不走车 ...

  8. 计算机故障检修的常用流程及方法,常见品牌变频空调通讯故障通用检修流程与方法...

    这是一款超好用的万用表 除了常见的交直流电压,电流,电阻功能之外 还有温度,电容,频率检测,非接触式电压探测 详情点击这里(今日购买赠送空调维修视频教程一套) 购买万用表赠送变频空调维修手册(仅限今日 ...

  9. dcu故障是哪_【车匠在线-故障案例】潍柴自主DCU通讯故障

    众所周知通讯故障会给车辆带来各种疑难杂症,例如无法着车.启动困难.动力不足等,问题多出现在电路且不好排查,需要使用专业的诊断设备和丰富的维修经验来进行诊断检查,今天带大家来看看车匠近期遇到的一个案例. ...

最新文章

  1. 中大型网站技术架构演变过程
  2. ABAP程序打印Spool Request到PDF
  3. java 采集rtsp_通过Java程序调用RTSP拉流协议视频平台EasyNVR程序接口步骤概览
  4. android 应用在启动后进行全局的的初始化操作
  5. ADB投屏_最强开源投屏神器,跨平台电脑控制+文件传输——scrcpy
  6. JavaScript学习(八十九)—数组练习题
  7. centos6.4 安装wireless驱动
  8. JAVA数据缓存之内存缓存
  9. 希捷 服务器文件丢失 原因,移动硬盘数据丢失的原因有哪些?如何进行专业的数据恢复?...
  10. 三极管共射放大电路调试
  11. 交换机端口mtu值最大_-【SDN】交换机MTU配置总结
  12. CentOs 7源码安装 Python3
  13. 各种范文都有,到时不用找了。(值得收藏)
  14. lua服务器客户端消息回调,lua服务器客户端消息回调
  15. 【网盘项目日志】Seafile 源码部署和安装命令
  16. 微信小程序商城购物车页 二维数组怎么做
  17. Action Chains类 使用鼠标操作使用方法
  18. Arduino- GY30光线传感器实验(检测光照强度)
  19. Python开发 之 Python3读写Excel文件(较全)
  20. 手动/自动/交叉验证评估Keras深度学习模型的性能

热门文章

  1. Minix安装及配置指南
  2. fidder抓包工具使用方法,完整流程
  3. 如此奇葩,非圆满毕业典礼!个个都是人才
  4. easyExcel导出和读取
  5. 【计量经济学导论】05. 异方差
  6. 尚融宝13-后台管理系统前端架构梳理
  7. 《羊了个羊》爆火日收入468万?老板回应了...
  8. C语言 基于文件的程序设计(PTA)
  9. 如何设置wordpress的all-in-one-seo插件
  10. Android Studio App开发之使用摄像机录制视频和从视频库中选取视频的讲解及实战(附源码)