Thuật toán điều khiển PID là thuật toán điều khiển được sử dụng rộng rãi, điều khiển PID có ưu điểm là điều chỉnh được thông số, phạm vi ứng dụng rộng, độ chính xác điều khiển cao. Trong kỹ thuật thực tế, thuật toán PID có thể ứng dụng vào điều khiển cơ điện, tự động hóa công nghiệp, điều khiển robot, điều khiển vi xử lý và nhiều lĩnh vực khác.
Ba tham số của thuật toán PID được điều chỉnh: hằng số tỷ lệ Kp, hằng số thời gian tích phân Ti, hằng số thời gian vi phân Td. Các hệ thống khác nhau cần đặt các tham số PID khác nhau và nhìn chung cần có được các tham số tối ưu thông qua thử nghiệm và gỡ lỗi. Hằng số tỷ lệ Kp điều chỉnh tỷ lệ, điều chỉnh tỷ lệ sai số đầu ra và phản hồi trong hệ thống điều khiển; hằng số thời gian tích phân Ti điều chỉnh tích phân, điều chỉnh tích lũy sai số trong hệ thống điều khiển; hằng số thời gian vi sai Td điều chỉnh vi sai, điều chỉnh tốc độ thay đổi sai số trong hệ thống điều khiển.
Ý tưởng thực hiện thuật toán pid với vi điều khiển là gì
Để hiện thực hóa thuật toán điều khiển PID trên vi điều khiển, sau đây là ý tưởng chung về hiện thực hóa:
1. **Xác định thông số PID**:
- Theo đặc điểm và nhu cầu của đối tượng điều khiển thực tế, chọn hệ số tỷ lệ (Kp), thời gian tích phân (Ti) và thời gian vi phân (Td) thích hợp.
2. **Thu thập dữ liệu cảm biến**:
- Sử dụng các cảm biến thích hợp (ví dụ: cảm biến nhiệt độ, cảm biến vị trí, v.v.) để thu thập dữ liệu phản hồi từ đối tượng điều khiển trong thời gian thực.
3. **Đặt giá trị và so sánh giá trị phản hồi**:
- So sánh giá trị đã đặt (giá trị mong muốn) với giá trị phản hồi và tính giá trị lỗi (Lỗi).
4. **Tính toán PID**:
- Lượng điều khiển (đầu ra) được tính theo 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(Lỗi)/dt biểu thị số hạng vi phân.
5. **Xử lý giới hạn** (tùy chọn):
- Đối với một số ứng dụng, có thể cần phải giới hạn phạm vi giá trị đầu ra để tránh vượt quá phạm vi chấp nhận được của đối tượng điều khiển.
6. **Tín hiệu điều khiển đầu ra**:
- Đại lượng điều khiển được tính toán sẽ xuất ra dưới dạng tín hiệu điều khiển đến bộ truyền động (ví dụ: động cơ, van, v.v.) để thực hiện việc điều chỉnh và điều khiển đối tượng điều khiển.
7. **Đặt tần số điều khiển**:
- Theo nhu cầu của các ứng dụng cụ thể, hãy đặt tần suất điều khiển thích hợp để điều khiển chu kỳ thực hiện của thuật toán.
8. **Thực hiện chu trình của thuật toán PID**:
- Trong chu trình thời gian-thực, các bước trên được thực hiện lặp đi lặp lại để liên tục theo dõi giá trị phản hồi, tính toán đại lượng điều khiển và xuất tín hiệu điều khiển để nhận ra khả năng điều khiển ổn định của đối tượ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 thích hợp (như C hoặc hợp ngữ) theo 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ế sẽ có nhiều kỹ thuật để tối ưu và cải tiến thuật toán PID như tách tích phân, PID thích ứng, v.v., có thể tiếp tục nghiên cứu và triển khai theo nhu cầu cụ thể.
Nguyên lý và quy trình làm việc của bộ điều khiển PID
Bộ điều khiển PID bao gồm ba phần: tỷ lệ (P), tích phân (I) và vi phân (D) và 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. Quy trình làm việc của nó bao gồm các bước sau:
- Lấy giá trị mục tiêu 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 hệ số tỷ lệ, số hạng tích phân và số hạng vi phân.
- Cập nhật các tham số của 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 thông số của bộ điều khiển PID
thả nổi Kp=0.5; // hệ số tỷ lệ
thả nổi Ki=0.2; // hệ số tích phân
thả nổi Kd=0.1; // hệ số vi phân
// Xác định các biến lưu trữ
điểm đặt float=50.0; // giá trị đích
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 cuối cùng
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)
float pidController(float dt) {
// Tính toán lỗi
lỗi=điểm đặt - phản hồi; // Tính số hạng tích phân.
// Tính số hạng tích phân
lỗi tích phân += * dt; // tính số hạng vi phân
// Tính chênh lệch
đạo hàm float=(lỗi - Last_error) / dt; // tính toán đầu ra điều khiển.
// 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 *; // Tính toán đầu ra điều khiển.
// Cập nhật lỗi cuối cùng
lỗi cuối cùng =; // cập nhật lỗi cuối cùng.
lỗi cuối cùng =; trả về đầu ra; // Tính toán đầu ra điều khiển.
}
int chính(void)
{
trong khi(1)
{
// Lấy giá trị phản hồi
// Lấy khoảng thời gian
// Tính toán đầu ra PID
nổi dt=0.01; // 0,01 giây là khoảng thời gian trong ví dụ
float control_output=pidController(dt); // xuất tín hiệu điều khiển.
// Xuất tín hiệu điều khiển
// Trì hoãn tín hiệu điều khiển trong một khoảng thời gian nhất định
cho (int i=0; i 《 10000;i++).
}
trả về 0; }
}




