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.
Modell
Auto-Tuning
Modell
C-Code
Validation
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 |
|---|---|---|---|
| R | 1.0 | Ω | Ankerwiderstand |
| L | 0.5 | H | Ankerinduktivität |
| Kt | 0.01 | Nm/A | Drehmomentkonstante |
| Ke | 0.01 | V·s/rad | Gegen-EMK-Konstante |
| J | 0.01 | kg·m² | Trägheitsmoment |
| b | 0.1 | Nm·s/rad | Viskose 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
Simulationsergebnisse
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
- ✅ C-Code erfolgreich generiert in
dc_motor_pid_ert_rtw/ - ✅ Executable
dc_motor_pid.exeerstellt - ✅ Solverschrittweite : dt = 0.001 s (1 kHz) — typisch für Motorsteuerung
- ✅ Code bereit für STM32 Deployment
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
- Normale Simulation → Referenzergebnis (Simulink-Modell)
- SIL Simulation → der generierte C-Code wird ausgeführt
- Vergleich beider Kurven → müssen identisch sein
% 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
Was das bedeutet
- Der C-Code reproduziert exakt das Verhalten des Simulink-Modells
- Keine numerischen Fehler durch die Code-Generierung
- Validierung ohne physisches Hardware — spart Zeit und Kosten
- Nächster Schritt : HIL mit realem STM32
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
6 — Ausblick
-
1
HIL — Hardware-in-the-Loop mit STM32
Den generierten C-Code auf einem STM32 flashen und mit einem realen DC-Motor testen — der letzte Schritt zum vollständigen MBD-Workflow. -
2
LQR-Regler (Linear Quadratic Regulator)
Zustandsraumbasierter optimaler Regler — bessere Performance als PID bei Systemen mit mehreren Zustandsgrößen. -
3
Kaskadenregelung (Strom → Drehzahl → Position)
Industriestandard für hochpräzise Motorsteuerung in CNC-Maschinen und Roboterarmen. -
4
AUTOSAR-Integration
Softwarearchitektur nach AUTOSAR-Standard — Voraussetzung für den Einsatz in Serienfahrzeugen.