Lưu đồ thuật toán 3.2.4.1.
Code lập trình: 3.2.4.2.
Xem phần phụ lục 1: Mã code lập trình cho Vi điều khiển ATMEGA 16
Giải thích chương trình 3.2.4.3.
Sử dụng trên phƣơng pháp điều khiển tự động PID với tùy chỉnh riêng phù hợp cho hệ thống lò nhiệt.
Chƣơng trình dựa trên nhiệt độ đặt và nhiệt độ thực tế với các giá trị hệ số Kp, Ki, Kd cho trƣớc để tính ra giá trị điều khiển Triac. Giá trị PID đƣợc tính bằng cách cộng giá trị của 3 luật điều khiển P, I, D.
Công thức: uPID,n = up + ui,n + ud,n = KP*err + KI*e_sum + KD*e_del = duty (3.4) Giá trị duty đƣợc giới hạn trong khoảng: 0 ≤ duty ≤ dem_tm. Nếu vƣợt quá giá trị max là dem_tm thì duty chính bằng dem_tm.
+ Khâu P:
Công thức: up = Kp * err (3.5)
Với err là sai số của nhiệt độ đặt và nhiệt độ hiện tại, value là nhiệt độ đặt và
temp là nhiệt độ hiện tại thì: err = value – temp.
+ Khâu I:
Công thức: ui,n = Ki*errn + ui,n-1 =Ki*e_sum (3.6) Giả sử tại thời điểm n = 0, ui,0 = 0.
Tại thời điểm n = 1 thì ui,1 = Ki*err1 + 0 , tƣơng tự với khâu P.
Tại thời điểm tiếp theo n = 2 thì ui,2 = Ki*err2 + ui,1 và cứ nhƣ vậy tín hiệu điều khiển lần sau bằng tín hiệu điều khiển ở lần trƣớc đó cộng đại số với tích giữa hệ số tích phân và sai lệch, làm cho sai lệch err (dƣơng hoặc âm) giảm dần (hệ ổn định). Tín hiệu điều khiển ui,n sẽ không thay đổi nữa khi err = 0.
e_sum là sai số cộng dồn.
Vì đây là hệ thống tác động chậm nên nếu dùng khâu tích phân I nhƣ bình thƣờng dẫn đến hệ số tích lũy cộng dồn nên sẽ tăng dần vƣợt qua khỏi giới hạn gây ra hiện tƣợng “ Windup”. Giải pháp khống chế nhƣ sau:
Nếu nhiệt độ trong lò không tăng lên thì giá trị của e_sum chính là sai số cộng dồn nhƣng nếu nhiệt độ trong lò có tăng lên thì e_sum sẽ chính bằng sai số nhiệt độ tại thời điểm đó, e_sum = err. Nhƣ vậy sẽ không xảy ra hiện tƣợng “ Windup”.
+ Khâu D:
Công thức: ud,k = Kd(errn - errn-1) = Ki*e_del (3.7) Giả sử tại thời điểm n = 0, err0 = 0.
Tại thời điểm n = 1 thì ud,1 = Kd(err1 – err0) = Kd*err1 , tƣơng tự khâu P.
Tại thời điểm n = 2 thì ud,2 = Kd(err2 – err1), nhƣ vậy tín hiệu điều khiển lần sau bằng tích đại số của hệ số vi phân và hiệu sai lệch giữa hai lần liên tiếp.
e_del là hiệu sai số nhiệt độ 2 lần liên tiếp.
Nếu nhiệt độ trong lò tăng lên thì giá trị của e_del chính là sai số 2 lần liên tiếp, nhƣng nếu nhiệt độ không thay đổi thì giá trị e_del đƣợc giữ nguyên.