DC Motor · Embedded Coder · SIL Validation

Vollständiger Model-Based Design Workflow — vom mathematischen Motormodell über automatisches PID-Tuning und C-Code-Generierung bis zur Software-in-the-Loop Validierung.

GitHub Repository

Model-Based Design Workflow

Model-Based Design (MBD) ist der industrielle Standard. Der gesamte Entwicklungsprozess vom Modell bis zum eingebetteten Code erfolgt in einer einzigen durchgängigen Toolchain.

Mathematisches
Modell
pidtune
Auto-Tuning
Simulink
Modell
Embedded Coder
C-Code
✅ SIL
Validation
STM32
ready

System

DC Motor — Positionsregelung

Werkzeuge

MATLAB, Simulink, Embedded Coder, MinGW

Ziel

Code C für STM32 — validiert mit SIL

Industriestandard

MBD Workflow

1 — Mathematisches Modell

Der DC Motor wird durch zwei gekoppelte Differentialgleichungen beschrieben, die zu einer Gesamtübertragungsfunktion für die Position kombiniert werden:

\[ G(s) = \frac{K_t}{(Ls + R)(Js + b) + K_t K_e} \cdot \frac{1}{s} \]

Mit den Motorparametern:

Parameter Wert Einheit Beschreibung
R1.0ΩAnkerwiderstand
L0.5HAnkerinduktivität
Kt0.01Nm/ADrehmomentkonstante
Ke0.01V·s/radGegen-EMK-Konstante
J0.01kg·m²Trägheitsmoment
b0.1Nm·s/radViskose Dämpfung

MATLAB-Implementierung:

R = 1; L = 0.5; Kt = 0.01; Ke = 0.01; J = 0.01; b = 0.1;

num = Kt;
den = conv([L R], [J b]) + [0 0 Kt*Ke];
den_pos = [den 0];   % Integrator für Position

G = tf(num, den_pos);
    

2 — Automatisches PID-Tuning mit pidtune

Anstatt die PID-Parameter manuell zu bestimmen, wurde der MATLAB-Algorithmus pidtune eingesetzt. Dieser berechnet automatisch optimale Parameter basierend auf der Übertragungsfunktion des Systems.

[C, info] = pidtune(G, 'PID');
sys_cl = feedback(C * G, 1);
    

Berechnete PID-Parameter

43.42
Kp — Proportional
14.31
Ki — Integral
18.95
Kd — Derivative

Simulationsergebnisse

PID Auto-Tuning Ergebnis — Step Response
0.36 s
Rise Time
9.62 %
Overshoot
4.61 s
Settling Time
≈ 0
Steady-State Error

3 — Code-Generierung mit Embedded Coder

Das Simulink-Modell wurde für die Embedded Coder Code-Generierung konfiguriert. Embedded Coder konvertiert das Modell automatisch in optimierten C-Code — ohne manuelles Programmieren.

Konfiguration

% ERT Target (Embedded Real-Time)
set_param('dc_motor_pid', 'SystemTargetFile', 'ert.tlc');
set_param('dc_motor_pid', 'TargetLang', 'C');

% Fixed-Step Solver für Embedded Systems
set_param('dc_motor_pid', 'SolverType', 'Fixed-step');
set_param('dc_motor_pid', 'Solver', 'ode4');
set_param('dc_motor_pid', 'FixedStep', '0.001');

% Code generieren
slbuild('dc_motor_pid')
    

Ergebnis

Der generierte C-Code befindet sich im Ordner embedded/ des GitHub Repositories und kann direkt auf einen STM32-Mikrocontroller übertragen werden.

4 — SIL Validation (Software-in-the-Loop)

Software-in-the-Loop (SIL) ist eine Validierungsmethode, bei der der generierte C-Code auf dem PC kompiliert und ausgeführt wird — um zu beweisen, dass der Code exakt dasselbe Verhalten zeigt wie das Simulink-Modell.

Ablauf

% Normal Simulation
set_param('dc_motor_pid', 'SimulationMode', 'normal');
out_normal = sim('dc_motor_pid');

% SIL Simulation — C-Code wird ausgeführt
set_param('dc_motor_pid', 'SimulationMode', 'software-in-the-loop (sil)');
out_sil = sim('dc_motor_pid');
    

Ergebnis — Normal vs SIL

Normal vs SIL Validation — DC Motor Position Control
✅ Die blaue Kurve (Normal) und die rote gestrichelte Kurve (SIL) sind nahezu identisch — der generierte C-Code ist korrekt und bereit für den Einsatz auf einem STM32-Mikrocontroller.

Was das bedeutet

5 — Zusammenfassung

Erreichte Ergebnisse

Schritt Werkzeug Ergebnis Status
Mathematisches Modell MATLAB tf() Übertragungsfunktion G(s)
PID Auto-Tuning pidtune() Kp=43.42, Ki=14.31, Kd=18.95
Simulink Modell Simulink + ERT Fixed-step, dt=0.001s
C-Code Generierung Embedded Coder dc_motor_pid_ert_rtw/
SIL Validation Simulink SIL Normal ≈ SIL

Skills

MATLAB Simulink Embedded Coder Model-Based Design PID Auto-Tuning SIL Validation C Code Generation Fixed-Step Solver STM32 ready Regelungstechnik

6 — Ausblick