爲什麼寫該博文?
我在讀一段代碼時,對死區特性函數產生了好奇,因此寫下該博文,僅代表個人理解。
死區代碼
// 死區代碼 c++
double Dead(double input, double deadzone)
{
if (input>deadzone)
return input - deadzone;
else if (input<-deadzone)
return input + deadzone;
else
return 0;
}
死區解釋
百度百科
死區(deadband)有時也稱爲中性區(neutral zone)或不作用區,是指控制系統的傳遞函數中,對應輸出爲零的輸入信號範圍。像伺服驅動器中就會有死區來避免因爲反覆的致能-不致能循環而造成的振盪(在比例控制系統中稱爲hunting)。在機械系統中也有類似死區的概念,例如齒輪組中的背隙。
舉個栗子:
穩壓器
在一些變電站中有穩壓器維持電壓在一定的範圍內,規格中就會有一個穩壓器不會更動電壓的電壓範圍,例如112V至118V(死區爲6V)或是215至225V(死區爲10V)。
背隙
齒輪中的背隙就是一種死區。當齒輪咬合恰好在背隙時,不論輸入軸正轉或是反轉,輸出軸都不會動作。等咬合不在背隙時,輸出軸纔會隨着輸入軸而動作。例如輸入軸先順時針旋轉,再逆時針旋轉,在順時針旋轉切換爲逆時針時,輸出軸會短暫一小段時間不動作,之後纔會動作,這就是背隙的效果。像導螺桿都會有背隙,因此會有死區,在位置控制(特別是CNC系統)中需考慮其影響。若機構中沒有背隙消除裝置,控制器可以在更改方向時,在位置上自動加上背隙的量,以補償背隙的影響。
PWM中的死區時間
死區時間是PWM輸出時,爲了使H橋或半H橋的上下管不會因爲開關速度問題發生同時導通而設置的一個保護時段。通常也指pwm響應時間。
matlab驗算
// 死區代碼 ,matlab
x = 0:0.01:20;
y = sin(x);
plot(x,y);
hold on;
for i = 1:2000
if y(i)>0.5
y(i)= y(i)-0.2;
elseif y(i)<-0.5
y(i)=y(i)+0.2;
else
y(i) = 0;
end
end
plot(x,y);
爲了更方便的理解,使用matlab進行驗算。
輸入一個正弦信號,限幅值爲0.2,則plot結果如下:
結論:可以看出,輸入信號進行了兩部分處理,一部分是限幅值,另一部分是死區特性,對應輸出爲零的輸入信號範圍(不會因爲信號切換問題發生 同時導通 而設置的一個保護時段)
PS:若將限幅值0.2改爲0,則仿真結果如圖所示:
可以看出處理後的數據只有死區特性。