如何一分钟找到手把手教你学can总线线的问题节 65533

以下试题来自:
问答题 阅读以下关于CAN现场总线嵌入式监控系统的技术说明,根据要求回答问题1至问题5。
[说明] 某自动化仪表企业正在研究使用现场总线网络构成自动监测系统的可行性,打算采用
CAN(Controller Area
Network,控制器局域网络)总线作为底层网络构件系统。该企业试验用的数据采集与监测系统的网络结构如图6-10所示。
在图6-10网络结构中,系统主控机可有一台或多台,相当于上位机,负责系统的总体管理,可以向网络节点发送命令,接受节点数据,进行存储、分析、统计、显示与打印等工作。在系统主控机内装有PCCAN网卡(CAN总线通信接口适配卡)。系统主控机中具有以下几种软件模块:
(1)初始化模块。该模块用来设置CAN网络通信速率、输出控制方式、报文标识符屏蔽格式等参数,设定各节点工作空间的位置与规模,初始化节点缓冲区域的缓冲文件等。
(2)采集节点信息与数据模块。该模块可以采用指定节点发送、由节点主动发送和自动轮询采集等多种方式,并可以统计与分析数据采集的进度与状态。
(3)向节点发送参数、命令或程序模块。
(4)数据统计分析模块。
(5)系统管理模块。
图6-10所示的网络结构中有12个网络节点,每一节点都通过传感器采集现场的有关数据。在每一节点电路中都配置了MCP2510
CAN控制器和TJA1050总线收发器,其接口电路如图6-11所示。系统主控机与网络节点采用双绞线连接,实验时最大节点间的距离为35 m。
CAN现场总线具有如下基本特征: ①CAN总线是一种多主方式的串行通信总线,当CAN信号传输距离在40
m以内时,其最高通信速率为1 Mb/s,当信号传输距离在10 km以内时,CAN总线仍可提供
50kb/s的数据传输速率。网络上节点的数目主要取决于总线驱动电路,目前可达110个节点。
②通信的灵活性。CAN总线允许采用多主方式工作,网上任一节点均可在任何时刻主动向网上其他节点发送信息(不分主从),无需站地址等节点信息。事实上,通信取决于报文标识符进行(在CAN2.0A标准中规定了2032种报文标识符),采用报文滤波即可实现点到点、一点到多点或者全广播等多种方式通信,无需专门调度。
③通信的实时性。CAN网络上节点的信息可分为不同的优先级,从而能满足不同的实时性要求。
④通信的可靠性。CAN采用了非破坏性的总线仲裁技术,当多个节点同时向总线发送信息时,优先级较低的节点会主动退出发送,具有相对最高优先级的节点可以不受影响地继续传输数据,从而大大节省了总线仲裁时间,特别是在网络负荷很重的情况下也不会引起网络瘫痪。另一方面,CAN协议规定了采用短帧结构(比如一个数据帧内有效数据为8个字节),帧传输时间短,抗电磁干扰能力强。每帧内有CRC校验及其他校验措施(适用于位数小于127位的帧)。当节点发现严重错误时,能自动关闭输出,使其他节点操作不受影响。
基于以上基本特征,请估算具有最高优先权的数据帧最快可在多长时间内获得传输权限。请在150字以内简要说明理由并列出计算过程。 参考答案
为您推荐的考试题库
你可能感兴趣的试题
1.问答题 参考答案2.问答题 参考答案3.问答题 参考答案4.问答题 参考答案5.问答题 参考答案
热门相关试卷
最新相关试卷如何测量CAN总线速率
[问题点数:40分]
如何测量CAN总线速率
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。> 我用io模拟can总线时序有点问题,求指教
管理员:&&&人数:4534小组积分:55519简介:建立CAN总线学习和讨论平台!在工程项目中,大家经常采用RS232,RS485通讯方式,是因为它们简单!但是当你学会了CAN总线后,就知道CAN总线比它们更简单!你会在以后的设计中毫不犹豫的采用CAN总线作为通讯方式!我们的口号是:大家一起来体会CAN总线的简单可靠吧!《CAN总线轻松入门与实践》热卖中,敬请关注!小组公告小组暂无公告.&&|&&&&|&&
需要确认注册邮箱后才能下载,
楼主&&[其他]&
我用io模拟can总线时序有点问题,求指教
5年会员勋章目前未领取。领取条件:&凡是注册时间五年以上的活跃用户即可领取该勋章。
积分:235分
总积分:439分
发表于 20:22
我用mega16控制sja1000,因为不能扩展ram,只能模拟,但是有个问题是初始化写进去立即读写进去的数据是正确的,但是再主函数再次读取时就错啦,读到的不是寄存器里的数据而是寄存器的地址,这是怎么回事呢,我是徐是按数据手册写的啊下面是读函数unsigned char& SJA1000_READ(unsigned char ADDRESS) { delay_nus(1);CSJA1000_ALE_PIN;BSJA1000_WR_PIN;BSJA1000_RD_PIN;BSJA1000_CS_PIN; DDRA=0&&&&&&&&& //数据口为输出 PORTA=ADDRESS;&&&&& //输出数据的地址 asm("nop");//delay5us(1);&&&& BSJA1000_ALE_PIN;asm("nop");//delay5us(1); PORTA=ADDRESS;&&&& //输出数据的地址&& //再次输出地址,确保一致。 asm("nop");//delay5us(1); CSJA1000_ALE_PIN;CSJA1000_CS_PIN; CSJA1000_RD_PIN;asm("nop");//delay5us(2); asm("nop"); DDRA=0x00;&&&&&& //数据口为输入 PORTA=0&&&&& //上拉 asm("nop"); data=PINA;&&&&&& //获得数据 asm("nop");//delay5us(1); BSJA1000_RD_PIN;BSJA1000_CS_PIN; asm("nop");//delay5us(2); } 下面是在主函数里读取各个寄存器的值&CSJA1000_CS_PIN;&&&&&&& &TempData = SJA1000_READ(REG_STATUS);&&&usart_transmit(0x30+TempData);&&&TempData = SJA1000_READ(REG_TEST);&&&usart_transmit(0x30+TempData);&&&TempData = SJA1000_READ(REG_OCR );&&&usart_transmit(0x30+TempData);&&&TempData = SJA1000_READ(REG_BTR1);&&&usart_transmit(0x30+TempData);&&&TempData = SJA1000_READ(REG_BTR0);&&&usart_transmit(0x30+TempData);&&&TempData = SJA1000_READ(REG_INTENABLE);&&&usart_transmit(0x30+TempData);&&&TempData = SJA1000_READ(REG_INTERRUPT);&&&usart_transmit(0x30+TempData);&&&TempData = SJA1000_READ(REG_STATUS);&&&usart_transmit(0x30+TempData);&&&TempData = SJA1000_READ(REG_COMMAND);&&&usart_transmit(0x30+TempData);&&&TempData = SJA1000_READ(REG_MODE);&&&usart_transmit(0x30+TempData);&&&TempData = SJA1000_READ(REG_STATUS);&&&usart_transmit(0x30+TempData);&读到的数据是这个明显都是各寄存器地址嘛,求高手指点一下啊,这个块我急着用啊,结果好几天也改不过来 啊
xianmiao2009 编辑于 10:59
1楼&&[其他]&
Re:我用io模拟can总线时序有点问题,求指教
5年会员勋章目前未领取。领取条件:&凡是注册时间五年以上的活跃用户即可领取该勋章。
积分:235分
总积分:439分
发表于 13:33
都一天啦,也没个人给回复一下啊,行不行啊,别让我失望好不好&
2楼&&[其他]&
Re:我用io模拟can总线时序有点问题,求指教
5年会员勋章目前未领取。领取条件:&凡是注册时间五年以上的活跃用户即可领取该勋章。
积分:235分
总积分:439分
发表于 10:59
算啦,看来没人会啦,就当我没发吧,一群人不知道都能干点啥
--- 现有 3个主题,共 1页,目前第 1页 ---&&
点击,立即回复。
EDN China官方微信
扫一扫关注,获取电子新知,设计灵感
IC厂商小组
在线研讨会
赞助商链接
2016 EDN China -- Use of this website is subject to its terms of use.
京ICP备号-4 |
京公网安备37 |
新版社区已上线,旧版论坛、博客将停用
1、为防数据丢失,旧版论坛、博客不再接受发帖;
2、老用户只需重设密码,即可直接登录新平台;
3、新版博客将于8月底完美归来,敬请期待;
4、全新论坛、问答,体验升级、手机阅读更方便。> 如何一分钟找到CAN总线的问题节点
如何一分钟找到CAN总线的问题节点
  CAN-bus总线是将所有节点通过CANH和CANL连接在一起,实现信息通道共享的一种总线通讯方式。在带来布线方便与节约成本的同时,也为现场故障排查增加了难度。因为所有节点都挂接在一起,一旦需要检修或者出现通讯故障,难以快速判断故障节点。如图1所示。  
  CANScope分析仪广州致远电子股份有限公司研发的一款综合性的CAN总线开发与测试的专业工具,集海量存储示波器、网络分析仪、误码率分析仪、协议分析仪及可靠性测试工具于一身,并把各种仪器有机的整合和关联;重新定义CAN总线的开发测试方法,可对CAN网络通信正确性、可靠性、合理性进行多角度全方位的评估;帮助用户快速定位故障节点,解决CAN总线应用的各种问题,是CAN总线开发测试的终极工具。
  CANScope的“信号质量”分析插件可以通过分析每个CAN节点发出的波形,自动对其的最小电压幅值、最大电压幅值、信号幅值、波形上升沿时间、波形下降沿时间、信号时间进行综合“评分”,然后通过柱状图来直观显示出每个CAN帧ID的信号质量。用户无需深入了解CAN总线协议、眼图、斜率、幅值、振铃、地弹等等专业知识。只需使用CANScope采集一段时间后,点击鼠标即可自动完成分析工作。如图2所示。为六个测量评价的参数。
图2 CANScope信号质量分析参数
  如图3所示。为某地铁车辆上的CAN总线实际测试结果,通过信号质量的升序排列,可以看到发出帧ID为0x308的这个节点,信号质量平均值只有47分,最差值甚至只有34分,
图3 CANScope信号质量解析示意图(左边为最差质量)
  而信号质量评价图的右边为信号质量最好的发出0x263帧ID的节点,其最差质量也达到了70分。如图4所示,
图4 CANScope信号质量解析示意图(右边为最好质量)
  通过CANScope的波形筛选查看0x308的波形,发现有很明显的反射“地弹”现象,并且有效幅值比较小。如图5所示,
图5 信号质量最差点的波形
  而信号质量最好的0x263的波形如图6所示,没有明显的反射,波形十分整洁。故需要将发出0x308的这个节点拆下进行单独分析。
图6 信号质量最好点的波形
免责声明:
&&&&本网转载之文章来源于互联网,转载目的在于传递更多信息,不代表本网赞同其观点和对其真实性负责。如因作品内容、版权问题存在异议的,请在30日内与本网联系。联系方式:2
热门评论Top5
您有何高见
存储器¥3.52
430微控制器¥6.00
接口器件¥45.77
数据转换器¥256.81
美国国际消费类电子产品展览会(CES)是世界最大的消费类电子产品和技术的年度会展,其规模在全美各类年度会展中首屈一指。该展始于1967年,迄今已有45年
日至11月1日,以“信息化推动工业化,电子技术促进产业升级”为主题的第80届中国电子展(CEF)在上海新国际博览中心隆重开幕。
设计与运用
合作与转让
违规与防骗
工艺、材料与封装
标准、政策与法规
扑克牌人物评选
电子产业回顾与展望
版权所有 不得转载关于STM32F107 CAN总线问题的请教 - STM32/STM8技术论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
关于STM32F107 CAN总线问题的请教
13:05:40  
本帖最后由 zhang81ab 于
13:06 编辑
你好,我想请教下STM32F107 里面CAN总线问题,这个问题困扰了我好久。
项目里面有3个CAN节点,其中2个节点(假如标识符为0和1)需要同时向第三个节点(标识符701)发送数据,但是第三个节点只能接收到标识符为0的节点数据,1的数据接收不到。&&但是如果两个节点分别向第三个节点发送数据是没有问题的。 第三块板的功能是将CAN收到的数据通过USB传给上位机,我是通过BUS-HOUND软件来抓包的。
CAN总线不是有总线仲裁吗?先接收优先级较高节点的数据,然后接收优先级低节点的数据。均已设置为自动重发。& &为什么会接收不到标识符为1节点的数据呢?
程序如下:
节点1程序如下:
void CAN_Config(void)
&&/* CAN register init */
&&CAN_DeInit(CAN1);
&&CAN_StructInit(&CAN_InitStructure);
&&/* CAN1 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;& & //失能FIFO锁定模式
&&CAN_InitStructure.CAN_TXFP = DISABLE;
&&CAN_InitStructure.CAN_Mode = CAN_Mode_N
&&CAN_InitStructure.CAN_SJW = CAN_SJW_1& &//500k波特率
&&CAN_InitStructure.CAN_BS1 = CAN_BS1_6
&&CAN_InitStructure.CAN_BS2 = CAN_BS2_1
&&CAN_InitStructure.CAN_Prescaler = 9;
&&CAN_Init(CAN1, &CAN_InitStructure);
&&/* CAN1 filter init */
&&CAN_FilterInitStructure.CAN_FilterNumber = 0;
&&CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdM
&&CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32
&&CAN_FilterInitStructure.CAN_FilterIdHigh = 0xe020;& && &//通讯板11位标准标准符0x701
&&CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;&&
&&CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;
&&CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF;
&&CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
&&CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
&&CAN_FilterInit(&CAN_FilterInitStructure);
&&CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);//使能指定的CAN中断
& &/*CAN发送数据格式配置*/
&&TxMessage.StdId =0;& &
&&TxMessage.ExtId = 0;
&&TxMessage.RTR = CAN_RTR_DATA;
&&TxMessage.IDE = CAN_ID_STD;
&&TxMessage.DLC = 8;
——————————————————————————————————————————————————————————
节点2程序如下:
和节点1的相同,只是&&TxMessage.StdId =1;
——————————————————————————————————————————————————————————
节点3程序如下:
void CAN_Config(void)
&&/* CAN register init */
&&CAN_DeInit(CAN2);
&&CAN_StructInit(&CAN_InitStructure);
&&/* CAN1 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_N& && &&&
&&CAN_InitStructure.CAN_SJW = CAN_SJW_1& && && &&&//500K 波特率
&&CAN_InitStructure.CAN_BS1 = CAN_BS1_6
&&CAN_InitStructure.CAN_BS2 = CAN_BS2_1
&&CAN_InitStructure.CAN_Prescaler = 9;
&&CAN_Init(CAN2, &CAN_InitStructure);
&&/* CAN2 filter init */
&&CAN_FilterInitStructure.CAN_FilterNumber = 14;
&&CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdM& && && && &&&//过滤一组标识符出来
&&CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32
&&CAN_FilterInitStructure.CAN_FilterIdHigh =(((u32)0x0&&21)&0xffff0000)&&16;& && && && && & //过滤标准数据帧
&&CAN_FilterInitStructure.CAN_FilterIdLow = (((u32)0x0&&21)|CAN_ID_STD|CAN_RTR_DATA)&0
&&CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0&&
&&CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0&&
&&CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
&&CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
&&CAN_FilterInit(&CAN_FilterInitStructure);
&&CAN_ITConfig(CAN2, CAN_IT_FMP0, ENABLE);
&&TxMessage.StdId =0x701;
&&TxMessage.ExtId = 0;
&&TxMessage.RTR = CAN_RTR_DATA;
&&TxMessage.IDE = CAN_ID_STD;
&&TxMessage.DLC = 8;
节点3CAN中断接收程序如下:
void CAN2_RX0_IRQHandler(void)& &&&//CAN中断处理函数
&&//清空can接收缓存
&&CanRxMsg RxM
&&RxMessage.StdId=0x00;
&&RxMessage.ExtId=0x00;
&&RxMessage.IDE=0;
&&RxMessage.DLC=0;
&&RxMessage.FMI=0;
&&CAN_Receive(CAN2, CAN_FIFO0, &RxMessage);
if ((RxMessage.Data[0] =='F')&&(RxMessage.IDE == CAN_ID_STD))
&&Send_Buffer[0]=RxMessage.Data[0];
&&Send_Buffer[1]=RxMessage.Data[1];
&&Send_Buffer[2]=RxMessage.Data[2];
&&Send_Buffer[3]=RxMessage.Data[3];
&&Send_Buffer[4]=RxMessage.Data[4];
&&Send_Buffer[5]=RxMessage.Data[5];
&&Send_Buffer[6]=RxMessage.Data[6];
&&Send_Buffer[7]=RxMessage.Data[7];
&&USB_SIL_Write(EP1_IN, (uint8_t*)Send_Buffer, 8);& &// 向USB写入数据
&&#ifndef STM32F10X_CL
&&SetEPTxValid(ENDP1);
&&Send_Update = 1;
13:27:22  
网上大多是2个CAN节点的,很简单。很少有3个以及以上的。查看了几天,即使有3个也是主从机才有轮询方法,并不是同时发数据。 多从机冲突怎么解决??
15:52:17  
大神们,你们都不会吗???
假设两个节点同时发送数据,A节点发送的前3个位是100,B节点为101,在前2个位发送完毕的时候,两个节点都会认为自己发送成功,但是当发送到第三个位的时候,B节点会失去仲裁,因为0的优先级高于1的优先级,B节点监听到总线上不是1,因此失去仲裁,等待重新发送数据。
问题就是低优先级节点没有重发数据????是因为高优先级节点一直占用着总线吗?
Powered by

我要回帖

更多关于 can总线原理 的文章

 

随机推荐