Tối Sáng
Hình 1. Low power mode là gì?

Tổng quan về Run Mode và Low Power Mode trong vi điều khiển Để lại bình luận

Hình 1. Low power mode là gì?
Hình 1. Low power mode là gì?

Các vi điều khiển (MCU) như STM32… cung cấp nhiều chế độ hoạt động khác nhau để có thể cân bằng giữa hiệu suất và tiết kiệm năng lượng. Trong đó có hai chế độ quan trọng đó là Run ModeLow Power Mode. Hiểu được cách chúng hoạt động và áp dụng chúng vào các ứng dụng là điều cực kỳ quan trọng trong việc tối ưu hoá trong hệ thống nhúng, đặc biệt là trong thời đại hướng đến thế giới xanh hiện nay.

Run mode

Run mode là chế độ hoạt động mặc định khi khởi động một vi điều khiển. Ở chế độ này, hệ thống chạy ở tốc độ xung clock mặc định và người dùng có thể cấu hình xung clock theo ý muốn. Tất cả các ngoại vi đều hoạt động và có thể xử lý những tác vụ phức tạp.

Ở Run mode, hệ thống xung clock có thể chạy với tốc độ tối đa, đáp ứng các yêu cầu về hiệu năng. Do chạy ở tốc độ tối đa, do đó ở chế độ này cũng tiêu thụ nhiều điện năng.

Xem thêm: Xung clock là gì?

Low-power modes

Hình 2. Bảng tổng hợp Low-power modes
Hình 2. Bảng tổng hợp Low-power modes

Trong kiến trúc ARM Cortex-M3, có 3 chế độ low-power mà người dùng có thể tuỳ chọn dựa vào nhu cầu của ứng dụng:

  • Sleep mode (CPU tắt, tất cả các ngoại vi khác vẫn hoạt động).
  • Stop mode (Tất cả xung clock đều tắt).
  • Standby mode (Miền điện áp 1.8V cấp cho CPU, ngoại vi, SRAM… đều bị tắt; chỉ giữ lại RTC, Backup Registers, Wake-up Pins…).

Ngoài các chế độ trên, người dùng cũng có thể tiết kiệm điện năng bằng cách:

  • Làm chậm lại xung clock của hệ thống.
  • Tắt xung clock dẫn đến các ngoại vi ở APB, AHB khi không được sử dụng.

Xem thêm: Tổng quan kiến trúc Arm Cortex-M3

Làm chậm lại hệ thống xung clock

Ở Run mode, tốc độ của xung clock có thể là SYSCLK, HCLK, PCLK1, PCLK2 và có thể được giảm lại bằng cách sử dụng các bộ prescaler mà chipstack.vn đã nhắc đến ở bài viết trước.

Các bộ prescaler có thể được sử dụng để làm chậm tốc độ các ngoại vi trước khi vào Sleep mode.

Tắt xung clock dẫn đến các ngoại vi ở APB, AHB

Khi các ngoại vi ở APB, AHB không sử dụng, người dùng có thể tắt các xung clock này để có thể tiết kiệm điện năng một cách triệt để.

Sleep mode

Sleep mode là một chế độ tiết kiệm năng lượng của vi điều khiển trong low-power modes. Trong chế độ này, hệ thống tạm dừng các hoạt động không cần thiết nhưng vẫn sẵn sàng hoạt động trở lại khi có ngắt (interrupt) hoặc sự kiện (event).

Ở Sleep mode: CPU tắt, tất cả các ngoại vi khác vẫn hoạt động.

1. Để đưa vi điều khiển vào Sleep mode, cần sử dụng hai lệnh đặc biệt

  • WFE (Wait For Event):
    • Chờ sự kiện xảy ra mà không cần phải bật ngắt để sử dụng.
    • MCU sẽ tự đánh thức mà không cần ngắt, mà chỉ phụ thuộc vào flag hoặc một đoạn logic của code.
    • Điều này tương tự như bạn tự thức dậy mà không cần dùng đồng hồ báo thức mà là do đồng hồ sinh học bên trong cơ thể đánh thức bạn dậy.
  • WFI (Wait For Interrupt): Chờ ngắt xảy ra.
    • MCU sẽ đánh thức khi có một tín hiệu ngắt xảy ra (Từ nút nhất, timer…).
    • Giống như việc bạn sử dụng đồng hồ báo thức để đánh thức.

2. Có hai lựa chọn để vào Sleep mode

Hình 3. Sleep now vs Sleep-on-exit
Hình 3. Sleep now vs Sleep-on-exit
  • Sleep-now (Chế độ Ngủ ngay lập tức):
    • Nếu bật/tắt một bit phù hợp (theo Reference Manual), vi điều khiển sẽ vào chế độ này.
    • Vi điều khiển sẽ vào chế độ ngủ ngay lập tức, sau khi xử lý xong lệnh WFI hoặc WFE.
  • Sleep-on-exit (Chế độ ngủ khi thoát ngắt):
    • Nếu bật/tắt một bit phù hợp (theo Reference Manual), vi điều khiển sẽ vào chế độ này.
    • Vi điều khiển sẽ vào chế độ ngủ ngay khi xử lý hết tất cả các ngắt (thoát khỏi ngắt ISR có có độ ưu tiên thấp nhất).

Giả sử 3 ngắt xảy ra đồng thời:

  • Ngắt 1 (ưu tiên cao nhất): Cảm biến khẩn cấp (Interrupt 1).
  • Ngắt 2 (ưu tiên trung bình): Timer (Interrupt 2).
  • Ngắt 3 (ưu tiên thấp nhất): Nút nhấn (Interrupt 3).

Sleep-now

Vi điều khiển sẽ xử lý ngắt có độ ưu tiên cao nhất (Ngắt 1) sau đó sẽ vào chế độ ngủ ngay lập tức.

Sleep-on-exit

Vi điều khiển sẽ xử lý ngắt có độ ưu tiên cao nhất (Ngắt 1), sau đó ngắt 2 và cuối cùng là ngắt 3 rồi mới vào chế độ ngủ.

3. Thoát khỏi Sleep mode

Nếu sử dụng WFI để vào Sleep mode:

Khi có ngắt từ bất kỳ ngoại vi nào được xử lý bởi NVIC đều có thể đánh thức thiết bị từ chế độ ngủ.

Do tín hiệu được xử lý thông qua NVIC, nên làm tăng độ trễ và thời gian xử lý.

Ví dụ: Nếu có ngắt từ một cảm biến hoặc một timer, vi điều khiển sẽ thức dậy ngay lập tức khi ngắt đó xảy ra và được NVIC xử lý.

Nếu sử dụng WFE để vào Sleep mode:

Lệnh WFE cũng khiến vi điều khiển vào chế độ Sleep, nhưng thay vì chờ ngắt, nó sẽ chờ một sự kiện (event) xảy ra.

Trong kiến trúc ARM Cortex-M3, WFE không phụ thuộc vào NVIC để xử lý ngắt và đánh thức thiết bị.

Việc thức dậy từ WFE không phải thông qua quá trình vào và thoát khỏi ngắt NVIC, giúp tiết kiệm thời gian và giảm độ trễ.

Xem thêm: Hệ thống nhúng là gì?

Stop mode

Hình 4. Stop mode
Hình 4. Stop mode

Stop mode là một chế độ của low-power modes, tiết kiệm năng lượng cao của vi điều khiển, nơi hầu hết các đồng hồ (clock) và các thành phần không cần thiết sẽ bị tắt, giúp giảm mức tiêu thụ năng lượng.

1. Chế độ Stop mode hoạt động như thế nào?

  1. Tắt các đồng hồ và bộ dao động: Trong chế độ Stop, tất cả các đồng hồ trong hệ thống 1.8V (bao gồm PLL, HSI, HSE) sẽ bị tắt. Điều này giúp giảm đáng kể mức tiêu thụ năng lượng.
  2. Bảo vệ dữ liệu trong bộ nhớ: Mặc dù các đồng hồ bị tắt, nhưng dữ liệu trong SRAM và các register vẫn được bảo vệ và giữ nguyên.
  3. Duy trì trạng thái của các chân I/O: Các chân I/O của vi điều khiển sẽ giữ nguyên trạng thái như khi ở chế độ Run mode.
  4. Cấu hình chế độ tiết kiệm năng lượng: Bạn có thể cấu hình regulator (bộ điều chỉnh điện áp) ở chế độ tiết kiệm năng lượng thấp để giảm thêm mức tiêu thụ năng lượng.

2. Khi nào chế độ Stop mode được kích hoạt?

Set bit phù hợp để vào chế độ Stop.

Sau khi lệnh WFI hoặc WFE thực thi xong sẽ vào chế độ này.

Trước khi vào Stop mode, nếu có một thao tác như lập trình bộ nhớ Flash hoặc truy cập vào APB, vi điều khiển sẽ đợi cho đến khi các thao tác này hoàn thành trước khi vào chế độ Stop.

Bạn có thể chọn một số tính năng như watchdog, RTC, oscillators để vẫn hoạt động trong chế độ Stop nếu cần thiết.

3. Khi nào vi điều khiển thoát khỏi chế độ Stop mode?

Khi phát hiện WFI hoặc WFE, vi điều khiển sẽ thoát khỏi chế độ Stop.

Khi thoát, vi điều khiển sẽ sử dụng HSI RC oscillator làm xung clock hệ thống.

Standby mode

Hình 5. Standby mode
Hình 5. Standby mode

Chế độ Standby là chế độ tiết kiệm năng lượng thấp nhất của low-power modes, nơi vi điều khiển tắt hầu hết các thành phần để giảm thiểu mức tiêu thụ năng lượng. Khác với stop mode, khi sử dụng standby mode dữ liệu ở SRAM và các thanh ghi sẽ đều bị mất, chỉ giữ lại dữ liệu trong thanh ghi Backup domain và Standby circuitry.

1. Hoạt động của chế độ Standby

  1. Tắt tất cả các đồng hồ và bộ dao động: Trong chế độ Standby, các bộ dao động như PLL, HSI, và HSE đều bị tắt. Các thành phần trong hệ thống 1.8V cũng sẽ bị tắt, bao gồm cả regulator điện áp. Điều này giúp giảm mức tiêu thụ năng lượng xuống mức thấp nhất có thể.
  2. Dữ liệu bị mất: Trừ các register trong Backup domain (chẳng hạn như RTC) và một số mạch Standby, tất cả các dữ liệu trong SRAM và register sẽ bị mất khi vào chế độ Standby.
  3. I/O pins: Hầu hết các chân I/O sẽ ở trạng thái high impedance, nghĩa là không có tín hiệu nào được truyền đi. Tuy nhiên, một số chân đặc biệt như reset pad, TAMPER pin (nếu cấu hình cho tamper hoặc đo lường) và WKUP pin (nếu được bật) sẽ vẫn hoạt động.

2. Làm thế nào để vào chế độ Standby?

Set bit phù hợp để vào chế độ Standby dựa vào Reference Manual.

Sau khi lệnh WFI hoặc WFE thực thi xong sẽ vào chế độ này.

3. Khi nào vi điều khiển thoát khỏi chế độ Standby?

Vi điều khiển sẽ thức dậy từ chế độ Standby khi có các sự kiện như:

  • Rising edge trên WKUP pin.
  • Rising edge của RTC alarm.
  • Reset bên ngoài (khi có tín hiệu trên NRST pin).
  • Reset từ watchdog (IWDG).

4. Debug trong chế độ standby

Khi vi điều khiển ở chế độ Standby, vì các xung clock đã bị tắt đi nên chế độ debug không còn hoạt động ở standby. Tuy nhiên, bạn có thể cấu hình dựa trên Reference Manual để có thể debug trong khi vẫn ở chế độ standby.

Auto-wakeup (AWU) from low-power mode

RTC (real-time clock) được sử dụng để đánh thức hệ thống từ standby hoặc stop mode mà không cần phải phụ thuộc vào ngắt ngoài, cơ chế này được gọi là Auto-wakeup mode. RTC có thể được cấu hình để đánh thức vi điều khiển vào đúng chính xác thời điểm mình mong muốn.

Để biết thêm về RTC: đọc bài viết này

1. Các nguồn xung clock cho RTC

LSE OSC (32.768 kHz external crystal oscillator): Đây là một bộ dao động với năng lượng tiêu thụ rất thấp (dưới 1µA trong điều kiện thông thường). Cung cấp thời gian chính xác để điều khiển RTC.

LSI RC (Low-power internal RC Oscillator): Đây là một bộ dao động nội tiết kiệm năng lượng. Ưu điểm của là không cần sử dụng bộ dao động tinh thể 32.768 kHz bên ngoài, giúp tiết kiệm chi phí và vẫn đảm bảo tiêu thụ năng lượng thấp.

2. Cách thức đánh thức của RTC:

Stop mode: Để thức dậy từ chế độ Stop, bạn cần cấu hình để kích hoạt ngắt ngoài với rising edge.

Standby mode: Khi thức dậy từ chế độ Standby, bạn không cần cấu hình để kích hoạt ngắt ngoài với rising edge. Vì chế độ này sẽ tự động được đánh thức khi có sự kiện RTC.

Các ngoại vi hoạt động ở Run mode và Low power mode

Đối với Run mode: Ngoại vi hoạt động dựa vào xung clock domain có được bật hay không.

Đối với Low power mode:

  • Sleep mode: toàn bộ các ngoại vi hoạt động như ở chế độ run mode, ngoại trừ xung clock của CPU bị tắt.
  • Stop mode:
    • Toàn bộ xung clock đều bị tắt, chỉ giữ lại RTC, LPTIM, GPIO (với ngắt), và các bộ dao động thấp năng lượng (LSE hoặc LSI) để đánh thức.
    • Giao tiếp I2C hoặc UART có thể hỗ trợ chế độ năng lượng thấp tùy thuộc vào vi điều khiển.
  • Standby mode: toàn bộ xung clock đều bị tắt, chỉ giữ lại WKUP pin rising edge, RTC alarm event’s rising edge, external Reset in NRST pin, IWDG Reset.

Có thể chuyển đổi trực tiếp giữa các chế độ Low power không?

Hình 6. Run mode và Low power mode
Hình 6. Run mode và Low power mode

Trong vi điều khiển, việc chuyển đổi giữa các chế độ tiết kiệm năng lượng (low power modes) thường không thể thực hiện trực tiếp từ chế độ này sang chế độ khác. Thay vào đó, hệ thống phải chuyển qua chế độ Active Mode hoặc Run Mode trước khi vào một chế độ tiết kiệm năng lượng khác.

Lý do cho việc này bao gồm:

  1. Quy trình khởi tạo lại tài nguyên: Mỗi chế độ tiết kiệm năng lượng có cách cấu hình tài nguyên (như xung nhịp, bộ nhớ, hoặc các ngoại vi) khác nhau. Việc chuyển đổi trực tiếp có thể gây xung đột hoặc mất ổn định hệ thống.
  2. Yêu cầu của phần cứng: Một số vi điều khiển yêu cầu CPU hoạt động trong trạng thái bình thường để thực hiện các bước cấu hình trước khi chuyển sang chế độ tiết kiệm năng lượng mới.
  3. An toàn hệ thống: Chuyển đổi qua chế độ Active giúp đảm bảo rằng tất cả các thành phần quan trọng đều được đặt lại và cấu hình đúng trước khi giảm công suất.

Một số vi điều khiển có thể chuyển đổi trực tiếp:

Tuy nhiên, một số vi điều khiển hiện đại (như dòng STM32, TI MSP430) có thể hỗ trợ chuyển đổi trực tiếp giữa một số chế độ tiết kiệm năng lượng cụ thể nếu nhà sản xuất thiết kế sẵn tính năng này. Điều này thường được thực hiện thông qua các thanh ghi điều khiển chế độ năng lượng. Để biết chính xác, bạn nên kiểm tra tài liệu datasheet hoặc reference manual của vi điều khiển bạn đang sử dụng.

Việc hiểu rõ các chế độ hoạt động như Run Mode và Low Power Mode trong vi điều khiển là cực kỳ quan trọng trong việc tối ưu hóa hiệu suất và tiết kiệm năng lượng cho các hệ thống nhúng. Việc áp dụng đúng chế độ hoạt động tùy theo từng yêu cầu của ứng dụng không chỉ nâng cao hiệu suất mà còn đóng góp vào việc xây dựng các hệ thống nhúng tiết kiệm năng lượng, một yếu tố quan trọng trong thế giới ngày nay hướng đến sự bền vững và bảo vệ môi trường.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *