1
Phụ Lục
LỜI MỞ ĐẦU
Ngày nay, với những ứng dụng của khoa học kỹ thuật tiên tiến, thế giới
của chúng ta đã và đang ngày một thay đổi, văn minh và hiện đại hơn. Sự phát
triển của kỹ thuật điện tử đã tạo ra hàng loạt những thiết bị với các đặc điểm nổi
bật như sự chính xác cao, tốc độ nhanh, gọn nhẹ là những yếu tố rất cần thiết góp
phần cho hoạt động của con người đạt hiệu quả cao.
Các bộ điều khiển sử dụng vi điều khiển tuy đơn giản nhưng để vận hành
và sử dụng được lại là một điều rất phức tạp. Các bộ vi điều khiển theo thời gian
cùng với sự phát triển của công nghệ bán dẫn đã tiến triển rất nhanh, từ các bộ vi
điều khiển 4 bit đơn giản đến các bộ vi điều khiển 32 bit, rồi sau này là 64 bit.
Điện tử đang trở thành một ngành khoa học đa nhiệm vụ. Điện tử đã đáp ứng
được những đòi hỏi không ngừng từ các lĩnh vực công – nông – lâm – ngư
nghiệp cho đến các nhu cầu cần thiết trong hoạt động đời sống hằng ngày.
Một trong những ứng dụng thiết thực trong đó là ứng dụng về nhiệt kế
điện tử. Với môn học Vi điều khiển này, em đã quyết định nhận làm đồ án thiết
kế mạch đo nhiệt độ dùng IC LM35.
Đồ án được chia làm 2 chương lớn:
2
Chương 1: Cơ sở lý thuyết.
Chương 2: Vẽ mô phỏng và chạy mô phỏng trên proteus
Chương 3 : Viết code và nạp code chạy mạch thực
Trong suốt thời gian thực hiện đề tài, chúng em đã gặp một số vướng mắc về lý
thuyết và khó khăn trong việc làm sản phẩm. Tuy nhiên, em đã nhận được sự giải đáp
và hướng dẫn kịp thời của thầy Đào Hiếu, sự góp ý kiến của các bạn sinh viên trong
lớp. Em xin chân thành cảm ơn và mong muốn nhận được nhiều hơn nữa sự giúp đỡ,
chỉ bảo của thầy và bạn trong các đồ án sau này.
3
Chương 1 Cơ sở lý thuyết
1.1 Giới thiệu chung về mạch
Ngày nay việc sử dụng các thiết bị điện tử phục vụ đời sống hàng ngày rất
phổ biến. Trong đó ta có thể kể đến các thiết bị cảm ứng và hiển thị các thông số
môi trường phục vụ nhiều mục đích khác nhau nhằm tạo sự tiện lợi trong sinh hoạt
hàng ngày. Bắt nguồn từ mục đích đó, em đã thiết kế một mạch cảm ứng nhiệt độ
và hiển thị ra LCD sử dụng vi điều khiển PIC 16F877A và linh kiện cảm ứng nhiệt
độ LM35. Nhiệt độ là một thông số phổ biến và rất được quan tâm trong thực tế nói
riêng và trong kĩ thuật nói chung, việc cảm ứng nhiệt độ và hiển thị rất hữu ích và
không khó thực hiện. Nhóm em chọn các linh kiện không quá phức tạp và khó sử
dụng như PIC 16F877A, màn hình LCD 16x2 , cảm biến nhiệt LM35 có khả năng
cảm biến tốt và dễ tìm mua.
Để bắt đầu vào làm mạch này, chúng em trải qua quá trình tra cứu sách vở,
tài liệu thư viện, các trang web, ... cho nhóm em cách nhìn tổng quan về mạch của
nhóm cần tìm hiểu và nắm những gì cho mạch của mình. Từ đó em rút ra được
những khái niệm cần nắm để thực hiên mạch là:
-
Chức năng ADC của PIC ứng dụng trong mạch.
Cách sử dụng LCD, giao tiếp giữa PIC và LCD.
Cách sử dụng cảm biến.
Tới đây đủ công cụ để làm mạch thực tế. (Viết code, proteus, vẽ layout,
test mạch thử.)
Làm ra mạch thực tế.
1.2 Linh kiện sử dụng trong mạch
-PIC 16F877A
-Màn hình LCD 16X2
-Cảm biến nhiệt LM35
-Thạch anh
-Bộ nguồn 9V
- ổn áp 7805
-Tụ, điện trở, biến trở, nút bấm.,led,…
1.3 Các khối , công dụng chức năng của của các khối
1.3.1
Pic16F877A
Có thể nói, hiện nay vi điều khiển đã rất phổ biến ở Việt Nam, và
được ứng dụng rất nhiều. Hiện nay có các họ vi điều khiển nổi tiếng như Ätmel,
4
Intel, hang Motorola, hãng Microchip (PIC)... Nhóm em chọn PIC cho việc làm
quen với vi điều khiển bởi vì PIC là họ vi điều khiển mạnh, giàu tài nguyên về
phần cứng, được hỗ trợ nhiều tài liệu từ hãng sản xuất, và có nhiều tập lệnh để lập
trình. Hiện nay, PIC được hỗ trợ rộng rãi từ cộng đồng và chúng ta dễ dàng tự học
PIC
thông
qua
các
trang
web
như
www.diendandientu.com,www.picvietnam.com, ...
Cụ thể nhóm em chọn PIC 16FS77Ä của hãng Microchip. Đây là dòng PIC
phổ biến, giá thành rẻ, có đầy đủ tính năng cơ bản của PIC, đơn giản cho người
mới bắt đầu học, có nhiều tài liệu để tham khảo và học tập. Pic được tích hợp nhiều
thiết bị ngoại vi nên dẫn đến thiết kế mạch đơn giản.
a) Cấu trúc tổng quát PIC 16F877A.
-
40 pins gồm tổng cộng 5 port (Port Ä có 6 pins , port B, C, D có S pins, và port
E có 3 pins).
-
8Kb Flash ROM
-
36S bytes RÄM
-
256 bytes EFPROM
-
3 Timer gồm: Timer0 và Timer2 Sbit. Timer1 16bit
-
2 bộ Capture/Compare/PWM
-
1 bộ biến đổi analog sang digital (ÄDC)
-
2 bộ so sánh tương tự
-
1 bộ định thời giám sát
-
1 cổng song song 8 bit với các tín hiệu điều khiển
-
1 cổng nối tiếp
-
15 nguồn ngắt
Ưu điểm của PIC là tập lệnh gọn, dễ nhớ (35 lệnh) lập trình tiết kiệm
bộ nhớ, tốc độ xử lý nhanh (cho phép chu kỳ máy lên tới 5Mhz). Bộ nhớ đủ cho
hầu hết các ứng dụng thông thường.
Sơ đồ chân pic16f877a như hình vẽ
5
Á
sơ
6
b) Ứng dụng vào mạch cảm biến nhiệt độ:
-
-
Đối với mạch nhóm thực hiện, PIC 16F877A chủ yếu được khai thác ở tính năng
ADC, timer 8 bit, timer 16 bit. Vì vậy những tính năng ưu việt khác của PIC 16F877A
nhóm em xin được phép không đề cập.
ADC (Analog to Digital Converter) dùng để biến đổi một tín hiệu điện áp Analog vào
một chân nào đó của PIC, biến đổi nó qua giá trị số (Digital) bằng cách so sánh với một
điện áp tham chiếu (Reference Voltage). Điện áp tham chiếu có thể là điện áp VDD (điện
áp nguồn) hoặc điện áp tham chiếu được đưa vào một chân khác.
PIC 16F877A có 10 bit chuyển đổi A/D => Giúp chúng ta không phải mất 1 bộ
chuyển đổi.(dẫn đến kết nối dây sẽ trở nên đỡ phức tạp)
- Sử dụng các Timer:
+Timer0: 8 bit của bộ định thời, bộ đếm với hệ số tỉ lệ trước.
+Timer1: 8 bit của bộ định thời, bộ đếm với hệ số tỉ lệ trước, có khả năng
tăng trong khi ở chế độ Sleep qua xung đồng hồ được cung cấp bên ngoài.
+Timer2: 8 bit của bộ định thời, bộ đếm với 8 bit hệ số tỉ lệ trước, hệ số.
1.3.2
LCD
Thiết bị hiển thị LCD được sử dụng trong rất nhiều các ứng dụng của vi điều khiển.
LCD có rất nhiều ưu điểm so với các dạng hiển thị khác. Nó có khả năng hiển thị kí tự đa
dạng, trực quan (chữ, số và kí tự đồ họa), dễ dàng đưa vào mạch ứng dụng theo nhiều giao
thức giao tiếp khác nhau, tốn rất ít tài nguyên hệ thống và giá thành rẻ... Trong mạch này
nhóm em sử dụng LCD 16X2, đây là loại LCD được sử dụng phổ biến trong cả công
nghiệp và đời sống.
Cấu trúc sơ lược LCD16x2:
LCD là linh kiện hiển thị được sử dụng phổ biến trong mạch vi điều khiển, khả năng hiển thị
khá đa dạng. Trên màn hình LCD, thông tin được hiển thị trên hai dòng, mỗi dòng 16 kí tự.
Sau đây là tên các chân và cộng dụng của chúng trong loại LCD này.
Bộ nhớ LCD gồm 3 bộ nhớ: DDRAM, CGRAM, CGROM. Trong đó chức năng từng bộ
7
nhớ như sau:
-
*DDRAM:
Được sử dụng để lưu trữ kí tự cần hiển thị, kích thước của bộ nhớ này cho phép lưu
trữ 80 kí tự
-Cách hoạt động:
+ Thiết lập cấu hình để tăng địa chỉ một cách tự động (như cho dịch kí tự). Các kí tự được
gửi qua các đường D0 đến D7 sẽ được hiển thị từ trái sang phải.
+ Nếu số các kí tự trên một dòng lớn hơn 16, tất cả các kí tự sẽ được nhớ lại nhưng chỉ có
16 kí tự được nhìn thấy trên màn hình. Để nhìn thấy các kí tự còn lại phải dùng lệnh dịch.
*CGROM: Chứa một bản đồ, địa chỉ các kí tự có thể thể hiện ra màn hình đã được định sẵn.
*CGRAM: Cho phép tạo và hiển thị các kí hiệu, kí tự không có sẵn trong CGROM.
Giao tiếp giữa PIC và LCD:
Khối màn hình hiển thị LCD được kết nối với vi điều khiển.
-
Trong mạch, vi điều khiển giao tiếp với LCD theo chế độ 4 bits.
-
Sử dụng 4 chân D4, D5, D6, D7 của LCD truyền dữ liệu.
Dữ liệu truyền tới LCD theo quy ước bit cao truyền trước, bit thấp truyền sau.
Kết nối LCD và vi điều khiển như sau:
LCD
Vi điêu khiên
D7
RB7
D6
RB6
D5
RB5
D4
RB4
E
RB1
RS
RB0
Sơ đồ mạch được thể hiện trong hình dưới đây. Điện thế ngõ vào được đưa vào chân
AN0 ở dạng tương tự, LCD được nới với port B của vi điều khiển như là một ngõ giao tiếp
4 dây mặc định. Một biến trở cũng được nối vào LCD nhằm điều chỉnh độ phân giải.
Các hàm thông dụng:
8
lcd_init() : là hàm phải có để báo rằng sẽ sử dụng LCD.
lcd_putc(char c) : hàm để xuất ký tự ra LCD.
lcd_gotoxy( BYTE x, BYTE y) : hàm cho phép con trỏ nhảy tới
vị trí (x,y)
1.3.3
LM35
+ Chân 1 : Chân nguồn đầu vào Vcc
+ Chân 2 : Chân đầu ra Vout
+ Chân 3 : Chân nối GND
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. Chúng cũng không yêu cầu cân chỉnh ngoài vì vốn chúng đã
được cân chỉnh.
9
Đặc điểm chính của cảm biến LM35:
+ Điện áp đầu vào từ 4V đến 30V
+ Độ phân giải điện áp đầu ra là 10mV/ độ C
+ Độ chính xác cao ở 25 độ C là 0.5 độ C
+ Trở kháng đầu ra thấp 0.1 cho 1mA tải
Dải nhiệt độ đo được của LM35 là từ -55 độ C - 150 độ C với các mức điện áp ra khác nhau.
Xét một số mức điện áp sau :
- Nhiệt độ -55 độ C điện áp đầu ra -550mV
1.3.4
Khối nguồn
Gồm :
-7805
-tụ hóa 100uF và 10uF
-led đỏ
-trở 220 Ôm
Tác dụng của bộ nguồn là lọc và điều chỉnh điện áp chuẩn cung cấp cho pic lcd và khối
reset hoạt động
10
1.3.5
Khối reset
Gồm :
-Nút bấm
-Trở 10k
Công dụng khởi động lại chương trình cho pic
11
1.3.6
Khối nạp và khối dao động
Gồm:
-Thạch anh 20Mhz
-Tụ gốm 22pF
Tác dụng lọc chống nhiễu cho pic
Khối dao động
12
Khối nạp code cho pic
1.4 Nguyên lý hoạt động của mạch
Khối nguồn sẽ cấp điện áp chuẩn 5V cho LM35 LCD PIC và Reset hoạt động
Cảm biến Lm35 đo nhiệt độ môi trường sau đó gửi dữ liệu tới pic16F877A thông qua 1
đường truyền duy nhất ( chân 2 của Lm35 tới chân 2 RA0 của pic 16F877A)
Pic sẽ xử lý dữ liệu và hiển thị nhiệt độ lên LCD thông qua code mình đã nạp
13
Chương 2 Vẽ mạch mô phỏng trên proteus ,chạy mô phỏng
2.1 Mô phỏng trên proteus
14
2.2 Mạch in
15
Chương 3 Viết code và nạp code chạy mạch thực
3.1: Lưu đồ thuật toán và Code
Lưu đồ thuật toán
Bắt đầu
Hiện kí tự :
“SV:N.T.SON
Lop:TDHAK58”
Xóa màn hình LCD
Kết thúc
Nhiet do la:
Nhận dc giá trị ADC
dieap = 5000.0f/1024*gtriAdc
nhietdo = dienap/10
Đọc giá trị ADC
Kết Thúc
16
Code:
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D7 at RB7_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D7_Direction at TRISB7_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB4_bit;
void main() {
unsigned int giatriAdc;
unsigned int dienap ;
unsigned char Nhietdo;
char A[4];
LCD_Init();
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_out(1,1,"SV:N.T.SON" );
Lcd_out(2,1,"Lop:TDHAK58");
Delay_ms(3000);
Lcd_Cmd(_LCD_CLEAR);
while(1)
{
17
giatriAdc = ADC_Read(0);
dienap= 5000.0f/1023*giatriAdc;
Nhietdo = dienap / 10;
ByteToStr(Nhietdo,A);
Delay_ms(1000);
Lcd_out(1,4,"Do an VDK");
Lcd_out(2,1,"Nhiet do la: ");
Lcd_out(2,13,A);
Delay_ms(1000);
}
}
18
3.2 Mạch thực
19
20
Tài liệu tham khảo
• http: //www.picvietnam.com
21
• http: //www.diendandientu.com
• http: //www.dientuvietnam.net
•
22
23