Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Mac

Làm chủ dữ liệu cảm biến trên Vi điều khiển: Hướng dẫn từng bước cho người mới

Trong thế giới ngày nay, máy tính phổ biến và thường phục vụ hai mục đích chính.

Thứ nhất là điện toán đa năng, xử lý nhiều tác vụ đa dạng, chạy ứng dụng và chương trình khác nhau. Ví dụ: laptop, máy để bàn, server, siêu máy tính.

Thứ hai là hệ thống nhúng (embedded systems), máy tính chuyên dụng thiết kế cho chức năng cụ thể. Thường thấy trong thiết bị như bộ điều nhiệt, tủ lạnh, ô tô, và thiết bị thông minh khác, chúng dựa vào cảm biến thu thập dữ liệu môi trường và thực thi nhiệm vụ hiệu quả.

Vai trò của Cảm biến

Cảm biến đóng vai trò then chốt trong cả hai loại điện toán. Trong hệ thống nhúng, cảm biến thu thập dữ liệu môi trường giúp thiết bị như xe tự lái, thiết bị gia đình, máy móc công nghiệp thực hiện nhiệm vụ. Trong máy tính đa năng, cảm biến chủ yếu giám sát điều kiện nội bộ như nhiệt độ và điện áp, đảm bảo an toàn, ngăn ngừa quá nhiệt hoặc lỗi điện.

Khi Trí tuệ nhân tạo (AI) và Internet vạn vật (IoT) phát triển, cảm biến trở nên không thể thiếu để thu thập dữ liệu thực hỗ trợ quyết định thông minh. Hệ thống nhúng tận dụng cảm biến để cảm nhận môi trường, chuyển dữ liệu thô thành thông tin hành động thúc đẩy tự động hóa và cải thiện hiệu quả across các ngành.

Điều này có nghĩa là hiểu giao diện cảm biến và thiết kế phần mềm điều khiển cảm biến vững chắc đã trở thành kỹ năng sống còn cho kỹ sư và người đam mê.

Dù bạn là người mới hay kỹ sư giàu kinh nghiệm, hướng dẫn này sẽ giúp bạn xây dựng hiểu vững chắc về phần mềm giao diện cảm biến.

Bạn sẽ học gì và phạm vi bài viết

Trong bài này, bạn sẽ học cách kết nối cảm biến với vi điều khiển (MCU) và thiết kế đường ống (pipeline) phần mềm cảm biến chuyển dữ liệu thô thành thông tin có nghĩa, có thể dùng. Bạn cũng sẽ khám phá kỹ thuật thực tế xử lý dữ liệu cảm biến chính xác và hiệu quả trong hệ thống nhúng.

Phân tích nội dung:

  • Cảm biến là gì và cách hoạt động — Giới thiệu cảm biến, loại phổ biến, và cách pipeline cảm biến giúp xử lý dữ liệu.
  • Đặc điểm quan trọng của cảm biến — Tham số quan trọng như độ nhạy, độ chính xác, độ chính xác (precision), phạm vi, trôi (drift), thời gian phản hồi để chọn cảm biến phù hợp.
  • Cách giao diện cảm biến với vi điều khiển — Kết nối phần cứng và giao thức truyền thông như SPI, I²C, GPIO cho MCU đọc dữ liệu cảm biến.
  • Kiến trúc phần mềm cho dữ liệu cảm biến — Tổng quan cấp cao pipeline xử lý dữ liệu, bao gồm driver, hỗ trợ ADC, scale,校准 (calibration), hậu xử lý.
  • Thiết kế chi tiết thành phần pipeline — Xem gần từng bước: scale dữ liệu thô,校准 cảm biến, áp dụng bộ lọc làm sạch tín hiệu nhiễu.
  • Mẹo thực tế quản lý năng lượng — Thực hành tốt cho năng lượng hiệu quả dùng low-power mode, FIFO buffer, DMA khi làm việc dữ liệu cảm biến trong nhúng.

Cuối bài, bạn sẽ biết cách thiết kế và triển khai pipeline dữ liệu cảm biến hoàn chỉnh cho hệ thống nhúng, từ đọc dữ liệu thô đến chuẩn bị cho dùng thực tế trong thiết bị thông minh, kết nối.

Lưu ý: Xử lý dữ liệu nâng cao, ADC độ phân giải cao, và thiết kế mạch phần cứng cho cảm biến nằm ngoài phạm vi bài này.

Điều kiện tiên quyết

Để tận dụng bài này, bạn nên có:

  1. Kiến thức cơ bản vi điều khiển: Hiểu ngoại vi phổ biến như ADC (Analog-to-Digital Converter), SPI (Serial Peripheral Interface), I2C (Inter-Integrated Circuit) và GPIO (General Purpose Input/Output). Nếu mới với giao thức này, bài này cung cấp tổng quan tốt.
  2. Kiến thức điện tử cơ bản: Quen mạch và tín hiệu, bao gồm giao diện analog và digital.
  3. Lập trình C: Quen phát triển phần mềm nhúng, bao gồm phát triển driver.
  4. (Tùy chọn) Kiến thức cơ bản cảm biến: Hiểu loại cảm biến khác nhau (nhiệt độ, áp suất, chuyển động) hữu ích nhưng không bắt buộc.

Cũng, bài này giả định:

  • Bạn làm việc với vi điều khiển trang bị ngoại vi cần cho tích hợp cảm biến. Chi tiết ngoại vi MCU tìm trong manual tham chiếu, ví dụ STM32F4 series sẽ có mọi chi tiết.
  • Bạn quen trình biên dịch, debugger, IDE dùng trong nhúng. Công cụ phổ biến:
    • Compiler: GCC, Clang
    • Debugger: GDB, LLDB
    • IDE: Visual Studio Code (VSCode) phổ biến, đặc biệt với extension cho phát triển/gỡ lỗi nhúng.
  • Bạn nhằm xây dựng hệ thống nhúng điều khiển cảm biến tin cậy, thu thập và xử lý dữ liệu thực hiệu quả.

Mục lục

  • Cảm biến và Pipeline cảm biến là gì?
  • Đặc điểm cảm biến
  • Cách giao diện với Vi điều khiển
  • Kiến trúc phần mềm
    • Tổng quan cấp cao thành phần
    • Truy cập dữ liệu từ cảm biến
    • Quản lý năng lượng cảm biến
  • Thiết kế chi tiết thành phần
    • 1. Driver cảm biến
    • 2. Hỗ trợ ADC
    • 3. Scale (Chuyển đổi)
    • 4. Calibration (Hiệu chuẩn)
    • 5. Hậu xử lý dữ liệu
  • Kết luận

Cảm biến và Pipeline cảm biến là gì?

Cảm biến phát hiện thay đổi tính chất vật lý như nhiệt độ, áp suất, ánh sáng và chuyển thành tín hiệu điện có thể đo hoặc giải thích. Ví dụ, thermistor là điện trở thay đổi điện trở theo nhiệt độ. Khi nhiệt độ thay đổi, điện trở thermistor thay đổi, làm thay đổi điện áp trên nó. Hệ thống sau đó giải thích thay đổi điện áp để xác định nhiệt độ.

Để hiểu cảm biến tốt hơn, xem cảm biến tự nhiên trong cơ thể: mắt, tai, da, mũi, lưỡi. Những cảm biến tự nhiên liên tục gửi tín hiệu môi trường đến não để xử lý. Các vùng não khác nhau giải thích tín hiệu và dùng thông tin để điều khiển hành động và phản ứng. Giống như não xử lý tín hiệu từ cảm biến tự nhiên, vi điều khiển xử lý tín hiệu từ cảm biến điện tử dùng pipeline cảm biến.

Cảm biến có nhiều loại, mỗi loại thiết kế phát hiện tính chất vật lý cụ thể. Một số có yếu tố cảm biến thay đổi thuộc tính phản ứng điều kiện như nhiệt, ánh sáng, áp suất. Ví dụ: thermistor, thu hồng ngoại, photodiode.

Để phát hiện chuyển động như gia tốc và quay, cảm biến MEMS (Microelectromechanical Systems) — như gia tốc kế và con quay hồi chuyển — phổ biến.

Để đo khoảng cách, cảm biến như sonar, siêu âm, radar phổ biến. Chỉ là vài ví dụ trong nhiều loại cảm biến.

Ngoài loại tính chất vật lý phát hiện, cảm biến cũng khác nhau về mức độ tích hợp. Một số là cảm biến thô (raw sensor), chỉ có yếu tố cảm biến và bộ chuyển đổi với chân đơn giản kết nối trực tiếp mạch ngoài.

Khác, gọi là cảm biến thông minh (smart sensor), bao gồm thành phần thêm như ADC (analog-to-digital converter) và khả năng xử lý onboard, cho phép xử lý độc lập nhiều dữ liệu hơn.

Lựa chọn giữa cảm biến thô và thông minh phụ thuộc yêu cầu ứng dụng: chi phí, kích thước, tải xử lý trên MCU giao diện.

Quay lại ví dụ con người, xem thị giác như pipeline cảm biến. Khi ánh sáng vào mắt, tế bào thụ quang (que và nón) trên võng mạc đóng vai yếu tố cảm biến, chuyển ánh sáng thành tín hiệu điện. Tín hiệu đi qua thần kinh thị giác đến vỏ não thị giác, nơi xử lý hình thành hình ảnh nhận diện. Não sau đó giải thích thông tin và khởi động phản ứng, như cười khi thấy phong cảnh đẹp.

Tương tự, pipeline cảm biến cho hệ thống nhúng có thể định nghĩa như hình dưới:

Làm chủ dữ liệu cảm biến trên Vi điều khiển: Hướng dẫn từng bước cho người mới

Mỗi bước có yêu cầu khác nhau tùy ứng dụng. Tạo tài liệu yêu cầu cảm biến giúp chọn cảm biến phù hợp và cấu hình pipeline.

Đặc điểm cảm biến

Trước khi đi vào khối pipeline cảm biến, xem lại vài đặc điểm quan trọng.

Độ nhạy (Sensitivity)

Độ nhạy là khả năng cảm biến phát hiện thay đổi nhỏ trong tính chất vật lý nó thiết kế đo.

Độ nhạy có thể khác nhau do quy trình sản xuất, chi phí, thiết kế yếu tố cảm biến.

Cảm biến thiết kế cho tính chất cụ thể thường có nhiều mức độ nhạy, cho phép người dùng chọn độ nhạy phù hợp yêu cầu ứng dụng.

Độ chính xác (Accuracy)

Độ chính xác là mức độ đo lường của cảm biến khớp với giá trị thật của tính chất vật lý nó đo. Kiểm tra độ chính xác thường so sánh đọc cảm biến với thiết bị tham chiếu.

Cảm biến có thể sai số gain và offset — vấn đề calibration có thể sửa. Calibration điều chỉnh sai số hệ thống, thường do dung sai sản xuất hoặc thiết kế.

Sau khi calibrated, đầu ra cảm biến kiểm tra lại với tham chiếu để xác nhận độ chính xác. Mức độ chính xác yêu cầu xác định dựa trên nhu cầu ứng dụng.

Độ chính xác (Precision)

Precision (độ chính xác/độ lặp lại) chỉ sự nhất quán hoặc khả năng lặp lại đo lường của cảm biến, bất kể gần giá trị thật hay không. Chỉ khả năng sản xuất cùng đầu ra dưới điều kiện giống nhau và độ mहीn nó phân giải và báo cáo giá trị.

Ví dụ, nhiệt độ thật vật thể là 12.53°C:

  • Cảm biến precise (chính xác/độ lặp lại cao) sẽ đo nhất quán 12.52°C, 12.53°C, 12.54°C, dù hơi lệch giá trị thật.
  • Cảm biến highly accurate (độ chính xác cao) đo gần 12.53°C nhưng có thể thiếu precision nếu đọc dao động rộng (12.50°C, 12.53°C, 12.56°C).

Ứng dụng yêu cầu đo chính xác cần cảm biến cả high accuracy (gần giá trị thật) và high precision (độ biến thiên thấp). Đặc biệt quan trọng phân biệt chênh lệch nhỏ, như 12.5°C và 12.53°C.

Ngược lại, ứng dụng yêu cầu kém chặt chẽ có thể dùng cảm biến dung sai rộng, như ±1°C, đủ cho giám sát chung.

Phạm vi (Range)

Phạm vi cảm biến là khoảng giữa giá trị max và min của tính chất vật lý nó đo được trong khi giữ precision và accuracy quy định. Phạm vi hoạt động có thể rộng hơn phạm vi đo, nhưng phạm vi đo định nghĩa giới hạn cảm biến tuân thủ độ nhạy, độ chính xác, thời gian phản hồi quy định.

Trôi (Drift)

Drift là khi đầu ra cảm biến thay đổi theo thời gian do điều kiện như nhiệt độ hoặc độ ẩm. Thành phần trong cảm biến, kể cả yếu tố cảm biến, có thể nhạy với điều kiện này, dẫn đến dịch chuyển dần đo lường.

Ví dụ, nhiều thành phần bị ảnh hưởng bởi thay đổi nhiệt độ/độ ẩm, làm thay đổi đọc cảm biến. Cảm biến có dao động nội bộ cũng có thể trôi theo thời gian, ảnh hưởng độ chính xác.

Calibration định kỳ với tham chiếu chính xác bên ngoài (như đồng hồ chính xác) giúp sửa drift và duy trì đo lường tin cậy. Với ứng dụng nhất định, chọn cảm biến có đặc tính drift chấp nhận được là then chốt.

Thời gian phản hồi (Response Time)

Thời gian phản hồi là thời lượng cảm biến mất để phát hiện và phản ánh thay đổi tính chất vật lý đo. Ví dụ, nếu nhiệt độ tăng 5°C, response time chỉ bao lâu cảm biến nhiệt độ phản ánh thay đổi này trong đầu ra.

Response time phụ thuộc thiết kế cảm biến, chất lượng sản xuất, và thành phần nội bộ như ADC, mạch trung bình, và bộ lọc trong pipeline cảm biến.

Tất cả tham số trên được ghi chi tiết trong datasheet cảm biến. Thực tế, tốt nhất tạo tài liệu yêu cầu cảm biến cho mỗi ứng dụng cụ thể, chi tiết các tham số chính làm cơ sở chọn cảm biến.

Sau khi xem đặc điểm cảm biến, hãy khám phá cách kết nối chúng với vi điều khiển cho ứng dụng thực.

Cách giao diện với Vi điều khiển

Chọn giao thức truyền thông

Khía cạnh thiết yếu khác của yêu cầu cảm biến là chỉ định giao diện truyền thông giữa cảm biến và MCU hoặc processor trong hệ thống. Quan trọng hiểu cảm biến sẽ giao diện như thế nào dựa trên loại tín hiệu đầu ra và chân có sẵn trên vi điều khiển.

Ví dụ, cảm biến nhất định kết nối trực tiếp chân analog hoặc digital input trên MCU. Cảm biến thô (raw sensor), như cảm biến nhiệt độ, thường kết nối chân analog input, sau đó đọc bằng ADC nội bộ MCU.

Ngược lại, cảm biến đầu ra digital kết nối chân GPIO (General Purpose Input/Output) digital. Ví dụ, cảm biến tốc độ tạo sóng vuông độ rộng xung biến đổi chỉ tốc độ. Tín hiệu thường kết nối chân GPIO cấu hình ngắt ngoài hoặc timer capture input, cho MCU đo độ rộng xung chính xác.

Cảm biến thông minh (smart sensor) thường hỗ trợ giao thức như SPI (Serial Peripheral Interface) hoặc I2C (Inter-Integrated Circuit). Giao diện này cho phép MCU cấu hình cảm biến, kiểm tra trạng thái, và lấy dữ liệu qua đọc/ghi thanh ghi.

Chọn giao thức truyền thông phù hợp giao diện cảm biến phụ thuộc chân có sẵn trong hệ thống và yêu cầu cụ thể ứng dụng.

Mẹo: Khi làm việc với I²C hoặc SPI, dùng công cụ như Saleae logic analyzers đơn giản hóa debug và validation rất nhiều. Logic analyzer bắt và hình dung tín hiệu truyền thông, Saleae có trình thông dịch giao thức built-in giúp giải mã truyền thông cảm biến real-time. Rất hữu ích khi troubleshoot vấn đề cấu hình, timing, hoặc lỗi truyền thông khi giao diện cảm biến.

Hình 2 dưới minh họa ví dụ MCU kết nối 4 cảm biến giao diện khác nhau.

Làm chủ dữ liệu cảm biến trên Vi điều khiển: Hướng dẫn từng bước cho người mới

Xác định yêu cầu nguồn

Yêu cầu nguồn là 고려 quan trọng khác khi giao diện cảm biến. Cảm biến có thể hoạt động điện áp khác nhau (ví dụ 3.3V hoặc 5V), nên đảm bảo MCU đáp ứng được mức này là thiết yếu. Bộ chuyển đổi mức (level converters) có thể khắc phục mismatch điện áp, đảm bảo tương thích giữa cảm biến và MCU.

Yêu cầu timing và lấy mẫu cũng phải đánh giá, đặc biệt cảm biến sinh dữ liệu tần số cao. Cấu hình ngắt ngoài trên chân GPIO đảm bảo lấy dữ liệu kịp thời, kỹ thuật như DMA hợp lý hóa truyền dữ liệu cảm biến lấy mẫu tần số cao không can thiệp CPU.

Sau khi học giao thức và kết nối phần cứng, tập trung thiết kế kiến trúc phần mềm thu thập, xử lý, chuẩn bị dữ liệu cảm biến để dùng. Thiết kế phần mềm hiệu quả then chốt để lấy dữ liệu sạch, tin cậy từ cảm biến.

Kiến trúc phần mềm

Sau khi chọn cảm biến và giao thức, thiết kế kiến trúc phần mềm pipeline cảm biến. Phần mềm này chạy trên MCU kết nối cảm biến và xử lý dữ liệu thô thành sạch, dùng được.

Vì xử lý dữ liệu cấp ứng dụng ngoài phạm vi, tập trung vào giao diện cảm biến và chuẩn bị dữ liệu cho ứng dụng.

Pipeline xử lý cảm biến chia thành thành phần sau:

  1. Driver cảm biến
  2. Hỗ trợ Analog-to-Digital Conversion (ADC)
  3. Scale (Chuyển đổi)
  4. Calibration (Hiệu chuẩn)
  5. Hậu xử lý dữ liệu

Xem tổng quan cấp cao các thành phần cho cả cảm biến thông minh và thô.

Tổng quan cấp cao thành phần

  1. Driver cảm biến

    1. Cảm biến thông minh: Driver cấu hình cảm biến, quản lý năng lượng, xử lý đọc/ghi thanh ghi qua giao thức SPI, I2C.
    2. Cảm biến thô: Driver chỉ điều khiển GPIO cho quản lý năng lượng, vì cảm biến thô thường không có thanh ghi.
  2. Hỗ trợ Analog-to-Digital Conversion (ADC)

    1. Cảm biến thông minh: Có ADC onboard, cấu hình qua driver cảm biến.
    2. Cảm biến thô: Yêu cầu ADC ngoài, driver ADC triển khai phần mềm cấu hình ADC, khởi động chuyển đổi, lấy dữ liệu.
  3. Scale (Chuyển đổi): Scale cần cho cả hai loại. Chuyển đổi số đếm (digital counts) sau chuyển đổi analog-sang-digital thành đại lượng vật lý có nghĩa dùng công thức trong datasheet. Ví dụ, cảm biến nhiệt độ dùng công thức chuyển số đếm sang độ C.

  4. Calibration (Hiệu chuẩn): Sau khi có đại lượng vật lý đo được, calibration điều chỉnh giá trị bằng offset, gain, hoặc cả hai để sửa lỗi. Quá trình này đảm bảo đầu ra cảm biến căn chỉnh với giá trị tham chiếu trên toàn phạm vi đo. Thảo luận chi tiết calibration ở phần sau.

  5. Hậu xử lý dữ liệu: Kỹ thuật hậu xử lý như lọc (filtering) áp dụng cải thiện chất lượng dữ liệu và giảm nhiễu. Bộ lọc phổ biến như low-pass hoặc high-pass loại bỏ thành phần tần số không mong muốn.

Truy cập dữ liệu từ cảm biến

Cách truy cập dữ liệu phụ thuộc cảm biến thô hay thông minh. Cảm biến thông minh có ADC onboard và FIFO. Trước khi đi vào cách truy cập, quan trọng hiểu tần số lấy mẫu.

Tần số lấy mẫu (Sampling Frequency):

Tần số đo từ cảm biến phải tuân theo định lý Nyquist-Shannon. Nêu tần số lấy mẫu phải gấp đôi tần số cao nhất của tín hiệu đo để tái tạo chính xác dữ liệu.

Tần số lấy mẫu định nghĩa tần suất cảm biến thu dữ liệu, ảnh hưởng cách dữ liệu được truy cập. Tùy cảm biến thô hay thông minh, cách xử lý dữ liệu lấy mẫu khác.

Cảm biến thông minh (Smart Sensors):

  1. Thanh ghi dữ liệu (Data register): Cảm biến ghi dữ liệu lấy mẫu trực tiếp vào thanh ghi dựa trên tần số lấy mẫu cài đặt lúc setup. MCU đọc thanh ghi này dựa trên ngắt hoàn tất chuyển đổi dữ liệu.
  2. Buffer FIFO: Một số cảm biến có buffer FIFO (First-In, First-Out) lưu nhiều điểm dữ liệu. Khi bật, FIFO cập nhật theo tần số lấy mẫu cấu hình và kích hoạt ngắt khi đầy hoặc đạt mức định trước.
    Lợi ích FIFO:
    1. Hiệu quả năng lượng: MCU xử lý dữ liệu theo lô (batch), giảm overhead CPU, cho phép vào low-power mode khi thu thập dữ liệu.
    2. Khớp tần số lấy mẫu và xử lý: Buffer FIFO giúp hòa giải chênh lệch giữa tần số lấy mẫu cảm biến và tần số xử lý dữ liệu MCU.
    3. Với MCU có DMA (Direct Memory Access), truyền dữ liệu từ cảm biến đến bộ nhớ MCU xảy ra không can thiệp CPU, giảm tiêu thụ năng lượng hơn.

Cảm biến thô (Raw Sensors):

Đối với cảm biến thô, MCU kích hoạt chuyển đổi ADC tại tần số lấy mẫu, thường dùng ngắt timer. Dữ liệu đọc khi ngắt chuyển đổi ADC hoàn tất, cho phép MCU ngủ khi chuyển đổi và giữa các lần lấy mẫu để tiết kiệm năng lượng.

Quản lý năng lượng cảm biến

Quản lý năng lượng then chốt cho ứng dụng nhạy năng lượng. Chiến lược:

  1. Chế độ thấp năng lượng (Low-power modes): Nhiều cảm biến hỗ trợ low-power mode cấu hình qua thanh ghi cảm biến.
  2. Điều khiển nguồn GPIO (Duty-Cycling): Cho cảm biến không có low-power mode built-in, MCU có thể bật/tắt đường nguồn cảm biến dùng chân GPIO, giảm tiêu thụ hơn. Hình 3 dưới sơ đồ cảm biến nhiệt độ thô nguồn điều khiển bằng GPIO từ MCU. Ví dụ, cảm biến nhiệt độ ở sleep mode chỉ kích hoạt khi cần đọc nhiệt độ.

Làm chủ dữ liệu cảm biến trên Vi điều khiển: Hướng dẫn từng bước cho người mới

Kỹ thuật trên đảm bảo dùng năng lượng hiệu quả đồng thời giữ tần số lấy mẫu và độ phản hồi cảm biến yêu cầu.

Với kiến trúc cấp cao, chúng ta đi sâu thiết kế chi tiết từng thành phần pipeline.

Thiết kế chi tiết thành phần

Phần này đi sâu các thành phần chính pipeline cảm biến nêu ở phần Kiến trúc phần mềm.

1. Driver cảm biến

Driver cảm biến chịu trách nhiệm quản lý truyền thông, cấu hình, năng lượng, và thu thập dữ liệu cho cả cảm biến thông minh và thô.

Driver cảm biến thông minh:

  1. Driver truyền thông: Driver I2C hoặc SPI chung trên MCU thích ứng dùng wrapper function xử lý yêu cầu cảm biến cụ thể, như truyền 1-byte, 2-byte, 4-byte.
  2. Cấu hình: Nhiệm vụ điển hình: đặt tần số lấy mẫu, cấu hình ngắt, quản lý buffer FIFO, và nếu cần, cài đặt clock.
  3. Quản lý năng lượng: API cho phép lớp phần mềm cao hơn chuyển cảm biến giữa chế độ năng lượng bằng ghi thanh ghi cụ thể hoặc điều khiển GPIO cho cảm biến không có chế độ năng lượng built-in.

Driver cảm biến thô:

Đối với cảm biến thô, driver chủ yếu quản lý năng lượng, thường qua bật/tắt GPIO.

2. Hỗ trợ ADC

Hỗ trợ ADC chỉ cần cho cảm biến thô. Bài này tập trung SAR ADC, thường nhúng trong vi điều khiển.

Cách SAR ADC hoạt động?

SAR ADC chuyển tín hiệu analog sang giá trị digital qua nhiều chu kỳ clock, số chu kỳ = độ phân giải bit (ví dụ, 10 chu kỳ cho ADC 10-bit).

  1. Điện áp tham chiếu (VRef): Đại diện điện áp tối đa ADC đo được. Tín hiệu analog vượt giới hạn phải scale xuống.
  2. Độ phân giải (Resolution): Xác định thay đổi điện áp nhỏ nhất phát hiện. Ví dụ, ADC 10-bit với VRef 3.3V có độ phân giải 3.22 mV

$$V_{\text{Res}} = V_{\text{Ref}} /2^{10}$$

Kết quả ADC lưu trong thanh ghi dữ liệu, sau đó scale sang đơn vị vật lý có nghĩa.

3. Scale (Chuyển đổi)

Scale chuyển số đếm ADC thành giá trị vật lý có nghĩa, như nhiệt độ (°C) hoặc gia tốc (g) tùy loại cảm biến. Datasheet thường cung cấp công thức hoặc bảng tra cứu.

Ví dụ, phương pháp chuyển điện áp đo bởi cảm biến nhiệt độ thô sang giá trị nhiệt độ:

$$V_{\text{Measured}} = Counts_{\text{ADC}} / 2^{10} * V_{\text{Ref}} \quad \text{(Lấy V_Measured từ ADC Counts)}$$

$$Temperature_{\text{Measured}} = V_{\text{Measured}} * T_{\text{C/mV}} \quad \text{(Lấy giá trị nhiệt độ vật lý)}$$

Tương tự, gia tốc kế 3 trục ánh xạ số đếm trục X, Y, Z sang giá trị gia tốc g hoặc milli-g.

4. Calibration (Hiệu chuẩn)

Làm chủ dữ liệu cảm biến trên Vi điều khiển: Hướng dẫn từng bước cho người mới

Hình bên trái (4a) thể hiện Calibration với gain và offset, hình bên phải (4b) thể hiện calibration với offset cố định.

$$x_{\text{calibrated}} = Gain * x_{\text{raw}} + Offset \quad \text{(Hình 4a - Calibration tuyến tính)}$$

$$x_{\text{calibrated}} = x_{\text{raw}} + Offset \quad \text{(Hình 4b - Calibration offset cố định)}$$

Calibration đảm bảo đầu ra cảm biến căn chỉnh với đo lường tham chiếu, sửa lỗi do thiết kế, vật liệu, sản xuất.

Loại lỗi:

  1. Lỗi Offset (Offset error): Độ lệch hằng số đầu ra cảm biến so với giá trị tham chiếu thật, bất kể độ lớn đầu vào.
  2. Lỗi Gain (Gain error): Lỗi tỷ lệ nơi thang đo đầu ra cảm biến lệch giá trị kỳ vọng, khiến đầu ra tăng/giảm sai tỷ lệ so với đầu vào.

Phương pháp Calibration:

  1. Calibration 2/3 điểm: Có thể áp dụng offset cố định cho giá trị thô hoặc cả gain và offset. Hình 4a minh họa gain/offset calibration, Hình 4b offset calibration. Trong cả hai, trục tung là giá trị tham chiếu do thiết bị chính xác đo, trục hoành là giá trị thô cảm biến sau ADC.
  2. Calibration N điểm: Đa điểm cho sửa lỗi phi tuyến phức tạp hơn.

Triển khai:

  1. Điểm calibration phải phủ toàn phạm vi đo cảm biến để chính xác.
  2. Tham số gain, offset sau ước lượng lưu trong bộ nhớ không bay hơi (non-volatile memory) trong hệ thống để bền vững qua chu kỳ nguồn.

5. Hậu xử lý dữ liệu

Hậu xử lý ở phần này nói về loại bỏ nhiễu và thành phần tín hiệu không mong muốn, cải thiện độ tin cậy dữ liệu.

Lọc (Filtering)

Lọc là quá trình loại bỏ thành phần tần số không mong muốn từ tín hiệu để cải thiện chất lượng dữ liệu. Có vài loại bộ lọc:

  • Bộ lọc Low-Pass: Cho tín hiệu tần số thấp qua, giảm tần số cao (nhiễu).
  • Bộ lọc High-Pass: Cho tín hiệu tần số cao qua, giảm tần số thấp (ví dụ, gia tốc trọng trường trong dữ liệu gia tốc kế).
  • Bộ lọc Band-Pass: Giữ tín hiệu trong dải tần số cụ thể, loại bỏ tần số thấp và cao ngoài dải mong muốn.

Bộ lọc thường triển khai dạng FIR (Finite Impulse Response) hoặc IIR (Infinite Impulse Response). IIR dễ triển khai, hiệu quả tính toán, FIR tốn tính toán hơn nhưng kiểm soát đáp ứng tần số tốt hơn.

Ở đây, khám phá bộ lọc low-pass đơn giản gọi là Exponential Moving Average (EMA), loại IIR filter. Bộ lọc trung bình động là kỹ thuật toán học làm mượt biến động ngắn hạn, nổi bật xu hướng dài hạn.

Khác các bộ lọc trung bình động khác, EMA không yêu cầu duy trì buffer, tiết kiệm bộ nhớ hơn. Nó cũng phản ứng nhanh hơn thay đổi dữ liệu mà vẫn làm mượt, phù hợp lọc real-time. EMA gán trọng số lớn hơn cho mẫu dữ liệu gần hơn so với cũ, cho phép thích ứng nhanh thay đổi đọc cảm biến.

EMA tính như sau:

$$EMA_{\text{t}} = \alpha * x_{\text{t}} + (1 - \alpha) * EMA_{\text{t - 1}}$$

$$\alpha = 2 / (N + 1) \quad \text{(Hệ số làm mượt, N - kích thước cửa sổ lọc)}$$

$$EMA_{\text{t}} \quad \text{(Exponential Moving Average vòng lặp hiện tại)}$$

$$x_{\text{t}} \quad \text{(Mẫu dữ liệu mới vòng lặp hiện tại)}$$

$$EMA_{\text{t - 1}} \quad \text{(Exponential Moving Average vòng lặp trước)}$$

Hiểu EMA, đây là hai yếu tố then chốt khi tinh chỉnh cho ứng dụng:

  • Làm mượt vs. Phản ứng: Hệ số làm mượt cao (gần 1, cửa sổ nhỏ) trọng số dữ liệu gần, lọc phản ứng nhanh thay đổi nhưng giảm nhiễu kém. Hệ số thấp (gần 0, cửa sổ lớn) giảm nhiễu tốt nhưng phản ứng chậm.
  • Tinh chỉnh theo ứng dụng: Hệ số làm mượt chọn dựa trên tần số lấy mẫu, độ nhạy cảm biến, yêu cầu ứng dụng. Hệ thống real-time thường cần cân bằng phản ứng nhanh và đầu ra ổn định.

Mẫu code EMA:

#include 
#include 
// Exponential Moving Average (EMA) filter implementation
#define FILTER_WINDOW 5
// Function to calculate EMA
float calculateEMA(float ema, float new_value, float alpha) {
    return (alpha * new_value) + (1 - alpha) * ema;
}
int main() {
    float sensorReadings[] = {26.0, 27.5, 28.2, 27.0, 26.8, 26.5, 27.2};
    int numReadings = sizeof(sensorReadings) / sizeof(sensorReadings[0]);
    float alpha = 2.0f / (FILTER_WINDOW + 1); // Standard EMA formula
    float ema = sensorReadings[0]; // Initialize EMA with first reading
    printf("EMA Filtered Sensor Data:\n");
    for (int i = 0; i < numReadings; i++) {
        ema = calculateEMA(ema, sensorReadings[i], alpha);
        printf("Reading %d: Raw = %.2f, EMA = %.2f\n", i + 1, sensorReadings[i], ema);
    }
    return 0;
}

Kết luận

Tóm lại, cảm biến là xương sống thiết bị thông minh hiện đại, nối liền thế giới vật lý và số. Từ điện tử tiêu dùng đến tự động hóa công nghiệp và thiết bị y tế, chúng cho phép thiết bị cảm nhận và tương tác môi trường.

Hiểu cách cảm biến hoạt động, thành phần pipeline dữ liệu, và tích hợp với vi điều khiển là thiết yếu cho kỹ sư và người đam mê. Thiết kế pipeline hiệu quả, lập trình viên đảm bảo dữ liệu chính xác, sạch, tin cậy, cho hệ thống đạt mục tiêu hiệu năng và hiệu suất năng lượng.

Nếu có câu hỏi hoặc muốn thảo luận thêm, liên hệ tôi trên Twitter hoặc LinkedIn. Luôn sẵn sàng kết nối.

Học lập trình miễn phí. Chương trình mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người tìm được việc làm lập trình viên. Bắt đầu ngay