TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN ĐIỆN BÁO CÁO BÀI TẬP LỚN Đề tài Thiết kế mạch đo nhiệt độ, độ ẩm sử dụng FPGA, gửi dữ liệu hiển thị lên máy tính và điều khiển tốc độ động cơ theo nhiệt độ hoặc[.]
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN
- -
BÁO CÁO BÀI TẬP LỚN
Đề tài: Thiết kế mạch đo nhiệt độ, độ ẩm sử dụng FPGA, gửi
dữ liệu hiển thị lên máy tính và điều khiển tốc độ động cơ theo nhiệt độ hoặc nhập từ máy tính bằng phương pháp PWM
Giảng viên hướng dẫn TS Nguyễn Đại Dương
Nhóm sinh viên thực hiện Nhóm 5
Nguyễn Đăng Tuấn Bùi Thọ Thiện Nguyễn Trung Kiên Nguyễn Đức Huy
Trang 2MỤC LỤC
PHÂN CÔNG CÔNG VIỆC 4
DANH MỤC HÌNH ẢNH 5
CHƯƠNG 1 YÊU CẦU THIẾT KẾ 6
ĐẶT VẤN ĐỀ 6
CƠ SỞ LÝ THUYẾT 6
Tổng quan về FPGA 6
Ngôn ngữ VHDL 7
Cấu trúc chương trình VHDL 8
MỤC TIÊU THIẾT KẾ 8
CHƯƠNG 2 THIẾT KẾ MẠCH ĐO 9
SƠ ĐỒ KHỐI VÀ NGUYÊN LÝ HOẠT ĐỘNG 9
LỰA CHỌN PHẦN CỨNG 9
Kit FPGA EPM240 9
Module cảm biến nhiệt độ, độ ẩm DHT11 10
Quạt 5V Q5015-5 11
Module USB-TTL UART CP2102 11
CHƯƠNG 3 LẬP TRÌNH 12
KHỐI GIAO TIẾP DHT11 12
Nguyên lý hoạt động 12
Chương trình giao tiếp DHT11 14
LẬP TRÌNH KHỐI TRUYỀN NHẬN UART 15
Giới thiệu về giao tiếp UART 15
Chương trình giao tiếp UART 16
KHỐI ĐIỀU CHẾ XUNG PWM 19
KHỐI TOP ENTITY 19
CHƯƠNG 4 THỰC NGHIỆM VÀ KẾT LUẬN 22
THỬ NGHIỆM 22
KẾT LUẬN 24
Trang 3TÀI LIỆU THAM KHẢO 26
Trang 4PHÂN CÔNG CÔNG VIỆC
• Tìm hiểu và viết code khối DHT11
• Thiết kế PowerPoint, viết báo cáo
Nguyễn Trung Kiên
Trang 5DANH MỤC HÌNH ẢNH
Hình 1 Các thành phần mạch FPGA 6
Hình 2 Quy trình thiết kế mạch bằng VHDL 7
Hình 3 Sơ đồ khối mạch đo 9
Hình 4 KIT ALTERA EPM240 V1 9
Hình 5 Module DHT11 10
Hình 6 Quạt 5V Q5015-5 11
Hình 7 Module CP2102 11
Hình 8 Kết nối module DHT11 với MCU 12
Hình 9 Biểu diễn mức logic 0 13
Hình 10 Biểu diễn mức logic 1 13
Hình 11 Sơ đồ máy trạng thái 14
Hình 12 Lưu đồ thuật toán điều khiển LED 14
Hình 13 Lưu đồ thuật toán điều khiển quạt 15
Hình 14 Giao tiếp UART giữa hai thiết bị 16
Hình 15 Lưu đồ thuật toán khối TxD 17
Hình 16 Lưu đồ thuật toán khối RxD 18
Hình 17 Lưu đồ thuật toán khối điều chế xung PWM 19
Hình 18 Sơ đồ nối các khối phần truyền dữ liệu lên máy tính để hiển thị 20
Hình 19 Sơ đồ nối các khối phần nhận dữ liệu nhập từ máy tính để điều khiển động cơ quạt 20
Trang 6CHƯƠNG 1 YÊU CẦU THIẾT KẾ
Đặt vấn đề
Khi tìm hiểu về công nghệ, chúng ta sẽ thắc mắc tại sao lại phải sử dụng FPGA trong khi
đã có MCU/CPU/DSP rất mạnh, những ứng dụng/trường hợp nào phải cần đến FPGA mới giải quyết được Để trả lời được những câu hỏi này, chúng ta cần tìm hiểu sâu hơn về cấu tạo kiến trúc FPGA, quy trình thiết kế và kiến thức thực tế về các ứng dụng của nó Trong khuôn khổ bài tập lớn môn học FPGA, nhóm chúng em đã tìm hiểu về FPGA, ngôn ngữ VHDL và thiết kế ứng dụng sử dụng kit FPGA EPM240 trên cơ sở lý thuyết đã học
Chúng em xin cảm ơn thầy Nguyễn Đại Dương đã hướng dẫn chúng em nhiệt tình trong suốt quá trình học và thực hiện project, đề tài chúng em còn nhiều sai sót và khiếm khuyết mong thầy góp ý và chỉnh sửa để chúng em tiến bộ hơn Chúng em xin chân thành cảm ơn!
1 https://cse.usf.edu/~haozheng/teach/cda4253/doc/fpga-arch-overview.pdf
Trang 7• FPGA có kiến trúc mảng phần tử logic nên có thể thực thi lệnh song song trong khi vi điều khiển hay CPU phải thực thi mã lệnh theo dạng tuần tự
• Vì có thể cấu hình, lập trình lại được nên FPGA dễ dàng mở rộng các ngoại vi cũng như giao tiếp với nhiều thiết bị hơn mà các MCU hoặc ASIC lại hạn chế về điều này
• ASIC/ASSP có hiệu suất cao hơn nếu xét về mặt tiêu thụ công suất và số lượng cổng Nhưng nếu chỉ cần thực thi một chức năng nhỏ nào đó, một chip ASIC/ASSP có thể đòi hỏi công suất tiêu thụ lớn hơn và nhiều cổng hơn thực tế yêu cầu Với FPGA, firmware
có thể xác định được “kích cỡ” của ứng dụng, từ đó giảm số cổng và công suất cần tiêu thụ
• Nếu xét về giá thành, FPGA không thể nào so sánh được với ASIC hay SoC, nhưng bù lại, với khả năng tái cấu hình kiến trúc, FPGA đóng vài trò vô cùng to lớn trong việc giảm giá thành và thời gian chế tạo ASIC
Ngôn ngữ VHDL
Là ngôn ngữ mô phỏng và tổng hợp phần cứng Progamming language được dịch ra mã lệnh thực hiện tuần tự bởi CPU HDL được dịch ra thành các kiến trúc ở mức cổng logic và flip flop
Hai ứng dụng chính của VHDL là trong lĩnh vực PLD (Programmable Logic Device – Thiết
bị logic có thể lập trình (bao gồm CPLD – Complex Programmable Logic Device và FPGA – Field Programmable Gate Array) và trong lĩnh vực ASIC (Application Specific Integrated Circuit – Mạch tích hợp dành riêng cho ứng dụng) Khi chương trình VHDL được viết, nó có thể được sử dụng để thực thi mạch trong một thiết bị có thể lập trình (của Altera, Xilinx, Atmel, v.v.) hoặc có thể được gửi đến xưởng để chế tạo chip ASIC Hiện nay, nhiều chip thương mại phức tạp (ví dụ như vi điều khiển) được thiết kế theo cách tiếp cận như vậy
2 https://dientuviet.com/gioi-thieu-ngon-ngu-vhdl/
Trang 8Cấu trúc chương trình VHDL
Giống với ngôn ngữ Verilog, toàn bộ hệ thống thiết kế của ngôn ngữ VHDL được gọi là một module Bên trong module có những cấu trúc khác để tạo nên chương trình VHDL là phần khai báo thư viện, phần mô tả thực thể và phần mô tả kiến trúc Bây giờ mình sẽ giới thiệu về entity (thực thể) trong một chương trình VHDL
Một hệ thống module logic trên VHDL bao gồm: khai báo thư viện, entity (thực thể) và ARCHITECTURE là kiến trúc chương trình Trong đó:
• Khai báo LIBRARY (thư viện): tương tự như ngôn ngữ C, chúng ta cần khai báo thư viện cho chương trình VHDL Một số thư viện sau thường dùng cho thiết kế: IEEE, STD, WORK, … Khai báo thư viện phải ở đầu mỗi chươn trình và mỗi module đều phải có khai báo
• ENTITY (thực thể): Khai báo các chân I/O của mạch thiết kế, các tham số dùng chung (GENERIC) của một module VHDL
• ARCHITECTURE (kiến trúc): là phần mô tả chính của một module VHDL Phần này mô tả các chức năng chính của thiết kế hay còn gọi là hàm
Trang 9CHƯƠNG 2 THIẾT KẾ MẠCH ĐO
Sơ đồ khối và nguyên lý hoạt động
Hình 3 Sơ đồ khối mạch đo
Trong đó:
• Khối cảm biến DHT11: thực hiện đo giá trị nhiệt độ, độ ẩm từ môi trường
• Khối FPGA: giao tiếp với khối DHT11 để nhận giá trị nhiệt độ, độ ẩm thu được, sau đó giao tiếp với PC qua chuẩn UART đồng thời đưa ra lệnh điều khiển quạt và led
• Khối PC: giao tiếp UART với khối FPGA, hiển thị dữ liệu đo được lên màn hình máy tính
để người sử dụng theo dõi và người dùng có thể cài đặt để điều khiển tốc độ quạt tự động theo nhiệt độ hoặc là nhập tốc độ quạt thủ công từ máy tính
• Khối chấp hành: hoạt động theo lệnh điều khiển của khối FPGA
Lựa chọn phần cứng
Kit FPGA EPM240
Thông số kỹ thuật:
• Sử dụng chip: EPM240T100C5N TQFP100
3 https://banlinhkien.com/kit-altera-epm240-v1-p6649334.html
Trang 10• Điện áp hoạt động: 5VDC
• Tương thích mạch nạp: USB Blaster
• Hỗ trợ giao tiếp: LCD1602, LCD12864
• Hỗ trợ giao tiếp: UART
• Giao tiếp Key đơn
• Giao tiếp Led đơn
• Hỗ trợ cổng I/O
Module cảm biến nhiệt độ, độ ẩm DHT11
DHT11 là cảm biến nhiệt độ, độ ẩm rất thông dụng hiện nay vì chi phí giá rẻ và rất dễ lấy
dữ liệu thông qua giao tiếp 1-wire Cảm biến được tích hợp bộ tiền xử lý tín hiệu giúp dữ liệu nhận về được chính xác mà không cần phải thông qua mạch xử lý tín hiệu nào Dưới đây là một
số thông số kỹ thuật:
• Điện áp hoạt động: 3→5 VDC
• Dải đo độ ẩm: 20%→90% RH, sai số ±5% RH
• Dải đo nhiệt độ: 0℃→50℃, sai số ±2℃
• Tần số lấy mẫu tối đa: 1 Hz
• Khoảng cách truyền tối đa: 20 m
Sơ đồ chân module DHT11 gồm 2 chân cấp nguồn và 1 chân tín hiệu Hiện nay trên thị trường có hai loại thông dụng được đóng gói với 3 chân hoặc 4 chân
4 https://vngiotlab.github.io/vbluno/vi/mydoc_arduino_tut10_vi.html
Trang 11Quạt 5V Q5015-5
Quạt sên (quạt ly tâm)-Q5015 có chức năng tản nhiệt, làm mát các thiết bị điện tử như: bảng mạch điện tử, PC, laptop, … Quạt sử dụng nguồn điện áp DC làm nguồn nuôi, tùy vào từng mục đích sử dụng cụ thể của sản phẩm mà chúng ta sẽ chọn mua loại quạt tản nhiệt với công suất phù hợp Dưới đây là một số thông số kỹ thuật của quạt sên 5V Q501505:
Module chuyển đổi USB-UART CP2102 hoạt động ở mức điện áp 3.3 VDC và 5VDC nên
có thể dùng để giao tiếp Serial với hầu hết các IC thông dụng trên thị trường Mạch sử dụng chip CP2102, là chip chuyển đổi USB-UART của Silabs CP2102 có kích thước nhỏ gọn và yêu cầu
5 https://banlinhkien.com/quat-tay-kho-5v-q50155-p6648102.html
6 https://www.thegioiic.com/products/cp2102-mach-chuyen-doi-usb-to-ttl-uart
Trang 12rất ít thành phần bên ngoài để hoạt động được ngay CP2102 không sử dụng thạch anh bên ngoài như CP2303 Trên mạch có 5 cổng vào ra bao gồm: 3.3V, 5V, TxD, RxD, GND; bên cạnh đó được trang bị LED báo hiệu Tx/Rx LED này sẽ sáng khi module truyền hoặc nhận dữ liệu Tốc
độ truyền nhận dữ liệu tối đa là 115200 bps Driver hỗ trợ tương thích với nhiều hệ điều hành,
đã kiểm tra và hoạt động tốt trên Window, Mac OS, Linux
CHƯƠNG 3 LẬP TRÌNH
Khối giao tiếp DHT11
Nguyên lý hoạt động
Vi điều khiển giao tiếp với DHT11 theo chuẩn 1 wire với 2 bước:
• Gửi yêu cầu đo tới DHT11, sau đó đợi DHT11 phản hồi
• Khi DHT11 sẵn sàng giao tiếp, nó sẽ gửi lại 5 byte dữ liệu chứa giá trị nhiệt độ và độ ẩm
2 Vi điều khiển kéo chân DATA lên mức logic 1, sau đó cấu hình lại chế độ INPUT
3 Sau khoảng thời gian 20→40 μs, DHT11 sẽ kéo chân DATA xuống mức logic 0 Trong trường hợp quá 40 μs mà chân DATA vẫn chưa được kéo xuống mức logic 0 nghĩa là giao tiếp với DHT11 thất bại
4 Chân DATA sẽ được giữ ở mức logic 0 thời gian 80 μs sau đó nó được kéo lên mức logic
1 trong 80 μs Vi điểu khiển xác định việc giao tiếp thành công hay không với DHT11 qua chân DATA
7 https://www.mouser.com/datasheet/2/758/DHT11-Technical-Data-Sheet-Translated-Version-1143054.pdf
Trang 13Bước 2:
1 Giá trị nhiệt độ và độ ẩm đo được sẽ được DHT11 gửi về vi điều khiển dưới dạng 5 byte:
a Byte 1: giá trị phần nguyên của độ ẩm
b Byte 2: giá trị phần thập phân của độ ẩm
c Byte 3: giá trị phần nguyên của nhiệt độ
d Byte 4: giá trị phần thập phân của nhiệt độ
e Byte 5: byte checksum (nếu byte 5 bằng tổng giá trị 4 byte trên thì dữ liệu thu được
• Nó sẽ kéo chân DATA lên mức logic 1 và giữ trong 70 μs nếu dữ liệu truyền về vi điều khiển là bit 1
8 https://www.mouser.com/datasheet/2/758/DHT11-Technical-Data-Sheet-Translated-Version-1143054.pdf
9 https://www.mouser.com/datasheet/2/758/DHT11-Technical-Data-Sheet-Translated-Version-1143054.pdf
Trang 14Chương trình giao tiếp DHT11
Để giao tiếp với DHT11, nhóm em sử dụng mô hình máy trạng thái để đọc dữ liệu đo được từ cảm biến
Hình 11 Sơ đồ máy trạng thái
Ở trong khối DHT11 bọn em thiết kế sẽ bao gồm cả điều khiển LED và động cơ quạt
Hình 12 Lưu đồ thuật toán điều khiển LED
Trang 15Hình 13 Lưu đồ thuật toán điều khiển quạt
Lập trình khối truyền nhận UART
Giới thiệu về giao tiếp UART
Giao thức truyền thông đóng một vai trò quan trọng trong việc tổ chức giao tiếp giữa các thiết bị Nó được thiết kế theo nhiều cách khác nhau dựa trên các yêu cầu của hệ thống và các giao thức này có một quy tắc cụ thể được thống nhất giữa các thiết bị để việc truyền dữ liệu được thực hiện thành công Các hệ thống nhúng, vi điều khiển và máy tính hầu hết sử dụng UART như một dạng giao thức giao tiếp phần cứng giữa thiết bị và thiết bị Trong số các giao thức truyền thông hiện có, UART chỉ sử dụng hai dây cho bên truyền và bên nhận
Mặc dù là một phương pháp giao thức truyền thông phần cứng được sử dụng rộng rãi, nhưng nó không phải lúc nào cũng được tối ưu hóa hoàn toàn Việc thực hiện đúng giao thức khung truyền thường bị bỏ qua khi sử dụng module UART bên trong bộ vi điều khiển
Theo định nghĩa, UART là một giao thức truyền thông phần cứng sử dụng giao tiếp nối tiếp không đồng bộ với tốc độ có thể định cấu hình Không đồng bộ có nghĩa là không có tín hiệu đồng hồ để đồng bộ hóa các bit đầu ra từ thiết bị truyền đi đến bên nhận
Trong giao tiếp UART, hai UART giao tiếp trực tiếp với nhau UART truyền chuyển đổi
dữ liệu song song từ một thiết bị điều khiển như CPU thành dạng nối tiếp, truyền nó nối tiếp đến UART nhận, sau đó chuyển đổi dữ liệu nối tiếp trở lại thành dữ liệu song song cho thiết bị nhận
Trang 16Hình 14 Giao tiếp UART giữa hai thiết bị 10
UART truyền dữ liệu không đồng bộ, có nghĩa là không có tín hiệu đồng hồ để đồng bộ hóa đầu ra của các bit từ UART truyền đến việc lấy mẫu các bit bởi UART nhận Thay vì tín hiệu đồng hồ, UART truyền thêm các bit start và stop vào gói dữ liệu được chuyển Các bit này xác định điểm bắt đầu và điểm kết thúc của gói dữ liệu để UART nhận biết khi nào bắt đầu đọc các bit Khi UART nhận phát hiện một bit start, nó bắt đầu đọc các bit đến ở một tần số cụ thể được gọi là tốc độ truyền (baud rate) Tốc độ truyền là thước đo tốc độ truyền dữ liệu, được biểu thị bằng bit trên giây (bps – bit per second) Cả hai UART đều phải hoạt động ở cùng một tốc độ truyền Tốc độ truyền giữa UART truyền và nhận chỉ có thể chênh lệch khoảng 10% trước khi thời gian của các bit bị lệch quá xa Có 5 bước để thực hiện truyền nhận UART:
1 UART truyền nhận dữ liệu song song từ bus dữ liệu
2 UART truyền thêm bit Start, bit chẵn lẻ và bit Stop vào khung dữ liệu
3 Toàn bộ dữ liệu được đóng gói theo khung và gửi nối tiếp từ bên truyền sang bên nhận Bên nhận lấy mẫu đường dữ liệu ở tốc độ truyền nhận được cấu hình trước
4 Bên nhận loại bỏ bit Start, bit chẵn lẻ và bit Stop khỏi khung dữ liệu
5 Bên nhận chuyển đổi dữ liệu nối tiếp trở lại thành song song và chuyển nó đến bus dữ liệu ở đầu nhận
Chương trình giao tiếp UART
3.2.2.1 Truyền dữ liệu (TxD)
- Để truyền dữ liệu với tốc độ 9600 Mbps, cần tạo một xung clock có tần số 9600 Hz là
clk_9600Hz
10 https://dientuviet.com/kien-thuc-co-ban-ve-giao-tiep-uart/
Trang 17- Nhúng ENTITY clk_9600Hz vào ENTITY TxD, sau đó ta port map chân clk_out của
clk_9600Hz vào signal prescaled_clk:
- Và dùng signal đó làm biến nhạy cho Process để truyền dữ liệu:
- Khi có lệnh truyền (Start) thì tại mỗi thời điểm xung sườn lên của clk_9600Hz, một bit trong khung bản tin sẽ được đưa lên đường truyền TxD (data_line)
⇒Thứ tự các bit dữ liệu được truyền đi là: Start Bit – Data Bit (LSB) – … – Data
Bit (MSB) – Stop Bit
Hình 15 Lưu đồ thuật toán khối TxD
Trang 183.2.2.2 Nhận dữ liệu (RxD)
- Vì UART là giao thức truyền thông thu – phát không đồng bộ, do đó để nhận được tín hiệu, tần số xung clock bên nhận phải lớn hơn ít nhất 2 lần tần số xung clock bên truyền
Chọn tần số clock nhận là 28,8KHz (gấp 3 lần bên truyền là 9600Hz)
- Ta tạo một Entity là clk_28800Hz, sau đó nhúng vào trong Entity RxD:
- Entity RxD không cần tín hiệu start vì việc nhận dữ liệu là thụ động Thay vào đó, khi
data_line được kéo xuống mức thấp thì khối bắt đầu thực hiện công việc nhận và xử lý
dữ liệu Trong lúc đang nhận dữ liệu, busy = 1
- Dữ liệu sau khi xử lý xong sẽ được lưu tại data
Hình 16 Lưu đồ thuật toán khối RxD
Trang 19Khối điều chế xung PWM
Để điều khiển tốc độ quạt ta cần phải điều chế xung PWM, với số LE hạn chế thì nhóm em chỉ điều chế xung PWM với duty cycle 40% và 70%, với duty cycle 0 và 100% thì sẽ bật tắt quạt trực tiếp
Hình 17 Lưu đồ thuật toán khối điều chế xung PWM
Khối Top Entity
Do không đủ Logic Element để thực hiện cả việc truyền dữ liệu lên máy tính để hiển thị và gửi
dữ liệu nhập từ máy tính để điều khiển động cơ quạt nên chúng em tách hai phần này ra và chạy từng phần một để đảm bảo đủ Logic Element Mỗi phần em sẽ viết một khối top entity riêng