超前滞后补偿器的C++实现

超前滞后补偿器的C++实现

超前滞后补偿器的传递函数

  • 超前-滞后补偿器的传递函数形式如下
    G ( s ) = T 1 s + 1 T 2 s + 1 G(s) = \frac{T_1s + 1}{T_2s + 1} G(s)=T2s+1T1s+1
    T 1 T_1 T1是超前时间常数
    T 2 T_2 T2是滞后时间常数

  • 超前-滞后补偿器传递函数的离散化表达
    T 1 z + ( T s − T 1 ) T 2 z + ( T s − T 2 ) \frac{T_1z + (T_s - T_1)}{T_2z + (T_s - T_2)} T2z+(TsT2)T1z+(TsT1)
    T 1 T_1 T1是超前时间常数
    T 2 T_2 T2是滞后时间常数
    T s T_s Ts是采样时间

C++实现

  • 为了便于C++程序编写, 应将离散化后的传递函数转换成离散的状态空间表达式, 用前向欧拉法, 转换后的状态空间表达式如下:
    x ( n + 1 ) = ( 1 − T s T 2 ) x ( n ) + ( T s T 2 ) u ( n ) x(n+1) = (1 - \frac{T_s}{T_2})x(n) + (\frac{T_s}{T_2})u(n) x(n+1)=(1T2Ts)x(n)+(T2Ts)u(n)
    y ( n ) = ( 1 − T 1 T 2 ) x ( n ) + ( T 1 T 2 ) u ( n ) y(n) = (1 - \frac{T_1}{T_2})x(n) + (\frac{T_1}{T_2})u(n) y(n)=(1T2T1)x(n)+(T2T1)u(n)
    其中:
    u u u是补偿器输入(即系统输出与参考值的偏差)
    x x x是补偿器状态
    y y y是补偿器输出(即系统的输入)
    n n n是步数

  • 具体C++代码实现大致如下

    double x //补偿器状态量    
    double y //补偿器输出量    
    double T1 // 超前时间常数    
    double T2 // 滞后时间常数    
    double delta_t // 采样时间    
      
    x = (1 - delta_t / T2) * x + (delta_t / T2) * u; //u的值是其他环节给进来的    
    y = (1 - T1 / T2) * x + (T1 / T2) * u;
    

你可能感兴趣的:(超前滞后补偿器的C++实现)