ĐACN Mạch đo nhiệt độ và điều khiển động cơ, hiển thị LCD dùng PIC 16f877a - Pdf 16

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

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.


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 );

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ể:

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:


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>

 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

}
}

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.

[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
}

}
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>

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)
{

{ // 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");


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

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

IX. SƠ ĐỒ MẠCH IN.

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


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status