Thiểt kế bộ điều khiển PID số sử dụng PLC

Phần 1. LÝ THUYẾT . 7 Chương 1. Các khối cơ bản trong điều khiển nhiệt độ 8 Chương 2. Nhiệt độ – Các loại cảm biến nhiệt độ . 11 1. Nhiệt độvà các thang đo nhiệt độ 12 2. Các loại cảm biết nhiệt độ hiện tại 13 2.1. Thermocouple . 13 2.2. RTD . 13 2.3. Thermistor 14 2.4. IC cảm biến . 14 3. Thermocouple và hiệu ứng Seebeck . 15 3.1. Hiệu ứng Seebeck 15 3.2. Quá trình dẫn điện trong Thermocouple . 15 3.3. Cách đo hiệu điện thế 17 3.4. Bù nhiệt của môi trường 19 3.5. Các loại Thermocouple . 20 3.4. Một số nhiệt độ chuẩn 21 Chương 3. Các phương pháp biến đổi AD Card PCL-818 của Advantech 22 1. Sơ lược các phương pháp biến đổi AD 22 1.1. Biến đổi AD dùng bộ biến đổi DA 22 1.2. Bộ biến đổi Flash-AD 26 1.3. Bộ biến đổi AD theo hàm dốc dạng lên xuống 27 1.4. Bộ biến đổi AD dùng chuyển đổi áp sang tần số . 27 1.5. Bộ biến đổi AD theo tích phân 2 độ dốc 28 2. Card AD - PCL818 của hãng Advantech . 29 2.1. Các thanh ghi của Card 29 2.2. Chuyển đổi A/D , D/A , D/I , D/O . 41 Chương 4. Các phương pháp điều khiển Phương pháp PID số 44 1. Các phương pháp điều khiển . 44 1.1 Điều khiển On - Off 44 1.2. Điều khiển bằng khâu tỷ lệ 45 1.3. Điều khiển bằng khâu vi phân tỷ lệ PD 46 1.2. Điều khiển bằng khâu vi tích phân tỷ lệ PID . 47 2. Phương pháp điều khiển PID số 49 3. Thiết kế PID số . 51 4. Điều khiển PID trong hệ thống điều khiển nhiệt độ . 52 Chương 5. Các Loại Mạch Kích Và Solid State Relay ( SSR ) . 56 1. Đóng ngắt bằng OpTo - Triac 56 2. Contactor Quang – Solid State Relay . 58 Chương 6 . Các loại IC khác . 60 1. IC Khác 60 2. OP07 61 Phần 2. Phần Cứng . 62 Khối cảm biến và mạch gia công . 63 Phần 3. Lưu đồ giải thuật và chương trình . 67 1.Lưu đồ giải thuật 68 2.Chương trình điều khiển bằng ngôn ngữ Delphi 71 Biểu đồ khảo sát hệ thống nhiệt 99 Tài liệu tham khảo . 102

doc96 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2405 | Lượt tải: 4download
Bạn đang xem trước 20 trang tài liệu Thiểt kế bộ điều khiển PID số sử dụng PLC, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ofeware Driver cuûanhaøsaûn xuaát Moãi PC_LABCARD coù moät Sofeware Drivercho pheùp chuùng ta coù theå duøng haøm vaø thuû tuïc vieát saún ñeå vieát chöông trình öùng duïng caáp cao nhö: BASIC, C, TURBO PASCAL, DELPHI, VISUAL BASIC… Ñieàu naøy cho pheùp chuùng ta vieát chöông trình 1 caùch ñôn giaûn hôn vieát tröïc tieáp vaøo caùc thanh ghi vì taát caû caùc haøm ñeàu keùo taát caû tham soá töø baûng tham soá. Chuùng ta khoâng caànñònh laïi baïng tham soá moãi khi ta goïi noù, chæ khi naøo baûng tham soá coù giaù trò thay ñoåi. Chöông trình caøi ñaët chöùa trong CDROM. Trong chöông trình öùng duïng, caàn phaûi khai baùo söû duïng Driver. Driver cuûa haõng ADVANTECH vieát chung cho nhieàu loaïi CARD cuûa haõng vaø vieäc ñoïc, vaø tìm hieåu caùc haøm vieát saún seõ maát nhieàu thôøi gian. Chuùng ta coù theå söû duïng phaàn UNIT coù saún baèng ngoân ngöõ Delphi cuûa thaày Nguyeãn Ñöùc Thaønh. 4 CAÙC PHÖÔNG PHAÙP ÑIEÀU KHIEÅN PHÖÔNG PHAÙP PID SOÁ 1. CAÙc PHÖÔNG PHAÙP ÑIEÀU KHIEÅN Heä thoáng ñieàu khieån loø nhieät coù ñöôøng ñaëc tuyeán nhö hình veõ. Do ñieàu kieän moâi tröôøng, yeâu caàu heä thoáng thieát keá, ta caàn ñieàu khieån loø nhieät thoaûû maõn theo yeâu caàu nhö tính oån ñònh, chaát löôïng cuûa heä thoáng. Vì vaäy hieäu chænh laïi heä thoáng laø ñieàu taát yeáu. Ñeå heä ñaït ñöôïc caùc yeâu caàu veà tính oån ñònh, ñoä chính xaùc, ñaùp öùng quaù ñoä, ta caàn phaûi theâm vaøo heä thoáng hoài tieáp cô baûn vaøi loaïi thieát bò cô baûn naøo ñoù. Chuùng ta goïi quaù trình boå sung phaàn cöùng cuõng nhö phaàn meàm vaøo heä cô baûn nhaèm thoaû maûn yeâu caàu veà tính oån ñònh, ñoä chính xaùc, taêng ñoä döï tröû pha vaø quaù trình quaù ñoä laø quaù trình thieát keá. Thuaät ngöû oån ñònh hoaù thöôøng duøng ñeå chæ quaù trình nhaèm ñaït yeâu caàu veà tính oån ñònh. Khaùi nieäm buø hay hieäu chænh ñeå chæ quaù trình laøm taêng ñoä chính xaùc, ñoä döï tröõ pha vaø toác ñoä ñaùp öùng. 1.1 Ñieàu khieån On-Off. Ñaây laø loaïi ñieàu khieån töông ñoái ñôn giaûn nhaát, ñöôïc duøng trong caùc loaïi saûn phaåm phuïc vuï cho gia ñình nhö maùy ñieàu hoaø nhieät ñoä, loø nhieät, …Khi loø nhieät coù nhieät ñoä nhoû hôn nhoû hôn giaù trò nhieät ñoä ñaët, boä nhieät seõbaät leân vôùi coâng suaát cöïc ñaïi. Khi loø nhieät coù nhieät ñoä lôùn hôn nhieät ñoä ñaët, boä nhieät seõ taét loø. Quaù trình On-Off loø nhieät dieãn ra vôùi giaù trò sai soá cho pheùp nhaèm ngaên ngöøa nhieãu trong quaù trình baät taét loø nhieät quaù nhanh khi nhieät ñoä loø gaàn vôùi nhieät ñoä ñaët. Dao ñoäng nhieät ñöôïc bieåu dieãn trong bieåu ñoà nhö sau : 1.2 Ñieàu khieån baèng khaâu tyû leä Ñaây laø hình thöùc ñieàu khieån toát hôn ñieàu khieån On-Off baèng caùch cung caáp naêng löôïng cho loø nhieät döïa vaøo söï khaùc bieätveà nhieät ñoä giöõa laø nhieät vaø nhieät ñoä ñaët, vôùi P ñöôïc xem laø ñoä khueách ñaïi tyû leä cuûa boä ñieàu khieån. Khi P taêng, söï ñaùp öùng quaù ñoä nhanh hôn nhöng ngöôïc laïi, heä thoáng coù nhieät ñoä naèm döôùi möùc nhieät ñoä ñieàu khieån vaø khoâng oån ñònh. 1.3 Ñieàu khieån baèng khaâu vi phaân tyû leä PD Vaán ñeà veà tính oån ñònh vaø quaù taàm trong ñieàu khieån tyû leä vôùi ñoä khueách ñaïi lôùn , coù theå ñöôïc giaûm ñi khi theâm vaøo ñoù laø khaâu vi phaân cho tín hieäu sai soá. Kyõ thuaät ñoù ñöôïc goïi laø kyõ thuaät ñieàu khieån PD. Khaâu vi phaân coù theå hieäu chænh khaû naêng ñaùp öùng söï thay ñoåi taïi nhieät ñoä ñaët, ñoù laø giaûm ñoä voït loá , ñaùp öùng ra c(t) bôùt nhaáp nhoâ hôn, ñöôïc bieåu dieãn ôû hình sau : Boä hieäu chænh PD khoâng theå thöïc hieän baèng caùc linh kieän maïch thuï ñoäng, coù theå duøng kheách ñaïi thuaät toaùn, ñieän trôû vaø tuï ñieän. Nhöôïc ñieåm cuûa boä PD naøy laø raát nhaïy veà nhieãu vì baûn thaân boä PD laø maïch loïc thoâng cao, vôùi ñoä lôïi lôùn hôn 1 seõ laøm taêng söï aûnh höôûng cuûa tín hieäu nhieãu. Boä PI Haøm truyeàn ñaït cuûa PI coù daïng 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 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 d(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 + 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ø : 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. 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á. Digital Computer Khaâu ñieàu khieån G1(s) Khaâu ñieàu khieån G2(s) D/A A/D 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. 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ä. Haøm truyeàn cuûa boä ñieàu khieån vi tích phaân tyû leä PID cho bôûi: 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ø : 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 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 : Daây ñoát Ñieàu Maïch ño vaø chæ thò Maïch ñoäng löïc Maïch ñieàu Ñaët nhieät ñoä khieån khieån TC Boä ñieàu khieån nhieät ñoä Phaûn hoài Loø ñieän 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) 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 : 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)= 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 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 haøm truyeàn trôû neân: 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)= 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: 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: a= 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)= 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+Kd*=u(t)*K Giaùn ñoaïn hoaù: Khaâu vi phaân(duøng ñònh nghóa sai phaân): Kd*=*(e[n]-e[n-1]) Khaâu tích phaân(theo nguyeân taéc hình thang): = vôùi e(0)=0 suy ra u[n]*K=Kp*e[n]+ 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*e[n]+A*e[n-1]+A*e[n-2] )/K u[n]=u[n-1]+( A*e[n]+A*e[n-1]+A*e[n-2] )/K vôùi A=Kp++ A=-Kp - A= 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 ÑOÙNG NGAÉT BAÈNG OPTO _TRIAC Ñ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 ). CONTACTOR QUANG _ SOLID STATE RELAY 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. 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 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 : 10mV. Ñoä troâi offset thaáp : 0,2mV/°C. Ñoä oån ñònh ñoái vôùi thôøi gian cao : 0,2mV/thaùng. Ít bò aûnh höôûng bôûi nhieãu : 0,35mVp-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. OP07 laø moät IC OPAMP coù ñoä chính xaùc cao, vôùi offset thaáp (tieâu chuaån laø 10mV, max laø 25mV). Ñoä troâi offset khoaûng 0,2mV/°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. Khoái caûm bieán vaø gia coâng 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ø 40mV/°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 : 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 (40mV/°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ø : Khoâng bò aûnh höôûng cuûa nhieät ñoä moâi tröôøng : choïn R9 = 100W Þ R10 + R3 = 25 KW Þ choïn R10 = 22KW vaø R3 laø bieán trôû 10KW. 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) : vôùi (R10+ R3)//R9 = (25KW)//(100W) = 99,6W (1) khi ñoù, ñieän aùp ra laø : ñ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 : choïn R6 = 100W Þ choïn R7 = 33KW; R4 laø bieán trôû 10KW. Chænh R4 cho ñoä phaân giaûi. Thay vaøo (1) : V1 ñöôïc taïo ra töø caàu chia ñieän aùp R5 = 3MW vaø R1 laø bieán trôû 10KW. Þ caàn chænh R1 ñeå V1 ñaït 10.9mV Caùc tuï C14, C15, C16 choïn giaù trò 10mF ñ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. LÖU ÑOÀ GIAÛI THUAÄT Löu ñoà ñoïc AD Begin Kích OPTO ñeå loø nhieät hoaït ñoäng Ñoïc AD Y[i]:= giaù trò (AD)/8.192 (EOC=0)&(INT=1)? N Veõ ñaëc tuyeán loø nhieät Y ess =(T(n)-T(n-1))/T(n) Thoaùt N 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 = Löu ñoà hieäu chænh loø nhieät Begin Kích OPTO ñeå loø nhieät hoaït ñoäng (EOC=0)&(INT=1)? N Y Ñoïc AD vaø veõ ñoà thò To[i]:= giaù trò (AD)/8.192 Hieäu chænh PID U0=A0*Ekt+ A1*Ekt1+A2*Ekt2 Hieäu chænh On – Off To[I]=Toñaët ess =(Tñaët-Tht)/Tñaët N Y 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; 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); 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} 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; {------------------------------------------------------------------------} {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); 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; 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; 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 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; 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; 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; { 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; 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); 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. 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 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; 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); 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; 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; {------------------------------------------------------------------------} {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 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 } 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; 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; {-------------------------------------------------------------------------} {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; {-----------------------------------------------------------------------} {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); 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 } 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 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:

  • docThiểt kế bộ điều khiển PID số sử dụng PLC.doc