

EVH1000
【電機控制技術帖】
電機控制軟件開發
電動車千人會

從事電機軟件開發已經半年多了,從剛開始一無所知到現在的小有成就,現在想把實踐經驗進行總結,分享給各位奮戰在電機控制路上,或者想轉型為電機控制的工友們學習借鑒。
看了知乎上大部分關于電機控制或者電機軟件的帖子,要么關注于FOC/SVPWM,要么關注于Autosar,但是這倆個東西其實已經是非常成熟的東西,而且在實踐中能體現的核心價值并不多,真正的產品開發還是面向應用和適配,下面我將從實際軟件開發的角度給出一個比較系統角度,分析一下實際產品應用過程中電機控制軟件開發技術。
首先明確電機控制,主要是三條主線,一是扭矩流,二是能量流,三是熱量流。而這三條橫向的主線,都要包括信號輸入,功能處理和信號輸出三個縱向的節點。
因此,我們建立的第一個宏觀的電機控制架構模型,就是三縱三橫,縱向的三個節點,橫向的三個流向。
站在整車的角度,電機控制系統不是一個很復雜的東西,只需要執行命令就可以了,我們也清楚,電機控制的核心就是發波,也就是把一個扭矩命令根據占空比調制算法生成三相交流波。但是其實在電機控制供應商的角度,這里邊有很多工作要做,這也是整車廠和電機供應商的沖突點所在。

1、信號的輸入和輸出
(縱向節點一、三)
信號的輸入、輸出是應用開發最基本的工作,如果不做這項工作,MCU軟件無法和VCU或者BMS進行通訊,因而也無法得到狀態切換、扭矩、冷卻溫度等關鍵信號,故也電機也不會工作。
這一項工作開發的核心,其實就是CAN矩陣的實現,如果不懂CAN矩陣,就去百度一下再讀下去。每個整車廠的CAN矩陣都不一樣,不知道未來會不會標準化,這樣可以減少大量的重復工作。但是當下每個主機廠、甚至單一主機廠的不同項目都是不一樣的,不過對于MCU而言,核心的輸入就是扭矩請求、模式請求、冷卻液溫度、冷卻水泵開度、車速、輪速、BMS主負繼電器等;而核心的輸出包括實際扭矩、實際模式、故障等級、IGBT溫度、定子溫度、母線電壓等。
1.1
?應用層信號處理
應用層對這些信號要進行處理,從底層拿到解析好的信號后,比如底層解析出來是100Nm,你需要把這個扭矩值傳到rte上,內部的功能模塊會使用這個扭矩值,不過很多人可能會問是不是就是轉發一下,可以這么理解吧,不過你也要轉發一下信號的質量,包括底層會解析出來這個值是有效還是無效,對于內部功能模塊而言,一旦信號無效,它們就會走一種安全模式。對于輸出而言,反之亦然。
1.2?
底層信號處理
這里其實就是我們經常提高的COM堆棧,往上介紹這些東西原理的資料很多,但是其實在真正應用的過程中那些東西都不太會用到,不過我們要掌握主線就是,對于信號輸入,底層軟件會從CAN收發器的寄存器中,獲取每一幀信號,然后經過分解,一方面去校驗CRC、Rolling Counter,另一方面去把這一幀的每個信號識別出來,傳送給應用層進行信號使用,對于信號輸出,反之亦然。
具體在開發過程中也很流水作業,根據CAN矩陣生成dbc文件,直接導入Autosar工具,就會生成響應的代碼。

2、核心功能處理(縱向節點二)
2.1
上下電狀態管理(能量流)
這也被稱為是中央狀態機,是VCU控制電機的核心接口元件。這里要提到是逆變器有個電容,要工作,必須先進行電容預充,從而給母線提供穩定的電壓,而電機停車后,必須把高壓下了,不然就會有觸電風險。因此這里的狀態管理,核心就是上下電管理,上電過程包括:初始化、預充、待機、扭矩模式;而下電過程則是:扭矩模式/待機/預充、都可以直接進入放電狀態、放完高壓后,進入下電狀態,期間要進行一些數據的保存,寫入NvRAM。
2.2?
扭矩模型(扭矩流)
扭矩模型其實有三部分,第一部分則是要根據溫度、電壓、電流、等信號要對扭矩進行限制、第二部分是根據拖曳扭矩加上需求扭矩,計算出一個電機要發出的總扭矩,第三部分才是網上有很多的FOC/SVPWM實現對波形的調制。可以看出FOC/SVPWM只是電機控制的很小的一部分,但是它是最核心的部分,同時也已經玩的爛大街了。
2.3?
熱模型(熱量流)
這里主要就是計算IGBT結溫,IGBT表面溫度傳感器,但是內部的溫度是其不損害的關鍵指標,因此要根據結溫模型對IGBT溫度進行計算。這個模型比較復雜,大家可以去搜搜其他帖子,這里就不再贅述了。
此外還有兩個NTC溫度傳感器用來策略定子溫度,比較簡單,在IoAbHw配置一下就好了;
還有一個轉子模型,這個需要去根據溫度模型去估計的,網上也有相關資料。沒有的話我也可以寫一篇。
2.4
主動放電
也就是前面提到的逆變器電容,休眠前要通過電阻把這部分的存在電容的電荷以熱量的形式消耗掉,從而使得控制器能夠安全休眠。一般這里的主動放電有專門的芯片和電路進行處理,控制軟件只需要發送請求放電的命令即可,主動放電的芯片和電路就能夠執行主動放電的命令。
2.5?
安全路徑
也就是關管。有兩種方式,一是把上下橋全部打開,二是只導通上橋或者下橋,一般是低轉速的時候反向電動勢較少,上下橋IGBT全部打開,不會有銅損產生,而第二種則是在高轉速的時候,如果IGBT保持打開的話,就有可能被比較高的反向電動勢擊穿,因此要和電機形成一個回路,從而實現通過銅耗熱量把這部分電荷耗散掉。
2.6?
故障診斷
對于應用開發而言,故障診斷的核心就是去制作故障矩陣。
而故障矩陣的核心,就是定義故障等級,不同的故障等級對應不同的響應模式。一般而言,有如下幾種故障。
1級:只上報故障;比如通訊信號延遲。
2級:限制扭矩;比如定子溫度變高。
3級:不再輸出扭矩,逆變器和電機形成回路,停止不下高壓。
4級:不再輸出扭矩,逆變器和電機形成回路,停止下高壓。比如IGBT溫度超高。
5級:碰撞故障,下電不可恢復,必須用專用工具清除。
實際開發過程中,每家公司都會有一個基礎的故障矩陣,拿著這張故障矩陣,去適配客戶比較關注的故障碼即可。你可能還有做一下邏輯,往CAN上上報故障識別編碼(如報出多個故障,你需要滾動發送)和故障等級(就是上面提到的)。

3.非核心功能處理
3.1
單踏板
這個東西嘛,就是VCU先給MCU發送負扭矩,車速降低到一定程度時,MCU進入轉速模式,逐漸停下來。
3.2?
主動減震
識別到輪速抖動,利用PI技術反向調節扭矩進行抖動消除。
3.3
主動加熱
降低電機效率,從而能夠加熱水回路。
3.4?
坡道輔助
在坡道上利用轉速模式使得電機停下來,主要也是PI控制。
總的來看,電機控制軟件開發也就是上面幾部分了,主要還是集中于應用層的功能開發,至于底層軟件,比如IoHwAb,Mcal,CDD等,對于實際的應用開發來說,確實用的比較少,可能也就是全新開發一款控制器或者更新PCBA板子上的某個芯片時,會開發一下底層,相關資料也可以參考一下。

根據我多年的工作經驗,在軟件領域,中國汽車工業的核心力量還是應該投入到控制策略開發上來。這篇帖子各位工友可以先看看,如果對哪一塊比較感興趣的話我可以著重以圖文并茂的形式寫寫,以便各位能夠不斷提升自己,突破自己,從而帶動整個產業的發展和進步。
來源已授權:
【電機控制技術帖】電機控制軟件開發?
小皮的文章 - 知乎
https://zhuanlan.zhihu.com/p/659048380

掃碼關注我們

歡迎加入新能源汽車產業交流群??
關注公眾號后臺回復關鍵詞“社群”
即可獲取入群方式
