RP Store Tìm linh kiện theo mã, gửi BOM nhận báo giá Gửi BOM

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

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • truongqt
    Thành viên chính thức
    • Sep 2007
    • 71

    #1

    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, 20:29.
    |
  • klong19
    Thành viên tích cực
    • Oct 2012
    • 175

    #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

    • truongqt
      Thành viên chính thức
      • Sep 2007
      • 71

      #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

      • truongqt
        Thành viên chính thức
        • Sep 2007
        • 71

        #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).
        |

        Comment

        • klong19
          Thành viên tích cực
          • Oct 2012
          • 175

          #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

          • truongqt
            Thành viên chính thức
            • Sep 2007
            • 71

            #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

            • klong19
              Thành viên tích cực
              • Oct 2012
              • 175

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

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

              Comment

              • truongqt
                Thành viên chính thức
                • Sep 2007
                • 71

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

                Comment

                • klong19
                  Thành viên tích cực
                  • Oct 2012
                  • 175

                  #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

                  • voicoi365
                    Thành viên tích cực
                    • Aug 2009
                    • 307

                    #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

                    • klong19
                      Thành viên tích cực
                      • Oct 2012
                      • 175

                      #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...