Luận văn, 2010
Sơ lược:
Phần 1. Lý thuyết
Chương 1. Các khối cơ bản trong điều khiển nhiệt độ
Chương 2. Nhiệt độ – Các loại cảm biến nhiệt độ
Chương 3. Các phương pháp biến đổi AD
 Card PCL-818 của Advantech
Chương 4. Các phương pháp điều khiển
 Phương pháp PID số
Chương 5. Các Loại Mạch Kích Và Solid State Relay
Chương 6. Các loại IC khác
Phần 2. Phần Cứng
Phần 3. Lưu đồ giải thuật và chương trình
Tài liệu tham khảo
                
              
                                            
                                
            
 
            
                 96 trang
96 trang | 
Chia sẻ: lvcdongnoi | Lượt xem: 2746 | Lượt tải: 0 
              
            Bạn đang xem trước 20 trang tài liệu Điều khiển PID thông qua Card AD giao tiếp với máy tính PCL818, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
= 
 Hieäu chænh PI töông ñöông theâm vaøo nghieäm zero = -Ki/Kp vaø 
nghieäm cöïc s = 0 vaøo haøm truyeàn voøng hôû. Hieäu quaû cuûa baäc heä thoáng 
 45
taêng leân 1, theâm vaøo moät khaâu tích phaân vaøo haøm truyeàn heä chöa hieäu 
chænh vaø ñieàu quan troïng laø loaïi heä thoáng seõ taêng leân 1. Sai soá xaùc laäp 
cuûa heä coù khaâu PI seõ baêng ) ñoái vôùi tín hieäu vaøo laø haøm naác vaø baèng 
haèng soá tæ leä nghòch vôùi giaù trò Kp neáu tín hieäu vaøo laø haøm RAMP. 
1.4 Ñieàu khieån baèng khaâu vi tích phaân tyû leä PID 
Khaâu hieäu chænh khueách ñaïi tæ leä (P) ñöôïc ñöa vaøo heä thoáng 
nhaèm laøm giaûm sai soá xaùc laäp, vôùi ñaàu vaøo thay ñoåi theo haøm naác seõ 
gaây ra voït loá vaø trong vaøi tröôøng hôïp laø khoâng chaáp nhaän ñöôïc ñoái vôùi 
maïch ñoäng löïc. Söï coù maët cuûa khaâu vi phaân tæ leä (PD) laøm giaûm ñoä voït 
loá vaø ñaùp öùng ra bôùt nhaáp nhoâ hôn vaø heä thoáng seõ ñaùp öùng nhanh hôn. 
Khaâu tích phaân tæ leä(PI) coù maët trong heä thoáng seõ daån ñeán sai leäch tónh 
trieät tieâu( heä voâ sai). Muoán taêng ñoä chính xaùc ta phaûi taêng heä soá 
khueách ñaïi, song vôùi moïi heä thoáng thöïc ñeàu bò haïn cheá vaø söï coù maët 
cuûa khaâu PI laø baét buoäc. Khaâu hieäu chænh vi tích phaân tæ leä( PID ) keát 
hôïp nhöõng öu ñieåm cuûa khaâu PI vaø PD, coù khaû naêng taêng ñoä döï tröû pha 
ôû taàn soá caét, khöû chaäm pha. Söï coù maët PID ôû voøng hoài tieáp coù theå daån 
ñeán söï dao ñoäng trong heä do ñaùp öùng quaù ñoä bò voït loá bôûi haøm Dirac 
δ(t).Caùc boä hieäu chænh PID ñöôïc öùng duïng nhieàu trong coâng nghieäp 
döôùi daïng thieát bò ñieàu khieån hay thuaät toaùn phaàn meàm. Haøm truyeàn 
cuûa boä PID coù daïng: 
Gc(s)= KP + KDs + s
KI 
Vôùi caùc giaù trò KP ,KD, KI laø caùc haèng soá thöïc. 
Phöông trình vi tích phaân moâ taû söï töông quan giöõa tín hieäu ra 
u(t) vôùi tín hieäu e(t) cuûa boä ñieàu khieån PID laø : 
∫++= dtteKdttdeKteKtu IDP ).()(.)(.)( . 
Trong ñoù, e(t) laø sai leäch trong heä thoáng e(t) = r(t) – c(t). Vôùi r(t) 
vaø c(t) laø tín hieäu vaøo vaø ñaùp öùng ra cuûa heä thoáng. 
 Vaán ñeà thieát keá laø caàn xaùc ñònh giaù trò Kp, Ki, Kd sao cho thoaû 
maõn caùc yeâu caàu veà chaát löôïng. Ta haõy xem xeùt söï aûnh höôûng töøng 
khaâu trong qua 1trình ñieàu khieån chaát löôïng heä thoáng. 
Hieäu quaû cuûa phöông phaùp naøy laø ñieàu khieån ñöôïc naêng löôïng loø 
nhieät cho ñeán khi sai soá trung bình cuûa giaù trò nhieät ñoä laø 0. 
 46
heä thoáng soá 
Khi ta thu thaäp nhöõng thoâng soá cuûa loø nhieät, thoâng qua boä bieán 
ñoåi AD, DA duøng PCL 818L ñöa leân maùy tính ñeå xöû lyù. Do vaäy, ñeå 
ñieàu khieån chính xaùc hôn cho heä thoáng, ngöôøi ta söû duïng phöông phaùp 
hieäu chænh PID soá. Vaäy, PID soá laø gì? Hieäu quaû nhö theá naøo ? 
2. PHÖÔNG PHAÙP ÑIEÀU KHIEÅN PID SOÁ 
Quaù trình phaân tích tín hieäu rôøi raïc 
Tröôùc tieân, tín hieäu cuûa chuùng ta laø loaïi moät chuoåi xung, khoâng 
phaûi laø moät haøm lieân tuïc theo thôøi gian. Vì vaäy, ta thu nhaän thoâng soá 
cuûa tín hieäu baèng phöông phaùp löôïng töû hoaù. Phöông phaùp löôïng töû 
hoaù theo thôøi gian laø phöông phaùp duøng cho tín hieäu coù bieân ñoä lieân 
tuïc, thôøi gian rôøi raïc. Heä thoáng xöû lyù tín hieäu loaïi naøy ñöôïc goïi laø heä 
thoáng rôøi raïc, ví duï nhö maïïch taïo xung, ñieàu cheá xung… Neáu pheùp 
löôïng töû hoaù ñöôïc tieán haønh theo caû bieân ñoä vaø thôøi gian thì keát quaû 
nhaän ñöôïc laø tín hieäu soá. Trong heä thoáng soá, thoâng soá ñieàu khieån-bieân 
ñoä cuûa caùc xung chæ xuaát hieän taïi caùc ñieåm rôøi raïc caùch ñeàu nhau ñuùng 
baèng chu kyø laáy maåu cuûa tín hieäu. Vieäc oån ñònh heä thoáng caøng trôû neân 
phöùc taïp hôn so vôùi heä thoáng lieân tuïc. Do ñoù, ñoøi hoûi kyõ thuaät phaân 
tích vaø thieát keá ñaët bieät. 
Heä thoáng ñieàu khieån soá ñöôïc duøng öùng duïng nhieàu vaø ña daïng 
do ñöa maùy tính soá vaøo trong heä thoáng ñieàu khieån, söï caûi tieán veà giaù caû 
vaø ñoä tin caäy vaøo maùy tính soá. 
 47
 Heä thoáng ñieàu khieån soá 
 Trong phaàn naøy, chuùng ta seõ phaùt trieån nhöõng khaùi nieäm 
veà phaân tích vaø thieát keá heä thoáng lieân tuïc cho heä thoáng ñieàu khieån soá. 
Chuùng ta seõ taäp trung vaøo heä thoáng ñieàu khieån soá, trong ñoù maùy tính soá 
ñöôïc noái ñeán caùc khaâu dieàu khieån vaø caùc heä thoáng ñöôïc ñieàu khieån bôûi 
caùc boä bieán ñoåi A/D, D/A. Heä thoáng naøy ñöôïc minh hoaï ôû hình treân. 
Nhö vaäy, heä thoáng bao goàm 2 tín hieäu : tín hieäu rôøi raïc [r(nT), e(nT), 
b(nT)] vaø tín hieäu töông töï [u(t), m(t), c(t)] vaø ñöôïc ñònh nghóa laø heä 
thoáng döõ lieäu ñöôïc laáy maãu (Sampled-Data System). 
Coù theå moâ taû hoaït ñoäng laáy maåu toát nhaát baèng caùch xeùt moät haøm 
lieân tuïc e(t) nhö ôû hình (8.2a). Giaû söû haøm naøy coù theå laáy maåu taïi caùc 
thôøi ñieåm caùch ñeàu nhau moät khoaûng thôøi gian laø T, nhö vaäy coù theå moâ 
taû haøm ñaõ ñöôïc laáy maåu bôûi moät chuoåi caùc soá sau: 
 e(0), e(T), e(2T)…e(nT) 
Chuoåi naøy cho pheùp moâ taû coù giôùi haïn haøm e(t) nhaát laø giaù trò 
cuûa e(t) taïi caùc thôøi ñieåm 0, T, 2T, …, nT. Giaù trò cuûa e(t) taïi caùc thôøi 
ñieåm khaùc chæ coù theå ñöôïc laáy gaàn ñuùng baèng phöông phaùp noäi suy. 
 Digital Computer D/A Khaâu ñieàu 
khieån G1(s) 
A/D
Khaâu ñieàu 
khieån G2(s) 
 48
Ví duï veà laáy tín hieäu rôøi raïc baèng phöông phaùp Fourier 
Treân thöïc teá, vì khaâu ñieàu khieån vaø heä thoáng ñieàu khieån laø töông 
töï, neân döû lieäu rôøi raïc sau khi laáy maåu phaûi ñöôïc xaây döïng laïi thaønh 
daïng lieân tuïïc trong suoát thôøi gian giöõa nhöõng laàn laáy maãu. 
Trong phaàn sau, seõ cho chuùng ta khaùi nieäm cô baûn vaø caùc ñaëc 
tính cuûa heä thoáng döõ lieäu ñaõ ñöôïc laáy maãu, minh hoaï kyõ thuaät phaân 
tích vaø thieát keá heä thoáng. Phaân tích ñoä oån ñònh cuûa heä thoáng, khaâu 
ngoaïi suy döõ lieäu cuõng ñöôïc ñeà caäp. Ñeå bieåu dieãn bieán soá cuûa heä 
thoáng ñieàu khieån, chuùng ta söõ duïng phöông phaùp bieán ñoåi môùi : 
phöông phaùp bieán ñoåi z . Vieäc söû duïng phöông phaùp bieán ñoåi Laplace 
gaëp nhieàu trôû ngaïi vì chuùng ta ñang duøng phöông trình sai phaân thay 
cho vieäc thieát keá caùc heä thoáng ñieàu khieån döõ lieäu ñaõ ñöôïc laáy maãu. 
3. THIEÁT KEÁ PID SOÁ 
Ôû muïc naøy, ta seõ phaân tích kyõ thuaät thieát keá theo phöông phaùp 
ñaùp öùng taàn soá, xem xeùt boä ñieàu khieån sôùm treå pha theo quan ñieåm 
khaùc tröôùc. Boä ñieàu khieån naøy ñöôïc goïi laø PID (Proportional Integral 
Derivative), boä ñieàu khieån vi tích phaân tyû leä. 
 49
Haøm truyeàn cuûa boä ñieàu khieån vi tích phaân tyû leä PID cho bôûi: 
wK
w
KKwD DIp .)( ++= 
Trong bieåu thöùc naøy, Kp laø ñoä lôïi cuûa khaâu tyû leä, Ki laø ñoä lôïi 
cuûa khaâu tích phaân coøn Kd laø ñoä lôïi khaâu vi phaân. 
Ñaàu tieân, xem xeùt ñeán boä ñieàu khieån PI (tính phaân tyû leä). Haøm 
truyeàn ñaït laø : 
w
ww
K
w
KwK
w
KKwD woIIPIp
)/1(.)(
+=+=+= 
Vôùi wwo = Ki/Kp. Chuù yù raèng ñaây laø boä loïc treå pha coù öu ñieåm 
nhö maïch ñieàu khieån treã pha : taêng ñoä döï tröõ oån ñònh vaø giaûm sai soá 
xaùc laäp 
Tieáp theo, ta xeùt boä ñieàu khieån PD, haøm truyeàn ñaït nhö sau 
)1(.)(
wo
Dp w
wKpwKKwD +=+= 
Vôùi wwo = Kp/Kd. Muïc ñích cuûa boä ñieàu khieån PD naøy laø caûi 
tieán söï oån ñònh cuûa heä thoáng, taêng baêng thoâng heä thoáng voøng kín ñeå 
taêng toác ñoä ñaùp öùng. Taùc duïng cuûa boä ñieàu khieån PD taïi taàn soá cao 
ngöôïc vôùi taùc duïng cuûa boä PI taïi taàn soá thaáp. 
4. PID TRONG HEÄ THOÁNG ÑIEÀU KHIEÅN NHIEÄT ÑOÄ 
 Goàm coù boä ñieàu khieãn vaø loø ñieän coù sô ñoà sau : 
 Boä ñieàu khieån nhieät ñoä 
 Boä ñieàu khieån goàm maïch ño nhieät ñoä söû duïng caëp nhieät ñieän 
(ThermoCouple – coù ñieän aùp ra thay ñoåi theo nhieät ñoä), maïch ñieàu 
khieån duøng khueách ñaïi thuaät toaùn vaø boä chaáp haønh (maïch ñoäng löïc) 
Phaûn hoài
Ñaët nhieät ñoä 
Maïch ñieàu 
khieån 
Maïch ño vaø 
chæ thò
Maïch ñoäng 
löïc khieån
TC 
Daây ñoát 
 50
duøng TRIAC ñoùng ngaét nguoàn ñieän löôùi cung caáp cho loø khi aùp qua 
zero(zero switching). 
Vôùi boä ñieàu khieån naøy,trong ñoà aùn choïn nguyeân taéc ñieàu roäng 
xung, ñaûm baûo cung caáp coâng suaát cho loø tæ leä vôùi tín hieäu ñieàu khieån 
töông öùng vôùi haøm truyeàn laø heä soá khueách ñaïi. 
Loø nhieät coù ñaàu vaøo laø ñieän aùp (hay coâng suaát) cung caáp cho daây 
ñieän trôû vaø ngoû ra laø nhieät ñoä beân trong loø . Ñeå thaønh laäp haøm truyeàn 
loø nhieät ta phaûi khaûo saùt phöông trình vi phaân moâ taû caùc quan heä nhieät 
ñoä - naêng löôïng. Ñaây laø moät baøi toaùn phöùc taïp neáu muoán chính xaùc . 
Moät caùch gaàn ñuùng , ta coù theå xem moâi tröôøng nung laø ñoàng chaát , 
ñaúng nhieät. Töø phöông trình caân baè ng naêng löôïng: ñieän naêng cung caáp 
seõ ñöôïc duøng ñeå buø vaøo löôïng nhieät truyeàn ra beân ngoaøi vaø tích nhieät 
vaøo moâi tröôøng nung, ta tính ñöôïc haøm truyeàn loø laø baäc nhaát coù daïng 
nhö sau : 
⎯→⎯⎥⎦
⎤⎢⎣
⎡
+⎯→⎯
θ
1Ts
KP 
Trong ñoù : P : coâng suaát cung caáp 
 θ laø ñoä taêng nhieät nhieät ñoä ngoû ra so vôùi nhieät ñoä moâi 
tröôøng 
 K laø heä soá tæ leä cho bieát quan heä vaøo ra ôû cheá ñoä xaùc 
laäp 
 T laø thôøi haèng, theå hieän quaùn tính nhieät cuûa heä thoáng. 
 Moâ hình haøm truyeàn naøy cho thaáy quaù trình quaù ñoä vôùi ñaàu vaøo 
haøm naác coù daïng haøm muõ. Thöïc teá cho thaáy moâ hình treân chæ laø gaàn 
ñuùng , heä thoáng coù baäc cao hôn nhöng quaù trình quaù ñoä ñaàu vaøo haøm 
naác vaãn laø khoâng voït loá , coù daïng nhö hình sau khi cho nhieät ñoä ñaàu 
baèng 0. 
Theo Ziegler-Nichols thì moät heä thoáng nhö vaäy coù theå ñöôïc bieåu 
dieãn döôùi daïng haøm truyeàn sau : 
H(s)= ⎥⎦
⎤⎢⎣
⎡
+
−
1Ts
Ke Ls 
 bao goàm Moät khaâu quaùn tính heä soá khueách ñaïi K 
 Thôøi haèng T, vaø khaâu treã thôøi gian L 
 51
Caùc thoâng soá naøy coù theå laáy ñöôïc khi keû tieáp tuyeán ôû ñieåm uoán 
cho ñoà thò quaù ñoä haøm naác nhö hình beân. Heä soá khueách ñaïi K ñöôïc tính 
nhö sau: 
Khi nhieät ñoä ñaàu khaùc khoâng, K ñöôïc tính töø ñoä taêng nhieät ñoä 
ngoû ra so vôùi moâi tröôøng. 
Ñeå aùp duïng cho heä tuyeán tính, ta laáy khai trieån Talor cuûa 
Lse− haøm truyeàn trôû neân: 
)1Ts)(1Ls(
K)s(H ++= 
Trong loø nhieät söû duïng trong luaän vaên naøy, caùc soá lieäu ñöôïc laáy 
nhö sau 
K = 600; 
L = 2; 
T = 26; 
 Vaäy haøm truyeàn cuûa loø nhieät ñöôïc xaùc ñònh döïa treân Ziegler-
Nichols laø: 
H(s)=
)1s26)(1s2(
600
++ 
 Quaù trình phöông phaùp ñieàu khieån nhieät ñoä: 
• Ñieàu khieån On-Off 
Heä thoáng ñieàu khieån nhieät ñoä ôû treân trôû thaønh: 
 θ [ ] ⎥⎦
⎤⎢⎣
⎡
++⎯→⎯⎯→⎯⊗ )1Ls)(1Ts(
KPHCe nñoä 
θ laø nhieät ñoä ñaët 
Chaát löôïng heä thoáng nhö vaäy seõ phuï thuoäc vaøo thoâng soá cuûa sô ñoà 
hieäu chænh.Moät trong nhöõng nguyeân lyù thöôøng duøng laø PID(vi tích 
phaân tæ leä) 
Phöông phaùp ñieàu khieån coâng suaát ñöôïc duøng laø ñieàu roäng 
xung.Taûi seõ nhaän coâng suaát trong khoaûng Ton cuûa chu kyø T khoâng 
ñoåi.Coâng suaát treân taûi coù theå ñieàu khieån ñöôïc baèng caùch thay ñoåi ñoä 
roäng xung töông ñoái a: 
 52
a=
T
Ton 
vaø coâng suaát cung caáp cho taûi P=a*Pmax 
Pmax:coâng suaát cöïc ñaïi öùng vôùi tröôøng hôïp a=1,khi phaàn töû ñieàu 
khieån coâng suaát laø TRIAC ñoùng maïch lieân tuïc 
Vì TRIAC chæ ngaét maïch khi doøng qua noù veà zero,chu kyø T phaûi 
ñuû lôùn ñeå cho TRIAC coù theå daãn ñieän trong nhieàu chu kyø ñieän aùp 
löôùi(taàn soá löôùi ñieän laø 50Hz),trong ñoà aùn choïn T=1s 
• Thuaät toaùn hieäu chænh PID 
Haøm truyeàn lieân tuïc PID coù daïng: H(s)= s*Kd
s
KKp
)s(e
)s(u I ++= 
Trong ñoù u:ngoõ ra,e ngoõ vaøo cuûa boä hieäu chænh 
Thuaät toaùn PID coù theå nhaän ñöôïc khi sai phaân haøm truyeàn 
treân,töông öùng phöông trình vi tích phaân sau: 
 Kp*e(t)+Ki ∫ dt)t(e +Kd* dt
)t(de =u(t)*K 
Giaùn ñoaïn hoaù: 
• Khaâu vi phaân(duøng ñònh nghóa sai phaân): 
 Kd*
dt
)t(de =
T
Kd *(e[n]-e[n-1]) 
• Khaâu tích phaân(theo nguyeân taéc hình thang): 
∫ dt)t(e = ))1k(e)k(e(2
T n
1k
−+∑
=
 vôùi e(0)=0 
suy ra 
u[n]*K=Kp*e[n]+ +−− ])1n[e]n[e(
T
Kd ))1k(e)k(e(
2
T n
1k
−+∑
=
 vôùi 
e(0)=0 
thay[n] baèng [n-1] vaø tröø vaøo phöông trình treân nhaän ñöôïc coâng thöùc 
cho pheùp chuùng ta tính u[n] töø u[n-1] vaø caùc giaù trò lieân tieáp cuûa e[n] 
nhö sau: 
u[n]-u[n-1]=( A 0 *e[n]+A 1*e[n-1]+A 2 *e[n-2] )/K 
⇒ u[n]=u[n-1]+( A 0 *e[n]+A 1*e[n-1]+A 2 *e[n-2] )/K 
vôùi A 0 =Kp+ T*2
Ki +
T
Kd 
 A 1= T*2
Ki -Kp - 
T
Kd*2 
 53
 A 2 = T
Kd 
Trong ñoù T laø chu kyø laáy maãu 
5 
CAÙC LOAÏI MAÏCH KÍCH 
VAØ SOLID STATE RELAY( SSR ) 
Trong quaù trình ñieàu khieån loø, caàn phaûi thieát keá maïch ñieàu khieån 
coâng suaát sao cho thoaû maõn caùc yeâu caàu sao 
• Caùch ly maïch ñieàu khieån coù coâng suaát beù vaø maïch ñoäng löïc coù 
coâng suaát lôùn. 
• Khaû naêng ñaùp öùng taàn soá ñoùng ngaét cao ( trong 1giaây → 1phuùt). 
• Traùnh nhieãu toát. 
Coù nhieàu loaïi maïch ñoùng ngaét coù theå keå ñeán nhö Relay cô khí, 
Triac, contactor quang… Nhöng Relay cô khí ít ñöôïc duøng bôi khaû naêng 
taïo nhieãu, tia löûa ñieän trong quaù trình ñoùng ngaét cao, aûnh höôûng ñeán 
ñaùp öùng cuûa loø nhieät 
I. ÑOÙNG NGAÉT BAÈNG OPTO _TRIAC 
 54
VCC
VCC
JP18
HEADER 2
1
2
R17
15K
R18
330
R19
470
U8
4N35
1 6
2
5
4
Q5
L401E3/TO
Q4
C1815
2
3
1
+ C10
CAPACITOR POL/SM
D7
LL4154
I2
0A
R21
R
Ñaûm baûo vaán ñeà an toaøn cho loø nhieät (maïch coâng suaát) cuõng nhö 
ñoái vôùi maïch ñieàu khieån, ngöôøi ta thöôøng duøng caùch ly quang OP-TO. 
Khi ngoõ ra cuûa Analog out tích cöïc möùc 0, seõ khoâng coù doøng ôû 
cöùc B, kích cho BJT hoat ñoäng. Luùc naøy BJT seõ khoâng daãn vaø seõ 
khoâng kích cho OPTO hoaït ñoäng. 
Khi ngoõ vaøo cöïc B tích cöïc ôû möùc 1, seõ coù doøng chaïy vaøo cöïc 
B. Khi ñoù, transistor coù doøng Ic ( collector current). Khi ñoù, doøng kích 
seõ kích cho OP-TO hoaït ñoäng. 
Khi ñoù, BJT beân trong OPTO ñöôïc kích, seõ taïo doøng ñieän chaïy 
vaøo ngoõ kích cuûa Triac, vaø do ñoù loø ñöôïc kích vaø hoaït ñoäng. 
Nhö vaäy, khi coù tín hieäu ñieàu khieàn vaøo cöïc Base cuûa BJT , seõ 
coù doøng ñieän chaïy vaøo chaân 1,2 cuûa OPTO. Laäp töùc, OPTO seõ daãn 
ñieän, taïo thaønh doøng ñieän chaïy vaøo chaân G cuûa Triac BTA-16. 
Thoaû maõn ñieàu kieän doøng cuûa Triac, Triac seõ kích loø hoaït d8oäng 
ñoùng ngaét theo yeâu caàu cuûa ñeà baøi. 
 Tuy nhieân, söõ duïng maïch kích OPTO-Triac coøn nhieàu nhöôïc 
ñieåm, trong ñoù caàn coù söï töông thích giöõa caùc linh kieän vôùi nhau, vieäc 
tính toaùn caùc traïng thaùi quaù aùp, quaù doøng hay tính linh hoaït trong quaù 
trình hoaït ñoäng cuûa maïch kích. Trong caùc maïch kích ñöôïc söû duïng 
nhieàu nhaät hieän nay laø Contactor quang Solid State Relay ( SSR ). 
II. CONTACTOR QUANG _ SOLID STATE RELAY 
 55
Caùc SSR ñöôïc baùn treân thò tröôøng 
Solid State Relay(SSR) laø thieát bò ñieän töø, duøng ñeå caùch ly vaø 
ñieàu khieån giöõa maïch ñieàu khieån coù coâng suaát beù vaø maïch ñoäng löïc coù 
coâng suaát taûi lôùn. Coù khaû naêng chòu doøng cao ( töø 10A → 75A daønh 
cho ñieän aùp ngoõ ra 300VAC vaø 50A → 75A daønh cho ñieän aùp 
600VAC). Do trong SSR , caùc phaàn töû ñöôïc caùch ly, khoâng coù ñoùng 
ngaét baèng tay nhö caùc coâng taéc cô khí neân khoâng taïo neân tia löûa ñieän 
hay hoà quang ñieän trong quaù trình ñoùng ngaét. Ñoàng thôøi, thôøi gian 
delay cho quaù trình ñoùng ngaét laø 3ms, thôøi gian treå naøy nhaèm ngaên 
ngöøa nhöõng xuang ñieän ñoät ngoät trong quaù trình ñoùng ngaét. Vôùi khaû 
naêng ñaùp öùng cao, maïch kích ñôn giaûn, deã keát noái, ñieàu khieån loø nhieät 
seõ giaûm ñi raát nhieàu chi phí khoâng caàn thieát thay theá daàn caùc Contactor 
cô khí 
Sau ñaây laø Data Sheet cuûa loaïi Solid State Relay ñöôïc söû duïng 
trong luaän vaên. 
 56
Standard Footprint 
Designed to replace and outperform existing DC Relays. 
Product Specifications: 
Input Specifications: 
Minimum turn-on voltage (Vdc) 3.5 
Minimum turn-off voltage (Vdc) 2.5 
Control Voltage range (Vdc) 3.5 - 32 
Control Current (mA) 8 - 15 
Output Specifications: 
Operating voltage range (Vdc) 0 - 25 
Maximum load current without heatsink (Adc) 20 
Maximum continues current (A) 100 
Maximum surge current (Adc) 300 
Thermal resistance junction (degC) -55...+175 
Maximum on state Resistance (milliohms) 3.5 
Maximum turn-on time (usec) 14 
Turn on transition time (usec) 8 
Maximum turn-off time (usec) 55 
Turn off transition time (usec) 40 
General Specifications: 
Maximum capacitance input/output(pF) 12600/3500 
Ambient operating temperature range(degC) 0-25 
Ambient storage temperature range(degC) -85 - 150 
Mechanical Specifications: 
Weight (oz) 1.5 
Encapsulation ResTech 10207/053 
Terminals printed circuit 
Vì ñieäp aùp ngoõ vaøo coù giaù trò 3.5 VDC -> 32VDC, neân ta söõ 
duïng ngoõ ra Analog Out cuûa Card PCL-818 laøm ngoõ ñieàu khieån. Khi 
caàn kích loø hoaït ñoäng, ta ñöa giaù trò coù möùc ñieän aùp > 3.2 VDC vaøo 
Digital Input. Vaø quaù trình ñieàu khieån loø ñöôïc hoaït ñoäng raát nhòp 
nhaøng vaø linh hoaït 
 57
6 
CAÙC LOAÏI IC KHAÙC 
1. IC OÅN AÙP 
 Ñaây laø IC duøng cho boä nguoàn, cung caáp ñieän aùp +-5V cho Op-
Amp hay caùc IC khaùc trong maïch hoaït ñoäng. IC naøy taïo neân boä nguoàn 
hoaït ñoäng oån ñònh. 
Loaïi V0 I0 VI(min) VI(max) 
LM78L05 5 0.1 7 20 
LM7905 -5 0.1 -7 -20 
2. OP07 
Ñaëc ñieåm : Kieåu chaân : 
• Offset thaáp : 10μV. 
• Ñoä troâi offset thaáp : 0,2μV/°C. 
• Ñoä oån ñònh ñoái vôùi thôøi gian cao : 
0,2μV/thaùng. 
• Ít bò aûnh höôûng bôûi nhieãu : 0,35μVp-
p. 
• Taàm ñieän aùp cung caáp roäng : ±3V ÷ 
±18V. 
• Common Mode Input cao : ±14V. 
• Khoâng caàn linh kieän raùp theâm beân 
ngoaøi. 
 58
OP07 laø moät IC OPAMP coù ñoä chính xaùc cao, vôùi offset thaáp (tieâu 
chuaån laø 10μV, max laø 25μV). Ñoä troâi offset khoaûng 0,2μV/°C vaø 
doøng phaân cöïc ñaàu vaøo thaáp (0,7nA), coäng theâm vôùi trôû khaùng ñaàu vaøo 
cao vaø ñoä lôïi voøng hôû lôùn neân IC naøy raát thích hôïp vôùi caùc öùng duïng 
ño löôøng ñoøi hoûi chính xaùc. 
 59
 60
KHOÁI CAÛM BIEÁN VAØ GIA COÂNG 
VCC
VCC
VCC
VCC
VCC
-VCC
-VCC
-VCC
-VCC
VCC
R3
VR10K
R1
VR10K1
3
2
+
-
U4
OP-07
3
2
6
7 1
4 8
+
- U3
OP-07
3
2
6
7 1
4 8
+
- U2
OP-07
3
2
6
7 1
4 8
+
-
U1
OP-07
3
2
6
7 1
4 8
R10
22K
R9 100
R8
2.2K
R7 22K
R5
3M
R4
VR10K
+ C3
+C2
+ C1
D1
LM335
1
3
2
JP7
HEADER 2
1
2
JP2
V- tu Thermocouple
1
2
JP1
V+ tu Thermocouple
1
2
R6
100
R2
VR10K
1
3
2
Mach lay gia tri nhiet do moi truong
Mach lay gia tri nhiet do cua lo nhiet 
 Maïch gia coâng, laáy nhieät ñoä töø moâi tröôøng 
Thermocouple ñöôïc söû duïng trong tröôøng hôïp naøy laø loaïi 
Thermocouple Loaïi K ( keát hôïp giöõa chromel vaø alumel), trong ñoù 
chromel laø cöïc döông vaø alumel laø cöïc aâm. Heä soá Seebeck laø 40μV/°C 
ôû 20°C. 
Maïch gia coâng caàn thöïc hieän 3 chöùc naêng sau : buø nhieät cho ñaàu töï 
do, khueách ñaïi, vaø taïo ñieän aùp ra laø 0V khi ño ôû 00C. Xeùt maïch treân : 
 61
• U1, U2, U3 (duøng OP07 cho offset thaáp) ñoùng vai troø moät boä 
ñeäm ñieän aùp lyù töôûng : coù trôû khaùng vaøo raát lôùn vaø trôû khaùng ra 
raát nhoû, khoâng ñeå caùc ñaàu vaøo aûnh höôûng laãn nhau. 
• Ñieän aùp ra treân thermocouple : 
V3 = S(Td – Ta) = S.Td – S.Ta 
 Vôùi : Td laø nhieät ñoä caàn ño. 
 Ta laø nhieät ñoä moâi tröôøng. 
S laø ñoä nhaïy cuûa thermocouple (40μV/°C). 
Nhö vaäy laø giaù trò ñieän aùp ra treân caëp nhieät ñieän ngoaøi nhieäm vuï 
mang thoâng tin cuûa nhieät ñoä caàn ño coøn bò aûnh höôûng bôûi nhieät ñoä 
moâi tröôøng. 
Ñeå loaïi tröø aûnh höôûng treân, ta caàn phaûi coù moät khoái taïo ra ñieän aùp 
theo nhieät ñoä moâi tröôøng nhöng coù daáu ngöôïc laïi ⇒ duøng IC caûm bieán 
LM335A. 
• IC LM335A laø loaïi caûm bieán nhieät ñoä baùn daãn, coù ñoä nhaïy laø 
10mV/°K. Aùp taïo ra do LM335A caûm bieán ñöôïc laø : 
 V2 = K.Ta [°K] = K(273 + Ta) [°C] 
= K.273 + K.Ta = C + KTa (C = K.273) 
vôùi K = 10mV/°K; C = 2,73V 
 ⇒ coù theå trieät tieâu aûnh höôûng cuûa Ta, nhöng laïi taïo ra moät möùc 
ñieän aùp laø 2,73V ôû 0°C neân caàn phaûi coù moät khoái ñeå tröø 2,73V nhaèm 
taïo ñieän aùp ñaàu ra laø 0V ôû 0°C. 
• Bieán trôû R1 chính laø thaønh phaàn buø tröø ñieän aùp 2,73V nhö ñaõ noùi 
ôû treân. 
• U4 (duøng OP07) ñoùng vai troø boä coäng coù khueách ñaïi, ñieän aùp ra 
cuoái cuøng laø : 
( )[ ] 1
6
47
9
3
310
29//310
6
471 V
R
RR
R
V
RR
VRRR
R
RRVout
+−⎟⎠
⎞⎜⎝
⎛ +++⎟⎠
⎞⎜⎝
⎛ ++= 
( )[ ] −⎟⎠
⎞⎜⎝
⎛ −+++++⎟⎠
⎞⎜⎝
⎛ ++=⇒
9
.
9
.
310
.
310
9//310
6
471
R
TS
R
TS
RR
TK
RR
CRRR
R
RRV adaout 
1
6
47 V
R
RR +−
Khoâng bò aûnh höôûng cuûa nhieät ñoä moâi tröôøng : 
 62
 250
40
10
9
3100
9
.
310
. ===+⇒=−+ V
mV
S
K
R
RR
R
TS
RR
TK aa
μ 
choïn R9 = 100Ω ⇒ R10 + R3 = 25 KΩ ⇒ choïn R10 = 22KΩ vaø R3 laø 
bieán trôû 10KΩ. Khi ñoù caàn ñieàu chænh R3 ñeå trieät tieâu Ta. 
Trieät tieâu ñieän aùp tónh (2,73V) : 
( )[ ] 01
6
47
310
9//310
6
471 =+−⎟⎠
⎞⎜⎝
⎛
++⎟⎠
⎞⎜⎝
⎛ ++ V
R
RR
RR
CRRR
R
RR 
 vôùi (R10+ R3)//R9 = (25KΩ)//(100Ω) = 99,6Ω 
251
73,2
251
73,21
6
47:
1
6
47
25000
73,26,99
6
471
=⎟⎠
⎞⎜⎝
⎛ −+
+=⎟⎠
⎞⎜⎝
⎛ ++⇒
V
R
RRhay
xV
R
RRxx
R
RR
 khi ñoù, ñieän aùp ra laø : 
( )[ ]
9
.
9//310
6
471
R
TS
RRR
R
RRV dout +⎟⎠
⎞⎜⎝
⎛ ++= 
 ñieän aùp naøy ñöôïc ñöa tröïc tieáp vaøo Card Ad PCL-818 laø loaïi 
Card AD 12-bit neân caàn phaûi coù moät söï töông thích veà ñoä phaân giaûi : 
 ADC 12-bit coù 4096 möùc. 
 Ñieän aùp vaøo toái ña = 4,096V 
 ⇒ 1LSB = 4,048V/4096 = 1mV 
 Ñieàu khieån ñeán 256°C : 
 ⇒ 1LSB = 256/4096 =0.0625°C 
töùc moãi khi taêng 0.0625°C thì ñieän aùp ra taêng 1mV : 
( )[ ]
6.400
6
476.401
6
471
25100
25000
9
9//)310(:
1
9
.0625,09//310
6
471
=+⇒=++⇒
=+
=+⎟⎠
⎞⎜⎝
⎛ ++
R
RR
R
RR
R
RRRdo
mV
R
SRRR
R
RR
choïn R6 = 100Ω ⇒ choïn R7 = 33KΩ; R4 laø bieán trôû 10KΩ. 
Chænh R4 cho ñoä phaân giaûi. 
(1)
 63
 Thay vaøo (1) : 
mVVVx 9.101
251
73,2
251
73,216.400 =⇒=⎟⎠
⎞⎜⎝
⎛ − 
 V1 ñöôïc taïo ra töø caàu chia ñieän aùp R5 = 3MΩ vaø R1 laø bieán trôû 
10KΩ. 
⇒ caàn chænh R1 ñeå V1 ñaït 10.9mV 
• Caùc tuï C14, C15, C16 choïn giaù trò 10μF ñeå choáng nhieãu. 
Löu yù : 
1. Caùc bieán trôû neân duøng loaïi bieán trôû tinh chænh (hay bieán trôû ño 
löôøng) coù caáu taïo goàm nhieàu voøng daây ñieän trôû xoaén beân trong (chænh 
nhieàu voøng môùi heát giaù trò), traùnh duøng bieán trôû thoâng thöôøng raát khoù 
chænh vaø khoâng oån ñònh (khi va chaïm nheï bò thay ñoåi giaù trò). 
2. Caùc OPAMP duøng loaïi OP07 hoaëc töông ñöông, coù möùc offset thaáp 
ñeå phuø hôïp vôùi caùc ñaïi löôïng ño coù giaù trò nhoû, caùc chaân 1 vaø 8 duøng 
ñeå chænh offset khoâng duøng trong thieát keá naøy. 
 64
 65
LÖU ÑOÀ GIAÛI THUAÄT 
Löu ñoà ñoïc AD 
 N 
 Y 
 N 
Begin
Kích OPTO ñeå
loø nhieät hoaït ñoäng 
(EOC=0)&(INT=1)? 
Ñoïc AD 
Y[i]:= giaù trò (AD)/8.192 
Veõ ñaëc tuyeán loø nhieät
ess =(T(n)-T(n-1))/T(n) 
Thoaùt 
 66
 Do ñaûm baûo quaù trình naøy dieån ra trong thoøi gian laáy maãu laø 1s, 
vì vaäy, caû chöông trình thu nhaän thoâng soá cuûa loø ñöôïc ñaët trong boä 
Timer. 
 Khi thu nhaän ñöôïc caùc giaù trò nhieät ñoä töø loø nhieät, thoâng qua 1 
chöông trình xaáp xæ bình phöông cöïc tieåu, ta seõ thu ñöôïc caùc thoâng cuûa 
loø nhö : ñoä khueách ñaïi, thôøi gian treå, thôøi haèng nhieät ñoä… 
 Nhieät ñoä ngoõ vaøo coù giaùtrò töø 0 -> 409.6 oC, vì vaäy, ñieän aùp ngoõ 
ra töông öùng töø 0 -> 4.096V. 
 Ñoái vôùi Card AD PCL – 818, ñieän aùp chuaån beân trong laø 5V ( 
Internal Reference Voltage = 5V) töông öùng vôùi giaù trò toaøn taàm 12bit 
= 4096. Vì vaäy, giaù trò nhieät ñoä laø : 
Nhieät ñoä hieän taïi = 
192.8
_Re ADad 
 67
Löu ñoà hieäu chænh loø nhieät 
N 
 Y 
 N 
 Y 
Begin 
Kích OPTO ñeå 
loø nhieät hoaït ñoäng 
(EOC=0)&(INT=1)? 
Ñoïc AD vaø veõ ñoà thò 
To[i]:= giaù trò (AD)/8.192 
ess =(Tñaët-Tht)/Tñaët 
Hieäu chænh PID 
U0=A0*Ekt+ 
A1*Ekt1+A2*Ekt2 
Hieäu chænh On – Off
To[I]=Toñaët 
 68
CHÖÔNG TRÌNH ÑOÏC NHIEÄT ÑOÄ 
VAØ TÌM CAÙC GIAÙ TRÒ THOÂNG SOÁ CUÛA LOØ 
unit Unitthongso; 
interface 
uses 
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, 
Dialogs, 
 StdCtrls, ExtCtrls, Math, TeEngine, Series, TeeProcs, Chart; 
type 
 TFormthongso = class(TForm) 
 GroupBox1: TGroupBox; 
 Edit1: TEdit; 
 69
 Edit2: TEdit; 
 Label1: TLabel; 
 Label2: TLabel; 
 GroupBox2: TGroupBox; 
 Label3: TLabel; 
 Label4: TLabel; 
 Label5: TLabel; 
 Edit6: TEdit; 
 Label6: TLabel; 
 GroupBox3: TGroupBox; 
 Label7: TLabel; 
 Label8: TLabel; 
 Edit8: TEdit; 
 Buttonhoatdong: TButton; 
 Buttondung: TButton; 
 Buttonketqua: TButton; 
 Timer1: TTimer; 
 Edit4: TEdit; 
 Edit5: TEdit; 
 Edit7: TEdit; 
 Edit9: TEdit; 
 Edit3: TEdit; 
 Edit10: TEdit; 
 Button1: TButton; 
 Timer2: TTimer; 
 Memo1: TMemo; 
 Button2: TButton; 
 procedure FormCreate(Sender: TObject); 
 procedure ButtonketquaClick(Sender: TObject); 
 procedure ButtonhoatdongClick(Sender: TObject); 
 procedure Button1Click(Sender: TObject); 
 procedure Timer1Timer(Sender: TObject); 
 procedure Timer2Timer(Sender: TObject); 
 procedure ButtondungClick(Sender: TObject); 
 procedure FormPaint(Sender: TObject); 
 procedure Button2Click(Sender: TObject); 
 70
 private 
 { Private declarations } 
 public 
 { Public declarations } 
 end; 
 Const 
 base=$300; 
 reg0= base + 0; 
 reg1= base + 1; 
 reg2= base + 2; 
 reg3= base + 3; 
 reg4= base + 4; 
 reg5= base + 5; 
 reg6= base + 6; 
 reg7= base + 7; 
 reg8= base + 8; 
 reg9= base + 9; 
 reg10= base + 10; 
 reg11= base + 11; 
 reg12= base + 12; 
 reg13= base + 13; 
 reg14= base + 14; 
 reg15= base + 15; 
 sobac = 7; 
 sophantu = 100; 
var 
 x: array[1..sophantu]of real; 
 y: array[1..sophantu]of real; { gia tri thuc cua y[i] } 
 z: array[1..sobac+1] of real; 
 w: array[1..sobac+1] of real; 
 a: array[1..sophantu,1..sophantu] of real; 
 b: array[1..sophantu] of real; 
 p: array[1..sophantu,1..sophantu] of real; { ma tran trung gian b[i] 
trongpp btb=a} 
 pt : array[1..sophantu, 1..sophantu] of real; 
 yy:array[1..sophantu] of integer; { gia tri tuong doi de ve hinh} 
 71
 ythu:array[1..sophantu] of real; 
 n,i,j : integer; 
 Formthongso: TFormthongso; 
 st : string; 
 xu, yu, T2, T1, hsg, ymax : real; 
 { xuon, yuon, gia tri K,T,L he so goc va gia tri y cuc dai} 
 nhietdohtai,nhietdodat:real; 
 Tmau:integer; 
 chao,dqc:string[200]; 
 implementation 
 uses Unitdieukhien; 
{$R *.DFM} 
{------------------------------------------------------------------------ } 
{1} Function inport(address:word):byte; 
 var data:byte; 
 begin 
 asm 
 mov dx,address 
 in ax,dx 
 mov data,al 
 end; 
 inport:=data; 
 end; 
{------------------------------------------------------------------------} 
 {2} procedure outport(address:word;data:byte); 
 Begin 
 asm 
 mov dx,address 
 mov al,data 
 out dx,al 
 end; 
 end; 
 72
{------------------------------------------------------------------------} 
{3} Procedure set_channelAD(start,stop:byte); 
 begin 
 outport(reg2,(stop shl 4) or start); 
 end; 
{------------------------------------------------------------------------} 
{4} Procedure Trig_AD; { kich mem bo AD} 
 begin 
 outport(reg0,$FF); 
 end; 
{--------------------------------------------------------------------------} 
{5} Procedure set_rangeAD(range:byte); { dat tam dien ap ngo ra } 
 var rang:byte; 
 begin 
 rang:=range and $03; 
 outport(reg1,rang); 
 end; 
{------------------------------------------------------------------------} 
{6} Function Read_AD:integer; { doc du lieu tu bo AD} 
 var dlow, dhigh:byte; 
 begin 
 set_channelAD(1,1); 
 set_rangeAD(0); 
 trig_AD; 
 Sleep(5); 
 dlow:=inport(reg0); 
 dhigh:=inport(reg1); 
 dlow:=(dlow and $F0) shr 4; 
 read_AD:=dlow+16*dhigh; 
 end; 
{------------------------------------------------------------------------} 
{7} Function dig_in:word; 
 begin 
 dig_in:=inport(reg3)+16*inport(reg11); 
 end; 
{------------------------------------------------------------------------} 
{8} Procedure dig_out(data:word); 
 73
 begin 
 outport(reg3,data and $00FF); 
 outport(reg11,(data and $FF00)shr 8); 
 end; 
{------------------------------------------------------------------------} 
{9} Procedure analog_out(data:word); 
 begin 
 outport(reg4,(data and $000F)shl 4); 
 outport(reg5,(data and $0FF0)shr 4); 
 end; 
{------------------------------------------------------------------------} 
{10} Function EOC:byte; 
 begin 
 EOC:=(inport(reg8)and $80)shr 7; 
 end; 
{------------------------------------------------------------------------} 
{11} Function MUX:byte; 
 begin 
 MUX:=(inport(reg8) and $20) shr 5; 
 end; 
{------------------------------------------------------------------------} 
{12} Function INT:byte; 
 begin 
 INT:=(inport(reg8) and $10) shr 4; 
 end; 
{------------------------------------------------------------------------} 
{13} Function Next_channel:byte; 
 begin 
 next_channel:=(inport(reg8) and $0F) shr 5; 
 end; 
{------------------------------------------------------------------------} 
{14} Function trigsource:byte; 
 begin 
 trigsource:=(inport(reg9) and $03) shr 5; 
 end; 
{------------------------------------------------------------------------} 
{15} Procedure set_trigsource(trs:byte); 
 var i:byte; 
 74
 begin 
 i:=inport(reg9) and $FC; 
 outport(reg9,i or trs); 
 end; 
{------------------------------------------------------------------------} 
{16} Procedure xuat(add:word;data:byte); 
 begin 
 outport(add,data); 
 end; 
{-------------------------------------------------------------------------} 
{17} Function nhap(add:word):byte; 
 begin 
 nhap:=inport(add); 
 end; 
{-------------------------------------------------------------------------} 
{18} Procedure Clear_Int; 
 begin 
 outport(reg8,$ff); 
 end; 
{ --------------------------------------------------------------------- } 
{19} procedure taomatranA; 
 const sophantu=100; 
 var k,i,j,sobac,n : integer; 
 a: array[1..sophantu,1..sophantu] of real; 
 begin 
 for i:= 1 to sobac+1 do 
 for j:= i to sobac+1 do 
 begin 
 a[i, j]:= 0; 
 for k:= 1 to n do 
 a[i, j]:= a[i, j] + power(x[k], (sobac*2)-i-j+2); 
 a[j, i]:= a[i, j]; 
 end; 
 end; 
{------------------------------------------------------------------------------} 
{20} procedure taomatranB; 
 const sobac=7; 
 75
 var b: array[1..sophantu]of real; 
 y: array[1..sophantu]of real; 
 k:integer; 
 begin 
 for i:= 1 to sobac+1 do 
 begin 
 b[i]:= 0; 
 for k:= 1 to n do 
 begin 
 b[i]:= b[i] + y[k]*power(x[k],sobac+1-i); 
 end; 
 end; 
 end; 
{------------------------------------------------------------------------------} 
{21} procedure taomatranP; 
 var p: array[1..sophantu, 1..sophantu]of real; 
 k:integer; 
 begin 
 p[1, 1]:= sqrt(a[1, 1]); 
 for j:= 2 to sobac+1 do 
 p[1, j]:= a[1, j] / p[1, 1]; 
 for i:= 2 to sobac+1 do 
 for j:= i to sobac+1 do 
 if i = j then 
 begin 
 p[i, i]:= a[i, i]; 
 for k:= 1 to i-1 do 
 p[i, i]:= p[i, i] - power(p[k, i], 2); 
 p[i, i]:= sqrt(p[i, i]); 
 end 
 else begin 
 p[i, j]:= a[i, j]; 
 for k:= 1 to i-1 do 
 p[i, j]:= p[i, j] - p[k, i]*p[k, j]; 
 p[i, j]:= p[i, j] / p[i, i]; 
 end; 
 for i:= 1 to sobac+1 do 
 for j:= 1 to sobac+1 do 
 76
 pt[i, j]:= p[j, i]; 
 end; 
{------------------------------------------------------------------------------} 
{22} procedure giaihe; 
 begin 
 taomatranA; 
 taomatranB; 
 taomatranP; 
 for i:= 1 to sobac+1 do 
 begin 
 z[i]:= b[i]; 
 for j:= 1 to i-1 do 
 z[i]:= z[i] - pt[i, j]*z[j]; 
 z[i]:= z[i] / pt[i, i]; 
 end; 
 for i:= sobac+1 downto 1 do 
 begin 
 w[i]:= z[i]; 
 for j:= sobac+1 downto i+1 do 
 w[i]:= w[i] - p[i, j]*w[j]; 
 w[i]:= w[i] / p[i, i]; 
 end; 
 end; 
{------------------------------------------------------------------------------} 
{23} procedure diemuon; 
 var yu1,dyu:real; 
 ess:real; 
 begin 
 xu:=x[2]; 
 repeat 
 yu1:= 42*w[1]*power(xu, 5)+30*w[2]*power(xu, 
4)+20*w[3]*power(xu,3)+ 
 12*w[4]*power(xu,2)+6*w[5]*power(xu,1)+2; 
 dyu:= 210*w[1]*power(xu, 4)+120*w[2]*power(xu, 
3)+60*w[3]*power(xu,2)+ 
 24*w[4]*power(xu,1)+6; 
 ess:=yu1/dyu; 
 xu:=xu-ess; 
 77
 until (ess<0.000000001); 
 end; 
{------------------------------------------------------------------------------} 
{24} procedure timLT; 
 var T1,T2:real; 
 begin 
 diemuon; 
 hsg:= 7*w[1]*power(xu, 6)+6*w[2]*power(xu, 
5)+5*w[3]*power(xu,4)+ 
4*w[4]*power(xu,3)+3*w[5]*power(xu,2)+2*w[6]*xu+w[7]; 
 T1:= (y[1] - yu)/hsg + xu; { thoi giam tre } 
 T2:= (ymax - yu)/hsg + xu - T1; { thoi gian} 
 end; 
{------------------------------------------------------------------------------} 
{25} procedure delay(ms:longint); 
 var counterms:longint; 
 begin 
 counterms:=ms+gettickcount; 
 while counterms>=gettickcount do ; 
 end; 
{------------------------------------------------------------------------------} 
{26} procedure TFormthongso.Timer2Timer(Sender: TObject); 
 var a:integer; 
 q:string[1]; 
 begin 
 a:=length(chao); 
 q:=chao[1]; 
 delete(chao,1,1); 
 insert(q,chao,a); 
 dqc:=chao; 
 Formthongso.Edit10.Text:=dqc; 
 end; 
{------------------------------------------------------------------------------} 
{27} procedure TFormthongso.Timer1Timer(Sender: TObject); 
 var nhietdohtai:real; 
 y:array[1..5] of real; 
 jj:integer; 
 78
 st:string; 
 begin 
 set_channelAD(1,1); 
 set_rangeAD(0); 
 set_trigsource(0); 
 trig_AD; 
 Sleep(5); 
 If (EOC=0) and (INT=1) then 
 if (Read_AD>=2048) then 
 nhietdohtai :=(Read_AD-2048)*409.5/2047; 
 Edit8.Text:=FloattoStr(nhietdohtai); 
 Memo1.Lines.add(FloattoStr(nhietdohtai)); 
 clear_int; 
 Canvas.Lineto(79+jj,430-trunc(nhietdohtai)); 
 jj:=jj+1; 
 end; 
{------------------------------------------------------------------------} 
{28} procedure TFormthongso.Button1Click(Sender: TObject); 
 begin 
 If messagedlg(' Nhan OK de sang Form Dieu Khien lo nhiet. 
Cam on ban da su dung chuong trinh 
',mtInformation,[mbOK,mbCancel],0)=MrOK then 
 begin 
 Analog_out($0000); 
 Formdieukhien.Show; 
 end; 
 end; 
{------------------------------------------------------------------------} 
{29} procedure TFormthongso.FormCreate(sender:tobject); 
 var st1, st2: string; 
 jj:integer; 
 begin 
 chao:='*** CHUONG TRINH DIEU KHIEN LO NHIET 
BANG CARD AD 818L - GVHD : HOANG MINH TRI - SVTH : 
NGUYEN NGOC NHAN - DD97TD ***'; 
 n:= 100; 
 jj:=1; 
 nhietdohtai:=0; 
 79
 { khoi dong Card 
 outport($303,$70); 
 if inport($303) $70 then 
 begin 
 messagedlg('PCL - 818L Error',mterror,[mbOK],0); 
 application.terminate; 
 end; } 
 Canvas.MoveTo(80,430); 
 end; 
{------------------------------------------------------------------------} 
{30} procedure TFormthongso.ButtonketquaClick(Sender: TObject); 
 var st2:string; 
 k,ymax,kp,kd,ki:real; 
 begin 
 for i:= 1 to n do 
 x[i]:= i; 
 giaihe; 
 timLT; 
 K:=ymax; 
 Kp:=1.2*T2/K/T1; 
 Kd:=Kp*0.5*T1; 
 Ki:=Kp/2/T1; 
 Formthongso.Edit1.text:=FloattoStr(Kp); 
 Formthongso.Edit2.text:=FloattoStr(Ki); 
 Formthongso.Edit6.text:=FloattoStr(Kd); 
 Formthongso.Edit5.text:=FloattoStr(T1); 
 Formthongso.Edit7.text:=FloattoStr(T2); 
 Formthongso.Edit4.text:=FloattoStr(K); 
 end; 
{------------------------------------------------------------------------} 
{31} procedure TFormthongso.ButtonhoatdongClick(Sender: TObject); 
 var ess,essmau:real; 
 begin 
 analog_out($0FFF); 
 Tmau:=StrtoInt(Edit9.Text)*1000; 
 y[1]:=0; 
 i:=1; 
 essmau:=0.000001; 
 80
 formthongso.Timer1.Interval := Tmau; 
 formthongso.Timer1.Enabled := True; 
 If (y[i]>y[i-1])then ymax:=y[i] 
 else ymax:=y[i-1]; 
 If (Read_AD>=4095) then break; 
 messagedlg(' Chuong trinh da tim duoc thong so cua lo- Hay nhan 
Button ket qua de xem thong so',mtInformation,[mbOK],0); 
 end; 
{-------------------------------------------------------------------------} 
{32} procedure TFormthongso.ButtondungClick(Sender: TObject); 
 begin 
 analog_out($0000); 
 messagedlg(' Thank you for using My 
Program',mtInformation,[mbOK],0); 
 Application.Terminate ; 
 end; 
{-------------------------------------------------------------------------} 
{33}procedure TFormthongso.FormPaint(Sender: TObject); 
 begin 
 Canvas.Pen.Style:=psInsideFrame; 
 Canvas.Brush.Color :=clwhite; 
 Canvas.FillRect(Rect(10,200,330,460)); 
 Canvas.MoveTo(80,250); { ve truc tung} 
 Canvas.LineTo(80,430); 
 Canvas.MoveTo(80,430); { ve truc hoanh } 
 Canvas.LineTo(300,430); 
 Canvas.Pen.Style:=psDash; 
 Canvas.MoveTo(80,280); 
 Canvas.LineTo(280,280); 
 Canvas.MoveTo(80,330); 
 Canvas.LineTo(280,330); 
 Canvas.MoveTo(80,380); 
 Canvas.LineTo(280,380); 
 Canvas.MoveTo(130,280); 
 Canvas.LineTo(130,430); 
 Canvas.MoveTo(180,280); 
 81
 Canvas.LineTo(180,430); 
 Canvas.MoveTo(230,280); 
 Canvas.LineTo(230,430); 
 Canvas.MoveTo(280,280); 
 Canvas.LineTo(280,430); 
 Canvas.Pen.Style:= psSolid; 
 Canvas.Textout(72,435,'0'); 
 Canvas.Textout(122,435,'50'); 
 Canvas.Textout(172,435,'100'); 
 Canvas.Textout(222,435,'150'); 
 Canvas.Textout(272,435,'200'); 
 Canvas.Textout(58,377,'50'); 
 Canvas.Textout(58,327,'100'); 
 Canvas.Textout(58,277,'150'); 
 Canvas.Textout(310,424,'i'); 
 Canvas.Textout(60,240,'Nhiet do'); 
 Canvas.Textout(80,210,'Qua trinh dieu khien nhiet do cua lo nhiet'); 
end; 
{-------------------------------------------------------------------------} 
{34} procedure TFormthongso.Button2Click(Sender: TObject); 
 begin 
 analog_out($0000); 
 end; 
end. 
 82
CHÖÔNG TRÌNH ÑOÏC HIEÄU CHÆNH NHIEÄT ÑOÄ THEO 
PHÖÔNGPHAÙP ON-OFF , PI & PID 
• Phöông phaùp On – Off 
• Phöông phaùp PID 
 83
unit Unitdieukhien; 
interface 
uses 
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, 
Dialogs, 
 StdCtrls, ExtCtrls, TeEngine, Series, TeeProcs, Chart, Buttons; 
type 
 TFormdieukhien = class(TForm) 
 RadioGroup1: TRadioGroup; 
 Buttonhoatdong: TButton; 
 Timer1: TTimer; 
 GroupBox2: TGroupBox; 
 84
 Label5: TLabel; 
 Label6: TLabel; 
 Label7: TLabel; 
 Edit4: TEdit; 
 Edit5: TEdit; 
 Edit6: TEdit; 
 GroupBox3: TGroupBox; 
 Label8: TLabel; 
 Label9: TLabel; 
 Edit7: TEdit; 
 Edit8: TEdit; 
 Buttondung: TButton; 
 GroupBox4: TGroupBox; 
 Editgtrisaisohtai: TEdit; 
 Editgtrinhietdohtai: TEdit; 
 Label10: TLabel; 
 Label11: TLabel; 
 Label12: TLabel; 
 Edit9: TEdit; 
 Label13: TLabel; 
 Edit10: TEdit; 
 Timer2: TTimer; 
 BitBtn1: TBitBtn; 
 BitBtn2: TBitBtn; 
 BitBtn3: TBitBtn; 
 OpenDialog1: TOpenDialog; 
 SaveDialog1: TSaveDialog; 
 Memo1: TMemo; 
 Timer3: TTimer; 
 Edit1: TEdit; 
 Timer4: TTimer; 
 procedure FormCreate(Sender: TObject); 
 procedure Timer1Timer(Sender: TObject); 
 procedure dkonoff; 
 procedure BitBtn1Click(Sender: TObject); 
 procedure BitBtn2Click(Sender: TObject); 
 procedure Timer2Timer(Sender: TObject); 
 procedure ButtondungClick(Sender: TObject); 
 85
 procedure ButtonhoatdongClick(Sender: TObject); 
 procedure Timer3Timer(Sender: TObject); 
 procedure Timer4Timer(Sender: TObject); 
 procedure FormPaint(Sender: TObject); 
 procedure BitBtn3Click(Sender: TObject); 
 private 
 { Private declarations } 
 public 
 { Public declarations } 
 end; 
 Const 
 base=$300; 
 reg0= base + 0; 
 reg1= base + 1; 
 reg2= base + 2; 
 reg3= base + 3; 
 reg4= base + 4; 
 reg5= base + 5; 
 reg6= base + 6; 
 reg7= base + 7; 
 reg8= base + 8; 
 reg9= base + 9; 
 reg10= base + 10; 
 reg11= base + 11; 
 reg12= base + 12; 
 reg13= base + 13; 
 reg14= base + 14; 
 reg15= base + 15; 
 var 
 Formdieukhien: TFormdieukhien; 
 nhietdohtai,nhietdodat:real; 
 Udk, U0, Ukt:real; 
 Ekt, Ekt1,Ekt2:real; 
 nhietdomax:real; 
 86
 sv,pv:real; 
 Tmau:integer; 
 dqc,chao:string[200]; 
 ess:real; 
 i:integer; 
 pot:real; 
 Kp,Ki,Kd:real; 
implementation 
uses Unitthongso; 
{$R *.DFM} 
{1} Function inport(address:word):byte; 
 var data:byte; 
 begin 
 asm 
 mov dx,address 
 in al,dx 
 mov data,al 
 end; 
 inport:=data; 
 end; 
{------------------------------------------------------------------------} 
 {2} procedure outport(address:word;data:byte); 
 Begin 
 asm 
 mov dx,address 
 mov al,data 
 out dx,al 
 end; 
 end; 
{-----------------------------------------------------------------------} 
{3} Function INT:byte; 
 begin 
 INT:=(inport(reg8) and $10) shr 4; 
 end; 
{------------------------------------------------------------------------} 
 87
{4} Function EOC:byte; 
 begin 
 EOC:=(inport(reg8)and $80)shr 7; 
 end; 
{------------------------------------------------------------------------} 
{5} Procedure set_rangeAD(range:byte); { dat tam dien ap ngo ra } 
 var rang:byte; 
 begin 
 rang:=range and $03; 
 outport(reg1,rang); 
 end; 
{------------------------------------------------------------------------} 
{6} Procedure set_trigsource(trs:byte); 
 var i:byte; 
 begin 
 i:=inport(reg9) and $FC; 
 outport(reg9,i or trs); 
 end; 
{------------------------------------------------------------------------} 
{7} Procedure analog_out(data:word); 
 begin 
 outport(reg4,(data and $000F)shl 4); 
 outport(reg5,(data and $0FF0)shr 4); 
 end; 
{-----------------------------------------------------------------------} 
{8} Procedure Trig_AD; { kich mem bo AD} 
 begin 
 outport(reg0,$FF); 
 end; 
{-----------------------------------------------------------------------} 
{9} Procedure set_channelAD(start,stop:byte); 
 begin 
 outport(reg2,(stop shl 4) or start); 
 end; 
{------------------------------------------------------------------------} 
{10} procedure delay(ms:longint); 
 var counterms:longint; 
 begin 
 88
 counterms:=ms+gettickcount; 
 while counterms>=gettickcount do; 
 end; 
{------------------------------------------------------------------------} 
{11} procedure Clear_Int; 
 begin 
 outport(reg8,$ff); 
 end; 
{------------------------------------------------------------------------} 
{12} Function Read_AD:integer; { doc du lieu tu bo AD} 
 var dlow, dhigh:byte; 
 begin 
 dlow:=inport(reg0); 
 dhigh:=inport(reg1); 
 dlow:=(dlow and $F0) shr 4; 
 read_AD:=dlow+16*dhigh; 
 end; 
{------------------------------------------------------------------------} 
{13} Function PID(data:real):real; 
 var Kp, Ki, Kd, K , T1, T2, T:real; 
 a0,a1,a2,Ukt,U0,Ekt,Ekt1,Ekt2:real; 
 begin 
 T:=Tmau/1000; 
 { dat thoi gian lay mau la Tmau } 
 Kp:=strtofloat(Formdieukhien.Edit4.text); 
 Ki:=strtofloat(Formdieukhien.Edit5.text); 
 Kd:=strtofloat(Formdieukhien.Edit6.text); 
 { dieu khien PI } 
 If Formdieukhien.RadioGroup1.ItemIndex= 1 then 
 begin 
 a0:= Kp + Ki*T; 
 a1:=-Kp + Ki*T; 
 a2:= Kd/T; 
 end; 
 { dieu khien PID } 
 89
 If Formdieukhien.RadioGroup1.ItemIndex= 2 then 
 begin 
 a0:= Kp + Kd/T + Ki*T; 
 a1:=-Kp + Ki*T -2*Kd/T; 
 a2:= Kd/T; 
 end; 
 Ukt:=a0*Ekt+a1*Ekt1+a2*Ekt2+U0; 
 PID:=Ukt; 
 end; 
{-----------------------------------------------------------------------} 
{14} procedure TFormdieukhien.dkonoff; { chuong trinh dieu khien 
On-Off } 
 var kess:real; 
 begin 
 kess:=2; 
 if nhietdohtai>=nhietdodat+kess then Analog_out($0000); 
 if nhietdohtai<=nhietdodat-kess then Analog_out($0FFF); 
 end; 
{------------------------------------------------------------------------} 
{15} procedure dkPID; { chuong trinh dieu khien PID } 
 begin 
 Ekt2:=Ekt1; 
 Ekt1:=Ekt; 
 Ekt:=nhietdodat-nhietdohtai; 
 U0:=PID(Ekt); 
 end; 
{-------------------------------------------------------------------------} 
{16} procedure TFormdieukhien.Timer1Timer(Sender: TObject); 
 var pot:real; 
 begin 
 analog_out($0FFF); 
 end; 
{------------------------------------------------------------------------} 
{17} procedure TFormdieukhien.FormCreate(Sender:TObject); 
 var Umax,Ekt1,Ekt2,U0:real; 
 t:longint; 
 nhietdohtai,pot:real; 
 90
 jj:integer; 
 begin 
 chao:='*** CHUONG TRINH DIEU KHIEN LO NHIET BANG 
CARD AD 818L - GVHD : HOANG MINH TRI - SVTH : NGUYEN 
NGOC NHAN - DD97TD ***'; 
 jj:=1; 
 Canvas.MoveTo(80,430); 
 { khoi dong Card } 
 outport($303,$70); 
 if inport($303) $70 then 
 begin 
 messagedlg('PCL - 818L Error',mterror,[mbOK],0); 
 application.terminate; 
 end; 
 Kp:=StrToFloat(Edit4.Text); 
 Ki:=StrToFloat(Edit5.Text); 
 Kd:=StrToFloat(Edit6.Text); 
 Tmau:=StrtoInt(Edit10.text)*1000; 
 Ekt1:=0; 
 Ekt2:=0; 
 U0:=0; 
 nhietdodat:=strtofloat(Edit8.Text); 
 Canvas.MoveTo(80,430-trunc(nhietdohtai)); 
 nhietdohtai:=0; 
 i:=1; 
 end; 
{-------------------------------------------------------------------------} 
{18}procedure TFormdieukhien.BitBtn1Click(Sender: TObject); 
 begin 
 If messagedlg(' Nhan OK de sang Form Thong so. Cam on ban da 
su dung chuong trinh ',mtInformation,[mbOK,mbCancel],0)=MrOK 
then 
 begin 
 Analog_out($0000); 
 Formthongso.Show; 
 end; 
 end; 
{-------------------------------------------------------------------------} 
 91
{19} { procedure TFormdieukhien.BitBtn3Click(Sender: TObject); 
 begin 
 If Opendialog1.Execute then 
 Image1.Picture.LoadFromFile(Opendialog1.Filename); 
 end; } 
{---------------------------------------------------------------------------} 
{20} procedure TFormdieukhien.Timer2Timer(Sender: TObject); 
 var pot:real; 
 i:integer; 
 begin 
 set_channelAD(1,1); 
 set_rangeAD(0); 
 set_trigsource(0); 
 trig_AD; 
 Sleep(5); 
 If (EOC=0) and (INT=1) then 
 if (Read_AD>=2048) then 
 nhietdohtai:=(Read_AD-2048)*409.5/2047; 
 Editgtrinhietdohtai.Text:=FloattoStr(nhietdohtai); 
 Memo1.Lines.add(FloattoStr(nhietdohtai)); 
 { ve duong dac tuyen } 
 Canvas.MoveTo(80+i,430-trunc(nhietdohtai)); 
 pot:=(nhietdohtai-nhietdodat)*100{/nhietdodat}; 
 Edit9.Text:=floattostr(pot); 
 ess:=(nhietdodat-nhietdohtai)*100{/nhietdodat}; 
 editgtrisaisohtai.text:=floattostr(ess); 
 i:=i+1; 
 dkonoff; 
 end; 
{-----------------------------------------------------------------------} 
{21} procedure TFormdieukhien.ButtondungClick(Sender: TObject); 
 begin 
 analog_out($0000); 
 messagedlg(' Thank you for using My 
Program',mtInformation,[mbOK],0); 
 Application.Terminate ; 
 end; 
{-----------------------------------------------------------------------} 
 92
{22} procedure TFormdieukhien.ButtonhoatdongClick(Sender: 
TObject); 
 var t:integer; 
 pot:real; 
 essmau:real; 
 begin 
 essmau:=strtofloat(Edit7.Text); 
 Canvas.MoveTo(80,430-trunc(nhietdodat)); 
 { repeat} 
 case radiogroup1.itemindex of 
 0:begin 
 Groupbox2.Enabled:=False; 
 Timer2.Interval:=1000*strtoint(Edit10.Text); 
 Timer2.Enabled := true; 
 end; 
 1,2:begin 
 Timer3.Interval :=Tmau; 
 Timer3.Enabled :=True; 
 end; 
 { editgtrisaisohtai.text:=floattostr(ess); 
 until (ess <= essmau); } 
 end; 
 end; 
{-----------------------------------------------------------------------} 
{23} procedure TFormdieukhien.Timer3Timer(Sender: TObject); 
 var t:integer; 
 begin 
 set_channelAD(1,1); 
 set_rangeAD(0); 
 set_trigsource(0); 
 trig_AD; 
 Sleep(5); 
 If (EOC=0) and (INT=1) then 
 if (Read_AD>=2048) then 
 nhietdohtai :=(Read_AD-2048)*409.5/2047; 
 Editgtrinhietdohtai.Text:=FloattoStr(nhietdohtai); 
 93
 Canvas.MoveTo(80+i,430-trunc(nhietdohtai)); 
 Memo1.Lines.add(FloattoStr(nhietdohtai)); 
 { ve duong dac tuyen } 
 pot:=(nhietdohtai-nhietdodat)/nhietdodat*100; 
 Edit9.Text:=floattostr(pot); 
 ess:=(nhietdodat-nhietdohtai)*100/nhietdodat; 
 editgtrisaisohtai.text:=floattostr(ess); 
 dkPID; {dieu khien pid } 
 t:=trunc(U0); 
 Timer1.Interval:=t; 
 Timer1.Enabled := true; 
 Memo1.Lines.add(FloattoStr(Kp)); 
 i:=i+1; 
 end; 
{-----------------------------------------------------------------------} 
{24} procedure TFormdieukhien.Timer4Timer(Sender: TObject); 
 var a:integer; 
 q:string[1]; 
 begin 
 a:=length(chao); 
 q:=chao[1]; 
 delete(chao,1,1); 
 insert(q,chao,a); 
 dqc:=chao; 
 Formdieukhien.Edit1.Text:=dqc; 
 end; 
{-----------------------------------------------------------------------} 
{25}procedure TFormdieukhien.FormPaint(Sender: TObject); 
 begin 
 Canvas.Pen.Style:=psInsideFrame; 
 Canvas.Brush.Color :=clwhite; 
 Canvas.FillRect(Rect(10,210,340,460)); 
 Canvas.MoveTo(80,250); { ve truc tung} 
 Canvas.LineTo(80,430); 
 Canvas.MoveTo(80,430); { ve truc hoanh } 
 94
 Canvas.LineTo(300,430); 
 Canvas.Pen.Style:=psDash; 
 Canvas.MoveTo(80,280); 
 Canvas.LineTo(280,280); 
 Canvas.MoveTo(80,330); 
 Canvas.LineTo(280,330); 
 Canvas.MoveTo(80,380); 
 Canvas.LineTo(280,380); 
 Canvas.MoveTo(130,280); 
 Canvas.LineTo(130,430); 
 Canvas.MoveTo(180,280); 
 Canvas.LineTo(180,430); 
 Canvas.MoveTo(230,280); 
 Canvas.LineTo(230,430); 
 Canvas.MoveTo(280,280); 
 Canvas.LineTo(280,430); 
 Canvas.Pen.Style:= psSolid; 
 Canvas.Textout(72,435,'0'); 
 Canvas.Textout(122,435,'50'); 
 Canvas.Textout(172,435,'100'); 
 Canvas.Textout(222,435,'150'); 
 Canvas.Textout(272,435,'200'); 
 Canvas.Textout(58,377,'50'); 
 Canvas.Textout(58,327,'100'); 
 Canvas.Textout(58,277,'150'); 
 Canvas.Textout(310,424,'i'); 
 Canvas.Textout(60,240,'Nhiet do'); 
 Canvas.Textout(80,220,'Qua trinh dap ung cua lo nhiet'); 
end; 
end. 
BIEÅU ÑOÀ KHAÛO SAÙT HEÄ THOÁNG NHIEÄT 
 95
 96
Taøi lieäu tham khaûo 
• Höôùng daãn thí nghieäm ÑKTÑ 1 
• PC-LadCard cuûa Haõng Advantech 
• Saùch Ñieàu khieån töï ñoäng I cuûa Nguyeãn Phöông Haø 
• www.advantech.com 
• Vaø caùc taøi lieäu luaän vaên cuûa khoaù tröôùc vaø caùc ñòa chæ Internet 
khaùc 
            Các file đính kèm theo tài liệu này:
 Điều khiển PID thông qua Card AD giao tiếp với máy tính PCL818.pdf Điều khiển PID thông qua Card AD giao tiếp với máy tính PCL818.pdf