Sử dụng vi điều khiển AVR điều khiển động cơ DC bằng phương pháp PID, sử dụng giao diện để điều khiển, cài đặt thông số và vẽ biểu đồ vận tốc động cơ. Bao gồm mạch điện, lưu đồ giải thuật và code.
Trang 1BỘ MÔN CƠ ĐIỆN TỬ
…o0o…
Trang 2YÊU CẦU GIỚI HẠN ĐỀ TÀI
- Thiết kế mạch cầu H điều khiển tốc độ động cơ DC theo phương pháp điều chỉnh độ rộng xung (PWM)
- Tìm hiểu thuật toán điều khiển vòng kín PID theo hai phương pháp:
Ziegler – Nichols (Z – N)
Cohen – Coon (C – C)
- Viết giao diện chương trình điều khiển động cơ DC theo thuật toán điều khiển vòng kín PID bằng cả hai phương pháp Z – N và C – C
CƠ SỞ LÝ THUYẾT
Giới thiệu chung về thuật toán điều khiển vòng kín PID
Bộ điều khiển PID là một bộ điều khiển vòng kín được sử dụng rộng rãi trong công nghiệp Sử dụng bộ điều khiển PID để điều chỉnh sai lệch giữa giá trị đo được của hệ thống (process variable) với giá trị đặt (setpoint) bằng cách tính toán và điều chỉnh giá trị điều khiển ở ngõ ra
Sơ đồ hệ thống điều khiển dùng PID Một bộ điều khiển PID gồm 3 thành phần:
Khâu P (proportional) – tạo tín hiệu điều khiển tỉ lệ với sai lệch (error – e)
Khâu I (integral) – tạo tín hiệu điều khiển tỉ lệ với tích phân theo thời gian của sai lệch
Khâu D (derivative) – tạo tín hiệu điều khiển tỉ lệ với vi phân theo thời gian của sai lệch
Trang 3Bảng sau cho ta thấy rõ ảnh hưởng của các thông số KP, KI, KD đến hệ thống điều khiển bằng PID:
Effects of increasing parameters
Parameter Rise Time Overshoot Settling Time S.S Error
K p Decrease Increase Small Change Decrease
K d Small Change Decrease Decrease None
Nhận xét:
KP dùng để giảm thời gian tăng trưởng
KD dùng để giảm độ vọt lố và thời gian xác lập
KI dùng để loại trừ sai số ở trạng thái ổn định
Rời rạc hóa bộ điều khiển PID
Hàm truyền của bộ điều khiển PID theo thời gian:
( )
u t K e t K e t dt K
dt
Bộ điều khiển số không thể lấy mẫu liên tục theo thời gian nên cần phải rời rạc hóa các khâu của bộ hiệu chỉnh PID:
Khâu tỉ lệ: K e tP ( ) ≈ K e nP ( )
Khâu tích phân:
0 0
K e t dt ∫ ≈ K T ∑ e n
Khâu vi phân: ( ) [ ( ) ( 1)]
S
≈
Suy ra hàm truyền của bộ điều khiển PID số sẽ là:
0
1
S
T
Với: i P
i
K K T
= ; K d = K T P D
Bộ điều khiển PID rời rạc đọc sai số, tính toán và xuất ngõ ra điều khiển theo một khoảng thời gian xác định (không liên tục) gọi là thời gian lấy mẫu (T) Thời gian lấy mẫu cần nhỏ hơn đơn vị thời gian của hệ thống
Trang 4Thiết kế bộ PID số theo phương pháp Ziegler – Nichols (Z – N)
Z – N là phương pháp thiết kế bằng thực nghiệm, được sử dụng trong trường hợp không thể xây dựng mô hình toán học cho đối tượng điều khiển
Điều kiện: khi đưa trạng thái làm việc của hệ đến biên giới ổn định thì mọi giá trị của tín hiệu trong hệ thống điều phải nằm trong giới hạn cho phép
Các bước tiến hành:
- Trước tiên, sử dụng bộ P lắp vào hệ kín (hoặc dùng bộ PID và chỉnh các thành phần KI và KD về giá trị 0) Khởi động quá trình với hệ số khuếch đại KP thấp, sau đó tăng dần KP tới giá trị tới hạn Kgh để hệ kín
ở chế độ giới hạn ổn định, tức là tín hiệu ra h(t) có dạng dao động điều hòa Xác định chu kỳ tới hạn Tgh của dao động
- Xác định thông số của bộ điều khiển theo bảng sau :
//Một số tài liệu ghi là TN = 0,85 Tgh (bộ điều khiển PI) TV = 0,12 Tgh (bộ điều khiển PID)
Hệ số tích phân : I P
N
K
K =
T
Hệ số vi phân : K = K TD P V
Trang 5Thiết kế bộ PID số theo phương pháp Cohen – Coon (C – C)
C – C là phương pháp thiết kế dựa trên một số đáp ứng điển hình của hệ thống, cung cấp khả năng ước lượng để tính toán các thông số của hệ thống
Các bước thực hiện:
- Khởi động hệ thống và đợi cho trạng thái tương đối ổn định
- Tạo một bước nhảy của tín hiệu đầu vào
- Quan sát đáp ứng đầu ra sau một khoảng thời gian
- Dựa vào đáp ứng đầu ra, xác định các thông số (bằng phép đo):
t0: Thời điểm bắt đầu thực hiện bước nhảy của tín hiệu đầu vào
t2: Thời điểm giá trị của tín hiệu đầu ra thực hiện được nửa bước nhảy (0.5B)
t3: Thời điểm giá trị của tín hiệu đầu ra đạt được 63.2% bước nhảy (0.632B)
A: Độ lớn bước nhảy của tín hiệu đầu vào
B: Độ lớn bước nhảy của tín hiệu đầu ra
- Từ đó suy ra các thông số quá trình:
t1 = (t2 - ln(2) t3)/(1 - ln(2))
τ = t 3 - t 1
τDEL = t 1 - t 0
K = B/A
Trang 6- Dựa vào các thông số K, τ và τDEL ta có thể tính được KC, TI và TD dựa theo các biểu thức trong bảng dưới đây:
- Cuối cùng thu được các thông số đặc trưng của bộ PID số:
KP = KC
KI = KC/tI
KD = KC*tD
So sánh giữa Z – N và C – C
Cả 2 phương pháp này đều cung cấp khả năng ước lượng các thông số quá trình của bộ PID số
Phương pháp Z – N đòi hỏi phải theo thực nghiệm là chính
Phương pháp C – C yêu cầu tính toán nhiều hơn là thực nghiệm
Trang 7THIẾT KẾ VÀ THI CÔNG
Sơ đồ khối của mô hình thi công:
Mạch nguyên lý của khối điều khiển:
Mạch nguyên lý của khối hồi tiếp vận tốc từ Encorder:
Trang 8Mạch nguyên lý của khối cách ly:
Mạch nguyên lý của khối công suất:
Trang 9Tính toán Encorder:
Tần số đáp ứng:
Động cơ dùng Encorder Incremental với 2 kênh xung A (dây trắng) và B (dây vàng) với thông số là 100 xung/vòng cho mỗi kênh Để tăng độ phân giải lên 4 lần (tức 400 xung/vòng), ta thiết kế mạch hồi tiếp tốc độ như sau:
Dùng 1 cổng EX-OR (74HC86) để bắt tất cả các cạnh lên và cạnh xuống của 2 kênh xung A và B
Cho vi điều khiển nhận ngắt ngoài với bất cứ sự thay đổi nào của đầu vào là ngõ ra của cổng EX-OR trên
Tốc độ tối đa của động cơ khoảng 3800 vòng/phút ở điện áp nguồn 24VDC Suy ra tần số tối đa của Encoder là: max_encoder = 3800* 400 0,025Mhz
f
Ở đây dùng vi điều khiển ATMEGA32 với tần số thạch anh ngoại là 16Mhz
hoàn toàn đáp ứng được tần số của Encorder
Chu kỳ lấy mẫu (T mẫu ):
Trong chương trình Codevision dùng biến đếm count kiểu nguyên không dấu unsigned long (16 bit) có giá trị lớn nhất là 65535.
Ta có: max_encoder mau mau 6
65535
0,025*10
f
Như vậy chọn Tmẫu = 10 ms là hoàn toàn thỏa mãn điều kiện trên
Sai số khi lấy mẫu với T mẫu = 10 ms:
Cứ 10 ms lấy mẫu sẽ đếm được count xung 1 phút = 60000 ms lấy mẫu
sẽ đếm được 6000*count xung Mặt khác, mạch hồi tiếp Encorder cho 400
xung/vòng Tốc độ đáp ứng của động cơ sẽ là:
6000*count/400 = 15*count (vòng/phút)
Do sử dụng biến đếm count kiểu nguyên nên sai số của count sẽ là ±1 sai
số của tốc độ đáp ứng là ±15 vòng/phút
Trang 10VẤN ĐỀ VÀ GIẢI PHÁP
Trong phương pháp C – C khi hệ đáp ứng quá chậm (t3 đủ lớn) thì sẽ xảy ra trường hợp t1<0 [vì t1 = (t2 - ln(2) t3)/(1 - ln(2))] Lấy gốc thời gian tính toán tại t0 để giảm thiểu trường hợp đặc biệt này
Tính toán các thông số của phương pháp C – C khi lấy thời điểm bắt đầu thực hiện bước nhảy t0 của tín hiệu đầu vào làm gốc thời gian:
T0 = t0 – t0 = 0;
T2 = t2 - t0;
T3 = t3 - t0;
T1 = (T2 - 0.69315 * T3) * 0.30685;
t = T3 - T1;
tdel = T1 – T0 = T1;
K = B / A;
r = tdel / t;
Kp = (16 + 3 * r) / (12 * K * r);
tI = tdel * (32 + 6 * r) / (13 + 8 * r);
tD = tdel * 4 / (11 + 2 * r);
Ki = Kp / tI;
Kd = Kp * tD;
Trang 11Đồ thị Teechart trên PC vẽ không kịp do hai nguyên nhân:
Cứ 10ms vi điều khiển gửi thông số lên PC một lần là quá nhanh nên card màn hình onboard không thể đáp ứng kịp
Tăng thời gian giãn cách giữa các lần gửi lên 60ms
Các sự kiện trong lập trình đồ họa thuộc luồng GUI Thread (luồng chính MainThread của C#), còn sự kiện
serialPort1_DataReceived thuộc luồng ThreadPool Thread
(tức non-GUI Thread) Khi chương trình C# chạy nó nhảy qua nhảy lại giữa hai luồng này làm giảm tốc độ đáp ứng của chương trình nên Teechart vẽ không kịp
Dùng thêm câu lệnh this.Invoke(new
EventHandler(communication)); trong hàm sự kiện
serialPort1_DataReceived để chuyển sự kiện này sang luồng
chính nhằm cải thiện tốc độ đáp ứng của chương trình
Hàm lệ thuộc giữa giá trị PWM và tốc độ động cơ không phải là hàm tuyến tính Viết chương trình giao diện đồ thị Teechart biểu thị mối quan hệ giữa PWM và tốc độ tương ứng của động cơ (dùng Timer tạo
sự kiện mỗi lần Timer_Tick thì tăng PWM lên 30 đơn vị và hồi tiếp
về tốc độ động cơ tương ứng để vẽ lên đồ thị Teechart)
Từ đồ thị Teechart ta gióng các giá trị tương ứng của PWM và tốc độ động cơ Trong giao diện của phương pháp C – C ta lập bảng tra các giá trị tương ứng của SP (tốc độ đặt trên PC) và PWM (truyền xuống điều khiển động cơ)
Trang 12LƯU ĐỒ GIẢI THUẬT
Trang 13KẾT QUẢ ĐẠT ĐƯỢC Phương pháp Z – N:
Trang 14Từ đồ thị trên ta tính được Tgh = (960-780)/60 = 3 (chia 60 vì đơn vị trục thời gian là 60ms) Suy ra Kp, Ki, Kd như sau:
Trang 16Phương pháp C – C với tín hiệu vào (SP) nhảy từ 1500 lên 2490:
Trang 17Bộ thông số Kp, Ki, Kd dò được dựa theo kết quả bộ thông số của
phương pháp Z – N:
Trang 18Bộ thông số Kp, Ki, Kd dò được dựa theo kết quả bộ thông số của
phương pháp C – C:
Trang 19KẾT LUẬN VÀ ĐỀ NGHỊ
Nhận thấy kết quả KP, KI, KD ở hai phương pháp Z – N và C – C là khác nhau, do đó khi tùy chỉnh nên sử dụng tối ưu nguyên lý điều khiển và phải kiểm tra lại độ chắc chắn của từng phương pháp
Thường thì Z – N dùng để tùy chỉnh theo thực nghiệm, còn C – C dùng để tính toán kiểm nghiệm lại kết quả Nhưng không hẳn là phương pháp C – C đã có độ tin cậy cao hơn phương pháp thực nghiệm Z – N
Kết quả của hai phương pháp chỉ là bộ thông số thô, nhưng dựa vào
đó ta có thể dò tìm được các bộ thông số chuẩn khác nhau cho động
cơ Như vậy bộ thông số PID của động cơ không phải là duy nhất, nó còn phụ thuộc vào nhiều yếu tố khác nhau trong hệ thống điều khiển
Source code và giao diện download tai đây:
https://www.mediafire.com/?nifj9d57afjw8ud