简单阈值控制算法

概述

在很多要求不高的控制系统中,往往只需要将控制对象的某种物理参数控制在一个预定的范围之内,不需要很精确地控制,即使稍微超出预定范围,也不会引起严重后果。例如空调对室内温度的控制、供水水箱的水位控制等。

在这一类系统中,物理参数控制范围的边界值(即阈值,Threshold)就是它的技术指标。当控制系统检测到控制对象的物理参数超出阈值时,便输出控制信号,控制执行机构,将物理参数调整到预定的范围之内。这类系统执行机构的控制方式很简单,只有“接通”和“断开”两种,控制系统就像一只自动扳动的“乒乓开关”,因此这种控制方式俗称「乒乓控制」(英文 bang-bang control)或「起停式控制」(英文 on-off control)。

控制原理

乒乓控制,又名滞回控制器(Hysteresis controller),在控制领域,乒乓控制器(开关控制器),也被称为滞回控制器,这是一种在两种状态之间转换的控制器,这种控制器可以通过任何存在滞回的元素实现。

乒乓控制经常应用于二元输入的情况下,例如控制一个要么开要么关的炉子。最常见的家里用的恒温控制器就是乒乓控制器。

乒乓控制的信号可以是离散状态的阶跃响应函数,由于控制信号不是连续的,使用乒乓控制器的系统一般是变结构系统,乒乓控制器也就成了变结构控制器。

适用范围

这种简单阈值控制的优点是结构简单方便,缺点是控制动作不连续,如果设计不当,容易造成系统震荡(所以称为 bang-bang 控制)。

适用于只有两种状态输入的设备。

代码

读取模拟输入值,并判断迟滞区间

//Parameters
const int aihPin  = A0;
const int aihMargin  = 2;
const int aihThresh  = 306;

//Variables
int aihVal  = 0;
bool aihHystOn  = 0;

void setup() {
  //Init Serial USB
  Serial.begin(9600);
  Serial.println(F("Initialize System"));
  //Init AnalogHyst
  pinMode(aihPin, INPUT);
}

void loop() {
  readAnalogHyst();
  hystThresh();
  delay(200);
}

void readAnalogHyst( ) { /* function readAnalogHyst */
  ////Test routine for AnalogHyst
  aihVal = analogRead(aihPin);
  Serial.print(F("aih val ")); Serial.println(aihVal);
}

void hystThresh( ) { /* function hystThresh */
  ////Perform hysteresis on sensor readings

  if (aihVal >= (aihThresh + aihMargin)) {
    aihHystOn = true;
  }
  if (aihVal <= (aihThresh - aihMargin)) {
    aihHystOn = false;
  }

  Serial.print(F("aih hist : ")); Serial.println(aihHystOn);
}

Leave a Reply