文章目錄
- 1.前言
- 2.EcuBus-Pro簡介
- 2.1 官方地址
- 2.2 概覽
- 3.納芯微NSUC1500簡介
- 3.1 NSUC1500概述
- 3.2 產品特性
- 4.測試環境
- 5.基礎功能
- 5.1 數據發送
- 5.2 數據監控
- 6.自動化功能
- 6.1 腳本創建
- 6.2 腳本編輯
- 6.3 腳本編輯與測試
- 7.音樂律動
- 7.1 導入例程
- 7.2 效果展示
- ECB工程
1.前言
最近在和一些氛圍燈客戶交流時發現,現在作為LIN從節點的氛圍燈SOC基本不需要做動效(如音樂律動),只需要按照LDF文件的定義,每隔10ms接收LIN主機(如智能座艙)給過來的顏色坐標,實現對應的亮度即可。
基于以上情況,如果氛圍燈客戶能夠在家里實現LIN主機的功能,模擬實車測試環境;就可以先在家把功能調試OK,再去實車驗證;大大減少出差頻次和溝通成本。
如果要在家模擬實車測試環境,最好的選擇肯定是CANoe,但是費用比較高昂。本文介紹一種性價比極高的方式,使用EcuBUs-Pro
+ 圖莫斯UTA0401
去模擬實車測試環境,借助納芯微最新的氛圍燈芯片NSUC1500整體實現音樂律動效果。
2.EcuBus-Pro簡介
2.1 官方地址
EcuBus-Pro的官方地址如下:
- https://app.whyengineer.com/
官方界面如下圖,如果想要詳細了解EcuBus-Pro,可以通過上面地址進行訪問。
2.2 概覽
EcuBus-Pro 是一款開源的汽車診斷工具,是商業工具(如CAN-OE
)的替代品。它為 ECU 開發和測試提供了一整套解決方案,具有以下特點:
- 開源免費:完全開源,免費使用。
- 現代化且直觀的用戶界面:操作簡便,易于上手。
- 跨平臺支持:支持 Windows 和 Linux 系統。
- 多硬件支持:
- PEAK:支持 CAN、CAN-FD、LIN。
- KVASER:支持 CAN、CAN-FD。
- ZLG:支持 CAN、CAN-FD。
- Toomoss:支持 CAN、CAN-FD、LIN(新增)。
- 全面的診斷功能:
- 診斷協議:基于CAN/CAN-FD/LIN的UDS、基于Ethernet的DoIP等。
- 腳本功能:基于高級 TypeScript 的自動化腳本功能,詳情見鏈接。
- 測試功能:提供 HIL 測試框架。
- 數據庫支持:
- LIN LDF:支持編輯和導出。
- CAN DBC:支持查看。
- 數據可視化:實時信號圖表繪制與分析。
- 命令行工具:提供功能完備的命令行界面,支持自動化和集成。
3.納芯微NSUC1500簡介
3.1 NSUC1500概述
NSUC1500 是一款基于 ARM Cortex-M3 的 MCU,集成了 4 路 LED 驅動器,用于控制 RGB(或 RGBW)環境光。
3.2 產品特性
摘錄官網的產品特性介紹如下:
- ARM Cortex-M3 32 位內核
- 32KB 閃存(ECC),2KB EEPROM(ECC)
- 2KB SRAM,512B 數據 RAM,512B NVR(ECC)
- 32MHz高精度振蕩器
- 35KHz低功耗低速時鐘
- 寬頻帶PLL(最高 32MHz)
- 6V至28V寬電源電壓范圍
- 1個12位高精度 ADC
- 4路高精度 LED 驅動器,最大電流 64mA
- LIN PHY 和 LIN UART 控制器支持 LIN 2.x 和 SAE J2602
- 4路增強型 PWM(16 位)輸出,用于 LED
- 2個16位通用定時器
- 1個數字看門狗和1個窗口看門狗
- 1個SPI(主機)和1個SSI(從機),支持 4 線或 3 線通信
- 頻率擴展譜(內部時鐘)
- 完整的保護和診斷功能:
- LIN 接口故障
- RGB 故障
- 電壓供應故障
- 熱關斷
- 支持 ROM 中的 UDS 啟動加載程序
- 封裝:QFN-20 / SOP8 / HSOP8
- 符合 AEC-Q100 Grade 1 可靠性標準
- 符合 ROHS 和 Reach 標準
4.測試環境
整個測試環境如下圖所示:
- EcuBuc-Pro上位機借助圖莫斯UTA0401模擬LIN主機,用于給NSUC1500發生顏色控制命令;
- 導光條兩端各放一個NSUC1500,并且兩個NSUC1500通過LIN總線連接,可以同步接收相同信號。
5.基礎功能
在介紹功能之前,需要確定當前EcuBUs-Pro的版本為0.8.26及以上。如果版本較低,打開軟件,setting會有綠點提示軟件有更新,更新流程如下圖。
更新完成之后,確認下版本是0.8.26版本或以上:
5.1 數據發送
- 打開EcuBUs-Pro,創建新工程,如下圖所示。
- 接著導入LDF文件,創建數據庫,如下圖所示。
- 接著保存數據庫。如果需要對LDF文件進行修改,可以通過EcuBus-Pro自帶的上位機進行修改,然后再保存數據庫。如果需要將修改后的LDF導出,可以點擊LDF File菜單,將文件內容進行復制,粘貼到需要保存的地方。
- 將圖莫斯的UTA0401連接到上位機,并在EcuBus-Pro增加該設備,操作流程如下圖。
- 新建一個交互界面,并連接到設備UTA0401,操作方法如下圖。
- 連接設備之后,交互界面就會顯示設備關聯的數據庫,如下圖所示。可以通過該界面開啟需要的調度表。
- 為了方便修改主機寫命令中的信號變量值,需要再創建一個主機節點,操作如下圖。
**注意:**在編輯節點的參數時,需要先通過Connected界面連接到對應的器件,獲取數據庫信息。
- 創建之后可以發現,主機發布的信號都顯示出來,并且可以修改,如下圖所示。
**注意:**有的時候總線上缺少從機節點時,也可以通過增加從機節點,并設置回復的數據,用于防止超時。
- 保存下當前配置的工程,操作方法如下圖所示。
- 測試下數據發送功能,看能否正確讓燈點亮,操作流程如下圖。
5.2 數據監控
- 如果需要實時監控LIN總線上的數據,可以打開Trace界面,操作如下圖。
- 如果想要查看子節點回復的信號值(如電壓、溫度信息),可以暫停Trace界面,點一下幀的下拉按鈕,能夠看到原始值,以及編碼后的值,如下圖所示。
3.如果有些信號的物理值希望能夠實時查看,或者查看變化趨勢,可以使用Graph功能,如下圖所示。
4.如果想顯示信號的邏輯值對應的文本,使用Graph里的Gauge新增信號變量即可。
注意:Gauge新增變量會自動識別是信號編碼使用物理值還是邏輯值,物理值就用儀表顯示,邏輯值就用文本框顯示。
6.自動化功能
EcuBus-Pro支持通過TypeScript腳本實現自動化功能,下面介紹具體的使用方法。
6.1 腳本創建
- 首先在ECB工程所在文件夾創建一個空的TypeScript腳本,如下圖所示。
- 然后在之前的工程導入改腳本,操作方式如下圖。
- 點擊Edit按鈕會自動創建所需要的文件夾和文件以及VS Code工程,并自動打開VS Code工程。
注意:如果要用TS腳本實現自動化,用戶需要提前安裝VS Code。
- EcuBus-Pro已經提供了一些API函數,點擊Script Api按鈕就可以跳轉進行查閱。
6.2 腳本編輯
接下來基于腳本實現一個帶伽馬校準的R、G、B三色循環呼吸的燈光效果。
- 導入模塊和定義接口
import { setSignal } from "ECB";interface Color {r: number;g: number;b: number;
}
-
import { setSignal } from "ECB";
:從ECB
模塊中導入setSignal
函數,用于設置信號。 -
interface Color
:定義一個Color
接口,包含r
、g
、b
三個屬性,分別代表紅色、綠色和藍色的顏色值。
- 定義
LightController
類
class LightController {private currentColor: Color;private intervalId: NodeJS.Timeout | null = null;constructor() {this.currentColor = { r: 0, g: 0, b: 0 };}private setColor(r: number, g: number, b: number): void {this.currentColor = { r, g, b };setSignal('EcuBus-Pro_NSUC1500.s_R', r);setSignal('EcuBus-Pro_NSUC1500.s_G', g);setSignal('EcuBus-Pro_NSUC1500.s_B', b);}private gammaCorrection(value: number, gamma: number = 2.2): number {return Math.round(255 * Math.pow(value / 255, gamma));}startBreathingEffect(step: number = 5, delay: number = 50): void {let currentChannel: keyof Color = 'r';let increasing = true;let rawValue = 0;this.intervalId = setInterval(() => {if (increasing) {rawValue += step;if (rawValue >= 255) {rawValue = 255;increasing = false;}} else {rawValue -= step;if (rawValue <= 0) {rawValue = 0;increasing = true;if (currentChannel === 'r') {currentChannel = 'g';} else if (currentChannel === 'g') {currentChannel = 'b';} else {currentChannel = 'r';}}}const correctedValue = this.gammaCorrection(rawValue);const color = { ...this.currentColor };color[currentChannel] = correctedValue;this.setColor(color.r, color.g, color.b);}, delay);}stopBreathingEffect(): void {if (this.intervalId) {clearInterval(this.intervalId);this.intervalId = null;}}
}
-
私有屬性:
-
currentColor
:存儲當前燈光的顏色。 -
intervalId
:存儲setInterval
返回的定時器 ID,用于停止呼吸效果。
-
-
構造函數:初始化
currentColor
為黑色(RGB 值均為 0)。 -
私有方法:
-
setColor
:設置當前燈光的顏色,并調用setSignal
函數更新信號。 -
gammaCorrection
:對顏色值進行伽馬校正,以提高顏色的視覺效果。
-
-
公有方法:
-
startBreathingEffect
:啟動燈光的呼吸效果,通過setInterval
定時更新顏色值。 -
stopBreathingEffect
:停止燈光的呼吸效果,清除定時器。
-
- 主函數和初始化
function main() {const lightController = new LightController();lightController.startBreathingEffect();
}Util.Init(() => {main();
});Util.End(() => {console.log('end');return new Promise((resolve) => {resolve();});
});
-
main
函數:創建LightController
實例并啟動呼吸效果。 -
Util.Init
和Util.End
:可能是自定義的初始化和結束函數,分別在程序開始和結束時執行相應的操作。
6.3 腳本編輯與測試
- 將編輯好的腳本保存之后關閉,在EcuBus-Pro中導入該腳本并進行編譯,如下圖所示,如果沒有問題,會提示編譯成功。
- 接著開啟調度表,并打開Graph窗口觀察變化變化情況。如下動圖所示,R、G、B三個信號變量的變化趨勢和經過伽馬校驗的呼吸效果類似。
7.音樂律動
關于音樂律動的EcuBus-Pro工程已經做好,放在文末的百度網盤鏈接了。
7.1 導入例程
-
下載文末鏈接的EcuBus-Pro工程,并解壓。
-
然后打開里面的ecb工程。
- 如果手上的NSUC1500不是原廠自帶例程,或者使用其他芯片,需要修改下氛圍燈芯片的軟件,和ecb工程的LIN通信矩陣對應上。
- 選擇ecb工程所在的ts腳本,并進行編譯。
- 編譯成功后,會有綠色字體提示。
- 接著打開設備,并開啟調度表
st_pwm_test
,因為這個調度表有控制RGB的命令,音樂律動的實時性會好些,同時也可以打開Graph界面查看RGB的實時變化。
7.2 效果展示
最多的效果如下視頻所示:
音樂律動-黑夜
ECB工程
音樂律動的ECB工程如下百度網盤鏈接:
- 鏈接: https://pan.baidu.com/s/1jV0G_uYC17gNSGcrJ1D3DQ
- 提取碼: u5ej