平臺:硬件設(shè)計(jì)、軟件架構(gòu)與算法實(shí)現(xiàn))
1. 項(xiàng)目緣起為什么是英飛凌XC164CS與六通道ABS在汽車電子特別是底盤安全控制領(lǐng)域ABS防抱死制動系統(tǒng)的開發(fā)一直是個硬核且門檻頗高的方向。很多工程師朋友可能玩過STM32做電機(jī)控制也接觸過ESP32做物聯(lián)網(wǎng)但一旦涉及到需要滿足ASIL-B甚至更高功能安全等級、對實(shí)時性和可靠性有嚴(yán)苛要求的汽車級應(yīng)用選型思路就完全不同了。這不是簡單的“跑個算法”的問題而是關(guān)乎到系統(tǒng)架構(gòu)、芯片選型、硬件安全機(jī)制、軟件功能安全的一整套工程實(shí)踐。我手頭這個項(xiàng)目核心目標(biāo)就是設(shè)計(jì)一塊用于六通道ABS系統(tǒng)原型開發(fā)與算法驗(yàn)證的硬件平臺。為什么是“六通道”這對應(yīng)著對四個車輪的輪速進(jìn)行獨(dú)立采集與控制四通道再加上兩個額外的通道通常用于采集主缸壓力、橫擺角速度等車輛狀態(tài)信號為更高級的集成控制如ESC/ESP預(yù)留空間。而主角我們選擇了英飛凌Infineon的XC164CS系列16位單片機(jī)。這個選擇背后是經(jīng)過一番權(quán)衡的。首先在汽車前裝市場英飛凌、恩智浦NXP、瑞薩Renesas是MCU領(lǐng)域的三大巨頭。對于ABS/ESC這類核心安全控制器芯片必須擁有車規(guī)級認(rèn)證AEC-Q100、強(qiáng)大的處理能力、豐富的專用外設(shè)和成熟的功能安全支持。XC164CS屬于英飛凌C166/XC2000家族的高性能成員它雖然被歸類為16位但其內(nèi)核架構(gòu)C166SV2和性能最高40MHz主頻大部分指令單周期執(zhí)行應(yīng)對ABS的實(shí)時控制循環(huán)通常1-10ms綽綽有余。其關(guān)鍵優(yōu)勢在于外設(shè)它集成了多達(dá)兩個CAPCOM6單元和多個GPT12定時器這是實(shí)現(xiàn)復(fù)雜PWM生成和捕獲的利器對于驅(qū)動電磁閥等執(zhí)行機(jī)構(gòu)至關(guān)重要。同時它具備強(qiáng)大的中斷系統(tǒng)和多個ADC單元能滿足多路輪速信號同步采樣的實(shí)時性要求。對比熱詞中常出現(xiàn)的“51單片機(jī)”、“STM32”在消費(fèi)級或工業(yè)控制中它們是王者但直接用于汽車安全系統(tǒng)原型開發(fā)則力有未逮。51單片機(jī)性能和外設(shè)有限STM32雖然強(qiáng)大但其在汽車功能安全領(lǐng)域的生態(tài)、配套安全手冊Safety Manual和經(jīng)量產(chǎn)驗(yàn)證的汽車級型號如SPC5系列是另一個產(chǎn)品線。而XC164CS這類芯片其數(shù)據(jù)手冊、應(yīng)用筆記乃至編譯器如Tasking for C166都深深打上了汽車電子的烙印。選擇它意味著我們是從汽車電子的專業(yè)視角出發(fā)搭建一個貼近真實(shí)產(chǎn)品形態(tài)的開發(fā)環(huán)境。因此這塊開發(fā)板的設(shè)計(jì)絕非簡單的“單片機(jī)最小系統(tǒng)板”。它需要集成輪速信號調(diào)理電路、電磁閥驅(qū)動電路、CAN/CAN-FD通信接口、功能安全監(jiān)控電路如看門狗、電源監(jiān)控等。目標(biāo)是讓算法工程師和軟件工程師能在盡可能真實(shí)的硬件環(huán)境下開發(fā)和驗(yàn)證ABS控制邏輯、故障診斷策略以及網(wǎng)絡(luò)通信而無需在初期就陷入量產(chǎn)ECU的復(fù)雜硬件設(shè)計(jì)中。2. 核心硬件架構(gòu)設(shè)計(jì)與選型考量設(shè)計(jì)這樣一塊開發(fā)板首先要從系統(tǒng)需求倒推硬件方案。ABS系統(tǒng)的基本工作原理是通過輪速傳感器監(jiān)測車輪是否即將抱死一旦檢測到抱死趨勢控制器就通過高速開關(guān)電磁閥來調(diào)節(jié)對應(yīng)輪缸的制動壓力實(shí)現(xiàn)“點(diǎn)剎”。我們的六通道開發(fā)板需要模擬這個閉環(huán)。2.1 主控單元深入剖析XC164CS的資源分配XC164CS-40F80FAA這顆芯片是我們的核心。除了剛才提到的CAPCOM6和GPT12我們還需要仔細(xì)規(guī)劃其資源ADC模塊ABS需要高精度且同步的模擬量采集。XC164CS的ADC支持多通道序列掃描和并行采樣。我們將分配至少4個通道用于模擬輪速傳感器信號經(jīng)過調(diào)理后的模擬電壓或正弦波2個通道用于制動主缸壓力傳感器模擬其余通道預(yù)留給加速度傳感器、橫擺角速度傳感器等。定時器與PWMCAPCOM6單元非常適合生成多路帶死區(qū)控制的互補(bǔ)PWM用于驅(qū)動H橋電路來控制電磁閥。我們將用它來生成6路對應(yīng)6個電磁閥模擬PWM輸出。GPT12定時器則用于高精度的輸入捕獲測量模擬輪速信號的頻率。通信接口汽車網(wǎng)絡(luò)是必選項(xiàng)。XC164CS集成的MultiCAN模塊支持CAN 2.0B我們至少需要引出兩路CAN總線一路用于連接車輛網(wǎng)絡(luò)模擬整車通信一路用于調(diào)試和標(biāo)定連接CANape、INCA等工具。考慮到未來趨勢板載一個CAN-FD收發(fā)器如TJA1044T作為擴(kuò)展也是明智的。內(nèi)存與啟動256KB的片內(nèi)Flash和16KB的RAM對于ABS核心算法是足夠的。我們設(shè)計(jì)了外部SPI Flash和EEPROM用于存儲標(biāo)定數(shù)據(jù)、故障碼和事件日志。啟動方式配置為從片內(nèi)Flash啟動并通過調(diào)試接口DAP/JTAG進(jìn)行程序下載和調(diào)試。2.2 關(guān)鍵外圍電路設(shè)計(jì)信號鏈與功率驅(qū)動這是開發(fā)板區(qū)別于普通MCU板的核心部分。輪速信號調(diào)理電路 真實(shí)的輪速傳感器多為磁電式或霍爾式輸出的是正弦波或方波信號。開發(fā)板需要能模擬和接收這兩種信號。我們設(shè)計(jì)了兩種輸入接口模擬正弦波輸入通過運(yùn)放搭建帶偏置的放大、濾波和過零比較電路將小幅值正弦波如幾百mV整形成MCU可識別的3.3V方波送入GPT12進(jìn)行捕獲計(jì)時。同時該正弦波信號也可以直接接入ADC用于驗(yàn)證軟件層面的軟件解碼算法。數(shù)字方波輸入直接接入MCU的GPIO并通過施密特觸發(fā)器進(jìn)行整形提高抗干擾能力。電磁閥驅(qū)動電路 ABS電磁閥是感性負(fù)載工作電流大通常1-2A開關(guān)頻率高。驅(qū)動電路必須安全可靠。驅(qū)動芯片選型我們選用英飛凌自家的汽車級高邊開關(guān)如BTS7040-2EPA。它集成了MOSFET、驅(qū)動、保護(hù)和診斷功能過流、過溫、開路負(fù)載檢測并通過SPI與MCU通信。這比直接用分立MOSFET加驅(qū)動IC的方案更簡潔、更安全也便于實(shí)現(xiàn)功能安全要求的診斷覆蓋。H橋配置每個電磁閥通道需要一個獨(dú)立的H橋驅(qū)動。我們使用兩顆高邊開關(guān)和兩顆低邊開關(guān)或一顆半橋驅(qū)動IC組成H橋由CAPCOM6生成的兩路互補(bǔ)PWM控制。電路中必須包含續(xù)流二極管、柵極電阻和RC緩沖電路以抑制關(guān)斷時的電壓尖峰。電流采樣在低邊路徑上串聯(lián)采樣電阻通過運(yùn)放放大后送入MCU的ADC用于實(shí)時監(jiān)測電磁閥電流實(shí)現(xiàn)電流閉環(huán)控制這也是診斷的一部分檢測線圈短路/斷路。電源與保護(hù)電路電源樹輸入為12V車載電池。首先經(jīng)過反接保護(hù)、過壓/欠壓保護(hù)電路。然后通過一顆汽車級降壓開關(guān)穩(wěn)壓器如LM53603產(chǎn)生5V電源再通過LDO如TPS7B7701產(chǎn)生3.3V給MCU和數(shù)字電路。模擬電路運(yùn)放、傳感器供電使用獨(dú)立的LDO并與數(shù)字電源進(jìn)行磁珠隔離減少噪聲干擾。功能安全監(jiān)控外置獨(dú)立看門狗芯片如TLE9461它除了看門狗功能還集成多路電源監(jiān)控。MCU需要定期喂狗一旦程序跑飛或電源異??撮T狗將觸發(fā)復(fù)位或產(chǎn)生中斷到MCU的NMI不可屏蔽中斷引腳。通信與調(diào)試接口CAN接口使用隔離CAN收發(fā)器如ISO1042提高總線抗干擾能力并保護(hù)MCU側(cè)電路。調(diào)試接口采用標(biāo)準(zhǔn)的10針JTAG/SWD接口兼容DAP-Link、J-Link等調(diào)試器。同時引出一路UART轉(zhuǎn)USB如CH340C用于打印調(diào)試日志。擴(kuò)展接口將MCU未使用的GPIO、ADC、通信接口SPI, I2C通過排針引出方便連接其他傳感器模塊如IMU。注意所有關(guān)鍵信號線特別是PWM輸出、ADC輸入、CAN總線在PCB布局時都必須考慮阻抗控制、走線寬度和回流路徑。模擬地和數(shù)字地單點(diǎn)連接功率地路徑要粗而短。電磁閥驅(qū)動部分的大電流路徑必須與敏感的模擬信號線充分隔離。3. 軟件開發(fā)環(huán)境搭建與基礎(chǔ)軟件架構(gòu)硬件是軀體軟件是靈魂。基于XC164CS的開發(fā)軟件環(huán)境有其特殊性。3.1 編譯器與工具鏈告別GCC擁抱專業(yè)工具這是第一個“坑”。像STM32那樣用開源的GCC ARM工具鏈在這里行不通。XC164CS需要使用特定的編譯器例如Tasking for C166或HighTec GNU Compiler for TriCore/C166。我們選擇HighTec因?yàn)樗贕NU工具鏈對開源生態(tài)更友好且也通過了汽車功能安全認(rèn)證。安裝HighTec開發(fā)環(huán)境后你需要配置正確的芯片支持包BSP其中包含了啟動文件、鏈接腳本和底層驅(qū)動庫。鏈接腳本.ld文件的配置至關(guān)重要它決定了代碼、數(shù)據(jù)、堆棧在內(nèi)存中的布局。對于ABS這種安全應(yīng)用我們通常會將關(guān)鍵代碼如中斷服務(wù)程序、核心控制算法放在訪問速度更快的SRAM中執(zhí)行盡管XC164CS有Flash加速單元。這需要在鏈接腳本中精細(xì)劃分區(qū)域。3.2 底層驅(qū)動與HAL層抽象但不過度我們不建議直接從寄存器層面裸寫所有驅(qū)動那會降低開發(fā)效率和可移植性。但也不建議使用過于臃腫的HAL硬件抽象層因?yàn)槠囯娮訉?shí)時性和代碼大小極其敏感。我們的策略是為關(guān)鍵外設(shè)編寫精簡、高效的驅(qū)動模塊ADC驅(qū)動配置ADC工作模式序列掃描、并行轉(zhuǎn)換、觸發(fā)源定時器觸發(fā)、軟件觸發(fā)、中斷服務(wù)程序。重點(diǎn)在于確保多通道采樣的同步性和數(shù)據(jù)讀取的實(shí)時性。PWM驅(qū)動基于CAPCOM6封裝CAPCOM6的初始化函數(shù)用于設(shè)置PWM頻率、死區(qū)時間、互補(bǔ)輸出模式。提供API來動態(tài)更新占空比。CAN驅(qū)動初始化MultiCAN控制器配置郵箱MOB為發(fā)送或接收實(shí)現(xiàn)中斷或輪詢方式的消息收發(fā)。這里要處理好CAN ID過濾、總線錯誤處理。GPT12定時器驅(qū)動用于輸入捕獲測量輪速脈沖周期。需要處理定時器溢出和捕獲中斷計(jì)算精確的頻率。這些驅(qū)動模塊共同構(gòu)成一個輕量級的HAL。上層應(yīng)用如ABS控制算法通過調(diào)用這些API與硬件交互從而與具體的硬件引腳解耦。3.3 實(shí)時操作系統(tǒng)RTOS的考量ABS是一個典型的硬實(shí)時系統(tǒng)。是否引入RTOS如OSEK/VDX標(biāo)準(zhǔn)的OSEK OS或Autosar OS是一個架構(gòu)級決策。裸機(jī)前后臺系統(tǒng)對于簡單的原型可以用一個高優(yōu)先級定時器中斷作為系統(tǒng)心跳在主循環(huán)中執(zhí)行任務(wù)調(diào)度。這種方式簡單直接資源消耗極小但對復(fù)雜任務(wù)管理和優(yōu)先級調(diào)度的支持較弱。引入RTOS如果系統(tǒng)復(fù)雜度高需要管理多個不同周期的任務(wù)如10ms的控制任務(wù)、100ms的通信任務(wù)、1s的診斷任務(wù)并且有嚴(yán)格的時序要求引入一個符合OSEK標(biāo)準(zhǔn)的RTOS是更好的選擇。它能提供任務(wù)管理、時間管理、中斷管理、資源管理等功能使軟件架構(gòu)更清晰更易于滿足功能安全對時間分區(qū)的要求。在我們的開發(fā)板項(xiàng)目中為了給后續(xù)擴(kuò)展留足空間我們選擇了FreeOSEK一個開源的OSEK/VDX實(shí)現(xiàn)進(jìn)行移植。移植工作主要包括編寫與芯片相關(guān)的系統(tǒng)服務(wù)如中斷開關(guān)、上下文切換、系統(tǒng)節(jié)拍定時器初始化等。4. ABS核心算法原型實(shí)現(xiàn)與調(diào)試有了硬件和基礎(chǔ)軟件接下來就是最核心的部分實(shí)現(xiàn)ABS控制算法原型。4.1 輪速計(jì)算與車輛參考速度估算輪速是ABS一切決策的基礎(chǔ)。我們通過GPT12捕獲輪速脈沖的上升沿/下降沿計(jì)算脈沖周期T再根據(jù)已知的每轉(zhuǎn)脈沖數(shù)N計(jì)算輪速輪速 (2 * π * 車輪半徑) / (N * T)。這里的關(guān)鍵是處理高速和低速下的精度以及脈沖丟失時的容錯。單個輪速不夠我們需要估算車輛的實(shí)際速度參考速度。由于制動時四個輪子都可能滑移沒有哪個輪速是絕對準(zhǔn)確的。常用的方法是選取非驅(qū)動輪中速度最大的一個作為初始參考再結(jié)合加速度傳感器信號進(jìn)行修正例如縱向加速度積分。更高級的算法會使用卡爾曼濾波器融合多輪速和加速度信息。在開發(fā)板上我們可以先用簡化算法重點(diǎn)驗(yàn)證邏輯。4.2 滑移率計(jì)算與門限控制ABS的核心目標(biāo)是控制車輪滑移率在最佳區(qū)間通常為10%-30%。滑移率λ定義為λ (車輛速度 - 輪速) / 車輛速度。 我們的控制算法在一個固定的周期如5ms內(nèi)執(zhí)行獲取最新的四個輪速和估算的車輛速度。計(jì)算每個車輪的實(shí)時滑移率。將滑移率與預(yù)設(shè)的門限值如低于10%為穩(wěn)定區(qū)10%-30%為最佳制動區(qū)高于30%為抱死危險區(qū)進(jìn)行比較。根據(jù)比較結(jié)果決定對應(yīng)電磁閥的動作增壓、保壓還是減壓。這就是經(jīng)典的門限值控制算法。在開發(fā)板上我們可以通過電位器模擬輪速變化觀察算法輸出的PWM占空比對應(yīng)閥狀態(tài)是否正確切換。4.3 電磁閥控制邏輯實(shí)現(xiàn)電磁閥通常有三種狀態(tài)由兩路互補(bǔ)PWM控制增壓進(jìn)液閥打開出液閥關(guān)閉制動壓力增加。保壓進(jìn)液閥關(guān)閉出液閥關(guān)閉制動壓力保持。減壓進(jìn)液閥關(guān)閉出液閥打開制動壓力減少。我們需要將算法決策的狀態(tài)映射為CAPCOM6寄存器中具體的比較值從而生成對應(yīng)的PWM波形。這里要注意死區(qū)時間的設(shè)置防止H橋上下管直通。4.4 基于開發(fā)板的閉環(huán)測試與調(diào)試真正的挑戰(zhàn)在于閉環(huán)測試。我們需要模擬整個制動過程。硬件在環(huán)HIL模擬這是最理想的方式。通過另一塊板卡或設(shè)備模擬產(chǎn)生四路輪速傳感器信號可變頻率的方波或正弦波并接收開發(fā)板輸出的電磁閥控制信號根據(jù)簡單的車輛模型計(jì)算輪速變化再反饋給開發(fā)板。但這套系統(tǒng)成本高。開環(huán)信號注入測試在開發(fā)初期更實(shí)用。使用函數(shù)信號發(fā)生器手動改變輸入到某一通道的“輪速”信號頻率同時通過調(diào)試器或CAN總線監(jiān)控MCU內(nèi)部計(jì)算的輪速、滑移率以及輸出的閥狀態(tài)。驗(yàn)證算法邏輯是否正確響應(yīng)了加速、減速、抱死等場景。軟件仿真與可視化在PC上使用Matlab/Simulink建立車輛和ABS模型進(jìn)行離線仿真。然后將C代碼生成如果算法用Simulink設(shè)計(jì)并下載到開發(fā)板中運(yùn)行通過CAN總線將關(guān)鍵數(shù)據(jù)輪速、滑移率、閥狀態(tài)上傳到PC用Simulink或自定義的上位機(jī)軟件進(jìn)行可視化對比查看實(shí)物運(yùn)行與模型仿真的差異。調(diào)試過程中要充分利用XC164CS的調(diào)試模塊設(shè)置斷點(diǎn)、觀察變量、測量中斷響應(yīng)時間。特別是要確保控制循環(huán)的周期是穩(wěn)定且滿足時限要求的。5. 功能安全與診斷功能設(shè)計(jì)初探對于汽車安全系統(tǒng)功能安全I(xiàn)SO 26262不是可選項(xiàng)。雖然開發(fā)板是原型但我們需要建立基本的安全意識。5.1 內(nèi)置自測試與監(jiān)控XC164CS本身提供了一些安全特性我們在軟件初始化階段和運(yùn)行時周期性地執(zhí)行CPU核心自檢例如檢查程序計(jì)數(shù)器、ALU運(yùn)算是否正確。內(nèi)存測試對上電后的RAM進(jìn)行March C類測試對Flash進(jìn)行CRC校驗(yàn)。外設(shè)寄存器測試寫入再讀回檢查配置寄存器是否異常。窗口看門狗不僅用于防程序跑飛其喂狗時間窗口本身也是一種監(jiān)控。5.2 應(yīng)用層診斷在應(yīng)用層我們需要設(shè)計(jì)診斷監(jiān)控功能信號合理性檢查輪速信號是否在物理可能范圍內(nèi)如0-300km/h四個輪速之間邏輯是否合理非轉(zhuǎn)向時不應(yīng)差異過大傳感器一致性檢查如果板載了IMU可以用其加速度信息與輪速微分得到的加速度進(jìn)行交叉驗(yàn)證。執(zhí)行器反饋檢查通過ADC讀取的電磁閥驅(qū)動電流是否與預(yù)期命令相符電流過大可能短路過小可能開路。通信監(jiān)控CAN總線通信的周期和內(nèi)容是否正確。一旦診斷出故障應(yīng)根據(jù)故障嚴(yán)重等級進(jìn)入不同的降級模式比如限制ABS功能、點(diǎn)亮故障燈、并通過CAN總線發(fā)送診斷故障碼DTC。5.3 開發(fā)板上的安全機(jī)制實(shí)現(xiàn)在硬件上我們已設(shè)計(jì)了獨(dú)立看門狗和電源監(jiān)控。在軟件上我們需要初始化獨(dú)立看門狗并設(shè)置一個合理的超時時間。在主控制循環(huán)或一個高優(yōu)先級的周期任務(wù)中定期“喂狗”。喂狗前可以檢查一些關(guān)鍵的安全狀態(tài)標(biāo)志。設(shè)計(jì)一個優(yōu)先級最高的NMI中斷服務(wù)程序當(dāng)獨(dú)立看門狗或電源監(jiān)控芯片觸發(fā)NMI時在此中斷中執(zhí)行最緊急的安全動作如關(guān)閉所有電磁閥驅(qū)動進(jìn)入安全狀態(tài)并記錄錯誤信息到非易失存儲器。6. 項(xiàng)目總結(jié)與進(jìn)階思考完成這樣一塊六通道ABS開發(fā)板的設(shè)計(jì)與調(diào)試是一個系統(tǒng)工程它貫穿了汽車電子硬件設(shè)計(jì)、底層驅(qū)動開發(fā)、實(shí)時軟件架構(gòu)、控制算法實(shí)現(xiàn)和功能安全理念。它不僅僅是一塊“板子”更是一個貼近工程實(shí)際的開發(fā)與驗(yàn)證平臺。我個人在實(shí)操中的體會是硬件設(shè)計(jì)階段多花時間在原理圖評審和PCB布局規(guī)劃上能避免后期大量的調(diào)試麻煩。特別是大電流路徑、模擬信號和時鐘信號的布局必須嚴(yán)格遵循準(zhǔn)則。在軟件層面不要急于編寫高級算法先把底層驅(qū)動ADC、PWM、CAN調(diào)通調(diào)穩(wěn)確保數(shù)據(jù)的準(zhǔn)確性和時序的正確性。使用邏輯分析儀和示波器交叉驗(yàn)證軟件行為與硬件信號是定位問題的黃金手段。對于想深入汽車底盤電子的朋友這塊開發(fā)板可以作為一個起點(diǎn)。在此基礎(chǔ)上你可以進(jìn)一步集成更多傳感器連接真實(shí)的IMU模塊實(shí)現(xiàn)車輛狀態(tài)更精確的感知。算法升級從簡單的門限控制嘗試更先進(jìn)的滑模變結(jié)構(gòu)控制、模糊PID控制等。網(wǎng)絡(luò)拓展實(shí)現(xiàn)完整的UDS統(tǒng)一診斷服務(wù)協(xié)議棧模擬ECU的診斷會話。向Autosar架構(gòu)遷移嘗試將應(yīng)用層、RTE、BSW進(jìn)行分層體驗(yàn)汽車軟件標(biāo)準(zhǔn)架構(gòu)。最后一個小技巧在調(diào)試CAN通信時務(wù)必準(zhǔn)備一個好的CAN總線分析儀如PCAN-USB, Vector VN1610等它能直觀地展示總線負(fù)載、報文內(nèi)容和錯誤幀比單純看代碼高效得多。汽車電子的開發(fā)工具鏈的投入是必不可少的它們能極大提升開發(fā)效率和問題定位的準(zhǔn)確性。