can收發器 rx_CANOpen系列教程03 _CAN收發器功能、原理及作用

a84aa36e27dd180116456d6ec38f2c01.png

1寫在前面

前面文章是從大方向介紹了CAN網絡,讓大家對CAN網絡有一定的認識。本文將范圍縮小,講述整個CAN網絡其中的一個CAN收發器。如下圖標記出來的部分:

59b18459e0c9412ae06998829938d1cc.png

本文結合眾多初學者容易產生的疑問來講述CAN收發器相關的知識點,大概有如下幾點:

什么是CAN收發器?

CAN總線差分信號

CAN收發器芯片和485芯片差異

2

什么是CAN收發器?

CAN收發器在整個CAN網絡中所處的位置如上圖所示。CAN收發器就是一塊類似232或485的轉換芯片,它的主要功能是將CAN控制器的TTL信號轉換成CAN總線的差分信號。

2.1什么CAN控制器TTL信號?

現在的CAN控制器一般都與MCU集成在一起,其發送和接收TTL信號就是MCU引腳(高或低)信號。

以前還有獨立的CAN控制器,一個CAN網絡節點會包含三塊芯片:MCU芯片、CAN控制器、CAN收發器。現在是將前兩者集成在一起了(看文章開篇圖片)。

3

CAN總線差分信號

CAN總線信號從CAN收發器出來,為「兩線」「差分」信號,用隱形代表邏輯1,顯性代表邏輯0。

c2ea8f1e12f1d99703e4dafafed03b76.png

1.CAN收發器兩線

芯片引腳CAN_H、CAN_L

2.CAN_H和CAN_L電壓

電壓的大小根據芯片型號而定,一般常見的CAN收發芯片有3.3V和5V兩種芯片。

如上圖,為5VCAN收發芯片,在邏輯0和邏輯1時電壓情況:

邏輯0時:

顯性,CAN_H=3.5V,CAN_L=1.5V;

邏輯1時:

隱性,CAN_H=2.5V,CAN_L=2.5V;

當然,3.3V電壓芯片的總線電壓原理類似。而實際應用中,總線電壓并非絕對的像上面說的3.5V、2.5V、1.5V這種電壓,會受到導線電阻、外界干擾等影響。

3.隱性和顯性

學過生物都知道,基因有隱性和顯性。隱性的基因實際存在,但不會表現出來。有顯性的基因就會表現出來。

這里CAN總線隱性信號和顯性信號道理一樣,當總線兩種信號都有時,總線表現出來的就是顯性信號。

提示:我們這里說的顯性和隱性信號,指的是總線傳輸的bit位信號。

所以,CAN總線平時空閑表現為隱性狀態。如果想要發送的信號為隱性位,那么總線才會呈現出來隱性。否則,只要其它有一個節點發送顯性信號,你這個節點發送出來的隱性信號就無效。

4.CAN收發器R引腳

CAN收發器R引腳就是與CAN控制器接收相連的引腳。如下圖:

ad1337744fc396489ec9666e5edc79d5.png

R引腳的信號是表示總線當前的信號,用于控制器實時監測總線信號。主要兩個目的:

A.監測其它節點發送出來的信號:別人給它發送數據;

B.監測自身節點發送出去的信號:自己發送是否失敗。就像上面說的,自己發送一個隱形信號,結果監測出來是顯性信號,那就說明是別人在發送數據。

4

CAN收發器芯片和485芯片差異

CAN通信和485通信一樣,屬于半雙工。但是,為什么CAN總線相比485通信不管在速度和穩定性上都具有明顯優勢呢?

4.1總線利用率

CAN收發器工作原理與485具有較大差異。從上面的差分信號可以看得出來,兩種芯片同時存在,只有顯性信號有效,而不會影響總線傳輸。簡單來說就是CAN總線具有自動仲裁功能,這樣就提高了總線的利用率。

RS485總線是一種常規的通信總線,它不能夠做總線的自動仲裁,也就是不能夠同時發送數據以避免總線競爭,所以整個系統的通信效率必然較低,數據冗余量較大,對于速度要求高的應用場所不適應用RS485總線。

提示:

CAN總線沒有被發送出去的隱性信號,會由CAN控制器后續發送出去。這里牽涉到CAN總線優先級的問題,后續進一步講述。

當然,CAN相比485具有明顯優勢,主要原因還是在于CAN控制器。

4.2可以不使用CAN收發器嗎?

UART可以直接通過TX連接對方的RX引腳,利用TTL信號進行通信,那么CAN也可以嗎?

答案:單向傳輸可以,雙向傳輸就不行。

原因很簡單,上面說了,CAN控制器會實時監測發送出去的信號是否正確。也就是說TX要與RX信號一致才行,否則CAN控制器認為你發送失敗。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541401.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541401.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541401.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

操作系統文件分配策略_操作系統中的文件分配方法

操作系統文件分配策略分配方法 (Allocation Method) The allocation method defines how the files are stored in the disk blocks. The direct access nature of the disks gives us the flexibility to implement the files. In many cases, different files or many files …

簡述container與container-fluid的區別

在bootstrap中的布局容器一欄中,提供了container與container-fluid兩種容器,其官方解釋為: .container 類用于固定寬度并支持響應式布局的容器。 .container-fluid 類用于 100% 寬度,占據全部視口(viewport&#xff09…

centos php fpm 停止_如何關閉php-fpm進程?

因為你是編譯的,可以在源碼中復制php-fpm的init文件到系統中:cp -f sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm然后就可以使用以下命令啟動、停止、重啟和重新加載php-fpm了:service php-fpm startservice php-fpm restartservice php-fpm…

minus_Java Duration類| minus()方法與示例

minus持續時間類minus()方法 (Duration Class minus() method) Syntax: 句法: public Duration minus(Duration d);public Duration minus(long amt, TemporalUnit t_unit);minus() method is available in java.time package. minus()方法在java.time包中可用。 m…

Mongodb聚合函數

插入 測試數據 for(var j1;j<3;j){ for(var i1;i<3;i){ var person{Name:"jack"i,Age:i,Address:["henan","wuhan"],Course:[{Name:"shuxue",Score:i},{Name:"wuli",Score:i}]}db.DemoTest.Person.insert(pers…

php rename函數_php rename函數怎么用

PHP rename()函數用于重命名文件或目錄&#xff0c;語法“rename(文件舊名稱,新名稱,句柄環境)”&#xff0c;使用用戶指定的新名稱更改文件或目錄的舊名稱&#xff0c;并且可以根據需要在目錄之間移動&#xff1b;成功時返回True&#xff0c;失敗時返回False。php rename()函數…

Java BigInteger類| xor()方法與示例

BigInteger類的xor()方法 (BigInteger Class xor() method) xor() method is available in java.math package. xor()方法在java.math包中可用。 xor() method is used to perform xor operation between this BigInteger and the given BigInteger and we all know when we pe…

Spring Data Redis實戰之提供RedisTemplate

為什么80%的碼農都做不了架構師&#xff1f;>>> 參考&#xff1a; http://www.cnblogs.com/edwinchen/p/3816938.html 本項目創建的是Maven項目 一、pom.xml引入dependencies <dependency><groupId>org.springframework.data</groupId><artif…

Java BigInteger類| and()方法與示例

BigInteger類和()方法 (BigInteger Class and() method) and() method is available in java.math package. and()方法在java.math包中可用。 and() method is used to perform and operation between this BigInteger and the given BigInteger (val) [i.e. (this BigInteger)…

php映射,PHP實現路由映射到指定控制器

自定義路由的功能&#xff0c;指定到pathinfo的url上,再次升級之前的腳本SimpleLoader.phpclass SimpleLoader{public static function run($rulesarray()){header("content-type:text/html;charsetutf-8");self::register();self::commandLine();self::router($rule…

stl vector 函數_vector :: clear()函數,以及C ++ STL中的示例

stl vector 函數C vector :: clear()函數 (C vector::clear() function) vector::clear() is a library function of "vector" header, it is used to remove/clear all elements of the vector, it makes the 0 sized vector after removing all elements. vector …

Commonjs規范及Node模塊實現

前面的話 Node在實現中并非完全按照CommonJS規范實現&#xff0c;而是對模塊規范進行了一定的取舍&#xff0c;同時也增加了少許自身需要的特性。本文將詳細介紹NodeJS的模塊實現 引入 nodejs是區別于javascript的&#xff0c;在javascript中的頂層對象是window&#xff0c;而在…

thinkphp3 php jwt,ThinkPHP5 使用 JWT 進行加密

- 使用 Composer安裝此擴展- 代碼示例<?php /*** [InterCommon-接口公用]* Author RainCyan* DateTime 2019-08-12T16:38:080800*/namespace app\hladmin\controller;use think\Controller;use \Firebase\JWT\JWT;class InterCommonController extends Controller {private…

數據管理與商業智能_商業智能與數據科學

數據管理與商業智能In this heavily jargonized trade, the words typically overlap one another, leading to a scarcity of understanding or a state of confusion around these ideas. whereas big data vs analytics or computing vs machine learning vs cognitive inte…

JavaWeb網上圖書商城完整項目--day02-14.登錄功能的login頁面處理

1、現在注冊成功之后&#xff0c;我們來到登錄頁面&#xff0c;登錄頁面在于 在登錄頁面。我們也需要向注冊頁面一樣對登錄的用戶名、密碼 驗證碼等在jsp頁面中進行校驗&#xff0c;校驗我們單獨放置一個login.js文件中進行處理&#xff0c;然后login.jsp加載該js文件 我們來看…

php多線程是什么意思,多線程是什么意思

線程是操作系統能夠進行運算調度的最小單位&#xff0c;它被包含在進程之中&#xff0c;是進程中的實際運作單位&#xff0c;而多線程就是指從軟件或者硬件上實現多個線程并發執行的技術&#xff0c;具有多線程能力的計算機因有硬件支持而能夠在同一時間執行多于一個線程&#…

c++一個類創建多個對象_C ++ | 創建一個類的多個對象

c一個類創建多個對象In the below program, we are creating a C program to create multiple objects of a class. 在下面的程序中&#xff0c;我們正在創建一個C 程序來創建一個類的多個對象 。 /* C program to create multiple objects of a class */#include <iostrea…

Activity中與ListActivity中使用listview區別

一.Activity中與ListActivity中使用listview區別&#xff08;本身沒多大區別&#xff0c;只是ListActivity在listview的顯示上做了一些優化&#xff09;Activity中使用Listview步驟&#xff1a;1.xml布局中,ListView標簽id可以任意取值如&#xff1a;<ListView andro…

java相關是什么,什么是java

java基礎常見面試題&#xff0c;這是一篇超長的隨筆&#xff01;&#xff01;&#xff01;1. Java基礎部分....................................................... 4 1、一個".java"源文件中是否可以包括多個類(不是內部類)&#xff1f;有什么限制&#xff1f;.. …

如何在Scala中將Double轉換為String?

Double in Scala is a data type that stores numerical values that have decimals. It can store a 64-bit floating point number. Scala中的Double是一種數據類型&#xff0c;用于存儲帶有小數的數值。 它可以存儲一個64位浮點數。 Example: 例&#xff1a; val decimal…