b) Lưu đồ thuật tốn chương trình con
Thuật tốn này được hỗ trợ bởi trình dịch CCS nên người dung khơng cần phải viết thuật toán cho việc đọc dữ liệu trên ADC, mà chỉ khi nào cần đọc điện áp đầu vào bộ ta gọi hàm đó ra và dữ liệu sẽ tự động được đưa ra.
• Lưu đồ thuật tốn đo nhiệt độ bằng phương pháp nội suy Spline
Hình 4.11: Lưu đồ thuật tốn đo nhiệt độ bằng phương pháp nội suy Spline
• Cảnh báo nhiệt độ
Hình 4.16: Lưu đồ thuật tốn chương trình cảnh báo nhiệt độ
• Giao tiếp máy tính
4.3. Tính tốn và thiết kế4.3.1. Sơ đồ nguyên lý tổng thể 4.3.1. Sơ đồ nguyên lý tổng thể
Hình 4.18: Sơ đồ nguyên lý tổng thể
4.3.2. Sơ đồ nguyên lý và nguyên tắc làm việc các khốia) Khối nguồn nuôi a) Khối nguồn nuôi
- Sơ đồ nguyên lý
- Nguyên tắc làm việc
Do yêu cầu độ ổn định nguồn cao cộng với kinh phí hợp lý cho bộ nguồn nên chúng em quyết định dung bộ nguồn máy tính để lấy ra nguồn ±12VDC. Nguồn +5VDC dùng để ni cho ADC và vi xử lý yêu cầu độ chính xác và ổn định cao nên +5VDC sẽ được tạo từ nguồn +12VDC qua IC7805 cùng mạch lọc nguồn. Tụ lọc nguồn bao gồm tụ lá 104 dùng lọc tần số cao và tụ 2200uF dùng lọc tần số thấp ( san phẳng điện áp ).
Điện áp tham chiếu cho ADC là 4.096V do đó phải tạo một nguồn riêng. Nguồn này làm điện áp tham chiếu nên rất quan trọng, yêu cần sự ổn định và chính xác rất cao. Có thể dùng các IC tạo nguồn chuyên dụng để đạt được điều này. Trong phạm vi đề tài chúng em đã test thử với 2 IC là MAX6341 và MCP1541 đều là IC chuyên dụng tạo nguồn 4.096V. Kết quả đo bằng đồng hồ số cho điện áp ra để tham chiếu là 4.06V. Với MAX6341 hiện tại ở thị trường Việt Nam khơng có IC dạng xuyên lỗ nên chúng em dùng với dạng linh kiện dán. Với MCP1541 thì hiện tại thị trường Việt Nam cũng khơng có chúng em phải đặt hàng từ nước ngồi nên phải mất một thời gian mới có để test thử. Trong sơ đồ nguyên lý trên chúng em vẽ với MAX6341 có các tụ lọc tần số cho nguồn ni và điện áp ra. Chi tiết về IC MAX6341 đã được trình bày ở trên.
b) Khối biến đổi
- Sơ đồ nguyên lý
- Nguyên tắc làm việc
Khối mạch đo có nhiệm vụ biến đổi xử lý các đại lượng sơ cấp thành tín hiệu điện đưa tới khối ADC.
Với mạch đo nhiệt độ, mạch được thiết kế cho cảm biến pt100 loại 3 dây. Mạch dùng 2 IC chính là XTR105 và RCV420. IC XTR105 có nhiệm vụ cấp nguồn dịng ni cho cảm biến và cho dòng ra ổn định 0 – 4mA phù hợp với dải đo nhiệt độ đầu vào. Các giá trị điện trở mắc vào mạch được tính tốn để thực hiện được dải đo trên.
Trước hết, dòng cấp cho cảm biến là 0.8mA lấy từ chân số 14 của IC XTR105. Gía trị điện trở RZ được lấy tương ứng với giá trị điện trở của pt100 ở nhiệt độ nhỏ nhất, trong phạm vi đề tài dải dải nhiệt độ đo là 0 – 4000C, giá trị RZ là 100Ω . Chân số 1 và chân số 14 của XTR105 là 2 chân nguồn dòng 0.8mA. Dòng từ chân 14 cấp cho pt100, dòng từ chân số 1 cấp cho RZ. Hai chân số 2 và số 13 chính là 2 chân đầu vào 2 bộ khuyêchs đại thuật toán bên trong XTR105, dùng để nhận biết sai lệch áp trên pt100 và RZ. Do vậy để điều chỉnh cảm biến đo nhiệt độ thấp nhất thì ta điều chỉnh RZ. Điện trở RG mắc vào chân số 3 và 4 là điện trở dùng để điều chỉnh offset zero đầu ra về 0 mA đầu ra. RG cùng với RLIN1 và RLIN2 được tính theo cơng thức dưới đây để phù hợp với dải cần đo ( RG được tính cho loại 2 hoặc 3 dây kết nối ).
R1 và R2 được tính theo cơng thức:
Cụ thể các giá trị điện trở được tính với dải đo 00C – 6000C như sau: RG = 471.112Ω
RLIN1= 4.86KΩ RLIN2= 7.153KΩ
Do yêu cầu độ chính xác cao và các giá trị điện trở này là số lẻ nên chúng em dùng biến trở vi chỉnh để điều chỉnh.Ngay cả điện trở 5 vạch màu đo bằng đồng hồ số cũng không đạt yêu cầu, hơn nữa nếu mắc nối tiếp hoặc song song các điện trở này cũng không đạt yêu cầu. Dùng đồng hồ số để đo và vặn vi chỉnh để đạt được giá trị trên là giải pháp tốt hơn cả.
Với các giá trị điện trở mắc với XTR105 được tính tốn như trên sẽ cho dòng ra chân số 7 XTR105 là 0mA – 20mA. Dòng này là đầu vào chân số 3 RCV420, RCV420 chuyển đổi dải dòng này thành dải áp 0V – 5V ở đầu ra. Để áp ra ổn định trước khi vào đầu vào ADC cần lọc tín hiệu do nhiễu sinh ra trên mạch. Có nhiều phương pháp lọc : bởi tụ lá, tụ gốm, tụ tan tan, lọc thông RC, lọc bởi xử lý số phần mềm. Ở đây, thực tế chúng em dùng tụ lọc tần số để thu được tín hiệu tốt nhất.
Do việc dùng điện áp tham chiếu ngoài cho ADC là 4.096V nên điện áp đầu ra cần điều chỉnh từ dải 0V – 5V về dài 0V – 4.096V. Trên thực tế, ADC dùng chỉ tạo được điện áp tham chiếu là 4.05V ( đo bằng đồng hồ số ), do đó thay vì đưa về dải từ 0V – 4.096V ta đưa về dải 0V – 4.05V. Giải pháp ở đây là dùng 1 cầu phân áp với giá trị điện trở vi chỉnh đủ lớn để tránh sụt áp.
c) Khối ADC
Hình 4.21: Sơ đồ nguyên lý khối ADC
- Nguyên tắc làm việc
ADC có nhiệm vụ chuyển đổi tín hiệu từ các kênh đầu vào tương tự thành tín hiệu số dạng chuỗi bit nối tiếp tới vi điều khiển. ADC ở đây dùng là loại nối tiếp IC MCP3204 có 4 kênh đầu vào : Kênh 0 làm đầu vào mạch đo nhiệt độ, kênh 1 làm đầu vào mạch đo áp suất, kênh 3 làm đầu vào mạch DAC. Với nguồn ni là 5VDC thì tần số lấy mẫu ADC là 100kp/s, với nguồi ni là 2.7V thì tần số lấy mẫu là 50kp/s. Trong đề tài chúng em dùng nguồn 5V đồng nghĩa với việc tần số lấy mẫu là100kp/s. Sau khi lấy mẫu và thực hiện chuyển đổi, dãy bít số ra đưa tới vi điều khiển theo giao thức giao tiếp kiểu SPI. Nguồn điện áp tham chiếu là 4.096V, đây là điện áp để tín hiệu đầu vào tương tự dùng để tham chiếu tới. Cụ thể về ADC MCP3204 đã được trình bày ở trên.
d) Khối DAC
Hình 4.22: Sơ đồ nguyên lý khối DAC
- Nguyên tắc làm việc
Khối DAC có nhiệm vụ chuyển đổi DAC, đầu vào lấy từ vi điều khiển, đầu ra tới kênh CH3 của ADC. DAC dùng là ADC0808 đầu vào 8 bit, từ chân số 5 tới chân số 12 của DAC. 8 bít số được lấy từ 1 cổng vi điều khiển, được tạo từ vi điều khiển chính là các điện áp mẫu tạo từ phần mềm do không tạo được mẫu đại lượng sơ cấp. Đầu ra DAC là dạng dòng phải qua mạch chuyển đổi dòng thành áp để đưa tới vi điều khiển. IC khuyếch đại thuật toán LF351 thực hiện nhiệm vụ chuyển dòng thành áp. Sơ đồ được nối theo sơ đồ trong datasheet của DAC0808.
e) Khối giao tiếp máy tính
Hình 4.23: Sơ đồ nguyên lý khối giao tiếp máy tính
- Nguyên tắc làm việc
Thực hiện nhiệm vụ giao tiếp với máy tính PC theo chuẩn RS232. IC thực hiện việc truyền nhận giao tiếp là MAX232. Cụ thể về phương thức truyền nhận đã được nêu rõ ở chương 3. Ở đây, trong phạm vi đề tài chỉ hiển thị kết quả đo được lên máy tính mà khơng thực hiện điều khiển từ máy tính nên có thể chỉ cần truyền dữ liệu về máy tính là được. Dữ liệu được đưa từ chân TXD của vi điều khiển tới chân TIN của MAX232, dữ liệu ra chân TOUT đưa tới chân số 2 cổng com và truyền lên máy tính. Theo lý thuyết, sự chập ở mạch ngồi có thể làm chết cổng com máy tính do khơng có cách ly điện mạch ngồi và máy tính. Để giải quyết vấn đề này chúng ta có thể dùng oppto để cách ly. Nhưng trên thực tế chưa có hiện tượng làm chết cổng com do chập mạch ngồi. Nếu cẩn thận chúng ta có tham khảo theo mạch sau:
Hình 4.25: Giao diện máy tính
Khối giao diện được thiết kế với các nút nhấn, đèn led và 2 hộp text nhận như trên hình vẽ. Kết quả đo được hiển thị lên 2 hộp text nhiệt độ và áp suất, nhiệt độ hiển thị ở text có lable nhiệt độ, áp suất hiển thị ở text có lable áp suất. Nút nhấn để set nhiệt độ hay áp suất cảnh báo, led đơn được tạo nhấp nháy mỗi khi quá nhiệt hay quá áp. Khi nhấn set nhiệt độ hay áp suất thì đó là giá trị ngưỡng để cảnh báo, nhiệt độ hay áp suất đặt cảnh báo được đặt trước từ chương trình. Khi muốn cảnh báo ở một điểm khác có thể nhấn nút up hoặc down để điều chỉnh.
f) Khối xử lý và hiển thị
- Sơ đồ nguyên lý
Hình 4.26: Sơ đồ nguyên lý khối xử lý và hiển thị
- Nguyên tắc làm việc
Khối xử lý là trung tâm điều khiển bao gồm thực hiện thuật toán nội suy, thực hiện giao thức bắt tay với IC và điều khiển hiển thị LCD. IC được dùng để xử lý được lựa chọn là PIC16F877A, ngôn ngữ C. Trong phạm vi ứng dụng đề tài cũng không cần thiết dùng tới IC này, mà thay vào đó có thể dùng 8051 với ngơn ngữ ASM kinh tế và cơ bản với những gì đã được học. Thực tế bây giờ người dùng PIC rất phổ biến do đó chúng em muốn được làm và thực hành về PIC để có cơ hội nắm rõ về nó hơn.
Trong sơ đồ trên, cổng A được dùng để nhận tín hiệu từ phím nhấn và điều khiển LED đơn cảnh báo. Cổng B dùng để cổng xuất dữ liệu bít số tới DAC, dữ liệu ra kiểu song song chính là điện áp mẫu được tạo từ phần mềm.
Mạch được làm theo kiểu là ủi thủ cơng. Việc đi mạch địi hỏi kỹ năng và kiến thức đi mạch chặt chẽ. Kỹ thuật đi mạch ( board ) phải đảm bảo các yếu tố sau:
- Đường số và đường tương tự phải nằm cách xa nhau trên mạch.
- Các đường tần số cao phải đi riêng và khoảng cách càng ngắn càng tốt. Trách các đường tương tự đi cạnh và gần để tránh nhiễu,cố gắng tạo mass phủ cạnh.
- Điện áp tham chiếu cho ADC phải ổn định nên tốt nhất nếu phải dùng áp tham chiếu ngồi thì nên tạo 1 nguồn riêng và tránh rẽ mạch hay bất cứ gì làm sụt áp. Các tụ lọc có giá trị lớn cũng nên hạn chế vì bản thân nó có thể tạo thành dịng rị.
- Đối với ADC dùng trong mạch thì tuyệt đối khơng được đi đường dây hay tụ gắn dưới gầm linh kiện. Có thể tham khảo tại trang chủ microchip.com để có được cách đi mạch tốt nhất cho từng trường hợp.
a) Sơ đồ board mạch chính
Hình 4.27: Sơ đồ board mạch chính
PHỤ LỤC
a) Chương trình vi điều khiển
//********** CODE CHUONG TRINH DO NHIET DO AP SUAT******
//*********DUNG****PHUNG****TIEP****VU******************
//======KHAI BAO THU VIEN HAM CHO VI DIEU KHIEN=======
#INCLUDE <16F877A.H> #INCLUDE <DEF_877A.H> #INCLUDE <MATH.H>
#FUSES NOWDT //NO WACHT DOG #FUSES HS //High speed Osc (> 4mhz) #FUSES NOPUT //NO Power Up Timer
#FUSES NOPROTECT //Program memory not write protected #FUSES NODEBUG //NO DEBUG MODE FOR ICD
#FUSES NOBROWNOUT //NO BROWNOUT RESET
#FUSES NOLVP //Low Voltage Programming on B3(PIC16) or B5(PIC18) #FUSES NOCPD //No EE protection
#USE DELAY(CLOCK=20000000)
#USE RS232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9) #INCLUDE <LCD.C> //THU VIEN LCD
#INCLUDE <MCP3204.C> //THU VIEN ADC MCP3204 #define mode RA0 //NUT CHON CHE DO
#define up RA1 //NUT TANG #define down RA2 //NUT GIAM // #DEFINE SET RA3 //NUT SET // BANG KHAC DO NHIET DO DON VI C
INT16
ND[21]={0,20,40,60,80,100,120,140,160,180,200,220,240,260,280,300,320,340,360,3 80,400};
// DIEN AP MAU DANG TUONG TU INT16
DA_M[21]={2,200,400,600,800,1000,1200,1400,1600,1800,2000,2200,2400,2600,28 00,3000,3200,3400,3600,3800,4050};
// DIEN AP MAU DANG SO INT16
DA_MS[21]={0,200,401,600,804,1014,1202,1405,1609,1812,2011,2203,2412,2614,2 815,3010,3212,3415,3616,3814,4095};
// BANG KHAC DO AP SUAT DON VI KPASCAL INT16 AS[21]={0,30,60,90,120,150,180,210,240,270,300,330,360,390,420,450,480,510,540, 570,600}; INT I; INT16 VALUE,PN,TP,DAT,DAT1; FLOAT T,T1,P,P1,A,B,C;
//------------------KHAI BAO CAC CHUONG TRINH CON----------------------------- // CHUONG TRINH TIM NUT NOI SUY
INT NUT_NOISUY(INT16 ADC);
// CHUONG TRINH GIAI PHUONG TRINH BAC NHAT VA BAC HAI
FLOAT GIAI_PT(INT16 X1,INT16 Y1,INT16 X2,INT16 Y2,INT16 X3,INT16 Y3,FLOAT Y);
VOID HIEN_THI(INT16 GIATRI);
// CHUONG TRINH DAT CHE DO NHIET DO VA AP SUAT VOID KT_PHIM();
// CHUONG TRINH NHAY LED CANH BAO NHIET DO VOID NHAY_LED();
// CHUONG TRINH NHAY LED CANH BAO AP SUAT VOID NHAY_LED1();
//---------------------CHUONG TRINH CHINH-------------------------------------------- VOID MAIN(){
LCD_INIT(); ADC_INIT();
DAT = 50; //--------DAT NHIET DO CANH BAO MAC DINH LA 50 DO C DAT1 = 50; //-------DAT AP SUAT CANH BAO MAC DINH LA 50 KPA DELAY_US(10);
LCD_SEND_BYTE(0,1); WHILE(1){
//--CHUONG TRINH DAT CHE DO VA CANH BAO NHIET DO VA AP SUAT KT_PHIM();
//---------------------CHUONG TRINH DO NHIET DO-------------------------------------- VALUE=READ_ANALOG_MCP(0,1);// KENH DO NHIET DO
T=GIAI_PT(DA_M[I-1],DA_MS[I- 1],DA_M[I],DA_MS[I],DA_M[I+1],DA_MS[I+1],VALUE); T1=GIAI_PT(ND[I-1],DA_M[I-1],ND[I],DA_M[I],ND[I+1],DA_M[I+1],T); PN=T1; PUTC('N'); LCD_GOTOXY(1,1); LCD_PUTC("ND= ");
HIEN_THI(PN); // HIEN THI PHAN NGUYEN CUA NHIET DO LCD_PUTC(".");
TP=(T1-PN)*1000;
HIEN_THI(TP); // HIEN THI PHAN THAP PHAN CUA NIET DO LCD_PUTC(" C");
IF(DAT<T1){ // SO SANH VA DUA RA CANH BAO LCD_PUTC("CANH BAO!!!");
NHAY_LED(); };
//--------------------CHUONG TRINH DO AP SUAT------------------------------------------ VALUE=READ_ANALOG_MCP(1,1); // KENH DO AP SUAT
I=NUT_NOISUY(VALUE); // NUT NOI SUY CUA AP SUAT P=GIAI_PT(DA_M[I-1],DA_MS[I-
1],DA_M[I],DA_MS[I],DA_M[I+1],DA_MS[I+1],VALUE);
P1=GIAI_PT(AS[I-1],DA_M[I-1],AS[I],DA_M[I],AS[I+1],DA_M[I+1],P); PUTC('A');
LCD_GOTOXY(1,2); LCD_PUTC("AP= "); PN=P1;
HIEN_THI(PN); // HIEN THI PHAN NGUYEN CUA AP SUAT LCD_PUTC(".");
TP=(P1=PN)*1000;
HIEN_THI(TP); // HIEN THI PHAN THAP PHAN CUA AP SUAT