本文介绍继电器控制器(开关控制器)原理与设计。
继电器控制器也称开关控制器(或bang-bang控制器),是一种简单的非线性控制器。它的输出只有开与关。一般家用热水器,空调,电冰箱的温度控制用的就是继电器控制器。
1.原理
继电器控制器原理非常简单,以空调温度控制为例,当环境温度高于设定温度时,打开压缩机制冷,当环境温度低于设定温度时,关闭压缩机。当然,实际的控制器不会这样设计,因为这会导致压缩机频繁的开关,长时间会损坏压缩机。
在继电器控制器里,可以用滞回来调整控制动作。以空调温度控制为例,加入滞回和不加滞回控制效果如下图所示。
加入滞回,空调温度稍微高于设定值才会开启压缩机,温度略低于设定值才会关闭压缩机,这样压缩机就不会持续,频繁的开启和关闭。如果没有滞回作用,控制器会努力把温度控制在设定值上,这样就会频繁的切换压缩机,从而影响压缩机使用寿命。
空调温度控制器控制流程图,如下图所示。
继电器控制器控制方式虽然简单,但它却是一个稳定的控制器(对于闭环控制器稳定性尤为重要)。其控制效果主要由控制器循环周期(采样时间)和滞回值决定。
采样时间足够短才能避免系统过多的超调或欠调,采样时间一定下,滞回值对控制输出(控制精度)起决定作用,下图显示了采样时间和滞回值如何影响系统的控制。
2.设计
继电器控制器设计比较简单,参考C代码如下:
typedef struct _BANG_BANG_CONTROLLER
{
uint32_t SetPoint;
uint32_t Threshold;
}BANG_BANG_CONTROLLER;
static BANG_BANG_CONTROLLER BangBangController;
static void InitBangBangController(BANG_BANG_CONTROLLER *pBangBangController)
{
pBangBangController->SetPoint = 25;
pBangBangController->Threshold = 1;
}
static void BangBangController(BANG_BANG_CONTROLLER *pBangBangController, uint32_t curValue)
{
if (curValue > pBangBangController->SetPoint + pBangBangController->Threshold)
{
On();
}
else if (curValue < pBangBangController->SetPoint - pBangBangController->Threshold)
{
Off();
}
}
int main(void)
{
uint32_t curValue = 0;
InitBangBangController();
while (1)
{
curValue = GetCurValue();
BangBangController(&BangBangController, curValue);
Sleep(60000); //1min
}
return 0;
}
总结,本文介绍了继电器控制器(开关控制器)原理与设计。