Đăng Ký
Kết quả 1 đến 5 của 5

Threaded View

  1. #1
    Little PLC

    Ngày tham gia
    Mar 2011
    Đang ở
    Mọi câu hỏi hãy đưa lên diễn dàn. Tôi không dùng hộp thư riêng.
    Bài viết
    3,151
    Thanks
    257
    1,084 lượt trong 567 bài viết

    Cách viết PID như thế nào là hay?!

    Chào mọi người.

    Hiện nay mình có giải thuật PID từ một số chỗ để viết khối PID như thế nào cho hay thì mình đưa ra một số nhờ mọi người tư vấn giúp:

    Code C chuẩn theo giải thuật PID từ lý thuyết:

    output = Kp * err + (Ki * int * dt) + (Kd * der /dt);

    Kp = Proptional Constant.
    Ki = Integral Constant.
    Kd = Derivative Constant.
    err = Expected Output - Actual Output ie. error;
    int = int from previous loop + err; ( i.e. integral error )
    der = err - err from previous loop; ( i.e. differential error)
    dt = execution time of loop.

    Cái này thì cách viết từ VĐK mình copy lại:

    /*u=kp*(e+Td*diff(e)+Td*int(e))
    y0=analog input 1;
    r0=ref=set point or reference;
    T=sample time;
    qd=diff constant=Kp*Td/T; //Td:diff time
    qi=integral cosntant=Kp*T/Ti; //Ti:Integration time
    Kp=prop gain;*/

    float pid (float r0, float y0)
    {
    e0=r0-y0;
    D=qd*(e0-e1);
    if (((u>umin)|(e>0))&((u<umax)|(e<0))) //antiwindup integral
    I=I+qi*(r0-y0);

    u=Kp*e0+D+I;//pid control signal
    if (u>umax) u=umax; //antiwindup PID
    if (u<umin) u=umin;

    e1=e0; //save old values
    y1=y0;
    }

    PID đơn giản:

    Simple PID

    PID = GainP * actual error + GainI * SUM(previous errors) + GainD * (actual error - last error)

    error = sp(set point) - pv(process value)


    float pid (float sp, float pv)
    {

    err_old = err;
    err = sp - pv;

    // note
    P_err = err;
    I_err += err_old;
    D_err = err - err_old;

    return 0.1*P_err + 0.3*I_err + 0.02*D_err;

    }
    Nói chung là khá nhiều. Nhưng mình cảm thấy mình viết khác chứ nhìn lại vẫn là 1 thứ. ^^. Nên mong các bạn nào thiên về giải thuật tư vấn giúp.
    Hidden Content

    Trần Văn Hiếu
    Email: Hidden Content
    Sđt: (+84)987 - 338 - 334

  2. Bài viết của "tran_hieu0983" đã được cám ơn bởi các thành viên:


Tag của Chủ đề này

Đánh dấu

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •  
Back to Top