主要内容

使用Arduino®硬件从I2C传感器读取温度

这个例子展示了如何使用Simulink®Support Pa金宝appckage金宝app for Arduino Hardware配置和读取基于I2C的传感器的温度。

金宝app支持的硬件:

  • Arduino Uno

  • Arduino超级2560

  • Arduino兆理应

  • Arduino由于

  • Arduino达芬奇

  • Arduino MKR1000

  • Arduino MKR WIFI 1010

  • Arduino MKR零

  • Arduino Nano 33物联网

  • Arduino Nano 33 BLE Sense

  • 其他Arduino派生的单板具有I2C模块

这个示例的可用版本:

Arduino Mega 2560板:arduino_I2C_temp

所提供的型号为Arduino Mega 2560预配置。您可以在“支持的硬件”一节中通过更改“硬件板”参数,在本例的步骤2中描述的任何板上运行此模型。金宝app

介绍

金宝appSimu金宝applink Support Package for Arduino Hardware使您能够使用I2C接口与基于I2C的设备进行通信。

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

这个示例演示了如何使用I2C总线对Arduino板进行编程,以读取传感器的温度。它还说明了如何编程Arduino板初始化传感器与一些高级设置。

先决条件

在你开始这个例子之前,我们建议你完成:

所需的硬件

要运行此示例,您将需要以下硬件:

模型

示例模型如下图所示:

步骤1 -将TMP102传感器连接到Arduino硬件

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

1.用下面的电路图将TMP102传感器连接到Arduino板上:

TMP102销| Arduino兆2560针  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ VCC | 3.3 V接地|接地SDA 20 sci 21 ALT | | |没有连接ADD0 |接地  _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

步骤2 -为所支持的Arduino硬件配置模型金宝app

在本节中,您将为受支持的Arduino硬件配置模型。金宝app

1.打开使用Arduino硬件从基于I2C的传感器读取温度模型。

2.在您的Simul金宝appink模型中,单击模拟>模型配置参数打开配置参数对话框。

3.选择硬件实现窗格中选择所需的Arduino硬件硬件板参数列表。不要更改任何其他设置。

4.点击好吧

步骤3 -配置“型号”为“I2C读块读取温度”

在本节中,您将配置模型以使用I2C读块。

1.打开使用Arduino硬件从基于I2C的传感器读取温度模型。

2.配置I2C读块:

  • 打开I2C读块。请注意,奴隶设备地址块的参数被设置为“0x48”。TMP102传感器的ADD0引脚接地,对应a7位地址1001000(十六进制0x48)根据TMP102数据表

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

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

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

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

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

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

步骤4 -在连接I/O的Normal模式下运行Model

在生成代码并在Arduino上部署模型之前,您可以使用Connected I/O在Normal模式下模拟模型,以验证模型设计。在本例中,当您在Connected I/O中模拟模型时,模型从与Arduino接口的TMP102传感器读取温度。模型和Arduino硬件之间的这种通信不需要任何代码生成或模型部署,从而加快了模拟过程。有关连接I/O的更多信息,请参见通讯与硬件在正常模式模拟使用连接的I/O

使用Connected I/O在Normal模式下模拟模型:

1.启用已连接I/O,请参见如何启用已连接的I/O

2.在模型工具栏上,单击Run。在模拟过程中,显示块显示来自TMP102传感器的温度读数,单位为摄氏度。当温度读数超过27摄氏度的阈值时,Arduino上的LED开始发光。

3.在模型工具栏上,单击Stop以停止模拟。

步骤5 -在外部模式下运行模型

在本节中,您将运行模型外部模式来监控温度。

1.改变模拟模式在模型的工具栏上外部

2.单击运行按钮,以在外部模式下运行模型。

3.请注意,显示块在模型显示TMP102传感器温度读数摄氏度。

4.当模型中的显示屏显示温度超过27度时,观察Arduino上的LED发光。

5.根据您的环境温度,在“开关”块中更改阈值,然后单击应用.当温度超过新的阈值时,看到板载LED发光。

6.单击停止按钮,以结束外部模式执行。金宝app

步骤6 -配置型号初始化温度传感器为13位扩展模式

介绍初始化TMP102传感器到13位扩展模式的操作步骤。

1.打开使用Arduino硬件初始化和读取I2C传感器温度模型。

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

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

执行循环读取13位的温度。

  • One_time_initialization子系统只在模型执行的第一步执行一次。子系统的选择性执行是使用单位延迟启用子系统块从Simulink库。金宝app

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

3.打开One_time_initialization子系统。

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

  • 打开I2C写块。的奴隶设备地址块的参数被设置为“0x48”之前。

  • 选择写入I2C从寄存器参数。然后I2C从设备寄存器地址参数将出现在块中。

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

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

5.注意One_time_initialization子系统:

  • 常数块保存一个要写入配置寄存器的值'0x60B0'。

  • 连接到Display块的I2C Read块确保将正确的数据写入配置寄存器。I2C读块和I2C写块使用相同的设置。

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

6.遵守以下几点:

  • 获得Block执行8的除法,对应右移3位。右边的划分证明了13位温度值是正确的。

步骤7 -在外部模式下运行模型

提示:在外部模式下模拟模型之前,您可以在连接I/O的正常模式下模拟模型,步骤4—使用连接I/O在正常模式下运行模型。在Connected I/O中模拟模型使您能够在生成代码和在Arduino上部署模型之前验证模型设计。

在本节中,您将运行模型外部模式来监控温度。

1.改变模拟模式在模型的工具栏上外部

2.单击运行按钮,以在外部模式下运行模型。

3.打开One_time_initialization子系统。

4.验证显示块显示一个十六进制的值'0x60B0',对应于所需的配置寄存器值。

5.监控显示以摄氏度观察TMP102温度读数。当模型中的显示屏显示温度超过27度时,内置的Arduino LED就会发光。

6.根据您的环境温度,在“开关”块中更改阈值,然后单击应用.当温度超过新的阈值时,看到板载LED发光。

7.单击停止按钮,以结束外部模式执行。金宝app

其他可以尝试的事情

  • 将TMP102传感器的输出恢复到12位。

  • 使用配置寄存器更改传感器中ADC的转换速率。请参阅中的连续转换模式和配置寄存器部分TMP102数据表为更多的细节。

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

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

总结

这个示例演示了如何对Arduino板进行编程,以配置和读取基于I2C的传感器的温度。在这个例子中,你学会了如何:

  • 与基于I2C的传感器通信。

  • 对Arduino板进行编程,使其向基于I2C的传感器的特定寄存器写入数据和从寄存器读取数据。

  • 用一些高级设置初始化传感器。

您可以使用此示例作为参考,以访问其他基于I2C的传感器。