AUTOSAR Time Synchronization時間同步

時間同步

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

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

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

3. 非常方便模塊再利用

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

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

https://pic4.zhimg.com/80/v2-e9c40e3395ccd9c7e6f24c4935fb5eb3_hd.jpg

AUTOSAR standardizes two software platforms –Classic and Adaptive

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

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

https://pic2.zhimg.com/80/v2-df3d2f76b532b34bae3b6ccf48e2fe95_hd.jpg

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

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

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

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

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

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

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

https://pic1.zhimg.com/80/v2-6e93dcfb4fa08d1012dcded389ef4b58_hd.jpg

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

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

https://pic4.zhimg.com/80/v2-89739aedaa3b8bd745a2c3c1bde895c3_hd.jpg

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

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

https://pic3.zhimg.com/80/v2-be26712d271f0b7267686664721c6db6_hd.jpg

從下往上看

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

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

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

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

https://pic2.zhimg.com/80/v2-bc0f94f7aeb1149a607a51eba03e48d5_hd.jpg

Time Deviations Rate Correction

接下來注意了:

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

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

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

https://pic1.zhimg.com/80/v2-99fd64abf1353ca40c9d33cd571bbff4_hd.jpg

矯正時序圖

https://pic1.zhimg.com/80/v2-afd8de1085f678c4c9b19abd0b9314bc_hd.jpg

 

動態誤差圖

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

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

https://pic4.zhimg.com/80/v2-ad0058ceeaa8207f1b49ac8289bdf023_hd.jpg

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原文,裏面非常詳細定義了需求,功能,接口,時序,設置等。彷彿一本字典,需要的時候再去查閱吧。

https://zhuanlan.zhihu.com/p/41602815

發佈了38 篇原創文章 · 獲贊 268 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章