Triển khai D (phân biệt) trong PID


8

Tôi đang thực hiện một bộ điều khiển PID để điều khiển tốc độ động cơ. Tôi đã hoàn thành việc thực hiện kiểm soát PI và nó hoạt động hoàn toàn tốt đối với tôi. Trong đặc tả tôi đã được yêu cầu thực hiện một kỹ thuật lọc bằng cách sử dụng phương trình sau cho phần D:

nhập mô tả hình ảnh ở đây

Bây giờ những gì tôi hiểu cho đến nay, đó là sđại diện "dx/dt"chung tương ứng với tốc độ thay đổi lỗi, nhưng ở đây tôi có thể liên hệ nó với tốc độ thay đổi của phản hồi. Td/Nlà để giới hạn sản lượng khuếch đại tổng thể (hy vọng tôi đã làm đúng). Bây giờ để thể hiện điều này theo mã C, tôi đã thử cách sau:

        s = (CurrentFeedback()-Old_Feedback)*100/(MaxFeedback()); //to calculate the % change in feedback
        s = s*1000/sampleTime;      //1000 is multiplied because sampleTime is in milliseconds
        D = (Td*s)/(1+(s*Td/N));
        D = D*KP;   //Kp is multiplied as per the standard pid equation.

        Old_Feedback = CurrentFeedback();
        PID = P+I-D;

Vâng, kết quả bằng cách thêm D không phải là những gì tôi đã dự đoán. Tôi chỉ muốn biết nếu tôi thực hiện đúng phương trình phần D? Tôi có phạm sai lầm nào trong sự hiểu biết của tôi về các phép toán cơ bản của sự khác biệt không?

LƯU Ý: Tôi không được tự do thay đổi việc tính toán lại kp, ti, td vì nó đến trực tiếp từ VFD.


Hãy thử embedded.com/design/prototyping-and-development/4211211/... , "PID mà không có một tiến sĩ". Có một phần rõ ràng về việc thực hiện phái sinh.
Scott Seidman

2
Khi bạn khai báo Old_Feedback = CurrentFeedback () là sai. Bạn sẽ đọc giá trị với CurrentFeedback () và lưu nó trong temp. biến CurrentFeedback_tmp, sau đó sử dụng giá trị đó mỗi lần trong ISR đó, bởi vì bất cứ khi nào bạn gọi một fct CurrentFeedback (), nó sẽ trả về giá trị thực sẽ khác nhau mỗi khi bạn nhớ lại.
Marko Buršič

"Kết quả bằng cách thêm D không phải là điều tôi đã dự đoán" - bạn đã dự đoán điều gì? Tại sao chúng khác nhau?
Greg d'Eon

Có tiềm năng lớn cho số nguyên tràn ở đây. Các loại biến liên quan là gì và bạn đã xem xét các giá trị tối đa của chúng chưa?
Lundin

s, D là S32, KP, Td và N U16. thời gian mẫu là U32 Tôi đã xem xét các giá trị tối đa của biến theo giá trị tối đa có thể có của các loại dữ liệu cụ thể.
spp

Câu trả lời:


1

Tôi có 3 điểm để chia sẻ:

1-Tôi sẽ cho bạn biết lý do tại sao mọi người lộn xộn với các dấu hiệu thuật ngữ D, PID = P + I + D nhưng, D = kd * (lỗi -olderror) và trong điều khiển vị trí nếu bạn đang tiếp cận điểm đặt, luôn luôn là trình duyệt cũ <lỗi vì vậy thuật ngữ D sẽ âm và do đó, nó làm giảm đầu ra và ngăn quá mức.

2-Về thời gian, donot chia hoặc sử dụng thời gian. vì bạn đang sử dụng vi điều khiển nhúng, chỉ cần tạo hằng số thời gian và hủy nó khỏi tất cả các phương trình: ví dụ sử dụng ngắt hẹn giờ để tạo hằng số thời gian 1ms và gọi hàm của bạn bên trong.

3-Tại sao bạn đang sử dụng PID để điều khiển vận tốc, 90% thời gian PI là đủ trong điều khiển tốc độ, vì D ở đây giống như điều khiển tăng tốc.

Mong rằng sẽ giúp

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.