<p>前言</p><p id="24KO1MLP">前面已经介绍了几种总线协议,那现在如果在汽车上实际应用一种总线协议来通讯的话,你会选择哪一种呢?</p><p><blockquote id="24KO1MOC">答案是 都不行 因为在汽车中许多系统都需要实时控制,而且数据必须可靠,即使面对面对恶劣环境也要正常运行</blockquote></p><p id="24KO1MLR">如何解决这个问题呢?就要看CAN总线了</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0927%2F10393ce1j00s1mxgm001kd200u000dxg00g2007g.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="24KO1MLT">ECU</p><p>如何传输数据?</p><p id="24KO1MM0">现在将车上的每个设备用一条总线连接起来</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0927%2Fbb26a6e5j00s1mxgm000td200u000ayg00g2005u.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="24KO1MM3">要想CAN通讯,就必须要专门的CAN收发器,经过CAN收发器,普通信号就会转化成差分信号(差分信号由两根线表示)</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0927%2F82935abaj00s1mxgm000qd200u000chg00g2006o.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="24KO1MM6">如果输入0,CAN收发器的两根线分别输出3.5V和1.5V(压差为2V)</p><p id="24KO1MM7">如果输入1,CAN收发器的两根线都输出2.5V(压差为0V)</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0927%2F2ce5d3fej00s1mxgn000xd200u000mrg00g200c6.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p>为什么要这样表示数据?</p><p id="24KO1MMC">想象一下,如果这条线是0V,受到了干扰,电压就会波动</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0927%2Facj00s1mxgo0008d200u0006xg00g2003p.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0927%2Fe284cb0bj00s1mxgo000fd200u0006zg00g2003q.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="24KO1MMH">如果是两条线缠绕在一起,用差分信号来表示数据的话,即使受到了干扰,也是两条线一起受到干扰,依旧存在压差</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0927%2Fdbb19c0fj00s1mxgp005nd200tm0155g00g200mb.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p>CAN数据格式</p><p id="24KO1MMK">这是一帧完整的数据</p><p id="24KO1MML">最开始是起始位(始终为0)</p><p id="24KO1MMM">然后是11位的识别码</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0927%2F80cf4257j00s1mxgp000ld200u0006fg00g2003f.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="24KO1MMP">每一个设备都有唯一的11位识别码</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0927%2F4ej00s1mxgq001hd200u000dtg00it008n.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="24KO1MMS">紧接着是RTR位用来区分数据帧(0)或远程请求帧(1)</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0927%2F94ca16c2j00s1mxgq000sd200u00074g00it004g.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="24KO1MMV">接下来是6位控制码</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0927%2Fa6e89637j00s1mxgq0012d200u000edg00it0090.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="24KO1MN2">其中第一位的IDE位是用来区分是标准帧还是拓展帧(标准帧有11位的识别码,IDE位为0;而拓展码有29位的识别码,IDE位为1)</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0927%2F893a540dj00s1mxgr001ad200u000acg00it006h.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="24KO1MN5">下面是预留位,它是逻辑0</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0927%2F47b0a35ej00s1mxgr000wd200ok00bpg00g2007n.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="24KO1MN8">剩下的4位为DLC位,表示数据长度</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0927%2F3c81763ej00s1mxgr0011d200u000cqg00g2006t.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="24KO1MNB">每一个数值对应每一个字节(比如如图数值为8,对应数据长度为8个字节)</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0927%2Faf07cae8j00s1mxgs000vd200u0009gg00it005x.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="24KO1MNE">接下来是16位的CRC循环冗余校验位,它是为了确保收到的数据的准确性</p><p id="24KO1MNF">首先是15位CRC校验位,如果和接收到的CRC校验位不一致,就会重新再重发一次</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0927%2F062790daj00s1mxgs000xd200u0007tg00it004w.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="24KO1MNI">最后是CRC界定位,目的是为了与后面的数据区分开来</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0927%2F140abf9bj00s1mxgs000ld200jx009yg00it009e.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="24KO1MNL">然后是2位ACK码</p><p id="24KO1MNM">第一位是ACK确认槽(发送端是1,接收端就是0)用来表示应答</p><p id="24KO1MNN">第2位是ACK界定位(始终为1),目的也是为了和后面的数据区分开来,</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0927%2F70ef8fa7j00s1mxgt000od200ou00arg00g2006y.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="24KO1MNQ">最后是7位结束位(时钟为1)</p><p id="24KO1MNS">如果用用差分信号表示,电平是这样的,如图所示</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0927%2F7636a095j00s1mxgt001ad200u000bfg00it0075.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="24KO1MNU">如果此时总线上同时有2个设备发出控制信号,究竟优先执行哪一个设备的信号呢?</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0927%2F944dc4c9j00s1mxgt000vd200u000awg00g2005t.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="24KO1MO1">这就得看11位的识别码了,它不仅指定了哪个设备,还表示了优先级</p><p class="f_center"><img src="https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2023%2F0927%2F2b4efa3dj00s1mxgt000qd200u000ckg00it007v.jpg&thumbnail=660x&quality=80&type=jpg"/><br/></p><p id="24KO1MO4">当总线同时为1或0,总线会被置为0(即优先执行电平0)</p><p>总结</p><p id="24KO1MO6">了解完了CAN总线,或许会有一个疑惑点?</p><p id="24KO1MO7">CAN总线和RS485是不是有点相似,对吧?</p><p id="24KO1MO8">虽然的确有些相似之处,但CAN总线是专门用于汽车领域的,就比如数据可靠性,CAN总线检测到数据不一致,就会重新发送,而485就发一次,不管是不是正确的数据</p><p id="24KO1MO9">相对485不止一个优点,碍于文字,就不过多叙述了</p>
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/158908.html