0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Hướng dẫn tạo đầu vào analog trong Simulink cho vi điều khiển

Đăng vào 2 ngày trước

• 4 phút đọc

Hướng dẫn tạo đầu vào analog trong Simulink cho vi điều khiển

Khi làm việc với vi điều khiển, việc tạo đầu vào analog trong Simulink là một bước quan trọng để thu thập dữ liệu từ các cảm biến hoặc thiết bị đầu vào analog khác. Bài viết này sẽ hướng dẫn bạn từng bước để cấu hình mô hình Simulink cũng như gói hỗ trợ phần cứng cần thiết.

Mục tiêu bài viết

  • Cấu hình đầu vào analog cho vi điều khiển
  • Cung cấp ví dụ chi tiết và mã nguồn
  • Hướng dẫn xử lý tín hiệu analog

Các yêu cầu trước khi bắt đầu

  1. Cài đặt MATLAB và Simulink: Đảm bảo bạn đã cài đặt phiên bản mới nhất của MATLAB và Simulink.
  2. Cài đặt gói hỗ trợ phần cứng cho vi điều khiển của bạn:
    • Đối với Arduino: Cài đặt Gói hỗ trợ MATLAB cho phần cứng Arduino.
    • Đối với STM32: Cài đặt STM32-MAT/TARGET (cho tích hợp STM32CubeMX).
    • Đối với ESP32: Cài đặt Gói hỗ trợ Simulink Coder cho ESP32/ESP8266.

Hướng dẫn từng bước (Sử dụng Arduino làm ví dụ)

  1. Mở Simulink và tạo mô hình mới.
  2. Đi đến Modeling > Model Settings (hoặc nhấn Ctrl+E).
  3. Trong phần Hardware Implementation:
    • Hardware board: Chọn vi điều khiển của bạn (ví dụ: "Arduino Uno").
    • Nhấn Apply để áp dụng cài đặt.

Bước 2: Thêm khối đầu vào analog

  1. Trong Simulink Library Browser, điều hướng đến:
    • Simulink Support Package for Arduino Hardware > Common
    • HOẶC: Simulink Support Package for [Your Board] > Analog
  2. Kéo khối "Analog Input" vào mô hình của bạn.

Bước 3: Cấu hình khối đầu vào analog

Nhấp đúp vào khối để cấu hình:

  • Pin: Chọn chân analog (ví dụ: A0, A1, ...).
  • Sample Time: Đặt tần suất lấy mẫu (ví dụ: 0.01 cho 100 Hz).
  • Output data type: Thường là uint16 (0-1023 cho ADC 10-bit) hoặc double.

Bước 4: Xử lý tín hiệu analog

Giá trị ADC thô cần được xử lý. Cấu hình điển hình:

Copy
[Analog Input] → [Gain Block] → [Data Type Conversion] → [Scope/Display]

Ví dụ chuyển đổi sang điện áp (Arduino - tham chiếu 5V):

  • Phạm vi ADC thô: 0-1023 (10-bit)
  • Điện áp = (Giá trị ADC × 5.0) / 1023
  • Sử dụng khối Gain với giá trị 5.0/1023.

Bước 5: Mô hình ví dụ hoàn chỉnh

Dưới đây là mô hình đơn giản để đọc một biến trở:

Copy
[Analog Input (Pin A0)] 
       ↓
[Gain Block (Value: 5.0/1023)]  % Chuyển đổi sang điện áp
       ↓
[Data Type Conversion (to double)] 
       ↓
[Scope] [Display Block]

Các khối thư viện đã sử dụng:

  • Analog Input (từ hỗ trợ phần cứng)
  • Gain (Simulink > Math Operations)
  • Data Type Conversion (Simulink > Signal Attributes)
  • Scope (Simulink > Sinks)

Cấu hình nâng cao

1. Nhiều đầu vào analog

Sử dụng nhiều khối đầu vào analog cho các chân khác nhau:

Copy
[A0] → [Processing] → [Scope Channel 1]
[A1] → [Processing] → [Scope Channel 2]
[A2] → [Processing] → [Scope Channel 3]

2. Ghi dữ liệu

Thêm khối "To Workspace" để lưu dữ liệu vào MATLAB:

Copy
[Analog Input] → [Processing] → [To Workspace]

Cấu hình "To Workspace" với tên biến như sensorData.

3. Hình ảnh hóa thời gian thực

Sử dụng các khối "Dashboard" để hiển thị tốt hơn:

  • Khối Knob, Gauge, Lamp (Simulink > Dashboard)

4. Xử lý điều kiện

Thêm phát hiện ngưỡng:

Copy
[Analog Input] → [Relational Operator] → [LED Output]

Ví dụ: Bật đèn LED khi điện áp > 2.5V.

Cấu hình riêng biệt cho STM32

Đối với STM32, quy trình tương tự nhưng có thể yêu cầu tích hợp STM32CubeMX:

1. Sử dụng khối STM32CubeMX:

  • Thêm khối "STM32 Configuration" từ thư viện.
  • Cấu hình các kênh ADC trong giao diện CubeMX.

2. Khối ADC:

  • Sử dụng khối "ADC Read" từ thư viện STM32.
  • Cấu hình kênh, thời gian lấy mẫu, độ phân giải.

Cấu hình riêng biệt cho ESP32

ESP32 có các đặc điểm ADC riêng:

Copy
% ADC của ESP32 không tuyến tính, có thể cần hiệu chỉnh
[Analog Input] → [Lookup Table] → [Calibrated Output]

Ví dụ hoàn chỉnh (Đọc biến trở)

Dưới đây là mã MATLAB để tạo mô hình hoàn chỉnh một cách lập trình:

Copy
% Tạo một mô hình mới
model = 'analog_input_model';
new_system(model);
open_system(model);

% Thêm các khối một cách lập trình
add_block('simulink/Commonly Used Blocks/Constant', [model '/Constant'], 'Position', [100, 100, 130, 130]);
add_block('arduinobaseblocks/AnalogInputBlock', [model '/Analog Input'], 'Position', [200, 100, 250, 130]);
add_block('simulink/Commonly Used Blocks/Scope', [model '/Scope'], 'Position', [400, 100, 430, 130]);

% Kết nối các khối
add_line(model, 'Analog Input/1', 'Scope/1');

% Lưu và mô phỏng
save_system(model);
sim(model);

Các vấn đề thường gặp và cách giải quyết

  1. Lỗi "Block not supported": Cài đặt đúng gói hỗ trợ phần cứng.
  2. Không có dữ liệu trong Scope: Kiểm tra kết nối board và cấu hình chân.
  3. Giá trị không chính xác: Xác minh tham chiếu điện áp và độ phân giải ADC.
  4. Tần suất lấy mẫu chậm: Giảm thời gian lấy mẫu hoặc sử dụng phương pháp thu thập dữ liệu theo thời gian phần cứng.

Các tham số chính cần điều chỉnh

  • Sample Time: Bắt đầu với 0.01 giây (100 Hz).
  • Độ phân giải ADC: 10-bit (Arduino) hoặc 12-bit (STM32/ESP32).
  • Tham chiếu điện áp: Thường là 3.3V hoặc 5V.
  • Loại dữ liệu: Sử dụng double cho xử lý, uint16 cho dữ liệu thô.

Với cấu hình này, bạn sẽ có được đầu vào analog thời gian thực từ vi điều khiển trực tiếp trong Simulink, phục vụ cho việc mô phỏng, hình ảnh hóa và phát triển thuật toán điều khiển.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào