Outlook:

1. 浮誇的吹牛X2. 乾貨3. 乾貨中的乾貨

Autosar這個概念已經火了好一段時間了。但是什麼是Autosar,為什麼要Autosar,怎麼用Autosar?這可能對大多數人都是個問題。

我也是抱著一顆學習的心來了解一下,什麼是Autosar?並且學習一下Autosar是如何規範ECU的時間同步問題。

啥都不說了,先上圖,必須把氣氛先烘托起來:

AUTOSAR – Core Partners and Partners

一般大哥都說,地位是兄弟們給的。沒錯,Autosar在汽車軟體界,就是大哥的地位。9個核心創始會員,53個高級會員,以及不計其數的低階會員們,本身就說明了它的重要性。那問題來了,Autosar的好處是什麼?來,看圖:

The day before Autosar

Autosar就是讓ECUs的軟體架構標準化:

1.讓軟體和硬體分的清清楚楚

2.讓不同功能的軟體模塊分的清清楚楚

3. 非常方便模塊再利用

4. 減少開發成本,提高質量和效率

就像是統一了手機充電介面一樣,管你三星蘋果還是華為,隨便插拔,隨心所欲的充電,這就是標準化的力量。Autosar可以讓主機廠(OEM, 比如大眾寶馬奧迪等),供應商(大陸,博世,Nvidia, Renesas等),開發工具供應商(Matlab, Vector, Electrobit等),以及新入市場的朋友(各路創業公司們),都可以收益。因為任何人都可以很方便的根據規範標準,開發自己的專長的功能或者工具,而不必浪費大量的人力物力去匹配那些根本沒有意義的介面或者平台。類似於你開發一個簡單實用的手機APP,你真的沒有必要去開發蘋果版本,安卓版本,太費神了,開發一次就夠了,你的價值在於創意,而不是寫代碼!

AUTOSAR standardizes two software platforms –Classic and Adaptive

隨著時代變遷,Autosar也不能落後於,過去主要是比較死板的Classic Autosar, 如今新的更靈活的Adaptive Autosar也橫空出世。因為目前趨勢是多核多Soc的硬體結構,所以基於性能和安全需求的考量,可以混合兩種Autosar架構。

基於以上特點,Autosar註定不會只能在汽車上應用,電動車,無軌交通,遊艇,輪船等等等等,都能用。但是注意,核電站,Autosar不宜,畢竟付不起那個責任。

吹了半天牛逼,該來點乾貨了,那麼我試著從基於Autosar的時間同步功能,講講,Autosar到底是怎麼標準化軟體架構的。

~~~~~乾貨分割線~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

師出有名,講的就是做任何事情之前都要講一個好的motivation。軟體也是同樣的道理。事實上,時間同步是非常重要的一個概念。可以想像,一首優美的交響樂,各種不同的樂器以及樂手要非常默契在節拍內準確的演奏自己的樂章,快一拍或者慢一拍都是非常刺耳的,甚至可能會擾亂整場演奏會。這其實就是智能駕駛實時系統的真實寫照,各個模塊及演算法要準時準點的按照節奏執行自己的功能,不能快,也不能慢。所以,時間同步顯得尤為重要,大家要有一個一致的時鐘,這就是傳說中的Global Time (GT).

為了統一控制時間,我們就需要一個全局時間軟體模塊(StbM, Synchronized Time-base Manager)。

功能只有兩個:1. 同步各個軟體模塊實體,2. 提供絕對時間值。

它的功能顯而易見就是作為一個中介,統一大家的時鐘,已達到同步各個軟體及演算法模塊。

啥都不說了,先來一張圖體會一下StbM的作用對象們:

StbM就是一個中介,來傳遞同步時鐘信號

  1. StbM要能提供同步時鐘信息給Triggered Customer, 比如操作系統。操作系統就好比樂隊指揮,也需要看著表來指揮樂隊演奏。
  2. StbM要能提供同步時鐘信息給Active Customer, 比如有些演算法或感測器。
  3. StbM要能提供同步時鐘信息給Notification Customer, 想像一下國內浮誇的摩托車裡面絢麗的內飾燈,他們可能要按照節奏閃動。
  4. StbM要能通過匯流排提供同步時鐘信息,比如CAN, FlexRay或者Ethernet.

全局時間如何通過CAN,FlexRay和ETH來傳播

其實時間同步的難點在於,硬體時鐘信號存在偏差。也就是說不同公司不同產品,即使產品說明書上寫著相同的時鐘頻率,但實際上由於公差或者物理熱效應,事實上是在時間維度上是存在偏差的。下圖就是說真正的時鐘信息是如何產生並且傳遞的:

從下往上看

從下往上看上面這幅圖。右下角就是硬體時鐘,也是整個同步系統的基石。但是因為隔一段時間超過最大值後就會溢出,所以需要一個Software Counter來記錄這種溢出,然後一起產生了一個虛擬本地時間 (Virtual Local Time). 這個時間就沒有溢出和跳躍了,也就是說很平穩的表達時間的流逝。接下來就是技術核心,如何進行時間的矯正,這個下面會細講(durchsprechen, 複習一下德語)。接下來就可以產生一個同步的本地時間信號,之後就可以傳遞給其他的軟體模塊了。

~~~~~乾貨中的乾貨分割線~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

乾貨中的乾貨: 時間矯正演算法

先上圖,橫軸代表全局時間,縱軸代表本地時間。虛線代表理想的時間關係,藍線代表實際的時間關係。顯而易見,實際上,是有偏差的。其中斜率代表時鐘頻率偏差,紅色箭頭代表絕對時間的偏差。

Time Deviations Rate Correction

接下來注意了:

時間的矯正過程,並不改變各個在本地的運行時鐘,而是動態改變本地時鐘的實體變數。

It merely corrects the clock values on- the-fly when they are read.

---Autosar

接下來就是矯正的時序流程圖: 先去測量,然後設置新的矯正值,然後讀現在的本地時間並且矯正本地的時間,然後寫回本地模塊。

矯正時序圖

動態誤差圖

上圖就非常清楚地顯示了時間誤差的,其實也就是一種動態誤差調整的過程。

接下來,簡單介紹一下StbM如何通過CAN匯流排來同步其他的模塊。依舊先上圖:

CAN Time Synchronization mechanism

過程就是兩步:

  1. Master在t1r時刻先發送一個SYNC信號,但這個信號寫的是之前要發送SYNC時的時間點(t0r),然後在t2r時刻Slave接收到了這個SYNC信號。
  2. Master再次發送一個FUP信號,這個信號的內容就是他t1r-t0r的值。
  3. 最後在Slave方,我們就可以計算出本地當下的同步時間值=(t3r-t2r)+t1r, so easy!

當然,以上都是一些簡單的原理性概述,具體的規範和標準,還是要參見Autosar原文,裡面非常詳細定義了需求,功能,介面,時序,設置等。彷彿一本字典,需要的時候再去查閱吧。

有興趣的朋友一起學習討論了。

推薦閱讀:

相关文章