Thứ Hai, 24 tháng 2, 2014

Giải thuật PID

I. TỔNG QUAN VỀ PID CONTROLLER
    1. Giới thiệu
        Trong quá khứ, hiện tại cũng như trong tương lai, việc điều khiển một hệ thống sao cho luôn đáp ứng được đúng những giá trị mong muốn của người điều khiển là một trong những vấn đề gặp phải trong điều khiển nói chung và điều khiển công nghiệp, robot ... nói riêng. Do đó, bên cạnh những mô hình điều khiển khác, PID controller ra đời và nổi lên như một giải pháp cho vấn đề chống sai số trong điều khiển bằng cách dùng các mô hình điều khiển lặp và điều chỉnh đáp ứng ngõ ra của hệ thống dựa trên các giá trị hồi tiếp của quá trình.
        Robocon là một trong những lĩnh vực đòi hỏi khả năng điều khiển hệ thống đạt đến độ chính xác cao. Do đó, nhu cầu về việc xây dựng một module điều khiển vận tốc của robot bằng PID ngày càng cần thiết. Để xây dựng một module PID tương đối hoàn chỉnh nhằm phục vụ cho điều khiển robot trong các mùa robocon sau này, chúng tôi, dưới sự chỉ dẫn của các anh các thầy trong câu lạc bộ phần cứng máy tính khoa KH&KTMT, đã xây dựng bộ tài liệu này như một bộ tham khảo nhanh và có thể áp dụng thực tế về PID controller.

    2. PID là gì?
        Bộ điều khiển PID là một cơ chế điều khiển lặp hồi tiếp được sử dụng rộng rãi trong hệ thống điều khiển công nghiệp do dễ áp dụng và dễ sử dụng. Một bộ điều khiển PID cố gắng điều chỉnh giữa giá trị biến đo được và giá trị mong muốn đạt được bằng cách tính toán và xuất ra một "hành động điều chỉnh" nhanh chóng để giữ cho lỗi ở mức nhỏ nhất có thể được.
        Bộ điều khiển PID gồm 3 thống số hay 3 chế độ: Proportional, Integral và Derivative.
       
                     
            Proportional: xác định tương tác với giá trị lỗi hiện tại.
            Integral: xác định tương tác với tổng giá trị lỗi gần đây ( lỗi tích lũy trong " quá khứ").
            Derivative: xác định tương tác với tốc độ thay đổi lỗi.
        Một vài ứng dụng chỉ cần sử dụng một hoặc hai chế độ trong việc điều khiển hệ thống. Điều này đạt được bằng cách gán cho hằng số không muốn sử dụng bằng không. Do đó, PID controller có thể trở thành PD, PI, P, I ...controller.
         Mô hình P, PI, PID được sử dụng thông dụng nhất.

    3. Lý thuyết điều khiển PID
        Mô hình điều khiển PID được cấu thành từ 3 thành phần, gọi tham số thao tác điều chỉnh là MV thay đổi theo thời gian t:
            MV(t) = Pout + Iout + Dout
        Trong đó: Pout, Iout, Dout là các hàm đóng góp vào giá trị ngõ ra sau cùng của MV(t).
        Hàm lỗi tại thời điểm t:
            E(t) = SP - PV
        Trong đó: SP : Setpoint ( giá trị mong muốn), PV: measurable output( giá trị đo được).
       
        a. Proportional ( hàm tỉ lệ)
            Hàm tỉ lệ giúp thay đổi mức điều khiển ( output) tỉ lệ với giá trị lỗi hiện tại.
                Pout = Kp x E(t)
            Kp: hằng số tỉ lệ, tham số dùng để tinh chỉnh.
            Hằng số Kp càng lớn thì sự điều chỉnh càng lớn khi E(t) càng lớn. Ngược lại, Kp càng nhỏ thì sẽ đáp ứng điều chỉnh nhỏ đối với lỗi.
         b. Integral term ( hàm tích phân)
             Hàm tích phân điều chỉnh mức điều khiển tương ứng với mức lỗi được tích lũy theo thời gian
                   
             Ki: hằng số điều chỉnh hàm tích phân.
             Hàm tích phân giúp cho khả năng điều chỉnh nhanh chóng đạt đến mức mong muốn và hạn chế giá trị dư thừa lỗi còn hạn chế ở hàm tỉ lệ.
        c. Derivative term ( hàm đạo hàm )
            Hàm đạo hàm đáp ứng với tốc độ thay đổi của lỗi, hay độ dốc lỗi, theo thời gian
                   

            Kd: hằng số điều chỉnh hàm đạo hàm.
            Hàm đạo hàm giúp nhanh chóng đạt được mức ổn định của giá trị mong muốn ( nếu chọn được Kd phù hợp ). Còn nếu Kd không phù hợp thì giá trị output sẽ giao động quanh giá trị mong muốn.

    4. Phương pháp tinh chỉnh các tham số trong PID
        Trong PID Controller, một trong số những vấn đề gặp phải cần giải quyết là phải chọn được giá trị các tham số ( hằng số Kp, Ki, Kd) cho từng hàm hiệu chỉnh PID sao cho phù hợp nhất có thể để PID Controller đạt được hiệu quả cao nhất. Nếu lựa chọn các tham số không phù hợp thì quá trình điều khiển sẽ không ổn định, và không chính xác như mong muốn.
        Vì vậy, trong thực tế sử dụng đã có một vài phương pháp phục vụ cho quá trình tinh chỉnh này, trong đó, phổ biến phải kể đến là manual tuning, Ziegler-Nichols, Software tools, Cohen-Coon.
        Trong giới hạn về phạm vi áp dụng là robocon, manual tuning ( tinh chỉnh bằng tay) là tương đối dễ dàng tiếp cận nhất so với các phương pháp còn lại.
        Phương pháp được áp dụng tương đối đơn giản như sau:
        - Bước 1: cho Ki = 0, Kd = 0, thay đổi giá trị Kp sao cho đạt được tốc độ phản ứng với lỗi gần như mong muốn.
        - Bước 2: bắt đầu thay đổi Ki, Kd. Bằng nhiều phép thử và kiểm tra tính đáp ứng của hệ thống, chúng ta rút ra một bộ các tham số Kp, Ki, Kd phù hợp gần với mong muốn nhất.
   
    5. Nhu cầu sử dụng PID Controller trong Robocon 
        Bên cạnh lối di chuyển truyền thống của robot là di chuyển theo line ( vạch trắng) bằng cách dò đường dùng mạch dò ( sensor), để thay đổi và tạo đột phá trong cách di chuyển cũng như tạo ra sự khác biệt, cùng với khả năng di chuyển không theo line, bỏ cách dò đường truyền thống mà chạy theo quỹ đạo mong muốn có thể là đường cong, đường zic-zac, ... bằng cách dùng nhiều kỹ thuật khác nhau, mà chủ yếu là dùng encoder. Để cải tiến hơn nữa sự đa dạng trong lối di chuyển của robot và tăng tính ổn định, chính xác lên cao hơn, PID Controller được kết hợp vào quá trình điều khiển nhằm đạt được những mục tiêu trên.

II. ÁP DỤNG VÀ HIỆN THỰC PID CONTROLLER CHO ROBOCON
    1. Mô hình truyền thống
        a. Mô hình
            
Sử dụng 1 vi điều khiển ( H8, ATMega64 ...) quản lý toàn bộ hoạt động của robot trong đó PID controller được tích hợp như một hàm giải thuật. 
            PID được áp dụng vào giải thuật và hoạt động dưới dạng một hàm với thông số vào là giá trị vận tốc mong muốn và "lỗi" tham chiếu, giá trị đầu ra là pwm điều khiển động cơ. Hàm tính toán cho PID được gọi trong giải thuật di chuyển của robot, còn hàm cập nhật giá trị lỗi tham chiếu liên tục được cập nhật bằng timer (thường là 5ms).
            PID Controller được tích hợp vào trong giải thuật điều khiển robot với giá trị output là giá trị pwm điều xung cho 2 động cơ 2 bánh sao cho đạt được giá trị vận tốc mong muốn. Ứng dụng giải thuật PID được áp dụng truyền thống này  thì chủ yếu chỉ điều khiển vận tốc cho robot chạy thẳng với giá trị vận tốc mong muốn hoặc luôn chạy giữa line với vận tốc cố định, giá trị lỗi tham chiếu để tính toán trong giải thuật PID có thể là độ lệch của bộ led sensor dò đường so với line trắng ( thường dùng) hoặc là độ sai lệch về số xung giữa encoder bên bánh trái và encoder bên bánh phải.
      
                
                                                                

    2. Mô hình áp dụng trong tương lai
        a. Mô hình
            
Sử dụng 3 vi điều khiển: 1 vi điều khiển (ATMega64) đóng vai trò master quản lý toàn bộ hoạt động chính của robot, 2 vi điều khiển còn lại ( 2 vi điều khiển P89V51) quản lý việc nhân xung encoder ( 1 vi điều khiển cho mỗi bên: trái, phải) và tính toán PID controller sao cho đạt được giá trị vận tốc mà master truyền lệnh xuống cho slaver cần quản lý để robot luôn đạt được như mong muốn. Giao tiếp giữa master và slaver thông qua giao tiếp UART ( giao tiếp này hoàn toàn có thể được sử dụng để đồng bộ quá trình ở hai Slaver khi di chuyển), giao tiếp giữa slaver nhằm đồng bộ quá trình trong quản lý di chuyển của robot thông qua ngắt ngoài và 1 bit PORT I/O.

                    
        b. Các ký thuật mới so với mô hình truyền thống
 
           + Slaver - P89V51
               Trong mô hình mới này, P89V51 được sử dụng chuyên cho việc nhận xung encoder và tính toán PID điều khiển động cơ theo đúng giá trị vận tốc mong muốn. Do đó, việc điều khiển đạt được độ chính xác cao hơn so với mô hình truyền thống.
            + Chống mất xung encoder
               P89V51 có một chức năng phần cứng cho phép nhận xung encoder mà không còn bị ảnh hưởng từ timer hay mức ưu tiên ngăt, đó là bộ timer 2 được cài đặt ở chế độ auto reload. Với chế độ này, timer 2 sẽ nhận xung encoder làm xung đếm cho timer, giá trị xung encoder được lưu lại trong TH2 và TL2 ( TH2 và TL2 sẽ được tư động lưu vào RCAP2H, RCAP2L), và chương trình sẽ lấy giá trị trong 2 thanh ghi này để tính toán giá trị lỗi tham chiếu trên xung encoder.
            + Điều khiển vận tốc theo lộ trình
               Kỹ thuật sử dụng trong mô hình này được cải tiến hơn so với cách điều khiển trong mô hình truyền thống. Lộ trình tổng thể được chia thành các giai đoạn, các lộ trình con ( gọi là segment), trong mỗi segment này, vi điều khiển phải đảm bảo được robot chạy đúng mỗi segment vơi các giá trị tham số ứng với mỗi segment, ví dụ: quãng đường phải đi được ( tính bằng số xung encoder), vận tốc tối đa cần đạt( số xung encoder l đơn vị thời gian), khoảng thời gian delay để chuyển tiếp qua segment tiếp theo d_time, gia tốc trong chuyển động accel...
                 

              
        Giao tiếp UART theo định dạng frame
 
           Để master AVR giao tiếp ổn định và đạt độ chính xác cao với 2 slaver P89V51, mô hình này định dạng frame giao tiếp thông qua UART.
             + ADDR: địa chỉ slaver được dùng để xác định slaver nào sẽ giao tiếp với master AVR.
                 ADDR = { LEFR_ID(0x10),RIGHT_ID(0x20),BROADCAST(0xFF)}
                 Dạng thu gọn: L, R, B.
             + Command: dùng để chỉ ra lệnh truyền/nhận là gì.
                Command = {A,D,E,G,L,N,Q,R,S,T,V,X}
           
            A(Accelerator): thay đổi tham số gia tốc của một segment xác định.
            D(Distance): Thay đổi tham số khoảng cách của một segment xác định.
            V(Velocity limit): Thay đổi tham số vận tốc giới hạn của một segment xác định.
            T(Time): Thay đổi tham số khoảng thời gian của một segment xác định.
            G(Go): Ra lệnh chạy các segment xác định.
            L(Loop): ra lệnh chạy và lặp lại một bộ các segments.
            Q(Query): xác nhận sự hiện diện của slaver.     
            E(read Encoder): yêu cầu tổng số xung encoder đi được kể từ lần đọc encoder gần nhất.
            N(Normal mode): slaver thiết lập giá trị PWM được chỉ ra trong frame lệnh.
            X(Velocity mode): slaver quản lý vận tốc motor như mong muốn.
            R(Reset): thiết lập tất cả các tham số về giá trị khởi tạo ban đầu.
            S(Stop): động cơ ngừng hoạt động ngay lập tức, vận tốc lúc đó bằng 0.
                                               

              


         
       c. Mô hình giải thuật
            
Master - AVR
           
          
            Slave - P89V51

          

            Mô hình lập trình PID trên P89V51 
                Trong giải thuật này UpdTraj() là hàm tương đối quan trọng nên chỉ thể hiện mô hình này của hàm, còn các hàm khác như UpdPos(), CalcPID(), CalcError() tương đối dễ hiểu nên không thể hiện ở đây)

          
          
            Giải thuật chi tiết trong UpdTraj()
          

Không có nhận xét nào:

Đăng nhận xét