Thông báo

Collapse
No announcement yet.

Lập trình vi điều khiển thực hiện 1 hàm truyền đạt

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Lập trình vi điều khiển thực hiện 1 hàm truyền đạt

    Lập trình cho vi điều khiển thực hiện 1 hàm truyền đạt thì các bước trình tự như thế nào.
    (Mình đang định dùng vi điều khiển PIC, lập trình = CCS.)

    1. Ví dụ: khi có hàm truyền đạt bộ điều khiển PID:
    R(s)=2+(0.2/s)+(20*s) hoăc tương đương với R(s)= (100*s^2 + 10*s + 1)/(5*s)
    thì khi thực hiện trong vi điều khiển ta có kết quả:
    Err_now = V_set - V_real ;
    Err_sum = Err_now + Err_last ;
    Err_del = Err_now - Err_last ;
    Err_last = Err_now ;
    Duty = Duty + Kp*Err_now + Ki*Err_sum + Kd*Err_del ;

    //vui lòng xem thêm cái này tại:
    http://www.dientuvietnam.net/forums/...inh-voi-27382/


    Vậy các bước thực hiện để có được nó là như thế nào?

    2. Vậy giả sử ta có hàm truyền thế này thì các bước thực hiện thế nào vậy:

    _________ 5000 s^2 + 5 s + 1
    G(s)= ------------------------------------------
    ______ 5000 s^3 + 5000 s^2 + 5 s + 1


    ___________ 0.6324 z^2 - 1.264 z + 0.6318
    hay G(z)= --------------------------------------------- với Tlm=1s, giữ mẫu bậc 0 (ZOH) (cái này gõ lệnh trong matlab : Gz=c2d(Gs,1,'zoh') )
    _________ z^3 - 2.367 z^2 + 1.735 z - 0.3679
    Last edited by truongqt; 21-11-2012, 21:29.
    |

  • #2
    Chào bạn. Mình có thể giải thích cho bạn. Có phải là bạn muốn hỏi tìm ra cái phương trình sai phân từ hàm truyền 1 bộ đk như thế nào đúng ko?

    Bạn lấy cái vd trâu quá, khó diễn đạt, mình lấy cái vd nhỏ hơn cho dễ nhé. Lấy 1 bộ tích phân thôi
    H(s) = 1/s

    biến đổi z (theo hàm c2d của Matlab hoặc tra bảng)

    U/E = H(z) = z/(z-1)

    nhân lên:
    U*(z-1) = E*z

    ta hiểu : *z tức là lấy sớm 1 mẫu, *z^-1 là trễ đi 1 mẫu
    cho nên
    u(n+1) - u(n) = e(n+1) => u(n+1) = u(n) + e(n+1) hay u(n) = u(n-1) + e(n)

    Nhìn công thức cuối bạn đã hiểu tại sao gọi nó là bộ tích phân : tín hiệu đk hiện tại = trước đó + sai số hiện tại. Tức là sai số cứ bị cộng dồn.

    Các hàm phức tạp hơn cũng được làm tương tự.
    Hy vọng có ích cho bạn

    Comment


    • #3
      Vì khi tính toán và mô phỏng = matlab xong thì mới ra được phương trình trên, mà biến đổi sang miền thời gian thì quá khó (trình độ có hạn). Ko biết có cách nào với phương trình trên ko, chứ ko thì làm sao để lập trình cho vi điều khiển đây.
      |

      Comment


      • #4
        Mình thấy cái này có ích đây, để lại cho những người đi sau: cuốn Advanced Control Engineering (có bác Haiau nêu trong nhiều diễn đàn).
        http://www.google.com.vn/url?sa=t&rc...iW--hVv9oRG4nQ
        |

        Comment


        • #5
          Ok,
          Bây giờ bạn post lại cái pt z của bạn cho rõ ràng mình sẽ giúp. Vì mình đọc ko ra biểu thức bạn viết nên mới lấy cái bộ tích phân làm vd

          Comment


          • #6
            Phương trinh đây bạn à:
            Click image for larger version

Name:	Untitled.jpg
Views:	1
Size:	9.0 KB
ID:	1370694
            Thanks bạn nha
            |

            Comment


            • #7
              Đây nè bạn
              Click image for larger version

Name:	pt sai phan.PNG
Views:	1
Size:	22.8 KB
ID:	1370695

              Comment


              • #8
                Đã ấn cảm ơn nhưng vẫn muốn nói Thanks bạn rất nhiều.
                |

                Comment


                • #9
                  Nguyên văn bởi truongqt Xem bài viết
                  Phương trinh đây bạn à:
                  [ATTACH=CONFIG]56239[/ATTACH]
                  Thanks bạn nha
                  Khi nào xong bạn báo kết quả nhé. Mà bạn đã thử simulate bộ đk G(z) này chưa ? Nó có ok trong Simulink ko vậy bạn ?

                  Comment


                  • #10
                    Matlab nó dùng CPU máy tính nhiều khi chạy mất mấy giây mới ra kết quả . còn con VDK chạy xung có 1-2 chục MHZ mà tính hàm truyền thì bao lâu mới ra được? nhất là trong việc xử lý dấu chấm động ( Floating point) thì còn chết nữa. mà muốn điều khiển PID chính xác thì yêu cầu xử lí + thời gian lấy mẫu phải nhanh ( vài chục ms). do vậy người ta dùng giải thuật tính tương đối. Bạn lên google search dòng " digital PID controler" sẽ thấy cách họ làm . tự tìm hiểu nhé.
                    - Bảo trì, sửa chữa máy công nghiệp
                    - Thiết kế, chế tạo board mạch điện tử
                    - Mua bán, sửa chữa thiết bị test: Oscilloscope; Spectrum Analyzer...
                    - Dt: 0985205886 -

                    Comment


                    • #11
                      Nguyên văn bởi voicoi365 Xem bài viết
                      Matlab nó dùng CPU máy tính nhiều khi chạy mất mấy giây mới ra kết quả . còn con VDK chạy xung có 1-2 chục MHZ mà tính hàm truyền thì bao lâu mới ra được? nhất là trong việc xử lý dấu chấm động ( Floating point) thì còn chết nữa. mà muốn điều khiển PID chính xác thì yêu cầu xử lí + thời gian lấy mẫu phải nhanh ( vài chục ms). do vậy người ta dùng giải thuật tính tương đối. Bạn lên google search dòng " digital PID controler" sẽ thấy cách họ làm . tự tìm hiểu nhé.
                      Bạn voicoi ơi, bạn cho 1 cái link nhé, cái key word "digital PID controller" của bạn tổng quát quá, kết quả search ra không đúng vấn đề về PID đơn giản có thể chạy được với khoảng 1 2 chục MHz như bạn nói

                      Cám ơn bạn

                      Comment

                      Về tác giả

                      Collapse

                      truongqt Tìm hiểu thêm về truongqt

                      Bài viết mới nhất

                      Collapse

                      Đang tải...
                      X