主要内容

从MMA8451Q三轴数字加速度计I2C读取加速度数据

本例展示了如何使用Simulink Coder Suppor金宝appt Package 金宝appfor NXP FRDM-KL25Z板根据板的朝向来控制RGB LED的颜色。

简介

金宝appNXP FRDM-K金宝appL25Z板的Simulink Coder支持包使您能够在FRDM-KL25Z板上创建和运行Simulink®模型。

在本例中,您将学习如何与板载MMA8451Q数字加速度计通信,该数字加速度计与NXP FRDM-KL25Z板具有I2C接口。有关传感器的详细信息,请参见MMA8451Q数据表.这个例子展示了如何编程FRDM-KL25Z板来控制RGB LED的颜色基于板的方向。

先决条件

我们建议填写NXP FRDM-KL25Z板的Simul金宝appink编码器支持包金宝app

所需的硬件

要运行这个例子,你需要以下硬件:

  • NXP FRDM-KL25Z板

任务-配置和运行基于I2C的加速度计模型。

1.将Mini USB电缆从主机上的USB端口插入到FRDM-KL25Z板上的OpenSDA Mini - b USB连接器。

2.打开基于I2C的加速度计模型。

open_system (“freedomboard_i2c”);

3.注意模型中的两个子系统:

  • Execution_loop子系统读取14位加速度数据,并根据方向设置RGB led的颜色和强度。

  • One_time_initialization子系统只在模型执行的第一步执行一次。在其余的执行时间内,Execution_loop子系统运行。方法处理子系统的这种选择性执行单位延迟启用子系统块从Simulink库。金宝app

4.I2C主写块配置:

  • 传感器设置为有源模式通过设置活跃的将CTRL_REG1寄存器的位转换为“1”MMA8451Q数据表

open_system (“freedomboard_i2c / One_time_initialization”

  • 打开I2C MasterWrite块。

  • 板载MMA8451Q传感器通过引脚PTE24 (SCL)和PTE25 (SDA)连接到处理器的I2C模块。如在FRDM KL25Z原理图这些引脚属于I2C模块0。因此,设置I2C模块为0。

  • 注意从设备地址设置为“0x1D”和从寄存器地址设置为“0x2A”。它可以在MMA8451Q数据表'0x1D'是设备的从地址,'0x2A'是寄存器CTRL_REG1的地址。

  • 设置从字节顺序BigEndian。

  • 注意常数块保存了要写入CTRL_REG1寄存器的值“1”,该寄存器将激活传感器。

5.配置I2C模块0:

  • 中I2C模块选择上述SDA和SCL引脚配置参数>硬件实现>目标硬件资源> I2C0 > SCL/SDA引脚

6.配置I2C主读块:

open_system (“freedomboard_i2c / Execution_loop”

  • 在Execution_loop子系统中,三个I2C主读块用于从包含x轴、y轴和z轴输出样本数据的寄存器中读取数据。

  • 打开三个I2C MasterRead块中的任何一个。如前所述,设置I2C MasterWrite块I2C模块到0和从设备地址“0 x1d”。

  • 它可以在MMA8451Q数据表'0x01', '0x03'和'0x05'是x轴,y轴和z轴MSB数据的寄存器地址。注意从寄存器地址I2C主读块的十六进制值分别设置。

  • 默认情况下,这些寄存器以2的补码形式输出左对齐的14位输出样例数据。MMA8451Q传感器以BigEndian格式存储数据。因此,选择从字节顺序“BigEndian”,数据量(N)到1和数据类型“int16”。通过设置样品时间to 0.1每0.1秒发起一次I2C读请求。

7.x-accel2brightness在Execution_loop子系统内部,从I2C MasterRead块获取原始x轴加速度数据作为输入,将其转换并为红色Led输出等效占空比。类似地,y-accel2brightness子系统和z-accel2brightness子系统输出绿色和蓝色led的占空比。

8.在Simuli金宝appnk模型中,单击构建模型按钮。

9.当模型在NXP FRDM-KL25Z单板上开始运行时,可以观察到RGB LED的颜色随着单板朝向的不同而变化。

其他可以尝试的事情

的其他特性进行实验MMA8451Q传感器。例如:

  • 适当地设置单、双、定向轻敲寄存器,以检测加速度计上的轻敲。

  • 使用传感器的Auto-WAKE/SLEEP检测模式,仅当FRDM-KL25Z板摇动时LED才会发光。