搜索
bottom↓
回复: 15

怎样测CAN的波特率

[复制链接]

出0入0汤圆

发表于 2010-3-2 19:34:31 | 显示全部楼层 |阅读模式
请问各位高手
现在遇到一个问题,手头有块板子要和别的设备进行CAN通讯
不过对方CAN通讯的波特率不固定,需要在通讯中板子直接检测对方设备波特率,然后让PIC单片机的选择相应波特率。
如有遇到的请指点下 谢谢!

出0入0汤圆

发表于 2010-3-2 20:25:19 | 显示全部楼层
上示波器,或者常用几个频率挨个试:100K 125K 250K 500K 1M

出0入0汤圆

发表于 2010-3-2 21:14:37 | 显示全部楼层
如一楼,用不同的常用波特率去接收,看哪个波特率下面能接收到数据。

出0入0汤圆

发表于 2010-3-2 21:25:18 | 显示全部楼层
用示波器测TXD或者RXD的波形,取最小间隔就是波特率。CANH\CANL 准确没有TTL的准确,因为有些收发器为了降低EMC,会采用斜率控制。

有逻辑分析仪更佳

出0入0汤圆

 楼主| 发表于 2010-3-3 08:59:35 | 显示全部楼层
谢谢几位的回答
可能我没说明白, 我的目的是,板子在和不同can设备通讯时能自动选择对应的波特率与之通讯,可是上示波器是不现实的,这样的话怎么可能用示波器测呢?
可以这样吗? 在开始通讯前,使PIC读TXD或RXD的引脚电平,然后内部软件计算?
2楼 朋友的各个比特率测试的方法,好像也可选我去试试   谢谢了

出0入0汤圆

发表于 2010-3-3 09:34:34 | 显示全部楼层
读引脚电平是不现实的,自适应波特率,一般就是常用的几个波特率挨个试,不过这里头有个方法问题,需要保证网络里不会出现不同的波特率发送冲突。

出0入0汤圆

发表于 2010-3-3 09:38:28 | 显示全部楼层
挨个试,哪个波特率情况下能发出数据,就对的了。不同波特率,不会有发送结束中断~~~

出0入0汤圆

发表于 2010-3-3 11:14:54 | 显示全部楼层
挨个试,哪个波特率情况下能发出数据,就对的了。不同波特率,不会有发送结束中断~~~
------------------------------------------------------------------------------------
不能用发送进行测试的,那样会干扰总线的正常发送,即使你使用了正确的波特率发送,也额外增加了总线的通信负载,所以应该用接收/监听来确认波特率(监听模式更好,连错误帧都不会发送),因为总线波特率一般是唯一的。

CiA上有段说明的(http://www.can-cia.org/index.php?id=409):

Configuring a wrong bit-rate for a CANopen device is a critical issue. Depending on the data stream stuff-bit, CRC,
form or acknowledgement error occurs and the CANopen device will signal this by transmitting an error frame.
The process of error detection and signaling stops, when the device with the incorrect bit-rate goes into bus-off state.

给楼主一篇CiA的文章,Automatic Baudrate Detection in CANopen Networks
点击此处下载 ourdev_536170.pdf(文件大小:165K) (原文件名:Automatic Baudrate Detection in CANopen Networks.pdf)

出0入0汤圆

发表于 2010-3-3 13:23:08 | 显示全部楼层
3年前一个同事做过,就用定时器采RXD最小脉宽,计算出波特率,再计算出对应的波特率设置。

是可以的。

出0入0汤圆

 楼主| 发表于 2010-3-3 18:04:09 | 显示全部楼层
谢谢几位的关注,我现在也觉得 测脉宽很难  测脉宽是测高电平持续时间吗?
最小脉宽也不一定就是一次高电平的持续时间吧?
对7楼的方法,相对容易实现,但是8楼又说不可取,8楼所说的接受/监听,可怎么实现呢,如果对方设备的CAN一直不发数据,怎么接受呢?
不知我这样理解对不对,刚加入工作就遇到难题,请各位帮帮忙 谢谢

出0入0汤圆

 楼主| 发表于 2010-3-3 18:42:05 | 显示全部楼层
还有如果挨着个试波特率,那波特率,太多太多了 实现很难啊

出0入0汤圆

发表于 2010-3-3 19:49:57 | 显示全部楼层
“对方CAN通讯的波特率不固定”这个不固定指什么,一般理解,应该是指对方在设计或现场调试时配置一个固定的波特率,运行中不会改变?

如果对方是按照常见波特率设置的话,数量是有限的,一般总是参照广泛使用的can协议(CANOpen,DeviceNet,J1939)所用的那几种波特率。
我上面发的文档里,也就8种,其它协议和CANOpen规定的波特率应该大部分是重复的。
当然如果对方设计者比较bt,喜欢用自定义冷门的波特率,那就只能靠位时间检测了(先询问对方一下,看他的设备可配置几种波特率,can的物理层部分还是比较复杂的,尽量避免位时间检测这种比较费力的做法,工作中和合作方经常沟通是必要的)。

关于“对方设备的CAN一直不发数据”,那你首先得获得对方的通信协议(否则你怎么和对方通信?),看协议或询问对方运行时是否会发数据。如果对方是只接收,那你只能通过发送的成功失败来判断了。

上面我发的那文章中也提到用定时器检测IO的位时间方法,相关的那篇Infineon的应用手册:点击此处下载 ourdev_536294.pdf(文件大小:93K) (原文件名:ap2902510_CAN Baudrate Detection with Infineon CAN devices.pdf)

出0入0汤圆

发表于 2010-3-3 19:55:50 | 显示全部楼层
谢谢各位高手

出0入0汤圆

 楼主| 发表于 2010-3-3 19:59:36 | 显示全部楼层
先谢谢11楼
您回答很详细了,但是您发的英文资料我看着有些吃力,
我所说的对方设备波特率不固定,不是通讯中波特率发生变化。
我的目的是 我的板子和各种can设备都能通讯
我还是先好好看看您的资料再问吧  再次感谢

出0入0汤圆

 楼主| 发表于 2010-3-4 09:32:26 | 显示全部楼层
回复【11楼】yyccaa
-----------------------------------------------------------------------
这位大哥,您能帮我编一个程序么,就是您给我发的
Automatic Baudrate Detection in CANopen Networks这篇文章中有一个图一,一个查询波特率的程序流程图,您能帮我把他用C语言编一下程序么,硬件设备是PIC单片机。

出0入0汤圆

 楼主| 发表于 2010-3-19 20:18:15 | 显示全部楼层
真郁闷
以上这些全是我同学用我号发的,我不可能张嘴和人要代码。感谢大家关注,见笑了哈
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 09:04

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表