Tải bản đầy đủ (.pdf) (31 trang)

BÁO CÁO BÀI TẬP LỚN HỌC PHẦN: ĐỒ ÁN THIẾT KẾ HỆ THỐNG NHÚNG Đề tài: Bể thủy sinh thông minh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.71 MB, 31 trang )

BỘ THÔNG TIN VÀ TRUYỀN THÔNG
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THƠNG
............

BÁO CÁO BÀI TẬP LỚN

HỌC PHẦN: ĐỒ ÁN THIẾT KẾ HỆ THỐNG NHÚNG
Đề tài: Bể thủy sinh thông minh

Giảng viên hướng dẫn

: Nguyễn Ngọc Minh

Sinh viên thực hiện

: Nguyễn Quang Khánh

Nhóm bài tập

MSV: B18DCDT112

Lê Đăng Khoa

MSV: B18DCDT116

Lê Văn Nam

MSV: B18DCDT164

: 05


HÀ NỘI – 2022


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

BỘ THƠNG TIN VÀ TRUYỀN THƠNG
HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THÔNG
............

BÁO CÁO BÀI TẬP LỚN

HỌC PHẦN: ĐỒ ÁN THIẾT KẾ HỆ THỐNG NHÚNG
Đề tài: Bể thủy sinh thông minh

Giảng viên hướng dẫn

: Nguyễn Ngọc Minh

Sinh viên thực hiện

: Nguyễn Quang Khánh

Nhóm bài tập

MSV: B18DCDT112

Lê Đăng Khoa


MSV: B18DCDT116

Lê Văn Nam

MSV: B18DCDT164

: 05

HÀ NỘI – 2022
Nhóm 5

2


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

LỜI NÓI ĐẦU
Trong các học kỳ trước, chúng em đã được học nhiều kiến thức về điện tử,
lập trình. Tới học kì này, việc thực hành các kiến thức đó được thực hiện qua
học phần “Đồ án hệ thống nhúng”. Trong bài tập lớn này chúng em xin được
tìm hiểu và trình bày nội dung:
“Bể thủy sinh thơng minh”
Trong q trình thực hiện vì kiến thức vẫn cịn hạn chế nên chúng em khơng
tránh khỏi sai sót. Do vậy chúng em kính mong nhận được sự đánh giá và đóng
góp ý kiến của cô để bài tập của chúng em được hồn thiện hơn.
Chúng em xin trân thành cảm ơn!

Nhóm 5


3


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

MỤC LỤC
PHẦN 1: TÌM HIỂU VÀ PHÂN TÍCH DỰ ÁN .................................................................... 5
1.

Đặt vấn đề ....................................................................................................................... 5
a. Giới thiệu đề tài ............................................................................................................... 5
b. Các chức năng của hệ thống ............................................................................................ 5

2.

Nền tảng kỹ thuật .......................................................................................................... 5

3.

Sơ đồ khối dự án ............................................................................................................ 6

PHẦN 2: ĐẶC ĐIỂM CỦA CÁC KHỐI TRONG HỆ THỐNG ......................................... 6
1.

Khối điều khiển .............................................................................................................. 6
a.


Vi điều khiển STM32F103C8T6 ................................................................................. 6

b.

ESP8266....................................................................................................................... 8

2.

RTC (Real Time Clock) ................................................................................................ 9

3.

Động cơ Servo .............................................................................................................. 12

4.

Khối hiển thị I2C ......................................................................................................... 13

5.

Cảm biến nhiệt độ DS18P20 ...................................................................................... 15

PHẦN 3: NGUYÊN LÝ HOẠT ĐỘNG GIỮA CÁC KHỐI TRONG DỰ ÁN ................. 17
1.

Thời gian thực (giao tiếp giữa 2 vi điều khiển STM32 và ESP8266) ...................... 17
a.

Mục tiêu ..................................................................................................................... 17


b.

Giao tiếp giữa STM32 và ESP8266 ........................................................................... 18

c.

Thời gian thực của hệ thống ...................................................................................... 18

2.

Điều khiển động cơ servo ............................................................................................ 20
a.

Băm xung (PWM) sử dụng STM32f103c8t6 .............................................................. 20

b.

Viết thư viện điều khiển góc quay của servo.............................................................. 20

3.

Điều khiển đèn, sưởi, quạt .......................................................................................... 21
a.

Cách điều khiển chung ............................................................................................... 21

b.

Điều khiển qua vi xử lí ............................................................................................... 22


4.

5.

Đo nhiệt độ sử dụng cảm biến DS18B20.................................................................... 24
a.

Kiểu kết nối với vi xử lý ............................................................................................. 24

b.

Các lệnh cơ bản: ........................................................................................................ 24
Hệ điều hành µc-RTOS ............................................................................................... 26

a. Giới thiệu chung ........................................................................................................... 26
b. Sử dụng µc-RTOS trong dự án...................................................................................... 27
PHẦN 4: HOÀN THIỆN HỆ THỐNG ................................................................................. 28
1. Thử nghiệm hệ thống trên bo test ..................................................................................... 28
2. Vẽ PCB cho mạch ............................................................. Error! Bookmark not defined.

Nhóm 5

4


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

PHẦN 1: TÌM HIỂU VÀ PHÂN TÍCH DỰ ÁN

1. Đặt vấn đề
a. Giới thiệu đề tài
Hiện nay, phong trào chơi bể cá cảnh, bể thủy sinh ngày càng phổ biến.
Chúng vừa là đồ vật trang trí nhà cửa, vừa mang lại phong thủy tốt lại vừa
giúp người chơi thư giãn sau những giờ làm việc căng thẳng. Tuy nhiên
việc chăm sóc bể thủy sinh chưa bao giờ là dễ dàng bởi các lí do sau:
 Bể thủy sinh cần một hệ thống chăm sóc đặc biệt và chính xác. Thực
vật và động vật trong hệ sinh thái khép kín cần đầy đủ ánh sáng trong
thời gian hợp lý trong ngày. Tuy nhiên nếu bật đèn quá nhiều trong
ngày sẽ dẫn tới tình trạng xuất hiện rêu hại, tảo nâu trong bể, gây mất
mỹ quan.
 Động, thực vật cần nhiệt độ thích hợp để phát triển. Nhiệt độ quá cao
hay quá thấp cũng ảnh hưởng tới sự phát triển của hệ sinh thái trong
bể.
 Động vật trong bể thủy sinh cần ăn một lượng thức ăn hợp lý và
khoảng thời gian hợp lý trong ngày.
Do đó, chúng em lên ý tưởng xây dựng một hệ thống tích hợp các chức
năng để giải quyết các vấn đề trên.
b. Các chức năng của hệ thống
Hệ thống điều khiển bể cá thơng minh được nhóm em xây dựng gồm có các
chức năng sau:
 Đo nhiệt độ của nước, hiển thị nhiệt độ lên LCD.
 Khi nhiệt độ quá thấp, hệ thống sẽ bật sưởi để bảo vệ động vật trong
bể;
 Khi nhiệt độ quá cao, hệ thống bật quạt để làm mát cho bể;
 Sử dụng RTC để tạo đồng hồ, hiển thị thời gian lên LCD;
 Hẹn giờ bật tắt đèn theo thời gian cố định;
 Lấy thời gian trên internet để cập nhật tự động cho hệ thống;
 Tự động cho thả cám cho cá ăn theo thời gian đặt trước.
2. Nền tảng kỹ thuật

- Dựa trên nguyên lý hoạt động của một hệ thống tự động trong bể thủy sinh
ta cần giải quyết các vấn đề sau:
 Hiển thị thời gian thực và sử dụng thời gian thực đó để điều khiển
các thiết bị (sử dụng RTC của STM32 và lấy thời gian trực tiếp trên
Internet qua ESP8266)
Nhóm 5

5


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

 Sử dụng hệ điều hành thời gian thực để các tác vụ được hoạt động
độc lập.
 Xác định thời gian bật tắt đèn cụ thể trong ngày để thực vật và động
vật phát triển và màu sắc đẹp nhất (dựa vào thời gian thực)
 Cho động vật trong bể ăn một lượng cụ thể và vào thời gian cụ thể
(dựa vào thời gian thực và động cơ servo)
 Luôn giữ nhiệt độ bể trong khoảng hợp lý tránh bị lạnh (dựa trên cảm
biến nhiệt độ)
- Khó khăn nhất của dự án là việc giao tiếp giữa 2 vi điều khiển STM32 và
ESP8266. Khi giao tiếp giữa 2 vi điểu khiển với nhau thì ta có thể khắc
phục điểm yếu của 2 dòng vi điều khiển trên.
3. Sơ đồ khối dự án
KHỐI HIỂN THỊ

CẢM BIẾN NHIỆT


DS18B20
ESP8266

VI XỬ LÝ
ARM CORTEX

M3

LCD 16x2
Điều khiển đèn
Động cơ servo

Điều khiển quạt

Điều khiển sưởi

Hình 1: Sơ đồ khối hệ thống

PHẦN 2: ĐẶC ĐIỂM CỦA CÁC KHỐI TRONG HỆ THỐNG
1. Khối điều khiển
-

-

Nhóm 5

a. Vi điều khiển STM32F103C8T6
STM32F103C8T6 là vi điều khiển 32bit, thuộc họ F1 của dòng chip
STM32 hãng ST.
Lõi ARM COTEX M3.

Tốc độ tối đa 72Mhz.
Bộ nhớ :
 64 kbytes bộ nhớ Flash
 20 kbytes SRAM
Clock, reset và quản lý nguồn
 Điện áp hoạt động từ 2.0 → 3.6V.
 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.
6


Đồ án thiết kế hệ thống nhúng
GVHD: Nguyễn Ngọc Minh
- Chế độ đ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 ngoài để dùng bộ RTC và sử dụng
dữ liệu được lưu trữ 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.6 V
 Có chế độ lấy mẫu 1 kênh hoặc nhiều kênh.
- DMA:
 7 kênh DMA
 Có hỗ trợ DMA cho ADC, UART, I2C, SPI.
- 7 bộ Timer:
 3 Timer 16 bit hỗ trợ các mode Input Capture/ Output Compare/
PWM.
 1 Timer 16 bit hỗ trợ để điều khiển động cơ với các mode bảo vệ
ngắt Input, dead-time.
 2 Watchdog Timer để bảo vệ và kiểm tra lỗi.
 1 Systick Timer 24 bit đếm xuống cho hàm Delay,….

- Có hỗ trợ 9 kênh giao tiếp:
 2 bộ I2C.
 3 bộ USART
 2 SPI
 1 CAN
 USB 2.0 full-speed interface
- Kiểm tra lỗi CRC và 96-bit ID.

Hình 2: Chip STM32F103C8Tx
- Các thơng số kĩ thuật:

Nhóm 5

7


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

 Đ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ạch 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.
b. ESP8266
- ESP8266 là một mạch vi điều khiển có thể giúp chúng ta điều khiển các

thiết bị điện tử.Thêm vào đó nó được tích hợp wi-fi 2.4GHz có thể dùng
cho lập trình.

Hình 3: Kit ESP8266
Thơng số kỹ thuật

Hình 4: Sơ đồ chân kit ESP8266
- WiFi: 2.4 GHz hỗ trợ chuẩn 802.11 b/g/n
- Điện áp hoạt động: 3.3V
- Điện áp vào: 5V thơng qua cổng USB

Nhóm 5

8


Đồ án thiết kế hệ thống nhúng
GVHD: Nguyễn Ngọc Minh
- Số chân I/O: 11 (tất cả các chân I/O đều có Interrupt/PWM/I2C/One-wire,
trừ chân D0)
- Số chân Analog Input: 1 (điện áp vào tối đa 3.3V)
- Bộ nhớ Flash: 4MB
- Giao tiếp: Cable Micro USB ( tương đương cáp sạc điện thoại )
- Hỗ trợ bảo mật: WPA/WPA2
- Tích hợp giao thức TCP/IP
- Lập trình trên các ngơn ngữ: C/C++, Micropython,…
2. RTC (Real Time Clock)
- RTC hay Real Time Clock là ngoại vi sử dụng như một bộ đồng hồ – lịch
thời gian thực. Thuật ngữ thời gian thực là chỉ thời gian trong cuộc sống
của con người hằng ngày, chứ khơng phải thời gian trong tính tốn như các

Timer khác.
- Ưu nhược điểm của RTC on chip so với các IC RTC khác như DS3231,
DS1307
- Ưu điểm:
 Tiết kiệm chi phí linh kiện, góp phần giảm giá thành sản phẩm
 Có thể sử dụng thanh ghi Backup 16bit như 1 Eprom điều mà STM32
thiếu
- Nhược điểm:
 Sai số từ bộ dao động lớn (1%), khi chạy lâu dài sẽ dẫn tới sai thời
gian
- Các thơng số chính của STM32 RTC
 Có thể cấu hình Clock đầu vào theo 3 nguồn đó là:
o HSE : sử dụng thạch anh ngồi tốc độ cao 62.5 Khz, từ 8MHZ
sẽ được chia 128 lần để ra tần số 62.5Khz
o LSI RC: sử dụng bộ giao động RC nội tốc độ 40Khz.
o LSE : sử dụng thạc anh ngoài tốc độ thấp 32.768khz.
 Bộ chia clock lên đến 20 bit, giúp bộ RTC hoạt động chính xác.
 Độ phân giải của timer RTC lên đến 32 bit – tức là 2^32 giây mới
tràn và cần reset lại.
 3 nguồn clock source có thể được sử dụng.
 2 loại Reset RTC riêng biệt.
 Có các ngắt hỗ trợ là : ngắt Alarm, ngắt mỗi giây, ngắt tràn bộ đếm.

Nhóm 5

9


Đồ án thiết kế hệ thống nhúng


GVHD: Nguyễn Ngọc Minh

Hình 5: Giản đồ khổi RTC
- Hãy cùng phân tích giản đồ này để hiểu quá trình hoạt động của RTC trước
khi chúng ta đi qua một số thanh ghi quan trọng trong RTC.
- Bộ RTC ở đây sẽ gồm 2 phần chính:
 Đầu tiên, APB1 Interface được sử dụng để giao tiếp với APB1 bus. APB1
Interface giúp cho Core có thể đọc ghi dữ liệu đến các thanh ghi trong bộ RTC
thơng qua APB1 bus. Ngồi ra, APB1 interface sẽ được APB1 bus clock trong
quá trình giao tiếp dữ liệu.
- Tiếp theo, các khối RTC được chia làm 2 phần chính:
 Khối đầu tiên, RTC prescaler sau khi chúng ta cấp clock cho RTC thì ở đây
nó sẽ qua bộ RTC_DIV để chia tần, và chúng ta có thể lập trình tạo ra tần số lên
đến 1Hz (1s).
 Sau đó xung TR_CLK sẽ được cấp vào khối 32 bit programmable counter,
giá trị trong RTC_CNT theo với tần số TR_CLK cấp vào, RTC_CNT sẽ được so
sánh với giá trị định sẵn trong RTC_ALR để tạo ra ngắt đánh thức hệ thống dậy
ở chế động Standby mode(chế độ tiết kiệm năng lượng)
- Một số thanh ghi quan trọng :
 RTC_CR – RTC control register.

Nhóm 5

10


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh


- Thanh ghi này bao gồm 2 thanh ghi high và low với các bit như sau:
 OWIE: cờ báo ngắt tràn khi bộ đếm vượt qua giá trị 2^32.
 ALRIE: cờ báo ngắt Alarm – giống như báo thời gian báo thức trong đồng
hồ hẹn giờ.
 SECIE : cờ báo ngắt 1s xảy ra.
 RTOFF: cờ báo bộ RTC có đang chạy hay khơng.
 CNF: Cờ báo có đang trong quá trình cấu hình hay đã cấu hình xong.
 RSF: cờ báo các thanh ghi đã được đồng bộ, thống nhất với nhau hay chưa.
 OWF : cờ báo tràn khi bộ đếm vượt qua giá trị 2^32.
 ALRF: cờ báo Alarm – giống như báo thời gian báo thức trong đồng hồ hẹn
giờ.
 SECF: cờ báo mỗi 1s xảy ra.
 RTC_DIV – RTC prescaler divider register.

 RTC_CNT – RTC counter register

Nhóm 5

11


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

Thanh ghi này 32bit chứa giá trị bộ đếm của couter. Muốn biết thời gian cần
đọc giá trị từ thanh ghi này về.
3. Động cơ Servo
Thông số kỹ thuật:
 Tên loại động cơ sử dụng: SG90;

 Điện áp hoạt động: 4,8V
 Lực kéo: 1.8 kg – cm
 Phạm vi góc quay: 180o

Hình 6: Cấu tạo động cơ servo

Nhóm 5

12


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

Cấu tạo: bao gồm 4 thành phần chính





Động cơ DC
Hộp số
Biến trở
Mạch điều khiển

Giải thích cấu tạo: Chiết áp được gắn với bánh răng đầu ra để lấy tín hiệu phản
hồi. Mạch điều khiển nhận tín hiệu này để điều chỉnh góc quay của động cơ sao
cho đúng với tín hiệu điều khiển từ vi xử lí.
Nguyên lí hoạt động: Động cơ servo được điều khiển bẳng kỹ thuật băm xung

(PWM). Ta sử dụng một xung có tần số 50Hz để điều khiển. Tùy theo chiều rộng
của xung Hight mà góc quay của servo sẽ thay đổi theo. Hình vẽ dưới đây mơ tả
rõ hơn sự phụ thuộc của góc quay vào xung PWM:

Hình 7: Cách điều khiển động cơ Servo bằng PWM
4. Khối hiển thị I2C
LCD 16x2 và giao tiếp với vi điều khiển :
- VEE của LCD được nối với biến trở và nguồn 5V để diều chỉnh độ sáng của LCD
- Hiển thị time 1 ngày của RTC lên LCD
+ 3 chân điều khiển (RS,RW,E )
+ Đường dữ liệu D0 đến D7
Nhóm 5

13


Đồ án thiết kế hệ thống nhúng
GVHD: Nguyễn Ngọc Minh
+ Chân điều khiển độ sáng tối của LCD chân VEE ta sử dụng 1 biến trở để điều
chỉnh thích hợp

A

D
7

K
1
5


1
6

D
6
1
4

D
5
1
3

D
4

D
3

VAR

1
2

1
1

D
2
1

0

D
0

D
1
9

8

7

E

R
W
6

R7
R ESI STOR

5

R
S

V
E
E

4

3

2

5v

1

V
S
S

V
D
D

U3
LC D

R8
5v

Hình 8: Sơ đồ chân LCD 16x2
LCD có q nhiều nhiều chân gây khó khăn trong q trình đấu nối và chiếm
dụng nhiều chân trên vi điều khiển.
Module I2C LCD ra đời và giải quyết vấn để này
Thay vì phải mất 6 chân vi điều khiển để kết nối với LCD 16×2 (RS, EN,
D7, D6, D5 và D4) thì module IC2 bạn chỉ cần tốn 2 chân (SCL, SDA) để kết nối.

Module I2C hỗ trợ các loại LCD sử dụng driver HD44780(LCD 16×2, LCD
20×4, …) và tương thích với hầu hết các vi điều khiển hiện nay.
Ưu điểm


Tiết kiệm chân cho vi điều khiển.



Dễ dàng kết nối với LCD.

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).




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.

Các lỗi thường gặp khi sử dụng I2C LCD
Hiển thị một dãy ơ vng.
 Màn hình chỉ in ra một ký tự đầu.
 Màn hình nhấp nháy.
Các lỗi này chủ yếu là do sai địa chỉ bus, để fix lỗi chỉ cần thay địa chỉ mặc
định là “0x27” thành “0x3F.


Nhóm 5

14


Đồ án thiết kế hệ thống nhúng
GVHD: Nguyễn Ngọc Minh
Trong trường hợp vẫn không được các bạn fix lỗi bằng cách nạp code tìm địa
chỉ bus của I2C.
Sau khi tìm xong các bạn thay địa chỉ vừa tìm được vào vị trí “0x27” là xong.
5. Cảm biến nhiệt độ DS18B20
DS18B20 là IC cảm biến nhiệt độ bán dẫn, gồm 3 chân, đóng vỏ nhỏ gọn. Giao
tiếp thơng qua truyền thơng 1 dây. Độ phân giải nhiệt độ lên tới 12 bít, dịng tiêu
thụ rất thấp, giải điện áp sử dụng rộng 3 - 5.5V, kết nối được nhiều cảm biến
chung trên 1 đường truyền. Ứng dụng trong đo đạc nhiệt độ chính xác và thu thập

nhiệt độ nhiều điểm .

Hình 9: Cảm biến DS18B20
Cảm biến nhiệt độ DS18B20 có những tính năng như sau:
- Theo chuẩn giao tiếp 1-wire, Kết nối nhiều cảm biến DS18B20 trên 1
đường truyền.
- Dãi nhiệt độ đo lường: -55°C to +125°C (-67°F to +257°F)
- Độ chính xác: ±0.5°C trong khoảng đo -10°C to +85°C.
- Độ phân giải 9 đến 12 bit có thể chương trình
- Mỗi thiết bị có mã định danh duy nhất 64 bit.
- Có thể dùng nguồn ký sinh (khơng cần cung cấp nguồn cho chip, chip lấy
nguồn từ tín hiệu)
Sơ đồ chân

Nhóm 5

15


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

Hình 10: Một số cách đóng gói cảm biến DS18B20

Mã ROM 64 bit:
Mỗi DS18B20 đều có mã định danh với độ lớn 64 bit duy nhất được lưu trong
ROM.
- 8 bit thấp nhất của ROM chứa đựng mã quy ước của họ dòng đo nhiệt độ 1
dây DS18B20 với mã là :28h.

- 48 bit tiếp theo là số serial duy nhất của thiết bị.
- 8 bit cuối cùng mà mã kiểm tra CRC tính tốn từ 56 bit trước.

Bộ nhớ
Bộ nhớ của DS18B20 bao gồm bộ nhớ nháp (SRAM scratchpad), thanh ghi
lưu trữ kích hoạt cảnh báo cao và thấp (TH và TL) và thanh ghi cấu hình, cả hai
thanh ghi này đều trang bị bộ nhớ EEPROM. Lưu ý rằng nếu nếu chức năng cảnh
báo khơng được sử dụng thì thanh ghi TH và TL có thể được sử dụng như bộ nhớ
đa mục đích. Byte 0 và Byte 1 của bộ nhớ nháp chứa đựng LSB và MSB của thanh
ghi nhiệt độ. Những Byte này chỉ có thể đọc. Byte 2 và 3 truy cập thanh ghi TH
và TL. Byte 4 chứng đựng dữ liệu của thanh ghi cấu hình . Byte 5, 6 và 7 để dành
riêng cho sử dụng bởi thiết bị, ta không thể ghi đến các byte này Byte 8 chứa đựng
mã CRC của byte 0 đến byte 7 của bộ nhớ nháp.Dữ liệu trong các thanh ghi
EEPROM không mất đi khi ngắt nguồn cấp; khi có nguồn cấp lại dữ liệu trong
các thanh ghi này sẻ được nạp vào bộ nhớ nháp theo vị trí byte tương ứng. Dữ liệu
này có thể nạp lại bằng lệnh từ EEPROM bằng lệnh E2 [B8h]

Nhóm 5

16


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

Bộ nhớ SRAM scratchpad
- Thanh ghi cấu hình:Byte thứ 4 của bộ nhớ nháp chứa đựng thanh ghi cấu
hình, với tổ chức như hình bên dưới. Người dùng có thể thiết lập độ phân giải của
DS18B20 sử dụng bit R0 và R1. Khi cấp nguồn mặt định R0=1, R1=1 (độ phân

giải 12 bit). Bit thứ 7 và bit 0 đến bít 4trong thanh ghi cấu hình được để dành riêng
cho thiết bị và khơng thể ghi đè

Bảng cấu hình độ phân giải và thời gian chuyển đổi tương ứng
Độ phân giải
R1

R0

0
0
1
1

0
1
0
1

(Bit)
9
10
11
12

Thời gian chuyển đổi tối đa
93.75ms
187.5ms
375ms
750ms


(tCONV/8)
(tCONV/4)
(tCONV/2)
(tCONV)

PHẦN 3: NGUYÊN LÝ HOẠT ĐỘNG GIỮA CÁC KHỐI TRONG DỰ ÁN
1. Thời gian thực (giao tiếp giữa 2 vi điều khiển STM32 và ESP8266)
a. Mục tiêu
- Config được thời gian thực trong STM32
- Lấy thời gian thực lấy trực tiếp từ ESP8266 có kết nối Internet sau đó truyền
qua STM32 và nạp vào RTC
- Sử dụng nút nhấn khi nhấn sẽ thực hiện truyền thời gian từ ESP8266 và
STM32. Vì nếu sử dụng ESP8266 lấy thời gian truyền liên tục thi thoảng

Nhóm 5

17


Đồ án thiết kế hệ thống nhúng
GVHD: Nguyễn Ngọc Minh
sẽ xuất hiện lỗi nên ta dùng bộ RTC trong STM32 để hoạt động ổn định
nhất
b. Giao tiếp giữa STM32 và ESP8266
- Sử dụng UART để giao tiếp giữa 2 vi điều khiển
- Làm việc với ESP8266 theo các bước :
 Thực hiện kết nối mạng cho ESP8266.
 Viết chương trình lấy thời gian thực cho ESP8266
 Khai báo các chân UART để giao tiếp với STM32

- Làm việc với STM32 theo các bước :
 Khai báo các chân nhận tín hiệu từ ESP8266
 Viết chương trình thực hiện nhận tín hiệu từ ESP8266
c. Thời gian thực của hệ thống
- Config RTC từ STM32 dựa trên Reference manual
void RTC_Configuration(void){
// cau hinh RTC
RCC->APB1ENR |= (1<<28) | (1<<27);
PWR->CR |= (1<<8);
// bat clock 32,768khz
RCC->BDCR |=(1<<0);
// bat cho clock on dinh
while (!(RCC->BDCR & ( 1<<1))){
}
RCC->BDCR &= ~(3<<8);
RCC->BDCR |= (1<<8) ;
RCC->BDCR |=(1<<15);
// cau hinh RTC
while(!(RTC->CRL & (1<<5))){
}
RTC->CRL |= (1<<4);
RTC->PRLH = 0X0000;
RTC->PRLL = 0X7fff;
RTC->CRL &= ~(1<<4);
while(!(RTC->CRL & (1<<5))){
}
}
- Set thời gian cho bộ RTC

Nhóm 5


18


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

void Time_Current(void)
{
/* cho ghi xong data cho bo RTC */
RTC_WaitForLastTask();
/* Thay doi gia tri thoi gian hien tai */
RTC_SetCounter(HH*3600 + MM*60 + SS);
/* cho ghi xong data cho bo RTC */
RTC_WaitForLastTask();
}
- Viết chương trình chuyển thời gian từ chuỗi kí tự sang số nguyên và nạp
cho RTC
if (USART_Gets(USART1, buffer, sizeof(buffer)))
{
printf("%s",buffer);
h=0;m=0;t=0;i=0;
if(buffer[i+1]==':'){
h=buffer[i]-48;
i=i+2;
}
else
{h=(buffer[i]-48)*10+ buffer[i+1] -48;i=i+3;}
if(buffer[i+1]==':'){

m=buffer[i]-48;
i=i+2;
}
else
{m=(buffer[i]-48)*10+ buffer[i+1] -48;i=i+3;}
if(buffer[i+1]==':'){
t=buffer[i]-48;
i=i+2;
}
else
{t=(buffer[i]-48)*10+ buffer[i+1] -48;i=i+3;}
HH = h;
MM = m;
SS = t;
Time_Current();

Nhóm 5

19


Đồ án thiết kế hệ thống nhúng
GVHD: Nguyễn Ngọc Minh
2. Điều khiển động cơ servo
a. Băm xung (PWM) sử dụng STM32f103c8t6
- Phương pháp điều xung PWM (Pulse Width Modulation) là phương pháp
điều chỉnh điện áp ra tải, hay nói cách khác, là phương pháp điều chế dựa
trên sự thay đổi độ rộng của chuỗi xung vuông, dẫn đến sự thay đổi điện áp
ra.
- Các PWM khi biến đổi thì có cùng 1 tần số và khác nhau về độ rộng của

sườn dương hay sườn âm.
- Cycle trong PWM: Cycle là tỉ lệ độ dài xung cao so với toàn bộ độ dài của
một xung. Khi điều khiển động cơ servo, dựa vào cycle mà góc quay của
servo sẽ thay đổi theo

Hình 11: Cycle PWM
b. Viết thư viện điều khiển góc quay của servo
Trong đề tài này, chúng em sử dụng timer để thực hiện kỹ thuật băm
xung. Các bước thực hiện như sau:
 Cài đặt chân PWM:
//setup pwm pin
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef gpioInit;
gpioInit.GPIO_Mode = GPIO_Mode_AF_PP;
gpioInit.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 ;
gpioInit.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &gpioInit);

 Cài đặt timer. Ta sẽ tạo ra một xung có tần số 50 Hz. Ta tính timer
theo cơng thức sau: 𝑈𝐸𝑉 =
Nhóm 5

(

)∗(

)∗(

)


20


Đồ án thiết kế hệ thống nhúng
GVHD: Nguyễn Ngọc Minh
Trong đó:
o TIM_CLK : clock cung cấp cho timer
o PSC (prescaler): là thanh ghi 16bits làm bộ chia cho timer, có thể chia
từ 1 tới 65535
o ARR (auto-reload register): là giá trị đếm của timer (16bits hoặc
32bits).
o RCR (repetition counter register): giá trị đếm lặp lại 16bits
/*============ setup timer2 =====================*/
//bien timer
TIM_TimeBaseInitTypeDef timerInit;
//ENABLE clock timer2
RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM2, ENABLE);
//mode dem: len
timerInit.TIM_CounterMode = TIM_CounterMode_Up;
//gt nap lai (hs chia cua timer)
timerInit.TIM_Period = 400-1;
//F= 50 Hz
//gt chia tan
timerInit.TIM_Prescaler = 3600 - 1;
//ham khoi tao timer2
TIM_TimeBaseInit (TIM2,&timerInit);
//cho phep timer2 chay
TIM_Cmd(TIM2,ENABLE);

 Cài đặt chế độ PWM:

/*============== CH1 =======================*/
/*============ duty 20%======================*/
pwmInit.TIM_OCMode = TIM_OCMode_PWM;
pwmInit.TIM_OCPolarity = TIM_OCPolarity_High;
pwmInit.TIM_Pulse = 20;
pwmInit.TIM_OutputState = TIM_OutputState_Enable;
TIM_OC1Init(TIM2, &pwmInit);
3. Điều khiển đèn, sưởi, quạt
a. Cách điều khiển chung

Nhóm 5

21


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

Hình 12: Các thiết bị tiêu thụ điện 220V
Đây là các thiết bị tiêu thụ năng lượng thông thường. Chúng sử dụng
điện lưới 220VDC để hoạt động. Để điều khiển các thiết bị này, ta sử dụng
các mô dun rơ-le.
b. Điều khiển qua vi xử lí
Chúng em sử dụng dựa vào biến thời gian của RTC để điều khiển đèn.
Khi tới thời gian hẹn trước, chúng em sẽ xuất tín hiệu cao lên một chân
GPIO. Chân GPIO này được kết nối với rơ-le. Phía cịn lại của rơ le được
kết nối với đèn. Lúc này, rơ le được kích mở điện áp 220V làm đèn sáng.
Hàm thực hiện chức năng này khá đơn giản, ở đây chúng em thử nghiệm
khi đếm đến giây 15 của mỗi phút thì sẽ bật đèn, tới giây thứ 20 thì sẽ tắt

đèn :

Nhóm 5

22


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

void LIGH_CTR_task(void *pdata)
{
while(1)
{
if(SS == 15){
// biến ALARM được định nghĩa là biến điều khiển đèn
ALARM = 1;
delay_ms(50);
}
else if(SS == 20){
ALARM = 0;
delay_ms(50);
}
else
delay_ms(100);
}
}

Việc điều khiển sưởi và quạt cho bể thủy sinh cũng thực hiện tương tự

nhưng điểm khác là nếu như đèn điều khiển thơng qua thời gian hẹn trước
thì quạt và sưởi được điều khiển thông qua dữ liệu thu được từ cảm biến
DS18B20. Nhiệt độ lí tưởng của chiếc bể thủy sinh nằm trong khoảng từ
25oC đến 29oC, do đó khi nhiệt độ dưới 25oC, hệ thống sẽ bật sưởi. Còn
khi nhiệt độ của bể cao hơn 29oC, hệ thống sẽ bật quạt để làm mát bể.
Hàm thực hiện công việc này tương tự như điều khiển đèn:
void TEMPERATURE_CTR_task(void *pdata)
{
while(1){
if(nhietdo > 29)
{
FAN_CTR = 1;
delay_ms(500);
}
else if (nhietdo < 27)
{
HEATER_CTR = 1;
delay_ms(500);
}
else
{
HEATER_CTR = 0;
FAN_CTR = 0 ;
Nhóm 5

23


Đồ án thiết kế hệ thống nhúng


GVHD: Nguyễn Ngọc Minh

delay_ms(50);
}
}
}

4. Đo nhiệt độ sử dụng cảm biến DS18B20
a. Kiểu kết nối với vi xử lý

Hình 13: Cách kết nối DS18B20 với vi xử lý
Ln ln phải có một điện trở treo 4.7kOhm lên nguồn Vcc với chân
DQ của DS18b20.
Khi hệ thống đươc cấp nguồn, thiết bị đóng vai trị master phải xác định
mã ROM của tất cả các thiết bị slave được đấu trên cùng bus, việc làm này cho
phép thiết bị master xác định số lượng thiết bị salve và kiểu thiết bị. DS18B20
sẽ có tác dụng đo nhiệt độ của nước và sẽ gửi về cho vi xử lý để xử lý dữ liệu
nhận được và truyền đến hiển lên LCD thông qua giao tiếp I2C. Nếu nhiệt độ
của nước nhỏ hơn 150 thì sẽ bật thiết bị sưởi để có thể sưởi ấm cho cá, cịn khi
nhiệt độ lớn hơn 280C thì sẽ bật quạt để giảm nhiệt độ của bể.
b. Các lệnh cơ bản:
READ ROM (33h)
Lệnh này chỉ dùng khi trên bus có 1 cảm biến DS1820, nếu không sẽ
xảy ra xung đột trên bus do tất cả các thiết bị tớ cùng đáp ứng. Nó cho phép
đọc 64 bit mã ROM (8 bit mã định tên linh kiện (10h), 48 bit số xuất xưởng, 8
bit kiểm tra CRC) và khơng sử dụng quy trình Search Rom
MATCH ROM (55h)
Lệnh này được gửi đi cùng với 64 bit ROM tiếp theo, cho phép bộ điều
khiển bus chọn ra chỉ một cảm biến DS1820 cụ thể khi trên bus có nhiều cảm
biến DS1820 cùng nối vào. Chỉ có DS1820 nào có 64 bit trên ROM trung khớp

với chuỗi 64 bit vừa được gửi tới mới đáp ứng lại các lệnh về bộ nhớ tiếp theo.
Còn các cảm biến DS1820 có 64 bit ROM khơng trùng khớp sẽ tiếp tục chờ
một xung reset. Lệnh này được sử dụng cả trong trường hợp có một cảm biến
một dây, cả trong trường hợp có nhiều cảm biến một dây.
SKIP ROM (CCh)

Nhóm 5

24


Đồ án thiết kế hệ thống nhúng
GVHD: Nguyễn Ngọc Minh
Thiết bị master có thể sử dungj lệnh này để gửi đến tất cả các thiết bị
slave trên bus một các đồng thời mà không cần gửi mã ROM định danh của
thiết bị. Ví dụ như thiết bị master ra lệnh cho tất cả các DS18B20 trên Bus
chuyển đổi nhiệt độ một cách đồng thời bởi gửi lệnh SKIP ROM và
lệnh CONVERT T (44h)
Lưu ý rằng lệnh READ SCRATCHPAD có thể theo sau lệnh SKIP
ROM chỉ khi trên bus chỉ có một thiết bị slave. Trong trường hợp này, ta tiết
kiệm được thời gian bởi nó cho phép đọc từ thiết bị slave mà không cần gửi
mã ROM của thiết bị. Trong trường hợp trên bus có nhiều thiết bị tớ nếu ta sử
dụng 2 lệnh này sẻ xãy ra xung đột dữ liệu.
ALARM SEARCH (ECh)
Tiến trình của lệnh này giống hệt như lệnh Search ROM, nhưng cảm
biến DS1820 chỉ đáp ứng lệnh này khi xuất hiện điều kiện cảnh báo trong
phép đo nhiệt độ cuối cùng. Điều kiện cảnh báo ở đây được định nghĩa là giá
trị nhiệt độ đo được lớn hơn giá trị TH và nhỏ hơn giá trị TL là hai giá trị nhiệt
độ cao nhất và nhiệt độ thấp nhất đã được đặt trên thanh ghi trong bộ nhớ của
cảm biến.

Sau khi thiết bị chủ (thường là một vi điều khiển) sử dụng các lệnh ROM
để định địa chỉ cho các cảm biến một dây đang được đấu vào bus, thiết bị chủ
sẽ đưa ra các lệnh chức năng DS1820. Bằng các lệnh chức năng thiết bị chủ
có thể đọc ra và ghi vào bộ nhớ nháp (scratchpath) của cảm biến DS1820.
khởi tạo quá trình chuyển đổi giá trị nhiệt độ đo được và xác định chế độ cung
cấp điện áp nguồn. Các lệnh chức năng có thể được mơ tả ngắn gọn như sau:
WRITE SCRATCHPAD (4Eh)
Lệnh này cho phép ghi 2 byte dữ liệu vào bộ nhớ nháp của DS1820.
Byte đầu tiên được ghi vào thanh ghi TH (byte 2 của bộ nhớ nháp) còn byte
thứ hai được ghi vào thanh ghi TL (byte 3 của bộ nhớ nháp). Dữ liệu truyền
theo trình tự đầu tiên là bit có ý nghĩa nhất và kế tiếp là những bit có ý nghĩa
giảm dần. Cả hai byte này phải được ghi trước khi thiết bị chủ xuất ra một
xung reset hoặc khi có dữ liệu khác xuất hiện.
READ SCRATCHPAD (BEh)
Lệnh này cho phép thiết bị chủ đọc nội dung bộ nhớ nháp. Quá trình
đọc bắt đầu từ bit có ý nghĩa nhất của byte 0 và tiếp tục cho đến byte thứ 9
(byte 8 – CRC). Thiết bị chủ có thể xuất ra một xung reset để làm dừng quá
trình đọc bất kỳ lúc nào nếu như chỉ có một phần của dữ liệu trên bộ nhớ nháp
cần được đọc.
COPYSCRATCHPAD (48h)
Lệnh này copy nội dung của hai thanh ghi TH và TL (byte 2 và byte 3),
và thanh ghi cấu hình từ bộ nhớ nháp đến bộ nhớ EEPROM. Nếu cảm biến
được sử dụng trong chế độ sử dụng nguồn ký sinh, trong 10us (tối đa) sau khi
truyền lệnh này, thiết bị master phải cho phép một "strong pullup" lên bus.
CONVERT T (44h)
Nhóm 5

25



×