Arduino, ESP32

Các chế độ ngủ của ESP32 (Sleep Modes)

ESP32-Cac-che-do-ngu

Chế độ ngủ của ESP32 là gì?

Chế độ ngủ ESP32 là trạng thái tiết kiệm năng lượng mà ESP32 có thể chuyển sang khi không hoạt động. Khi đó, trạng thái ESP32 vẫn được duy trì trong RAM, nguồn sẽ bị cắt đối với một số ngoại vi không cần thiết, trong khi RAM vẫn nhận đủ năng lượng để cho phép nó giữ lại dữ liệu của mình.

Các khối trong ESP32

Để hiểu được các chế độ ngủ của ESP32, chúng ta cần biết các khối bên trong ESP32. Hình sau thể hiện các khối của chip ESP32.

ESP32-Sơ- đồ-khối

Trái tim của chip ESP32 là bộ vi xử lý Dual-Core 32 bit cùng với ROM 448 KB, SRAM 520 KB và bộ nhớ Flash 4 MB.

Nó cũng chứa module WiFi, Bluetooth, Cryptographic Accelerator (bộ xử lý được thiết kế đặc biệt để thực hiện các hoạt động mã hóa), RTC và rất nhiều ngoại vi khác.

Các chế độ hoạt động của ESP32

Đối với chức năng quản lý năng lượng, ESP32 cung cấp 5 chế độ hoạt động có thể cấu hình. Tùy yêu cầu, chip có thể chuyển đổi giữa các chế độ năng lượng khác nhau.

  • Active Mode
  • Modem Sleep Mode
  • Light Sleep Mode
  • Deep Sleep Mode
  • Hibernation Mode

Mỗi chế độ có các tính năng riêng biệt và khả năng tiết kiệm năng lượng riêng. Chúng ta hãy tìm hiểu lần lượt:

ESP32 Active Mode

Chế độ hoạt động bình thường là Active Mode. Trong chế độ này, tất cả các chức năng của chip đều được bật.

Active Mode bật mọi chức năng (đặc biệt là module WiFi, Bluetooth và nhân xử lý ), nên chip yêu cầu dòng điện hơn 240mA để hoạt động. Ngoài ra, nếu bạn sử dụng cả hai chức năng WiFi và Bluetooth cùng lúc, các xung công suất cao có thể xuất hiện (lớn nhất là 790mA).

ESP32-Sơ-đồ-khối-chế-độ-bình-thường

Theo  ESP32 datasheet, mức tiêu thụ năng lượng cho chế độ Active Mode sử dụng RF như sau.

Power consumption during Active mode
Mode Power Consumption
Wi-Fi Tx packet 13dBm~21dBm 160~260mA
Wi-Fi/BT Tx packet 0dBm 120mA
Wi-Fi/BT Rx and listening 80~90mA

Đây là chế độ tiêu tốn năng lượng nhiều nhất. Vì vậy, muốn đảm bảo năng lượng, chúng ta phải tận dụng một trong các chế độ ngủ của ESP32 khi không sử dụng.

ESP32 Modem Sleep

Trong Modem Sleep, mọi thứ đều hoạt động, chỉ có WiFi, Bluetooth và Radio bị tắt. CPU vẫn hoạt động và RTC có thể được sử dụng.

Tại chế độ này, chip tiêu thụ khoảng 3mA ở tốc độ chậm và 20mA ở tốc độ cao.

ESP32-Sơ-đồ-khối-chế-modem-sleep

Để duy trì kết nối WiFi / Bluetooth, CPU, Wi-Fi, Bluetooth và Radio được đánh thức theo các khoảng thời gian được xác định trước đó.

Trong kiểu ngủ này, ESP32 sẽ chuyển đổi giữa chế độ Active Mode và Modem Sleep.

ESP32 chỉ có thể chuyển sang Modem Sleep khi kết nối với Access Point ở chế độ Station (trạm). ESP32 vẫn kết nối với bộ định tuyến thông qua cơ chế DTIM Beacon.

Để tiết kiệm năng lượng, ESP32 vô hiệu hóa module Wi-Fi giữa hai khoảng thời gian DTIM Beacon và tự động thức dậy trước khi đến Beacon tiếp theo.

Thời gian ngủ được quyết định bởi khoảng thời gian DTIM Beacon của Access Point thường là 100ms đến 1000ms.

Cơ chế DTIM beacon?

DTIM là viết tắt của Delivery Traffic Indication Message.

espitek-dtim-beacon

Trong cơ chế này, Access Point (AP) truyền các gói tin Beacon theo định kỳ. Mỗi gói chứa tất cả các thông tin về mạng, nó được sử dụng để thông báo sự hiện diện của một mạng không dây và đồng bộ hóa tất cả các thành viên được kết nối.

ESP32 Light Sleep

Chế độ làm việc của Light Sleep tương tự như Modem Sleep. Sự khác biệt là RAM, CPU và ngoại vi đều bị tắt clock (clock-gated).

Clock Gating là gì?

Clock gating là một kỹ thuật để giảm tiêu thụ năng lượng. Nó vô hiệu hóa các phần của mạch điện bằng cách tắt các xung clock, để các flip-flop trong chúng không phải chuyển trạng thái. Vì khi có chuyển đổi trạng thái thì năng lượng bị tiêu thụ, ngược lại, mức tiêu thụ năng lượng bằng 0.

Trong Light Sleep, CPU bị tạm dừng bằng cách tắt nguồn xung clock, nhưng RTC và ULP vẫn được duy trì hoạt động. Điều này dẫn đến mức tiêu thụ điện năng ít hơn so với Modem Sleep, chỉ khoảng 0,8mA.

ESP32-Sơ-đồ-khối-chế-độ-light-sleep

Khi chuyển sang Light Sleep, ESP32 duy trì trạng thái bên trong của nó và tiếp tục hoạt động khi thoát khỏi chế độ ngủ. Toàn bộ RAM vẫn được giữ nguyên.

esp_light_sleep_start() hàm này được sử dụng để chuyển sang Light Sleep sau khi nguồn đánh thức được cấu hình.

ESP32 Deep Sleep

Deep Sleep, CPU, RAM và tất cả các ngoại vi đều bị tắt. Các bộ phận duy nhất của chip vẫn được cấp nguồn là: bộ RTC, ngoại vi RTC (bao gồm bộ ULP) và bộ nhớ RTC.

Chip tiêu thụ từ 10µA đến 0.15mA.

ESP32-Sơ-đồ-khối-chế-độ-deep-sleep

Trong Deep Sleep, CPU chính bị tắt nguồn còn bộ ULP thực hiện các phép đo cảm biến và đánh thức hệ thống chính dựa trên dữ liệu đo được.

Cùng với CPU, bộ nhớ chính của chip cũng bị tắt. Vì vậy, mọi thứ được lưu trữ trong bộ nhớ đó bị xóa sạch và không thể truy cập được.

Tuy nhiên, bộ nhớ RTC vẫn được bật. Vì vậy, nội dung của nó được bảo quản trong Deep Sleep và có thể được lấy ra sau khi chip được đánh thức. Đó là lý do mà chip lưu trữ dữ liệu kết nối Wi-Fi và Bluetooth trong bộ nhớ RTC trước đó.

Vậy nếu bạn muốn sử dụng dữ liệu khi khởi động lại, hãy lưu trữ nó vào bộ nhớ RTC bằng cách xác định một biến toàn cục với thuộc tính RTC_DATA_ATTR . Ví dụ: RTC_DATA_ATTR int bootCount = 0;

Deep Sleep, toàn bộ chip được tắt nguồn ngoại trừ module RTC. Vì vậy, bất kỳ dữ liệu nào không có trong bộ nhớ phục hồi RTC đều bị mất và chip sẽ khởi động lại với thiết lập mặc định. Tương tự như thực hiện chương trình lại từ đầu.

Mẹo

ESP32 hỗ trợ chạy một hàm deep sleep wake stub khi ra khỏi Deep Sleep. Hàm này chạy lập tức ngay khi chip thức dậy (trước khi khởi tạo bình thường). Sau khi hàm được chạy, chip có thể trở lại trạng thái ngủ hoặc tiếp tục khởi động bình thường.
Không giống như các chế độ ngủ khác, hệ thống không thể tự động chuyển sang Deep Sleep. Chúng ta có thể sử dụng hàm esp_deep_sleep_start()  có thể ngay lập tức vào chế độ ngủ sâu sau khi nguồn đánh thức được cấu hình.
Theo mặc định, ESP32 sẽ tự động tắt nguồn các thiết bị ngoại vi không cần thiết trước nguồn đánh thức. Nhưng bạn có thể tùy ý quyết định những bị ngoại vi sẽ tắt / bật. Để biết thêm thông tin, tham khảo tài liệu.

ESP32 Hibernation mode

Không giống như Deep Sleep, ở Hibernation Mode, chip vô hiệu hóa bộ tạo dao động 8MHz bên trong và bộ ULP. Bộ nhớ phục hồi RTC cũng bị tắt nguồn, có nghĩa là không có cách nào chúng ta có thể bảo quản dữ liệu trong chế độ ngủ đông. Mọi thứ khác đều bị tắt ngoại trừ bộ đếm thời gian RTC slow clock và một số GPIO RTC đang hoạt động. Chúng có trách nhiệm đánh thức chip ra khỏi Hibernation Mode.

Trong chế độ Hibernation Mode, chip chỉ tiêu thụ khoảng 2.5µA.

ESP32-Sơ-đồ-khối-chế-độ-hibernation

Mong rằng các thông tin trong bài viết giúp ích cho các bạn trong dự án của mình, hãy đón đọc các bài viết về ESP32  tiếp theo của ESPITEK.

 

Chúc các bạn thành công!

lastminuteengineers.com

Được gắn thẻ , , ,

Để lại bình luận nào !

avatar
  Đăng ký  
Tắt thông báo