STDIO
Tìm kiếm gần đây
    • Nội dung
    • QR Code
    • 0
    • 0
    • Sao chép

    Thuật Toán PID trong Điều Khiển Tự Động

    Chi tiết về thuật toán PID, các ví dụ thực tế và hướng đưa thuật toán vào ứng dụng, giải quyết bài toán thực tế và mô phỏng bằng MATLAB.

    Kim Uyên

    03/06/2016
    19/09/2020
    4 phút đọc
    Thuật Toán PID trong Điều Khiển Tự Động

    PID là thuật toán được sử dụng phổ biến trong lĩnh vực điện, điện tử, dùng PID tự động điều chỉnh, điều khiển để động cơ tự động và giúp đạt được giá trị chuẩn mong muốn, có độ lỗi nhỏ nhất.

    Xe tự cân bằng

    Nguyên lý thuật toán

    Một chiếc xe tự động sử dụng Arduino, cảm biến âm thanh cùng bộ điều khiển động cơ, bài toán đặt ra là xe có thể chạy theo 1 đường thẳng; thuật toán PID là lựa chọn phù hợp để giải quyết trường hợp này.

    Muốn bánh xe quay được 200 vòng/giây, tương đương với giá trị truyền vào cho động cơ là pwm = 200, trong khi đó thực tế xe đang chạy vào mép lề của một bãi cát (tức là bánh trái chạy ở đường bình thường, bánh phải chạy trên bãi cát), ma sát lớn làm bánh xe chỉ quay được 100 vòng/giây, như vậy xe có thể chạy lệch phải. Tính được độ lỗi bánh xe phải lúc này là 100 vòng. Vậy để xe chạy thẳng, cần tăng tốc độ truyền vào cho động cơ bên phải ở thời điểm này để giúp bánh xe đạt được 200 vòng/giây bất kể có ma sát. Từ giá trị độ lỗi của số vòng quay, cần quy ra giá trị pwm để truyền vào cho động cơ.

    Khi này pwm = 200 + 50 (giả sử: 100 vòng/giây ~ 50 pwm).

    * Lưu ý: những con số trong ví dụ này là giả định.

    Kết quả của thuật toán là độ lỗi của tốc độ động cơ tại một thời điểm, sử dụng thông tin từ giá trị này để điều chỉnh, đưa vào bài toán một cách hợp lý.

    Giá trị trả về của thuật toán được tổng hợp dựa trên 3 thành phần là P I D. Có nghĩa, thuật toán dựa trên độ lỗi theo thời gian trong quá trình hoạt động của động cơ, bao gồm độ lỗi ở thời điểm hiện tại, độ lỗi dựa trên toàn bộ quá trình và đạo hàm độ lỗi ở thời điểm hiện tại.

    Công thức

    Giải thích

    Kp Ki Kd lấy giá trị không âm và tương ứng với độ ảnh hưởng của 3 thành phần P I hay D vào giá trị trả về.

    Phân tích về 3 thành phần:

    • P: độ lỗi ở thời điểm hiện tại, để có độ lỗi này cần một giá trị tên pivot là giá trị lý tưởng mong muốn động cơ đạt được, có thể suy ra độ lỗi từ pivot.
    • I: độ lỗi của toàn bộ quá trình, với giá trị này, giá trị điều chỉnh sẽ phụ thuộc vào toàn bộ quá trình hoạt động của động cơ, giá trị này sẽ lấy dựa vào trung bình độ lỗi ở mỗi thời điểm trước đó.
    • D: đạo hàm độ lỗi trong một khoảng thời gian trước đó, giá trị này có nghĩa giá trị điều chỉnh sẽ phần nào đó đoán được xu hướng của động cơ mà điều chỉnh cho hợp lý.

    Vậy để thuật toán có thể hoạt động, cần các giá trị:

    • Giá trị lý tưởng (giá trị mốc), dựa vào giá trị này để tính độ lỗi.
    • Cần đo được giá trị thực tế ở mỗi thời điểm.
    • Kp Ki Kd.

    Mã nguồn ví dụ

    Sử dụng MATLAB để code và vẽ biểu đồ để dễ hình dung.

    Vì không thể lấy giá trị thực tế nên cần random giá trị để sử dụng.

    • Random giá trị ngẫu nhiên từ 150 đến 200 và coi nó như là số vòng đo được trong 1 giây.
    • Sau đó tính độ lỗi dựa vào kết quả đo được, giá trị pivot (200), độ lỗi trong quá khứ.
    • Có kết quả độ lỗi, quy độ lỗi về giá trị pwm, từ đó tính được pwm cần truyền vào cho động cơ.
    Kp = 0.6;
    Ki = 0.2;
    Kd = 0.2;
    Pivot = 200;  // pivot value (round/s)
    sum_e = 0;
    N = 100;      // amount of random numbers
    
    X = zeros(1, N);  // create array has size N to contain random values. (round/s)
    E = zeros(1, N);  // create array has size N to contain error values. (round/s)
    PWM = ones(1, N) * 200; // create array has N element, the value of each element is 200. (pwm)
    idx = zeros(1, N);
    xPrev = 200;  // to save the previous value. (round/s)
    
    for i = 1:1:N
        X(i) = rand(1) * 100 + 150; // random from 150 -> 250
        e = Pivot - X(i);    // calculate the error value.
        sum_e = sum_e + e;
    
        P = Kp * e;
        I = Ki * (sum_e / i);
        D = Kd * (X(i) - xPrev);
    
        E(i) = (P + I + D)/ (Kp + Ki + Kd);  // OUTPUT OF THE PID ALGORITHM.
        PWM(i) = PWM(i) - E(i);    // calculate pwm to control. You need to convert E(i) (round/s) to pwm. Ex: 100round/s ~ 50pwm. 
    
        xPrev = X(i);
       idx(i) = i;
    end
    
    plot(idx, X, idx, PWM, idx, E);  // plot the chart.
    
    0 Bình luận
    Điện Tử Ứng Dụng

    Điện Tử Ứng Dụng

    Kiến thức điện tử, Arduino, Raspberry Pi, giới thiệu sản phẩm.

    Đề xuất

    Toán Tử Khung Xương trong Ảnh Nhị Phân - Skeleton Binary Morphology
    Giới thiệu giải thuật thực hiện toán tử khung xương (skeleton) dựa trên ...
    Heap Sort - Thuật Toán Sắp Xếp Vun Đống
    Với độ phức tạp trong trường hợp xấu nhất bằng O (n log n), giải thuật ...

    Khám phá

    Điều Khiển Động Cơ Bằng IC L298
    Hướng dẫn sử dụng IC L298 đã tích hợp sẵn mạch cầu H, ứng dụng trong ...
    Thông Số Kỹ Thuật Arduino Uno R3 - Các Biến Thể và Lưu Ý
    Arduino board có rất nhiều phiên bản với hiệu năng và mục đích sử dụng ...
    Xử Lý Ảnh Với OpenCV: Các Phép Toán Hình Thái Học
    Giới thiệu những thuật toán cơ sở trong xử lý hình thái học, những thuật ...
    Đo Tốc Độ Động Cơ Sử Dụng Cảm Biến IR FC-03
    Bài viết hướng dẫn cách sử dụng cảm biến đo tốc độ IR FC-03 kết hợp với ...
    SmartHome - Từ Rời Rạc Hóa đến Tổng Thể Thông Minh
    Từ những thiết bị vốn được tạo ra tự động một cách rời rạc đến kết nối ...
    SmartHome - Tổng Thể hay Rời Rạc
    Các thiết kế dựa vào tổng thể (1 giải pháp đóng gói) hay rời rạc từng ...
    Thuật Toán Nén Dữ Liệu RLE
    Trong quá trình lưu trữ cũng như truyền dữ liệu, việc nén dữ liệu là ...
    CBP-8: Component Điều Khiển và AI – Component Ra Lệnh
    Component ra lệnh - các Component có khả năng gửi Entity Command cho ...
    Khi bạn nhấn vào liên kết sản phẩm do STDIO đề xuất và mua hàng, STDIO có thể nhận được hoa hồng. Điều này hỗ trợ STDIO tạo thêm nhiều nội dung hữu ích. Tìm hiểu thêm.
    STDIO
    Trang chính
    Công ty TNHH STDIO

    30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
    +84 28.36205514 - +84 942.111912
    developer@stdio.vn

    383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
    Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

    ©STDIO, 2013 - 2020