ISELED—氛围灯方案的新选择

LEDs

367人已加入

描述

1.ISELED 介绍

1.1 前言

现在主流的车内氛围灯方案分为两种,一种是带自动寻址功能的LIN总线方案,代表的芯片如ELMOS的E521.31/E521.36,迈来芯的MLX81106/MLX81108,英迪芯的IND83209/IND83211。一种是使用了ISELED技术的Smart RGB LED方案(将LED Driver&Controller和LEDs封装在一起),代表芯片如统明亮的seddLED 3.0系列,弘凯光电的iCLed系列等。两种方案的对比如下表:

LIN总线

1.2 ISELED联盟

ISELED联盟是一个开放的工业联盟,其目标是开发一个基于 ISELED 技术的综合生态系统——即用于创新汽车照明的完整系统解决方案。如今,已有多家制造商提供的各种ISELED产品。

从2016年底(ISELED 成立时)最初的5个成员,联盟成员的数量已增加到 30多家公司和机构。联盟成员如下图,包含LED厂商,MCU厂商,汽车零部件厂商等。

LIN总线

ISELED联盟成员

1.3 ISELED产品

ISELED官网的产品分如下几种:

  • SMART DIGITAL LEDS
  • LED Driver & Controller
  • Microcontrollers
  • ADK - Application & Development Kit

LIN总线

ISELED系统框图

以上图为例,简单介绍一下这几种产品,

  • INLC10AQ属于LED Driver & Controller,主要负责通信协议和驱动LED。目前这部分产品只有Inova能提供
  • A3A-FKG-1400-1属于Smart Digital LEDs,可以认为是INLC10AQ和LED的结合体。目前这部分产品有四家能提供,分别是统明亮、弘凯、亿光和欧司朗,做这类产品需要找Inova购买LED Driver & Controller然后和自家的LED进行结合,最终变成Smart Digital LEDs。
  • S32K属于ISELED主机节点指定的MCU,NXP提供了基于S32K的ISELED驱动库,客户使用S32K可以很方便的和Smart Digital LEDs进行通信并实现各种灯效。目前这部分产品主要有两家能提供,除了NXP还有Microchip。
  • ADK属于应用和开发套件,方便客户快速评估ISELED方案。目前能提供ADK的主要是Inova和feno两家公司。

1.4 ISLED应用方向

ISELED目前应用方向有三个,分别是:

  • AMBIENT LIGHTING,环境照明,如车内静态氛围灯。
  • FUNCTIONAL LIGHTING,功能照明,如人手脱离方向盘时进行警示。
  • DYNAMIC LIGHTING EFFECTS,动态灯效,如仪表盘的动态背光灯。

2.ISELED Driver获取及安装

本篇文章主要介绍基于S32K144控制的ISELED方案试用,所以需要先准备好S32K1的ISELED软件驱动。

S32K1xx的官方IDE安装之后是不带ISELED驱动的,需要从NXP官网下载对应的exe文件并选择IDE的安装目录进行覆盖安装,才能使用ISELED功能。

2.1 ISELED Driver获取

1.浏览器中输入S32K-ISELED LED Lighting Solution^[1] ^的链接,并登录在NXP官网注册的个人账号,如下图:

LIN总线

2.点击 Design Resources ,往下移动到 Softeware ,能看到S32K SDK ISELED driver的下载选项,如下图:

LIN总线

3.点击下载按钮,在跳转的界面点击 Previous ,能够看到RTM 4.0.0版本的ISELED驱动:

LIN总线

4.点击 SW32K1-ISELED-RTM-4.0.0 ,在弹出的协议界面点击同意,会跳转至如下界面,接着点击S32K1_ISELED_RTM_4.0.0.exe进行下载,建议ReleaseNotes也下载一下,里面包含了对SDK的要求;

LIN总线

5.下载的同时,点击 License Keys ,会跳出如下界面;

LIN总线

6.勾选复选框,点击Generate,弹出如下界面;

LIN总线

7.点击Save All按钮,会将license文件下载到本地。

LIN总线

2.2 ISELED Driver安装

2.2.1 安装前准备

打开上一章节提到的 S32K1_ISELED_RTM_4.0.0_ReleaseNotes.pdf ,可以看到ISELED RTM4.0.0的驱动包是和S32K1xx的RTM3.0.0,RTM3.0.1, RTM3.0.2匹配的,所以安装ISELED驱动之前,先要保证安装了S32DS For ARM 2.2,这个开发环境自带的就是S32K1xx的RTM3.0.0版本的SDK。

LIN总线

ISELED ReleaseNotes

2.2.2 安装注意事项

在S32DS for ARM 2.2安装好之后,双击S32K1_ISELED_RTM_4.0.0.exe进行安装,安装过程中需要加载之前保存的license文件以及选择S32DS安装目录下的S32K1xx_RTM_3.0.0文件夹,如下面两张图:

LIN总线

LIN总线

2.2.3 安装后检查

安装完,可以检查下S32K1xx_RTM_3.0.0文件夹内的相关文件夹是否有了ISELED相关的文档和库文件。

LIN总线

3.ISELED方案试用

3.1 Demo方案介绍

由于手上没有ISELED的ADK,只能利用S32K144开发板加上之前客户送的一套ISELED灯板搭建一套演示套件

整体的demo框图如下所示:

LIN总线

ISELED DEMO 框图

3.2 编写Demo程序

3.2.1 图形化界面配置

1.打开S32DS2.2,新建application工程,命名为 S32K144EVB_ISELED_Demo_Test ,并选择S32K144_SDK 3.0.0版本。

2.等界面加载完成后,添加ISELED组件,如下图,和其相关的其他组件也会自动添加。

LIN总线

3.打开ISELED组件,按下图配置,相关参数后面章节再详细介绍。

LIN总线

4.打开timing_pal组件,使用lpit定时器的通道0。

LIN总线

5.打开时钟组件,使能Flexio时钟。

LIN总线

至此,图形化界面配置结束。

3.2.2 main函数编写

首先是clock,timing,iseled的初始化,如下所示:

int main(void)
{
  /* Write your local variable definition here */
 testInitType.crcEnable = 1;
 testInitType.firstLedAdr = 1;
 testInitType.tempCmpEnable = 0;
 testInitType.voltSwing = 0;
  /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
  #ifdef PEX_RTOS_INIT
    PEX_RTOS_INIT();                   /* Initialization of the selected RTOS. Macro is defined by the RTOS component. */
  #endif
  /*** End of Processor Expert internal initialization.                    ***/
  /* Write your code here */
  /* For example: for(;;) { } */
 CLOCK_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT, g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);
 CLOCK_SYS_UpdateConfiguration(0U, CLOCK_MANAGER_POLICY_FORCIBLE);


 /*Initialize timing pal instance used by the ISELED Driver for the timeout mechanism*/
 TIMING_Init(&timing_pal1_instance, &timing_pal1_InitConfig);

 digLED_Init_Interface(NUMBER_OF_INTERFACES, iseled1_InitConfig);
 digLED_Init_Strip(&testInitType, &digLEDResultStrip1, strip);

其中,

  • digLED_ReturnType digLED_Init_Interface(uint8_t nrOfInterfaces, const digLED_ConfigType *configStruct);主要是进行ISELED接口的配置,如选择Flexio还是SPI,控制多少路ISELED,选用哪些引脚,外设的超时时间,使用中断还是DMA等。
  • digLED_ReturnType digLED_Init_Strip(const digLED_InitType* ChainInitPtr, digLED_ReadDataResultType* ChainInitResultPtr, uint8_t StripNr);主要是针对具体某一路ISELED的通信协议进行配置,如首ISELED的地址,是否进行CRC校验,差分电压幅值,是否进行相位偏移等。

然后调用digLED_ReturnType digLED_Set_RGB(uint8_t Red, uint8_t Green, uint8_t Blue, uint16_t Address, uint8_t StripNr);实现灯效。其中Red,Green,Blue用于设置灯颜色的RGB值,Address代表要设置的ISELED芯片地址(0代表设置所有ISElED),StripNr代表要设置第几路ISELED。

如设置红色单颗流水效果的代码如下:

void RunWaterRed(void)
 {
   OSIF_TimeDelay(1);
   digLED_Set_RGB(0       , 0       , 0       , 0, strip);
   OSIF_TimeDelay(1);
   uint8_t ledNr;
   uint8_t r = 255, g = 0,  b = 0;
   for(ledNr=1; ledNr<=NUM_OF_LED; ledNr++){
    digLED_Set_RGB(r       , g       , b       , ledNr, strip);
    OSIF_TimeDelay(100);
    digLED_Set_RGB(0       , 0       , 0       , ledNr, strip);
    OSIF_TimeDelay(1);
   }
 }

3.2.3 Demo工程分享

整套工程代码的链接如下:

  • 链接:https://pan.baidu.com/s/1Bx5gTDurymVcxB1y-SSTwA
  • 提取码:5bkl

3.3 Demo测试

测试效果如下(因为大小限制,只剪辑了一部分效果):

LIN总线

3.4 ISELED组件说明

由于ISELED组件的参数比较多,如下图在这里着重说明一下。

LIN总线

ISELED组件参数

  1. Interface,选择ISELED的接口,主要选项有Flexio,LPSPI0,LPSPI1和LPSPI2。
  2. Strip Number,表示第几路ISELED,最多可以有13路,其中Strip1到strip10使用Flexio接口,Strip11到Strip13使用LPSPI接口。
  3. Data Pin和Clock Pin,选择和第一个ISELED芯片连接的数据引脚以及时钟引脚。ISELED芯片直接通过差分总线相连,只有和MCU相连接的ISELED芯片(首地址芯片)走同步信号。

注意Data Pin和Clock pin不能选择相同的Logical pins。以下图为例,选择PTA10为data pin时,不能选择PTD0或者PTD9为Clock pin,因为他们都属于FXIO_D0。

LIN总线

  1. DMA配置,如果使能了DMA配置,下面的DMA接收、发送通道以及EDMA组件也需要同步配置。
  2. callback,回调函数设置,如果填写了回调函数名称,当指令接收、发送完成,或者发生超时,CRC error等错误时,会调用该函数。
  3. Timer channel,配置iseled调用的定时器通道,需要同步在timing_pal进行配置。
  4. timeout duration,配置三种指令的超时时间,分别是初始化,读和ping。

超时时间推荐的计算公式如下(N代表LED数量,最终计算结果的单位为us):

LIN总线

  1. Interface CLK,显示选择的接口的时钟来源,注意在clockMan组件使能对应的时钟。
  2. Timer CLK,显示使用的定时器的时钟来源。
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分