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 |
Chia sẻ: lvcdongnoi | Lượt xem: 2476 | 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