P. 1
Mach Do Nhiet Do, Dieu Khien Dong Co, Dung PIC

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

|Views: 221|Likes:
Được xuất bản bởiTrần Mạnh

More info:

Published by: Trần Mạnh on Mar 02, 2013
Bản quyền:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

06/21/2013

pdf

text

original

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


[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 1
0
C. 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 1
0
C, 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 26
o
C thì quạt tự bật và khi nhiệt độ trong
phòng xuống thấp hơn 22
o
C 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


[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


[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


[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


[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


[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 V
out
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 1
o
C 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


[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


[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


[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à:
0
C
 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


[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


[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


[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


[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


[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


[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


[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


[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


[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Ế.

Do đo. Mạch chuyển đổi tương tự sang số ta có thể dùng IC ADC0804.Mạch đo nhiệt độ điều khiển động cơ. Chúng đưa ra điện áp 10mV cho mỗi sự thay đổi 10C. Để đo đạc và tính toán giá trị của nó ta phải dùng các bộ cảm biến. Vi điểu khiển. hiển thị LCD. 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. Chức năng ADC trong PIC16F877A. 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. NGUYÊN LÝ HOẠT ĐỘNG PIC16F877A. Hiển thị LCD. 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ơ. Nhiệt độ là một đại lượng vật lý vô hướng. 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ế. xử lý kết quả.3. Thiết bị đó có thể là LED hoặc LCD. 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. 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ơ.2.1. bật thì quay và tắt thì ngừng. KHÁI NIỆM CƠ BẢN VỀ MẠCH ĐO NHIỆT ĐỘ Đ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. . vừa chuyển đổi ADC. 1. Để hiển thị nhiều dòng ký tự ta phải hiển thị lần lượt. 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. 1.… Trong đề tài này. hiển thị LCD. vừa điều khiển động cơ. 2.Trong PIC 16F877A có hỗ trợ bộ chuyển đổi ADC 10 bit 8 kênh. Khi nhiệt đo được qua bộ cảm biến và được chuyển đổi qua tín hiệu số.2 [at_nightfall_09] . 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. Mạch đo nhiệt độ dùng các loại bộ cảm biến LM35. II. giá trị đầu ra sẽ tăng thêm 10mV. 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(*). Các bộ cảm biến LM35 là bộ cảm biến nhiệt. Chúng ta cần một thiết bị để hiện thị giá trị đo được. 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. ứng với mỗi thay đổi 10C. 1. Khái niệm mạch đo nhiệt độ. MẠCH ĐO NHIỆT ĐỘ ĐIỀU KHIỂN ĐỘNG CƠ HIỂN THỊ LCD I. Page 2 . 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. Như đã nói ở trên. Tức là với 2 hàng chữ. mỗi hàng 16 ký tự. Mô hình điều khiển động cơ. Pic… Ở đây chúng ta dùng PIC16F877A. PIC16F877A có 8 ngõ vào Analog (RA4:RA0) và RE2:RE0). Để điều khiện động cơ quay hay ngừng quay thì cũng giống như công tắc điện.1. Để làm được điều này thì chúng ta phải có một thiết bị đo nhiệt độ.

You're Reading a Free Preview

Tải về
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->