TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN TỬ VIỄN THÔNG BÁO CÁO ĐỒ ÁN THIẾT KẾ II Đề tài Thiết kế mạch đo nhiệt độ dùng Atmega16 và cảm biến LM35 Giảng Viên Hướng Dẫn Lớp Nhóm Mã lớp Thành Viên Nhóm T.
GIỚI THIỆU TỔNG QUAN
Khối điều khiển
Vi điều khiển AVR, do hãng Atmel (Hoa Kỳ) sản xuất và ra mắt lần đầu năm 1996, bao gồm nhiều dòng khác nhau như Tiny (ATtiny 13, ATtiny 22) với bộ nhớ nhỏ và ít bộ phận ngoại vi, dòng AVR (AT90S8535, AT90S8515) với bộ nhớ trung bình, và dòng Mega (ATmega 16, ATmega 32, ATmega 128) có bộ nhớ từ vài kbyte đến hàng trăm kbyte cùng nhiều tính năng ngoại vi đa dạng, bao gồm cả bộ LCD tích hợp Dòng Mega nổi bật với tốc độ cao hơn và cấu trúc ngoại vi đa dạng, trong khi ATmega16 là một vi điều khiển với nhiều tính năng đặc biệt, lý tưởng cho các bài toán điều khiển trên nền vi xử lý.
- Các loại vi điều khiển AVR rất phổ biến trên thị trường Việt Nam nên không khó trong việc thay thế và sửa chữa hệ thống lúc cân.
-Giá thành của dòng vi điều khiển này khá phải chăng
-Các phần mềm lập trình và mã nguồn mở có thể tìm kiếm khá dễ dàng trên mạng.
ATmega16 là vi điều khiển 8 bit dựa trên kiến trúc RISC, nổi bật với khả năng thực hiện mỗi lệnh trong vòng một chu kỳ xung clock Điều này giúp ATmega16 đạt tốc độ 1MIPS trên mỗi MHz, tương đương với 1 triệu lệnh mỗi giây trên mỗi MHz Nhờ vào hiệu suất xử lý nhanh và mức tiêu thụ năng lượng thấp, ATmega16 là lựa chọn lý tưởng cho các thiết kế hệ thống.
2 Thông số kĩ thuật và sơ đồ chân ATmega16
Tần số thường hoạt động (MHz): 16 MHz
- Chân 1-8: Cổng nhập xuất dữ liệu song song B (Port B) nó có thể được sửdụng các chức năng đặc biệt thay vì nhập xuất dữ liệu
- Chân 9: RESET để đưa chip về trạng thái ban đầu
- Chân 10: VCC cấp nguồn cho VĐK
- Chân 11,31: GND 2 chân này được nối với nhau và nối đất
- Chân 12,13: 2 chân XTAL2 và XTAL1 dùng để đưa xung nhịp từ bên ngoài vào chip.
-Chân 14-21: Cổng nhập xuất dữ liệu song song D (PORTD) nó có thể được sử dụng các chức năng đặc biệt thay vì nhập xuất dữ liệu.
-Chân 22-29: Cổng nhập xuất dữ liệu song song C (PORTC) có thể sử dụng các chức năng đặc biệt thay vì nhập xuất dữ liệu
-Chân 30: AVCC cấp điện áp so sánh cho ADC
Chân 32: AREF điện áp so sánh tín hiệu vào ADC
Chân 33-40 của thiết bị đảm nhiệm chức năng cổng vào ra dữ liệu song song (Port A) và được trang bị bộ chuyển đổi tín hiệu tương tự sang tín hiệu số (ADC - analog to digital converter).
Vào ra của vi điều khiển ATmega16:
PORTA (PA7 PA0) là các chân từ 33 đến 40, hoạt động như cổng vào ra song song 8 bit khi không sử dụng chế độ ADC Các chân này được trang bị sẵn điện trở kéo, giúp cải thiện tính ổn định của tín hiệu.
PORTA là output thì các điện trở kéo không hoạt động , khi PORTA là input thì các điện trở kéo được kích hoạt.
PORTB (PB7 PB0) bao gồm các chân số 1 đến 8, tương tự như PORTA khi sử dụng cho việc truyền dữ liệu song song Bên cạnh đó, các chân của PORTB còn đảm nhận các chức năng đặc biệt khác.
PORTC (PC7 PC0) bao gồm các chân từ 22 đến 30, tương tự như PORTA và PORTB, chúng hoạt động như cổng vào ra song song Khi giao tiếp JTAG được kích hoạt, các trở treo tại các chân PC5 (TDI), PC3 (TMS) và PC2 (TCK) sẽ hoạt động trong sự kiện reset, đồng thời cung cấp các chức năng giao tiếp JTAG và một số chức năng đặc biệt khác.
-PORTD ( PD7-PDO ): là các chân 13 đến 21 Cũng là 1 cổng vào ra song song giống các PORT khác, ngoài ra nó còn có 1 số tính năng đặc biệt khác.
Mạch Kit cho VĐK họ AVR
Hình 1: Sơ đồ chân ATmega16
1 Giới thiệu mạch Kit AVR
AVR là dòng vi điều khiển 8 bit phổ biến tại Việt Nam, với tốc độ xung nhịp lên đến 16MHz và bộ nhớ chương trình tối đa 256 kB Nhờ vào nhiều chức năng ngoại vi tích hợp, vi điều khiển AVR có khả năng đáp ứng hiệu quả cho nhiều ứng dụng từ đơn giản đến phức tạp.
Với bộ Kit này có thể thử nghiệm các ứng dụng cơ bản như:
• Điều khiến công ra số, với LED đơn và LED 7 thanh
• Đọc trạng thái logic đầu vào số, từ bàn phím và giác cắm mở rộng
• Đo điện áp tương tự, với biến trở vị chỉnh và bộ ADC 10-bit
• Điều khiển màn hình tinh thể lỏng, với màn hình LCD dạng text
• Giao tiếp với máy tính qua chuẩn UART – USB
• Thử nghiệm các ngắt ngoài, thử khả năng điều khiển chế độ rộng xuI8
*Nhiều ứng dụng điều khiển các chức năng tích hợp sẵn trong VĐK như:
Vận hành các bộ định thời (Timer) và bộ đếm (Counter), đọc ghi EEPROM, lập trình các ngắt chương trình, thiết lập Watchdog,
Hình 2: Mạch Kit phát triển và các phụ kiện
Hình 3: Cấu trúc mạchKit
Bảng 1: Các linh kiện quan trọng và các chức năng tương ứng
STT Tên linh kiện Chức năng
1 Giắc cắm nguồn Nhận nguồn điện 9-12VDC cấp cho mạch Kit
2 IC ổn áp 7805 Hạ 9-12VDC xuống 5VDC và giữ ổn định mức điện áp này
3 LED báo nguồn Báo nguồn
4 VĐK họ AVR Điều khiển hoạt dộng của toàn mạch theo mã nguồn do người dùng lập trình và nạp xuống
5 Thạch anh Quyết định tần số xung nhịp cấp chp VĐK
6 Nút ấn reset Khởi động lại VĐK
7 Giắc ISP Kết nối mạch nạp để nạp mã nguồn cho VĐK
8 Nhóm 4 phím ấn Nhấn lệnh diều khiển của người sử dụng
9 Giắc cắm 8 chân Nối tới 8 chân vào ra đa năng(ứng với PORT-A) của
10 Giắc cắm 8 chân VĐKNối tới 8 chân vào ra đa năng(ứng với PORT-B) của
11 Giắc cắm 8 chân VĐKNối tới 8 chân vào ra đa năng(ứng với PORT-C) của
12 Giắc cắm 8 chân VĐKNối tới 8 chân vào ra đa năng(ứng với PORT-D) của
13 Dãy LED đơn VĐKBáo trạng thái logic 8 chân ở PORT-D(sáng-0,tắt-1)
14 Jumper dãy LED đơn Cho phép hoặc vô hiệu hóa LED đơn
15 LED 7 thanh Hiển thị số 0-9 và 1 vài kí hiệu do người dùng định nghĩa
16 Jumper LED 7 thanh Cho phép hoặc vô hiệu hóa LED 7 thanh
17 Jack cắm LCD Kết nối màn hình LCD dạng text(1602)
18 Biến trở vi chỉnh Điều chỉnh trơn và liên tục từ 0-5 VDC, mức điện áp đầu vào ADC0 cảu bộ ADC(chân PA0)
19 Giắc UART-USB Kết nối module chuyển đổi UART-USB
Các thông số kỹ thuật của mạch Kit:
- Khi không có mô-đun mở rộng, toàn bộ LED chỉ thị 10 tất: 15mA
- Khi có LCD và mô-đun USB, các LED chỉ thị I/O bị vô hiệu hóa : 22mA
- Khi có LCD và mô-đun USB, toàn bộ LED chỉ thị I/O sáng: 80mA
• Mạch có khả năng tự bảo vệ khi bị lắp ngược cực tính nguồn
• Mức logic các cổng VO: TTL(5V)
• Loại VĐK được hỗ trợ: ATmega16, ATmega32, và tương đương
• Cổng VO mở rộng: 4 giắc cắm(loại 8 chân) ứng với 4 Port(8 bit mỗi Port)
• Hỗ trợ mô-đun USB: UART-USB hay COM-USB(mức 5VDC)
• Xung nhịp tích hợp sẵn: thạch anh 8Mhz.
4 Sơ đồ nguyên lí mạch kit
Để lập trình cho vi điều khiển AVR, người dùng có thể lựa chọn giữa ngôn ngữ C hoặc Assembly, sử dụng trên nhiều môi trường phát triển khác nhau Đề tài này được thực hiện thông qua sự kết hợp của AVR Studio 6 (phiên bản 6.2, dung lượng 538MB) và WinAVR (phiên bản 20100110, dung lượng 27.5 MB), hoặc có thể sử dụng phần mềm CodeVisionAVR chuyên dụng cho lập trình Atmega Để nạp mã máy, phần mềm PROGISP (phiên bản 1.72, dung lượng khoảng 3MB) được sử dụng.
4MB).Phần mềm nhận dữ liệu từ cổng USB hay COM ảo là Terminal Phần mềm mô phỏng mạch là Proteus 8 Professional.
Cảm biến nhiệt độ LM35 và LCD1602
1 Cảm biến nhiệt độ LM35
Cảm biến nhiệt độ LM35, do hãng National Semiconductor sản xuất, có dải đo từ 0 đến 100 độ C và hoạt động với điện áp 5V Đây là một cảm biến tiêu thụ điện năng thấp, bao gồm 3 chân: 2 chân nguồn và 1 chân đầu ra tín hiệu dạng analog.
Chân dữ liệu của cảm biến LM35 là chân ngõ ra điện áp tuyến tính, với tỷ lệ 1mV tương ứng với 0.1 độ C, tức là 10mV sẽ tương đương với 1 độ C Điều này cho phép người dùng dễ dàng thu thập dữ liệu nhiệt độ dưới dạng độ C.
C chỉ cần lấy điện áp chân OUT chia cho 10
Chân 1 cấp điện áp 5V, chân 3 cấp GND, chân 2 là chân OUTPUT dưới dạng điện áp.
-Điện áp đầu vào từ 4V đến 30V
-Điện áp ra từ -1 đến 6V
-Cụng suất tiờu thụ là 60àA
Hình 4: Sơ đồ nguyên lí mạchKit
-Độ phân giải điện áp là 10mV/ºC
-Độ chính xác xao ở 25 ºC là 0.5 ºC
-Trở kháng đầu ra thấp 0.1 cho 1mA tải
-Độ chính xác thực tế:1/4 ºC ở nhiệt độ phòng và 3/4 ºC ngoài khoảng -55 ºC đến 150ºC
Màn hình LCD1602 sử dụng driver HD44780, cho phép hiển thị 2 dòng với 16 ký tự mỗi dòng Màn hình này nổi bật với độ nền cao, phổ biến trong cộng đồng lập trình, cung cấp nhiều mã mẫu và dễ sử dụng Đây là lựa chọn lý tưởng cho những ai mới học, thực tập hoặc thực hiện dự án.
Điện áp hoạt động là 5V
Chữ đen, nền xanh lá
Khoảng cách giữa hai chân kết nối là 0.1 inch tiện dụng khi kết nối với BreadBoard
Tên các chân được ghi ở mặt sau của màn hình LCD hỗ trợ việc kết nối, đi dậy điện
Có LED nền, có thể sử dụng để điều chỉnh biến trở hoặc PWM điều chỉnh độ sáng để sử dụng ít điện năng hơn
Có thể được điều khiển với 6 dây tín hiệu
Có bộ kí tự được xây dựng hỗ trợ tiếng Anh và tiếng Nhật, xem thêm HD44780 datasheet để biết thêm chi tiết
Hình 5:Sơ đồ chân LM35
Bảng 2: Các chân của LCD1602
Chân Ký hiệu Mô tả Giá trị
4 RS Lựa chọn thanh ghi RS=0(mức thấp) chọn thanh ghi lệnh
RS=1(mức cao)chọn thanh ghi dữ liệu
5 RW Chọn thanh ghi đọc/ viết đữ liệu RW=0 thanh ghi viết
Hình 6: Sơ đồ chân LCD1602
THIẾT KẾ BỘ ĐO VÀ HIỂN THỊ
Ngôn ngữ lập trình và phần mềm biên dịch
1 Tổng quan về ngôn ngữ lập trình C
Ngôn ngữ lập trình C là một ngôn ngữ nhỏ gọn, gần gũi với phần cứng và có nhiều điểm tương đồng với ngôn ngữ lập trình Assembler Tuy nhiên, C được coi là "có khả năng di động", cho phép mã C có thể được dịch và thực thi trên hầu hết các máy tính, điều này tạo ra sự khác biệt quan trọng so với Assembler, vốn chỉ có thể chạy trên một số máy tính đặc biệt Chính vì lý do này, C được xếp vào danh mục ngôn ngữ bậc trung.
Ngôn ngữ lập trình C được phát triển nhằm tạo điều kiện thuận lợi cho việc viết các chương trình lớn với ít lỗi hơn, trong khi vẫn giữ cho người viết trình dịch C không bị áp lực bởi các đặc tả phức tạp Cuối cùng, C đã bổ sung nhiều chức năng hữu ích.
Ngôn ngữ cốt lõi đơn giản cung cấp các chức năng quan trọng như hàm và xử lý thông qua các bộ thư viện thủ tục.
Tập trung trên mãu hình lập trình thủ tục, với các phương tiện lập trình theo kiểu cấu trúc.
Một hệ thống kiểu đơn giản nhằm loại bỏ nhiều phép toán không có ý nghĩa thực dụng
Sử dụng ngôn ngữ tiền xử lý, cụ thể là các câu lệnh tiền xử lý C, cho phép định nghĩa macro và hàm cho nhiều tập tin mã nguồn, ví dụ như thông qua câu lệnh #include.
Mức thấp của ngôn ngữ cho phép dùng tới bộ nhớ máy tính qua việc sử dụng
Số lượng từ khóa rất nhỏ gọn
Các tham số được đưa vào các hàm bằng giá trị, không bằng địa chỉ
Hàm các con trỏ cho phép hình thành 1 nền tảng ban đầu cho tính đóng và tính đa hình.
Cấu trúc (struct) cho phép người dùng định nghĩa các bản ghi và kiểu dữ liệu kết hợp, giúp tập hợp và điều chỉnh các dữ liệu liên quan một cách toàn diện.
Một số chức năng khác mà C không có(hay còn thiếu) nhưng có thể tìm thấy ở các ngôn ngữ khác gồm:
Tự động thu dọn rác
Các lớp hay các đối tượng cùng với các ứng xử của chúng
Lập trình tiêu bản hay lập trình phổ dụng
Quá tải và quá tải toàn tử
Các hỗ trợ đa luồng, đa nhiệm và mạng
Mặc dù ngôn ngữ C còn thiếu nhiều chức năng hữu ích, nhưng nó được chấp nhận rộng rãi vì cho phép lập trình viên nhanh chóng tạo ra các trình mới trên các nền tảng khác nhau Ngôn ngữ C giúp lập trình viên dễ dàng kiểm soát mã nguồn của họ, từ đó làm cho mã C chạy hiệu quả hơn so với nhiều ngôn ngữ khác Thông thường, chỉ có ngôn ngữ ASM mới có thể chạy nhanh hơn C, do ASM kiểm soát toàn bộ máy Tuy nhiên, với sự phát triển của trình biên dịch C và sự phức tạp của các CPU hiện đại, sự khác biệt về tốc độ giữa C và các ngôn ngữ khác đang dần thu hẹp.
Một lý do khác khiến ngôn ngữ C được sử dụng phổ biến và hiệu quả là vì nhiều trình biên dịch, thư viện và phần mềm thông dịch của các ngôn ngữ bậc cao khác thường được xây dựng dựa trên C.
AVR Studio 6 cung cấp 1 mô trường phát triển tích hợp(IDE), kết hợp với
2 phần mềm hỗ trợ khác là AVR Toochain và WinAVR AVR Toolchain cài đặt thư viện cho AVR studio Nếu bạn cài đặt AVR Studio và AVR
Để lập trình hiệu quả, bạn có thể sử dụng Toolchain để viết chương trình bằng ASM hoặc cài đặt WinAVR để lập trình bằng C Nếu bạn có phiên bản phát triển từ Atmel Studio, điều này sẽ mang lại lợi ích lớn vì phần mềm này hỗ trợ lập trình bảng Dưới đây là danh sách các lập trình viên hỗ trợ.
Ngôn ngữ lập trình: Ngôn ngữ assembly, C
Các tính năng hữu ích: Khung xem I/O, chỉnh sửa nhiều tài liệu, tạo tập tin Hex
CodeVisionAVR C Compiler là phần mềm dành cho hệ điều hành Windows, thuộc nhóm phần mềm phát triển bởi NA Phiên bản mới nhất hiện có của CodeVisionAVR C Compiler là Version NA, với cập nhật NA.
CodeVision AVR C Compiler, hay còn gọi là CodeVision, là một phần mềm biên dịch C do Pavel phát triển, nhằm đơn giản hóa quá trình lập trình C cho người dùng Trình biên dịch này hỗ trợ nhiều loại dữ liệu và biến, giúp người lập trình dễ dàng làm việc với các cấu trúc AVR và ngôn ngữ C.
Hình 7: Giao diện AVRStudio
Trình biên dịch CodeVision AVR C là phần mềm miễn phí tích hợp trong Atmel Studio, giúp lập trình viên phát triển các chương trình từ đơn giản đến phức tạp Điểm nổi bật của CodeVision C là khả năng lưu trữ quá trình trong bộ nhớ flash, giúp chương trình chạy nhanh hơn so với các trình biên dịch thông thường Ngoài ra, nó còn sở hữu thư viện điểm nhanh và hỗ trợ các chip vi điều khiển mới với nhân phần cứng và hướng dẫn lõi tối ưu.
Trình biên dịch AVR C hỗ trợ đa dạng kiểu dữ liệu của ngôn ngữ C, bao gồm bit, bool, char, int, ngắn, dài và phao Ngoài ra, nó còn cung cấp tính năng gián đoạn để hỗ trợ gỡ lỗi nhanh chóng và xây dựng hiệu quả Đặc biệt, trình biên dịch này cũng tối ưu hóa cấu trúc vòng lặp trong chương trình được tạo ra.
CodeVision mang đến một quy trình ổn định cho vòng lặp của chương trình, đồng thời loại bỏ các biểu hiện tiểu dự phòng, giúp tối ưu hóa hiệu suất của phần mềm.
Các lập trình viên có thể tận dụng tính năng điền tự động và autosuggest của trình biên dịch, giúp hiển thị mã ngay từ ký tự đầu tiên Trình biên dịch AVR C hỗ trợ nổi bật cú pháp, giúp dễ dàng theo dõi lỗi Nó tương thích với các ứng dụng Atmel khác và giả lập như AVR JTAG-ICE và AVR Dragon Giao diện người dùng được thiết kế đơn giản nhưng đầy đủ tính năng, mang lại trải nghiệm dễ sử dụng và tương thích với các trình biên dịch ANSI C khác.
CodeVision AVR C Compiler chạy trong hệ điều hành Windows Nó hỗ trợ Windows XP, Windows Vista và Windows 7 (32bit và 64bit).
THIẾT KẾ VÀ MÔ PHỎNG
1 Thiết kế sơ đồ nguyên lí trên Altium Designer
Hình 9: Sơ đồ nguyên lí đo nhiệt độ độ ẩm sử dụng Kit AVR
2 Mô hình 3D Kit AVR trên Altium Designer
Hình 10: Mô hình 3D KitAVR
3 Mạch in Kit AVR trên Altium
Hình 11: Đi dây mạch in Kit AVR
4 Mô phỏng trên Proteus 8 Professional
Hình 12: Mạch in Kit AVR
Mô phỏng trên Proteus cho thấy rằng điện áp Vout của cảm biến LM35 thay đổi tuyến tính theo nhiệt độ với tỷ lệ 10mV/1ºC Bộ ADC trên AVR có độ phân giải 10 bit và điện áp tham chiếu là 2.56V Khi đầu ra của LM35 được kết nối vào kênh 1 của bộ ADC, giá trị mà bộ ADC đọc được được tính bằng công thức adc_data[0] = (Vout * 1024V) / Vref = (V * 1024) / 2560.
Giá trị của adc_data[0] lại trong khoảng từ 0 đến 1023 nên ta có:
Nhiệt độ(ºC)=Vout(mV)/10
Vì vậy giá trị của nhiệt độ được tính theo công thức:
Nhiệt độ(ºC) = adc_data[0]*(2560/1024)/10
Hình 14: Mô phỏng trên Proteus cho 2 kênh
Hình 15: Giao diện nạp code trên PROGISP
Trong quá trình hoàn thiện mạch, nhóm đã gặp sự cố với cảm biến LM35 và quyết định thay thế bằng cảm biến DS18B20, vì nó có các đặc tính tương tự.
Hình 16: Mạch sau khi hoàn thiện
Hình 18: Kết quả mô phỏng khi dùng cảm biến
Hình 18: Kết quả đo được khi dùng mạch thực tế và cảm biến DS18B20