已知一个系统的传递函数,如何进行硬件化呢?
只需要将传递函数离散化,得到差分方程,就可以根据差分方程进行硬件设计。
通过例子说明:
得到差分方程后,其中y(k)/y(k-1)/y(k-2)/u(k-1)/u(k-2)等代表不同周期系统输入输出数据,根据公式,进行硬件设计计算,即可得到系统输出。
常用的离散化方法有:
前向差分法;
后向差分法:
双线性变换法;
零阶保持器法;
一阶保持器法;
脉冲响应不变法;
前三种方法比较简单,传递函数中,直接用 z和s的关系进行替换就行:
其中Ts为离散化采样时间。
也可以通过matlab进行转化,下例采用零阶保持法(zoh):
%%-------传递函数离散化------
num=[39610(-9),12*10(-6)];
den=[3310(-10),10(-13),0];
sys=tf(num,den);
step(sys);
%bode(sys);
ts=0.000001; %1M采样率,对应硬件设计模块运行频率
dsys=c2d(sys,ts,‘zoh’); %zoh method
[num1,den1]=tfdata(dsys,‘v’);
%dbode(num1,den1,ts,‘r’);
%%-------离散化分子分母转换为C语言程序使用------
%%-------+Y/U=0.00012z-0.00012/z^2-2z+1–
%%-------分子分母除以z ^ 2=>0.00012z ^ (-1)-0.00012z ^ (-2)/1-2z ^ (-1)+z^(-2)–
%%-------y(k)=2y(k-1)-y(k-2)+0.00012u(k-1)-0.00012*u(k-2);
u_1=0.0;u_2=0.0;
y_1=0.0;y_2=0.0;
%%-----阶跃响应验证
for k=1:1:2000
time(k) = k*ts;
yd(k) = 1;
u(k) = 1;
y(k)=-den1(2)*y_1-den1(3)*y_2+num1(2)*u_1+num1(3)*u_2;
u_2=u_1;u_1=u(k);
y_2=y_1;y_1=y(k);
end
figure(2);
%bode(dsys);
plot(time,yd,‘r’,time,y,‘k:’,‘linewidth’,2);
xlabel(‘times(2)’);ylabel(‘yd,y’);
legend(‘yd’,‘y’);