Đồ án Điều khiển nhiệt độ PID số PCL 818 là quá trình nghiên cứu của sinh viên trong nhà trường kết hợp với các thày cô có kinh nghiệm trong lĩnh vực điện tử đã đúc kết cho sinh viên có một cái nhìn tổng quan về đồ án điền khiển nhiệt độ quan trọng này.
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ LỜI CẢM ƠN Em xin chân thành cảm ơn Bộ môn Điều khiển tự động, thầy Hoàng Minh Trí thầy cô khác hướng dẫn tận tình , cung cấp cho em kiến thức quý báu cho em thời gian thực luận văn Em chân thành cảm ơn hổ trợ, đóng góp ý kiến bạn bè Đây lần đầu em làm Luận Văn , thiếu sót hay khiếm khuyết điều không tránh khỏi Em chân thành cám ơn đóng góp ý kiến chuyên môn để khả kỹ thuật em mở rộng Chân thành cảm ơn Sinh viên thực Nguyễn Ngọc Nhân Tháng / 2002 MỤC LỤC Phần LÝ THUYẾT Chương Các khối điều khiển nhiệt độ .8 Chương Nhiệt độ – Các loại cảm biến nhiệt độø .11 Nhiệt độvà thang đo nhiệt độø 12 Các loại cảm biết nhiệt độ .13 2.1 Thermocouple 13 2.2 RTD 13 2.3 Thermistor .14 2.4 IC cảm biến 14 Thermocouple hiệu ứng Seebeck 15 3.1 Hiệu ứng Seebeck 15 3.2 Quá trình dẫn điện Thermocouple 15 3.3 Cách đo hiệu điện thếø 17 3.4 Bù nhiệt 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 Các phương pháp biến đổi AD Card PCL-818 Advantech .22 Sơ lược phương pháp biến đổi AD .22 1.1 Biến đổi AD dùng 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 xuoá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 độ dốc 28 Card AD - PCL818 hãng Advantech 29 2.1 Các ghi Card .29 2.2 Chuyển đổi A/D , D/A , D/I , D/O 41 Chương Các phương pháp điều khiển Phương pháp PID số 44 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 khâu tỷ lệ 45 1.3 Điều khiển khâu vi phân tỷ lệ PD 46 1.2 Điều khiển khâu vi tích phân tỷ lệ PID 47 Phương pháp điều khiển PID số .49 Thiết kế PID số 51 Điều khiển PID hệ thống điều khiển nhiệt độ 52 Chương Các Loại Mạch Kích Và Solid State Relay ( SSR ) 56 Đóng ngắt baèng OpTo - Triac 56 Contactor Quang – Solid State Relay 58 Chương Các loại IC khác .60 IC Khác .60 OP07 61 Phần Phần Cứng 62 Khối cảm biến mạch gia công 63 Phần Lưu đồ giải thuật chương trình 67 1.Lưu đồ giải thuật .68 2.Chương trình điều khiển 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 LỜI NÓI ĐẦU Như biết, nhiệt độ thành phần vật lý quan trọng Việc thay đổi nhiệt độ vật chất ảnh hưởng nhiều đến cấu tạo, tính chất, đại lượng vật lý khác vật chất Ví dụ, thay đổi nhiệt độ chất khí làm thay đổi thể tích, áp suất chất khí bình Vì vậy, nghiên cứu khoa học, công nghiệp đời sống sinh hoạt, thu thập thông số điều khiển nhiệt độ điều cần thiết Trong lò nhiệt, máy điều hoà, máy lạnh hay lò viba, điều khiển nhiệt độ tính chất đònh cho sản phảm Trong ngành luyện kim, cần phải đạt đến nhiệt độ để kim loại nóng chảy, cần đạt nhiệt độ để ủ kim loại nhằm đạt tốt đặc tính học độ bền, độ dẻo, độ chống gỉ sét, … Trong ngành thực phẩm, cần trì nhiệt độ để nướng bánh, để nấu, để bảo quản, … Việc thay đổi thất thường nhiệt độ, không gây hư hại đến thiết bò hoạt động, ảnh hưởng đến trình sản xuất, sản phẩm Có nhiều phương pháp để điều khiển lò nhiệt độ Mỗi phương pháp mang đến kết khác thông qua phương pháp điều khiển khác Trong nội dung luận văn này, cho ta phương pháp điều khiển On-Off , PI điều khiển PID thông qua Card AD giao tiếp với máy tính PCL818 Mọi liệu trình điều khiển hiển thò lên máy tính dựa ngôn ngữ lập trình Delphi CÁC KHỐI CƠ BẢN TRONG HỆ THỐNG ĐIỀU KHIỂN NHIỆT ĐỘ Hệ thống điều khiển nhiệt độ thông dụng công nghiệp bao gồm : Cảm biến mạch gia công Mạch kích lò nhiệt Card AD/DA PCL818L Màn hình hiển thò Máy tính Chương trình điều khiển Như mạch có khối sau : Khối cảm biết gia công : sử dụng cảm biến nhiệt độ Thermocouple, lấy tín hiệu thông qua Op-Amp OP-07, đưa nhiệt độ cần xử lý ngõ vào Analog biến đổi AD Bộ biến đổi AD : mạch lấy tín hiệu AD để xử lý thông qua Card AD PCL-818 hãng Advantech Thông qua đó, Card AD đưa giá trò nhiệt độ thông số khác cho máy tính xử lý Ngoài PCL-818 Card DA với nhiệm vụ điều khiển mạch kích cho mạch nhiệt độ Mạch công suất : mạch bò tác động trực tiếp bới PCL-818, với nhiệm vụ kích ngắt lò trình điều khiển Linh kiện sử dụng mạch Solid State Relay(SSR) Khối xử lý :có thể xem máy tính khối xử lý Với ngôn ngữ lập trình Delphi, máy tính điều khiển trình đóng, ngắt lò Màn hình hiển thò : hình giao diện Delphi Các giá trò, nhu thông số, tác động kỹ thuật tác động trực tiếp hình Các hãng kỹ thuật ngày tích hợp thành phần thành sản phẩm chuyên dùng bán thò trường Có chương trình giao diện ( Visual Basic ) có nút điều khiển, thuận lợi cho người sử dụng Có thể chọn khâu khuếch đại P, PI, PD hay PID hãng Contronautics, Incorporated Simpson Electric Company… Trở lại mô hình điều khiển nhiệt, sơ đồ khối mô hình hoá trình điều khiển lò nhiệt Để tìm hiểu rõ chi tiết khác phương pháp thiết bò kỹ thuật sử dụng, xem xét thông chương 10 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 cua lo nhiet'); end; { -} {34} procedure TFormthongso.Button2Click(Sender: TObject); begin analog_out($0000); end; end 85 CHƯƠNG TRÌNH ĐỌC HIỆU CHỈNH NHIỆT ĐỘ THEO PHƯƠNGPHÁP ON-OFF , PI & PID Phương pháp On – Off Phương phaùp PID 86 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; 87 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); 88 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; 89 {$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 } var rang:byte; begin rang:=range and $03; outport(reg1,rang); end; { } {6} Procedure set_trigsource(trs:byte); 90 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; 91 { } {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= then begin a0:= Kp + Ki*T; a1:=-Kp + Ki*T; a2:= Kd/T; end; { dieu khien PID } If Formdieukhien.RadioGroup1.ItemIndex= 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=2048) then nhietdohtai:=(Read_AD2048)*409.5/2047; 94 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; 95 end; { editgtrisaisohtai.text:=floattostr(ess); until (ess =2048) then nhietdohtai :=(Read_AD2048)*409.5/2047; Editgtrinhietdohtai.Text:=FloattoStr(nhietdohtai); Canvas.MoveTo(80+i,430-trunc(nhietdohtai)); Memo1.Lines.add(FloattoStr(nhietdohtai)); { ve duong dac tuyen } pot:=(nhietdohtainhietdodat)/nhietdodat*100; Edit9.Text:=floattostr(pot); ess:=(nhietdodatnhietdohtai)*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; 96 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'); 97 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 BIỂU ĐỒ KHẢO SÁT HỆ THỐNG NHIỆT 98 Tài liệu tham khảo Hướng dẫn thí nghiệm ĐKTĐ PC-LadCard Hãng Advantech Sách Điều khiển tự động I Nguyễn Phương Hà www.advantech.com Và tài liệu luận văn khoá trước đòa Internet khác 99 ... LÝ THUYẾT Chương Các khối điều khiển nhiệt độ .8 Chương Nhiệt độ – Các loại cảm biến nhiệt độ .11 Nhiệt độvà thang đo nhiệt độ 12 Các loại cảm biết nhiệt độ .13 2.1 Thermocouple ... dụng nhiệt độ tham chiếu thường nhiệt độ môi trường nơi mạch hoạt động nên biết nhiệt độ vấn đề bù trừ nhiệt độ đặt để cho ta thu hiệu điện phụ thuộc vào nhiệt độ cần đo mà Bù trừ nhiệt độ nghóa... tiếp với máy tính PCL8 18 Mọi liệu trình điều khiển hiển thò lên máy tính dựa ngôn ngữ lập trình Delphi CÁC KHỐI CƠ BẢN TRONG HỆ THỐNG ĐIỀU KHIỂN NHIỆT ĐỘ Hệ thống điều khiển nhiệt độ thông dụng công