开源的EcuBus-Pro+图莫斯Lin+纳芯微NSUC15000
最近在和一些氛围灯客户交流时发现,现在作为LIN从节点的氛围灯SOC基本不需要做动效(如音乐律动),只需要按照LDF文件的定义,每隔10ms接收LIN主机(如智能座舱)给过来的颜色坐标,实现对应的亮度即可。基于以上情况,如果氛围灯客户能够在家里实现LIN主机的功能,模拟实车测试环境;就可以先在家把功能调试OK,再去实车验证;大大减少出差频次和沟通成本。如果要在家模拟实车测试环境,最好的选择肯定是C
目录:
-
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 效果展示
-
-
8.工程分享
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界面
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 位内核
2KB SRAM,512B 数据 RAM,512B NVR(ECC)
32MHz高精度振荡器
6V至28V宽电源电压范围
1个12位高精度 ADC
LIN PHY 和 LIN UART 控制器支持 LIN 2.x 和 SAE J2602
4路增强型 PWM(16 位)输出,用于驱动LED,最大电流64mA
2个16位通用定时器
1个数字看门狗和1个窗口看门狗
完整的保护和诊断功能:
LIN 接口故障
RGB 故障
电压供应故障
热关断
支持符合UDS的ROM boot
封装:QFN-20 / SOP8 / HSOP8
符合 AEC-Q100 Grade 1 可靠性标准
4.测试环境
整个测试环境如下图所示:
-
EcuBuc-Pro上位机借助图莫斯UTA0401模拟LIN主机,用于给NSUC1500发生颜色控制命令;
-
导光条两端各放一个NSUC1500,并且两个NSUC1500通过LIN总线连接,可以同步接收相同信号。

测试环境
5.基础功能
在介绍功能之前,需要确定当前EcuBUs-Pro的版本为0.8.26及以上。如果版本较低,打开软件,setting会有绿点提示软件有更新,更新流程如下图。

EcuBus-Pro更新
更新完成之后,确认下版本是0.8.26版本或以上:

EcuBus-Pro版本
5.1 数据发送
-
打开EcuBUs-Pro,创建新工程,如下图所示。

新建空白工程
-
接着导入LDF文件,创建数据库,如下图所示。

创建数据库
-
接着保存数据库。如果需要对LDF文件进行修改,可以通过EcuBus-Pro自带的上位机进行修改,然后再保存数据库。如果需要将修改后的LDF导出,可以点击LDF File菜单,将文件内容进行复制,粘贴到需要保存的地方。

LDF文件处理
-
将图莫斯的UTA0401连接到上位机,并在EcuBus-Pro增加该设备,操作流程如下图。

增加设备
-
新建一个交互界面,并连接到设备UTA0401,操作方法如下图。

增加交互界面
-
连接设备之后,交互界面就会显示设备关联的数据库,如下图所示。可以通过该界面开启需要的调度表。

-
为了方便修改主机写命令中的信号变量值,需要再创建一个主机节点,操作如下图。
注意:在编辑节点的参数时,需要先通过Connected界面连接到对应的器件,获取数据库信息。

创建主机节点
-
创建之后可以发现,主机发布的信号都显示出来,并且可以修改,如下图所示。
注意:有的时候总线上缺少从机节点时,也可以通过增加从机节点,并设置回复的数据,用于防止超时。

主机发布的信号
-
保存下当前配置的工程,操作方法如下图所示。

保存工程
-
测试下数据发送功能,看能否正确让灯点亮,操作流程如下图。

测试数据发送功能
5.2 数据监控
-
如果需要实时监控LIN总线上的数据,可以打开Trace界面,操作如下图。

创建Trace界面
-
如果想要查看子节点回复的信号值(如电压、温度信息),可以暂停Trace界面,点一下帧的下拉按钮,能够看到原始值,以及编码后的值,如下图所示。

Trace界面信息
3.如果有些信号的物理值希望能够实时查看,或者查看变化趋势,可以使用Graph功能,如下图所示。

创建Graph界面
4.如果想显示信号的逻辑值对应的文本,使用Graph里的Gauge新增信号变量即可。
注意:Gauge新增变量会自动识别是信号编码使用物理值还是逻辑值,物理值就用仪表显示,逻辑值就用文本框显示。

逻辑值显示
6.自动化功能
EcuBus-Pro支持通过TypeScript脚本实现自动化功能,下面介绍具体的使用方法。
6.1 脚本创建
-
首先在ECB工程所在文件夹创建一个空的TypeScript脚本,如下图所示。

新建TS脚本
-
然后在之前的工程导入改脚本,操作方式如下图。

导入TS脚本
-
点击Edit按钮会自动创建所需要的文件夹和文件以及VS Code工程,并自动打开VS Code工程。
注意:如果要用TS脚本实现自动化,用户需要提前安装VS Code。

-
EcuBus-Pro已经提供了一些API函数,点击Script 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 {
returnMath.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';
} elseif (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');
returnnewPromise((resolve) => {
resolve();
});
});
-
main函数:创建LightController实例并启动呼吸效果。 -
Util.Init和Util.End:可能是自定义的初始化和结束函数,分别在程序开始和结束时执行相应的操作。
6.3 脚本编辑与测试
-
将编辑好的脚本保存之后关闭,在EcuBus-Pro中导入该脚本并进行编译,如下图所示,如果没有问题,会提示编译成功。

脚本编译
-
接着开启调度表,并打开Graph窗口观察变化变化情况。如下动图所示,R、G、B三个信号变量的变化趋势和经过伽马校验的呼吸效果类似。

RGB
7.音乐律动
关于音乐律动的EcuBus-Pro工程已经做好,放在文末的百度网盘链接了。
7.1 导入例程
-
下载文末链接的EcuBus-Pro工程,并解压。
-
然后打开里面的ecb工程。

打开ECB工程
-
如果手上的NSUC1500不是原厂自带例程,或者使用其他芯片,需要修改下氛围灯芯片的软件,和ecb工程的LIN通信矩阵对应上。

颜色控制命令
-
选择ecb工程所在的ts脚本,并进行编译。

编译脚本
-
编译成功后,会有绿色字体提示。

编译成功
-
接着打开设备,并开启调度表
st_pwm_test,因为这个调度表有控制RGB的命令,音乐律动的实时性会好些,同时也可以打开Graph界面查看RGB的实时变化。

音乐律动实时变化
7.2 效果展示
最后的效果如下视频所示:
音乐律动
音乐律动1
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)