Tải bản đầy đủ (.docx) (20 trang)

PID điều chỉnh nhiệt độ lò điện pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (110.97 KB, 20 trang )

: PID đi ề u ch ỉ nh nhi ệ t đ ộ lò đi ệ n
mumoi
18-12-05, 11:17
Chào các bạn.
Mình đang làm về PID điều khiển nhiệt độ sử dụng AT89C51. Các bạn có thể chỉ giáo cho tôi
mấy chiêu về PID được không.
Tôi đã viết PID trên C và:
Phương trình sai phân của PID số được viết dưới dạngsai phân sau:
U(i+1) = Kp*e + Kd* [e(i+1)-e(i)]/Ts + Ki*Se(i)*Ts
Ở đây: e là sai số.
Ts là thời gian lấy mẫu.
U là đầu ra.
Vấn đề là ở chỗ góc mở a cho Triac của bộ tạo nhiệt.
Ta có a nằm trong khoảng 0o đến 180o.
Khi đó nhiệt độ đầu ra tương ứng là toout = Tmax¸ 0.
Trong lập trình thì góc mở a tương ứng với thời gian trễ của góc mở so với tín hiệu đồng pha
được phát hiện bởi ngắt ngoài.
Do đó a = 0o¸ 180o tương ứng a = 0 ¸ 10000ms (ở đây tần số công nghiệp là 50Hz).
Vấn đề là mình không tìm được mối quan hệ giữa đầu ra của PID là U và góc mở Triac a.
Mình có suy nghĩ như thế này không biết ý các cao nhân thế nào:
Tức là ứng với giá trị nhiệt độ đặt là td thì ta có góc mở là ad. Như vậy góc mở tại thời điểm i là:
a(i) = ad - au.
trong đó au = f(U).
Vấn đề là hàm f(U) xác định như thế nào?
Mình chưa làm thực tế về PID bao giờ nên bỡ ngỡ quá. Các bạn chỉ cho mình mấy chiêu được
không.
Mình cảm ơn anh nha!
Chào.
Chúc vui vẻ.
AFH
18-12-05, 13:33


Công thức bạn đưa ra là đúng rồi đấy. Nhưng tôi thấy bạn chưa hiểu rõ về PID vì vậy bạn nên
tìm mua sách mà học PID cho cẩn thận (cái món PID này tưởng dễ chứ thực ra khó phết đấy).
Còn về góc mở a thì bạn cho một biến đếm thời gian như bạn đã ghi ấy. nghĩ là góc mở 0 tương
ứng với 0 và góc mở 180 độ tương ứng với 10000 us (micro giây). Giá trị trả về của bộ PID bạn
cho qua bộ chặn trên và chặn dưới. Nghĩa là Umax=10000 và Umin = 0. Sau đó gán Biến đếm
thời gian = U là xong.
Việc điều chỉnh ổn định điều khiển phải được thực hiện qua các thống số là: Hệ số khuếch đại
Kp, Hằng số tích phân Ti và hắng số vi phân Td.
Chúc bạn thành công.
AFH
Amateur
18-12-05, 13:57
Tôi nghĩ không cần lập quan hệ Góc mở ~ Nhiệt độ.
Ta điều khiển theo quan niệm: Còn sai, thì còn điều chỉnh. Nếu lò nhiệt có tải (tiêu thụ năng
lượng nhiệt) thì còn phải thay đổi góc mở. Thậm chí có khi mở hết 180 độ mà bạn vẫn không đạt
được nhiệt độ mong muốn đấy, do đó không thể có quan hệ Góc mở ~ NHiệt độ lò. Quan hệ này
chỉ có khi nhiệt lượng tiêu thu là không đổi hay quá nhỏ. Tại một thời điểm, đang mở a độ. Nếu
ta nhận được sai số nhiệt độ là e, tính ra gia số góc mở theo PID (Delta a), sau đó góc mở mới =
a + delta a. Tiếp tục tìm sai lệch Vấn đề tìm ra bộ thông số Kp, Ki, Kd. Và với hệ rời rạc này,
ta chọn tiếp tham số thứ 4 là Ts - Thời gian giữa 2 lần lấy mẫu.
mumoi
19-12-05, 16:48
Bác AFH ơi đúng là PID phức tạp thật, bác có nói tới bộ chặn trên và bộ chặn dưới, vậy nó là gì
vậy, bác chỉ rõ cho tôi được không.
Cám ơn bác.
To Amateur: Bác có thể nói rõ cách tính delta a như thế nào được không, tôi đang mắc chỗ đó
đó.
Cảm ơn nha.
Chúc vui vẻ!
CHIBANG

19-12-05, 17:02
Chặn trên và dưới nghĩa là các thành phần tỷ lệ, vi phân và tích phân, rồi góc mở đều có giới
hạn. Nếu nó vượt qua thì gán nó bằng cái chặn gần nhất. Ví dụ:
if(p>P_MAX) p=P_MAX;
Biểu thức liên hệ giữa góc mở và công suất thì chỉ là biểu thức tương đối. Ví dụ bạn chia ra 1000
mức công suất đều nhau thì ứng với mức 1 góc mở 1, mức 2 góc mở 2 công suất mức
1000 góc mở 1000. 1000 mức công suất đều nhau nhưng 1000 mức góc mở lại phi tuyến vì do
hàm sin. Bạn dùng exel mà suy ra.
Thực tế nếu bạn dùng uC thì có thể dùng timer của nó để làm như bác AFH nói. Và có thể chỉ
chia mức công suất thành vài đoạn rồi nội suy ra thời gian mở để tiết kiện Flash
AFH
19-12-05, 18:41
bạn có thể hiểu chặn trên và chặn dưới nghĩa là chỉ cho giá trị điều khiển nằm trong 1 khoảng
nào đấy thôi. Một ví dụ là nếu bộ điều khiển của bạn kô thể đạt giá trị đặt -> bộ tích phân cứ tiếp
tục tăng -> giá trị điều khiển tăng liên tục -> tràn bộ tích phân hoặc tràn giá trị điều khiển (cái
này bạn rõ nhất khi khai báo kiểu CHAR và giá trị 255 + 1 = 0 do tràn só mà)
Nếu bạn dùng PID thì kô cần quan tâm đến chia đoạn công suất làm gì. Cứ còn sai lệhc thì còn
tăng giá trị điều khiển đến khi nào U = U max hoặc sai lệch = 0 thì mới thôi.
Chúc thành công.
AFH
PPIICC
19-12-05, 20:26
Nếu bạn dùng PID thì kô cần quan tâm đến chia đoạn công suất làm gì. Cứ còn sai lệhc thì còn
tăng giá trị điều khiển đến khi nào U = U max hoặc sai lệch = 0 thì mới thôi.
Chúc thành công.
AFH
Vậy là bác điều khiển định tính à? Vậy làm sao chính xác được nhỉ?
Ví dụ: Công suất p =k*e
Giả sử k=100, e=4 > cong suat mức là 400
e=3 >công suất là mức 300.

Vậy nghĩa là phải chia mức chứ?
Hơn nữa nếu điều khiển theo thời gian thì chu kỳ bán sin điện lưới 10ms.
Nêu chia đều 256 mức thì mức i là (10-i/256)ms.
Vậy nếu chia đều như thế này thì sẽ rất thiếu chính xác bởi lẽ những mức cận 0ms và 10ms sẽ rất
bé, còn các mức ở giữa gần 5ms sẽ rất thô(do biên độ). Bởi vậy ChiBang nói đúng.
AFH
19-12-05, 20:39
PID nó tự tính cho mình, chả cần chia khoảng công suất làm gì. Thế mới gọi là PID xịn chứ. :D
AFH
PPIICC
19-12-05, 21:37
PID nó tự tính cho mình, chả cần chia khoảng công suất làm gì. Thế mới gọi là PID xịn chứ. :D
AFH
Nghe bí hiểm quá =;
p ở trên tỷ lệ với góc mở, chúng nó là một, chia khoảng góc mở tức là chia khoảng công suất.
Công suất mình ko cần biết đích xác bao nhiêu mà chỉ cần biết % của nó và nó ứng với góc mở.
Ví dụ: 50 % công suất thì ứng góc mở tại 5ms.
30% công suất ứng với góc mở khoảng 6.5ms chẳng hạn.
Vậy dùng một bảng tra hay một hàm để liên hệ giữa góc mở và % công suất.
Còn PID chỉ là công thức liên hệ giữa % công suất với nhiệt độ đặt, các nhiệt độ đo.
Nói cách khác
%công suất ~ f(Tset,Tdo)
AFH
19-12-05, 22:59
bạn cần học thêm về PID thì sẽ thấy là chỉ cần biết giải điều khiển (ví dụ như góc mở anpha thì
là từ 0 độ đến 180 độ) mục đích là để giới hạn giá trị điểu khiển trong khoảng đó, ngoài ra thì
PID nó làm cho mình hết. Thế mới hay. Để PID có chất lượng tốt thì cần quan tâm đến 4 thông
số là: Kp, Ti, Td, và Ts.
AFH
Amateur

19-12-05, 23:18
Bạn PII có một chút nhầm lẫn. Góc mở a sẽ có quan hệ với dòng điện qua tải (điện trở nhiệt),
chứ không có quan hệ với nhiệt độ lò. Vì ta không biết được vật cần sấy trong lò sẽ tiêu thụ bao
nhiêu nhiệt lượng, sự mất nhiệt qua thành lò là bao nhiêu VÌ vậy, nếu tôi mở góc a chưa nóng,
tôi tiếp tục tăng a+a1, nếu chưa được, tôi lại tăng thêm một lượng a2 Thậm chí để rã đông tảng
thịt bò Úc, có khi mở hết cả chu kỳ dòng điện. Chính thế nên cần PID. Nếu biết chính xác nhiệt
độ với độ mở thì chẳng cần PID (Ví dụ như điều chỉnh độ sáng của bóng đèn, k0 cần PID). Còn
PID thế nào, nên đọc sách. Mỗi người sẽ tìm ra một cách cụ thể, đôi khi là bí quyết.
BẠn mumoi, cái U(i+1) của bạn sẽ là gia số của góc mở, vấn đề là bạn dò tìm ra các hệ số Kp,
Ki, cho phù hợp. Khi tính ra, đơn giản cho nó là độ mở luôn. Nếu thấy quá lớn, tìm hệ số Kp,
Ki để giảm xuống. Đúng là phải chặn, để tránh dao động. Nôm na, khi thấy xe giảm tốc độ,
phải tăng ga, nhưng theo kinh nghiệm về chiếc xe của mình, sẽ tìm ra mức độ hạn chế sự
tăng/giảm ga để tránh bị giật cục.
PPIICC
20-12-05, 09:50
Ko nhầm đâu bạn ạ. Vì mình ko phải dân tự động hóa nên diễn đạt có thể ko đúng từ ngữ lắm.
Góc mở có quan hệ với nhiệt độ của lò, chắc chắc chứ. Nếu nói một các thô thiển, nếu nhiệt độ
lò chưa bằng nhiệt độ đặt thì góc mở sẽ điều chỉnh và tính toán lại để thay đổi công suất. Việc
điều chỉnh đó như thế nào là phụ thuộc vào các đại lượng P,I,D.
Nói tóm lại:
-Góc mở và % công suất là một biểu thức phụ thuộc vào nhau. Dùng bảng tra để tìm ra cái này.
-Tính được % công suất theo biểu thức PID dựa vào các thông số: T đặt, T đo(T1,T2 T hiện
tại), Ki,kp,kd. Sau khi tính được mức công suất(hay dải công suất, hay % công suất) thì dùng
bảng tra để tra ngược trở lại tìm ra góc mở tương ứng với % công suất đó.
To AFH: PID mình có làm rồi, nói đúng hơn đã làm PI. Lúc đầu có khó khăn đôi chút, nhưng rồi
sau nhờ có sư phụ mách nước nên hiểu được và lập trình được. Độ phân giải của ADC là 0.1 độ
thì mình khống chế sai số được 0.2-0.3 độ thì ngon ơ. Nhưng khó cái là chỉnh kp,ki rất mất thời
gian.
Luôn tiện đây mình nói vê cách chỉnh Kp,ki=1/Ti mọi người góp ý kiến nhé:
-Bước 1: cho ki=0,chỉnh Kp tăng dần:=1 quan sát một quá trình, =2 rồi quan sát =i rồi quan

sát
Giả sử khi ki=a, nhiệt độ chưa vọt lố, nhưng ki=a+1 thì vọt lố(nhiệt độ tăng quá nhiệt độ đặt tại
thời điểm nào đó). Vậy giá trị ki=a được chấp nhận.
-Bước 2: ki=a, rồi ki=1 quan sát, = 2 quan sát Ki càng nhỏ thì ổn định nhưng thời gian bám lâu.
Vậy chỉnh ki đến b, rròi b+1, nếu b+1 bị vọt lố mà b ko bị vọt lố thì giá trị b được lưu lại
-Bước 3: đặt kp=a,ki=b. Ấn nút chạy :-w
AFH
20-12-05, 10:26
Gửi bạn PCIICC
Bạn mua sách lý thuyết điều khiển tuyến tính của thầy Nguyễn Doãn Phước về đọc nhé. Trong
đó nói rõ cách xác định tham số PID đó.
Tóm lại là bạn chưa hiểu rõ về PID (tớ nói bạn đừng buồn và đừng giận). Bạn cần học PID cho
bài bản để tránh những hậu quả kô ngờ. Thiệt đó, nếu kô tin lời tôi, rồi một ngày bạn sẽ nếm trải
điều này. Nhất là khi bạn thiết kế PID cho động cơ. Tin hay kô thì tùy.
Chúc bạn thành công
AFH
PPIICC
20-12-05, 12:20
Cảm ơn lời khuyên của bạn. Bạn có thể chỉ rõ một số vấn đề sai sót của mình được ko? vì mình
có đọc một số quyển rồi, và thưch tế thì đã làm được, nhưng có thể gặp một số trường hợp ko
ngờ nhưng chưa gặp như bạn nói.
Amateur
20-12-05, 17:19
Vẫn nhầm 2*PIC ơi. Góc mở và công suất thì OK. Công suất và nhiệt độ thì lại khác. NHiệt độ
phụ thuộc vào cân bằng nhiệt lượng trao đổi giữa lò và vật tiêu thụ nhiệt.
Cũng như độ mở tay ga tỷ lệ với công suất động cơ, như k0 tỷ lệ với tốc độ xe. Tốc độ phụ thuộc
tải trọng, độ dốc đường, tốc độ gió
Các bước lựa chọn thì cứ theo sách, tôi làm rồi, ổn đấy.
PPIICC
20-12-05, 17:42

NHiệt độ phụ thuộc vào cân bằng nhiệt lượng trao đổi giữa lò và vật tiêu thụ nhiệt.
Nếu vậy cái đó lấy ở đâu ra vậy? bác nói mơ hồ quá. Việc mô hình hóa để tìm ra hàm đối tượng
và suy ra các hệ số ki,kp,kd thường làm trên lý thuyết, thực tế thì người ta chỉnh theo kinh
nghiệm hoặc cao cấp hơn các bộ điều khiển hiện nay có chế độ tự chỉnh hết cả rồi.
Còn tui, cứ công thức mà tương với việc điều khiển nhiệt:
e=Tset-T đo.
s=s+e (s là thành phần tích phân)
%Công suất= k*e+ki*s
Và giới hạn các thông số như: s,% công suất trong một dải nào đó.
Và từ việc tính được % công suất này, sẽ tính ra được góc mở > thay đổi góc mở.
Còn việc chỉnh k,ki cho phù hợp lò nhiệt thì cần mất ít thời gian.
To AFH: nếu bác tìm ra cái sai của tui thì tâm phục khẩu phục, còn chỉ nói thì ai cũng nói được.
AFH
20-12-05, 20:36
Nếu vậy cái đó lấy ở đâu ra vậy? bác nói mơ hồ quá. Việc mô hình hóa để tìm ra hàm đối tượng
và suy ra các hệ số ki,kp,kd thường làm trên lý thuyết, thực tế thì người ta chỉnh theo kinh
nghiệm hoặc cao cấp hơn các bộ điều khiển hiện nay có chế độ tự chỉnh hết cả rồi.
Còn tui, cứ công thức mà tương với việc điều khiển nhiệt:
e=Tset-T đo.
s=s+e (s là thành phần tích phân)
%Công suất= k*e+ki*s
Và giới hạn các thông số như: s,% công suất trong một dải nào đó.
Và từ việc tính được % công suất này, sẽ tính ra được góc mở > thay đổi góc mở.
Còn việc chỉnh k,ki cho phù hợp lò nhiệt thì cần mất ít thời gian.
To AFH: nếu bác tìm ra cái sai của tui thì tâm phục khẩu phục, còn chỉ nói thì ai cũng nói được.
Ái chà, chưa chịu khuất phục đây. :D
Thế này nhé,
Thứ nhất: với chương trình trên của bạn, tôi không gán nó bằng %Công Suất mà gán góc mở
anpha = k*e+ki*s thì có được không? bạn nghĩ thử coi? Nếu được thì tôi đâu cần quan tâm đến
công suất phải kô?

Thứ hai:cách chỉnh Kp và Ki của bạn chả có cơ sở lý thuyết gì cả, đấy là chỉnh mò. Trong sách
có dậy cách chỉnh theo đặc tính tải, hoặc theo mô hình toán học (thông thường theo đặc tính tải
thì dễ hiểu hơn vì nó thực tế còn tính theo mô hình toán học thì có phải tải nào ta cũng biết mô
hình toán học đâu?)
Thứ ba: Chỉnh thông số Kp và Ki như bạn thì mấy ngày mới xong? Bởi quá trình nung nhiệt thì
nhanh, nhưng quá trình chờ nó nguội có khi cả tiếng đồng hồ.
Thứ tư: Công thức của bạn thiếu mất chu kỳ trích mẫu. Cái này cũng quan trọng đấy. hay bạn lấy
chu kỳ trích mẫu là 1 giây?
Thứ năm: Bạn không thiết kế bù bộ tích phân khi đầu ra lớn hơn U_max hoặc nhỏ hơn U_min.
Bạn có ghi là giới hạn s, nhưng bộ tích phân thì ta kô giới hạn mà phải thiết kế bù dư và bù hụt,
nếu giới hạn thì biết bao nhiêu là đủ?. Việc này bạn đã nghĩ đến chưa? ví dụ kiểu int chỉ đến
32767 thôi, cộng thêm 1 là nó về -32768 đấy.
Vậy đủ chưa bạn PPIICC??
Thật ra tớ cũng chả giỏi gì hơn bạn, chẳng qua là tớ cũng bị mắc nhiều lỗi trong lập trình và
trong giải thuật một bài toán cụ thể nên càng thấm thía hơn việc phải học kỹ lý thuyết, từ đó có
một đường lối đúng đắn để giải quyết bài toán. Tớ khuyên bạn học cho bài bản là vì thế, chứ kô
có ý lên mặt dậy đời. Thông cảm nha.
Còn ví dụ về cái "trường hợp kô ngờ" thì tôi xin nêu một ví dụ thế này. Giả sử bạn dùng PID để
điều khiển một tay đòn bám theo một tín hiệu nào đó. Nhưng vì lỡ để giá trị Kp lớn và Ti nhỏ.
nên động cơ chạy công suất lớn nhất ngay ở giai đoạn ấn nút START xong. Kết quả là do quán
tính, cái cánh tay đòn ấy phang bay luôn cả cái công tắc báo giới hạn chuyện động đi. :D :D :D
Bạn thấy tai hại chưa?
Chúc bạn thành công
AFH
PPIICC
20-12-05, 21:18
Hê hê bác chẳng làm tui khuất phục một chút nào cả. Tui lần lượt tả lời theo thứ tự của bác từ
thứ nhất đến thứ hết nhé.
-Thứ nhất: đó là cách của bác, còn tui lại dùng % công suất làm biến trung gian. Sau khi tính
được % công suất thì suy ra được góc mở dùng bảng tra hoặc dùng một hàm liên hệ. Việc này sẽ

làm tuyến tính hơn, bạn đã nghĩ điều này chưa? và biết lý do tôi dùng như thế sẽ hợp lý hơn bạn
là cái chắc.
-Thứ 2 và thứ 3: tôi thấy một số tài liệu họ chỉnh như vậy, cái này ko phải tôi nghĩ ra, đọc một số
tài liệu về đồng hồ nhiệt của Hàn Quốc bạn sẽ biết. Nếu muốn chỉnh nhanh hơn thì phải dự đoán
mà ko làm kiểu tăng từng bước mà là tăng nhảy cóc.
Các câu còn lại:4-5
Dăm ba câu làm sao tôi nói hết tất cả các vấn đề cụ thể ra được. Vấn đề bạn đặt ra đó hết sức vô
lý.
-Thứ 4: cái này thì bạn nói làm gì? tôi làm tốt hơn bạn về khoản này là cái chắc. Vấn đề xử lý
nhiễu đầu đo và lấy mẫu của tôi cực ổn. Số cuối cùng của tôi ko hề nhấp nháy một tý nào cả.
Và cái này bạn lại sai, chu kỳ lấy mẫu ko quan trọng, mà là chu kỳ điều khiển. Anh có thể lấy
mẫu liên tục nhưng ko cần điều khiển thì chết toi à? Vậy bạn sửa lại là chu kỳ điều khiển mới
đúng. Chu kỳ điều khiển càng lớn thì đồng nghĩa thành phần tích phân lớn. Quá trình nhiệt
thường biến đôi nhiệt chậm, nên thường người ta đặt khoảng trên dưới 1 giây. Của tôi, đại lượng
này tôi có thể vào bằng tay(nút ấn) và thường đặt = 0.5 giây.
-Thứ 5: Tôi vẫn giới hạn vì rằng nó không thể lớn hơn giới hạn của % công suất. Nó chỉ tăng
tính ổn định chứ ko làm giảm chất lượng.
Ví dụ: % công suất có 100 mức: 0.1 100(max) thì đương nhiên thành phần tích phân này phải
<100*ki chẳng hạn. Bởi thế thành phần này tương đối lớn nên dùng kiểu long int. Bởi thế rất
nhiều thứ thứ tôi đều có giới hạn trên và dưới.
Thứ hết: khi xây dựng một hệ điều khiển, phải có chế độ Protect và cảnh báo. Ví dụ: các cảnh
báo như đứt sensor, đứt tải(điều khiển mãi nhưng ko nhiệt độ ko tăng ) cái đó là những việc
phải làm khi đưa thiết bị bàn giao cho khách hàng.
Tôi vẫn mong bạn có cái gì thú vị hơn, và mong bạn có một thói quen suy nghĩ kỹ vấn đề người
khác nói trước khi phát ngôn.
Mong bạn bớt giận /:) nếu có gì quá
AFH
20-12-05, 22:58
Chả biết nói gì hơn, bạn này chả hiểu gì về PID, thế mới buồn. :(
Mất công mình trả lời. :(

Bạn cứ làm theo cách của bạn. Tôi chả có gì thú vị dành cho bạn nữa rồi. :D
AFH
falleaf
20-12-05, 23:28
F nhảy vào một tí được không nhỉ?
Bác ba quẳng cho cái link này trong lúc đang bận rộn :(
Nhiệt độ đặt (Tset) (+-) > PID (U) >(a= góc mở hoặc A công suất) Máy tạo nhiệt >
Nhiet độ (T)
Rồi sau đó lấy T loop lại cái chỗ (+-).
Đó là hệ thống của các bác phải không?
Vậy thì làm như cách của 2PIC hay của AFH đều đúng. Vấn đề là các bạn quan niệm ngõ vào
của máy tạo nhiệt là góc mở hay công suất máy mà thôi.
Cái điều khó khăn mà chúng ta không biết, đó là hàm truyền của máy tạo nhiệt vào trong căn
phòng. Có nghĩa là dù góc mở a hay công suất A thì các bạn cũng không thể nào biết được hàm
truyền này.
Như vậy, từ U chuyển sang a hay A thì chúng ta đều dùng hệ số tuyến tính để chuyển. Công thức
có thể viết lại như sau:
e = Tset - T
U = P.e + D.diff(e) + I. int(e);
A = kA * U
hoặc a = ka *U
Hay A = kA*P. e + kA*D.diff(e) + kA*I.int(e);
hoặc a = ka*P. e + ka*D.diff(e) + ka*I.int(e);
Đặt P' = kA*P
Mối quan hệ giữa ka và kA là một mối quan hệ khá phức tạp. Tùy theo chúng ta quan niệm, tôi
tạm thời chưa bàn ở đây.
Vậy thì chúng ta có lại công thức của bộ PID. Như vậy, với quan niệm này, cả hai bạn đều đúng.
Chỉ có điều chọn bộ PID như thế nào cho đúng? Đây là một điều rất cần quan tâm.
Cả bài toán PID điều quan trọng nhất là tìm các hệ số này mà thôi.
Có rất nhiều cách biến đổi, và để tìm ra các hệ số này, hoặc có thể ghép thêm các bộ điều khiển

khác, để tự tìm ra hệ số này, gọi là các hệ điều khiển lai.
Tuy nhiên, trong giới hạn của em đặt ra bài toán (thiệt tình là em L có viết thư cho tôi, nhưng tôi
bận đến mức độ không thể trả lời được, nhưng vì tránh tình hình anh em lại gây chiến với nhau,
cho nên phải post bài).
Bạn 2PIC,
Bạn có thể thấy rằng, cho dù bạn cố gắng làm cho công suất có vẻ tuyến tính hơn, khi chuyển đổi
qua công suất bằng cách dùng bảng tra, thì thực ra, mối quan hệ giữa nhiệt độ phòng nhiệt và
công suất cũng chính là một mối quan hệ không tuyến tính.
Bởi vì bạn quên chưa kể đến khả năng hấp thụ nhiệt của thành lò và của các vật liệu trong lò.
Mối quan hệ này là phi tuyến. Nếu như mối quan hệ này là nhỏ, bạn có thể ước lượng được đặc
tính hàm truyền của lò. Nhưng thực tế không phải vậy. Bởi vì một điều rất rõ ràng rằng, nếu như
có được đặc tình hàm truyền này, thì chúng ta có thể điều khiển chỉ cần dùng P, nếu bạn đã coi
các tiêu hao là nhỏ.
AFH,
Bạn sai ở chỗ nói về chu kỳ lấy mẫu. Bởi vì trong công thức, khi đã xét chu kỳ lấy mẫu, thì chu
kỳ lấy mẫu được coi là 1 đơn vị thời gian tsampling. Đơn vị trong hàm truyền PID bạn hoàn toàn
có thể tính bằng 1 tsampling.
Thời gian lấy mẫu chỉ có giá trị, khi bạn khảo sát hàm truyền của lò. Khi đó, giả sử hàm truyền
của lò là L(s) (từ công suất hoặc góc mở trên cho nhiệt độ ngõ ra). Thì lúc đó, bạn phải rời rạc
thành hàm L(z). Lúc này mới kể đến thời gian sampling.
Chính vì không có L(s), cho nên việc giả định thời gian sampling đều không có ý nghĩa gì. Bởi vì
với mọi hàm PID(s) bạn đều có thể biến đổi thành hàm PID(z). Nhưng vì bạn không có hàm
truyền của plant L(z), vậy thì việc biến đổi sang miền rời rạc của PID cũng không cần thiết. Khi
viết các công thức PID cũng không cần kể đến thời gian tsampling.
Theo kinh nghiệm điều khiển nhiệt độ bằng PID, thì hệ số I không ảnh hưởng lớn. Bởi vì nhiệt
độ lò biến đổi khá chậm, bạn dùng PD là đã đủ tốt rồi. Đây là vấn đề kinh nghiệm của một số
người đã làm PID với lò nhiệt. Hệ số I cũng khá nhỏ.
falleaf
20-12-05, 23:28
Bởi vì quá trình nhiệt diễn ra như sau:

- mở máy, mở công suất. Công suất xem như xấp xỉ với nhiệt lượng tỏa ra ở bề mặt máy. Nhiệt
lượng này lan tỏa vào trong phòng, sẽ gần như xấp xỉ bậc 3 với kích thước phòng. Mà kích thước
này với đơn vị m cũng là một hệ số đáng kể.
- Hệ số lệch giữa nhiệt độ thường 30C và 31C chẳng hạn, thì có thể thấy công suất phải thay đổi
rất lớn để tăng được 1C, và đáp ứng lại rất chậm. Chính vì vậy, nếu dùng I, cố gắng tăng nhanh
nhiệt độ lò, thì lúc giữ cho nhiệt độ lò ổn định lại rất khó, vì đáp ứng chậm. Nó như hiện tượng
trễ.
- Với động cơ, thì mình thườgn chú trognj đến việc tăng rising time, nhưng với lò nhiệt, thì mình
lại thường chú trọng đến sự ổn định. Chính vì thế mà đối với lò nhiệt, I thường có giá trị nhỏ.
Những vấn đề điều khiển PID, có thể giải toán rất hay, nhưng mà khi áp dụng thực tế, thì thường
là mình dùng nhiều đến kinh nghiệm. Nếu bây giờ mà ngồi tìm hàm truyền max của lò, làm vài
thí nghiệm để ước lượng hàm truyền của lò như làm với động cơ, thì có nước mà đốt cả đống
hàng. Bởi vì không có hàng ở trong đó, thì nó không thể hiện được đặc tính nhiệt đúng với
những gì mình muốn làm. Phải đưa cái gì đó vào, có khả năng hấp thụ nhiệt giốgn như món hàng
mình muốnnung thì mới được.
Hơn nữa, thời gian thực hiện thí nghiệm cũng khá dài, bởi vì một ván đề, với động cơ, mình có
thể có giá trị âm của điều khiển, nhưng với máy tạo nhiệt, thì không thể làm cho nó có giá trị âm.
Nếu như có một máy thổi khí lạnh vào, thì mình có thể làm cho nó có một giá trị âm (so với
nhiệt độ đặt). Lúc này có thể biến đổi nhanh hơn một chút, nhưng dù sao, ảnh hưởng của nhiệt
cũng rất chậm. Chính vì vậy, việc tìm hàm truyền với lò nhiệt gần như không khả thi.
Nếu liều lĩnh, có thể làm một chuyện như sau. Bỏ khối hàng vào, mở công suất tối đa, lấy mẫu
liên tục, mở đến khi nào đạt được nhiệt độ cao nhất, nằm ngoài khoảng giới hạn của mình.
Vd: mình cần nung lên đến 200C, thì mình mở công suất lò lên cao nhất, cho nó lên đến 220C rồi
ngừng lại. Từ đó vẽ đặc tuyến thuận của lò. Sau đó, chờ cho lò hạ nhiệt độ xuống, vẽ đặc tính
ngược của lò. Chỉ làm duy nhất 1 lần, chắc cũng hết một ngày. Nó có trễ, và tiêu một lô hàng.
Sau đó tin tưởng rằng thí nghiệm của mình không bị sai, và máy tao nhiệt không bao giờ bị hao
mòn. Mình có thể dùng matlab để tìm ra hàm truyền ước lượng của lò.
Như vậy, chúng ta sẽ xem xét tính khả thi của mỗi cách làm, và cũng xem xét luôn chi phí chấp
nhận để đầu tư. Hy sinh một lô hàng để làm thử, hoặc là ngồi dò. Tùy theo yêu cầu của khách
hàng và khả năng chi trả của họ. Nếu họ giàu, muốn ổn định cao, thì bảo họ hi sinh nhiều nhiều

lô hàng một tí, thì tính gần đúng sẽ tốt hơn :D
2PIC,
Chu kỳ lấy mẫu sampling time chính là chu kỳ của hệ điều khiển, chứ bạn không nên hiểu đó là
chu kỳ lấy cái mẫu nhiệt độ. Khi người ta nói chu kỳ lấy mẫu, có nghĩa là nói đến sampling time.
Cái này là bạn dùng từ sai.
AFH,
Công thức của 2PIC đưa ra hoàn toàn đúng, chỉ có điều đó là bộ điều khiển PI bình thường,
chẳng qua là bỏ đi phần D, cũng là một kinh nghiệm điều khiển lò nhiệt. Cái này tôi không biết.
Nếu bỏ đi phần D, nhiệt độ lò sẽ dễ bị dao động lắm, bởi vì nó đáp ứng chậm. Chỉ cần nó lệch
một tí, thì P sẽ thay đổi nhiều, mà P đáp ứng lại bị trễ, thế nên cứ trồi lên hạ xuống. Tôi nghĩ nên
có thêm thành phần D thì sẽ ổn định hơn (định tính, không định lượng, cái này các bạn áp vào
thực tế thì mới biết được).
Về công thức của 2PIC đúng, là bởi vì int(e) chính là một cái tổng từ điểm đầu đến điểm cuối,
của tất cả các sai số trong hệ rời rạc. Và chúng ta đang làm việc trên hệ rời rạc.
Vậy int(e, k+1) = s(k+1) = s(k) + e(k);
cái này hoàn toàn chính xác.
2PIC,
Bạn nói thành phần công suất phải nhỏ hơn Ki*int(e) là sai. Bởi vì lúc đó, bạn không thể biết
được độ lệch do sai số gây ra, mà bạn phải có một hàm trước khi output để chặn công suất lò lại.
A = kA *U
if A > A_max, A = A max, if A < A_min, A = A_min;
Đây là điều bắt buộc phải làm.
Vì chugns ta hoàn toàn có thể chọn được các giá trị Ki, Kp, Kd, lớn, để hệ đáp ứng nhanh.
Nhưng nếu mới mở lò lên, thì lúc nào U*kA cũng lớn hơn A_max, đó là chắc chắn. Khi đó phải
chặn lại bằng A_max.
Về công thức của bạn đưa, cũng chỉ là công thức để viết lại dưới dạng hàm rời rạc, chứ không
phải là cách để tìm Kp và Ki, công thức này chẳng có ý nghĩa gì trong việc tìm Kp và Ki gì cả.
Mong các bạn xem xét lại những vấn đề này, bởi vì có thể do cáh dùng từ, và khi đọc tài liệu
nước ngoài, các bạn dịch ra bị sai, cho nên còn có vấn đề tranh cãi, chứ đa số các điểm mà các
bạn đề cập đều chính xác cả.

Chúc vui.
PPIICC
21-12-05, 08:31
Em vẫn có một số điểm chưa đồng ý với một số luận điêm của 2 người.
-Theo tôi, quy ra công suât là dạng hợp lý nhất.
Ko hiểu ý các bạn hiểu góc mở như thế nào? nếu ko dùng dại lượng % công suất làm trung gian
mà tương luôn góc mở sẽ gây ra sự phi tuyến cực lớn do biên độ sóng sin ko đều. Góc mở gần 0
và 180 chứa sự thay đổi công suât rất ít, còn góc mở ở 90 độ lại chứa một phần công suất rất lớn.
Ví dụ từ: "90 độ rồi đến 91 độ" sẽ cho một sai lệch công suất > nhiễu lần nếu "5 độ lên 6 độ".
-Cái PID cho lò nhiệt thì bác F xem lại, do tốc độ tăng nhiệt chậm nên thành phần D bỏ qua chứ I
tuyệt đối ko được bỏ qua, nó là thành phần quan trọng nhất đó.
-Cái khái niệm chu kỳ lấy mẫu và chu kỳ điều khiển khác hẳn nhau. Với nhiệt độ, có thể anh lấy
mẫu liên tục tốc độ cao rồi chia trung bình, loại bỏ những điểm có độ tản mát cao thì cho kết
quả càng tốt. Sau khi lấy giá trị trung bình tin cậy này vào việc điều khiển. Nửa giây tôi update
thay đổi lại thống số một lần nhưng tôi có thể lấy mẫu 100 lần không ai bắt tôi mà tính trung
bình 100 giá trị này thì còn cho kết quả tốt hơn. Đấy là ý tưởng chung, còn thực tế thì lam khác
đi tý chút.
-Về thành phần tích phân cũng phải giới hạn vì:
Ví dụ % công suất max là 100, giả sử k=50, ki=2 vậy:
100>=50*E+2*S
> 2*S>100 >S>=50.
Vậy chắc chắn cần giới hạn. Nếu ko thì khi S>50, có thể thành phần tỷ lệ ko còn ý nghĩa một
chút nào cả.Và tich phân đã quá cao lớn hơn 100 thì tất cả thành phần tham gia vào điều khiển
như I,D là có thể vứt đi hết
AFH
21-12-05, 09:21
AFH,
Bạn sai ở chỗ nói về chu kỳ lấy mẫu. Bởi vì trong công thức, khi đã xét chu kỳ lấy mẫu, thì chu
kỳ lấy mẫu được coi là 1 đơn vị thời gian tsampling. Đơn vị trong hàm truyền PID bạn hoàn toàn
có thể tính bằng 1 tsampling.

Thời gian lấy mẫu chỉ có giá trị, khi bạn khảo sát hàm truyền của lò. Khi đó, giả sử hàm truyền
của lò là L(s) (từ công suất hoặc góc mở trên cho nhiệt độ ngõ ra). Thì lúc đó, bạn phải rời rạc
thành hàm L(z). Lúc này mới kể đến thời gian sampling.
Chính vì không có L(s), cho nên việc giả định thời gian sampling đều không có ý nghĩa gì. Bởi vì
với mọi hàm PID(s) bạn đều có thể biến đổi thành hàm PID(z). Nhưng vì bạn không có hàm
truyền của plant L(z), vậy thì việc biến đổi sang miền rời rạc của PID cũng không cần thiết. Khi
viết các công thức PID cũng không cần kể đến thời gian tsampling.
Theo kinh nghiệm điều khiển nhiệt độ bằng PID, thì hệ số I không ảnh hưởng lớn. Bởi vì nhiệt
độ lò biến đổi khá chậm, bạn dùng PD là đã đủ tốt rồi. Đây là vấn đề kinh nghiệm của một số
người đã làm PID với lò nhiệt. Hệ số I cũng khá nhỏ.
Úi, giờ em mới nghe nói đến điều khiển PID không cần quan tâm tới thời gian trích mẫu.
Bác F nói điều khiển nhiệt kô cần dùng đến bộ I là sai hoàn toàn. Sai 100% luôn. giả sử bác cần
điều khiển từ 0 đến 1000 độ.
Theo bộ PID của bác là: U_dieu_khien = Kp*e+Kd*de
Kp: hệ số khuếch đại bộ P lấy ví dụ Kp=1;
Kd: hệ số khuếch đại bộ D với Kd=(Kp*Td)/T_sampling ; lấy ví dụ Kd=0.5
khi cho hệ thống chạy, nhiệt độ tăng dần, nhưng khi đến khoảng 700 độ thì gia trị đầu ra như sau.
U=Kp*300 + Kd*0 (vì de là đạo hàm của e, e biến đổi chậm nên de ~ 0
Do vậy hệ thống cứ mãi nằm ở vị trí nhiệt này. Kô tăng hơn được nếu kô có bộ tích phân. Cái
này đề nghị bác F xem lại nhé.
Chúc bác vui
AFH
PPIICC
21-12-05, 09:31
Úi, giờ em mới nghe nói đến điều khiển PID không cần quan tâm tới thời gian trích mẫu.
Bác F nói điều khiển nhiệt kô cần dùng đến bộ I là sai hoàn toàn. Sai 100% luôn. giả sử bác cần
điều khiển từ 0 đến 1000 độ.
Theo bộ PID của bác là: U_dieu_khien = Kp*e+Kd*de
Kp: hệ số khuếch đại bộ P lấy ví dụ Kp=1;
Kd: hệ số khuếch đại bộ D với Kd=(Kp*Td)/T_sampling ; lấy ví dụ Kd=0.5

khi cho hệ thống chạy, nhiệt độ tăng dần, nhưng khi đến khoảng 700 độ thì gia trị đầu ra như sau.
U=Kp*300 + Kd*0 (vì de là đạo hàm của e, e biến đổi chậm nên de ~ 0
Do vậy hệ thống cứ mãi nằm ở vị trí nhiệt này. Kô tăng hơn được nếu kô có bộ tích phân. Cái
này đề nghị bác F xem lại nhé.
Chúc bác vui
AFH
Cái này thì bác nói đúng, em ko phản đối
falleaf
21-12-05, 12:23
Em vẫn có một số điểm chưa đồng ý với một số luận điêm của 2 người.
-Theo tôi, quy ra công suât là dạng hợp lý nhất.
Ko hiểu ý các bạn hiểu góc mở như thế nào? nếu ko dùng dại lượng % công suất làm trung gian
mà tương luôn góc mở sẽ gây ra sự phi tuyến cực lớn do biên độ sóng sin ko đều. Góc mở gần 0
và 180 chứa sự thay đổi công suât rất ít, còn góc mở ở 90 độ lại chứa một phần công suất rất lớn.
Ví dụ từ: "90 độ rồi đến 91 độ" sẽ cho một sai lệch công suất > nhiễu lần nếu "5 độ lên 6 độ".
-Cái PID cho lò nhiệt thì bác F xem lại, do tốc độ tăng nhiệt chậm nên thành phần D bỏ qua chứ I
tuyệt đối ko được bỏ qua, nó là thành phần quan trọng nhất đó.
-Cái khái niệm chu kỳ lấy mẫu và chu kỳ điều khiển khác hẳn nhau. Với nhiệt độ, có thể anh lấy
mẫu liên tục tốc độ cao rồi chia trung bình, loại bỏ những điểm có độ tản mát cao thì cho kết
quả càng tốt. Sau khi lấy giá trị trung bình tin cậy này vào việc điều khiển. Nửa giây tôi update
thay đổi lại thống số một lần nhưng tôi có thể lấy mẫu 100 lần không ai bắt tôi mà tính trung
bình 100 giá trị này thì còn cho kết quả tốt hơn. Đấy là ý tưởng chung, còn thực tế thì lam khác
đi tý chút.
-Về thành phần tích phân cũng phải giới hạn vì:
Ví dụ % công suất max là 100, giả sử k=50, ki=2 vậy:
100>=50*E+2*S
> 2*S>100 >S>=50.
Vậy chắc chắn cần giới hạn. Nếu ko thì khi S>50, có thể thành phần tỷ lệ ko còn ý nghĩa một
chút nào cả.Và tich phân đã quá cao lớn hơn 100 thì tất cả thành phần tham gia vào điều khiển
như I,D là có thể vứt đi hết

Về vấn đề dùng a hay A tôi đã phân tích, đó là tùy thuộc vào quan điểm của mỗi người điều
khiển, tôi có kinh nghiệm với điều khiển động cơ, còn tôi nói kinh nghiệm lò nhiệt là của những
người đã làm thực tế và làm kiếm tiền. Tôi chưa tính toán kỹ lắm, vì hiện nay tôi đang rất bận,
bài viết chỉ có tính chất định tính, không có tính chất định lượng, nhằm giải quyết vấn đề tranh
chấp giữa các bạn trong tạm thời thôi.
à, bạn hiểu sai về thành phần tích phân, tổng các sai số của nó, cũng bao gồm số âm. Cho nên,
nếu bạn lấy tích phân một hàm sin, cho dù biên độ lớn đến đâu, thì thích phân của nó trên toàn
miền, cũng luôn luôn nhỏ hơn hoặc bằng tích phân của nó trên một nửa chu kỳ. Điều này có thể
chứng minh toán học được.
Do vậy, nó vẫn có khả năng dập dìu. Bằng chứng, thời điểm đầu nó vọt lên, sau đó nó vọt lố, vọt
lố này có thể bù vào thành phần tích phân. Do vậy, người ta nói hệ số tích phân ảnh hưởng mạnh
đến việc vọt lố.
Về từ ngữ, bạn có thể hiểu thế nào thì hiểu, nhưng với tôi, người làm điều khiển, sampling time
trong điều khiển khác với khái niệm lấy mẫu thử sample trong đo lường. Và chu kỳ lấy mẫu khi
chúng tôi nói, có nghĩa là chu kỳ lấy mẫu của hệ thống.
Còn việc bạn sử dụng từ ngữ nào, tôi không quan trọng, nhưng tóm lại, bạn hiểu đúng vấn đề là
được.
Về điều này nữa, bạn nên phân biệt giữa hai khái niệm, xử lý tín hiệu (signal processing) và làm
sạch tín hiệu (signal cleaning). Nó là hai khái niệm khác nhau. Việc dùng tín hiệu để làm gì, như
thế nào, đó là việc xử lý tín hiệu, còn việc lấy một tín hiều tốt để điều khiển, bạn có thể dùng đủ
thứ loại mạch lọc, cách lấy trung bình chỉ là một loại mạch lọc đơn giản thôi.
Chính vì thế, AFH nói vấn đề này là đúng, chu kỳ lấy mẫu, tiếng anh là sampling time. Nó hoàn
toàn chính xác.
falleaf
21-12-05, 12:28
Úi, giờ em mới nghe nói đến điều khiển PID không cần quan tâm tới thời gian trích mẫu.
Bác F nói điều khiển nhiệt kô cần dùng đến bộ I là sai hoàn toàn. Sai 100% luôn. giả sử bác cần
điều khiển từ 0 đến 1000 độ.
Theo bộ PID của bác là: U_dieu_khien = Kp*e+Kd*de
Kp: hệ số khuếch đại bộ P lấy ví dụ Kp=1;

Kd: hệ số khuếch đại bộ D với Kd=(Kp*Td)/T_sampling ; lấy ví dụ Kd=0.5
khi cho hệ thống chạy, nhiệt độ tăng dần, nhưng khi đến khoảng 700 độ thì gia trị đầu ra như sau.
U=Kp*300 + Kd*0 (vì de là đạo hàm của e, e biến đổi chậm nên de ~ 0
Do vậy hệ thống cứ mãi nằm ở vị trí nhiệt này. Kô tăng hơn được nếu kô có bộ tích phân. Cái
này đề nghị bác F xem lại nhé.
Chúc bác vui
AFH
Như tôi đã trình bày, vấn đề phân tích trên, hiện tôi đang rất bận, nhưng vì tránh các bạn tranh
luận quá xa, dẫn đến tranh cãi, và tự nhiên từ một bất đồng, biến thành tranh luận, tranh luận
thành tranh cãi, tranh cãi thành bất hòa Chính vì vậy tôi phải post bài. Tôi viết rất rõ là đây là
suy nghĩ định tính, tôi vẫn chưa xem lại việc này đúng hay sai, nhưng tôi có nghe một anh bạn
của tôi nói lại như vậy về hệ điều khiển nhiệt mà anh bạn tôi đã làm.
Tuy nhiên, các bạn xem lại, Kd, càng lớn, thì steady error càng nhỏ. Đây là về mặt lý thuyết, tôi
không hiểu các bạn chứng minh như thế nào, nhưng nó là lý thuyết, vì tôi chưa có thời gian để
xem kỹ các vấn đề các bạn nói, cho nên chưa thể tiếp tục thảo luận với các bạn về vấn đề này
được.
Tuy vậy, tóm lại, các bạn đã hiểu được vấn đề, và đã có những điểm tưởng đồng, như vậy lả rất
tốt, mong rằng các bạn tiếp tục giúp em L giải quyét vấn đề của em ấy thật tường tận.
Chúc vui.
falleaf
21-12-05, 12:40
Xin lỗi, vì đang vội, nhưng đã trả lời thì trả lời cho hết luôn:
Thời gian lấy mẫu, tôi không nói là không cần quan tâm. Thực ra, vì các bạn lập trình, cứ hay bị
cứng nhắc giữa thời gian lấy mẫu, vận tốc, và gia tốc của một đại lượng biến thiên (tôi nói vận
tốc và gia tốc theo nghĩa rộng, có thể hiểu là tốc độ biến đổi).
Nếu như tôi nói vận tốc của một động cơ, là 3000 vòng/phút, và tôi nói vận tốc của động cơ là
30xung/samplingtime. Điều này có khác nhau không?
Như vậy, nếu tôi đưa vào chương trình tính toán là xung, chứ không phải là vòng, thì điều này tôi
không cần quan tâm về mặt thời gian.
Các bạn thật chú ý đến điều này. Nếu như các bạn quy đổi thời gian lấy mẫu, sang đơn vị thời

gian chuẩn, công thức tính toán của các bạn sẽ rất phức tạp, vì thường nó phải nhân với một số
thực nhỏ, mà điều này không có lợi cho vi điều khiển, vi xử lý
Chưa kể đến việc, các bạn mất thời gian vào việc tính toán đó.
Ngoài ra, như tôi nói, khi các bạn không cần quan tâm và biến đổi rời rạc, việc xác định
sampling time không phụ thuộc vào nguyên lý Shannon (do các bạn không có thông tin gì về
máy nhiệt), thì kết quả, các bạn không cần phải quan tâm đến sampling time, vì trong bài toán
này, các bạn chưa giải quyết vấn đề ổn định của hệ thống bằng nguyên lý Shannon.
Tất nhiên, nếu bạn cứ sampling liên tục, nó bị nhiễu, nếu bạn sampling ít, thì nó vọt lố, nói một
cách nôm na nguyên lý shannon là như vậy. Nhưng thực chất, nó để đảm bảo cho thời gian lấy
mẫu của các bạn có một giá trị bị chặn. Nếu tần số lấy mẫu lớn hơn tần số này, thì đảm bảo có
thể tạo lại tín hiệu liên tục gần với lúc đầu.
Chính vì vậy thời gian lấy mẫu trong thuật toán, hãy coi là 1 đơn vị thời gian. Tất cả các thuật
toán lập trình rời rạc trên đời này đều làm như vậy, có thể các bạn chưa làm với nó, nhưng tôi
chưa bao giờ thấy ai viết thuật toán tính toán phải tính đến thời gian lấy mẫu cả.
Chúc vui.
AFH
21-12-05, 13:18
thôi, chủ đề này chấm dứt ở đây đi, bạn L chắc cũng học được nhiều điều từ cái này rồi. Mỗi
người một cách hiểu và ứng dụng thế này thì khó mà nhất quán quan điểm lắm. Chỉ mong mỗi
người hãy tự suy nghĩ về tính đúng đắn của phương pháp mình đang sử dụng là được rồi.
AFH
thaithutrang
20-02-06, 23:14
Hihi tự nhiên em thấy cái luồng này ở đây,tiếc quá, vì biết hơi muộn. Nhưng ko sao:
-Anh AFH thì điều khiển, tính toán biểu thức PID với đầu ra là góc mở luôn.
-Anh ppiicc thì đầu ra là công suất, sau đó suy ra góc mở(qua bước trung gian là công suất).
Cả 2 cách đều không sai, nhưng cách nào hợp lý hơn?
thaithutrang
22-02-06, 22:10
Theo em thì cách anh afh đơn giản hơn nhưng cách anh ppiicc lại hợp lý hơn đó.

opentdoors
24-02-06, 14:40
Các tham số PID sử dụng để điều khiển lò là dựa trên phương pháp thực nghiệm Ziegler-Nichol.
Do phương pháp này là dựa trên quỹ đạo nghiệm nên để điều khiển chính xác, cần phải sử dụng
Fuzzy Logic. Khi khối xử lý PID có khả năng tự điều chỉnh các tham số của nó thì khối này phải
có thuật toán auto-tuning.
Đây là một đề tài tốt nghiệp rất hay của ĐHBK TPHCM. Sử dụng AT89c.
Cách đây 1 năm tôi cũng nghe 1 người bạn bên Pháp kể về 1 bộ điều khiển dùng họ 8051 cho lò
xi-măng rất hiệu quả.
opentdoors
24-02-06, 14:51
Chào các bạn.
Mình đang làm về PID điều khiển nhiệt độ sử dụng AT89C51. Các bạn có thể chỉ giáo cho tôi
mấy chiêu về PID được không.
Chào.
Chúc vui vẻ.
Tôi lấy 1 quá trình hoạt động của 1 bộ điều khiển nhiệt độ Gerfan, có hỗ trợ "Dual-slop PID
Algorithm". Tức là nhiệt độ cần điều khiển nằm giữa 2 ngưỡng trên và dưới của nhiệt độ. Đầu ra
điều khiển triac sử dụng PWM, hoặc theo tần số.
Giá trị nhiệt độ thu được thông qua đầu dò J hoặc K, khi nhiệt độ lò đạt đến ngưỡng dưới của
khoảng nhiệt độ thì bắt đầu xử lý theo PID. Do đó đầu ra bộ điều khiển gồm đầu ra điều khiển
triac để đốt, và đầu điều khiển quạt làm lạnh (nếu cần thiết) và đầu cảnh báo khi nhiệt độ đo vượt
quá ngưỡng trên hoặc time-out.
AFH
28-02-06, 18:46
Theo em thì cách anh afh đơn giản hơn nhưng cách anh ppiicc lại hợp lý hơn đó.
Hợp lý ở chỗ nào vậy cô bé kia? Nói anh nghe xem nào.
AFH
qmk
28-02-06, 18:50

Hợp lý ở chỗ nào vậy cô bé kia? Nói anh nghe xem nào.
AFH
Nghe nói con gái có giác quan thứ 6 tốt lắm :D
thaithutrang
28-02-06, 20:09
Em mượn tạm và edit lại cái giản đồ xung này của anh ChiBang, tại box "Điện tử CS" luồng
"Ứng dụng uC đk công suất" để tiện phân tích
qmk
28-02-06, 23:32
Hihi, 3T về đọc lại sách rùi.
thaithutrang
28-02-06, 23:34
Hihi, 3T về đọc lại sách rùi.
Hihi anh qmk khích em để em nói à? Thế còn lâu nhé. Hihi
AFH
01-03-06, 00:15
Em mượn tạm và edit lại cái giản đồ xung này của anh ChiBang, tại box "Điện tử CS" luồng
"Ứng dụng uC đk công suất" để tiện phân tích
em nói là "để tiện phân tích" nhưng anh chưa thấy em phân tích. Vậy mong em phân tích cho anh
biết nhé. Có thể em sai rùi đó khi nói rằng cách tính theo công suất hợp lý hơn. ha ha :D
:D :D
AFH
qmk
01-03-06, 15:18
Thì em 3T định phân tích, nhưng mà phân tích một lúc thì thấy bí quá
Đành về đọc lại sách.
qmk cũng hay bị thế. :D
opentdoors
03-03-06, 14:07
Có thể dùng ADC 12 bit cho bộ điều khiển nhiệt độ, nhưng trong các bộ điều khiển nhiệt độ có

hỗ trợ PID mà chỗ tôi đang sử dụng chỉ dùng ADC 8 bit, để điều khiển những bếp nhiệt trên
dưới 300 độ C. Mà cái bộ ADC 8 bit này lại là on-chip của 83cxxx tại 11.0592MHz( lại 8051),
chỉ cho 256 mức.
Thế mà với 8 bit nó lại điều khiển tới hơn 300 độ. Tại sao thế nhỉ ?:D
Đầu ra của nó luôn là PWM để gia nhiệt, phần chấp hành gọi là trissr cho 3 pha 400V cấp cho
điện trở nhiệt. Không hề có đồng bộ hay dịch pha phiếc gì ở đây cả.
opentdoors
03-03-06, 14:32
Mà hình như mọi người chưa ai biết các lò nung trong công nghiệp được đốt nóng như thế nào
nhỉ. Điện trở nhiệt là cách hay gọi nôm na,chứ thực ra nó là cuộn cảm, giống như bếp dây may-
so Liên Xô ấy.
Trong công nghiệp nặng, thì các bếp này cần đến 1 quá trình giải nhiệt, và nó rất nguy hiểm cho
những ai có bệnh lý về tim mạch. Vì nó tạo ra sóng hài bậc cao, đôi lúc gây ra sự cộng hưởng
làm các vật dẫn điện như các máng cáp điện, các nền máy làm bằng vật liệu dẫn điện rung bần
bật.
HaiAu2005
04-03-06, 08:42
Nếu các bạn sử dụng MATLAB/Simulink làm mô phỏng cho hệ thống điều khiển PID sẽ hiểu rõ
hơn, và việc chọn các hệ số khuếch đại điều khiển Kp, Ki, Kd cũng sẽ dễ dàng hơn. Nếu dùng
C/C++ nên dùng Visual Studio 6.0 trở lên để có thể lập chương trình điều khiển hoặc mô phỏng
có thể hiển thị system response bằng đồ thị và có thể tạo ra giao diện với người vận hành
(operator) cũng sẽ dễ dàng thay đổi các khuếch đại điều khiển Kp, Ki và Kd hơn.
Việc tính thành phần int(e) theo tôi có thể thực hiện bằng cách sử dụng numerical integration
methods như Euler Methods, Runge-Kutta Methods, v.v Xin tham khảo tại địa chỉ sau:
/> />Công thức tính thành phần vi phân các bạn đưa ra int(e)(k+1) = int(e)(k) + e(k) có lẽ chưa được
chính xác lắm (theo công thức này thì sampling time luôn bằng 1 giây), mà cần phải thêm cả
sampling time (h) vào công thức thì mới chính xác hơn, nghĩa là int(e)(k+1) = int(e)(k) + h*e(k)
- đây chính là công thức tính tích phân theo phương pháp Euler đơn giản: cho phương trình vi
phân y_dot = f(y,u,t), công thức tính tích phân:
y_dot(k) = f(y,u,t);

y(k+1) = y(k) + h*y_dot(k);
(thay y_dot = e(k), và y bằng int(e) thì ta sẽ có công thức tính int(e) cho thành phần tích phân của
PID control). Nếu cần tính int(e) chính xác hơn có thể áp dụng các numerical methods bậc cao
hơn và chính xác hơn.
Khi tính giá trị tín hiệu điều khiển u(k) có lẽ nên đặt giá trị giới hạn cho nó để tránh trường hợp
giá trị u(k) đột nhiên tăng vọt.
Ai có nhu cầu tham khảo chương trình mô phỏng hệ thống điều khiển PID thì vào địa chỉ sau:
/>Download tài liệu Chapter 3. Đây là tài liệu cho một môn học về lập trình mô phỏng hệ thống
điều khiển dùng MATLAB/Simulink. Các bạn có thể chuyển MATLAB codes sang các ngôn
ngữ lập trình khác có lẽ không quá khó khăn. Nếu có câu hỏi hoặc trao đổi gì xin liên lạc tới địa
chỉ sau:

H.Â.
hungdv86
20-05-08, 17:16
Vậy các bác cho em hỏi đội tượng điều khiển của em là động cơ KDB 3 pha, điều khiển bằng
phương pháp thay đổi điện áp cấp cho satato dùng van Thyis tor, thì xây dựng hàm PID như thế
nào, em mới bước vào nghề nên còn gà lắm mong được sự giúp đỡ của các bác!
Coco
23-05-08, 16:27
Bạn định dùng chương trình gì điều khiển? Dùng PLC điều khiển qua biến tần hay lập trình cho
Ochip đưa tín hiệu ra để mở van Thyristor?
Jay
26-05-08, 00:10
Công thức bạn đưa ra là đúng rồi đấy. Nhưng tôi thấy bạn chưa hiểu rõ về PID vì vậy bạn nên
tìm mua sách mà học PID cho cẩn thận (cái món PID này tưởng dễ chứ thực ra khó phết đấy).
Còn về góc mở a thì bạn cho một biến đếm thời gian như bạn đã ghi ấy. nghĩ là góc mở 0 tương
ứng với 0 và góc mở 180 độ tương ứng với 10000 us (micro giây). Giá trị trả về của bộ PID bạn
cho qua bộ chặn trên và chặn dưới. Nghĩa là Umax=10000 và Umin = 0. Sau đó gán Biến đếm
thời gian = U là xong.

Việc điều chỉnh ổn định điều khiển phải được thực hiện qua các thống số là: Hệ số khuếch đại
Kp, Hằng số tích phân Ti và hắng số vi phân Td.
Chúc bạn thành công.
AFH
thế bạn có biết tính hay đo 3 hệ số đấy không,cái thời gian Td đấy đo được nhưng áp dụng vào
công thức chưa chắc chạy được,đa phần sv toàn dò bằng tay .
hungdv86
18-06-08, 15:24
Tốc độ của động cơ phụ thuộc điện áp cấp vào cho nó, mà điện áp lại phụ thuộc vào sự điều áp
của SCR, mà SCR lại phụ thuộc vào góc kích mở nó, mà góc kích lại phụ thuộc vào Uđk, em
dùng PLC đóng mở tiếp điểm và cấp áp Uđk, vậy bác nào cao chiêu chỉ em mò ra thông số cho
PID thì em cảm ơn nhiều nhiều.
Jay
21-06-08, 23:45
thì bạn có thể chọn 1 hế số kp nào đó theo bạn có thể tính toán ra dc,sau đó bạn phải tự dò ra hệ
số Ki.Mình nghĩ dù có dò hay mò thì bạn cũng phải tìm hiểu rõ về thế nào là PID,rất nhiều người
làm dc nhưng để hiểu rõ thì cũng không nhiều.Để có thể biết rõ hơn về PID bạn có thể tham
khao cuốn fundanmental,hoặc có thể đến gặp thầy Nguyễn Hồng Quang ở BK Hà Nội,Thày
Quang thuộc bộ môn Tự Động Hóa. Nếu bạn có thể tham khảo 1 vài cấu trúc của mạch analog
về Buck thì cũng rất hay và bổ ích trong việc hiểu về bộ PID số

×