我想讓Arduino在CAN網絡中運行。 Arduino是否提供了提供OSI模型網絡層的軟件?我會想象用GPIO/ADC檢測HI/LOW電平,並用DAC發送信號到網絡。如果沒有附加任何額外的硬件,這將是很好的。我不介意CAN網絡需要終端電阻。有沒有額外的硬件可以在Arduino上使用CAN?
By Arduino我的意思是其中任何一個。我的意圖是保持發展環境。
如果這樣的軟件不存在,是否有任何技術障礙,如有限的閃存大小(同樣,我並不是指特定的Atmega芯片)。
我想讓Arduino在CAN網絡中運行。 Arduino是否提供了提供OSI模型網絡層的軟件?我會想象用GPIO/ADC檢測HI/LOW電平,並用DAC發送信號到網絡。如果沒有附加任何額外的硬件,這將是很好的。我不介意CAN網絡需要終端電阻。有沒有額外的硬件可以在Arduino上使用CAN?
By Arduino我的意思是其中任何一個。我的意圖是保持發展環境。
如果這樣的軟件不存在,是否有任何技術障礙,如有限的閃存大小(同樣,我並不是指特定的Atmega芯片)。
你可以寫一些撞擊的CAN驅動程序,但它有很多限制。
首先是時間問題,很難實現位定時和仲裁。
您將能夠獲得10kb或甚至50kb但消耗大量的cpu時間。
而代碼本身是一個痛苦。
您必須快速計算CRC(簡單),但要實現碰撞檢測並且所有時序參數都不容易。
有一次,我爲一家公司做過這件事,但這是一個真正糟糕的主意。
更好地購買1歐元的芯片,並開心。
謝謝。這就是我想到的 - 在主板上獲得真正的CAN控制器並且具有用於與主控制器進行數據交換的中斷和串行通信(在Arduino的情況下爲ATMega),這是非常實惠的。這可能是沒有人這樣做的原因。請問您實施的平臺是什麼,請問? –
絕對。沒有硬件控制器,我不會靠近CAN。 –
@NikitaVorontsov我在msp430上實現了它(德州儀器) – jeb
我不認爲,這樣的軟件存在。 CAN總線比例如I2C更復雜。基本上你必須實現CAN控制器和CAN收發器的功能。有關更多詳細信息,請參見thread(德文)。
或者,您可以使用CAN shields之一。另一種選擇是使用BeagleBone和合適的CAN cape。
也看看AVR-CAN。
最初的想法是在沒有CAN控制器的芯片上實現CAN,但能夠實現CAN的GPIO(至少低速)。所以,接受的答案證實了我懷疑,鑑於低成本的硬件,它根本沒有意義。無論如何感謝所有的鏈接。 –
有幾個CAN總線屏蔽板可用(例如:this和this),這將是一個更好的解決方案。這不僅僅是控制器芯片,總線接口,線路驅動器和電源都需要考慮。如果您擁有資源和技能,您當然可以創建自己的電路板或麪包板。
即使你通過GPIO對其進行位反轉,你也需要一些我認爲可以處理總線競爭檢測的硬件模塊,它會非常慢,並且可能不能與總線上的「真實」CAN控制器良好地互操作。如果你的目標是在你自己設計的設備之間進行通信,而不是現成的CAN設備,那麼你不需要CAN,那麼專有技術就足夠了,而且UART的性能會更快一點去除CAN的實現。
正如我在我的問題中提到的,我正在尋找一些現有的東西(我不打算自己開發它)。另外,關於所需的硬件 - 我提到我不反對幾個無源組件。但是連接一個全功能的CAN控制器 - 是不同的。在這種情況下,你的建議更有意義。無論如何感謝您的回答。 –
在提出這樣的想法之前,你應該問問自己,你是否知道CAN總線是什麼以及它需要什麼......在軟件中這麼做根本沒有任何意義。第一款帶有片上CAN控制器的微控制器至少在15年前發佈。甚至還有片上帶有控制器+收發器的MCU,例如[LPC11C22](http://www.nxp.com/documents/data_sheet/LPC11CX2_CX4.pdf)(ARM Cortex M0)。 – Lundin