2013b - cdt - do va hien thi nhiet do

34
1 MC LC DANH SÁCH HÌNH NH .................................................................................................. 3 BNG KÝ HIU.................................................................................................................. 4 Mđầu .................................................................................................................................. 5 CHƢƠNG I: GIỚI THIU BĐO VÀ HIỂN THNHIỆT ĐỘ TRÊN LCD VÀ MÁY TÍNH ..................................................................................................................................... 6 I. Khối điều khiển ( Vi điều khin AVR) ........................................................................ 6 1. Gii thiu chung ........................................................................................................ 6 2. Cu trúc Atmega16 .................................................................................................... 7 II. Cm biến đo nhiệt độ LM35 ........................................................................................ 8 III. TEXT LCD 16x2 ......................................................................................................... 9 IV.Ngôn nglp trình và trình biên dch ........................................................................ 12 V. Nạp chƣơng trình ....................................................................................................... 13 VI. Chƣơng trình ứng dng hin thnhiệt độ trên máy tính ............................................ 14 1. Cơ bản vgiao tiếp RS232 ...................................................................................... 14 2. Giao din phn mm viết chƣơng trình ứng dng hin thtrên máy tính ............... 15 CHƢƠNG II: THIẾT KBĐO VÀ HIỂN THNHIỆT ĐỘ TRÊN LCD VÀ MÁY TÍNH ................................................................................................................................... 16 I. Đo nhiệt độ sdng cm biến nhiệt độ LM35 .......................................................... 16 1. BADC (Analog to digital Converter) ................................................................... 16 2. Sdng ADC cho cm biến nhiệt độ LM35: .......................................................... 18 II. Hin thnhiệt độ trên LCD ........................................................................................ 19 III. Hin thnhiệt độ trên máy tính .................................................................................. 20 1. Thiết kế giao din phn mm .................................................................................. 20 2. Viết chƣơng trình ..................................................................................................... 22 IV.Thiết kế mch mô phng trên Proteus ....................................................................... 23 V. Thiết kế phn cng bng Altium design .................................................................... 24 1. Thiết kế mch nguyên lý ......................................................................................... 24

Upload: duc-posj

Post on 20-Jan-2016

283 views

Category:

Documents


2 download

TRANSCRIPT

1

MỤC LỤC

DANH SÁCH HÌNH ẢNH .................................................................................................. 3

BẢNG KÝ HIỆU.................................................................................................................. 4

Mở đầu .................................................................................................................................. 5

CHƢƠNG I: GIỚI THIỆU BỘ ĐO VÀ HIỂN THỊ NHIỆT ĐỘ TRÊN LCD VÀ MÁY

TÍNH ..................................................................................................................................... 6

I. Khối điều khiển ( Vi điều khiển AVR) ........................................................................ 6

1. Giới thiệu chung ........................................................................................................ 6

2. Cấu trúc Atmega16 .................................................................................................... 7

II. Cảm biến đo nhiệt độ LM35 ........................................................................................ 8

III. TEXT LCD 16x2 ......................................................................................................... 9

IV. Ngôn ngữ lập trình và trình biên dịch ........................................................................ 12

V. Nạp chƣơng trình ....................................................................................................... 13

VI. Chƣơng trình ứng dụng hiển thị nhiệt độ trên máy tính ............................................ 14

1. Cơ bản về giao tiếp RS232 ...................................................................................... 14

2. Giao diện phần mềm viết chƣơng trình ứng dụng hiển thị trên máy tính ............... 15

CHƢƠNG II: THIẾT KẾ BỘ ĐO VÀ HIỂN THỊ NHIỆT ĐỘ TRÊN LCD VÀ MÁY

TÍNH ................................................................................................................................... 16

I. Đo nhiệt độ sử dụng cảm biến nhiệt độ LM35 .......................................................... 16

1. Bộ ADC (Analog to digital Converter) ................................................................... 16

2. Sử dụng ADC cho cảm biến nhiệt độ LM35: .......................................................... 18

II. Hiển thị nhiệt độ trên LCD ........................................................................................ 19

III. Hiển thị nhiệt độ trên máy tính .................................................................................. 20

1. Thiết kế giao diện phần mềm .................................................................................. 20

2. Viết chƣơng trình ..................................................................................................... 22

IV. Thiết kế mạch mô phỏng trên Proteus ....................................................................... 23

V. Thiết kế phần cứng bằng Altium design .................................................................... 24

1. Thiết kế mạch nguyên lý ......................................................................................... 24

2

2. Thiết kế mạch in: ..................................................................................................... 25

VI. Giải thuật và điều khiển ............................................................................................. 27

1. Giải thuật ................................................................................................................. 27

2. Lập trình điều khiển ................................................................................................. 28

CHƢƠNG III: KẾT QUẢ, KIỂM THỬ VÀ ĐÁNH GIÁ HỆ THỐNG ............................ 29

I. Kết quả ....................................................................................................................... 29

1. Cài đặt hệ thống ....................................................................................................... 29

2. Kết quả ..................................................................................................................... 30

II. Kiểm thử hệ thống ..................................................................................................... 31

III. Đánh giá hệ thống ...................................................................................................... 31

1. Ƣu điểm ................................................................................................................... 31

2. Nhƣợc điểm ............................................................................................................. 32

CHƢƠNG IV: KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN .......................................... 33

TÀI LIỆU THAM KHẢO .................................................................................................. 34

3

DANH SÁCH HÌNH ẢNH

Hình 1.1. Sơ đồ khối bộ đo và hiển thị nhiệt độ trên LCD và PC ........................................ 6

Hình 1.2. Vi điều khiển Atmega16 ....................................................................................... 7

Hình 1.3. Chân cảm biến nhiệt độ LM35 ............................................................................. 8

Hình 1.4. Sơ đồ nguyên lí LCD 16x2 ................................................................................... 9

Hình 1.5. Hình dạng thực 1 LCD 16x2 (16 cột, 2 hàng) ...................................................... 9

Hình 1.6. Kết nối LCD ....................................................................................................... 11

Hình 1.7. Giao diện CodeVisionAVR V2.05.0. ................................................................. 12

Hình 1.8. Mạch nạp AVRISP ............................................................................................. 13

Hình 1.9. Mạch nạp AVR910C .......................................................................................... 13

Hình 1.10. Phần mềm nạp chƣơng trình Kazama Programmer ......................................... 13

Hình 1.11. Khung truyền UART ........................................................................................ 14

Hình 1.12. Giao diện Visual Basic 2010 ............................................................................ 15

Hình 2.1. Kết nối nguồn ADC ............................................................................................ 17

Hình 2.2. Sử dụng ADC kênh 0 cho cảm biến LM35 ........................................................ 18

Hình 2.3. Kết nối LCD với AVR ........................................................................................ 19

Hình 2.4. Tạo New Project ................................................................................................. 20

Hình 2.5. Toolbox ............................................................................................................... 21

Hình 2.6. Phần mềm hiển thị nhiệt độ trên PC ................................................................... 21

Hình 2.7. Mô phỏng trên Proteus ....................................................................................... 23

Hình 2.8. Mạch nguyên lí phần cứng ................................................................................. 24

Hình 2.9. Bản vẽ mạch in ................................................................................................... 25

Hình 2.10. Thiết lập thông số đƣờng mạch in .................................................................... 25

Hình 2.11. Sắp xếp linh kiện .............................................................................................. 26

Hình 2.12. Mạch in ............................................................................................................. 26

Hình 3.1. Nạp chƣơng trình vào vi điều khiển ................................................................... 29

Hình 3.2. Cài đặt phần mềm Temperature measurement Ver1.00.1 .................................. 29

Hình 3.3. Bộ đo và hiển thị nhiệt độ trên LCD .................................................................. 30

Hình 3.4. Hiển thị nhiệt độ trên máy tính ........................................................................... 30

Hình 3.5. Kết quả mô phỏng hệ thống bằng Proteus .......................................................... 31

Hình 3.6. So sánh giá trị nhiệt độ với nhiệt kế ................................................................... 31

4

BẢNG KÝ HIỆU

KÝ HIỆU ĐƠN VỊ ĐỊNH NGHĨA

Vout V Điện áp ngõ ra LM35

Vref V Điện áp tham chiếu bộ ADC

adc_data[0] Giá trị bộ ADC kênh 0 của Atmega16

5

Mở đầu

Ngày nay, đo lƣờng là một yếu tố quan trọng trong nền công nghiệp. Nếu thiếu đo

lƣờng, những ngƣời kĩ sƣ không thể có đƣợc cái nhìn chính xác đối với các hiện tƣợng,

đồng thời gây ra sự sai lệch và những kết quả không nhƣ mong đợi trong nghiên cứu.

Trong hệ đơn vị SI (International System Unit), có sáu đại lƣợng vật lý cơ bản và nhiệt

độ là một trong số đó. Sự thay đổi của nhiệt độ chỉ ra một cách khá rõ ràng những gì thực

sự xảy ra bên trong hiện tƣợng, hoặc những chi tiết cơ học chúng ta quan sát đƣợc. Việc

đo nhiệt độ cũng ngày càng trở nên dễ dàng và đa dạng, từ một chiếc nhiệt kế đơn giản

đến những hệ thống điện tử thông minh.

Qua quá trình học tập môn học phân tích và thiết kế hệ thống nhúng, chúng em đã tiếp

thu những kiến thức cơ bản để đƣa ra ý tƣởng thiết kế một mạch đo nhiệt độ với những

tính năng đặc biệt nhằm ứng dụng trong các môi trƣờng mang tính tự động hóa.

Tiểu luận “Thiết kế bộ đo và hiển thị nhiệt độ trên LCD và máy tính” dƣới sự hƣớng

dẫn của PGS.TS. Huỳnh Quyết Thắng đƣợc thực hiện bởi nhóm học viên cao học:

- Dƣơng Văn Đức

- Nguyễn Chí Thanh

- Hồ Văn Thái

Lớp CB13CĐT – Đại Học Bách Khoa Hà Nội.

Chúng em xin trân thành cảm ơn sự chỉ bảo tận tình của thầy giáo trong quá trình hình

thành và hoàn thiện tiểu luận!

6

CHƢƠNG I: GIỚI THIỆU BỘ ĐO VÀ HIỂN THỊ NHIỆT ĐỘ TRÊN LCD VÀ

MÁY TÍNH

Yêu cầu cần thực hiện:

Mạch điện tử đƣợc thiết kế trên máy tính bằng phần mềm chuyên dụng.

Nhiệt độ đo đƣợc hiển thị trên LCD và máy tính.

Sai số cho phép +/- 10C

Thao tác khống chế đƣợc mô phỏng bằng Led và trên LCD.

Sơ đồ khối của bộ đo và hiển thị nhiệt độ trên LCD và máy tính:

Hình 1.1. Sơ đồ khối bộ đo và hiển thị nhiệt độ trên LCD và PC

I. Khối điều khiển ( Vi điều khiển AVR)

1. Giới thiệu chung

Vi điều khiển AVR là họ điều khiển do hãng Atmel phát triển, với cấu trúc tập lệnh

đơn giản hóa – RISC (Reduced Instruction Set Computer), một kiểu cấu trúc đang thể

hiện ƣu thế trong các bộ xử lí. So với các chip vi điều khiển 8 bits khác, AVR có nhiều

tính năng vƣợt trội:

Sử dụng đơn giản. Gần nhƣ chúng ta không cần mắc thêm bất kỳ linh kiện phụ nào khi

sử dụng AVR, thậm chí không cần nguồn tạo xung clock cho chip (thƣờng là các khối

thạch anh).

Thiết bị lập trình (mạch nạp) cho AVR rất đơn giản, có loại mạch nạp chỉ cần vài điện

trở là có thể làm đƣợc. Một số AVR còn hỗ trợ lập trình on – chip bằng bootloader

không cần mạch nạp…

Ngoài lập trình bằng asembly nhƣ thông thƣờng, AVR còn hỗ trợ lập trình C với cấu

trúc lệnh đơn giản.

AVR

(atmega16)

LCD

Máy tính

Cảm biến nhiệt

LM35

keypad WARNING

7

AVR có thể sử dụng xung clock lên tới 16MHz (với xung ngoài) hoặc có thể sử dụng

xung clock bên trong chip ( tối đa 8MHz)

Tích hợp bộ nhớ Flash dung lƣợng lớn, có khả năng lập trình nhiều lần, có SRAM lớn,

đồng thời tích hợp bộ nhớ lƣu trữ lập trình đƣợc EEPROM.

Số cổng giao tiếp nhiều (I/O port) và 2 chiều (bi-directional).

Tích hợp nhiều tính năng: chuyển đổi số - tƣơng tự (Analog – Gigital), nhiều chuẩn

giao tiếp (RS-232, I2C, SPI…), có bộ đếm timer/counter tích hợp tạo xung PWM…

Bản thân họ AVR có rất nhiều loại vi điều khiển khác nhau về dung lƣợng bộ nhớ, số

cổng giao tiếp… (Atmega8, Atmega16, Attiny88…). Tuy nhiên về cấu trúc cơ bản và

cách lập trình là hoàn toàn tƣơng tự nhau. Mặc dù các ứng dụng trong bài tiểu luận này

đƣợc viết trên Atmega 16 nhƣng đều có thể áp dụng trên các vi điều khiển AVR khác.

Chƣơng trình đƣợc viết trên máy tính bằng phần mềm CodeVisionAVR, đƣợc mô phỏng

thử nghiệm trên phầm mềm Proteus, đƣa vào AVR bằng mạch nạp AVR 910 USB

Programer, phần mạch in đƣợc thiết kế bằng phần mềm Altium design.

2. Cấu trúc Atmega16

Hình 1.2. Vi điều khiển Atmega16

ATmega16 có 40 chân giao tiếp, trong đó có 4 PORT giao tiếp 8 bit (PORTA,

PORTB, PORTC, và PORTD). Các PORT này có thể nhập - xuất dữ liệu hay điều khiển

theo 2 chiều (bi-directional). Với 4 cổng này, ATmega16 có thể điều khiển các thiết bị

đầu ra (đèn led, LCD, động cơ, v.v) cũng nhƣ nhận các tín hiệu đầu vào (sensor, keypad,

camera, v.v)

8

ATmega16 tích hợp bộ nhớ Flash với dung lƣợng 16 Kb dùng để lập trình, 512

bytes EEPROM có khả năng lƣu trữ và lập trình đƣợc, 1Kb SRAM. Ngoài ra ATmega16

hỗ trợ khả năng sử dụng bộ nhớ ngoài, do đó có thể làm tăng khả năng lƣu trữ và xử lý

của nó.

ATmega16 có 2 bộ timer/counter 8 bit và 1 bộ timer/counter 16 bit (chân T0,T1)

có khả năng xuất xung PWM (thƣờng dùng trong điều khiển động cơ), đếm sự kiện xảy

ra, hay xác định thời gian cho vi điều khiển.

ATmega16 còn tích hợp các bộ chuyển đổi tƣơng tự - số (Analog Digital Convert -

ADC), có tác dụng chuyển đổi tín hiệu tƣơng tự sang tín hiệu số, áp dụng cho việc xử lý

tín hiệu vào từ sensor (Từ chân 33 đến chân 40).

Để tích hợp với các vi điều khiển khác hay với hệ thống máy tính, ATmega16 hỗ

trợ các chuẩn giao tiếp RS232, TWI-I2C, SPI.

II. Cảm biến đo nhiệt độ LM35

LM35 là loại cảm biến nhiệt độ đƣợc sử dụng rộng dãi trong công nghiệp bởi giá

thành thấp và cách vận hành đơn giản. LM35 có mức điện áp thay đổ trực tiếp theo độ C

(10mV/ 0C).

Hình 1.3. Chân cảm biến nhiệt độ LM35

Chân +Vs là chân cung cấp điện áp cho LM35 hoạt động.

Chân Vout là chân điện áp ngõ ra của LM35, đƣợc đƣa vào chân Analog của bộ ADC.

Chân GND là chân mass của LM35.

Có thể đảm bảo độ chính xác 0.50C ( tại +25

0C)

Dải đo từ -550C đến +150

0C.

Điện áp sử dụng từ 4V đến 30V.

Dòng điện nhỏ hơn 60µA.

Tự tỏa nhiệt thấp, 0.080C trong không khí.

9

III. TEXT LCD 16x2

Text LCD là loại màn hình tinh thể lỏng nhỏ dùng để hiển thị các dòng chữ hoặc

số trong bảng mã ASCII. Text LCD đƣợc chia sẵn thành từng ô và ứng với mỗi ô chỉ có

thể hiển thị một ký tự ASCII. Mỗi ô của Text LCD bao gồm các “chấm” tinh thể lỏng,

việc kết hợp “ẩn” và “hiện” các chấm này sẽ tạo thành một ký tự cần hiển thị. Trong các

Text LCD, các mẫu ký tự đƣợc định nghĩa sẵn. Kích thƣớc của Text LCD đƣợc định

nghĩa bằng số ký tự có thể hiển thị trên 1 dòng và tổng số dòng mà LCD có. Text LCD

16x2 là loại có 2 dòng và mỗi dòng có thể hiển thị tối đa 16 ký tự.

Hình 1.4. Sơ đồ nguyên lí LCD 16x2

Text LCD có 2 cách giao tiếp cơ bản là nối tiếp (nhƣ I2C) và song song. Loại đƣợc

sử dụng trong bài báo cáo này là loại giao tiếp song song.

Hình 1.5. Hình dạng thực 1 LCD 16x2 (16 cột, 2 hàng)

10

Chức năng các chân LCD

Chức năng Số thứ tự

chân

Tên Trạng thái

Logic

Mô tả

Ground 1 Vss (Gnd) - 0V

Nguồn cho

LCD

2 Vdd(Vcc) - +5V

Tƣơng phản 3 Vee - 0-Vdd

Điều khiển

LCD

4 RS 0 D0-D7: Lệnh

1 D0-D7: Dữ liệu

5 R/W 0 Ghi

1 Đọc

6 EN 0 Vô hiệu hóa LCD

1 LCD hoạt động

Từ 1 xuống

0

Bắt đầu ghi/đọc LCD

Dữ liệu/lệnh 7 D0 0/1 Bit 0 LSB

8 D1 0/1 Bit 1

9 D2 0/1 Bit 2

10 D3 0/1 Bit 3

11 D4 0/1 Bit 4

12 D5 0/1 Bit 5

13 D6 0/1 Bit 6

14 D7 0/1 Bit 7 MSB

Bảng 1. Chức năng các chân LCD

Trong một số LCD 2 chân LED nền đƣợc đánh số 15 và 16 nhƣng trong một số

trƣờng hợp 2 chân này đƣợc ghi là A (Anode) và K (Cathode). Hình 1.6 mô tả cách kết

nối LCD với nguồn và mạch điều khiển.

11

Hình 1.6. Kết nối LCD

Các chân Vcc, Vss và Vee

Chân Vcc cấp dƣơng nguồn 5V, chân Vss nối đất, chân Vee đƣợc dùng để điều khiển

độ tƣơng phản của màn hình LCD.

RS (Register select)

Khi ở mức thấp, chỉ thị đƣợc truyền đến LCD nhƣ xoá màn hình, vị trí con

trỏ….Khi ở mức cao, kí tự đƣợc truyền đến LCD.

R/W (Read/Write)

Dùng để xác định hƣớng của dữ liệu đƣợc truyền giữa LCD và vi điều khiển. Khi

nó ở mức thấp dữ liệu đƣợc ghi đến LCD và khi ở mức cao, dữ liệu đƣợc đọc từ LCD.

Nếu chúng ta chỉ cần ghi dữ liệu lên LCD thì chúng ta có thể nối chân này xuống GND để

tiết kiệm chân.

E (Enable)

Cho phép ta truy cập/xuất đến LCD thông qua chân RS và R/W. Khi chân E ở mức

cao (1) LCD sẽ kiểm tra trạng thái của 2 chân RS và R/W và đáp ứng cho phù hợp. Khi

dữ liệu đƣợc cấp đến chân dữ liệu thì một xung mức cao xuống thấp phải đƣợc áp đến

chân này để LCD chốt dữ liệu trên các chân dữ liêu. Xung này phải rộng tối thiểu là

450ns. Còn khi chân E ở mức thấp (0), LCD sẽ bị vô hiệu hoá hoặc bỏ qua tín hiệu của 2

chân RS và R/W.

Các chân D0 - D7

Đây là 8 chân dữ liệu 8 bít, đƣợc dùng để gửi thông tin lên LCD hoặc đọc nội dung

của các thanh ghi trong LCD. Các kí tự đƣợc truyền theo mã tƣơng ứng trong bảng mã

ascii. Cũng có các mã lệnh mà có thể đƣợc gửi đến LCD để xoá màn hình hoặc đƣa con

trỏ về đầu dòng hoặc nhấp nháy con trỏ. LCD có 2 chế độ giao tiếp, chế độ 4 bit (chỉdùng

4 chân D4 đến D7 để truyền dữ liệu) và chế độ 8 bit (dùng cả 8 chân dữ liệu từ D0 đến

D7), ở chế độ 4 bit, khi truyền 1 byte, chúng ta sẽ truyền nửa cao của byte trƣớc, sau đó

mới truyền nửa thấp của byte.

12

IV. Ngôn ngữ lập trình và trình biên dịch

AVR nói chung cũng nhƣ ATmega16 nói riêng hỗ trợ 2 ngôn ngữ lập trình thông dụng

là assembly và C. Việc lập trình bằng assembly giúp cho chƣơng trình nhỏ gọn nhƣng khá

rắc rối do gần với ngôn ngữ máy. Lập trình bằng C tuy cho chƣơng trình có dung lƣợng

lớn hơn so với khi lập trình bằng assembly, nhƣng lại dễ dàng hơn trong việc viết code và

dễ debug.

Để lập trình cho AVR, có khá nhiều trình biên dịch, ví dụ nhƣ AVR studio, WinAVR,

CodevisionAVR…

Trong bài tiểu luận, em dùng ngôn ngữ C đƣợc viết trên CodeVisionAVR V2.05.0.

Hình 1.7. Giao diện CodeVisionAVR V2.05.0.

13

V. Nạp chƣơng trình

Chƣơng trình sau khi đƣợc biên dịch bởi trình biên dịch sẽ đƣợc nạp vào AVR bằng 2

cách: Nạp qua một thiết bị trung gian gọi là mạch nạp hoặc nạp trực tiếp thông qua giao

tiếp RS232 với máy tính nhờ sử dụng chức năng bootloader của vi điều khiển.

Có khá nhiều loại mạch nạp khác nhau cho AVR, từ đơn giản đến phức tạp, hỗ trợ các

loại AVR khác nhau, với các chuẩn giao tiếp khác nhau. Dƣới đây là một số loại mạch

nạp hay dùng:

Hình 1.8. Mạch nạp AVRISP

Hình 1.9. Mạch nạp AVR910C

Vi điều khiển AVR đƣợc đặt trên các mạch nạp. Các mạch nạp, thông qua cáp nối với

máy tính, sẽ nạp chƣơng trình từ máy tính vào vi điều khiển. Trong bài tiểu luận chúng

em sử dụng mạch nạp AVRISP với phần mềm nạp chƣơng trình Kazama Programmer.

Hình 1.10. Phần mềm nạp chương trình Kazama Programmer

14

VI. Chƣơng trình ứng dụng hiển thị nhiệt độ trên máy tính

Nhiệt độ đo đƣợc từ cảm biến đƣợc vi điều khiển truyền lên máy tính qua cổng giao tiếp

RS232.

1. Cơ bản về giao tiếp RS232

RS232 là một dạng giao thức, dùng để truyền dữ liệu giữa các thiết bị điện tử có hỗ trợ

giao thức này. RS232 là một trong những giao thức ra đời sớm nhất và có thể nói là đơn

giản nhất. Cho đến nay, RS232 vẫn còn đƣợc ứng dụng rất nhiều do giao thức đơn giản,

độ tin cậy cao, và khoảng cách truyền khá xa, tuy nhiên tốc độ truyền vẫn ở mức khá

khiêm tốn so với các giao thức ra đời sau này nhƣ USB, SPI, I2C…

Để sử dụng đƣợc giao tiếp RS232, chúng ta sử dụng module UART có sẵn trong

Atmega16.

UART là viết tắt của Universal Asynchronous Receiver Transmitter, là giao tiếp truyền

nhận dị bộ, dị bộ ở đây có nghĩa là thiết bị truyền và thiết bị nhận không cùng chung xung

nhịp clock.

Trong giao thức RS232, chúng ta quan tâm đến những thông số sau:

Tốc độ baud: Là số bit truyền trên 1s, điển hình là 9600 bit/s

Parity: có 2 loại parity là parity chẵn và parity lẻ, dùng để tăng tính kiểm soát lỗi

trong 1 lần truyền, giả sử ta cấu hình parity là chẵn thì mỗi lần truyền, nếu số bit có

mức logic 1 là lẻ thì module tự thêm 1 bit 1 vào cuối khung truyền, còn nếu số bit có

mức logic 1 là chẵn thì không thêm bit 1 vào cuối khung truyền. Parity lẻ cũng tƣơng

tự nhƣ vậy.

Số bit trên mỗi lần truyền: Là số bit dữ liệu (data) trên mỗi khung truyền, thƣờng là 8

bit.

Một khung truyền UART có cấu trúc nhƣ sau:

Hình 1.11. Khung truyền UART

15

2. Giao diện phần mềm viết chƣơng trình ứng dụng hiển thị trên máy tính

Chúng em đã viết một phần mềm ứng dụng nhỏ để hiển thị và điều khiển dải nhiệt độ đo

bằng việc sử dụng ngôn ngữ VB.Net.

Hình 1.12. Giao diện Visual Basic 2010

16

CHƢƠNG II: THIẾT KẾ BỘ ĐO VÀ HIỂN THỊ NHIỆT ĐỘ TRÊN LCD VÀ MÁY

TÍNH

I. Đo nhiệt độ sử dụng cảm biến nhiệt độ LM35

1. Bộ ADC (Analog to digital Converter)

Trong các ứng dụng đo lƣờng và điều khiển bằng vi điều khiển bộ chuyển đổi

tƣơng tự-số (ADC) là một thành phần rất quan trọng. Dữ liệu trong thế giới của chúng ta

là các dữ liệu tƣơng tự (analog). Ví dụ nhiệt độ không khí buổi sáng là 250C và buổi trƣa

là 320C, giữa hai mức giá trị này có vô số các giá trị liên tục mà nhiệt độ phải “đi qua” để

có thể đạt mức 320C từ 25

0C, đại lƣợng nhiệt độ nhƣ thế gọi là một đại lƣợng analog.

Trong khi đó, vi điều khiển là một thiết bị số (digital), các giá trị mà một vi điều khiển có

thể thao tác là các con số rời rạc vì thực chất chúng đƣợc tạo thành từ sự kết hợp của hai

mức 0 và 1. Ví dụ chúng ta muốn dùng một thanh ghi 8 bit trong vi điều khiển để lƣu lại

các giá trị nhiệt độ từ 0oC đến 255 0C, nhƣ chúng ta đã biết, một thanh ghi 8 bit có thể

chứa tối đa 256 (28) giá trị nguyên từ 0 đến 255, nhƣ thế các mức nhiệt độ không nguyên

nhƣ 28.123 0C sẽ không đƣợc ghi lại. Nói cách khác, chúng ta đã “số hóa” (digitalize) một

dữ liệu analog, thành một dữ liệu digital. Quá trình “số hóa” này thƣờng đƣợc thực hiện

bởi một thiết bị gọi là “bộ chuyển đổi tƣơng tự - số hay đơn giản là ADC (Analog to

Digital Converter).

Độ phân giải (resolution): Khái niệm độ phân giải đƣợc dùng để chỉ số bit cần thiết

để chứa hết các mức giá trị digital ngõ ra. Nếu một mạch chuyển đổi ADC có độ phân giải

n bit thì sẽ có 2n mức giá trị có thể có ở ngõ ra digital. Độ phân giải liên quan mật thiết

đến chất lƣợng chuyển đổi ADC, việc lựa chọn độ phân giải phải phù hợp với độ chính

xác yêu cầu và khả năng xử lý của bô điều khiển.

Điện áp tham chiếu (reference voltage): Trong các bộ ADC, Vref thƣờng là thông

số đƣợc đặt bởi ngƣời dùng, nó là điện áp lớn nhất mà thiết bị có thể chuyển đổi. Ví dụ,

một bộ ADC 10 bit (độ phân giải) có Vref = 3V, nếu điện áp ở ngõ vào là 1V thì giá trị số

thu đƣợc sau khi chuyển đổi sẽ là: 1023 x (1/3) = 314. Trong đó 1023 là giá trị lớn nhất

mà một bộ ADC 10 bit có thể tạo ra. Vì điện áp tham chiếu ảnh hƣởng đến độ chính xác

của quá trình chuyển đổi, chúng ta cần tính toán để chọn 1 điện áp tham chiếu phù hợp,

không đƣợc nhỏ hơn giá trị lớn nhất của input nhƣng cũng đừng quá lớn.

Chuyển đổi ADC trên AVR:

Chip AVR ATmega16 của Atmel có tích hợp sẵn các bộ chuyển đổi ADC với độ

phân giải 10 bit. Có tất cả 8 kênh đơn (các chân ADC0 đến ADC7), 16 tổ hợp chuyển đổi

dạng so sánh, trong đó có 2 kênh so sánh có thể khuyếch đại.

17

ADC trên AVR cần đƣợc “nuôi” bằng nguồn điện áp riêng ở chân AVCC, giá trị

điện áp cấp cho AVCC không đƣợc khác nguồn nuôi chip (VCC) quá +/-0.3V. Nhiễu

(noise) là vấn đề rất quan trọng khi sử dụng các bộ ADC, để giảm thiểu sai số chuyển đổi

do nhiễu, nguồn cấp cho ADC cần phải đƣợc “lọc” (filter) kỹ càng. Một cách đơn giản để

tạo nguồn AVCC là dùng một mạch LC kết nối từ nguồn VCC của chip nhƣ hình 2.1, đây

là cách đƣợc gợi ý bởi nhà sản xuất AVR.

Hình 2.1. Kết nối nguồn ADC

Có 4 thanh ghi trong bộ ADC trên AVR trong đó có 2 thanh ghi data chứa dữ liệu

sau khi chuyển đổi, 2 thanh ghi điều khiển và chứa trạng thái của ADC.

ADMUX (ADC Multiplexer Selection Register): là 1 thanh ghi 8 bit điều khiển

việc chọn điện áp tham chiếu, kênh và chế độ hoạt động của ADC.

ADCSRA (ADC Control and Status RegisterA): là thanh ghi chính điều khiển

hoạt động và chứa trạng thái của module ADC.

ADCL và ADCH (ADC Data Register): 2 thanh ghi chứa giá trị của quá trình

chuyển đổi.

18

2. Sử dụng ADC cho cảm biến nhiệt độ LM35:

Vout của LM35 đƣợc nối với kênh ADC 0 của AVR. Điện áp tham chiếu là Vref = 5V.

Hình 2.2. Sử dụng ADC kênh 0 cho cảm biến LM35

Điện áp Vout của LM35 thay đổi tuyến tính theo nhiệt độ với tỉ lệ 10mV trên 1oC. Độ phân

giải của bộ ADC trên AVR là 10 bit và điện áp tham chiếu là 5V

Nếu ta nối đầu ra của LM35 vào kênh 0 của bộ ADC thì giá trị bộ ADC đọc đƣợc là:

adc_data[0] = (Vout*1024)/ Vref = (Vout*1024)/ 5000

Giá trị của adc_data[0] trong khoảng từ 0 đến 1023. Chúng ta lại có:

Nhiệt độ (oC) = Vout (mV)/10

Vì vậy, giá trị của nhiệt độ đƣợc tính theo công thức:

Nhiệt độ (oC) = adc_data[0] *(

)/10

19

II. Hiển thị nhiệt độ trên LCD

Sơ đồ mạch kết nối AVR với LCD nhƣ hình 2.3

Hình 2.3. Kết nối LCD với AVR

Sơ đồ khối thuật toán hiển thị nhiệt độ trên LCD

Giao tiếp AVR với LCD theo sơ đồ sau:

START

END

Khởi động LCD

(init_lcd)

Xóa LCD (lcd_clear())

Ghi ra LCD

Di chuyển con trỏ

Tiếp

tục ?

20

Lập trình cho LCD:

Trong phần mềm lập trình Codevision, chúng em sử dụng thƣ viện lcd.h có sẵn các hàm

giúp việc lập trình hiển thị trên LCD trở lên dễ dàng. Một số hàm sử dụng để lập trình:

void lcd_init(unsigned char lcd_columns);

khỏi tạo điều khiển LCD

void lcd_gotoxy(unsigned char x, unsigned char y);

đặt con trỏ LCD tới vị trí x, y

void lcd_clear (void);

xóa LCD

void lcd_putchar(char c);

ghi kí tự c ra LCD

void lcd_puts(char *str);

ghi chuỗi str đặt trong SRAM ra LCD

void lcd_putsf(char flash *str);

ghi chuỗi str đặt trong FLASH ra LCD

void lcd_putse (char eeprom *str);

ghi chuỗi str đặt trong EEPROM ra LCD

void itoa(int n, char *str)

đổi số integer n sang kí tự trong chuỗi str.

III. Hiển thị nhiệt độ trên máy tính

1. Thiết kế giao diện phần mềm

Phần mềm ứng dụng trên Desktop máy tính đƣợc viết trên nền VB.NET 2010. Trong

Visual Basic 2010 có các Toolbox giúp cho việc thiết kế giao diện trở nên dễ dàng. Trƣớc

tiên, chúng ta tạo một project và đặt tên nhƣ hình 2.4

Hình 2.4. Tạo New Project

21

Sử dụng các Items trong Toolbox để thiết kế giao diện.

Hình 2.5. Toolbox

Sau khi hoàn thiện việc thiết kế ta tiến hành viết code để chạy chƣơng trình.

Hình 2.6. Phần mềm hiển thị nhiệt độ trên PC

22

2. Viết chƣơng trình

Thanh công cụ Menustrip

Private Sub AboutToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles AboutToolStripMenuItem.Click

MessageBox.Show("Bộ đo và hiển thị nhiệt độ Ver 1.0 Copyright@by Duc Posj")

End Sub

Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As

System.EventArgs) Handles ExitToolStripMenuItem.Click

Me.Dispose()

End Sub

Cấu hình cổng COM

Các thông số của giao thức RS232 nhƣ tốc độ baud, Parity, số bit trên mỗi lần truyền, bit

stop đƣợc cấu hình nhƣ dƣới đây.

SerialPort1.ReadTimeout = 3000

SerialPort1.WriteTimeout = 3000

SerialPort1.ReadBufferSize = 1024

SerialPort1.WriteBufferSize = 1024

SerialPort1.BaudRate = 9600

SerialPort1.DataBits = 8

SerialPort1.Parity = System.IO.Ports.Parity.None

SerialPort1.StopBits = System.IO.Ports.StopBits.One

SerialPort1.PortName = "COM1"

If SerialPort1.IsOpen = False Then

SerialPort1.Open()

End If

Nhận dữ liệu từ Vi điều khiển qua cổng giao tiếp RS232

Việc nhận dữ liệu từ vi điều khiển đƣợc thực hiện trong thủ tục serialPort_DataReceived

dƣới đây:

Private Sub serialPort1_DataReceived(ByVal sender As System.Object, ByVal e As

System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived

buffRev = SerialPort1.ReadExisting()

End Sub

Hàm SerialPort1.ReadExisting () thực hiện việc đọc dữ liệu hiện có trên bộ nhớ đệm của

cổng nối tiếp, sau đó dữ liệu đƣợc lƣu vào biến buffRev.

23

Hiển thị nhiệt độ:

Timer1 có tác dụng nhƣ một đồng hồ, cứ mỗi giây, giá trị nhiệt độ nhận đƣợc từ vi điều

khiển sẽ đƣợc hiển thị ra nhãn do_Celcius, do_Fahrenheit và đồ thị nhiệt độ theo thời

gian.

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)

Handles Timer1.Tick

conv_true = Integer.TryParse(buffRev, 32)

If conv_true = True Then

c = Integer.Parse(buffRev)

End If

Chart1.Series("Nhiệt độ").Points.AddY(c)

do_Celcius.Text = c

f = 1.8 * c + 32

do_Fahrenheit.Text = f

thoigian.Text = TimeOfDay End Sub

IV. Thiết kế mạch mô phỏng trên Proteus

Trƣớc khi tiến hành làm mạch in, ta có thể sử dụng phần mềm proteus để thiết kế

mạch, mô phỏng tính chính xác của chƣơng trình.

Hình 2.7. Mô phỏng trên Proteus

24

V. Thiết kế phần cứng bằng Altium design

1. Thiết kế mạch nguyên lý

Hình 2.8. Mạch nguyên lí phần cứng

Phần cứng gồm có các khối chính sau:

- Khối nguồn cung cấp nguồn điện cho mạch.

- Khối cảm biến: cảm biến nhiệt độ LM35 đo nhiệt độ của môi trƣờng rồi chuyển thành

tín hiệu điện ở đầu ra, truyền tới bộ chuyển đổi tƣơng tự - số của vi điều khiển.

- Khối hiển thị: màn hình LCD 16x2 hiển thị giá trị nhiệt độ đo đƣợc và hiển thị cảnh

báo nếu có.

- Khối R232: Thay đổi mức điện áp cho phù hợp giữa RS232 và UART.

- Khối điều khiển: nhận tín hiệu tƣơng tự từ cảm biến nhiệt độ LM35, chuyển đổi tín

hiệu tƣơng tự - số nhờ kênh 0 của bộ ADC; điều khiển hiển thị LCD và truyền tín hiệu

lên PC.

25

2. Thiết kế mạch in:

Sau khi thiết kế xong mạch nguyên lí, ta chuyển sang giai đoạn thiết kế mạch in. Đầu

tiên ta tạo và thiết lập các thông số của bo mạch nhƣ kích thƣớc bo mạch, độ rộng nhỏ

nhất của đƣờng mạch in, đuờng kính nhỏ nhất của lỗ cắm ngoài linh kiện, đƣờng kính nhỏ

nhất lỗ cắm trong linh kiện. Cuối cùng ta đƣợc một bo mạch nhƣ hình 2.6.

Hình 2.9. Bản vẽ mạch in

Tiếp theo thiết lập độ dày đƣờng mạch in và các thiết lập khác.

Hình 2.10. Thiết lập thông số đường mạch in

26

Bây giờ ta kéo tất cả các linh kiện này vào bo mạch màu đen, và tiến hành sắp xếp.

Hình 2.11. Sắp xếp linh kiện

Cuối cùng tiến hành cho mạch tự động chạy thành mạch in.

Hình 2.12. Mạch in

27

VI. Giải thuật và điều khiển

1. Giải thuật

Sơ đồ giải thuật chung cho hệ thống:

Khởi tạo: - IO port

- Ngắt ngoài: INT0, INT1

- LCD

- Giá trị khống chế nhiệt độ MAX

Điều chỉnh MAX từ Keypad

- Đọc giá trị ADC kênh 0

- Tính nhiệt độ t

- Hiển thị lên LCD

- Truyền giá trị nhiệt độ cho PC

t > MAX

Cảnh báo vượt quá nhiệt độ cho phép

END

Đúng

Sai

28

2. Lập trình điều khiển

Dựa vào sơ đồ giải thuật chúng em viết code lập trình và dịch chƣơng trình cho vi điều

khiển Atmega16 trên phần mềm CodevisionAVR. Dƣới đây là các chƣơng trình con:

Chƣơng trình con tính nhiệt độ dựa vào giá trị lấy đƣợc từ bộ ADC trong Atmega16

unsigned char cal_temperature (void)

{

temperature = 100*(float)(adc_data[0]*5)/1024;

return temperature;

}

Chƣơng trình con hiển thị nhiệt độ lên LCD

void display_temperature (unsigned char x, unsigned char y)

{

itoa(temperature,lcd_data);

// temperature in oC

lcd_clear();

lcd_gotoxy(x,y);

lcd_putsf("Temperature : ");

lcd_gotoxy(x+11,y+1);

lcd_puts(lcd_data);

lcd_putsf(" ");

lcd_putchar (0xdf);

lcd_putsf("C");

}

Chƣơng trình con truyền giá trị nhiệt độ lên máy tính qua giao tiếp UART

void send_temperature (void)

{

itoa(temperature,lcd_data);

puts(lcd_data);

}

Ngoài ra còn chƣơng trình con scan_key ( ) dùng để điều chỉnh giá trị lớn nhất của

nhiệt độ có thể đo đƣợc, warning ( ) để đƣa ra cảnh báo khi nhiệt độ vƣợt quá giá trị lớn

nhất.

29

CHƢƠNG III: KẾT QUẢ, KIỂM THỬ VÀ ĐÁNH GIÁ HỆ THỐNG

I. Kết quả

1. Cài đặt hệ thống

Nạp chƣơng trình cho vi điều khiển Atmega16

Sau khi viết code và dịch chƣơng trình, chúng em nạp file hex vào vi điều khiển bằng

phần mềm Kazama Programmer.

Hình 3.1. Nạp chương trình vào vi điều khiển

Cài đặt phần mềm hiển thị nhiệt độ trên máy tính.

Hình 3.2. Cài đặt phần mềm Temperature measurement Ver1.00.1

30

2. Kết quả

Hệ thống đạt đƣợc những yêu cầu:

Đo đƣợc nhiệt độ từ 0oC đến 150

oC với độ chính xác ±1

oC

Hiển thị giá trị nhiệt độ lên LCD

Hình 3.3. Bộ đo và hiển thị nhiệt độ trên LCD

Hiển thị nhiệt độ trên máy tính

Hình 3.4. Hiển thị nhiệt độ trên máy tính

Cài đặt giá trị lớn nhất của nhiệt độ từ phím bấm, hệ thống đƣa ra cảnh báo khi nhiệt độ

vƣợt quá giá trị lớn nhất đó.

31

II. Kiểm thử hệ thống

Chúng em đã tiến hành kiểm thử hệ thống khi viết chƣơng trình trên CodevisionAVR

và mô phỏng bằng Proteus nhiều lần để hệ thống hoạt động chính xác và ổn định.

Hình 3.5. Kết quả mô phỏng hệ thống bằng Proteus

III. Đánh giá hệ thống

Bộ đo và hiển thị nhiệt độ trên LCD và máy tính của chúng em đạt đƣợc những ƣu điểm

sau:

1. Ƣu điểm

Đo nhiệt độ tƣơng đối chính xác: sai số +1 o

C so sánh với nhiệt kế.

Hình 3.6. So sánh giá trị nhiệt độ với nhiệt kế

32

Điện năng tiêu thụ nhỏ: Sử dụng pin 9V nên điện áp tiêu thụ V = 9V, dòng điện toàn

mạch I = 33.8mA (từ việc đo thực nghiệm)

Công suất: P = V.I = 9x0.0338 = 0.30 (Watt)

Hiển thị rõ ràng nhiệt độ trên LCD và máy tính, đồng thời có thể theo dõi nhiệt độ

trong một thời gian dài trên đồ thị, và có cảnh báo vƣợt quá giới hạn cho phép có thể ứng

dụng trong các thiết bị khống chế nhiệt độ hoặc điều chỉnh nhiệt độ.

2. Nhƣợc điểm

Chi phí cho hệ thống còn khá cao do chƣa tối ƣu hóa các linh kiện sử dụng.

33

CHƢƠNG IV: KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN

Qua tiểu luận này, chúng em đã có cơ hội trực tiếp thực hiện việc thiết kế một hệ

thống nhúng: từ việc thiết kế, gia công phần cứng cho tới viết phần mềm ứng dụng. Mặc

dù đây còn là một sản phẩm đơn giản nhƣng do thời gian có hạn, kiến thức còn hạn chế

nên sản phẩm không thể tránh khỏi nhiều thiếu sót. Tuy nhiên, nhóm chúng em cũng đã

rất cố gắng để hoàn thânh đề tài đƣợc giao.

Trong thời gian tới, chúng em dự định phát triển sản phẩm “ Bộ đo và hiển thị nhiệt độ

trên LCD và máy tính” thành sản phẩm có tính ứng dụng nhƣ:

- Điều khiển quạt gió ứng dụng cho các hệ thống tản nhiệt.

- Đo độ ẩm không khí.

- Làm bộ cảm biến và điều khiển trong hệ thống giàn phơi thông minh.

Chúng em xin chân thành cảm ơn PGS. TS Huỳnh Quyết Thắng đã giúp đỡ để chúng

em có thể hoàn thành môn học “ Phân tích thiết kế hệ thống nhúng”.

34

TÀI LIỆU THAM KHẢO

1. “Giáo trình vi điều khiển AVR”

2. “Hướng dẫn Altium Designer”, Đỗ Tiến Đạt - Đại Học Công Nghiệp Hà Nội, 2008.

3. Datasheet Atmega16

4. Datasheet LM35

5. hocavr.com