Vi điều khiển thực hiện điều khiển PID như thế nào?

Jul 23, 2026 Để lại lời nhắn

Thuật toán điều khiển PID hiện là một trong những thuật toán điều khiển được sử dụng rộng rãi nhất. Điều khiển PID mang lại những ưu điểm như điều chỉnh được các tham số, phạm vi ứng dụng rộng và độ chính xác điều khiển cao. Trong kỹ thuật thực tế, thuật toán PID có thể được áp dụng cho nhiều lĩnh vực khác nhau, bao gồm điều khiển cơ điện, tự động hóa công nghiệp, robot và điều khiển bộ vi xử lý.


Ba tham số của thuật toán PID là: độ lợi tỷ lệ Kp, hằng số thời gian tích phân Ti và hằng số thời gian đạo hàm Td. Các hệ thống khác nhau yêu cầu các tham số PID khác nhau và các tham số tối ưu thường thu được thông qua thử nghiệm và gỡ lỗi. Hằng số tỷ lệ Kp điều chỉnh mức tăng tỷ lệ, kiểm soát tỷ lệ đầu ra của hệ thống với sai số phản hồi trong quá trình vận hành; hằng số thời gian tích phân Ti điều chỉnh độ lợi tích phân, kiểm soát sự tích tụ sai số trong quá trình vận hành hệ thống; và hằng số thời gian vi phân Td điều chỉnh độ lợi đạo hàm, kiểm soát tốc độ thay đổi sai số trong hệ thống điều khiển.


Cách tiếp cận để thực hiện thuật toán PID trên vi điều khiển là gì?


Để thực hiện thuật toán điều khiển PID trên vi điều khiển, phương pháp chung như sau:

1. **Xác định thông số PID**:

- Chọn mức tăng tỷ lệ thích hợp (Kp), thời gian tích phân (Ti) và thời gian đạo hàm (Td) dựa trên đặc điểm và yêu cầu của đối tượng được điều khiển thực tế.


2. **Thu thập dữ liệu cảm biến**:

- Sử dụng các cảm biến thích hợp (chẳng hạn như cảm biến nhiệt độ, cảm biến vị trí, v.v.) để thu được dữ liệu phản hồi theo thời gian thực- từ đối tượng được điều khiển.


3. **So sánh giá trị điểm đặt và phản hồi**:

- So sánh điểm đặt (giá trị mong muốn) với giá trị phản hồi để tính toán lỗi (Lỗi).


4. **Tính toán PID**:

- Tính biến điều khiển (đầu ra) bằng công thức thuật toán PID: PID=Kp * Error + Ki * ∫ Error dt + Kd * d(Error)/dt.

- Kp, Ki và Kd là các tham số PID; Lỗi là giá trị lỗi; ∫ Lỗi dt biểu thị số hạng tích phân; và d(Error)/dt đại diện cho số hạng phái sinh.


5. **Giới hạn** (Tùy chọn):

- Đối với một số ứng dụng nhất định, có thể cần phải giới hạn phạm vi giá trị đầu ra để ngăn giá trị đó vượt quá phạm vi chấp nhận được của đối tượng được kiểm soát.


6. **Tín hiệu điều khiển đầu ra**:

- Biến điều khiển được tính toán được sử dụng làm tín hiệu điều khiển và được gửi đến bộ truyền động (chẳng hạn như động cơ hoặc van) để điều chỉnh và điều khiển đối tượng được điều khiển.


7. **Đặt tần số điều khiển**:

- Đặt tần suất điều khiển thích hợp-chu kỳ thực thi của thuật toán điều khiển-dựa trên các yêu cầu ứng dụng cụ thể.


8. **Lặp lại thuật toán PID**:

- Trong vòng lặp thời gian thực-, hãy thực hiện lặp lại các bước trên để liên tục theo dõi giá trị phản hồi, tính toán biến điều khiển và xuất tín hiệu điều khiển để đạt được khả năng điều khiển ổn định của hệ thống.


Trong lập trình vi điều khiển thực tế, bạn có thể chọn các công cụ phát triển và ngôn ngữ lập trình phù hợp (chẳng hạn như ngôn ngữ C hoặc hợp ngữ) dựa trên mô hình vi điều khiển và nền tảng phát triển cụ thể. Cần lưu ý rằng trong ứng dụng thực tế có nhiều kỹ thuật nhằm tối ưu hóa và cải tiến thuật toán PID như tách tích phân và PID thích ứng, có thể tiếp tục nghiên cứu và triển khai theo yêu cầu cụ thể.

 

Nguyên lý và hoạt động của bộ điều khiển PID


Bộ điều khiển PID bao gồm ba thành phần: tỷ lệ (P), tích phân (I) và đạo hàm (D). Nó tạo ra đầu ra điều khiển bằng cách xử lý lỗi, độ lệch và tốc độ thay đổi của hệ thống. Hoạt động của nó bao gồm các bước sau:


- Lấy giá trị điểm đặt và phản hồi

- Tính toán lỗi

- Tính toán đầu ra điều khiển dựa trên mức tăng tỷ lệ, số hạng tích phân và số hạng đạo hàm

- Cập nhật tham số bộ điều khiển

- Xuất tín hiệu điều khiển


Triển khai mã STM32

 

Sau đây là mã mẫu để thiết kế và triển khai bộ điều khiển PID bằng vi điều khiển STM32:

```c

#include "stm32f4xx.h"

// Xác định các tham số của bộ điều khiển PID

thả nổi Kp=0.5; // Tăng theo tỷ lệ

thả nổi Ki=0.2; // Tăng tích phân

thả nổi Kd=0.1; // Lợi ích phái sinh

// Xác định các biến lưu trữ

điểm đặt float=50.0; // Điểm đặt

phản hồi nổi=0.0; // Giá trị phản hồi

lỗi nổi=0.0; // Lỗi

float cuối_error=0.0; // Lỗi trước đó

tích phân float=0.0; // số hạng tích phân

// Hàm tính toán đầu ra bộ điều khiển PID

float pidController(float dt)

{

// Tính sai số

lỗi=điểm đặt - phản hồi;

// Tính số hạng tích phân

lỗi tích phân += * dt;

// Tính đạo hàm

đạo hàm float=(lỗi - Last_error) / dt;

// Tính toán đầu ra điều khiển

đầu ra float=lỗi Kp * + tích phân Ki * + đạo hàm Kd *;

// Cập nhật lỗi trước đó

lỗi cuối cùng =;

trả về đầu ra;

}

int chính(void)

{

trong khi (1)

{

// Lấy giá trị phản hồi

// Đặt khoảng thời gian

// Tính toán đầu ra PID

nổi dt=0.01; // Trong ví dụ này, khoảng thời gian là 0,01 s

float control_output=pidController(dt);

// Xuất tín hiệu điều khiển

// Trì hoãn trong một khoảng thời gian

for (int i=0; i < 10000; i++);

}

trả về 0;

}

Gửi yêu cầu

whatsapp

Điện thoại

Thư điện tử

Yêu cầu thông tin