当 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/74081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

说说Redis的内存淘汰策略?

大家好&#xff0c;我是锋哥。今天分享关于【说说Redis的内存淘汰策略?】面试题。希望对大家有帮助&#xff1b; 说说Redis的内存淘汰策略? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis的内存淘汰策略用于管理当内存达到最大限制时&#xff0c;如何处理过…

Python实现音频数字水印方法

数字水印技术可以将隐藏信息嵌入到音频文件中而不明显影响音频质量。下面我将介绍几种在Python中实现音频数字水印的方法。 方法一&#xff1a;LSB (最低有效位) 水印 import numpy as np from scipy.io import wavfile def embed_watermark_lsb(audio_path, watermark, ou…

Altium Designer 24 PCB 走线倒圆弧方法

Altium Designer 24 PCB 走线倒圆弧方法 问题描述解决方法设置倒圆弧参数选择需要优化的走线进行走线优化 优化效果展示 在 PCB 设计中&#xff0c;走线转角过于尖锐不仅影响美观&#xff0c;还可能引起信号完整性问题。本文介绍如何在 Altium Designer 24 中通过倒圆弧优化走线…

Cookie与Token详解及测试需重点关注点

在现代Web应用中&#xff0c;Cookie 和 Token 是两种常见的身份验证与会话管理机制。它们分别在不同的场景下扮演着重要的角色&#xff0c;在性能、灵活性和安全性方面具有各自的特点。作为测试人员&#xff0c;理解它们的工作原理以及如何对其进行有效的测试&#xff0c;是保证…

Unity 2022.3.x部分Android设备播放视频黑屏问题

Android平台视频兼容性问题很多…类似的黑屏问题真的很头大&#xff0c;总结一些常见问题&#xff1a; 1. 视频文件不支持压缩 如果使用AssetBundle加载视频&#xff0c;这个AssetBundle压缩格式要选None。有人可能会说最新版Unity已经支持bundle压缩下播放视频&#xff0c;稳…

Redis - 概述

目录 ​编辑 一、什么是redis 二、redis能做什么&#xff08;有什么特点&#xff09;&#xff1f; 三、redis有什么优势 四、Redis与其他key-value存储有什么不同 五、Redis命令 六、Redis数据结构 1、基础数据结构 2、高级数据结构 一、什么是redis 1、redis&#x…

数据库部署在服务器表不存在解决方案

MySQL 数据库表不存在错误解决方案 MySqlException (0x80004005): Table store.SysLogOperate doesnt exist 服务器用的mysql5.6 用这个表syslogoperate只是全是小写 看起来你在使用 Pomelo.EntityFrameworkCore.MySql 作为 MySQL 数据库的提供程序&#xff0c;并且在初始化…

图灵完备——游戏中进行实践

图灵完备 简述结构一、基本逻辑电路1、低电平2、高电平3、非门4、与门5、三路与门6、或门7、三路或门8、与非门9、或非门10、异或门11、同或门 二、算数运算&&存储器1、二进制速算2、成对的麻烦 简述 这周就要学习计算机组成原理了&#xff0c;为了学起来不那么吃力&am…

踏过强化学习的每一步推导

给定 l [ a n , . . . , a 0 ] l[a_n, ..., a_0] l[an​,...,a0​]&#xff0c;现在 for idx in range(len(l)-2, -1, -1):l[idx] l[idx1] * ld注&#xff1a;这里的ld就是 λ \lambda λ&#xff0c;定义 λ 0 1 \lambda^01 λ01 证明变换后&#xff1a; l [ ∑ i 0 n …

AI小白的第七天:必要的数学知识(概率)

概率 Probability 1. 概率的定义 概率是一个介于 0 和 1 之间的数&#xff0c;表示某个事件发生的可能性&#xff1a; 0&#xff1a;事件不可能发生。1&#xff1a;事件必然发生。0 到 1 之间&#xff1a;事件发生的可能性大小。 例如&#xff0c;掷一枚公平的硬币&#xf…

UE5 + Rider + VsCode 接入腾讯的 Puerts 脚本

学习了一段时间 U&#xff0c;写点啥就得等编译&#xff0c;体验真的是一言难尽。。。。。。 然后就想着给自己找个脚本好了&#xff0c;调研了一下 AngelScript&#xff0c;puerts 的可行性。 AngelScript 看着真的诱人&#xff0c;但是发现连官方提供的都是 UE 的预编译版本…

凸包构造算法—Graham 扫描法

1. 理论原理推导 核心思想 Graham 扫描法基于以下基本思想&#xff1a; 极角排序&#xff1a; 选取一个参考点&#xff08;通常选择 y 坐标最小的点&#xff0c;若存在多个&#xff0c;则选 x 坐标最小的&#xff09;&#xff0c;将其他点按照与该参考点构成的极角进行升序排…

如何在 Windows 上安装与配置 Tomcat

Apache Tomcat 是一个开源的 Servlet 容器和 Web 服务器&#xff0c;广泛用于 Java Web 应用的开发和部署。它是实现 Java EE&#xff08;现称 Jakarta EE&#xff09;规范中的 Servlet 和 JSP 的官方参考实现。在本文中&#xff0c;我们将详细介绍如何在 Windows 系统上安装并…

测试模版15

本篇技术博文摘要 &#x1f31f; 引言 &#x1f4d8; 在这个变幻莫测、快速发展的技术时代&#xff0c;与时俱进是每个IT工程师的必修课。我是盛透侧视攻城狮&#xff0c;一名什么都会一丢丢的网络安全工程师&#xff0c;也是众多技术社区的活跃成员以及多家大厂官方认可人员&a…

拦截、限流,针对场景详细信息(一)

以下是一个基于Java Spring Boot Redis 的完整限流实现案例&#xff0c;针对同一接口前缀&#xff08;如 /one/ &#xff09;的IP访问频率控制&#xff1a; 场景&#xff1a;用户不用登录即可访问接口&#xff0c;网站会有被攻击的风险 URL&#xff1a;one/two/three one/…

计算机视觉算法实战——烟雾检测

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​ ​​​​​​​​​ ​​ 1. 烟雾检测领域介绍 烟雾检测是计算机视觉在公共安全领域的重要应用&#xff0c;它通过分析视频或图像序…

MySQL-DCL函数

DCL DCL英文全称是Data Control Language(数据控制语言)&#xff0c;用来管理数据库用户、控制数据库的访问权限。 管理用户 1). 查询用户 use mysql; select * from user; select * from mysql.user; 查询的结果如下: 其中 Host代表当前用户访问的主机, 如果为localhost, 仅…

linux 服务器创建服务器启动后服务自启动

1、在/etc/systemd/system/下touch一个文件&#xff1a; touch /etc/systemd/system/your_application.service 2、在文件中写入&#xff1a; [Unit] Descriptionmodules-system Aftersyslog.target[Service] Typeforking Userroot Grouproot ExecStart/bin/bash /usr/loca…

端到端语音识别案例

《DeepSeek大模型高性能核心技术与多模态融合开发&#xff08;人工智能技术丛书&#xff09;》(王晓华)【摘要 书评 试读】- 京东图书 语音识别这一技术正如其名&#xff0c;是通过精密地解析说话人的语音来识别并准确转写出其所说的内容。它不仅仅是一个简单的转录过程&#…

QT——信号和槽

QT是图形化界面&#xff0c;自然是需要与用户进行交互的&#xff0c;但是该如何实现用户与界面或者程序的交互呢。答案是通过信号和槽。 一&#xff0c;什么是信号和槽&#xff1f; 在Linux操作系统里面&#xff0c;我们知道信号是由硬件或者软件产生&#xff0c;但是在QT里面…