Timer, PWM và System Tick

Timer

Counter Register (TIMx_CNT): Khi hoạt động, thanh ghi này tăng hoặc giảm giá trị theo mỗi xung clock đầu vào. Counter có thể là 16 bit hoặc 32 bit

Prescaler Register (TIMx_PSC): Giá trị thanh ghi bộ chia tần (16 bit) cho phép người dùng cấu hình chia tần số đầu vào (CK_PSC) cho bất kỳ giá trị nào từ [1-65536]. Clock đưa vào bộ đếm có thể được chia bởi 1 bộ chia tần - Prescaler. Kết hợp bộ chia tần của timer và của RCC giúp thay đổi được thời gian của mỗi lần CNT thực hiện đếm, giúp tạo ra được những khoảng thời gian, điều chế được độ rộng xung

Auto-Reload Register (TIMx_ARR): giá trị của ARR (ngưỡng trên) được cài đặt trước, làm cơ sở cho CNT nạp lại giá trị đếm mỗi khi tràn (overflow khi đếm lên - CNT vượt giá trị ARR, underflow khi đếm xuống - CNT < 0)

Các chế độ đếm:

  • Đếm lên: CNT đếm lên từ 0 (hoặc 1 giá trị nào đó được người dùng ghi vào CNT trước) đến giá trị của thanh ghi ARR, sau đó CNT bắt đầu lại từ 0. Lúc này có sự kiện tràn counter - overflow, sự kiện này có thể tạo yêu cầu ngắt nếu người dùng cấu hình cho phép ngắt. 
  • Đếm xuống: CNT đếm xuống từ giá trị thanh ghi ARR (hoặc 1 giá trị nào đó được người dùng ghi vào CNT trước) đến 0, sau đó CNT bắt đầu lại từ giá trị ARR. Lúc này có sự kiện tràn counter - underflow, sự kiện này có thể tạo yêu cầu ngắt nếu người dùng cho phép ngắt
  • Center-Aligned mode:
    • Counter sẽ đếm lên từ 0 (hoặc 1 giá trị nào đó được người dùng ghi vào CNT trước) đến giá trị thanh ghi ARR - 1. Khi đếm đến ARR thì xuất hiện sự kiện tràn counter - overflow.
    • Tiếp theo CNT đếm xuống từ ARR đến 1. Khi đếm xuống 0 thì có sự kiện tràn counter - underflow.
    • Sau đó lặp lại chu trình.  

Mỗi bộ Timer có 4 kênh Capture/Compare độc lập. Khi kết hợp với Time-base unit (CNT, ARR, Prescaler), mỗi kênh đều có thể cấu hình linh hoạt để thực hiện một trong các tính năng: Input Capture, Output Compare, PWM Generation hoặc One-Pulse Mode.

  • Input Capture: Kênh Capture/Compare được dùng như 1 kênh đầu vào. Thanh ghi CCR của nó được dùng để lưu giá trị của CNT khi phát hiện sự thay đổi mức logic (sườn lên/sườn xuống). Từ đó có thể biết được khoảng thời gian giữa 2 lần có sườn (lên hoặc xuống hoặc cả 2). Người dùng cấu hình để hệ thống phản ứng với sườn lên, sườn xuống hoặc cả 2.
  • Output Compare: Thường dùng để điều khiển trạng thái của một chân I/O Pin khi giá trị CNT đếm đến giá trị đã được nạp sẵn trong thanh ghi Capture/Compare (CCR) trong từng chu kỳ đếm. Trong từng chu kỳ đếm, đến khi CNT = CCR thì điều khiển chân I/O theo cấu hình đã thiết lập: đảo trạng thái (Toggle), kéo lên mức cao (Set), hoặc kéo xuống mức thấp (Reset) hoàn toàn độc lập mà không cần CPU nhúng tay vào. Sau đó giữ nguyên trạng thái cho đến lần CNT = CCR tiếp theo.
  • PWM Generation: Điều chế độ rộng xung, cho phép tạo ra xung với tần số được xác định bởi giá trị của thanh ghi ARR, và chu kỳ nhiệm vụ (Duty Cycle) đượcc xác định bởi giá trị thanh ghi CCR

    • Mode 1: ngõ ra ở mức logic 1 khi CNT < CCR và ngược lại, ở mức 0 nếu CNT > CCR
    • Mode 2: ngõ ra ở mức logic 0 khi CNT < CCR và ngược lại, ở mức 1 nếu CNT > CCR
  • One-pulse mode output:
    • Trigger xuất hiện (lệnh từ phần mềm gọi bằng CPU, 1 tín hiệu phần cứng từ chân Input, hay từ 1 Timer khác truyền sang qua ITRx).
    • Giả sử với trường hợp đếm lên, Mode 2: CNT đếm từ 0 đến khi bằng CCR (delay giữ đầu ra ở mức logic tĩnh - ví dụ mức 0). Khi CNT vượt qua CCR, đầu ra lật logic (mức 1). Xung bắt đầu. CNT tiếp tục đếm đến mức giới hạn ARR thì tràn (overflow). Độ rộng xung là khoảng đếm từ CCR đến ARR
    • Counter tự động dừng khi overflow/underflow

Tần số tràn (Số lần ngắt trong 1 giây):

Timer_clock: Tần số xung nhịp (clock) gốc cấp cho bộ Timer

System Tick

24 bit system timer

Là bộ đếm xuống, từ giá trị reload được nạp tại thanh ghi SysTick Reload Value Register (SYST_RVR) về 0. Sau đó nạp lại giá trị reload và tiếp tục đếm xuống ở xung clock tiếp theo.

Có thể cấu hình và kích hoạt để ngắt SysTick định kỳ mỗi khi bộ đếm đếm ngược về 0

Khi có 1 tín hiệu yêu cầu ngắt SysTick xảy ra, chương trình phục vụ ngắt SysTick_Handler sẽ được thực hiện và biến đếm thời gian sẽ được tăng 1 đơn vị

 

Nhanvat

Ủng hộ chúng tôi

Nếu bạn thấy nội dung hữu ích, hãy ủng hộ chúng tôi một ly cà phê nhé

Buy Me A Coffee buymeacoffee.com/invencamp