开始学习
简单阈值控制算法
概述
在很多要求不高的控制系统中,往往只需要将控制对象的某种物理参数控制在一个预定的范围之内,不需要很精确地控制,即使稍微超出预定范围,也不会引起严重后果。例如空调对室内温度的控制、供水水箱的水位控制等。
在这一类系统中,物理参数控制范围的边界值(即阈值,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);
}