Julien VILLEMEJANE
Systèmes embarqués
ETI
http://hebergement.u-psud.fr/villemejane/
2
Monde numérique
Communication inter-système
● Réseau de terrain dans un véhicule
EITI – Microcontroleurs / Julien Villemejane
Injecteur
Calculateur Freins
Vitesse G
Ord Bord
GPS
Portable Tableau
Vitesse
CAN / SPI / I2C D
CAN / Ethernet
WiFi / Bluetooth
Systèmes intelligents
Vidéos d’introduction
- Capteurs intelligents / SICK
- ZED Camera / Stereolabs – IOGS/503
4 EITI – Microcontroleurs / Julien Villemejane
Systèmes intelligents
● Piloter des systèmes
● Interagir rapidement avec l’environnement
● Capteurs intelligents
5 EITI – Microcontroleurs / Julien Villemejane
Systèmes intelligents
● Piloter des systèmes
● Interagir rapidement avec l’environnement
● Capteurs intelligents
● Microcontroleurs
➔ Entrées / Sorties spécifiques
➔ Architecture spécifique (ROM, RAM, CPU, modules)
➔ Calculs « simples » numériques
➔ Grande réactivité
Microcontroleurs
7 EITI – Microcontroleurs / Julien Villemejane
Microcontroleurs
Pour tout contrôler
● Structure d’un microcontroleur
8 EITI – Microcontroleurs / Julien Villemejane
Microcontroleurs
Pour tout contrôler
● Structure d’un microcontroleur
● Large choix de composants
● Modules déjà existants (ADC, PWM...)
● Grande réactivité
● Facilité de mise en oeuvre
9 EITI – Microcontroleurs / Julien Villemejane
Microcontroleurs
Quelques constructeurs
10 EITI – Microcontroleurs / Julien Villemejane
Microcontroleurs
Exemple d’un PIC16F887
http://learn.mikroe.com/ - PIC16F887
11 EITI – Microcontroleurs / Julien Villemejane
Microcontroleurs
Configuration / Utilisation
● Variables globales / locales (idem au C)
● Registres = zones mémoires particulières
➔ Entrées / Sorties
➔ Modules internes
✔ CAN / CNA
✔ PWM
✔ Oscillateur interne
✔ Timers
Microchip - PIC16F1503
12 EITI – Microcontroleurs / Julien Villemejane
Microcontroleurs
Configuration / Utilisation
● Registre OSCCON
➔ Configuration de l’oscillateur interne
Microchip - PIC16F1503
13 EITI – Microcontroleurs / Julien Villemejane
Microcontroleurs
Configuration / Utilisation
● Registre OSCCON
➔ Configuration de l’oscillateur interne
Exemple :
OSCCONbits.IRCF = 0b101 ;
Microchip - PIC16F1503
14 EITI – Microcontroleurs / Julien Villemejane
Microcontroleurs
Programmation
● Utilisation du langage C
15 EITI – Microcontroleurs / Julien Villemejane
Microcontroleurs
Programmation
● Utilisation du langage C vers assembleur Microchip 16F
COMPILATION
16 EITI – Microcontroleurs / Julien Villemejane
Microcontroleurs
Fonctionnement embarqué
● Téléversement sur le microcontroleur
➔ Fonctionnement autonome / embarqué
Exemples d’applications
18 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Maximum intensité
● Comment trouver la source lumineuse la plus intense ?
EDF
19 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Maximum intensité
● Comment trouver la source lumineuse la plus intense ?
EDF
➔ Système de photodétection
✔ Renvoie une tension proportionnelle à l’intensité lumineuse perçue
20 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Maximum intensité
● Comment trouver la source lumineuse la plus intense ?
EDF
➔ Système de photodétection
✔ Renvoie une tension proportionnelle à l’intensité lumineuse perçue
➔ Système de rotation
21 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Maximum intensité
● Comment trouver la source lumineuse la plus intense ?
EDF
➔ Système de photodétection
✔ Renvoie une tension proportionnelle à l’intensité lumineuse perçue
➔ Système de rotation / servomoteur
✔ Se positionne à un angle donné à partir d’un rapport cyclique
22 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Maximum intensité
● Comment trouver la source lumineuse la plus intense ?
EDF
➔ Système de photodétection
✔ Renvoie une tension proportionnelle à l’intensité lumineuse perçue
➔ Système de rotation / servomoteur
✔ Se positionne à un angle donné à partir d’un rapport cyclique
➔ Traitement numérique
✔ Modifie l’angle du servomoteur en fonction de la luminosité reçue
✔ Détecte le maximum
TRAITEMENT
23 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Maximum intensité
● Comment trouver la source lumineuse la plus intense ?
EDF
➔ Système de photodétection
✔ Renvoie une tension proportionnelle à l’intensité lumineuse perçue
➔ Système de rotation / servomoteur
✔ Se positionne à un angle donné à partir d’un rapport cyclique
➔ Traitement numérique
✔ Modifie l’angle du servomoteur en fonction de la luminosité reçue
✔ Détecte le maximum
TRAITEMENT
➔ Conversion A/N
✔ Convertit une tension en grandeur numérique CAN
24 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Maximum intensité
● Comment trouver la source lumineuse la plus intense ?
EDF
➔ Système de photodétection
✔ Renvoie une tension proportionnelle à l’intensité lumineuse perçue
➔ Système de rotation / servomoteur
✔ Se positionne à un angle donné à partir d’un rapport cyclique
➔ Traitement numérique
✔ Modifie l’angle du servomoteur en fonction de la luminosité reçue
✔ Détecte le maximum
TRAITEMENT
➔ Conversion A/N
✔ Convertit une tension en grandeur numérique CAN
25 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Maximum intensité
● Comment trouver la source lumineuse la plus intense ?
➔ Traitement numérique
✔ Modifie l’angle du
servomoteur en fonction de la luminosité reçue
✔ Détecte le maximum
Acquisition donnée capteur Stockage donnée / angle Modification angle servomoteur
26 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Maximum intensité
● Comment trouver la source lumineuse la plus intense ?
➔ Traitement numérique
✔ Modifie l’angle du
servomoteur en fonction de la luminosité reçue
✔ Détecte le maximum
Position initiale
Acquisition donnée capteur Stockage donnée / angle
Modification angle servomoteur
Dernière position ? OUI NON
27 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Maximum intensité
● Comment trouver la source lumineuse la plus intense ?
➔ Traitement numérique
✔ Modifie l’angle du
servomoteur en fonction de la luminosité reçue
✔ Détecte le maximum
✔ Déterminer les E/S
✔ Capteur sur AN1 / RA1 (E)
✔ Bouton poussoir sur RA2 (E)
✔ Servomoteur sur PWM1 / RC5 (S) PIC16F1503
Position initiale
Acquisition donnée capteur Stockage donnée / angle
Modification angle servomoteur
Dernière position ?
Position intensité max OUI
NON
28 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Maximum intensité
● Comment trouver la source lumineuse la plus intense ?
➔ Traitement numérique
✔ Modifie l’angle du
servomoteur en fonction de la luminosité reçue
✔ Détecte le maximum
BP = 1 ? Position initiale
Acquisition donnée capteur Stockage donnée / angle
Modification angle servomoteur
Dernière position ?
Position intensité max NON
OUI
OUI NON
29 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Maximum intensité
● Comment trouver la source lumineuse la plus intense ?
➔ Traitement numérique
✔ Modifie l’angle du
servomoteur en fonction de la luminosité reçue
✔ Détecte le maximum
PIC16F1503
BP = 1 ? Position initiale
Acquisition donnée capteur Stockage donnée / angle
Modification angle servomoteur
Dernière position ?
Position intensité max NON
OUI
OUI NON
30 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Maximum intensité
● Comment trouver la source lumineuse la plus intense ?
➔ Traitement numérique
✔ Modifie l’angle du
servomoteur en fonction de la luminosité reçue
✔ Détecte le maximum
✔ Déterminer les E/S
✔ Capteur sur AN1 / RA1 (E)
✔ Bouton poussoir sur RA2 (E)
✔ Servomoteur sur PWM1 / RC5 (S) PIC16F1503
BP = 1 ? Position initiale
Acquisition donnée capteur Stockage donnée / angle
Modification angle servomoteur
Dernière position ?
Position intensité max NON
OUI
OUI NON
31 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Maximum intensité
● Comment trouver la source lumineuse la plus intense ?
➔ Traitement numérique
✔ Modifie l’angle du
servomoteur en fonction de la luminosité reçue
✔ Détecte le maximum
✔ Déterminer les E/S
✔ Capteur sur AN1 / RA1 (E)
✔ Bouton poussoir sur RA2 (E)
✔ Servomoteur sur PWM1 / RC5 (S) PIC16F1503
Initialisation des E/S
BP = 1 ?
Initialisation du CAN Initialisation du PWM
Position initiale
Acquisition donnée capteur Stockage donnée / angle
Modification angle servomoteur
Dernière position ?
Position intensité max NON
OUI
OUI NON
32 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Maximum intensité
● Comment trouver la source lumineuse la plus intense ?
Capteur sur AN1 / RA1 (E) Bouton poussoir sur RA2 (E) Servomoteur sur PWM1 /
RC5 (S) Initialisation des E/S
BP = 1 ?
Initialisation du CAN Initialisation du PWM
Position initiale
Acquisition donnée capteur Stockage donnée / angle
Modification angle servomoteur
Dernière position ?
Position intensité max NON
OUI
OUI NON
void initES(){
TRISAbits.TRISA1 = 1;
TRISAbits.TRISA2 = 1;
TRISCbits.TRISC5 = 0;
ANSELA = 0;
ANSELC = 0;
ANSELAbits.ANSEL1 = 1;
return;
}
void initCAN(){
ADCON1bits.ADCS = 0b111;
ADCON1bits.ADFM = 0;
ADCON0bits.CHS = 0b00001;
ADCON0bits.ADON = 1;
return;
}
33 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Vitesse moteur
● Comment afficher la vitesse de rotation d’un moteur ?
34 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Vitesse moteur
● Comment afficher la vitesse de rotation d’un moteur ?
➔ Codeur incrémental
http://stephane.genouel.free.fr/
35 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Vitesse moteur
● Comment afficher la vitesse de rotation d’un moteur ?
➔ Codeur incrémental
http://stephane.genouel.free.fr/
RAPIDE LENT
36 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Vitesse moteur
● Comment afficher la vitesse de rotation d’un moteur ?
➔ Codeur incrémental
➔ Comment mesurer la vitesse ?
37 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Vitesse moteur
● Comment afficher la vitesse de rotation d’un moteur ?
➔ Codeur incrémental
➔ Comment mesurer la vitesse ?
ΔT ΔT
N1 N2
38 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Vitesse moteur
● Comment afficher la vitesse de rotation d’un moteur ?
➔ Codeur incrémental
➔ Comment mesurer la vitesse ?
ΔT ΔT
N1 N2 Incrémenter compteur
Front montant ? OUI
NON Initialiser compteur
39 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Vitesse moteur
● Comment afficher la vitesse de rotation d’un moteur ?
➔ Codeur incrémental
➔ Comment mesurer la vitesse ?
ΔT ΔT
N1 N2 Incrémenter compteur
Front montant ? OUI
NON Initialiser compteur
● Comment compter des impulsions sur un temps donné ?
➔ Fonction de type pause / délai bloquante !!!
➔ Fonctionnement séquentiel !
DELAI
40 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Vitesse moteur
● Comment afficher la vitesse de rotation d’un moteur ?
➔ Codeur incrémental
➔ Comment mesurer la vitesse ?
ΔT ΔT
N1 N2
● Utilisation d’un module timer
➔ Génère une interruption à des instants paramétrables (horloge)
Incrémenter compteur Front montant ?
OUI
NON Initialiser compteur
TMR TMR
41 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Vitesse moteur
● Comment afficher la vitesse de rotation d’un moteur ?
➔ Codeur incrémental
➔ Comment mesurer la vitesse ?
ΔT ΔT
N1 N2
● Utilisation d’un module timer
➔ Génère une interruption à des instants paramétrables (horloge)
Incrémenter compteur Front montant ?
OUI
NON Initialiser compteur
Stocker valeur compteur Convertir / Afficher Initialiser compteur
TMR TMR
42 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Module TIMER0 - PIC16F1503
43 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Module TIMER0 - PIC16F1503
44 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Vitesse moteur
● Comment afficher la vitesse de rotation d’un moteur ?
➔ Comment compter les fronts montants ?
ΔT ΔT
N1 N2 Incrémenter compteur
Front montant ? OUI
NON Initialiser compteur
Stocker valeur compteur Convertir / Afficher Initialiser compteur
TMR TMR
45 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Vitesse moteur
● Comment afficher la vitesse de rotation d’un moteur ?
➔ Comment compter les fronts montants ?
Stocker valeur compteur Convertir / Afficher Initialiser compteur
ΔT ΔT
N1 N2
TMR TMR
INT INT INT INT INT
● Utilisation des interruptions externes
➔ Génère une interruption sur un changement d’état (montant ou/et descendant)
Incrémenter compteur Front montant ?
OUI
NON Initialiser compteur
46 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Vitesse moteur
● Comment afficher la vitesse de rotation d’un moteur ?
➔ Comment compter les fronts montants ?
● Utilisation des interruptions externes
➔ Génère une interruption sur un changement d’état (montant ou/et descendant)
Stocker valeur compteur Convertir / Afficher Initialiser compteur
ΔT ΔT
N1 N2
TMR TMR
INT INT INT INT INT Incrémenter compteur
47 EITI – Microcontroleurs / Julien Villemejane
Exemples d’applications
Vitesse moteur
● Comment afficher la vitesse de rotation d’un moteur ?
➔ Comment compter les fronts montants ?
● Fonctionnement temps réel
➔ Tout passe par des interruptions !!!
Stocker valeur compteur Convertir / Afficher Initialiser compteur
ΔT ΔT
N1 N2
TMR TMR
VIDE
INT INT INT INT INT Incrémenter compteur