当前位置: 首页 > article >正文

当 EcuBus-Pro + UTA0401 遇上 NSUC1500

文章目录

    • 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界面

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会有绿点提示软件有更新,更新流程如下图。

EcuBus-Pro更新

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

EcuBus-Pro版本

5.1 数据发送

  1. 打开EcuBUs-Pro,创建新工程,如下图所示。

新建空白工程

  1. 接着导入LDF文件,创建数据库,如下图所示。

创建数据库

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

LDF文件处理

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

增加设备

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

增加交互界面

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

  1. 为了方便修改主机写命令中的信号变量值,需要再创建一个主机节点,操作如下图。

**注意:**在编辑节点的参数时,需要先通过Connected界面连接到对应的器件,获取数据库信息。

创建主机节点

  1. 创建之后可以发现,主机发布的信号都显示出来,并且可以修改,如下图所示。

**注意:**有的时候总线上缺少从机节点时,也可以通过增加从机节点,并设置回复的数据,用于防止超时。

主机发布的信号

  1. 保存下当前配置的工程,操作方法如下图所示。

保存工程

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

测试数据发送功能

5.2 数据监控

  1. 如果需要实时监控LIN总线上的数据,可以打开Trace界面,操作如下图。

创建Trace界面

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

Trace界面信息

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

创建Graph界面

4.如果想显示信号的逻辑值对应的文本,使用Graph里的Gauge新增信号变量即可。

注意:Gauge新增变量会自动识别是信号编码使用物理值还是逻辑值,物理值就用仪表显示,逻辑值就用文本框显示。

逻辑值显示

6.自动化功能

EcuBus-Pro支持通过TypeScript脚本实现自动化功能,下面介绍具体的使用方法。

6.1 脚本创建

  1. 首先在ECB工程所在文件夹创建一个空的TypeScript脚本,如下图所示。

新建TS脚本

  1. 然后在之前的工程导入改脚本,操作方式如下图。

导入TS脚本

  1. 点击Edit按钮会自动创建所需要的文件夹和文件以及VS Code工程,并自动打开VS Code工程。

注意:如果要用TS脚本实现自动化,用户需要提前安装VS Code。

  1. EcuBus-Pro已经提供了一些API函数,点击Script Api按钮就可以跳转进行查阅。

Script Api

6.2 脚本编辑

接下来基于脚本实现一个带伽马校准的R、G、B三色循环呼吸的灯光效果。

  1. 导入模块和定义接口
import { setSignal } from "ECB";interface Color {r: number;g: number;b: number;
}
  • import { setSignal } from "ECB";:从ECB模块中导入setSignal函数,用于设置信号。

  • interface Color:定义一个Color接口,包含rgb三个属性,分别代表红色、绿色和蓝色的颜色值。

  1. 定义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:停止灯光的呼吸效果,清除定时器。

  1. 主函数和初始化
function main() {const lightController = new LightController();lightController.startBreathingEffect();
}Util.Init(() => {main();
});Util.End(() => {console.log('end');return new Promise((resolve) => {resolve();});
});
  • main函数:创建 LightController 实例并启动呼吸效果。

  • Util.InitUtil.End:可能是自定义的初始化和结束函数,分别在程序开始和结束时执行相应的操作。

6.3 脚本编辑与测试

  1. 将编辑好的脚本保存之后关闭,在EcuBus-Pro中导入该脚本并进行编译,如下图所示,如果没有问题,会提示编译成功。

脚本编译

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

RGB

7.音乐律动

关于音乐律动的EcuBus-Pro工程已经做好,放在文末的百度网盘链接了。

7.1 导入例程

  1. 下载文末链接的EcuBus-Pro工程,并解压。

  2. 然后打开里面的ecb工程。

打开ECB工程

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

颜色控制命令

  1. 选择ecb工程所在的ts脚本,并进行编译。

编译脚本

  1. 编译成功后,会有绿色字体提示。

编译成功

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

音乐律动实时变化

7.2 效果展示

最多的效果如下视频所示:

音乐律动-黑夜

ECB工程

音乐律动的ECB工程如下百度网盘链接:

  • 链接: https://pan.baidu.com/s/1jV0G_uYC17gNSGcrJ1D3DQ
  • 提取码: u5ej

相关文章:

当 EcuBus-Pro + UTA0401 遇上 NSUC1500

文章目录 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.前言 最近…...

qml 中的anchors

理解 QML 中的 anchors&#xff08;锚定&#xff09; 在 QML 中&#xff0c;anchors 是一种强大的布局机制&#xff0c;用于相对于父元素或同级元素定位和调整组件大小。它比简单的 x/y 坐标定位更灵活&#xff0c;能够自动适应不同屏幕尺寸。 基本概念 在你的代码中&#x…...

【FreeRTOS】裸机开发与操作系统区别

&#x1f50e;【博主简介】&#x1f50e; &#x1f3c5;CSDN博客专家 &#x1f3c5;2021年博客之星物联网与嵌入式开发TOP5 &#x1f3c5;2022年博客之星物联网与嵌入式开发TOP4 &#x1f3c5;2021年2022年C站百大博主 &#x1f3c5;华为云开发…...

Deepseek API+Python 测试用例一键生成与导出 V1.0.4 (接口文档生成接口测试用例保姆级教程)

接口文档生成接口测试用例保姆级教程 随着测试需求的复杂性增加,测试用例的设计和生成变得愈发重要。Deepseek API+Python 测试用例生成工具在 V1.0.4 中进行了全方位的优化和功能扩展,特别是对接口测试用例设计的支持和接口文档的智能解析处理。本文将详细介绍 V1.0.4 版本…...

CET-4增量表

CET-4词表-增量表 注&#xff1a; 【1】所谓增量&#xff0c;是相对于高中高考之增量 即&#xff0c;如果你是在读大学生&#xff0c;高中英语单词过关了&#xff0c;准备考CET-4&#xff0c;那么侧重下面的增量词表的学习&#xff0c;也算是一条捷径吧 ^_^ 【2】本结果数据 官…...

DeepSeek详解:探索下一代语言模型

文章目录 前言一、什么是DeepSeek二、DeepSeek核心技术2.1 Transformer架构2.1.1 自注意力机制 (Self-Attention Mechanism)(a) 核心思想(b) 计算过程(c) 代码实现 2.1.2 多头注意力 (Multi-Head Attention)(a) 核心思想(b) 工作原理(c) 数学描述(d) 代码实现 2.1.3 位置编码 (…...

深入解析主线程退出与子线程管理:何时 Join(),何时 Detach()?

在多线程编程中&#xff0c;主线程退出时如何正确管理子线程是一个关键问题。如果子线程没有 Join() 或 Detach()&#xff0c;不同的操作系统会有不同的行为&#xff0c;可能导致内存泄漏、资源竞争、甚至程序崩溃。本文将深入探讨主线程退出时子线程的管理策略&#xff0c;并提…...

AWS API Gateway Canary部署实战:Lambda到ECS的平滑迁移指南

在云原生架构中,如何实现服务平滑迁移是一个常见挑战。本文将详细介绍如何利用AWS API Gateway的Canary部署功能,实现从Lambda函数到ECS服务的无缝迁移,同时保证客户端无感知并提供便捷的回退机制。 一、迁移方案概述 在本方案中,我们将实现以下目标: 将现有Lambda服务平…...

Docker学习--容器操作相关命令--docker export 命令

docker export 命令的作用&#xff1a; 用于将 Docker 容器的文件系统导出为一个 tar 归档文件。主要用于备份或迁移容器的文件系统&#xff0c;而不包括 Docker 镜像的所有层和元数据。 语法&#xff1a; docker export [参数选项] CONTAINER&#xff08;要操作的容器&#x…...

【Easylive】获取request对象的两种方式

【Easylive】项目常见问题解答&#xff08;自用&持续更新中…&#xff09; 汇总版 1. 通过方法参数直接注入&#xff08;Spring MVC 推荐&#xff09; 在 Controller 方法中直接声明 HttpServletRequest 参数&#xff0c;Spring 会自动注入当前请求的 request 对象&#…...

FOC 控制笔记【三】磁链观测器

一、磁链观测器基础 1.1 什么是磁链 磁链&#xff08;magnetic linkage&#xff09;是电磁学中的一个重要概念&#xff0c;指导电线圈或电流回路所链环的磁通量。单位为韦伯&#xff08;Wb&#xff09;&#xff0c;又称磁通匝。 公式为&#xff1a; 线圈匝数 穿过单匝数的…...

SpringBoot项目读取自定义的配置文件

先说使用场景: 开发时在resource目录下新建一个 config 文件夹, 在里面存放 myconf.properties 文件, 打包后这个文件会放到与jar包同级的目录下, 如下图 关键点&#xff1a;自定义的文件名(当然后缀是.properties)&#xff0c;自定义的存放路径。 主要的要求是在打包后运行过…...

UniApp快速表单组件

环境&#xff1a;vue3 uni-app 依赖库&#xff1a;uview-plus、dayjs 通过配置项快速构建 form 表单 使用 <script setup>import CustomCard from /components/custom-card.vue;import { ref } from vue;import CustomFormItem from /components/form/custom-form-it…...

在PyCharm 中免费集成Amazon CodeWhisperer

CodeWhisperer 是Amazon发布的一款免费的AI 编程辅助小工具&#xff0c;可在你的集成开发环境&#xff08;IDE&#xff09;中生成实时单行或全函数代码建议&#xff0c;帮助你快速构建软件。简单来说&#xff0c;Amazon CodeWhisperer就是你写一段注释&#xff08;支持中文&…...

语音克隆(Voice Cloning)

要将文字转化为“自己声音”的音频&#xff0c;需要用到语音克隆&#xff08;Voice Cloning&#xff09;技术。这种技术通常要求用户提供一定量的语音样本&#xff08;几分钟到几小时不等&#xff09;&#xff0c;然后通过 AI 模型生成与你声音相似的音频。目前市面上完全免费且…...

[7-02-02].第15节:生产经验 - 消费者相关操作

Kafka笔记大纲 五、生产经验——分区的分配以及再平衡: 4.1.生产经验——分区的分配以及再平衡 4.2.参数&#xff1a; 5.4.1 Range 以及再平衡...

Matlab_Simulink中导入CSV数据与仿真实现方法

前言 在Simulink仿真中&#xff0c;常需将外部数据&#xff08;如CSV文件或MATLAB工作空间变量&#xff09;作为输入信号驱动模型。本文介绍如何高效导入CSV数据至MATLAB工作空间&#xff0c;并通过From Workspace模块实现数据到Simulink的精确传输&#xff0c;适用于运动控制…...

vue3大屏适配

最近写大屏&#xff0c;发现适配真的好难统一&#xff0c;不是这有问题就是那有问题&#xff0c;要不然页面拉伸的就变形了&#xff0c;在网上找到了一个好用的插件&#xff0c;暂时用起来没问题&#xff0c;如果后续有问题或者大家有什么好的想法可以在评论区说一下。 插件 bi…...

文件操作与IO—File类

目录 1 属性 2 构造方法 3 常用方法 4 示例代码 1 属性 修饰符与类型 属性 含义 static String pathSeparator 依赖于系统的路径分隔符&#xff0c;String类型的表示 static char pathSeparator 依赖于系统的路径分隔符&#xff0c;char类型的表示 2 构造方法 构造…...

音频进阶学习二十四——IIR滤波器设计方法

文章目录 前言一、滤波器设计要求1.选频滤波器种类2.通带、阻带、过度带3.滤波器设计指标 二、IIR滤波器的设计过程1.设计方法2.常见的模拟滤波器设计1&#xff09;巴特沃斯滤波器&#xff08;Butterworth Filter&#xff09;2&#xff09;切比雪夫滤波器&#xff08;Chebyshev…...

OpenBMC:BmcWeb 处理http请求2 查找路由对象

OpenBMC:BmcWeb 处理http请求1 生成Request和AsyncResp对象_bmc web-CSDN博客 当接收到http请求,并且完成解析后,调用了App::handle处理请求 而App::handle又调用了router.handle(req, asyncResp);来处理请求 1.Router::handle void handle(const std::shared_ptr<Requ…...

MVC编程

MVC基本概述 例子——显示本地文件系统结构 先分别拖入ListView,TableView,TreeView 然后在进行布局 在widget.cpp 结果 mock测试 1&#xff0c;先加入json测试对象 2.创建后端目录 3&#xff0c;在src添加新文件 在models文件夹里 在mybucket.h,添加测试用例的三个字段 4.在…...

怎么对asp.web api进行单元测试?

在 ASP.NET Web API 中进行单元测试是一种确保代码质量和功能正确性的重要实践。单元测试的重点是针对 API 控制器中的逻辑进行测试&#xff0c;而不依赖于外部依赖&#xff08;如数据库、文件系统或网络请求&#xff09;。以下是实现 ASP.NET Web API 单元测试的步骤和方法&am…...

Qt进阶开发:对象树与拥有权

文章目录 一、对象树的概念二、对象拥有权&#xff08;Ownership&#xff09;三、Qt Widgets 中的特殊情况四、对象树与拥有权的实例 一、对象树的概念 在 Qt 中&#xff0c;对象树&#xff08;Object Tree&#xff09;与对象的拥有权&#xff08;Ownership&#xff09;密切相…...

Django:构建高性能Web应用

引言&#xff1a;为何选择Django&#xff1f; 在当今快速发展的互联网时代&#xff0c;Web应用的开发效率与可维护性成为开发者关注的核心。Django作为一款基于Python的高级Web框架&#xff0c;以其"开箱即用"的特性、强大的ORM系统、优雅的URL路由设计&#xff0c;…...

C语言基础系列【32】指针进阶5:指针与常量

博主介绍&#xff1a;程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章&#xff0c;首发gzh&#xff0c;见文末&#x1f447;&#x1f…...

TS 中 interface 和 type 详解

在 TypeScript 中&#xff0c;interface 和 type 都可以用来定义类型&#xff0c;但它们有一些关键的区别。以下是它们的详细对比&#xff1a; 1. 基本定义 interface 用于声明对象的形状&#xff08;属性和方法&#xff09;&#xff0c;是面向对象编程中“接口”概念的体现。 …...

文法 2025/3/3

文法的定义 一个文法G是一个四元组&#xff1a;G(,,S,P) &#xff1a;一个非空有限的终极符号集合。它的每个元素称为终极符号或终极符&#xff0c;一般用小写字母表示。终极符号是一个语言不可再分的基本符号。 &#xff1a;一个非空有限的非终极符号集合。它的每个元素称为…...

蚂蚁集团主导的ISO密码学国际标准立项,纳入国产算法

蚂蚁集团主导的ISO密码学国际标准 ISO 25330-3 立项&#xff0c; 国产算法Ferret成为标准方案。 近日&#xff0c;在美国弗吉尼亚州举行的 ISO/IEC JTC 1/SC 27 全体会议上&#xff0c;ISO/IEC 25330第三部分《Information Security — Oblivious Transfer — Part 3: Obliv…...

nginx的用户认证

[rootserver100 html]# htpasswd -cm /usr/local/nginx/.htpasswd lee 创建用户给密码 编写nginx的配置文件 [rootserver100 html]# echo lee > /data/web/lee/index.html 写入实验内容 访问成功 用户访问认证的设定 用户认证的设定成功...