



















Preview text:
lOMoAR cPSD| 61554479
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - VIỄN THÔNG
BÁO CÁO BÀI TẬP LỚN
KĨ THUẬT VI XỬ LÝ Đề tài :
Thiết kế mạch đo nhiệt độ và độ ẩm bằng DHT11 hiển
thị kết quả trên LCD và cảnh báo LED khi nhiệt độ vượt
ngưỡng nhất định
Giảng viên hướng dẫn: TS. Hoàng Mạnh Thắng
Nhóm sinh viên thực hiện: Họ và tên Mail sis Tỷ lệ đóng góp Phạm Việt Hoàng
hoang.pv182547@sis.hust.edu.vn 30% 20182547 lOMoAR cPSD| 61554479 dung.pm182446@sis.hust.edu.vn Phùng Mạnh Dũng 30% 20182446 Nguyễn Phú Đức 40% duc.np182435@sis.hust.edu.vn 20182435 Hà Nội, 6-2021 lOMoAR cPSD| 61554479 LỜI NÓI ĐẦU
Trong xu thế phát triển hiện nay, với sự bùng nổ của các ngành công nghệ thông tin,
điện tử, tự động hóa, … Đã làm cho đời sống của con người ngày càng hoàn thiện. Các
thiết bị tự động hóa đã ngày càng xâm lấn vào trong sản xuất và thậm chí là vào cuộc
sống sinh hoạt hàng ngày của mỗi con người. Ví dụ như một chiếc ô tô có thể có hàng
ngàn thiết bị hỗ trợ người lái. Là một sinh viên khoa Điện tử Viễn thông Đại học Bách
Khoa Hà Nội, bằng những kiến thức đã học, nhóm em đã chọn đề tài Thiết kế mạch đo
nhiệt độ và độ ẩm bằng DHT11 cho bài tập lớn.
Trong quá trình làm đề tài này, chúng em đã cố gắng hoàn thành thật tốt nhưng do
kiến thức còn hạn chế cùng với những yếu tố khách quan khác mà không tránh khỏi
những thiếu sót. Chúng em rất mong được sự đóng góp ý kiến, phê bình và hướng dẫn
thêm của thầy cũng như các bạn đọc.
Cuối cùng chúng em xin gửi lời cảm ơn chân thành nhất tới thầy Hoàng Mạnh
Thắng đã hướng dẫn tận tình, giảng giải chi tiết giúp chúng em hoàn thành được đề tài.
Trong quá trình học tập và nghiên cứu, chúng em đã có thêm được nhiều kiến thức về
chuyên ngành cũng như những kiến thức của môn học Kỹ thuật vi xử lý đồng thời có
thời gian rèn luyện các kỹ năng khác cần thiết cho cuộc sống.
Chúng em xin chân thành cảm ơn ! MỤC LỤC
CHƯƠNG 1. CƠ SỞ LÝ THUYẾT .................................................................................. 1
1.1 Tổng quan về cấu trúc ARM và vi xử lí lõi ARM Cortex-M3 ................................. 1
1.1.1 Tổng quan về cấu trúc ARM .............................................................................. 1
1.1.2 Tổng quan về vi xử lí lõi ARM Cortex-M3 ....................................................... 1
1.2 Tổng quan về vi điều khiển STM32 và STM32F103C8T6 ..................................... 3
1.2.1 Vi điều khiển STM32 ......................................................................................... 3
1.2.2 Vi điều khiển STM32F103C8T6 ....................................................................... 4
1.3 Lập trình cho STM32 ............................................................................................... 7
1.4 Tổng quan về cảm biến nhiệt độ, độ ẩm DHT11 ................................................... 10
1.5 LCD 1602 ................................................................................................................ 11
1.6 Module I2C LM1602 .............................................................................................. 13 lOMoAR cPSD| 61554479
CHƯƠNG 2. PHÂN TÍCH THIẾT KẾ HỆ THỐNG ................................................... 15
2.1 Mô tả hoạt động của hệ thống ............................................................................... 15
2.2 Yêu cầu hệ thống .................................................................................................... 15
2.2.1 Yêu cầu chung ................................................................................................. 15
2.2.2 Yêu cầu đối với module cảm biến DHT11 ...................................................... 15
2.2.3 Yêu cầu với LCD 1602 .................................................................................... 15
CHƯƠNG 3. MÔ PHỎNG VÀ XÂY DỰNG HỆ THỐNG THỰC NGHIỆM ........... 16
3.1 Sơ đồ khối của hệ thống ......................................................................................... 16
3.2 Những linh kiện sử dụng ....................................................................................... 16
3.3 Lưu đồ thuật toán ................................................................................................... 19
3.4 Sơ đồ thiết kế mạch................................................................................................. 19
3.5 Viết chương trình code cho vi điều khiển STM32F103C8T6 ............................... 19
KẾT LUẬN ....................................................................................................................... 47
TÀI LIỆU THAM KHẢO ............................................................................................... 47
PHỤ LỤC .......................................................................................................................... 48
Bảng phân công chi tiết công việc ................................................................................... 48 lOMoAR cPSD| 61554479 i lOMoAR cPSD| 61554479
CHƯƠNG 1. CƠ SỞ LÝ THUYẾT
1.1 Tổng quan về cấu trúc ARM và vi xử lí lõi ARM Cortex-M3
1.1.1 Tổng quan về cấu trúc ARM
ARM (từ viết tắt của Advanced RISC Machine) là một họ kiến trúc dạng RISC cho
các vi xử lý máy tính, được cấu hình cho các môi trường khác nhau. Arm Holdings phát
triển kiến trúc và cấp phép nó cho các công ty khác, nơi mà sẽ thiết kế các sản phẩm của
riêng họ để thực hiện một trong những kiến trúc đó bao gồm các SoC và các module hệ
thống (SoM) kết hợp với các thành phần khác nhau như bộ nhớ, giao diện, radio. Họ
cũng thiết kế các lõi thực hiện tập lệnh này và cấp phép cho các thiết kế này cho các
công ty đối tác để thiết kế sản phẩm của riêng họ dựa trên các lõi này.
Các bộ xử lý có kiến trúc RISC thường yêu cầu ít bóng bán dẫn hơn các bộ xử lý có
kiến trúc điện toán tập lệnh phức tạp (CISC) (như bộ xử lý x86 có trong hầu hết các máy
tính cá nhân), giúp cải thiện chi phí, tiêu thụ điện năng và tản nhiệt. Những đặc điểm
này là mong muốn đối với các thiết bị nhẹ, di động, chạy bằng pin bao gồm cả điện thoại
thông minh, máy tính xách tay và máy tính bảng và các hệ thống nhúng khác. Đối với
các siêu máy tính tiêu thụ một lượng điện lớn, ARM cũng có thể là một giải pháp tiết kiệm năng lượng.
ARM Holdings định kỳ phát hành bản cập nhật cho kiến trúc. Các phiên bản kiến
trúc ARMv3 đến ARMv7 hỗ trợ không gian địa chỉ 32 bit (chip tiền ARMv3, được tạo
trước khi ARM Holdings được hình thành, như được sử dụng trong Acorn Archimedes,
có không gian địa chỉ 26 bit) và số học 32 bit; hầu hết các kiến trúc đều có các hướng
dẫn có độ dài cố định 32 bit. Phiên bản Thumb hỗ trợ một tập lệnh có độ dài thay đổi,
cung cấp cả hai lệnh 32 và 16 bit để cải thiện mật độ mã. Một số lõi cũ hơn cũng có thể
cung cấp thực thi phần cứng cho mã byte Java. Được phát hành vào năm 2011, kiến trúc
ARMv8-A đã thêm hỗ trợ cho không gian địa chỉ 64 bit và số học 64 bit với tập lệnh có
độ dài cố định 32 bit mới.
1.1.2 Tổng quan về vi xử lí lõi ARM Cortex-M3
Vi xử lý lõi ARM Cortex dựa trên 3 cấu hình của kiến trúc ARMv7: lOMoAR cPSD| 61554479
− Cấu hình A: cho các ứng dụng Application, yêu cầu cao chạy trên các hệ điều hành
mở và phức tạp như Linux, Android…
− Cấu hình R: cho các ứng dụng thời gian thực Real Time
− Cấu hình M: cho các ứng dụng vi điều khiển Microcontroller
Bộ vi xử lý ARM Cortex-M3 dựa trên kiến trúc ARMv7-M có cấu trúc thứ bậc. Nó
tích hợp lõi xử lý trung tâm, với các thiết bị ngoại vi hệ thống tiên tiến để tạo ra các khả
năng như kiểm soát ngắt, bảo vệ bộ nhớ, gỡ lỗi và theo vết hệ thống. ARM Cortex M3
dựa trên cấu trúc Havard, được đặc trưng bằng sự tách biệt giữa vùng nhớ dữ liệu và
chương trình. Vì có thể đọc cùng lúc lệnh và dữ liệu từ bộ nhớ, bộ vi xử lý ARM Cortex-
M3 có thể thực hiện nhiều hoạt động song song, tăng tốc thực thi ứng dụng.
Hình 1.1: Cấu Trúc Vi Xử Lý ARM Cortex M3
Lõi ARM Cortex có cấu trúc đường ống gồm 3 tầng: Instruction Fetch, Instruction
Decode và Instruction Execute. Khi gặp một lệnh nhánh, tầng decode chứa một chỉ thị
nạp lệnh suy đoán có thể dẫn đến việc thực thi nhanh hơn. Bộ xử lý nạp lệnh dự định
rẽ nhánh trong giai đoạn giải mã. Sau đó, trong giai đoạn thực thi, việc rẽ nhánh được
giải quyết và bộ vi xử lý sẽ phân tích xem đâu là lệnh thực thi kế tiếp. Nếu việc rẽ
nhánh không được chọn thì lệnh tiếp theo đã sẵn sàng. Còn nếu việc rẽ nhánh được
chọn thì lệnh rẽ nhánh đó cũng đã sẵn sàng ngay lập tức, hạn chế thời gian rỗi chỉ còn một chu kỳ. lOMoAR cPSD| 61554479
Hình 1.2: The Cortex–M3 processor
Bộ vi xử lý Cortex-M3 là một bộ vi xử lý 32-bit, với độ rộng của đường dẫn dữ
liệu 32 bit, các dải thanh ghi và giao tiếp bộ nhớ. Có 13 thanh ghi đa dụng, hai con trỏ
ngăn xếp, một thanh ghi liên kết, một bộ đếm chương trình và một số thanh ghi đặc
biệt trong đó có một thanh ghi trạng thái chương trình.
1.2 Tổng quan về vi điều khiển STM32 và STM32F103C8T6
1.2.1 Vi điều khiển STM32
ST đã đưa ra thị trường 4 dòng vi điều khiển dựa trên ARM7 và ARM9, nhưng
STM32 là một bước tiến quan trọng trên đường cong chi phí và hiệu suất
(price/performance), giá chỉ gần 1 Euro với số lượng lớn, STM32 là sự thách thức thật
sự với các vi điều khiển 8 và 16-bit truyền thống. STM32 đầu tiên gồm 14 biến thể khác
nhau, được phân thành hai dòng: dòng Performance có tần số hoạt động của CPU lên
tới 72Mhz và dòng Access có tần số hoạt động lên tới 36Mhz. Các biến thể STM32 lOMoAR cPSD| 61554479
trong hai nhóm này tương thích hoàn toàn về cách bố trí chân (pin) và phần mềm, đồng
thời kích thước bộ nhớ FLASH ROM có thể lên tới 512K và 64K SRAM.
Hình 1.3: Kiến trúc của STM32 nhánh Performance và Access
Nhánh Performance hoạt động với xung nhịp lên đến 72Mhz và có đầy đủ các
ngoại vi, nhánh Access hoạt động với xung nhịp tối đa 36Mhz và có ít ngoại vi hơn so với nhánh Performance.
1.2.2 Vi điều khiển STM32F103C8T6
1.2.2.1 Cấu trúc kit vi điều khiển STM32F103C8T6
Hình 1.4: Kit phát triển STM32F103C8T6
Cấu trúc của kit STM32F103C8T6 bao gồm:
− 1 cổng Mini USB dùng để cấp nguồn, nạp cũng như debug.
− 2 MCU bao gồm 1 MCU nạp và 1 MCU dùng để lập trình.
− Có chân Output riêng cho các chân mạch nạp trên MCU1.
− Có chân Output đầy đủ cho các chân MCU2. lOMoAR cPSD| 61554479 −
Chân cấp nguồn ngoài riêng cho MCU2 nếu không sử dụng nguồn từ USB.
− Thạch anh 32,768khz dùng cho RTC và Backup.
− Chân nạp dùng cho chế độ nạp boot loader.
− Nút Reset ngoài và 1 led hiển thị trên chân PB9, 1 led báo nguồn cho MCU2.
1.2.2.2 Cấu hình chi tiết của STM32F103C8T6
ARM 32-bit Cortex M3 với clock max là 72Mhz.
Bộ nhớ 64 kbytes bộ nhớ Flash(bộ nhớ lập trình) và 20kbytes SRAM.
Clock, reset và quản lý nguồn:
− Điện áp hoạt động 2.0V -> 3.6V.
− Power on reset(POR), Power down reset(PDR) và programmable voltage detector (PVD).
− Sử dụng thạch anh ngoài từ 4Mhz -> 20Mhz. −
Thạch anh nội dùng dao động RC ở mode 8Mhz hoặc 40khz. −
Sử dụng thạch anh ngoài 32.768khz được sử dụng cho RTC.
Trong trường hợp điện áp thấp:
− Có các mode :ngủ, ngừng hoạt động hoặc hoạt động ở chế độ chờ.
− Cấp nguồn ở chân Vbat bằng pin để hoạt động bộ RTC và sử dụng lưu trữ data khi mất nguồn cấp chính.
2 bộ ADC 12 bit với 9 kênh cho mỗi bộ:
− Khoảng giá trị chuyển đổi từ 0 – 3.6V. −
Lấy mẫu nhiều kênh hoặc 1 kênh. −
Có cảm biến nhiệt độ nội.
DMA bộ chuyển đổi này giúp tăng tốc độ xử lý do không có sự can thiệp quá sâu của CPU: − 7 kênh DMA. lOMoAR cPSD| 61554479 −
− Hỗ trợ DMA cho ADC, I2C, SPI, UART. 7 timer:
− 3 timer 16 bit hỗ trợ các mode IC/OC/PWM.
1 timer 16 bit hỗ trợ để điều khiển động cơ với các mode bảo vệ như ngắt input, dead-time..
− 2 watdog timer dùng để bảo vệ và kiểm tra lỗi.
− 1 sysTick timer 24 bit đếm xuống dùng cho các ứng dụng như hàm Delay….
Hỗ trợ 9 kênh giao tiếp bao gồm: − 2 bộ I2C(SMBus/PMBus).
− 3 bộ USART(ISO 7816 interface, LIN, IrDA capability, modem control). − 2 SPIs (18 Mbit/s). − 1 bộ CAN interface (2.0B Active). − USB 2.0 full-speed interface.
Kiểm tra lỗi CRC và 96-bit ID.
1.2.2.3 Thông số kỹ thuật lOMoAR cPSD| 61554479 −
Hình 1.5: Sơ đồ chân kit STM32F103C8T6
Các thông số kĩ thuật của kit STM32F103C8T6:
− Điện áp cấp 5VDC qua cổng Micro USB sẽ được chuyển đổi thành 3.3VDC qua IC
nguồn và cấp cho Vi điều khiển chính.
− Tích hợp sẵn thạch anh 8Mhz.
− Tích hợp sẵn thạnh anh 32Khz cho các ứng dụng RTC.
Ra chân đầy đủ tất cả các GPIO và giao tiếp: CAN, I2C, SPI, UART, USB,… −
Tích hợp Led trạng thái nguồn, Led PC13, Nút Reset.
− Kích thước: 53.34 x 15.24mm.
− Sử dụng với các mạch nạp: ST-Link Mini, J-link hoặc USB TO COM.
− Kết nối chân khi nạp bằng ST-Link Mini: TCK - SWCLK, TMS - SWDIO, GND GND, 3.3V - 3.3V.
1.3 Lập trình cho STM32
STMicroelectronics đã giới thiệu một công cụ có tên STM32CubeMX ,tạo code cơ
bản theo các thiết bị ngoại vi và board STM32 được chọn. Vì vậy, chúng ta không cần
phải lo lắng về việc code hóa cho các trình điều khiển và thiết bị ngoại vi cơ bản. Hơn
nữa code được tạo này có thể được sử dụng trong Keil uVision để chỉnh sửa theo yêu
cầu. Và cuối cùng, code được ghi vào STM32 bằng lập trình ST-Link từ STMicroelectronics.
Công cụ STM32CubeMX là một phần của STMicroelectronics STMCube. Công cụ
phần mềm này giúp cho việc phát triển dễ dàng bằng cách giảm giai đoạn phát triển,
thời gian và chi phí. STM32Cube bao gồm STM32CubeMX là một công cụ cấu hình
phần mềm đồ họa cho phép tạo code C bằng cách sử dụng trình hướng dẫn đồ họa. Code
đó có thể được sử dụng trong các môi trường phát triển khác nhau như keil uVision,
GCC, IAR, v.v. Bạn có thể tải xuống công cụ này từ liên kết sau.
STM32CubeMX có các tính năng sau: − Chân gỡ lỗi.
− Trợ giúp thiết lập xung. lOMoAR cPSD| 61554479 − − Một nguồn
− Một tiện ích thực hiện cấu hình ngoại vi MCU như chân GPIO, USART, v.v.
− Một tiện ích thực hiện cấu hình ngoại vi MCU cho các ngăn xếp phần mềm trung gian như USB, TCP / IP, v.v.
Keil C là phần mềm hỗ trợ người dung trong việc lập trình các dòng vi điều khiển
khác nhau. Keil C giúp người dung soạn thảo và biên dịch chương trình C hay Assembly
thành ngôn ngữ máy để nạp vào vi điều khiển giúp tương tác giữa vi điều khiển và người lập trình. lOMoAR cPSD| 61554479
Quy trình sẽ là cấu hình cơ bản trên CubeMX:
Hình 1.6: Cấu hình trên CubeMX
Sau đó sẽ lập trình nâng cao trên KeilC:
Hình 1.7: Sau đó sẽ lập trình trên KeilC lOMoAR cPSD| 61554479
1.4 Tổng quan về 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í rẻ và rất dễ
lấy dữ liệu thông qua giao tiếp 1-wire ( giao tiếp digital 1-wire truyền dữ liệu duy nhất).
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 qua bất kỳ tính toán nào.
Hình 1.8: Cảm biến và module cảm biến DHT11 Đặc điểm:
− Điện áp hoạt động : 3V - 5V (DC)
− Dải độ ẩm hoạt động : 20% - 90% RH, sai số ±5%RH
− Dải nhiệt độ hoạt động : 0°C ~ 50°C, sai số ±2°C
− Tần số lấy mẫu tối đa: 1 Hz
− Khoảng cách truyển tối đa: 20m
Sơ đồ chân Cảm biến DHT11 gồm 2 chân cấp nguồn, và 1 chân tín hiệu được mô tả
ở hình 1.9. Hiện nay, thông dụng ngoài thị trường có hai loại đóng gói cho DHT11: 3 chân và 4 chân. lOMoAR cPSD| 61554479
Hình 1.9: Các chân của cảm biến DHT11
Nhận xét: Cảm biến nhiệt độ, độ ẩm DHT11 với giá thành rẻ, dễ sử dụng, thích hợp
sử dụng trong các ứng dụng yêu cầu độ chính xác không cao, môi trường không khắc nghiệt. 1.5 LCD 1602
Ngày nay, thiết bị hiển thị LCD 1602 (Liquid Crystal Display) được sử dụng trong
rất nhiều các ứng dụng của VĐK. LCD 1602 có rất nhiều ưu điểm so với các dạng hiển
thị khác như: khả năng hiển thị kí tự đa dạng (chữ, số, 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, tiêu tốn rất ít tài nguyên hệ thống, giá thành rẻ,…
Thông số kĩ thuật của sản phẩm LCD 1602: − Điện áp MAX : 7V − Điện áp MIN : - 0,3V
− Hoạt động ổn định : 2.7-5.5V
− Điện áp ra mức cao : > 2.4
− Điện áp ra mức thấp : <0.4V
− Dòng điện cấp nguồn : 350uA - 600uA
− Nhiệt độ hoạt động : - 30 - 75 độ C lOMoAR cPSD| 61554479
Hình 1.10: LCD 1602 xanh lá và các chân
Chức năng của từng chân LCD 1602: −
Chân số 1 - VSS : chân nối đất cho LCD được nối với GND của mạch điều khiển.
− Chân số 2 - VDD : chân cấp nguồn cho LCD, được nối với VCC=5V của mạch điều khiển.
− Chân số 3 - VE : điều chỉnh độ tương phản của LCD.
− Chân số 4 - RS : chân chọn thanh ghi, được nối với logic "0" hoặc logic "1":
+ Logic “0”: Bus DB0 - DB7 sẽ nối với thanh ghi lệnh IR của LCD (ở chế độ
“ghi” - write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” - read).
+ Logic “1”: Bus DB0 - DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD.
− Chân số 5 - R/W : chân chọn chế độ đọc/ghi (Read/Write), được nối với logic “0” để
ghi hoặc nối với logic “1” đọc.
− Chân số 6 - E : chân cho phép (Enable). Sau khi các tín hiệu được đặt lên bus
DB0DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân này như sau:
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào thanh ghi bên trong khi
phát hiện một xung (high-to-low transition) của tín hiệu chân E. lOMoAR cPSD| 61554479
+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh lên
(low-to-high transition) ở chân E và được LCD giữ ở bus đến khi nào chân E xuống mức thấp.
− Chân số 7 đến 14 - D0 đến D7: 8 đường của bus dữ liệu dùng để trao đổi thông tin với
MPU. Có 2 chế độ sử dụng 8 đường bus này là: Chế độ 8 bit (dữ liệu được truyền
trên cả 8 đường, với bit MSB là bit DB7) và Chế độ 4 bit (dữ liệu được truyền trên
4 đường từ DB4 tới DB7, bit MSB là DB7)
− Chân số 15 - A : nguồn dương cho đèn nền
− Chân số 16 - K : nguồn âm cho đèn nền 1.6 Module I2C LM1602
Module chuyển đổi I2C cho LCD sẽ giải quyết vấn đề chiếm nhiều chân vi điều
khiển của LCD, thay vì sử dụng tối thiểu 6 chân của vi điều khiển để kết nối với LCD
(RS, EN, D7, D6, D5 và D4) thì với module chuyển đổi chỉ cần sử dụng 2 chân (SCL,
SDA) để kết nối. Module chuyển đổi I2C hỗ trợ các loại LCD sử dụng driver HD44780,
kết nối với vi điều khiển thông qua giao tiếp I2C, tương thích với hầu hết các vi điều khiển hiện nay.
Hình 1.11: Module I2C LM1602 Thông số kĩ thuật:
− Điện áp hoạt động: 2.5-6V DC
− Hỗ trợ màn hình: LCD1602,1604,2004 (driver HD44780) − Giao tiếp: I2C
− Địa chỉ mặc định: 0X27 (có thể điều chỉnh bằng ngắn mạch chân A0/A1/A2)
− Kích thước: 41.5mm(L)x19mm(W)x15.3mm(H) lOMoAR cPSD| 61554479 − Trọng lượng: 5g
− Tích hợp Jump chốt để cung cấp đèn cho LCD hoặc ngắt
− Tích hợp biến trở xoay điều chỉnh độ tương phản cho LCD