首页 上一页 1 2 下一页 尾页

CAN转贴(好文) 点击:8519 | 回复:23



划一

    
  • 精华:1帖
  • 求助:0帖
  • 帖子:4帖 | 16回
  • 年度积分:0
  • 历史总积分:33
  • 注册:2004年2月12日
发表于:2004-03-24 10:39:00
楼主
转贴:      我在学习CAN应用设计中的一点心得体会,也算是走了一些弯路,现在把它写出来和大     家共同交流。           不知道各位注意到没有,大多数情况下,SJA1000是与8250+51系列单片机的方式来做     CAN的控制应用。如果是1M/s的通讯速度的话,实际上的流量只有大概500多K的样子,此点     希望大家在以后的应用设计中需要考虑周到。      上诉问题产生的原因是SJA1000的发送缓冲区只有1个,应用程序在判断发送完一幀     数据后,需要计算下一幀需要装载的数据长度,然后根据长度再装载相应的数据到缓冲区     ,这个过程要消耗掉了一定的时间(特别是标准51内核的单片机),因此CAN总线上的数据     流实际上是发送一幀就有一个比较长的空闲区(单片机装载数据的时间),这样一来就浪费     了总线资源。      微芯的MCP2510有3个发送缓冲区,在5V的电源下以5Mb/s的SPI端口读写数据,可以较好     的解决这个问题,但是多数的51单片机都无SPI,这样也给单片机的选择上带来了一定的麻     烦。具体选择怎样的方案,只能看各自的应用情况来定了!         BCD—锁存/7段译码/驱动器。数码显示器与配套的驱动器集成器件一起工作。这些驱动器常称BCD-7段译码器。不同的显示器配用相应的驱动器件,如CD4055专配液晶显示用的。CD4547是BCD-7段译码大电流驱动器,这些都属于BCD-7段译码器。图18中配LED的驱动器,是用CD4543集成器件,该器件是一种可驱动LED的,也可驱动LCD的7段译码器。用CD4543驱动LED时的配接电路如图22所示。图中R1~R7是LED的限流电阻                  sja1000调试经验       去年年底的时候,一个公司给我打电话,问我最近有没有空,说要请我帮忙做一个基于CAN总      线通讯的东西,我去看了看,是一个数据采集系统,下面是一系列数据采集的智能板卡,上位机是      基于WINBOND的一块486的工业嵌入式控制板,操作系统使用的是WINCE。智能板卡通过工业底板和数据线两种方式和上位机通讯,通信协议选择的是CAN,其中底板上的通信选用高速波特率(1Mbps),数据线选用低速(100kbps)。    去公司的时候,公司给了我一个参考的东西,采用SST单片机+SJA1000的方案构成的智能板卡      ,同时告诉我可以自己设计方案。考虑到SST的东西没有用过,P8X591是PLCC封装的,烧写起来不      方便,于是我设计了如下的方案:    1、智能板卡上的通讯采用AT89S51+两块SJA1000的方式进行;    2、上位机通过PC104总线和一块CAN控制板卡连接,CAN控制板卡上同样采用AT89S51+两块      SJA1000的方案。AT89S51和上位机通过PC104总线共享内存(使用IDT的双口RAM);    3、采用西门子的组态软件进行WINCE下的板卡驱动开发;    由于以前没有做过CAN的东西,于是决定了先调试CAN通信,然后设计板卡的方案。    方案确定之后,首先是上www.zlgmcu.com上下载了全部的SJA1000和PCA82C250的资料。然后开      始设计电路板。采用了SJA1000应用指南中推荐的方案,采用SJA1000的时钟输出为AT89S51的时钟      ,没有采用光电隔离芯片,把TX1接地,TX0和RX0分别连接到PCA82C250的TXD和RXD引脚上,RX1连      接到PCA82C250的VR上;加上了5欧姆的限流电阻和120欧姆的匹配电阻(用110欧姆替代),另外加上      了一个调试用的串口。没有注意而且要命的是把SJA1000的复位引脚和单片机的复位引脚连接到了      一起。    第一次的板子用的加急,用了三天,结果那次的板子做的极差——连铜皮都翻起来了;我马上      让那个电路板厂重新做了三块。在做板的过程中我发现了复位引脚的错误,SJA1000的文档上提供的      是一个复位电路,但是没有给出电路的详细组成,于是我就误以为和单片机的复位电路是一样的了      。在设计这块电路板的时候,最担心的事情就是SJA1000的输出时钟能不能够驱动AT89S51,如果不      能够驱动,那么一切就OVER了,可惜的是我的担心成为了现实,板子焊好之后系统不工作,在      SJA1000的时钟输入引脚上有信号输入,而且输出时钟也正常,但是单片机就是不工作。于是我先      把SJA1000的复位引脚连线割断,连接到了AT89S51的IO引脚上,再把S51的XTAL的两个引脚连接到      SJA晶体的上,可惜系统还是不工作,这次电路板设计失败了。    在总结了第一次失败的经验后,参看了21IC上的一个设计,决定把AT89S51和SJA的晶体分开。      并且用单片机的一个IO引脚来控制对SJA的复位。    第二次的电路板比较成功,焊接好了之后首先测试单片机的串口和LED指示灯,一切OK。然后      就开始测试SJA。ZLG提供了一个BASIC模式下的参考例程,我看了一下,然后又找了本《现场总线      CAN的原理和测试》把SJA的寄存器详细看了看(由于开始的时候比较忙,所以直到这个时候才算是      仔细看了看SJA的内部,至于CAN的基础协议我是根本没有看,这给我后面带来了极大的麻烦)。然      后就参考ZLG的程序开始写SJA的测试程序,那个程序写的很大,也很全,因为我想快点把东西给做      出来,于是弄了一个1000多行的程序,以前我的调试程序一般都很小的。写好程序之后就开始测试      ,首先测试的是测试寄存器,然后一步步测试下去,在BASIC模式下所有的寄存器都正常,但是在      发送的时候是总是不正常,启动发送之后就一直在发送,状态寄存器的标志位一直处在发送的状态      下,然后就是报总线错误,不知道是怎么会事情,很郁闷,上bbs看了一下。bullfrog告诉我单个      CAN节点发送是成功不了的,如果没有收到接受CAN节点的应答,发送节点就会一直发送,直到超出      错误计数器的允许值使得总线关闭。同时在精华区发现在peli模式下有ECC(错误寄存器),可以跟      踪错误,于是开始看peli模式操作过程。这个东西比较麻烦,zlg没有提供公开的c代码,我找了一      个汇编的作为参考。    我第一步的目标是自发送,在peli模式下有自发送这种模式,在有匹配电阻的情况下可以进行      单个节点的接收和发送。第一次调试的时候没有成功,给北京zlg打电话,北京分公司说让我给广      州打电话,给广州打电话,几个问题都得到了很好的解答(在此谢谢zlg的工程师了):    1、自发送的时候必须加上匹配电阻;    2、5欧的限流电阻可以不需要;    3、每次发送完成之后    4、建议使用中止发送来进行单步发送;    另外他告诉我可以在zlg的论坛上找到很多很有用的东西。    听了他的建议,我第一件事情就是检查我的电路板,检查的结果让我大吃一惊——我的ch和cl      竟然是短路的,万用表的狂叫不止。一步步检查,发现那个110欧的匹配电阻有问题,万用表碰上      去就叫,于是把那个电阻剪下来,量量还是短路。于是我怀疑把5欧的限流电阻当成了110欧的电阻      ,于是把匹配电阻都去掉了。没有想到的是当我把新的110欧电阻拿来的时候,万用表还是叫,这      时候才发现这块万用表在300欧姆以下都要叫,可怜我又打理了n长时间的电路板......    再仔细阅读了一次peli模式下的操作指南,又仔细阅读了zlg提供的初始化规范,发现在子发      送的时候发送的命令应该是0x10或者是0x12(即CMR寄存器里面有一个专门的控制位是用来控制自发      送的,和普通的发送命令位是不同的)。在发现了这个问题之后,自发送一切顺利的通过了。    接下来就是两个节点的互调了,我首先用自发送程序把两个节点都调试了一下,保证单个节点      发送硬件没有任何问题。然后就用双绞线通过接线端子把两个系统连接到了一起。第一次调试采用      的是1M的波特率(由于ZLG只给出了16M晶体下的BTR0和BTR1的初始值,我在ZLG的论坛上找到了一个      网友自己计算的数值,后来证明这个东西有些问题),没有成功。发送节点通过串口利用串口调试助      手来控制发送,接收节点通过仿真器观察数据。虽然没有发送成功,但是通过串口的反馈数据和仿      真器的观察窗,可以看到ECC寄存器都发生了变化,证明数据线上有数据过去(由于我没有示波器,      只有采用这种办法)。于是我改变了两次波特率,最低到了5k,都没有成功,最后我从21IC上的一      篇应用文章上找到了两个参数,这次就成功了,通讯速率20k。现在一切稳定,在写这篇文章的时      候哪几个LED正欢快的闪烁着。    最后,总结几个经验:    1、一定要详细的阅读sja的手册



中国工控网

  • 精华:141帖
  • 求助:0帖
  • 帖子:163帖 | 91回
  • 年度积分:0
  • 历史总积分:1543
  • 注册:2020年3月27日
发表于:2004-03-24 14:19:00
1楼
huayi0796推荐的这本书在本站的图书栏目中就有售的!

雷欧纳德

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 6回
  • 年度积分:0
  • 历史总积分:15
  • 注册:2003年8月25日
发表于:2004-03-25 09:53:00
2楼
看完之后的感觉,只有一个字:顶!

hzkq

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 1回
  • 年度积分:0
  • 历史总积分:10
  • 注册:2001年7月25日
发表于:2004-03-25 15:27:00
3楼
似乎没必要单独做复位电路。

郑理

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:2
  • 注册:2004年3月28日
发表于:2004-03-28 23:15:00
4楼
请问各位人士,我国汽车CAN现状如何?谢谢!

神州任我行

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:11
  • 注册:2003年4月21日
发表于:2004-03-29 08:04:00
5楼
一个外行学这个要多久?

macroer

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 7回
  • 年度积分:0
  • 历史总积分:31
  • 注册:2003年8月29日
发表于:2004-03-29 10:07:00
6楼
谢谢老师了,给了这么好的经验,希望大家都来这里交流交流。^_^

郑理

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:2
  • 注册:2004年3月28日
发表于:2004-03-29 23:24:00
7楼
你好,能与你交个朋友吗!谢谢! 我的邮箱 rcn9981@hotmail.com

whowho

  • 精华:2帖
  • 求助:0帖
  • 帖子:7帖 | 13回
  • 年度积分:0
  • 历史总积分:44
  • 注册:2004年3月14日
发表于:2004-03-30 07:30:00
8楼
奇文共欣赏

李逍遥

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 68回
  • 年度积分:0
  • 历史总积分:168
  • 注册:2004年2月19日
发表于:2004-04-01 21:11:00
9楼
顶上去 谢师傅了

7111235@sina.com

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 4回
  • 年度积分:0
  • 历史总积分:4
  • 注册:2004年2月18日
发表于:2004-04-02 09:23:00
10楼
写得好。 我个人认为sja1000的复位由单片机的i/o引脚控制比较好。原来我选择上电复位,可靠性非常之差。另外我觉得can通讯最好隔离。同时我们做了232/can(232太慢了)、usb/can转接口。

xx007

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 7回
  • 年度积分:0
  • 历史总积分:10
  • 注册:2004年4月03日
发表于:2004-04-03 12:02:00
11楼
顶,顶,顶!非常感谢作者,还有转载者也非常感谢,让我们初学者学到了很多东西,以后可以少走很多弯路!

划一

  • 精华:1帖
  • 求助:0帖
  • 帖子:4帖 | 16回
  • 年度积分:0
  • 历史总积分:33
  • 注册:2004年2月12日
发表于:2004-04-03 12:32:00
12楼
此文为转贴,希望各位以后见到这麽好的贴子也转发一下

形式

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 26回
  • 年度积分:0
  • 历史总积分:218
  • 注册:2004年3月29日
发表于:2004-04-05 11:19:00
13楼
bbbbbb

风之翼

  • 精华:0帖
  • 求助:0帖
  • 帖子:14帖 | 27回
  • 年度积分:0
  • 历史总积分:119
  • 注册:2003年3月05日
发表于:2004-04-07 15:39:00
14楼
好文!我对这个很感兴趣,但是偶还是个门外汉,不知道需要学多长时间才能有所成绩。

lb138

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 1回
  • 年度积分:0
  • 历史总积分:4
  • 注册:2002年8月29日
发表于:2004-04-09 10:26:00
15楼
好人!牛人! 佩服你的大度!

枫叶情缘

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:51
  • 注册:2005年1月01日
发表于:2005-01-01 12:59:00
16楼
大家好: 请问AT89S51哪个脚与DS1820的DQ脚相连?多多指教!

yusun

  • 精华:0帖
  • 求助:0帖
  • 帖子:12帖 | 289回
  • 年度积分:0
  • 历史总积分:470
  • 注册:2004年1月02日
发表于:2005-01-06 15:26:00
17楼
“万用表的狂叫不止。一步步检查,发现那个110欧的匹配电阻有问题,万用表碰上去就叫,于是把那个电阻剪下来,量量还是短路。于是我怀疑把5欧的限流电阻当成了110欧的电阻,于是把匹配电阻都去掉了。没有想到的是当我把新的110欧电阻拿来的时候,万用表还是叫,这时候才发现这块万用表在300欧姆以下都要叫” 看你写这篇文章你应该不至于这样 吧!! 难道你的万用表没有电阻档,你即使用会叫的那一档,你也可以看到阻值啊?不知道你脑子在想什么!

无愧我心

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 4回
  • 年度积分:0
  • 历史总积分:40
  • 注册:2005年1月21日
发表于:2005-01-31 13:30:00
18楼
请问大家,以前从未接触过 CAN总线的,要做出实际的东西,得用多少时间呀?刚开始从哪里下手准备呀?这方面都有什么书可以看的 ?

jjjyyyfff

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 15回
  • 年度积分:0
  • 历史总积分:30
  • 注册:2005年1月15日
发表于:2005-01-31 20:42:00
19楼
文章不错,要是配上图片就更好了,程序要是有注解就,perfect了^_^

尼莫

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 6回
  • 年度积分:0
  • 历史总积分:111
  • 注册:2003年12月17日
发表于:2005-02-22 10:35:00
20楼
不错!要顶!

热门招聘
相关主题

官方公众号

智造工程师
    首页 上一页 1 2 下一页 尾页