主要内容

从基于i2c的传感器读取数据使用意法半导体Nucleo板

本示例展示了如何使用Simulink®Coder™支持包使用STMi金宝appcroelectroni金宝appcs®Nucleo板配置和读取基于i2c的传感器的数据。

金宝app用于STMicroele金宝appctronics®Nucleo板的Simulink®Coder™支持包使您能够使用I2C接口与基于I2C的设备通信。

在本例中,您将学习如何与Sparkfun数字温度传感器TMP102通信。该传感器使用I2C总线与意法半导体Nucleo板接口。默认情况下,它发送一个12位温度值,分辨率为0.0625摄氏度。您可以将该传感器配置为提供13位温度测量的扩展模式。有关设备的详细信息,请参见TMP102数据表

在本例中,您还将学习如何与Sparkfun数字6DOF加速度计和陀螺仪传感器通信。该传感器使用I2C总线与意法半导体Nucleo板接口。它将为传感器板中的加速度计和陀螺仪传感器发送X、Y和Z轴数据。这些传感器需要单独配置,并充当两个不同的I2C从寄存器。有关设备的详细信息,请参见ADXL345数据表而且itg - 3200数据表

这个例子展示了如何编程意法半导体Nucleo板:

  • 使用I2C总线从TMP102传感器读取温度。它还说明了如何编程意法半导体Nucleo板来初始化传感器的一些高级设置。

  • 使用I2C主读块从ITG3200/ADXL345传感器读取加速度计和陀螺仪数据并显示。

本例的可用模型:

STM核板:stmnucleo_I2C_temp

STM核板:stmnucleo_I2C_temp_extendedMode

STM核板:stmnucleo_AccelGyro_extmode

提供的模型是预配置的意法半导体Nucleo F401RE板。您可以通过浏览到为其他受支持的Nucleo板配置此模型金宝app配置参数>硬件实现>硬件板选择所需的板子。

先决条件

我们建议完成以下示例:

所需的硬件

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

模型

模型示例如下图所示:

连接TMP102传感器到意法半导体Nucleo板

在本任务中,您将连接TMP102传感器到STMicroelectronics Nucleo板。引脚13处的STMicroelectronics Nucleo板载LED将指示TMP102读数何时超过指定的温度阈值。

将TMP102传感器连接到STMicroelectronics Nucleo板,连接方法如下表:

TMP102 pin | STMicroelectronics Nucleo F401RE pin _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ VCC | 3.3 V GND | GND SDA | 14 SCL | 15 ALT | Not Connected ADD0 | GND _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

大部分Nucleo板使用mb抽象并实现Arduino®Uno头,这意味着相同的引脚用于指定的功能。然而,在Nucleo F031K6的情况下,Arduino纳米头被使用mb抽象。

TMP102 pin | STMicroelectronics Nucleo F031K6 pin _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ VCC | 3.3 V GND | GND SDA | 4 SCL | 5 ALT | Not Connected ADD0 | GND _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

配置意法半导体核板型号金宝app

配置支持的意法半导体Nucleo板的型号金宝app

1.打开使用意法半导体Nucleo板从基于I2C的传感器读取温度模型。

2.在Simulin金宝appk模型中,打开建模页签,按“CTRL+E”打开“Configuration Parameters”对话框。

3.选择硬件实现面板中选择所需的意法半导体Nucleo板硬件实现>硬件板参数列表。请勿更改其他设置。

4.点击好吧

配置型号通过I2C读块读取温度

在本任务中,您将配置模型以使用I2C主读块从TMP102传感器读取数据。

1.打开使用意法半导体Nucleo板从基于I2C的传感器读取温度模型。

2.I2C读块配置:

  • 打开I2C读块。注意从设备地址块的参数设置为“0x48”。TMP102传感器的ADD0引脚接地7位地址1001000(十六进制0x48)的TMP102数据表

  • TMP102传感器包含多个寄存器。上电时,从设备读取的数据返回存储在寄存器0 -中的值温度寄存器(只读).离开从I2C从寄存器读取参数未选中,因为您将在此步骤中读取默认的温度寄存器。

  • 温度寄存器的大小为16位。它以左对齐2的补码格式存储12位温度值。TMP102传感器使用Big Endian发送数据。选择数据类型“uint16”,字节次序到'Big Endian',数据量(N)到1,和样品时间到0.1。每0.1秒发起一次I2C读请求。

3.注意模型中的以下几点:

  • 数据类型转换Block用于将读取数据转换为int16,以处理正温度和负温度。

  • 获得Block用于将int16数据右移4位(除以16),以右对齐对应于温度测量的上12位。的获得block还将传感器分辨率为0.0625的12位数据相乘,得到相应的温度,单位为摄氏度。

  • 这两个常数值为1和0的块与a一起使用开关块将温度读数与27摄氏度的阈值进行比较。当TMP102传感器读数超过指定的温度阈值时,STMicroelectronics核板LED在引脚13处发光。对传感器施加温度变化以观察这种行为。

使用Simulink IO在普通模式下运行模型金宝app

在这个任务中,您将模拟的模型正常模式在生成代码金宝app和在Nucleo板上部署模型之前,使用Simulink IO验证设计。有关更多信息,请参阅使用已连接IO与硬件通信

使用Simulink IO在Normal Mode下模拟模型:金宝app

1.中所述启用Si金宝appmulink IO如何启用Connected IO

2.单击运行按钮在模型工具栏上以正常模式运行。模拟过程中,显示块显示温度读数从TMP102传感器摄氏度。当温度读数超过27摄氏度的阈值时,Nucleo板上的LED开始发光。

3.单击停止按钮,以结束普通模式执行。金宝app

配置监控调优的硬件和型号

在这个任务中,您将配置硬件并执行Monitor和Tune操作来监视温度。

1.打开建模按下TAB键Ctrl + E打开配置参数对话框。

2.导航到硬件实现>目标硬件资源>外部模式>串行通讯端口在Windows®操作系统上输入串口的COM口。

3.打开硬件选择并单击监视和调优

4.注意显示模型中的块显示TMP102传感器温度读数,以摄氏度为单位。

5.当模型中的显示块显示温度高于27摄氏度时,观察意法半导体Nucleo F401RE板载LED发光。

6.根据实际环境温度,在“开关”区域框中修改阈值,单击应用.当温度超过新的阈值时,看到板载LED发光。

7.单击停止按钮。硬件选项卡结束Monitor和Tune的执行。

模型

下图显示了下一个任务的示例模型:

配置模型将温度传感器初始化为13位扩展模式

本任务展示如何将TMP102传感器初始化为13位扩展模式。

1.打开使用意法半导体Nucleo板从I2C传感器初始化和读取温度模型。

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

One_time_initialization子系统配置TMP102传感器为13位扩展模式。

Execution_loop子系统读取13位的温度。

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

  • 传感器配置为扩展模式新兴市场在那里配置寄存器到1的每TMP102数据表.这意味着将值“0x60B0”写入位于TMP102传感器地址1的配置寄存器。

3.打开One_time_initialization子系统。

4.配置I2C主写块写入TMP102传感器的配置寄存器:

  • 打开I2C主写块。的从设备地址block的参数被设置为“0x48”。

  • 选择启用寄存器访问参数。然后从寄存器地址参数出现在块中。

  • 设置I2C从设备寄存器地址参数为1。配置寄存器的地址为1TMP102数据表

  • 设置从字节顺序参数到Big Endian,因为配置寄存器的大小为16位,其值需要通过I2C总线使用Big Endian发送。

5.中注意以下内容One_time_initialization子系统:

  • 常数block保存了一个要写入配置寄存器的值“0x60B0”。

  • I2C主读块连接到显示块,确保正确的数据被写入配置寄存器。I2C读块与I2C写块的设置相同。

  • I2C写块优先级设置为1。I2C读块的优先级设置为高于1的任何值,以确保您在设置配置寄存器后读取该值。如果需要设置块的优先级,右键单击块>属性>常规>优先级。要了解更多关于块优先级及其对块执行顺序的影响,请参阅设置块属性

6.打开Execution_loop子系统,观察如下:

  • 获得Block执行除法8,对应右移3位。右除法表示13位温度值。

  • 与任务4类似,使用Simulink IO在普通模式下运行模型。金宝app

  • 与任务5类似,执行监视和优化。

ITG3200/ADXL345传感器与意法半导体核板连接

在本任务中,将ITG3200/ADXL345传感器连接到意法半导体Nucleo板上。

1.将ITG3200/ADXL345传感器连接到STMicroelectronics Nucleo板,连接方法如下表所示:

ITG3200/ADXL345引脚| STMicroelectronics Nucleo F401RE引脚_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ VCC | 3.3 V GND | GND SDA | 14 SCL | 15 INT0 |未连接INT1 |未连接_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

2.与任务2类似,配置支持的STMicroelectronics Nucleo板的型号。金宝app

模型

下图显示了下一个任务的示例模型:

配置通过I2C读块读取传感器数据

本任务演示如何将ITG3200/ADXL345引脚传感器初始化到测量模式。

1.打开使用意法半导体Nucleo板上的I2C Master Read块读取传感器数据模型。

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

Get_Accel_data子系统配置ADXL345传感器读取加速度计数据。

  • 在Get_Accel_data子系统中,传感器被配置为Measure模式测量在那里POWER_CTL注册到08年按ADXL345数据表.这意味着要将值“0x08”写入位于ADXL345传感器地址0x2D的POWER_CTL寄存器。该值使用子系统外部的常量块写入。

Get_Gyro_data子系统配置ITG3200传感器读取陀螺仪数据。

  • 在Get_Gyro_data子系统中,传感器配置在锁相环与X陀螺参考通过设置第一个在那里电源管理寄存器到01itg - 3200数据表.这意味着要将值“0x01”写入位于ITG-3200传感器地址0x3E的POWER管理寄存器。该值使用子系统外部的常量块写入。

3.打开Get_Accel_data子系统。

4.配置I2C主写块写入ADXL345传感器的POWER_CTL寄存器:

  • 打开I2C主写块。的从设备地址块的参数被设置为“0x53”,因为这是从地址。

  • 选择启用寄存器访问参数。然后从寄存器地址参数出现在块中。

  • 设置I2C从设备寄存器地址参数到0x2D。POWER_CTL寄存器的地址是0x2DADXL345数据表

  • 设置从字节顺序POWER_CTL寄存器的大小为8位,其值需要通过I2C总线使用little Endian发送。

5.中注意以下内容Get_Accel_data子系统:

  • 输入端口提供了一个值“0x08”,将写入POWER_CTL寄存器。

  • I2C主读块连接到显示块,确保正确的数据被写入POWER_CTL寄存器。I2C读块与I2C写块的设置相同。

6.打开Get_Gyro_data子系统。

7.配置I2C Master Write block写入ITG3200传感器的POWER Management Register:

  • 打开I2C主写块。的从设备地址块的参数被设置为“0x68”,因为这是从地址。

  • 选择启用寄存器访问参数。然后从寄存器地址参数出现在块中。

  • 设置I2C从设备寄存器地址参数到0x3E。POWER管理寄存器的地址是0x3EITG3200数据表

  • 设置从字节顺序POWER Management寄存器的大小为8位,其值需要通过I2C总线使用little Endian发送。

8.中注意以下内容Get_Gyro_data子系统:

  • 输入端口提供了一个要写入POWER管理寄存器的值“0x01”。

  • I2C主读块连接到显示块,确保正确的数据被写入POWER管理寄存器。I2C读块与I2C写块的设置相同。

  • 对于这两个子系统,I2C写块的优先级都设置为1。I2C Read块的优先级被设置为高于1的任何值,以确保您在设置POWER_CTL/POWER Management Register后读取它的值。如果需要设置块的优先级,右键单击块>属性>常规>优先级。要了解更多关于块优先级及其对块执行顺序的影响,请参阅设置块属性

9.与任务4类似,使用Simulink IO在普通模式下运行模型。金宝app

10.与任务5类似,执行监视和优化。

注意:在Monitor和Tune的情况下,默认使用“串行发送”(USBTX)和串行接收(USBRX)。USBTX和USBRX对应的GPIO引脚分别为D1和D0。这将需要在Monitor和Tune中运行SCI块的情况下编辑其他串行传输和串行接收引脚。要编辑这些设置,请转到“模拟>模型配置参数>硬件实现>目标硬件资源> SCI”,并编辑接收引脚和发射引脚的适当引脚。如果您希望在不运行Monitor和Tune的情况下在硬件上构建和部署代码,请保持模拟>模型配置参数>硬件实现>目标硬件资源> SCI中的默认设置。

其他可以尝试的事情

  • 配置TMP102传感器恢复12位输出。

  • 使用配置寄存器更改传感器中ADC的转换速率。中的连续转换模式和配置寄存器部分TMP102数据表欲知详情。

  • 请参阅TMP102数据表并尝试将TMP102配置为运行关机模式和/或比较器模式.尝试更改高低限制寄存器的值。

  • 请参阅ADXL345数据表并尝试使用DATA FORMAT寄存器在不同的g Range设置中配置ADXL345。

  • 按照本例中的步骤与其他基于I2C的传感器通信。