使用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之间。 即使您没有使用需要VREF的XBee,也建议将VREF连接到VCC以提供与其他XBees的兼容性。
上拉和下拉电阻
所有XBee无线电都在I / O和其他线路上都有上拉电阻。 默认情况下,每个引脚都使能上拉电阻,但可以使用PR参数禁用或启用上拉电阻。 有些XBees可以选择使用下拉电阻,PD参数用于确定电阻的方向,无论是上拉电阻还是下拉电阻。 PR和PD命令都是位域掩码。 由于每个无线电对PR和PD都有不同的可接受值范围,请参考各产品手册以了解这些位域掩码的布局。
以下是上拉和下拉电阻值:
警告:PR参数不仅影响I / O线。 即使您希望禁用无线电上的所有上拉电阻,也必须保留PR = 0x80。 这将使DIN引脚上的上拉电阻保持有效。 如果您将DIN悬空,则模块将在启动时以及使用循环睡眠时的每个唤醒期间进入命令模式。 这将极大地影响电池寿命和无线电稳定性。
二、如何采样数据
有两种方法可以采样数据:自动采样或查询。 通过自动采样,无线电可以定期(基于采样率)或在一个或多个数字引脚上检测到变化时采样。 这将对XBee的I / O线进行采样,并将该样本传输到您使用目标地址参数指定的另一个XBee。 通过查询采样,一个无线电使用远程AT命令从另一个XBee请求采样数据。
使用采样率(IR)自动采样
通过IR参数设置,无线电将周期性地采样所有设置为输入的I / O线,并将采样数据发送到DH和DL指定的目标XBee。 可以设置最大采样率,尽管IR参数允许每个样本低至1ms的值,低于无线电处理器的能力将导致不正确的值和丢失的样本。
最高采样率:
示例:采样率非常适用于循环睡眠模式,因为无线电将在每个唤醒周期采样一次并立即返回睡眠状态。 如果每个唤醒周期需要多个样本,则需要修改SO(睡眠选项)和ST(睡眠前的时间)参数。
配置示例:
我想每分钟对ADC1,DIO2和DIO3进行一次采样,并将样本发送到特定的无线电。 为了延长电池寿命,无线电应该每个唤醒周期只采样一次。
配置如下:
DH=0x0013A200
DL = 0x12345678(收集器节点的地址)
D1 = 0x02(ADC)
D2 = 0x03(数字输入)
D3 = 0x03(数字输入)
IR = 0x200(512ms)
SM = 0x04(循环睡眠)
SP = 0x1770(60秒)
通过这种配置,无线电将每分钟唤醒一次,采样D1作为ADC,采样D2和采样D3作为数字输入,并且在返回睡眠之前用地址0013A200 12345678将单个采样发送到无线电。IR参数不会超过无线电的唤醒周期(这取决于无线电,但是根据默认设置,它只会是几毫秒),所以将只取一个样本,并且按照睡眠周期而不是采样率间隔的定义,每分钟在空中传送一次。
利用变化检测(IC)自动采样
IC(数字IO变化检测)参数是位域掩码,允许无线电监视指定的数字I / O线。 当在这些引脚上检测到更改(边沿触发)时,无线电将对设置为输入的所有I / O线进行采样,并将采样数据发送到DH和DL指定的目标XBee。
更改检测不适用于睡眠模式,应与非睡眠配置中的无线电一起使用。 这背后的原因是受监控引脚上的边沿转换必须在无线电唤醒时发生。 例如,如果DIO5用作变化检测,并且在唤醒期间引脚为高电平,但在无线电处于休眠状态时转换为低电平,则未检测到边沿且不会生成样本。 在采样频率方面,变化检测与IR具有相同的限制。
IC的位域掩码是从0x0到0xFFFF的2字节值,定义如下:
配置:例如:
我想监视DIO3和DIO5是否有任何变化,如果检测到更改,则将ADC1,ADC2,DIO3,DIO4和DIO5的样本传输到特定的无线电。
DH=0x0013A200
DL = 0x12345678(收集器节点的地址)
D1 = 0x02(ADC)
D2 = 0x02(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模式。
l 远程AT命令(帧类型0x17)被发送到本地无线电,远程无线电作为预期接收者。 发送的命令是IS,用于请求样本。
l 远程无线电接收命令并触发设置为输入的I / O线样本。
l 生成AT命令响应帧(0x97)并通过空中发送回本地无线电,其包含所有样本数据。
这是需要传递到本地无线电的远程AT命令帧的格式: |
示例:可以使用最新版本的XCTU生成此帧。
如何使用最新版本的XCTU从远程XBee请求样本:
1. 打开连接了API XBee的X-CTU。 远程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日志中有两个项目,一个用于传出远程AT命令请求,另一个用于传入远程命令响应。
12. 通过单击Response框架,您可以看到框架详细信息,其中包含我们的示例数据:
Remote Command Response
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
- Start delimiter: 7E
- Length: 00 17 (23)
- Frame type: 97 (Remote Command Response)
- Frame ID: 01 (1)
- 64-bit source address: 00 13 A2 00 40 33 1C F9
- 16-bit source address: FF 0B
- AT Command: 49 53 (IS)
- Status: 00 (Status OK)
- Response: 01 00 00 06 02 10 02 0D (This is our sample data)
- Checksum: 5C
在下一节中,我们将介绍如何解释此响应帧并解密样本数据。
三、理解收到的采样数据
接收到自动采样帧
使用采样率(IR)或更改检测(IC)自动采集的样本将作为API帧到达。 帧类型为0x92(IO数据采样Rx指示符)。 此单帧中包含数字和模拟掩码,指示哪些I / O线配置为输入,以及我们的实际样本数据。 有很多信息,解析有用信息可能会令人生畏,因此我们将在这里解密一个示例框架。
这是一个示例帧:
7E 00 16 92 00 13 A2 00 40 4C 0E BE 61 59 01 01 00 18 03 00 10 02 2F 01 FE 49
我们将解析帧并识别每个字段以及实际样本数据所在的位置:
*数字通道掩码和数字样本字段是位域掩码,表示哪些I / O线设置为数字输入:
在上面的示例帧中,数字通道掩码是0x0018 = 00011000b。 因此,DIO3和DIO4在采样XBee上设置为数字输入。 数字样本字段为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 5A 01 AE 02 0C BB
我们将解析框架并识别每个字段以及实际样本数据所在的位置:
*数字通道掩码和数字样本字段是位域掩码,表示哪些I / O线设置为数字输入:
**模拟通道掩码是位域掩码,指示哪些I / O线设置为ADC:在上面的示例帧中,数字通道掩码为0x1810 = 1100000010000b。 因此,DIO4,DIO11和DIO12在采样XBee上设置为数字输入。 数字样本字段为0x0800 = 100000000000b。 因此DI11为高电平,DIO4和DIo12为低电平。
在上面的示例帧中,模拟通道掩码是0x0E = 1110b。 因此,AD1,AD2和AD3在采样XBee上设置为ADC。 结果,我们知道帧中包含三个2字节模拟样本。 AD1是第一个样本,是0x005A,第二个样本是AD2,它是0x01AE,第三个样本是AD3,它是0x020C。
将采样数据转换为有用的测量
对于模拟样本,您将收到十六进制格式的2字节值。 所有XBe都有一个10位ADC,因此可接受的范围将从0x0000到0x03FF。 为了将此值转换为有用的电压电平,我们需要应用以下公式:
ADC/1023 (VREF) = Voltage
例:使用ZigBee XBee,我们收到的ADC值为0x1AE。 首先,我们将十六进制值转换为十进制(0x1AE = 430)。 ZigBee使用1.2V参考,因此我们可以按如下方式应用公式:
430/1023(1.2V)= 504.4mV
解释传感器适配器中的数据
Digi有多种适配器,可用于取样或内置传感器以实现其他功能。 带适配器的API帧结构与我们所涵盖的相同,但是将采样模拟值转换为有用测量的公式是不同的。 由于所有这些适配器都使用ZigBee XBees,因此公式中的VREF为1200(1.2V)。
LTH传感器
光:ADC1
温度:ADC2
湿度:ADC3
公式:
光:Lux =(ADC1 / 1023)* 1200
温度:Temp_C =((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
公式:
光:Lux =(ADC1 / 1023)* 1200
温度:Temp_C =((ADC2 / 1023)* 1200) - 500)/ 10
例:如果我们收到具有以下值的样本:ADC1 = 0x002E,ADC2 = 0x02A1,结果将为:
光= 53.9063勒克斯
温度= 24.8672摄氏度
智能插头
光:ADC1
温度:ADC2
电流:ADC3
公式:
光:Lux =(ADC1 / 1023)* 1200
温度:Temp_C =((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