使用XBee无线电进行数字和模拟采样

XBee无线电有多条I/O线,可用于收集数字或模拟数据,然后将该数据传输到另一个XBee进行解释。因为示例数据总是以API格式提供,所以即使理解了其他XBee API帧,也很难理解接收到的示例帧。本文应该有助于理解如何生成示例数据和正确解释结果。


一般信息

ADC电压

XBee无线电上的ADC是10位的,它将提供从0到1023 (0x03FF)的分辨率。每个XBee对可接受的ADC电压范围有不同的要求。请参考您在设计中使用的XBee的个别产品手册或下面的图表。无论您选择哪种XBee,任何引脚上的电压都不能超过3.3V,否则会损坏无线电模块。

可编程的XBees有自己独特的需求,因此本文不赘述。XBee上的次级微控制器连接到ADC引脚,而不是RF处理器。如果您正在使用此变体,请参阅产品手册以获取引脚和信息。*系列1 XBee(802.15.4和DigiMesh 2.4), XBee- pro 900和XBee- pro 868有一个VREF引脚,必须连接才能使用ADC采样。通常,它连接到VCC,因此您的ADC范围在0到3.3V之间。即使您使用的XBee不需要VREF,也建议将VREF连接到VCC,以提供与其他XBee的兼容性。

上拉电阻和下拉电阻

所有XBee收音机在I/O和其他线路上都有上拉电阻。默认情况下,上拉电阻在每个引脚上都是启用的,但可以使用PR参数禁用或启用。一些xbee可以选择使用下拉电阻,PD参数用于确定电阻的方向,是上拉还是下拉。PR和PD命令都是位域掩码。因为每个无线电对于PR和PD都有不同的可接受值范围,请参考个别产品手册了解这些位场掩码的布局。

下面是上拉和下拉电阻值:

警告:PR参数影响的不仅仅是I/O线。即使您希望禁用收音机上的所有上拉电阻,也必须使PR=0x80。这将使上拉电阻在DIN引脚上启用。如果您让DIN浮动,那么模块将在启动时进入命令模式,并且在使用循环睡眠时的每个唤醒期间。这将极大地影响电池寿命和无线电稳定性。


如何采样数据

数据采样有两种方式:自动采样和查询采样。通过自动采样,无线电可以周期性地(基于采样率)或在一个或多个数字引脚上检测到变化时采样。这将对XBee的I/O线路进行采样,并将该采样传输到使用Destination Address参数指定的另一个XBee。使用查询采样,一个无线电使用远程AT命令从另一个XBee请求采样数据。

使用采样率(IR)的自动采样

设置了IR参数后,无线电将定期对设置为输入的所有I/O线进行采样,并将采样数据发送到DH和DL指定的目标XBee。可以设置最大采样率,尽管IR参数允许每个样本的值低至1ms,但低于无线电处理器的能力将导致不正确的值和丢失的样本。

最大采样率:

示例:采样率在循环睡眠模式下工作得非常好,因为无线电将在每个清醒期采样一次,并立即返回睡眠。如果每个唤醒周期需要多个样本,则需要修改SO(睡眠选项)和ST(睡眠前时间)参数。

配置的例子:

我想采样ADC1, DIO2,和DIO3每分钟一次,并将样品发送到一个特定的无线电。为了节省电池寿命,无线电应该只采样一次每个唤醒周期。

配置:

DH = 0 x0013a200
DL=0x12345678(采集器节点地址)
D1 = 0 x02 (ADC)
D2=0x03(数字输入)
D3=0x03(数字输入)
IR = 0 x200型(512毫秒)
SM=0x04(循环睡眠)
SP=0x1770(60秒)

通过这种配置,无线电将每分钟唤醒一次,将D1作为ADC采样,D2和D3作为数字输入,并在返回睡眠之前将单个采样发送到地址为0013A200 12345678的无线电。IR参数不超过无线电的唤醒周期(这取决于无线电,但在默认设置下,它只会是几毫秒),所以每分钟只有一个样本将被采集并通过空中发送一次,这是由睡眠周期定义的,而不是采样率间隔。

使用变化检测(IC)的自动采样

IC(数字IO变化检测)参数是位场掩码,允许无线电监视指定的数字I/O线路。当在这些引脚上检测到变化(边缘触发)时,无线电将对设置为输入的所有I/O线进行采样,并将采样数据发送到DH和DL指定的目标XBee。

Change Detect在睡眠模式下不能很好地工作,应该在始终打开的配置下与收音机一起使用。这背后的原因是,在被监测的引脚上的边缘过渡必须发生,而无线电是清醒的。例如,如果使用DIO5作为变化检测,并且引脚在唤醒期间为HIGH,但在无线电休眠时转换为LOW,则未检测到边缘并且不会生成样本。当涉及到采样频率时,变化检测具有与红外相同的局限性。

IC的位场掩码是一个从0x0到0xFFFF的2字节值,定义如下:


配置:例子:
我想监测DIO3和DIO5是否有任何变化,如果检测到变化,则将ADC1, ADC2, DIO3, DIO4和DIO5的样本传输到特定的无线电。

DH = 0 x0013a200
DL=0x12345678(采集器节点地址)
D1 = 0 x02 (ADC)
D2 = 0 x02 (ADC)
D3=0x03(数字输入)
D4=0x03(数字输入)
D5=0x03(数字输入)
IC=0x40(二进制:0010 1000)
SM=0x00(始终打开)

无线电将不断监测DIO3和DIO5的状态,当从高到低或从低到高的转换在这些引脚上看到时,无线电将对设置为输入的所有I/O线进行采样,并将单个采样发送到地址为0013A200 12345678的无线电。

请注意,您可以结合采样率和变化检测。在需要更长的周期采样间隔的情况下,这可能很有用,但是如果在特定引脚上检测到变化,则希望能够进行瞬时采样。

远程查询样本(IS)

要远程请求样本,我们需要向远程无线电发出IS命令。为了做到这一点,请求示例的XBee必须启用API,因为请求是作为“远程AT命令”发送的。实际上对I/O线进行采样的无线电不必处于API模式。

  • 一个远程AT命令(帧类型0x17)被发送到本地无线电,远程无线电作为预期的接收者。正在发送的命令是is,请求样品。
  • 远程无线电接收命令并触发设置为输入的I/O行样本。
  • 生成一个AT命令响应帧(0x97)并通过空中发送回本地无线电,其中包含所有示例数据。

这是需要传递到本地无线电的远程AT命令帧的格式:

示例:此框架可以使用最新版本的XCTU

如何使用最新版本的XCTU从远程XBee请求样本:

  1. 打开X-CTU与API XBee连接。为了采集样本,远程XBee必须至少定义一个输入。例如D1=2, D2=2, D3=3会给你两个模拟值和一个数字值。
  2. 打开终端选项卡,打开串口连接。
  3. 点击“发送帧”部分中的+图标来添加一个新帧。
  4. 在“框架名称”字段中键入名称,然后单击使用“框架生成器”工具创建框架
  5. 在“帧类型”列表中选择“0x17 -远程AT命令”。
  6. 对于64位的dest地址,输入远程节点的地址。
  7. 对于AT命令,在Hex字段中输入49 53。或者,点击“ASCII”选项并输入IS。
  8. 点击好吧,在“添加API”窗口中输入API帧。
  9. 点击添加帧
  10. 选中远程AT命令框架后,单击发送选定帧
  11. 现在,您的Frames日志中应该有两项,一项用于传出的Remote AT命令请求,另一项用于传入的远程命令响应。
  12. 通过点击响应框架,您可以看到框架的详细信息,它将包含我们的示例数据:

远程命令响应
7e 00 17 97 01 00 13 a2 00 40 33 1c f9 ff 0b 49 53 00 01 00 00 06 02 10 02 0d 5c
-开始分隔符:7 e
-长度:00 17 (23)
-帧类型:97(远程指挥响应)
-帧ID:01 (1)
-64位源地址:[00] [00] [40] [c] [9
-16位源地址:FF 0 b
-在命令:49 53 (is)
-状态:00(状态OK)
-回应:01 000 000 06 02 10 02 0D(这是我们的样本数据)
-校验和:5度

在下一节中,我们将介绍如何解释此响应框架并解析示例数据。


理解接收到的样本数据

接收自动样品

使用采样率(IR)或变化检测(IC)自动采集的样本将作为API帧到达。帧类型为0x92 (IO Data Sample Rx Indicator)。在这个单帧中包含数字和模拟掩码,指示哪些I/O线被配置为输入,以及我们的实际样本数据。有很多信息,解析出有用的信息可能会令人生畏,因此我们将在这里解密一个示例帧。

下面是一个例子:
7e 00 16 92 00 13 a2 00 40 4c 0e是61 59 01 01 00 18 03 00 10 02 2f 01 fe 49

我们将解析框架并确定每个字段和实际示例数据所在的位置:


*数字通道掩码和数字采样字段是位域掩码,并指示哪些I/O线被设置为数字输入:

在上面的示例帧中,数字信道掩码为0x0018 = 00011000b。因此,在采样XBee上将DIO3和DIO4设置为数字输入。数字样本字段为0x0010 = 00010000b。所以DIO4是高的,DIO3是低的。

**模拟通道掩码是位场掩码,指示哪些I/O线被设置为ADC:

在上面的示例帧中,模拟通道掩码是0x03 = 0011b。因此,AD0和AD1被设置为采样XBee上的adc。因此,我们知道帧中包含两个2字节的模拟样本。AD0为第一个样本,为0x022F,第二个样本为AD2,为0x01FE。

查询示例

当使用来自远程AT命令(0x17)帧的is命令查询示例时,将生成一个响应帧。该响应与自动示例的响应非常相似,但是它被作为远程命令响应帧(0x97)接收。

API框架示例:
7e 00 1b 97 01 00 13 a2 00 40 33 1c f9 79 05 49 53 00 01 18 10 0e 08 00 00 00 5a 01 ae 02 0c bb

我们将解析框架并确定每个字段和实际示例数据所在的位置:


*数字通道掩码和数字采样字段是位域掩码,并指示哪些I/O线被设置为数字输入:


**模拟通道掩码是位场掩码,指示哪些I/O线被设置为ADC:在上面的示例帧中,数字信道掩码是0x1810 = 1100000010000b。因此,在采样XBee上,将DIO4、DIO11和DIO12设置为数字输入。数字样本字段是0x0800 = 100000000000b。所以DI11是高的,DIO4和DIo12是低的。


在上面的示例帧中,模拟通道掩码为0x0E = 1110b。因此,AD1、AD2和AD3被设置为采样XBee上的adc。因此,我们知道帧中包含三个2字节的模拟样本。AD1是第一个样本,为0x005A,第二个样本为AD2,为0x01AE,第三个样本为AD3,为0x020C。

将样本数据转换为有用的测量

对于模拟示例,您将收到十六进制格式的2字节值。所有XBees都有一个10位ADC,因此可接受的范围将从0x0000到0x03FF。为了将该值转换为有用的电压水平,我们需要应用以下公式:

ADC/1023 (VREF) =电压

例子:
使用ZigBee XBee,我们接收到的ADC值是0x1AE。首先,我们将十六进制值转换为十进制(0x1AE=430)。ZigBee使用1.2V基准,因此我们可以应用如下公式:
430/1023 (1.2V) = 504.4mV

解释来自传感器适配器的数据

Digi有各种各样的适配器,这些适配器是为采样而设计的,或者有内置的传感器来提供额外的功能。带有适配器的API帧结构与我们所介绍的相同,但是将采样模拟值转换为有用测量值的公式不同。由于所有这些适配器都使用ZigBee XBees,因此公式中的VREF为1200 (1.2V)。

激光传感器
光:ADC1
温度:ADC2
湿度:ADC3

公式:
亮度:勒克斯= (ADC1 / 1023) * 1200
温度:温度= ((ADC2/1023) * 1200) - 500) /10
湿度:(((ADC3/1023) * 1200) * 108.2 / 33.2) / 5000 - 0.16) / 0.0062)

例子:
如果我们收到如下值的样本:ADC1 = 0x002D, ADC2 = 0x0269, ADC3 = 0x01CE,则结果为:
亮度= 52.7859勒克斯
温度= 22.3754摄氏度
湿度= 31.1673 RH



墙的路由器
光:ADC1
温度:ADC2

公式:
亮度:勒克斯= (ADC1 / 1023) * 1200
温度:温度= ((ADC2/1023) * 1200) - 500) /10

例子:
如果我们接收到如下值的样本:ADC1 = 0x002E, ADC2 = 0x02A1,则结果为:
光= 53.9063勒克斯
温度= 24.8672摄氏度



智能插座
光:ADC1
温度:ADC2
当前:ADC3

公式:
亮度:勒克斯= (ADC1 / 1023) * 1200
温度:温度= ((ADC2/1023) * 1200) - 500) /10
电流:((((ADC3/1023) * 1200) * (156/47) - 520) / 180 *0.7071

例如:如果我们收到一个值为ADC1 = 0x0010, ADC2 = 0x02B9, ADC3 = 0x01FE的样本,结果将是:
亮度= 18.79勒克斯
温度= 31.6797摄氏度
电流= 5.74994 A



模拟适配器(0 - 10V配置)
终端1:ADC0
端子2:ADC1
终端3:ADC2
端子4:ADC3

公式:
电压= ((ADC * 1.2) / 1023 / (3.3 / 28.2))

例如:如果我们收到的样本值为:ADC0 = 0x0096, ADC1 = 0x011, ADC2 = 0x000B, ADC3 = 0x01F6,则结果为:
端子1:1.5V
端子2:170mV
端子3:110mV
端子4:5.03V


特定电台须知

XBee 802.15.4

  • 运行802.15.4固件的系列1 XBees支持数字和模拟线路传递。该功能允许无线电从一个XBee接收输入,并直接改变另一个XBee的输出。本质上作为数字和模拟信号的电线替代品,而不仅仅是UART数据。这是802.15.4固件独有的,如果不使用外部微控制器或可编程变体,在任何其他XBee上都是不可能的。有关更多信息,请参阅以下KB文章:

数字I/O线路传递://www.phdurl.com/support/knowledge-base/xbee-802-15-4-digital-input-output-line-passing
模拟线路传递://www.phdurl.com/support/knowledge-base/analog-to-digital-conversion-on-the-xbee-802-15-4

  • 这个固件还有两个额外的参数,IT和IU。启用IT后,无线电每次传输可以采集多个样本。这可以减少射频通信量,因为发生的传输减少了。为了输出示例数据而不是使用I/O Line Passing,需要IU。
  • 与DigiMesh和ZigBee相比,接收帧的帧结构略有不同。802.15.4模块使用16位寻址(使用用户定义的MY参数)或完整的64位地址(通过设置MY=FFFF)进行操作。因此,API帧类型是不同的。

下面是你将遇到的各种API框架的结构和示例:

0x83 - 16位I/O样本
如果远程无线电使用16位寻址,并且由于设置了IR或IC而自动生成帧,则使用此帧类型。

如果包含多个样本(样本数量> 1),那么您将有多组样本数据:样本数据由通道掩码和校验和之间的所有字段组成。

*通道掩码是位场掩码,指示哪些I/O线被设置为数字输入或ADC:

数字采样遵循与通道掩码相同的格式。在上面的示例框架中,数字样本字段是0x0018 = 0x11000。所以DIO3和DIO4 = HIGH, DIO6 = LOW。模拟样本为ADC0 = 0x0046, ADC1 = 0x0154, ADC2 = 0x020A。在上面的示例帧中,通道掩码为0xE58 = 111001011000b。因此在采样XBee上,DIO3、DIO4和DIO6被设置为数字输入,而ADC0、ADC1和ADC2被设置为模拟输入。

0x83 - 64位I/O示例
这种帧类型与16位I/O帧相同,除了使用2字节64位地址字段而不是1字节16位地址字段。只有当采样无线电上的MY参数设置为0xFFFF时,才会生成此帧。

无线个域网

  • 查询到的样本可以发送到处于休眠状态的终端设备。这是因为终端设备的父设备将缓冲is命令,直到终端设备的下一个唤醒周期。这使得ZigBee成为远程采样应用的理想选择。
  • 当使用周期性采样和变化检测时,接收XBee必须处于API模式。如果接收XBee处于AT模式,则不会生成任何输出。采样XBee不必处于API模式。

DigiMesh 2.4, 900HP, 868LP和865LP

当使用周期性采样和变化检测时,接收XBee必须处于API模式。如果接收XBee处于透明模式,则不会生成任何输出。采样XBee不必处于API模式。

最后更新:2018年8月23日

最近查看的

没有最近浏览的文章
Baidu
map