Tối Sáng
Hình 1. Timer là gì?

Timer là gì? Ứng dụng của timer trong Hệ thống nhúng Để lại bình luận

Hình 1. Timer là gì?
Hình 1. Timer là gì?

Timer là một bộ đếm phần cứng tự do, tăng hoặc giảm giá trị mỗi chu kỳ xung nhịp và chạy liên tục cho đến khi bị tắt. Khi đếm giảm, bộ đếm quay lại giá trị tối đa khi đạt 0, và khi đếm tăng, nó quay lại 0 khi đạt giá trị tối đa. Phần mềm có thể điều chỉnh tần số xung nhịp để kiểm soát tốc độ đếm theo nhu cầu.

Timer có thể được sử dụng ở chế độ input capture, output compare, tạo xung PWM.

Xem thêm: tổng quan về GPIO

Các loại Timer trong ARM Cortex-M

Trong ARM Cortex, có một số loại timer với các tính năng khác nhau để phục vụ các mục đích cụ thể. Dưới đây là các loại timer phổ biến:

  1. General-purpose Timer:
    Có thể cấu hình để đếm tăng, đếm giảm, hoặc đếm cả hai chiều. Hỗ trợ chế độ PWM (Pulse Width Modulation) và Capture/Compare.
  2. Advanced Timer:
    Được thiết kế cho các ứng dụng yêu cầu phức tạp như điều khiển động cơ ba pha. Hỗ trợ nhiều kênh PWM đồng bộ. Có thêm tính năng thời gian chết (dead-time) cho PWM và chế độ tắt đầu vào khẩn cấp (emergency shut-down input).
  3. Basic Timer:
    Bộ đếm cơ bản thường được sử dụng như bộ đếm thời gian cơ bản hoặc để kích hoạt các ngoại vi như DAC (Digital-to-Analog Converter). Các bộ đếm này không có đầu vào hay đầu ra.
  4. System Timer:
    Bộ đếm thời gian tích hợp sẵn trong tất cả vi điều khiển Cortex-M, được thiết kế để hỗ trợ hệ điều hành và các ứng dụng đòi hỏi chức năng ngắt định kỳ.

Các chế độ đếm

Phần cứng của timer có 3 chế độ đếm khác nhau: đếm lên (up-counting), đếm xuống (down-counting), đếm căn giữa (center-aligned counting).

Hình 2. Các chế độ đếm của timer
Hình 2. Các chế độ đếm của timer

1. Đếm lên (up-counting)

Ở chế độ đếm lên, bộ đếm bắt đầu từ 0 đến một hằng số (constant) và sau đó sẽ trở về lại 0.

Phần mềm sẽ cấu hình hằng số đó trong một thanh ghi đặc biệt được gọi là auto-reload register (ARR).

Ví dụ: nếu ARR là 4, bộ đếm sẽ đếm 0, 1, 2, 3, 4, 0, 1, 2, 3, 4 và lặp lại cho đến khi timer bị tắt.

2. Đếm xuống (down-counting)

Ở chế độ đếm xuống, bộ đếm bắt đầu từ một hằng số (constant) đếm xuống 0 và sau đố trở lại hằng số đó.

Ví dụ: nếu ARR là 4, bộ đếm sẽ đếm 4, 3, 2, 1, 0, 4, 3, 2, 1, 0 và lặp lại cho đến khi timer bị tắt.

3. Đếm căn giữa (center-aligned counting)

Ở chế độ này, sử dụng cả đếm lên và đếm xuống luân phiên nhau.

Ví dụ: nếu ARR là 4, bộ đếm sẽ đếm 0, 1, 2, 3, 4, 3, 2, 1, 0 và lặp lại cho đến khi timer bị tắt.

Xem thêm: Tổng quan về Run mode và Low power mode

Tần số của clock liên quan gì đến tốc độ timer?

Tốc độ của timer phụ thuộc vào miền tần số của xung clock, có nghĩa là tốc độ đếm của timer được xác định bởi tần số của xung nhịp (clock) mà nó sử dụng để hoạt động.

Tần số xung clock là số lượng xung nhịp mà bộ đếm nhận được trong một giây. Ví dụ, nếu xung clock có tần số là 1 MHz, thì mỗi giây sẽ có 1 triệu xung clock, do đó giá trị của timer cũng tăng thêm 1 triệu.

Để điều chỉnh tốc độ của timer, ta cần xác định tần số của timer theo công thức:

Tần số của timer

Trong đó:

  • F clock counter: tần số xung clock của timer.
  • F clock system: tần số xung clock của toàn hệ thống.
  • Prescaler: Là một giá trị phân chia (chia xung clock hệ thống) để làm giảm tần số xung nhịp mà bộ đếm sử dụng. Giá trị này có thể kéo dài từ 1 đến 65536 (đối với timer sử dụng 16 bit).

Ví dụ: Nếu tần số của hệ thống là 100Mhz, và prescaler bạn sử dụng là 100, thì tần số của timer sẽ là 1Mhz. Điều này có nghĩa là timer sẽ đếm 1 triệu lần mỗi giây (tương đương với mỗi micro giây tăng thêm 1 đơn vị giá trị).

Việc thay đổi giá trị prescaler sẽ làm cho timer đếm nhanh hoặc chậm hơn tùy theo tần số xung clock hệ thống và giá trị phân chia bạn chọn.

Input capture

Hình 3. Input capture là gì?
Hình 3. Input capture là gì?

Nếu timer sử dụng chức năng input capture thì khi một sự kiện nào đó xảy ra, phần cứng (hardware) sẽ tự động lưu lại giá trị của bộ đếm (counter) vào một thanh ghi đặc biệt (gọi là CCR). Sau đó, phần cứng sẽ gửi một tín hiệu ngắt (interrupt) để thông báo cho phần mềm biết rằng sự kiện đã xảy ra.

Sau khi nhận được tín hiệu ngắt, phần mềm sẽ thực hiện các bước sau:

  • Tính toán khoảng thời gian giữa hai sự kiện: Phần mềm sẽ so sánh giá trị của bộ đếm tại hai thời điểm khác nhau (khi hai sự kiện xảy ra) để tính toán sự chênh lệch thời gian giữa chúng.
  • Sao chép giá trị từ thanh ghi CCR vào một bộ nhớ đệm (buffer) mà người dùng đã tạo sẵn. Điều này giúp lưu lại thời gian của sự kiện vừa xảy ra.

Ví dụ: Nếu sự kiện 1 xảy ra khi bộ đếm có giá trị là 5000 và sự kiện 2 xảy ra khi bộ đếm có giá trị là 8000, thì phần mềm sẽ tính khoảng thời gian giữa chúng bằng cách lấy 8000 – 5000 = 3000. Điều này có nghĩa là khoảng thời gian giữa hai sự kiện là 3000 đơn vị thời gian.

Output compare

Hình 4. Chức năng output compare
Hình 4. Chức năng output compare

Timer cũng có thể sử dụng ở chế độ output compare, bộ so sánh sẽ liên tục so sánh giá trị của bộ đếm với một hằng số được lập trình sẵn, nếu bằng nhau thì output sẽ là một ngắt.

Hình 5. Output compare diagram
Hình 5. Output compare diagram

Bộ đếm của timer (CNT) là một bộ đếm 16 bit, nghĩa là nó có thể đếm từ 0 đến 65,535.

Thanh ghi Capture/Compare (CCR) chứa giá trị được so sánh với giá trị của bộ đếm (CNT).

Trong các vi điều khiển như STM32, thường sẽ có nhiều kênh dùng chung một bộ đếm CNT. Ví dụ ở hình 5, Timer sẽ so sánh giá trị của bộ đếm với 4 thanh ghi CCR cùng lúc và tạo ra 4 đầu ra độc lập dựa trên kết quả so sánh.

Vậy output compare để làm gì?

Mục đích chính của compare output là tạo ra các tín hiệu đầu ra hoặc sự kiện dựa trên việc so sánh giá trị hiện tại của bộ đếm (CNT) với giá trị được thiết lập trong thanh ghi so sánh (CCR).

  • Tạo tín hiệu PWM: CNT đếm từ 0 đến giá trị định sẵn (chu kỳ của timer). Khi CNT = CCR, tín hiệu đầu ra sẽ thay đổi trạng thái (cao hoặc thấp) do đó sẽ tạo ra tín hiệu xung.
  • Tạo ngắt (interrupt): Compare output có thể kích hoạt một ngắt khi CNT đạt đến giá trị trong CCR.
  • Đo thời gian hoặc khoảng cách: Kết hợp với chế độ Input Capture, nó được dùng để đo khoảng thời gian giữa hai sự kiện.

Các chế độ của output compare

Khi CNT = CCR, đầu ra của mỗi kênh có thể có nhiều chế độ khác nhau như hình 6.

Hình 6. Output mode
Hình 6. Output mode
  • Active mode: Khi giá trị của bộ đếm (CNT) khớp với giá trị trong thanh ghi so sánh (CCR), tín hiệu đầu ra sẽ chuyển sang mức logic cao (high).
  • Tín hiệu đầu ra sẽ chuyển sang mức logic thấp (low).
  • Tín hiệu đầu ra sẽ đảo trạng thái: từ cao (high) sang thấp (low) hoặc ngược lại.
  • Tín hiệu đầu ra được giữ cố định ở mức logic cao (high) hoặc thấp (low), không phụ thuộc vào giá trị của CNT hay CCR.
Hình 7. Đầu ra sử dụng chế độ Toggle, High Mode với none one pulse, High Mode với one pulse
Hình 7. Đầu ra sử dụng chế độ Toggle, High Mode với none one pulse, High Mode với one pulse

Từ hình 7:

  • Chế độ toggle: đầu ra sẽ đảo từ High sang Low hoặc Low sang High khi CNT = CCR.
  • Chế độ High với none one pulse: đầu ra sẽ ở mức High khi CNT = CCR và giữ nguyên.
  • Chế độ High với one pulse: đầu ra sẽ ở mức High khi CNT = CCR và ở mức thấp khi CNT = ARR.

Xem thêm: Ngắt là gì?

PWM output trong timer

PWM là một kỹ thuật kỹ thuật số đơn giản được sử dụng để điều khiển giá trị của một tín hiệu tương tự (analog) bằng cách sử dụng một tín hiệu hình chữ nhật.

PWM chuyển đổi nguồn điện áp bật (on) và tắt (off) liên tục để tạo ra một điện áp trung bình mong muốn.

Tín hiệu PWM có dạng sóng vuông (rectangular waveform) với hai trạng thái: bật (on) hoặc tắt (off).

Dù tại bất kỳ thời điểm nào, tín hiệu là nhị phân (chỉ có mức cao (high) hoặc thấp (low)), nhưng điện áp trung bình của tín hiệu qua thời gian có thể nằm trong khoảng từ 0V đến điện áp tối đa (max voltage).

Duty Cycle (Chu kỳ làm việc)

Duty cycle là phần trăm thời gian tín hiệu ở trạng thái bật (on) trong một chu kỳ được tính theo công thức sau:

Duty cycle

Ví dụ: để chiếu sáng một đèn LED với điện áp cấp tối đa là 5V.

  • Duty cycle 0%: Tín hiệu PWM luôn ở trạng thái Low → Điện áp trung bình là 0V → Đèn LED luôn tắt.
  • Duty cycle 50%: Tín hiệu PWM ở trạng thái High 50% thời gian → Điện áp trung bình là 5V x 50% = 2.5V → Đèn LED sáng ở mức vừa phải, không quá sáng.
  • Duty cycle 100%: Tín hiệu PWM luôn ở trạng thái High→ Điện áp trung bình là 5V x 100% = 5V → Đèn LED sáng hết mức.

PWM Mode

Hình 8. PWM Mode
Hình 8. PWM Mode

Dựa vào hình 8, PWM có 2 chế độ:

  • PWM Mode 1: Khi giá trị của bộ đếm (CNT) nhỏ hơn giá trị tín hiệu tham chiếu (CCR), tín hiệu đầu ra được giữ ở mức logic cao (high) và khi CNT >= CCR, tín hiệu đầu ra được giữ ở mức thấp.
  • PWM Mode 2: Ngược lại với Mode 1, khi giá trị của counter (CNT) >= giá trị tín hiệu tham chiếu (CCR), tín hiệu đầu ra được giữ ở mức logic cao (high). Khi CNT < CCR, tín hiệu đầu ra được giữ ở mức logic thấp (low).

PWM Signal Period và PWM Duty Cycle

Hình 9. PWM Signal Period và PWM duty cycle
Hình 9. PWM Signal Period và PWM duty cycle

PWM signal period là khoảng thời gian mà một chu kỳ đầy đủ của tín hiệu PWM diễn ra, bao gồm cả phần bật (ON) và tắt (OFF) được tính theo công thức:

PWM Period

Do đó Clock period hoặc ARR tăng thì thời gian để hoàn thành một chu kỳ PWM tăng lên. Khi điều khiển động cơ hoặc đèn LED, tần số PWM càng cao thì động cơ hoặc đèn LED bật/tắt càng nhanh.

PWM duty cycle như đã nhắc ở trên, là tỉ lệ thời gian tín hiệu ở mức cao so với toàn bộ chu kỳ PWM. Nó thường được biểu thị bằng phần trăm (%). Được tính theo công thức:

Chu kỳ PWM

Trong thực tế, tần số lý tưởng để để điều khiển một motor là f > 20Khz (vượt qua phạm vi nghe được của con người – thường là từ 20Hz đến 20Khz).

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

PWM dead-time

Hình 10. PWM dead-time
Hình 10. PWM dead-time

Thời gian chết (Dead-time) là khoảng thời gian ngắn khi cả hai transistor (hoặc các thiết bị chuyển mạch) trong một cầu H hoặc mạch PWM đều tắt (không dẫn dòng).

Mục đích: Tránh tình trạng cả hai thiết bị bật cùng lúc, gây ra ngắn mạch (được gọi là “shoot-through”), làm hỏng mạch hoặc thiết bị.

Cách hoạt động:

  • Khi tín hiệu PWM chuyển từ mức cao sang mức thấp, hoặc ngược lại, có một khoảng thời gian ngắn khi cả hai thiết bị đều tắt để đảm bảo an toàn.
  • Ví dụ: Khi điều khiển động cơ bằng cầu H, nếu không có dead-time, cả hai transistor có thể bật cùng lúc và gây ra ngắn mạch.

Chế độ tắt đầu vào khẩn cấp (Emergency Shut-down Input)

Chế độ tắt đầu vào khẩn cấp là một tính năng an toàn cho phép tắt ngay lập tức tín hiệu PWM và ngắt động cơ hoặc tải khi có sự cố.

Mục đích: Bảo vệ thiết bị và người dùng khỏi các tình huống nguy hiểm như quá nhiệt, quá dòng, hoặc lỗi hệ thống.

Cách hoạt động:

  • Một tín hiệu từ nút nhấn hoặc cảm biến an toàn được gửi đến vi điều khiển hoặc mạch điều khiển.
  • Khi tín hiệu này kích hoạt, hệ thống ngừng cấp tín hiệu PWM và ngắt động cơ hoặc tải để tránh hư hỏng.
  • Ví dụ: Trong hệ thống robot, nếu cảm biến phát hiện một chướng ngại vật hoặc sự cố, chế độ tắt khẩn cấp sẽ dừng động cơ ngay lập tức để tránh tai nạn.

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

Timer là một thành phần quan trọng trong hệ thống nhúng, cung cấp khả năng quản lý thời gian và điều khiển chính xác các sự kiện. Nhờ vào khả năng đa dạng của các chế độ đếm và chức năng như input capture, output compare, và PWM, timer cho phép điều khiển chính xác trong nhiều ứng dụng từ điều khiển động cơ đến đo lường thời gian. Việc hiểu rõ cách cấu hình và sử dụng timer giúp tối ưu hóa hiệu suất hệ thống và đáp ứng các yêu cầu cụ thể của từng ứng dụ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 *