這一天是汽車是一堆數百微控制器的滾動堆 – 只是詢問任何灰色的機械師,他會開始他的“化油器”咆哮。所有這些系統和子系統都需要在電敵對環境中互相交流,並且說誤解或甚至延遲溝通可能產生重大後果並不誇張。汽車網絡是主要的業務。汽車的大規模生產為非汽車硬件黑客提供了許多相關的收發器IC低成本。那麼為什麼我們沒有看到更多的黑客項目,這些項目利用了這種非凡的資源基礎?
汽車網絡的骨幹是控制器區域網絡(CAN)。 Hackaday自己的[Eric偶聯]是一家汽車黑客Afterordinaire,並寫了許多你想知道的關於CAN總線在一個Multipart系列中的所有東西,你肯定想在以後讀取閱讀。發動機,制動器,門和所有儀器數據評論(差速器)可以。這是快速和高的可靠性。它也很複雜,實現昂貴。
在1990年代末,眾多生產商擁有自己的專有總線協議,可以與汽車網絡的非關鍵部分一起運行:門安裝的控制台如何與門鎖司機和窗戶電機交談。它不值得雜亂,具有這樣的非關鍵和本地通信的主要罐式總線,所以子網已經擺脫了主要罐頭。這些不需要主網絡的速度或可靠性保證,並且由於成本原因,它們必須易於實現。最小的微控制器應該足以上下捲起窗戶,對吧?
在2000年代初期,本地互連網絡(LIN)規範標準化了這些子網的一種方法,重點關注實現的低成本,中等速度,可重構性和可預測行為,以便在一個主微控制器和少量奴隸之間進行通信群集。便宜,簡單,可在小型微控制器上可實現,最適合中型項目?黑客的夢想!您為什麼在您的多個微型項目中使用Lin?讓我們挖掘,你可以看看是否有任何幫助。
林協議
林“群集”,這是在行話中調用本地迷你網絡的內容,包括單個主微控制器和許多從設備組成。林先從傳統的8N1 UART串行開始,通常為19,200波特,並使用一根電線。接下來,它添加了一個協議,該協議允許將此單線用作總線,在多個從站之間共享。如果您試圖為簡單的UART串行通信滾動自己的網絡協議,則會最終與Lin等類似的東西。去獲取規範(PDF)的副本並閱讀!
每個LIN事務都是基本上相同的:主設備發送一個包含受保護標識符(PID)的標題,它指定要執行的任務。任務可以是“報告溫度傳感器2”或“設置伺服3位置”的東西。根據任務,在一個和八個字節的數據之間,按照雙字節校驗和。奴隸必須知道要響應哪些任務以及如何回應。因此,如果發送“設置伺服3位置”,則需要偵聽下一個字節並相應地響應。所有不響應命令的奴隸都可以忽略數據,直到下一個前導碼。
在“報告溫度傳感器2”的情況下,具有溫度傳感器的從機會在接收到命令後立即發送數據。因為字節長度是預先已知的,並且只允許傳感器2響應此任務,所以主人知道要仔細聆聽,例如,在反應中進行四個字節,並知道應該採取多長時間。
此輪詢系統具有主發送標題和從站發送反應的從站保證,沒有一個設備將同時訪問總線,因此LIN僅使用單個Rx / Tx線。前導碼包括同步字節(0x55),幫助從站鎖定到主時鐘,因此從設備可以在更便宜的RC時鐘源上運行,並且可以進行自動波動。
由於消息的長度提前,因此可以在計劃中編寫主機的輪詢例程的時序。主設備以定義的間隔調查網絡,如果從設備未在事務所需時間的1.4倍內響應,則會在操作中丟失。無論哪種方式,主站都在其計劃中到下一個項目,並且不會重試潛在有缺陷的奴隸,直到轉彎再次出現。這保證了所有設備的已知更新率,這使得生命更加簡單地編程主設備。
那些是基礎知識。主服務器發送PID,並遵循一系列數據字節。一切都是Comfy舊的UART,呼叫和響應,適應盡可能創建一個小型網絡。
額外
來自一名教練VI的GUI LIN配置應用程序德..
保持網絡簡單要求主站和從站都同意命令集和有效的反應長度。原則上,Lin群集需要許多信息。幫助問題有些,有一種傳統格式,可以在LIN規範中指出所有這些。
還有一個傳統的API用於C,主機和從控制器都可以用於在LIN群集中進行處理編碼行為。合併,這使得傳統的工作流程用於指定和實現LIN總線 – 非常有用,也非常有用,也非常有用,也沒有為黑客無用。
還有一個為總線定義的睡眠狀態和行為,帶有相關的睡眠和喚醒信號。所有的奴隸都應該響應睡眠信號,如果他們沒有聽到大師的話,任何一個都應該在四秒鐘後自動睡覺。任何節點,從站或主設備,都可以發送WakeUp命令,之後掌握應該返回正常的輪詢計劃。
Lin 2.0版包括許多可選的幀類型,使網絡更靈活。特別是,“散發幀”如果由於最後更新而沒有任何新數據,則使從屬的反應是可選的。 “事件觸發框架”就像零星幀,除非它們可以另外響應具有新數據的任何從屬節點。
這引入了總線上碰撞的可能性,在這種情況下,希望校驗和不會加起來,主人返回到以前的特定從屬幀。當數據更新不頻繁時,這兩種模式加速了總線,但在代碼中增加了一些不確定性和條件複雜性的不確定性。只有在需要它們時才使用它們。
主站也可以有多個時間表,並在其中切換。奴隸不在乎 – 他們只是傾聽與他們相關的任務無論如何。例如,如果它沒有改變,則主人可以在每個時段發送伺服位置數據,例如,即使它使事物概念上更簡單。您的來電。
甚至可以使用CAN總線兼容的可選攜帶層規範,並使其更簡單地將本地LIN集群與更大的網絡集成。簡而言之,林是通過UART總線協議的良好思考,具有良好的行業採用。您可以找到來自Lin收發器硬件的每個供應商的良好教程。 (這是國家儀器的一個極好的介紹。)
硬件 – 物理層
頂部所有這些協議均勻的良好型是一種廣泛的林收發器芯片,可用於普通收發器的0.25美元至0.50美元,直到可用於集成電壓調節器的“系統依據”芯片差距。這些尤其是光滑的,因為收發器可以照顧睡眠/喚醒邏輯,並打開和關閉對微控制器的電源。這使得集成了在3.3 V中操作的從節點非常簡單。
小芯片購買了很多。
由於林總線是為汽車開發的,它通常會為12 v傳達,因為這就是通過汽車線束的靜脈的課程。 LIN收發器硬件需要能夠適應更高的電壓,因為汽車電氣系統可以是尖刺的環境。他們還必須應對總線爭用,當收發器芯片可能試圖在別人試圖將林線上拉下來時,在別人試圖拉起它,因此也建立了過熱的保護。林收發器是強大的小野獸。
與I2C線相比,與瑣小電阻器拉起,汽車LIN總線可用1kΩ電阻拉到12V。要將這條線放在足夠快,LIN收發器需要能夠能夠進行幾十毫安,因此它們具有略微牛頭(IC)內置的晶體管。高電壓和相對高線電流的組合意味著汽車規範林公共汽車適用於40米,而不是幾米,即I2C為您提供駕駛員而無需訴諸司機。如果您需要距離或噪音抗擾度,Lin就在您身邊。
但是,即使是收發器硬件,也沒有任何力量在12 v處運行公共汽車。我看到的微芯片收發器,我看到的下降到5.5 v,而來自恩智浦和梅克萊斯的人在Arduino兼容的5 V上運行。
沒有什麼能力你根本使用收發器硬件!您可以簡單地將PNP晶體管(或P頻道MOSFET)連接到總線線路並使用UART TX驅動,使用RX線對總線進行採樣。這具有本地迴聲的缺點,但可以在軟件中處理。或者,只有幾個部分,我們以前見過這項服務。不過,我找不到從頭開始實施林收發器的任何黑客項目。也許那是因為工業公司非常便宜。
長處和短處
沒有公共汽車是所有場合的理想選擇,林也不例外。林並不是特別快,正在開發約19,200波特UAR從微控制器的角度來看,更新相當不常。超時的全長交易需要大約十毫秒。如果主輪詢十六個設備,那就是大約七個赫茲最糟糕的更新率。當然,主人每次都不需要調查每個設備,並且許多消息的消息將是一個長度的一半,但你不會超過200 Hz。另一方面,更新速率是恆定的,因為能夠為不足的可靠性和簡單性執行薄餅設備的緊密超時,並且它比I2C更慢。
有兩個主要版本的林版你會在野外,1.x和2.x中看到。除了上面討論的可選幀類型之外,這兩個版本還有不同的校驗和公式 – 而且2.x中的一個是真正的奇異 – 需要基於網絡的計算器來確保您正確執行正確的計算器。而不是另外的Mod-256,它們從任何值256或更高減去255。這就像一個8位溢出,圍繞到1而不是0.這對你們中的任何一個都有意義嗎?
Lin Devices在汽車行業外面的普遍存在的是I2C或SPI,長時間,所以你可能從未被迫處理該協議。但是,如果您想通過只需一根電線(加上地面)以較少的基於微控制器的基於微控制器的模塊網絡,可以輕鬆地思考任何內容。寫i2c從代碼肯定沒有野餐。編寫代碼以偵聽UART行上的特定字節,然後反應不能更簡單。
想把你的普通香草UART變成公共汽車嗎?拿出林書的頁面!你已經這樣做了嗎?給我們看一看!