使用Maltab等工具设计得到的控制器或者滤波器通常是s域传递函数,但是单片机C语言 无法实现s域传递函数。因此需要进行z变换,转换成C语言可实现的离散域传递函数。
定义符号
syms k w2 w1 z Ts双线性变换
s=2/Ts*(z-1)/(z+1);定义s域传递函数
s_tf=k*(s+w2)/(s*(s+w1));转换形式z_tf=collect(s_tf,z) z_tf =
((k*w2*Ts^2 + 2*k*Ts)*z^2 + (2*Ts^2*k*w2)*z + k*w2*Ts^2 - 2*k*Ts)/((2*Ts*w1 + 4)*z^2 - 8*z - 2*Ts*w1 + 4)
替换Ts一般采样频率Ts会在设计好后会固定,因此可以进一步简化, 假定 Ts=0.01;
z_tf_Ts=subs(z_tf,'Ts',0.01') z_tf_Ts =
-((k/50 + (k*w2)/10000)*z^2 + (k*w2*z)/5000 - k/50 + (k*w2)/10000)/((- w1/50 - 4)*z^2 + 8*z + w1/50 - 4)
替换更多参数如果Ts,w1,w2均不需要调整,只有k值需要调整,则可以替换更多, 假定 Ts=0.01,w1=0.01,w2=0.2