How i can creat analog input in simulink to work to microcontroller?
Hedy

Hedy @carolineee

About: Publish some interesting electronic articles

Joined:
Dec 18, 2023

How i can creat analog input in simulink to work to microcontroller?

Publish Date: Sep 23 '25
1 0

Creating an analog input in Simulink for a microcontroller involves configuring both the Simulink model and the hardware support package. Here's a complete guide:

Prerequisites

  1. Install MATLAB & Simulink
  2. Install Hardware Support Package for your microcontroller:
  • For Arduino: MATLAB Support Package for Arduino Hardware
  • For STM32: STM32-MAT/TARGET (for STM32CubeMX integration)
  • For ESP32: Simulink Coder Support Package for ESP32/ESP8266

Step-by-Step Guide (Using Arduino as Example)
Step 1: Configure Hardware in Simulink

  1. Open Simulink and create a new model
  2. Go to Modeling > Model Settings (or press Ctrl+E)
  3. In Hardware Implementation pane:
  • Hardware board: Select your microcontroller (e.g., "Arduino Uno")
  • Apply the settings

Step 2: Add Analog Input Block

  1. In the Simulink Library Browser, navigate to:
  • Simulink Support Package for Arduino Hardware > Common
  • OR: Simulink Support Package for [Your Board] > Analog
  1. Drag the "Analog Input" block into your model

Step 3: Configure the Analog Input Block
Double-click the block to configure:

  • Pin: Select the analog pin (e.g., A0, A1, etc.)
  • Sample Time: Set the sampling rate (e.g., 0.01 for 100 Hz)
  • Output data type: Usually uint16 (0-1023 for 10-bit ADC) or double

Step 4: Process the Analog Signal
The raw ADC value needs processing. A typical configuration:

text

[Analog Input] → [Gain Block] → [Data Type Conversion] → [Scope/Display]
Enter fullscreen mode Exit fullscreen mode

Example conversion to voltage (Arduino - 5V reference):

  • Raw ADC range: 0-1023 (10-bit)
  • Voltage = (ADC Value × 5.0) / 1023
  • Use Gain block with value 5.0/1023

Step 5: Complete Example Model
Here's a simple model to read a potentiometer:

text

[Analog Input (Pin A0)] 
       ↓
[Gain Block (Value: 5.0/1023)]  % Convert to voltage
       ↓
[Data Type Conversion (to double)] 
       ↓
[Scope] [Display Block]
Enter fullscreen mode Exit fullscreen mode

Library Blocks Used:

  • Analog Input (from Hardware Support)
  • Gain (Simulink > Math Operations)
  • Data Type Conversion (Simulink > Signal Attributes)
  • Scope (Simulink > Sinks)

Advanced Configurations
1. Multiple Analog Inputs
Use multiple Analog Input blocks for different pins:

text

[A0] → [Processing] → [Scope Channel 1]
[A1] → [Processing] → [Scope Channel 2]
[A2] → [Processing] → [Scope Channel 3]
Enter fullscreen mode Exit fullscreen mode

2. Data Logging
Add "To Workspace" block to save data to MATLAB:

text

[Analog Input] → [Processing] → [To Workspace]
Enter fullscreen mode Exit fullscreen mode

Configure "To Workspace" with variable name like sensorData

3. Real-Time Visualization
Use "Dashboard" blocks for better visualization:

Knob, Gauge, Lamp blocks (Simulink > Dashboard)

4. Conditional Processing
Add threshold detection:

text

[Analog Input] → [Relational Operator] → [LED Output]
Enter fullscreen mode Exit fullscreen mode

Example: Turn on LED when voltage > 2.5V

STM32 Specific Configuration
For STM32, the process is similar but may require STM32CubeMX integration:

1. Use STM32CubeMX Block:

  • Add "STM32 Configuration" block from library
  • Configure ADC channels in CubeMX interface

2. ADC Block:

  • Use "ADC Read" block from STM32 library
  • Configure channel, sampling time, resolution

ESP32 Specific Configuration
ESP32 has specific ADC characteristics:

matlab

% ESP32 ADC is non-linear, may need calibration
[Analog Input] → [Lookup Table] → [Calibrated Output]
Enter fullscreen mode Exit fullscreen mode

Complete Working Example (Potentiometer Reader)
Here's MATLAB code to create a complete model programmatically:

matlab

% Create a new model
model = 'analog_input_model';
new_system(model);
open_system(model);

% Add blocks programmatically
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]);

% Connect blocks
add_line(model, 'Analog Input/1', 'Scope/1');

% Save and simulate
save_system(model);
sim(model);
Enter fullscreen mode Exit fullscreen mode

Common Issues and Solutions

  1. "Block not supported" error: Install correct hardware support package
  2. No data in Scope: Check board connection and pin configuration
  3. Incorrect values: Verify voltage reference and ADC resolution
  4. Slow sampling: Reduce sample time or use hardware-timed acquisition

Key Parameters to Adjust

  • Sample Time: Start with 0.01 seconds (100 Hz)
  • ADC Resolution: 10-bit (Arduino) or 12-bit (STM32/ESP32)
  • Voltage Reference: Usually 3.3V or 5V
  • Data Type: Use double for processing, uint16 for raw data

This setup will give you real-time analog input from your microcontroller directly in Simulink for simulation, visualization, and control algorithm development!

Comments 0 total

    Add comment