🌱 STM32 - 22. Ngoại vi ADC trong STM32

🌱 STM32 - 22. Ngoại vi ADC trong STM32

    bài viết trước mình đã giới thiệu tổng quan về ADC, các loại ADC và tổng quát về bộ ADC trong Vi điều khiển STM32. Ở bài viết này, mình sẽ làm rõ hơn về một số đặc điểm các bạn cần lưu ý khi làm việc với ADC trong STM32, đó là Lấy mẫu ADC (Sampling), chuyển đổi Regular và Injected, Analog Watchdog, ...

    Thông thường, đối với một bộ ADC, bên cạnh độ phân giải thì tốc độ chuyển đổi cũng rất quan trọng. Trong vi điều khiển STM32, chúng ta có thể tính được tốc độ chuyển đổi của bộ ADC bằng cách sau:

Tổng thời gian chuyển đổi = Thời gian lấy mẫu tín hiệu + thời gian chuyển đổi

    Trong đó, đối với bộ ADC xấp xỉ liên tiếp, với độ phân giải N-bit, thì thời gian chuyển đổi sẽ là N chu kỳ clock. Còn đối với Thời gian lấy mẫu tín hiệu, chúng ta có thể cấu hình như dưới đây. 

    👉 ADC Sampling (Lấy mẫu ADC)

ADC Sampling

    Như post trước đã giới thiệu thì ngoại vi ADC trong STM32 sử dụng nguồn cấp xung clock là APB2, với một bộ chia với hệ số /2/4/6/8. Tạo thành tín hiệu ADCCLK, nguồn clock này có thể cùng với cấu hình 3 bit SMP[2:0] của thanh ghi ADC_SMPR1 ADC_SMPR2 để tạo ra các Sampling time từ 1.5 đến 239.5 chu kỳ clock

    👉 Regular and Injected Conversions

    Vi điều khiển STM32 hỗ trợ 2 chế độ chuyển đổi ADC: RegularInjected. Lí do có 2 chế độ này, là STM32 hỗ trợ đến 19 kênh đầu vào ADC, nhưng chúng lại sử dụng chung một thanh ghi dữ liệu. 

    ➤ Thực tế chúng ta cần xét đến 3 chế độ chuyển đổi dữ liệu: 

  • Single: ADC chỉ đọc 1 kênh duy nhất, và chỉ đọc khi nào được yêu cầu.
  • Single Continous: ADC sẽ đọc một kênh duy nhất, nhưng đọc dữ liệu nhiều lần liên tiếp (Có thể được biết đến như sử dụng DMA để đọc dữ liệu và ghi vào bộ nhớ). 
  • Scan: Multi-Channels: Quét qua và đọc dữ liệu nhiều kênh, nhưng chỉ đọc khi nào được yêu cầu.
  • Scan: Continous Multi-Channels Repeat: Quét qua và đọc dữ liệu nhiều kênh, nhưng đọc liên tiếp nhiều lần giống như Single Continous. 

    Với các chế độ quét nhiều kênh, có thể thấy các kênh có thể được đọc lần lượt, và mỗi kênh sau khi chuyển đổi xong sẽ tạo ra một tín hiệu trigger báo chuyển đổi xong. Nếu như mọi thứ diễn ra bình thường và các kênh được đọc tuần tự, đó chính là Regular Conversion, các tín hiệu báo một kênh hoạt động là Regular Trigger.

    ➤ Một trường hợp khác (Ở đây chúng ta có thể tư duy giống như làm việc với ngắt), đó là nếu như các kênh đọc lần lượt như vậy, thì có thể lỡ đi những kênh quan trọng cần ưu tiên chuyển đổi trước.

Injected Conversion

     ADC cung cấp cho người dùng Injected Conversion, khi kênh có mức độ ưu tiên cao hơn có thể tạo ra một Injected Trigger. Khi gặp Injected Trigger thì ngay lập tức kênh đang hoạt động bị ngưng lại để kênh được ưu tiên kia có thể hoạt động, sau đó, kênh bị ngưng mới có thể hoạt động tiếp (Khá giống ngắt). Các Injected Conversion này có các thanh ghi lưu kết quả riêng và các thanh ghi offset. 

    👉 Analog Watchdog

    Analog Watchdog là một tính năng khá hữu ích của ADC, nó dùng để cảnh báo khi tín hiệu điện áp đầu vào vượt qua một ngưỡng nào đó. 

    Thông thường, để kiểm tra một điện áp nào đó có vượt ngưỡng cho phép hay không, chúng ta phải liên tục đọc ADC và liên tục kiểm tra, gây mất thời gian và tài nguyên của Vi điều khiển. Rất nhiều ứng dụng chỉ cần sử dụng cảnh báo như vậy mà không cần quan tâm những mức điện áp khác: Mạch phát hiện điểm không, mạch cảnh báo cháy, cảnh báo quá nhiệt độ, quá mức nước, ... 

    ➤ Tính năng Analog Watchdog cho phép việc kiểm tra triển khai trên phần cứng, và tiết kiệm thời gian hơn. Bạn chỉ cần setup thông số điện áp ngưỡng (Low Threshold Value và High Threshold Value), cài đặt chế độ Interrupt. Khi điện áp vào vượt quá một trong 2 giá trị ngưỡng thì sẽ sinh ra một ngắt.

Analog Watchdog
   
    Trên đây là một số tính năng cơ bản của ngoại vi ADC trong Vi điều khiển STM32 mà mình muốn giới thiệu, ngoài ra còn một số tính năng khác các bạn có thể xem thêm trong tài liệu Reference Manual của từng Vi điều khiển. 

>>>= 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.

2 Nhận xét

Mới hơn Cũ hơn