🌱 Vai Trò và Ứng Dụng của Clock trong Vi Điều Khiển

🌱 Vai Trò và Ứng Dụng của Clock trong Vi Điều Khiển

    Clock là thành phần quan trọng của của Vi điều khiển và các mạch điện tử, khi lập trình vi điều khiển, chúng ta luôn cần cấu hình clock, vậy Clock thực sự là gì và nó quan trọng như thế nào trong vi điều khiển? Bài viết này sẽ cùng tìm hiểu về Clock trong vi điều khiển, công dụng của nó, một số loại clock chính, độ chính xác của clock có quan trọng không, từ đó hiểu và áp dụng nó trong việc lập trình vi điều khiển.

Khái niệm Clock xuất phát từ linh kiện điện tử

    Như mình đã giới thiệu trong video về microprocessor vs microcontroller, các đơn vị nhỏ là cốt lõi của vi điều khiển có thể kể đến như CPU, memory, peripheral, ... Các đơn vị này đề được cấu thành từ một số linh kiện điện tử, điển hình nhất trong số đó là Flip-Flop:

D Flip Flop

    Input của các Flip-Flop này ngoài Data thì luôn có một chân Clk là Clock, đầu vào được cấp cho chân này làm một xung vuông với độ rộng 50%. Hoạt động cơ bản (Ví dụ D Flip-Flop) là sau mỗi chu kỳ clock, giá trị đầu ra Q sẽ được update bằng đầu vào D - như hình dưới.

Timing Diagram D Flip Flop

    Chính vì vậy, việc data được update ảnh hưởng trực tiếp đến tốc độ thực thi của các thành phần điện tử trong vi điều khiển, được quyết định bởi tần số của xung clock kể trên.

    Các thành phần điện tử không hoạt động với một tần số nhất định, chúng có thể hoạt động với tần số khác nhau tùy vào ứng dụng và lựa chọn của người dùng. Vậy các linh kiện này sẽ luôn cấp một đầu vào clock để người dùng có thể cấu hình được khi cần.

Lưu ý: Chỗ này không thể kết luận clock tần số càng cao càng tốt, lí do là nếu clock chạy quá nhanh, có thể không đủ thời gian để hoàn thành các hoạt động cần thiết trước khi lệnh tiếp theo bắt đầu - bộ xử lý giao tiếp với một loạt các thành phần khác nhau, từ bộ nhớ đến các chân vật lý. Một điểm khác là hoạt động với tần số cao ở một số trường hợp là không cần thiết, nhưng lại gây tốn nhiều năng lượng và làm chip nhanh nóng hơn!

Một số công dụng của Clock

    Công dụng đầu tiên khi nói về clock là sự phân bổ clock trong toàn bộ vi điều khiển, thường gọi là Clock Tree. Đây là thiết kế phần cứng trong các vi điều khiển để phân bổ clock cho toàn bộ các thành phần Core, Memory, Peripherals, ...

STM32 Clock tree
Ví dụ clock tree trong STM32

    Mục đích của việc phân bổ này là giúp người dùng có thể cấu hình clock một cách linh hoạt hơn:

  • Ngoại vi nào cần dùng thì enable clock, không dùng thì mặc định disable để tiết kiệm năng lượng.
  • Các ngoại vi khác nhau cần cấu hình tần số clock hoạt động khác nhau.
  • Có thể sử dụng nhiều nguồn clock với độ chính xác khác nhau.

Tham chiếu thời gian cho vi điều khiển và Timer

    Clock cấp cho Core, quyết định tốc độ thực thi câu lệnh nhanh hay chậm. Ví dụ thông số CPU 84MHz, có ý nghĩa là tần số clock cấu hình cho core tối đa là 84MHz, nếu cấu hình nhỏ hơn, CPU sẽ chạy chậm hơn.

    Ngoài ra, clock còn cấp cho các bộ định thời Timer để làm tham chiếu đếm thời gian cho Timer.

Lấy mẫu dữ liệu ADC

    Tín hiệu Clock quyết định tốc độ lấy mẫu dữ liệu của các bộ Analog to Digital Converter (ADC). Tần số clock này cũng ảnh hưởng đến độ chính xác của ADC.

ADC - analog to digital converter

Tạo xung vuông PWM

    Clock cấp cho các bộ Timer PWM để tạo xung vuông

Clock to PWM Generation

Cấu hình tốc độ cho các chuẩn truyền thông

    Clock còn làm tham chiếu thời gian trong các chuẩn truyền thông. Các chuẩn truyền thông nối tiếp đồng bộ sử dụng clock cấp từ Master sang Slave để đồng bộ về mặt tốc độ.

    Với các chuẩn truyền thông nối tiếp bất đồng bộ, Clock có vai trò lấy mẫu dữ liệu và trong các bộ tạo Baudrate ở cả Master và Slave.

    ➤ Đọc thêm về các chuẩn truyền thông trong vi điều khiển.

Một số nguồn cấp clock trong vi điều khiển

    Các vi điều khiển hiện nay thường hỗ trợ nhiều nguồn cấp clock với nhiều mục đích khác nhau - đa dạng nguồn cấp clock, độ chính xác với từng nguồn cấp. Dưới đây là 3 nguồn clock thường tích hợp trong vi điều khiển, một số dòng chip chỉ hỗ trợ một hoặc hai nguồn clock.

Internal Clock (Clock nội)

    Internal Clock là nguồn clock được tích hợp bên trong vi điều khiển, thường sử dụng loại mạch RC Resistor-Capacitor Oscillator.

RC Oscillator Internal Clock

    Bộ dao động RC (điện trở-tụ điện) là một loại bộ dao động phản hồi được chế tạo bằng cách sử dụng điện trở và tụ điện, cùng với một thiết bị khuếch đại như bóng bán dẫn hoặc bộ khuếch đại hoạt động. Thiết bị khuếch đại phản hồi trở lại mạng RC, gây ra phản hồi tích cực (positive feedback) và tạo ra các dao động lặp lại.

    Vấn đề khi sử dụng Internal Clock là chúng kém chính xác hơn đáng kể so với External Clock. Bên trong chip vi điều khiển này là nơi không lý tưởng để đặt bất kỳ mạch RC nào. Điều này xuất phát từ sự phụ thuộc nhiệt độ cao của mạch RC và dung sai các thành phần lớn.

    Thông thường, một bộ vi điều khiển có khả năng quản lý nhiệt tốt có thể cung cấp tín hiệu xung nhịp với độ chính xác trong khoảng từ 1% đến 5%. Điều này có thể đủ tốt cho một số bus truyền thông không đồng bộ chậm và để quản lý xử lý tín hiệu tương tự tần số thấp. Tuy nhiên, trong hầu hết các ứng dụng thông thường, điều này sẽ không chính xác.

    Trong các vi điều khiển, Internal Clock thường được cung cấp khoảng 2-48MHz. Một số vi điều khiển thậm chí cung cấp 2 nguồn Internal (Fast Internal Clock và Slow Internal Clock) để phục vụ nhiều ứng dụng.

External Clock (Clock ngoại)

    External Clock có hai loại chính:

  • Mechanical resonant devices: bao gồm tinh thể thạch anh và bộ cộng hưởng gốm,
  • Bộ dao động RC thụ động.

    Dạng cơ bản nhất là mạch RC, mô phỏng mạch dao động nội nhưng sử dụng các thành phần có giá trị độ chính xác cao hơn và sử dụng các kỹ thuật quản lý nhiệt để cô lập các thành phần khỏi nhiệt độ cao. Mặc dù điều này có thể cải thiện độ chính xác ít nhất là một cấp độ, nhưng đây là tùy chọn kém chính xác nhất đối với External Clock và có các giải pháp tốt hơn với chi phí và kích thước tương đối tương tự.

    Clock do mạch RC tạo ra cũng sẽ bị ảnh hưởng bởi sự dao động của mức cung cấp điện và dễ bị nhiễu điện, hạn chế lợi ích của chúng trong hầu hết các ứng dụng thông thường.

    Crystal oscillators - Thạch anh, là loại External Clock được sử dụng thường xuyên nhất khi yêu cầu độ chính xác cao.

Crystal oscillators - Thạch anh

    Một bộ dao động thạch anh giá rẻ thông thường có thể có độ chính xác tốt hơn một phần triệu phần trăm - quá đủ cho tất cả các ứng dụng ngoại trừ các ứng dụng nhạy cảm nhất với thời gian.

    Tuy nhiên, tinh thể thạch anh có thể bị ảnh hưởng bởi các yếu tố môi trường có thể yêu cầu bảo vệ bổ sung. Mạch hỗ trợ cho tinh thể thạch anh cũng có thể tạo ra đầu ra trở kháng cao, yêu cầu phải khớp trở kháng bổ sung để tích hợp với phần còn lại của mạch. Sử dụng module bộ dao động tinh thể có sẵn thay vì các thành phần rời rạc có thể giảm khả năng bị ảnh hưởng bởi các tác động của môi trường và giúp thiết kế bo mạch đơn giản hơn nếu ngân sách của bạn cho phép. Chúng thường cung cấp đầu ra sóng vuông trở kháng thấp giúp tích hợp với phần còn lại của thiết kế mạch đơn giản hơn với độ chính xác rất giống với khi sử dụng tinh thể rời rạc.

    Một lựa chọn thay thế là bộ dao động silicon dựa trên mạch cộng hưởng IC (IC resonator circuit) dễ triển khai với độ chính xác khoảng 0,05%. Tốt hơn một chút so với mạch RC bên ngoài nhưng không tốt bằng bộ dao động thạch anh. Tuy nhiên, bộ dao động silicon chắc chắn và đáng tin cậy hơn bộ dao động thạch anh, lý tưởng cho các môi trường hoạt động mà thiết bị có thể chịu rung động cơ học mạnh.

    Cuối cùng, các bộ cộng hưởng gốm không chính xác bằng bộ dao động thạch anh nhưng chính xác hơn bộ dao động silicon. Dựa trên vật liệu gốm áp điện, chúng sử dụng rung động cơ học cộng hưởng để tạo tín hiệu xung nhịp. Ưu điểm chính của chúng là chúng có trong một gói tích hợp đơn giản với diện tích nhỏ hơn bộ dao động thạch anh và các thành phần hỗ trợ của nó. Tuy nhiên, giống như bộ dao động thạch anh, chúng nhạy cảm với các yếu tố môi trường, bao gồm nhiệt độ, độ ẩm, rung động và nhiễu điện.

PLL (Phase-Locked Loop) và FLL (Frequency-Locked Loop)

    PLL và FLL thực tế không phải nguồn cấp clock vì bản thân chúng không sinh ra clock. Về cơ bản sử dụng điều khiển pha chính xác của PLL với tốc độ khóa nhanh hơn của FLL để tạo ra tín hiệu clock có độ chính xác cao và ổn định.

PLL FLL Clock

  • PLL (Vòng khóa pha)Mạch này chủ động điều chỉnh pha của tín hiệu được tạo ra để khớp chính xác với pha của tín hiệu tham chiếu, đảm bảo độ chính xác cao về thời gian.
  • FLL (Vòng khóa tần số)Mạch này điều chỉnh tần số của tín hiệu được tạo ra để khớp với tần số của tín hiệu tham chiếu, thường đạt được thời gian khóa nhanh hơn so với PLL.

    PLL và FLL sẽ lấy đầu vào là Internal Clock hoặc External Clock sau đó để cấu hình lên các tần số cao hơn, nên trong một số tài liệu, 2 bộ trên không được coi là nguồn cấp clock.

    Để hiểu rõ hơn về xung clock, bạn nên tìm hiểu cụ thể về clock trong một số dòng vi điều khiển khác nhau!

Low-Speed External (LSE) Clock

    Loại clock này sử dụng tinh thể ngoài với tần số thấp (thường là 32.768 kHz). Chủ yếu dùng cho các chức năng RTC (Real-Time Clock). Với ưu điểm là tiết kiệm năng lượng tối đa, phù hợp cho các ứng dụng thời gian thực, không yêu cầu tốc độ cao.

    Xem thêm

    Clock Tree trong Vi điều khiển STM32

>>>>>> Follow ngay <<<<<<<

Để nhận được những bài học miễn phí mới nhất nhé 😊
Chúc các bạn học tập tốt 😊

Nguyễn Văn Nghĩa

Mình là một người thích học hỏi và chia sẻ các kiến thức về Nhúng IOT.

Đăng nhận xét

Mới hơn Cũ hơn