19
Page 1 [at_nightfall_09] - Mạch đo nhiệt độ điều khiển động cơ, hiển thị LCD. 1 Ni dung: MẠCH ĐO NHIỆT ĐỘ ĐIỀU KHIỂN ĐỘNG CƠ HIỂN THLCD .......................................................... 2 I. KHÁI NIỆM CƠ BẢN VMẠCH ĐO NHIỆT ĐỘ ĐIỀU KHIỂN ĐỘNG CƠ. ................................ 2 1.1. Khái nim mạch đo nhiệt độ. ......................................................................................................... 2 1.2. Mô hình điều khiển động cơ. ......................................................................................................... 2 1.3. Hin thLCD.................................................................................................................................. 2 II. NGUYÊN LÝ HOẠT ĐỘNG PIC16F877A. ....................................................................................... 2 2.1. Chức năng ADC trong PIC16F877A. ............................................................................................ 2 2.2. Cài đặt chế độ ADC. ...................................................................................................................... 3 III. NGUYÊN LÝ HOẠT ĐỘNG CA IC LM35. .................................................................................. 6 IV. KHI HIN THLCD. ...................................................................................................................... 7 4.1. Cách ni dây trong LCD ................................................................................................................ 7 4.2. Các hàm cơ bản trong LCD ........................................................................................................... 7 V. CÁC CHĐỘ ĐIỀU KHIỂN ĐỘNG CƠ. .......................................................................................... 8 5.1. Chế độ chn mode hin th.......................................................................................................... 10 5.2. Chế độ gim mức điều chỉnh ngưỡng nhiệt độ bt/tắt động cơ. .................................................. 10 5.3. Chế độ tăng mức điều chỉnh ngưỡng nhiệt độ bt/tắt động cơ..................................................... 11 5.4. Chế độ bt - tắt động cơ. .............................................................................................................. 11 VI. CÁC KHI CHỨC NĂNG KHÁC. ................................................................................................. 12 6.1. Tn shoạt động .......................................................................................................................... 12 6.2. Ngun cung cp cho PIC ............................................................................................................. 12 VII. CODE NP CHO PIC16F877A ..................................................................................................... 13 VIII. SƠ ĐỒ MCH THIT K. ........................................................................................................... 18 IX. SƠ ĐỒ MCH IN. ........................................................................................................................... 19 X. SN PHM THC T. .................................................................................................................... 19

Mach Do Nhiet Do, Dieu Khien Dong Co, Dung PIC

Embed Size (px)

Citation preview

Page 1: Mach Do Nhiet Do, Dieu Khien Dong Co, Dung PIC

Page 1

[at_nightfall_09] - Mạch đo nhiệt độ điều khiển động cơ, hiển thị LCD. 1

Nội dung: MẠCH ĐO NHIỆT ĐỘ ĐIỀU KHIỂN ĐỘNG CƠ HIỂN THỊ LCD .......................................................... 2

I. KHÁI NIỆM CƠ BẢN VỀ MẠCH ĐO NHIỆT ĐỘ ĐIỀU KHIỂN ĐỘNG CƠ. ................................ 2

1.1. Khái niệm mạch đo nhiệt độ. ......................................................................................................... 2

1.2. Mô hình điều khiển động cơ. ......................................................................................................... 2

1.3. Hiển thị LCD. ................................................................................................................................. 2

II. NGUYÊN LÝ HOẠT ĐỘNG PIC16F877A. ....................................................................................... 2

2.1. Chức năng ADC trong PIC16F877A. ............................................................................................ 2

2.2. Cài đặt chế độ ADC. ...................................................................................................................... 3

III. NGUYÊN LÝ HOẠT ĐỘNG CỦA IC LM35. .................................................................................. 6

IV. KHỐI HIỂN THỊ LCD. ...................................................................................................................... 7

4.1. Cách nối dây trong LCD ................................................................................................................ 7

4.2. Các hàm cơ bản trong LCD ........................................................................................................... 7

V. CÁC CHẾ ĐỘ ĐIỀU KHIỂN ĐỘNG CƠ. .......................................................................................... 8

5.1. Chế độ chọn mode hiển thị .......................................................................................................... 10

5.2. Chế độ giảm mức điều chỉnh ngưỡng nhiệt độ bật/tắt động cơ. .................................................. 10

5.3. Chế độ tăng mức điều chỉnh ngưỡng nhiệt độ bật/tắt động cơ..................................................... 11

5.4. Chế độ bật - tắt động cơ. .............................................................................................................. 11

VI. CÁC KHỐI CHỨC NĂNG KHÁC. ................................................................................................. 12

6.1. Tần số hoạt động .......................................................................................................................... 12

6.2. Nguồn cung cấp cho PIC ............................................................................................................. 12

VII. CODE NẠP CHO PIC16F877A ..................................................................................................... 13

VIII. SƠ ĐỒ MẠCH THIẾT KẾ. ........................................................................................................... 18

IX. SƠ ĐỒ MẠCH IN. ........................................................................................................................... 19

X. SẢN PHẨM THỰC TẾ. .................................................................................................................... 19

Page 2: Mach Do Nhiet Do, Dieu Khien Dong Co, Dung PIC

Page 2

[at_nightfall_09] - Mạch đo nhiệt độ điều khiển động cơ, hiển thị LCD. 2

MẠCH ĐO NHIỆT ĐỘ ĐIỀU KHIỂN ĐỘNG CƠ HIỂN THỊ LCD

I. KHÁI NIỆM CƠ BẢN VỀ MẠCH ĐO NHIỆT ĐỘ ĐIỀU KHIỂN ĐỘNG CƠ.

1.1. Khái niệm mạch đo nhiệt độ.

Nhiệt độ là một đại lượng vật lý vô hướng. Để đo đạc và tính toán giá trị của nó ta phải dùng

các bộ cảm biến. Mạch đo nhiệt độ dùng các loại bộ cảm biến LM35. Các bộ cảm biến LM35 là

bộ cảm biến nhiệt, mạch tích hợp chính xác cao mà điện áp đầu ra của nó tỷ lệ tuyến tính với

nhiệt độ theo thang độ Celsius(*)

.

Bộ cảm biến LM35 cũng không yêu cầu cân chỉnh ngoài vì vốn chúng đã được cân chỉnh.

Chúng đưa ra điện áp 10mV cho mỗi sự thay đổi 10C. Chương sau sẽ hướng dẫn chúng ta chọn

các cảm biến họ LM35 sao cho phù hợp với mạch đo nhiệt độ cần thiết kế.

Như vậy chỉ cần 1 bộ cảm biến LM35 ta có thể tính được giá trị nhiệt độ tại thời điểm xác

định dựa vào giá trị điện áp đầu ra LM35. Như đã nói ở trên, ứng với mỗi thay đổi 10C, giá trị

đầu ra sẽ tăng thêm 10mV. Do đo, qua một bộ chuyển đổi tín hiệu tương tự (điện áp) sang tín

hiệu số (bit) để hiển thị kết quả đo đạc và tính toán, xử lý kết quả.

Mạch chuyển đổi tương tự sang số ta có thể dùng IC ADC0804, Vi điểu khiển, Pic… Ở đây

chúng ta dùng PIC16F877A, vừa chuyển đổi ADC, hiển thị LCD, vừa điều khiển động cơ.

1.2. Mô hình điều khiển động cơ.

Để điều khiện động cơ quay hay ngừng quay thì cũng giống như công tắc điện, bật thì quay

và tắt thì ngừng. Quan trọng là bật khi nào và tắt khi nào và phải được thực hiện một cách tự

động. Giống như khi nhiệt độ trong phòng ở mức 26oC thì quạt tự bật và khi nhiệt độ trong

phòng xuống thấp hơn 22oC thì quạt tự động tắt. Để làm được điều này thì chúng ta phải có một

thiết bị đo nhiệt độ, và khi nhiệt độ hiện tại lớn hơn hay nhỏ hơn mức điện áp ngưỡng đã cài đặt

thì động cơ (quạt) sẽ được điều khiển theo chế độ đã định sẵn. Chương sau chúng ta sẽ tìm hiểu

sâu hơn về nguyên lý điều khiển cung như các chế độ khác nhau dùng để điều khiện động cơ.

1.3. Hiển thị LCD.

Khi nhiệt đo được qua bộ cảm biến và được chuyển đổi qua tín hiệu số. Chúng ta cần một

thiết bị để hiện thị giá trị đo được. Thiết bị đó có thể là LED hoặc LCD,…

Trong đề tài này, nhóm dùng LCD để hiển thị kết qua đo và hiển thị các chế độ điều khiện động

cơ. LCD ở đây là thiết bị hiện thị trên màn hình với kích cỡ 2x16. Tức là với 2 hàng chữ, mỗi

hàng 16 ký tự. Để hiển thị nhiều dòng ký tự ta phải hiển thị lần lượt. Tùy thuộc vào mức và quy

mô mà ta lựa chọn thiết bị hiển thị phù hợp.

II. NGUYÊN LÝ HOẠT ĐỘNG PIC16F877A.

2.1. Chức năng ADC trong PIC16F877A.

- Trong PIC 16F877A có hỗ trợ bộ chuyển đổi ADC 10 bit 8 kênh.

PIC16F877A có 8 ngõ vào Analog (RA4:RA0) và RE2:RE0).

Page 3: Mach Do Nhiet Do, Dieu Khien Dong Co, Dung PIC

Page 3

[at_nightfall_09] - Mạch đo nhiệt độ điều khiển động cơ, hiển thị LCD. 3

Kết quả chuyển đổi từ tín hiệu tương tự sang tín hiệu số là 10 bít tương ứng và được lưu

trong thanh ghi ADRESH:ADRESL. Khi không sử dụng bộ chuyển đổi ADC, các thanh ghi này

có thể được sử dụng như các thanh ghi thông thường. Khi quá trình chuyển đôi hoàn tất, kết quả sẽ được

lưu vào hai thanh ghi ADRESH:ADRESL. Cờ ngắt ADIF được set.

Quá trình chuyển đổi tương tự sang số bao gốm các bước sau:

1. Thiết lập các thông số cho bộ chuyển đổi ADC

Chọn ngõ vào alalog, chọn điện áp mẫu.

Chọn kênh chuyển đổi AD (Thanh ghi ADCON0)

Chọn xung Clock cho kênh chuyển đổi AD.

Cho phép bộ chuyển đổi AD hoạt động.

2. Thiết lập các cờ ngắt cho bộ AD.

Clear bit ADIF

Set bit ADIE

Set bit PEIE

Set bit GIE

3. Đợi cho tới khi quá trình lấy mẫu hoàn tất.

4. Bắt đầu quá trình chuyển đổi.

5. Đợi cho tới khi quá trình chuyển đổi hoàn tất.

6. Đọc kết quả chuyển đổi và xóa cờ ngắt, set bit.

7. Tiếp tục thực hiện các bước 1 và 2 cho quá trình chuyển đổi tiếp theo.

2.2. Cài đặt chế độ ADC.

Cài đặt chế độ ADC:

Setup_adc(mode):

Cú pháp:

Setup_adc (mode);

Setup_adc2(mode);

Thông số:

Mode - chế độ tín hiệu tương tự sang tín hiệu số. Sự lựa chọn hợp lý thay đổi phụ thuộc vào

thiết bị. Xem những thiết bị có tập tin .h cho tất cả sự lựa chọn. Một vài sự lựa chọn tiêu biểu bao

gồm:

ADC_OFF

ADC_CLOCK_INTERNAL

ADC_CLOCK_DIV_32

- Trả về: Không được định nghĩa.

- Chức năng: Định hình thể chuyển từ tín hiệu tương tự sang tín hiệu số.

- Tiện lợi: Chỉ có trong những thiết bị có bộ chuyển đổi tín hiệu tương tự sang tín hiệu số.

- Yêu cầu: Những hằng số đã được định nghĩa trong tập tin .h của thiết bị.

Page 4: Mach Do Nhiet Do, Dieu Khien Dong Co, Dung PIC

Page 4

[at_nightfall_09] - Mạch đo nhiệt độ điều khiển động cơ, hiển thị LCD. 4

Ví dụ: setup_adc_ports( ALL_ANALOG );

setup_adc (ADC_CLOCK_INTERNAL );

set_adc_channel( 0 );

value = read_adc();

setup_adc( ADC_OFF );

Setup_adc_ports(value):

Thiết lập những chân ADC có sẵn để chuyển từ tín hiệu tương tự sang tín hiệu số.

Cú pháp:

Setup_adc_ports (value)

Thông số:

Value - Một hằng số được định nghĩa trong tập tin .h của thiết bị.

- Trả về: Không được định nghĩa.

- Chức năng: Cài đặt những chân ADC là tín hiệu tương tự, tín hiệu số hoặc một sự kết hợp và

điện áp tham chiếu để sử dụng khi tính tóan giá trị ADC.

Sự kết hợp các chân tín hiệu tương tự đã được cho phép thay đổi phụ thuộc vào con chip và

được định nghĩa bằng cách sử dụng từng bit OR để ghép những chân đã được chọn cùng với

nhau. Kiểm tra thiết bị bao gồm tập tin các chân và điện áp tham chiếu đã được sắp đặt trong

danh sách hòan chỉnh. Hằng số ALL_ANALOG và NO_ANALOG là hợp lý cho tất cả con chip.

Một vài ví dụ khác định nghĩa chân là: ANALOG_RA3_REF - Kích hoạt tất cả các chân tín

hiệu tương tự và chân RA3 là điện áp tham chiếu.

RA0_RA1_RA3_ANALOG - Chỉ có chân RA0, RA1, RA3 là tín hiệu tương tự

- Tiện lợi: Chức năng này có sẵn trong các thiết bị với phần cứng Analog/Digital

- Yêu cầu: Những hằng số đã được định nghĩa trong tập tin .h của thiết bị

Ví dụ:

//Tất cả các chân analog

Setup_adc_ports( ALL_ANALOG );

Chân A0,A1,A3 là analog, và tất cả các chân còn lại là digital. Điện áp +5V được sử dụng như

điện áp tham chiếu.

Setup_adc_ports( RA0_RA1_RA3_ANALOG );

//Chân A0,A1 là analog,chân A3 được sử dụng cho điện áp tham chiếu và tất cả các chân còn lại

là digital

Setup_adc_ports( A0_RA1_ANALOGRA3_REF );

Set_adc_channel(channel):

Chỉ rõ những kênh dung để sử dụng cho việc gọi Analog/Digital.

Cú pháp: set_adc_channel (chan)

Thông số: Chân là số kênh được chọn.Số chân bắt đầu tại 0 và đã được đặt nhãn trong datasheet

AN0,AN1.

- Trả về: Không được định nghĩa.

Page 5: Mach Do Nhiet Do, Dieu Khien Dong Co, Dung PIC

Page 5

[at_nightfall_09] - Mạch đo nhiệt độ điều khiển động cơ, hiển thị LCD. 5

- Chức năng: Chỉ rõ những kênh được sử dụng cho việc gọi lệnh READ_ADC(). Phải chờ 1

khoảng thời gian ngắn sau khi thay đổi kênh trước khi nhận được giá trị đọc hợp lý. Thời gian

thay đổi phụ thuộc vào trở kháng của nguồn đầu vào. Khoảng 10us nói chung là tốt cho hầu hết

các ứng dụng. Không cần thay đổi kênh trước mỗi lần đọc nếu kênh không thay đổi.

Tiện lợi: Chức năng này có sẵn trong các thiết bị với phần cứng Analog/Digital

- Yêu cầu:Không cần thứ gì.

Ví dụ: Set_adc_channel(2);

delay_us(10);

value = read_adc();

read_adc(mode):

Bắt đầu quá trình chuyển đổi và đọc giá trị.Chế độ này có thể cũng điều khiển chức năng.

Cú pháp: value = read_adc ([mode]);

Thông số: mode là một thông số không bắt buộc.Nếu được sử dụng giá trị có thể:

ADC_START_AND_READ (Liên tục đọc,và đây là mặc định )

ADC_START_ONLY (Bắt đầu quá trình chuyển đổi và trả về giá trị)

ADC_READ_ONLY (Đọc kết quả chuyển đổi cuối cùng )

- Trả về: 8 bit hoặc 16 bit số nguyên phụ thuộc vào #DEVICE ADC= directive (directive:lời chỉ

dẫn, 8 hoặc 16).

- Chức năng: Đây là chức năng đọc giá trị số từ bộ chuyển đổi tín hiệu tương tự sang tín hiệu số.

Gọi lệnh setup_adc(), setup_adc_ports() and set_adc_channel() nên được làm vài lần trước khi

chức năng này được gọi.

Dãy giá trị trả về phụ thuộc vào số lượng bit tbộ chuyển đổi Analog/Digital trong con chip và sự

sắp đặt trong DEVICE ADC= directive như sau:

#DEVICE 8 bit 10 bit 11 bit 12 bit 16 bit

ADC=8 00-FF 00-FF 00-FF 00-FF 00-FF

ADC=10 x 0-3FF X 0-3FF x

ADC=11 x x 0-7FF x x

ADC=16 0-FF00 0-FFC0 0-FFEO 0-FFF0 0-FFFF

Lưu ý: X không được định nghĩa

- Tiện lợi: Chức năng này có sẵn trong các thiết bị với phần cứng Analog/Digital

- Yêu cầu: Những chân cố định đã được định nghĩa trong tập tin .h của thiết bị

Ví dụ: Setup_adc( ADC_CLOCK_INTERNAL );

Setup_adc_ports( ALL_ANALOG );

Set_adc_channel(1);

While ( input(PIN_B0)

{

delay_ms( 5000 );

value = read_adc();

printf("A/D value = %2x\n\r", value);

}

Page 6: Mach Do Nhiet Do, Dieu Khien Dong Co, Dung PIC

Page 6

[at_nightfall_09] - Mạch đo nhiệt độ điều khiển động cơ, hiển thị LCD. 6

read_adc(ADC_START_ONLY);

sleep();

value=read_adc(ADC_READ_ONLY);

ADC_done():Trả về 1 nếu bộ chuyển đổi đã hòan thành việc chuyển đổi của nó

- Tiền xử lý có liên quan:

#DEVICE ADC=xx : Định hình thể read_adc rồi trả về kính thước. Ví dụ, sử dụng 1 con PIC với

10 bit A/D bạn có thể sử dụng 8 hoặc 10 cho xx- 8 sẽ trả về bye có trọng số cao nhất, 10 sẽ trả về

tòan bộ giá trị đọc A/D 10 bit

Các ngắt có liên quan:

INT_AD: Ngắt xảy ra khi quá trình chuyển đổi đã hoàn tất

INT_ADOF: Ngắt xảy ra khi quá trình chuyển đổi trong thời gian chờ

Các tập tin có liên quan:

Không có,tất cả chức năng được cài đặt sẵn

Các thông số getenv() có liên quan:

ADC_CHANNELS : Số kênh Analog/Digital

ADC_RESOLUTION : Số lượng bit trả về bởi lệnh read_adc.

III. NGUYÊN LÝ HOẠT ĐỘNG CỦA IC LM35.

LM 35 là cảm biến nhiệt độ. LM35 có 3 chân (2 chân cấp nguồn và 1 chân xuất điện áp ra

tùy theo nhiệt độ). Nhiệt độ tăng 1C thì điện áp xuất ra ở chân out của LM35 tăng 10mV.

Hình 1:

Hình 2

Để đo lường nhiệt độ thì có thể dùng nhiều loại cảm biến nhiệt khác, mỗi loại có một ưu

điểm riêng phù hợp với từng nhu cầu riêng. Ở đây đề tài là đo nhiệt độ môi trường bình thường

nên sử dụng LM35 là tối ưu nhất vì: đây là loại cảm biến có độ chính xác cao, tầm hoạt động

tuyến tính từ 0-128 độ C, tiêu tán công suất thấp..

Page 7: Mach Do Nhiet Do, Dieu Khien Dong Co, Dung PIC

Page 7

[at_nightfall_09] - Mạch đo nhiệt độ điều khiển động cơ, hiển thị LCD. 7

Chân 1: Đấu với nguồn. Nguồn cung

cấp có thể từ 4V đến 20V tùy từng loại

IC LM35 sử dụng.

Chân 2: Chân Vout cho giá trị ra thay

đổi theo nhiệt độ môi trường. Ứng với

mỗi giá trị nhiệt độ đầu vào ta có mức

điện áp ra tương ứng. Với mỗi chênh

lệch 1oC thì điện áp đầu ra sẽ chênh

lệch 10mV.

Chân 3: Chân nối đất.

Sơ đồ mạch như hình bên: (Hình 3)

(Hình 3)

IV. KHỐI HIỂN THỊ LCD.

Như đã đề cấp trước, LCD dùng ở đây là LCD 2 hàng, mỗi hàng 16 ký tự.

Để sử dụng LCD , ta hãy đọc file “LCD.C” trong thư viện Driver của CCS. Ở đó CCS hướng

dẫn cách ta đi dây cho các chân của LCD, đồng thời CCS viết sẵn cho ta các hàm thao tác cho

LCD:

4.1. Cách nối dây trong LCD

Cách nối dây:

// Định nghĩa chức năng các chân.

// D0 Enable

// D1 RS (Reset)

// D2 RW (Rewrite)

// D4 D4

// D5 D5

// D6 D6

// D7 D7

// LCD chân D0-D3 không được sử dụng.

4.2. Các hàm cơ bản trong LCD

- Wrtchar("char") : hàm để xuất ký tự ra LCD.

- Setcursor(x,y) : hàm cho phép con trỏ nhảy tới vị trí (x,y) trên LCD.

Mô phỏng ví dụ dùng LCD bằng Proteus:

Code :

#include <16F877A.h>

#include <def_877a.h>

#device *=16 ADC=10

#include <lcd.h>

Page 8: Mach Do Nhiet Do, Dieu Khien Dong Co, Dung PIC

Page 8

[at_nightfall_09] - Mạch đo nhiệt độ điều khiển động cơ, hiển thị LCD. 8

#use delay(clock=20000000)

void hiennhietdo() // Ham hien thi nhiet do do duoc tu LM35

{

int8 t,chuc,donvi;

setcursor(0,0);

wrtchar("- DO NHIET DO -"); // Hien thi dong tren

t = ct;

chuc = t/10 + 48; // Tach so hang chuc va hang don vi

donvi = t%10 + 48;

setcursor(0,1);

wrtchar("NHIET DO: "); // Hien thi so do nhiet do len LCD

wrtchar(chuc);

wrtchar(donvi);

wrtchar("*C");

delay_ms(50);

}

V. CÁC CHẾ ĐỘ ĐIỀU KHIỂN ĐỘNG CƠ.

- Các chế độ điều khiển.

Code chọn chế độ điều khiện ứng với 4 nút

bấm.

Phím 1: Chọn chế độ - mode.

Phím 2: Chỉnh tăng ngưỡng nhiệt độ.

Phím 3: Chỉnh giảm ngưỡng nhiệt độ.

Phím 4: Chế độ bật tắt động cơ.

Void readkb() // Ham phat hien phim bam.

{

anphim=0;

if(INPUT(PIN_C0)==0) // Neu phim 1 duoc an (phim chon mode)

{

delay_ms(150); // Ham delay chong rung phim

while(INPUT(PIN_C0)==0); // Cho den khi nut duoc tha ra

mode++; // Tang mode len 1 de chuyen sang mode ke tiep

if(mode==3) mode=0; // Lap lai mode 0 khi da chuyen qua het cac mode

anphim=1;

Page 9: Mach Do Nhiet Do, Dieu Khien Dong Co, Dung PIC

Page 9

[at_nightfall_09] - Mạch đo nhiệt độ điều khiển động cơ, hiển thị LCD. 9

}

else

{

if(INPUT(PIN_C1)==0) // Neu phim 2 duoc an (phim giam)

{

delay_ms(150); // Chong rung phim (cho phim duoc an trong 1 luc)

if(INPUT(PIN_C1)==0)

{

if(mode==1)

{ if(tmin>0) tmin--; anphim=1; } // Giam nguong tuy theo mode, "tmin" >0

thì giảm 1

if(mode==2)

{ if(tmax>tmin+1) tmax--; anphim=1; } // de "tmax" không nhỏ hơn "tmin" +1

}

}

else

{

if(INPUT(PIN_C2)==0) // Neu phim 3 duoc an (phim tang)

{

delay_ms(150); // Cho phim duoc an trong 1 luc

if(INPUT(PIN_C2)==0)

{

if(mode==1)

{

if(tmin<tmax-1) tmin++; anphim=1; // Tang nguong tuy theo mode.

Tmin khong the >tmax-1

}

if(mode==2)

{

if(tmax<90) tmax++; anphim=1; // tmax khong lon hon 90do.

}

}

}

else

if(INPUT(PIN_C3)==0) // Neu phim 4 duoc an (phim bat/tat)

{

delay_ms(150);

Page 10: Mach Do Nhiet Do, Dieu Khien Dong Co, Dung PIC

Page 10

[at_nightfall_09] - Mạch đo nhiệt độ điều khiển động cơ, hiển thị LCD. 10

while(INPUT(PIN_C3)==0); // Cho den khi nut duoc tha ra

if (ct>=tmin&&ct<=tmax) // Neu nhiet do nam trong khoang 2 nguong

{ // thi nut 4 co chuc nang bat/tat quat

bat=~bat;

if(bat==1) OUTPUT_BIT(PIN_D0,1);

if(bat==0) OUTPUT_BIT(PIN_D0,0);

anphim=1;

}

}

}

}

}

5.1. Chế độ chọn mode hiển thị

Trong chế độ này, khi bấm phím 1 chế độ này sẽ được kích hoạt.

Có 3 mức hiển thị:

Đo nhiệt độ: Nhiệt độ là: 0C

Hẹn bật quạt: Hiển thị mức nhiệt độ đã cài để bật quạt.

Hẹn tắt quạt: Hiển thị mức nhiệt độ đã cài để tắt quạt.

if(INPUT(PIN_C0)==0) // Neu phim 1 duoc an (phim chon mode)

{

delay_ms(150); // Ham delay chong rung phim

while(INPUT(PIN_C0)==0); // Cho den khi nut duoc tha ra

mode++; // Tang mode len 1 de chuyen sang mode ke tiep

if(mode==3) mode=0; // Lap lai mode 0 khi da chuyen qua het cac mode

anphim=1;

}

5.2. Chế độ giảm mức điều chỉnh ngưỡng nhiệt độ bật/tắt động cơ.

Phím bấm thứ 2 sẽ kích hoạt chế độ điều khiển này. Khi chọn chế độ mode tắt hoặc bật động

cơ thì chế độ điều khiển này sẽ làm giảm giá trị ngưỡng cài đặt nhiệt độ để tắt hoặc bật động cơ.

Code:

Page 11: Mach Do Nhiet Do, Dieu Khien Dong Co, Dung PIC

Page 11

[at_nightfall_09] - Mạch đo nhiệt độ điều khiển động cơ, hiển thị LCD. 11

If (INPUT(PIN_C1)==0) // Neu phim 2 duoc an (phim giam)

{

delay_ms(150); // Chong rung phim (cho phim duoc an trong 1 luc)

if(INPUT(PIN_C1)==0)

{

if(mode==1)

{ if(tmin>0) tmin--; anphim=1; }

// Giam nguong tuy theo mode, "tmin" >0 thi giam 1

if(mode==2)

{ if(tmax>tmin+1) tmax--; anphim=1; }

// de "tmax" khong nho hon "tmin" +1

}

}

5.3. Chế độ tăng mức điều chỉnh ngưỡng nhiệt độ bật/tắt động cơ.

Phím bấm thứ 3 sẽ kích hoạt chế độ điều khiển này. Khi chọn chế độ mode tắt hoặc bật động

cơ thì chế độ điều khiển này sẽ làm tăng giá trị ngưỡng cài đặt nhiệt độ để tắt hoặc bật động cơ.

Code:

If (INPUT(PIN_C2)==0) // Neu phim 3 duoc an (phim tang)

{

delay_ms(150); // Cho phim duoc an trong 1 luc

if (INPUT(PIN_C2)==0)

{

If (mode==1)

{

If (tmin<tmax-1) tmin++; anphim=1; // Tang nguong tuy theo mode.

// Tmin khong the >tmax-1

}

if(mode==2)

{

if(tmax<90) tmax++; anphim=1; // tmax khong lon hon 90do.

}

}

}

5.4. Chế độ bật - tắt động cơ.

Phím bấm thứ 3 sẽ kích hoạt chế độ điều khiển này. Khi chọn chế độ mode tắt hoặc bật động

cơ thì chế độ điều khiển này sẽ tắt hoặc bật động cơ.

Code:

Page 12: Mach Do Nhiet Do, Dieu Khien Dong Co, Dung PIC

Page 12

[at_nightfall_09] - Mạch đo nhiệt độ điều khiển động cơ, hiển thị LCD. 12

If (INPUT(PIN_C3)==0) // Neu phim 4 duoc an (phim bat/tat)

{

delay_ms(150);

while(INPUT(PIN_C3)==0); // Cho den khi nut duoc tha ra

if (ct>=tmin&&ct<=tmax) // Neu nhiet do nam trong khoang giua 2 nguong

{ // thi nut 4 co chuc nang bat/tat quat

bat=~bat;

if(bat==1) OUTPUT_BIT(PIN_D0,1);

if(bat==0) OUTPUT_BIT(PIN_D0,0);

anphim=1;

}

}

VI. CÁC KHỐI CHỨC NĂNG KHÁC.

6.1. Tần số hoạt động

Tần số hoạt động: 20Hz

6.2. Nguồn cung cấp cho PIC

Thông thường khi cần cung cấp nguồn cho mạch, người ta thường dùng các bộ ổn áp. Các bộ

ổn áp này có chức năng cung cấp một nguồn điện ổn định, tức là giá trị điện áp cung cấp ổn định.

Việc có thêm các bộ ổn áp này giúp mạch hoạt động hiểu quả hơn, tránh việc dòng cung cấp quá

lớn làm hỏng linh kiện, IC trong mạch.

Page 13: Mach Do Nhiet Do, Dieu Khien Dong Co, Dung PIC

Page 13

[at_nightfall_09] - Mạch đo nhiệt độ điều khiển động cơ, hiển thị LCD. 13

Ổn áp hay ổn dòng người ta thường dùng Tranzito cung suất hoặc các IC 3 chân. Đối với IC 3

chân thì ta có các họ 78XX, 79XX.. Trong đó họ 78XX là ổn áp điện áp dương và dòng 79XX là

ổn áp điện áp âm..

VII. CODE NẠP CHO PIC16F877A

Code:

#include <16F877A.h>

#include <def_877a.h>

#device *=16 ADC=10

#include <lcd.h>

#FUSES NOWDT //No Watch Dog Timer

#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)

#FUSES NOPUT //No Power Up Timer

#FUSES NOPROTECT //Code not protected from reading

#FUSES NODEBUG //No Debug mode for ICD

#FUSES NOBROWNOUT //No brownout reset

#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for

I/O

#FUSES NOCPD //No EE protection

#FUSES NOWRT //Program memory not write protected

#FUSES RESERVED //Used to set the reserved FUSE bits

#use delay(clock=20000000)

int8 mode,tmin,tmax; // Khai bao cac bien dung trong ct

int16 ct;

int1 bat,anphim,docnhietdo;

int8 cnt=0;

void readkb() // Ham phat hien phim bam

{

anphim=0;

if(INPUT(PIN_C0)==0) // Neu phim 1 duoc an (phim chon mode)

{

delay_ms(150); // Ham delay chong rung phim

while(INPUT(PIN_C0)==0); // Cho den khi nut duoc tha ra

mode++; // Tang mode len 1 de chuyen sang mode ke tiep

if(mode==3) mode=0; // Lap lai mode 0 khi da chuyen qua het cac mode

Page 14: Mach Do Nhiet Do, Dieu Khien Dong Co, Dung PIC

Page 14

[at_nightfall_09] - Mạch đo nhiệt độ điều khiển động cơ, hiển thị LCD. 14

anphim=1;

}

else

{

if(INPUT(PIN_C1)==0) // Neu phim 2 duoc an (phim giam)

{

delay_ms(150); // Chong rung phim (cho phim duoc an trong 1 luc)

if(INPUT(PIN_C1)==0)

{

if(mode==1)

{ if(tmin>0) tmin--; anphim=1; } // Giam nguong tuy theo mode, "tmin" >0 thì giảm

1

if(mode==2)

{ if(tmax>tmin+1) tmax--; anphim=1; } // de "tmax" không nhỏ hơn "tmin" +1

}

}

else

{

if(INPUT(PIN_C2)==0) // Neu phim 3 duoc an (phim tang)

{

delay_ms(150); // Cho phim duoc an trong 1 luc

if(INPUT(PIN_C2)==0)

{

if(mode==1)

{

if(tmin<tmax-1) tmin++; anphim=1; // Tang nguong tuy theo mode. Tmin

khong the >tmax-1

}

if(mode==2)

{

if(tmax<90) tmax++; anphim=1; // tmax khong lon hon 90do.

}

}

}

else

if(INPUT(PIN_C3)==0) // Neu phim 4 duoc an (phim bat/tat)

{

Page 15: Mach Do Nhiet Do, Dieu Khien Dong Co, Dung PIC

Page 15

[at_nightfall_09] - Mạch đo nhiệt độ điều khiển động cơ, hiển thị LCD. 15

delay_ms(150);

while(INPUT(PIN_C3)==0); // Cho den khi nut duoc tha ra

if (ct>=tmin&&ct<=tmax) // Neu nhiet do nam trong khoang giua 2 nguong

{ // thi nut 4 co chuc nang bat/tat quat

bat=~bat;

if(bat==1) OUTPUT_BIT(PIN_D0,1);

if(bat==0) OUTPUT_BIT(PIN_D0,0);

anphim=1;

}

}

}

}

}

void check() // Ham kiem tra nguong (tat quat neu nhiet do duoi tmin

{ // va bat quat neu nhiet do tren tmax)

if (ct<tmin) { OUTPUT_BIT(PIN_D0,0); bat=0; }

if (ct>tmax) { OUTPUT_BIT(PIN_D0,1); bat=1; }

}

void hiennhietdo() // Ham hien thi nhiet do do duoc tu LM35

{

int8 t,chuc,donvi;

setcursor(0,0);

wrtchar("- DO NHIET DO -"); // Hien thi dong tren

t = ct;

chuc = t/10 + 48; // Tach so hang chuc va hang don vi

donvi = t%10 + 48;

setcursor(0,1);

wrtchar("NHIET DO: "); // Hien thi so do nhiet do len LCD

wrtchar(chuc);

wrtchar(donvi);

wrtchar("*C");

delay_ms(50);

}

void settmin() // Ham cai dat nguong nhiet do min

{

int8 t,chuc,donvi;

Page 16: Mach Do Nhiet Do, Dieu Khien Dong Co, Dung PIC

Page 16

[at_nightfall_09] - Mạch đo nhiệt độ điều khiển động cơ, hiển thị LCD. 16

setcursor(0,0);

wrtchar("- HEN TAT QUAT -");

t = tmin; // Tach hang chuc va don vi cua tmin va hien thi ra LCD

chuc = t/10 + 48;

donvi = t%10 + 48;

setcursor(0,1);

wrtchar("NEU DUOI: ");

wrtchar(chuc);

wrtchar(donvi);

wrtchar("*C");

delay_ms(50);

}

void settmax() // Ham cai dat nguong nhiet do max (tuong tu ham setmin)

{

int8 t,chuc,donvi;

setcursor(0,0);

wrtchar("- HEN BAT QUAT -");

t = tmax;

chuc = t/10 + 48;

donvi = t%10 + 48;

setcursor(0,1);

wrtchar("NEU TREN: ");

wrtchar(chuc);

wrtchar(donvi);

wrtchar("*C");

delay_ms(50);

}

void selectmode() // Ham lua chon mode hien thi

{

switch (mode)

{

case 0: hiennhietdo(); break;

case 1: settmin(); break;

Page 17: Mach Do Nhiet Do, Dieu Khien Dong Co, Dung PIC

Page 17

[at_nightfall_09] - Mạch đo nhiệt độ điều khiển động cơ, hiển thị LCD. 17

case 2: settmax(); break;

}

}

#INT_TIMER1 // Khai bao su dung ngat timer1

void ct_phuc_vu_ngat()

{

CLEAR_INTERRUPT(INT_TIMER1); // Xoa co ngat timer1

DISABLE_INTERRUPTS(GLOBAL); // Khong cho phep ngat khac

cnt++; // Sau moi ngat ta tang bien dem

if(cnt==10) // khi cnt=10 thi da dem duoc 10 lan tuong ung voi 1s

{

docnhietdo=1;

ct = READ_ADC();

ct = ct*0.49;

cnt=0;

}

else docnhietdo=0;

SET_TIMER1(3035);

ENABLE_INTERRUPTS(GLOBAL);

}

void main() // Ham ct chinh

{

Setup_ADC(ADC_CLOCK_INTERNAL); // Cai dat bo chuyen doi ADC

setup_adc_ports(AN0); // Ngo vao Analog la chan AN0

SET_ADC_CHANNEL(0); // Chon kenh chuyen doi ADC la kenh 0

delay_us(20);

mode = 0; // Khoi tao ban dau voi tmin=20*C va tmax=27*C

tmin = 20; // va hien thi mode do nhiet do dau tien

tmax = 27;

lcd_init(); // Khoi tao LCD

wrtcmd(0x01);

wrtcmd(0x28);

wrtcmd(0x0c);

SETUP_TIMER_1(T1_INTERNAL|T1_DIV_BY_8); // Cai dat timer1 voi bo chia tan 1:8

Page 18: Mach Do Nhiet Do, Dieu Khien Dong Co, Dung PIC

Page 18

[at_nightfall_09] - Mạch đo nhiệt độ điều khiển động cơ, hiển thị LCD. 18

SET_TIMER1(3035); // Gia tri khoi tao cho timer1 ( dem den 65535

// voi clock 20Mhz chia 8 => mot ngat tuong ung voi 0.1s )

ENABLE_INTERRUPTS(INT_TIMER1); // Cho phep ngat timer1

ENABLE_INTERRUPTS(GLOBAL); // Cho phep ngat toan cuc

ct = READ_ADC(); // Doc gia tri nhiet do dau tien

ct = ct*0.49;

while(1) // Vong lap vo han

{

selectmode();

do

{

if(docnhietdo==1) // Neu nhiet do duoc doc thi hien thi ra LCD neu dang

{ // o mode hien thi va tien hanh kiem tra nguong

if(mode==0) { hiennhietdo(); }

check(); // Kiem tra nguong

}

readkb();

}

while(anphim==0); // Lien tuc lap lai viec kiem tra xem nhiet do

} // co duoc doc hay ko va kiem tra phim bam

}

VIII. SƠ ĐỒ MẠCH THIẾT KẾ.

Page 19: Mach Do Nhiet Do, Dieu Khien Dong Co, Dung PIC

Page 19

[at_nightfall_09] - Mạch đo nhiệt độ điều khiển động cơ, hiển thị LCD. 19

Mạch được mô phỏng trên phần mềm Protues 7.6

IX. SƠ ĐỒ MẠCH IN.

X. SẢN PHẨM THỰC TẾ.