使用传感器监测土壤的pH值和湿度

投稿人:DigiKey 北美编辑

不论是对大规模农业还是简单的家庭花园,保持合适的土壤湿度和 pH 值都是确保植物健康的基本要求。但要测量这些土壤特征,开发人员需要设计具有高成本效益的精密模拟信号链,以便将原始数据转换为特定土壤测量应用所需的有用信息。

实现这些精度目标的方法之一是将参考设计与适度灵活的软件配合使用。Analog Devices 的 EVAL-CN0398-ARDZ 板和软件包便是此类解决方案的一个优秀实例。

本文将探讨与土壤湿度和 pH 值监测相关的应用和要求,然后介绍 Analog Devices CN0398 开发板及参考设计。本文将说明 CN0398 设计中所用的主要元器件如何满足关键设计要求,并详细探讨它们在整体应用中的作用。最后,本文将会展示开发人员如何使用 CN0398 开发板和相关的软件包,快速评估和定制土壤监测应用。

精确土壤测量的需求

保持正确的土壤水含量和 pH 值对于任何生产规模的种植者而言都是最基本的要求。土壤缺水会直接导致所有植物的光合作用减少,以及大豆等重要豆科作物的固氮作用等其他生物过程下降。

类似地,土壤施肥或自然现象的变化也会对土壤的 pH 值产生重大影响,从而导致至关重要的微生物和土壤养分减少。对于一些作物,早期生长阶段中的土壤 pH 值保持不当会导致生长速度和最终产量下降。

没有合适的土壤监测系统,土壤湿度和 pH 值可能转变为对植物不利的值,最终导致植物健康状况恶化。Analog Devices 的 EVAL-CN0398-ARDZ 板和软件包共同提供了一个完整的土壤监测设计,设计人员可直接采用或修改该设计,以满足其独特的需求。

Analog Device 的 CN0398 开发板和参考设计专门设计成与土壤测量应用中的外部湿度、pH 值和温度传感器配合使用。它的板载电路包含一个产生湿度和 pH 值输出数据所需的完整多传感器设计,而且产生的数据可通过其串行接口进行访问。该设计虽然功能广泛,但最大耗电量仅为 1.95 毫安 (mA),而且具有多种省电功能,包括使用脉宽调制 (PWM) 为外部传感器供电。

开发人员可使用 CN0398 来快速启动定制硬件设计,或将该板与 Analog Devices 的 EVAL-ADICUP360 Arduino 兼容型基板配合使用。CN0398 采用 Arduino 盾板设计,可直接插入基板,从而提供一个快速应用开发平台。

为加快软件开发速度,工程师可利用 Analog Device 的 ADuCM360_demo_cn0398 开源软件包。设计该软件包的目的就是与 CN0398 传感器板、ADICUP360 基板和 Analog Device CrossCore Embedded Studio 配合使用。除了基本驱动程序和系统支持实用程序外,该软件包还包括完整的 C++ 源代码文件和头文件,其中包括一套完整的土壤测量软件应用程序。

Analog Devices 开发板组与软件包的组合为设计人员提供了可立即用于土壤测量应用的完整硬件设计和软件应用程序。同样重要的是,CN0398 硬件参考设计和示例软件还提供了快速开发定制土壤测量系统的蓝图,以满足这类应用的独特需求。

传感器信号处理

CN0398 的硬件设计包括三个单独的分支电路,分别用于外部湿度、pH 值和温度传感器。每个分支电路将会提供与每种传感器连接所需的全部电路。这样,开发人员只需将每个传感器插入 CN0398 开发板上的对应连接器并为其供电,便可开始传感器操作。此功能基于 Analog Devices AD7124-8 而建立,结合了一个使用广泛的信号调节前端与一个 24 位三角积分 (Σ-Δ) 模数转换器 (ADC)(图 1)。

Analog Devices AD7124-8 ADC 原理图

图 1:Analog Devices AD7124-8 利用其集成的信号链和 ADC,简化了土壤测量所需的多传感器系统设计。(图片来源:Analog Devices)

AD7124-8 的信号多路复用器可以通过其集成的可编程信号链,将八路差分输入或 15 路单端输入导至片载 Σ-Δ ADC 和数字滤波器进行转换和调节。开发人员使用 AD7124-8 的串行接口将该器件连接到用于器件控制和数据转换的 MCU 主机。

由于该器件具有广泛的功能,因此,除传感器电路和稳定的电压源之外,设计人员只需借助极少量的外部元器件便可满足广泛的设计要求。对于 CN0398 参考设计,Analog Devices 将其 ADR3433 电压基准用作模拟电源 (AVDD) 和电压基准 (REFIN1)(图 2)。如下所述,三个传感器电路的设计分别只需要少数几个外元器件。

Analog Devices AD7124-8 原理图

图 2:利用 Analog Devices AD7124-8,除特定的传感器输入电路和 Analog Devices ADR3433 等精密电压基准之外,开发人员只需少数几个外部元器件便可实现传感器设计。(图片来源:Analog Devices)

湿度测量

土壤湿度系统通常利用水 (80) 与空气 (1) 的介电常数差别来确定水含量。对于这些系统,开发人员使用激励电压驱动诸如 TE Connectivity Measurement Specialties HPP809A033 之类简单的 3 线式传感器,以产生与土壤水含量成正比的输出电压。

在 CN0398 设计中,土壤湿度前端使用一个 Analog Devices ADP7118-2.5 低压差 (LDO) 线性稳压器为传感器提供稳定的激励电压 (Vsensor)(图 3)。为了给 LDO 稳压器供电,开发人员可以从 ADICUP360 基板或其定制设计获取电力。

Analog Devices CN0398 设计原理图

图 3:Analog Devices CN0398 设计使用该公司的 ADP7118-2.5 低压差 (LDO) 稳压器为电容式湿敏传感器提供稳定的 Vsensor 电压源。(图片来源:Analog Devices)

尽管 ADP7118 可以提供连续的传感器电压电平,但出于功耗因素考量和一些湿敏传感器的特定要求,必须使用脉冲式电源来驱动传感器。为满足这些要求,开发人员可通过使用 MCU PWM 输出来驱动 LDO 的使能 (EN) 端口,从而为传感器供应电压脉冲。

AD7124-8 可利用其集成的信号调节电路和 ADC,对湿敏传感器的电压输出进行可靠的采样和转换。不过对于土壤测量应用而言,转换的传感器数据与土壤湿度之间的关系可能很复杂。

在评估土壤湿度时,土壤健康专家往往按照土壤的容积含水量 (VWC),即水容积与总土壤容积的比率,来比较土壤的湿度水平。湿敏传感器制造商通常会提供用于将其传感器输出转换为 VWC 的方程。但是,土壤条件或应用本身的性质可能仍要求使用更适合其自身独特情景的转换方程。

Analog Devices 在其示例软件包中演示了两种方法的使用。通过在 CN0398.h 头文件中实现 USE_MANUFACTURER_MOISTURE_EQ 定义,开发人员可以选择使用制造商建议的逐条转换公式或软件中提供的标准转换方程。其中,如果定义了 USE_MANUFACTURER_MOISTURE_EQ,则示例例程 read_moisture() 将根据传感器的输出电压范围产生湿度输出(列表 1)。如果在 CN0398.h 头文件中将该定义注释掉,则该例程可使用提供的数学表达式将电压转换为湿度。

float CN0398::read_moisture()

{

    float moisture = 0;

#ifdef MOISTURE_SENSOR_PRESENT

 

    DioSet(ADP7118_PORT, ADP7118_PIN);

    set_digital_output(P3, true);

 

    timer.sleep(SENSOR_SETTLING_TIME);

    int32_t data = adcValue[MOISTURE_CHANNEL]= read_channel(MOISTURE_CHANNEL);

 

    DioClr(ADP7118_PORT, ADP7118_PIN);

 

    float volt = voltage[MOISTURE_CHANNEL - 1] = data_to_voltage_bipolar(data, 1, 3.3);

 

#ifdef USE_MANUFACTURER_MOISTURE_EQ

    if(volt <= 1.1) {

        moisture = 10 * volt - 1;

    } else if(volt > 1.1 && volt <= 1.3) {

        moisture = 25 * volt - 17.5;

    } else if(volt > 1.3 && volt <= 1.82) {

        moisture = 48.08 * volt - 47.5;

    } else if(volt > 1.82) {

        moisture = 26.32 * volt - 7.89;

    }

#else

    moisture = -1.18467 + 21.5371 * volt - 110.996 * (pow(volt, 2)) + 397.025 * (pow(volt, 3)) - 666.986 * (pow(volt, 4)) + 569.236 * (pow(volt, 5)) - 246.005 * (pow(volt, 6)) + 49.4867 * (pow(volt, 7)) - 3.37077 * (pow(volt, 8));

#endif

    if(moisture > 100) moisture = 100;

    if(moisture < 0 ) moisture = 0;

#endif

 

    set_digital_output(P3, false);

 

    return moisture;

}

列表 1:Analog Devices CN0398 软件包提供了一个湿度例程示例,其中展示了开发人员如何使用制造商的转换公式或方程,将湿敏传感器电压转换为有用的湿度数据。(代码来源:Analog Devices)

pH 值测量

典型 pH 值传感器(如 SparkFun Electronics SEN-10972 pH 值套件中的传感器)所采用的等效电路均具有一个高阻抗电压源。即使将 ADC 与集成的信号调节前端配合使用,有经验的开发人员在这类情形下往往也会在传感器输出与 ADC 输入之间添加一个缓冲器。

相应地,CN0398 设计中的 pH 值传感器电路包含了一个 Analog Devices ADA4661-2 运算放大器(图 4)。ADA4661-2 是一款采用单电源工作的低功耗精密运算放大器,在其整个工作电压范围内具有较低的补偿电压,非常适合传感器电路等低功耗应用。

Analog Devices ADA4661-2 运算放大器原理图

图 4:Analog Devices CN0398 设计中的 Analog Devices ADA4661-2 运算放大器在典型的高阻抗 pH 值传感器与 Analog Devices AD7124-8 模拟输入之间提供了一个缓冲器。(图片来源:Analog Devices)

尽管该设计依赖单电源电压,但 pH 值传感器通常会产生双极电压输出。不过在这种情况下,AD7124-8 提供了一种简单的方法,将传感器偏置到高于接地的合适电平。AD7124-8 集成了一个内置的偏压发生器,用于将通道的共模电压设为 AVDD/2。如本例所示,设计人员可使用一个 AD7124-8 输出引脚将此偏压传递给 pH 值传感器的低压侧(图 4 中的 VBIAS)。开发人员可以在软件中轻松地将该偏置输入恢复为双极数字结果。

ADuCM360_demo_cn0398 开源软件包中包含了一个 read_ph() 示例例程,该例程描述了将 pH 值传感器输出电压转换为 pH 值的过程。同土壤湿度例程一样,该 pH 值示例例程也展示了使用两种不同方法来产生 pH 值(列表 2)。

float CN0398::read_ph(float temperature)

{

    float ph = 0;

 

#ifdef PH_SENSOR_PRESENT

    int32_t data;

 

    set_digital_output(P2, true);

 

    adcValue[PH_CHANNEL] = data = read_channel(PH_CHANNEL);

 

    float volt = voltage[PH_CHANNEL - 1] = data_to_voltage_bipolar(data, 1, 3.3);

 

    if(use_nernst)

    {

          ph  = PH_ISO -((volt - ZERO_POINT_TOLERANCE) / ((2.303 * AVOGADRO * (temperature + KELVIN_OFFSET)) / FARADAY_CONSTANT) );

    }

    else

    {

       float m =  (calibration_ph[1][0] - calibration_ph[0][0]) / (calibration_ph[1][1] - calibration_ph[0][1]);

       ph = m * (volt - calibration_ph[1][1] + offset_voltage) + calibration_ph[1][0];

    }

 

    set_digital_output(P2, false);

 

#endif

    return ph;

 

}

列表 2:Analog Device 用于读取 pH 值传感器值的示例例程,描述了如何使用标准能斯特方程或内置的校准值,将 pH 值传感器的电压输出转换为 pH 值。(代码来源:Analog Devices)

通过在示例包中将变量 use_nernst 设为 true,开发人员可以使用标准能斯特方程产生 pH 值。如果设为 false,则该变量会导致例程使用在两点校准程序期间创建的值,而该校准程序通常使用类似 SparkFun SEN-10972 pH 值套件中的基准 pH 缓冲溶液来执行。该示例软件例程附带设定好的默认校准值,针对不同的 pH 缓冲溶液以及 0°C 到 95°C 范围内经过温度校正的 pH 值使用 NIST 查询表。开发人员可以将默认值替换为自己的定制校准数据,或轻松修改代码以同时支持默认值和定制值。

温度测量

如以上列表 2 中所示,pH 值在能斯特方程中明确依赖于温度,或在定制校准值中以隐含方式依赖于温度。此外,温度还会影响传感器的灵敏度和信号链。尽管 AD7124-8 的集成温度传感器(参见图 1)可以解决其中一些问题,但可靠的土壤测量仍依赖于精确的温度读数。相应地,CN0398 温度传感器通道旨在确保从 Adafruit Industries 3290 等外部 3 线式 PT100 电阻温度检测器 (RTD) 获取精确读数。

与任何阻性传感器一样,RTD 需要激励电流,以允许测量温度相关的电压变化。一般而言,使用阻性传感器的开发人员需要使用外部驱动器、稳压器和电流传感器来增强其传感器设计,从而将激励电流保持在精确的电平。但对于 AD7124-8,开发人员只需添加支持 3 线式配置所需的合适无源网络便可(图 5)。

Analog Devices CN0398 设计原理图

图 5:为驱动 3 线式电阻温度检测器 (RTD),Analog Devices CN0398 使用了 Analog Devices AD7124-8 中集成的可编程恒流电源。(图片来源:Analog Devices)

AD7124-8 中集成的一对恒流发生器提供 50 到 1000 毫安 (µA) 范围内各种固定电平的激励,包括在 CN0398 设计中所用的 500 μA 电平。开发人员分别通过设定器件的 IO_CONTROL 配置寄存器中的 IOUTx 和 IOUTx_CH 位,来设置电流电平和输出引脚。作为其初始化例程的一部分,CN0398 软件包将 ADC 通道 AIN11 和 AIN12 设为针对两个 500 μA 激励电流 IOUT1 和 IOUT2 的输出引脚。

尽管这些电流发生器对许多应用而言足够精确,但开发人员可通过使用辐射计式测量技术,轻松消除电流变化带来的影响。图 5 所示的 CN0398 温度硬件传感器电路使用的便是这种方法。其中,同一 IOUT1 电流流经 RTD 和一个精密基准电阻器 RREF,从而产生一次辐射计式测量。与此同时,IOUT2 在 RTD 的 RTD SENSE 引线电阻上产生一个电压降,从而抵消 RTD+ 引线电阻上的电压降。

与湿度和 pH 值传感器一样,电阻值到温度的转换也需要合适的转换函数。对于典型的 RTD,温度与电阻之间的关系可以可靠地表示为数学形式。但即便如此,针对高于和低于 0°C 的温度,也需要使用两个不同的数学表达式。ADuCM360_demo_cn0398 开源软件包同时支持两种方法以及简单的线性转换(列表 3)。

float CN0398::read_rtd()

{

    float temperature = 0;

 

    int32_t data;

 

    adcValue[RTD_CHANNEL] = data = read_channel(RTD_CHANNEL);

 

    float resistance = ((static_cast<float>(data) - _2_23) * RREF) / (TEMP_GAIN * _2_23);

 

#ifdef USE_LINEAR_TEMP_EQ

    temperature = PT100_RESISTANCE_TO_TEMP(resistance);

#else

 

#define A (3.9083*pow(10,-3))

#define B (-5.775*pow(10,-7))

    if(resistance < R0)

        temperature = -242.02 + 2.228 * resistance + (2.5859 * pow(10, -3)) * pow(resistance, 2) - (48260.0 * pow(10, -6)) * pow(resistance, 3) - (2.8183 * pow(10, -3)) * pow(resistance, 4) + (1.5243 * pow(10, -10)) * pow(resistance, 5);

    else

        temperature = ((-A + sqrt(double(pow(A, 2) - 4 * B * (1 - resistance / R0))) ) / (2 * B));

#endif

    return temperature;

 

}

列表 3:为了将电阻值转换为温度,Analog Devices 示例例程展示了根据静态定义 (USE_LINEAR_TEMP_EQ) 或动态值(电阻 < R0)选择相应方法的基本设计模式。(代码来源:Analog Devices)

如列表 3 中所示,示例例程 read_rtd() 允许开发人员选择 CN0398.cpp 模块中定义的简单线性转换宏 PT100_RESISTANCE_TO_TEMP。或者,开发人员也可以使用在 read_rtd() 示例例程中提供的更复杂的数学表达式。在此例中,用于选择相应表达式的 0°C 拐点隐含在 0°C 下的 RTD 电阻 R0 中。

总结

要构建土壤测量系统,工程师面临一系列软件、硬件挑战。硬件设计必须满足传感器的接口要求,而软件必须提供不同的方法将原始数据转换为有用信息。

Analog Devices CN0398 开发板和 ADuCM360_demo_cn0398 开源软件包可满足土壤测量系统设计这两方面的要求。将 Analog Device 的 CN0398 开发板和软件与 Arduino 兼容型 ADICUP360 基板配合使用,可以提供一个完整的土壤测量解决方案。

开发人员可以使用这种交钥匙型解决方案来构建土壤测量应用,或扩展相关的参考设计和示例软件以构建定制解决方案。

免责声明:各个作者和/或论坛参与者在本网站发表的观点、看法和意见不代表 DigiKey 的观点、看法和意见,也不代表 DigiKey 官方政策。

关于此出版商

DigiKey 北美编辑