Prototypage rapide

MPLAB device blocks for Simulink

L.Kerhuel & R.Delpoux

Pendule inverse

./Inverted_Pendulum_ControlLoopCloseUp.png

./Model_Hardware_Test_withSampleTime.png

./Picooz_IdentificatoinBlockPresentation.png

Video

./Picooz_Identificatoin_eq_01.png

./Picooz_Identificatoin_eq_02.png

./Picooz_SuperTwistingController.png

./Picooz_SetpLarge_ClosedLoop_SimuVsReal.png

Plan:

Modèle de simulation & génération de code

  • Différences Temporel
  • optimisation et type de données
  • blocks et fonctionnalités Simulink

Aspect Temporel:

Simulation

Modélisation en temps continue, transformé de Laplace dans le domaine p (ou s)

  • Solver résout les équations différentielles
  • Pas de contrainte temps réelle
  • Résultat dépend du solveur ; pas de calcul variable.

Aspect Temporel:

Implémentation

Implémentation en temps discret avec un pas de calcul fixe

  • pas de solveur
  • Contrainte temps réel
  • Single-Rate & Multi-Rate
  • Single-Tasking & Multi-Tasking

Discrete times

  • Single-rate:

    • Les blocks ont tous la même période d’exécution (Même couleur)
  • Multi-Rate

    • Les blocks peuvent avoir des périodes d’exécution différentes (Schéma multicolore)

Modèle multi-rate

./Model_Hardware_Test_withSampleTime.png

Charge CPU d’un modèle multi-rate single-tasking (@70 mips)

./Scope_SingleTasking_70MIPS.png

Charge CPU d’un modèle multi-rate single-tasking (@20 mips)

./Scope_SingleTasking_20MIPS.png

Single-Tasking

Single-Tasking: Dans le slot de temps, l’exécution de tous les blocks doit se terminer avant la fin du slot.

Multi-Tasking

Multi-Tasking: Préemption possible -> Monotonic Rate Scheduler

  • La tâche la plus fréquente à la priorité maximale
    • Préemptera une tache plus lente
    • Beaucoup plus flexible
    • Mode par défaut (voir options du solveur)

Charge CPU d’un modèle multi-rate single-tasking (@70 mips)

./Scope_MultiTasking_70MIPS.png

Charge CPU d’un modèle multi-rate single-tasking (@20 mips)

./Scope_MultiTasking_20MIPS.png

Tasking Conclusion

  • Single-Tasking @ 20 MIPS -> Overload
    • dispatcher la tache la plus lente sur plusieurs slots
    • (option d’offset dans Time Step -> [.001 .005])
  • Multi-Tasking @ 20 MIPS -> Ok
    • Rate transfert block options
      • Data Integrity
      • Deterministic data transfert

Optimisation

type de données

  • Virgule Fixe
  • Virgule Flottante

./FloatFixed_1.png

Flotant

IEEE 754SingleDouble
Format width3264
Sign bit11
exponent width811
Precision width23+152+1

1st bit of the significand is always 1. Phantom bit

Custom 8 bit Floating point

ParameterSingleDoubleCustom
Format width32648
Sign bit111
exponent width8114
Precision width23+152+13+1

./FloatFixed_2.png

./FloatFixed_3.png

./FloatFixed_4.png

Script Matlab pour tester un flottant 8 bits

% 4 bit exponent (signed)
emin = -7; emax = 6; 
% 3 bits significand
p = 3;

exps = 2.^[emin:emax]; 
vals = (2^p) + [0:(2^p-1)];  % significand with leading 1

TotalVal = vals'*exps;

% add denormalized values
8bitFloat = unique([TotalVal  ; 2^emin * [0:(2^m-1)]']);
8bitFloat = unique(flipud(-TotalVal) ;TotalVal]); % with neg vals

Simulink

Data-type

./Simulink_TypeCast_FixPtFormat.png

Datatype

  • int8…uint23
  • fixdt(1,16,15)
    • Scaling is En15 (Exp neg)
    • $$\rightarrow 2^-15$$
  • fixdt(1,16)
    • signed (1)
    • 16 bit width
    • Scaling is derived from min & max

Datatype

./Simulink_TypeCast_SlopeAndBias.png

  • fixdt(1,16,.01,0)
    • Scaling is sfix16Sp01
    • Slope point 01

./Simulink_TypeCast_SlopeAndBias_Sat.png

TP

https://www.ctrl-elec.fr

https://lubin.kerhuel.eu/slides/slides_dcmotor_insa

Elements de correction

./TP_Correction_OpAmp.png

./TP_Correction_ADC.png

PWM settings

./TP_Correction_PWM_Main.png

./TP_Correction_PWM_02.png

./TP_Correction_PWM_03.png

./TP_Correction_PWM_04.png

./TP_Correction_PWM_05.png

Liens: