LEDs
现在主流的车内氛围灯方案分为两种,一种是带自动寻址功能的LIN总线方案,代表的芯片如ELMOS的E521.31/E521.36,迈来芯的MLX81106/MLX81108,英迪芯的IND83209/IND83211。一种是使用了ISELED技术的Smart RGB LED方案(将LED Driver&Controller和LEDs封装在一起),代表芯片如统明亮的seddLED 3.0系列,弘凯光电的iCLed系列等。两种方案的对比如下表:
ISELED联盟是一个开放的工业联盟,其目标是开发一个基于 ISELED 技术的综合生态系统——即用于创新汽车照明的完整系统解决方案。如今,已有多家制造商提供的各种ISELED产品。
从2016年底(ISELED 成立时)最初的5个成员,联盟成员的数量已增加到 30多家公司和机构。联盟成员如下图,包含LED厂商,MCU厂商,汽车零部件厂商等。
ISELED联盟成员
ISELED官网的产品分如下几种:
ISELED系统框图
以上图为例,简单介绍一下这几种产品,
ISELED目前应用方向有三个,分别是:
本篇文章主要介绍基于S32K144控制的ISELED方案试用,所以需要先准备好S32K1的ISELED软件驱动。
S32K1xx的官方IDE安装之后是不带ISELED驱动的,需要从NXP官网下载对应的exe文件并选择IDE的安装目录进行覆盖安装,才能使用ISELED功能。
1.浏览器中输入S32K-ISELED LED Lighting Solution^[1] ^的链接,并登录在NXP官网注册的个人账号,如下图:
2.点击 Design Resources ,往下移动到 Softeware ,能看到S32K SDK ISELED driver的下载选项,如下图:
3.点击下载按钮,在跳转的界面点击 Previous ,能够看到RTM 4.0.0版本的ISELED驱动:
4.点击 SW32K1-ISELED-RTM-4.0.0 ,在弹出的协议界面点击同意,会跳转至如下界面,接着点击S32K1_ISELED_RTM_4.0.0.exe进行下载,建议ReleaseNotes也下载一下,里面包含了对SDK的要求;
5.下载的同时,点击 License Keys ,会跳出如下界面;
6.勾选复选框,点击Generate,弹出如下界面;
7.点击Save All按钮,会将license文件下载到本地。
打开上一章节提到的 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。
ISELED ReleaseNotes
在S32DS for ARM 2.2安装好之后,双击S32K1_ISELED_RTM_4.0.0.exe进行安装,安装过程中需要加载之前保存的license文件以及选择S32DS安装目录下的S32K1xx_RTM_3.0.0文件夹,如下面两张图:
安装完,可以检查下S32K1xx_RTM_3.0.0文件夹内的相关文件夹是否有了ISELED相关的文档和库文件。
由于手上没有ISELED的ADK,只能利用S32K144开发板加上之前客户送的一套ISELED灯板搭建一套演示套件
整体的demo框图如下所示:
ISELED DEMO 框图
1.打开S32DS2.2,新建application工程,命名为 S32K144EVB_ISELED_Demo_Test ,并选择S32K144_SDK 3.0.0版本。
2.等界面加载完成后,添加ISELED组件,如下图,和其相关的其他组件也会自动添加。
3.打开ISELED组件,按下图配置,相关参数后面章节再详细介绍。
4.打开timing_pal组件,使用lpit定时器的通道0。
5.打开时钟组件,使能Flexio时钟。
至此,图形化界面配置结束。
首先是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);
}
}
整套工程代码的链接如下:
测试效果如下(因为大小限制,只剪辑了一部分效果):
由于ISELED组件的参数比较多,如下图在这里着重说明一下。
ISELED组件参数
注意Data Pin和Clock pin不能选择相同的Logical pins。以下图为例,选择PTA10为data pin时,不能选择PTD0或者PTD9为Clock pin,因为他们都属于FXIO_D0。
超时时间推荐的计算公式如下(N代表LED数量,最终计算结果的单位为us):
全部0条评论
快来发表一下你的评论吧 !