correcteur-pid

73
 BRUYERE Philippe 2002-2003 GOMBERT Benjamin VENCE Eric Gp. P205 PROJET DE 2 ème  ANNÉE CONCEPTION ET RÉALISATION D’UN MODULE P.I.D. À SORTIE ANALOGIQUE

Upload: ima-aut

Post on 20-Jul-2015

161 views

Category:

Documents


0 download

TRANSCRIPT

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 1/73

 

BRUYERE Philippe 2002-2003GOMBERT BenjaminVENCE Eric

Gp. P205

PROJET DE 2ème ANNÉE

CONCEPTION ET RÉALISATION D’UN MODULEP.I.D. À SORTIE ANALOGIQUE

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 2/73

 

ESME Sudria p.1/72

2003

SOMMAIRE

A – DESCRIPTION DU PROJET 04

CAHIER DES CHARGES 04

PRINCIPE DE FONCTIONNEMENT 04

GUIDE D’UTILISATION 06

B – CONCEPTION MATÉRIELLE 08

CHOIX DES COMPOSANTS 08

SCHÉMA BLOC 09

DÉTAILS TECHNIQUES 09

 Adaptateur d’entrée 09

CAN 11

Microcontrôleur  18

 Afficheur et Driver  19

Clavier  19

CNA 20

 Adaptateur de sortie 27

RÉALISATION 29

Nomenclature 29

Schéma de câblage 30

Procédures de tests 31Montage final 33

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 3/73

 

ESME Sudria p.2/72

2003

C – CONCEPTION LOGICIELLE 34

ORGANISATION DU PROGRAMME

ET FORMATAGE DES DONNÉES 34

CONFIGURATION DU PIC 38

 Affectation des entrées/sorties 39

 Assignation des registres de configuration 40

MISE EN PLACE DE MACROS 43

DÉCLARATION DES CONSTANTES 43

ALLOCATION DE L’ESPACE MÉMOIRE 44

DÉTECTION ET TRAITEMENT DES INTERRUPTIONS 45

INITIALISATIONS 54

Initialisation des ports 54

Initialisation des registres d’interruptions 55

Initialisation des variables 55

ROUTINES 56

CAN 56

 Addition 57Soustraction 58

Multiplication 58

Calcul du P.I.D. 60

Conversion de chiffres en digits 66

Conversion des paramètres en digits 68

 Affichage (transmission série des données) 69

PROGRAMME PRINCIPAL 71

D – SYNTHÈSE 72

AMÉLIORATIONS ENVISAGÉES 72

E – SOURCES 73

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 4/73

 

ESME Sudria p.3/72

2003

A – DESCRIPTION DU PROJET

Cahier des charges

L'objectif de ce projet est de concevoir un module effectuant les fonctions decorrections numériques P.I.D. d’un signal d’entrée analogique. Les valeurs Kd,Kp et Ki sont réglables ou réinitialisables par l’utilisateur à tout instant etaffichées sur un écran LCD à 4 chiffres. Le signal de sortie est analogique. Lastructure générale de l’application est celle du schéma ci-dessous:

Les composants à utiliser sont :

- Microcontrôleur PIC 16F876- Contrôleur LCD de référence MM5452- Afficheur LCD 4 digits- Convertisseur Numérique-Analogique 8 bits

Principe de fonctionnement

Le module de correction P.I.D. (Proportionnelle Intégrale Dérivée) à réaliser propose le réglage des valeurs Kp, Ki et Kd (paramètres du correcteur) par l'utilisateur grâce à un clavier (touches “plus” et “moins” pour incrémenter etdécrémenter les valeurs et touche de validation). Les réglages sont visualiséssur un afficheur LCD à 4 chiffres (ou digits) contrôlé par un driver.Les corrections sont effectuées par un microcontrôleur qui prend en charge laconversion analogique-numérique du signal d'entrée. Le signal numériquecorrigé est ensuite reconverti en signal analogique par un convertisseur numérique-analogique. Enfin le signal est amplifié a l'aide d'un amplificateur degain avant de commander une machine à courant continue (MCC).

 

Micro-Contrôleur 

CNA MCC

Capteur 

e

+-

se

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 5/73

 

ESME Sudria p.4/72

2003

La réponse est récupérée en sortie de la MCC et une fois filtrée elle estcomparée au signal d'entrée afin de déterminer l'erreur pour effectuer lacorrection souhaitée.

Un correcteur alliant la combinaison des trois actions P.I.D. peut être assimilé à

un correcteur série au sein d’un système.

Détails sur les 3 corrections :

La première consiste à dire que plus l'erreur est grande et positive et plus il fautaugmenter la tension aux bornes du moteur (pour rattraper cette erreur). Latension aux bornes du moteur est alors directement proportionnelle à l'erreur.On a donc : u t ( ) = K  p .e  t ( )Kp étant un coefficient de proportionnalité.

On voit cependant apparaître des problèmes. Il faut une certaine tension auxbornes du moteur pour que celui-ci puisse se lancer. En régime permanent,l'erreur ne sera plus assez grande pour pouvoir faire avancer le moteur. Il y auradonc une erreur qui subsistera et nous n'atteindrons pas exactement la positionsouhaitée (erreur d'ordre 0). De même, pour qu'il puisse y avoir un mouvement,il sera nécessaire que le moteur soit alimenté, et donc qu'il y ait une erreur.C'est pourquoi, on ajoute un autre élément qui va augmenter la tension auxbornes du moteur lorsque l'erreur reste constante. À chaque période, on vasommer l'erreur (intégration de l'erreur). Donc, si l'erreur reste constante, sasomme va augmenter au fil du temps. On a alors :

 

u t 

( )= K 

 p

.e  t 

( )+

1

K ie t 

( )d t 

0

 Ú La valeur Ki est un coefficient qui va déterminer l'influence de ce paramètreintégral.

Lorsque l'on applique une tension au moteur, il met un certain temps à réagir (constante de temps mécanique). Pendant ce temps l’erreur continue àaugmenter et la tension aux bornes du moteur croît alors que cela n'est pasnécessaire. Pour diminuer ce phénomène, nous introduisons un 3ème élémentqui permet d'en limiter les effets (il est souvent fait référence pour ce terme à lanotion de viscosité, en augmentant ce terme c'est comme si on augmentait laviscosité de la réaction, on trempe le tout dans un liquide de plus en plusvisqueux). On se base sur la différence (la variation) de l'erreur entre 2mesures. Il s'agit de la dérivée de l'erreur. On obtient au final l’équation duP.I.D. :

 

u t ( ) = K  p .e  t ( ) +1

K ie t ( )d t 

0

 Ú  + K d 

d e  t ( )dt 

 Avec Kd étant le coefficient du paramètre dérivé.

Chacun des paramètres Kp, Ki et Kd corrige le système en vitesse, stabilité etprécision. Par exemple avec un correcteur de type proportionnel on peut rendrele système plus rapide mais il devient en revanche moins stable. Il faut donc

trouver un compromis entre rapidité, stabilité et précision. D’où la nécessitéd’utiliser un correcteur élaboré dont la programmation sera détaillée par la suite.

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 6/73

 

ESME Sudria p.5/72

2003

Guide d’utilisation

Pour s’assurer du bon fonctionnement du module d’asservissement, il fautsuivre “scrupuleusement” les étapes suivantes lors de sa mise en marche.

Tout d’abord vérifier le câblage d’alimentation. Les bornes de couleurs bleu, jaune, rouge et noire sont directement reliées aux composants (PIC, CAN,driver LCD, AOP) et les alimentent. Les douilles jaune et bleue fournissentrespectivement +12 et –12V pour les AOP et la douille rouge +5V pour le restedes composants.

Il faut s’assurer que toutes les alimentations sont bien branchées, surtout auniveau du +12 et –12V (jaune et bleue) afin de ne pas créer de différences depotentiels trop importantes au sein du circuit général. C’est à partir de cemoment-là que l’on peut allumer l’alimentation et basculer l’interrupteur généraldu montage sur la position ON.

 Après avoir réglé le GBF, on le relie à l’aide de câbles coaxiaux branchés sur les fiches BNC. On branche un oscilloscope en sortie pour visualiser le signalcorrigé. Le signal d’entrée ne peut excéder +5V et –5V et il doit rester en bassesfréquences (50 Hz par exemple).

Une fois la maquette alimentée et un signal d’entrée injecté, il faut appuyer sur le bouton “Reset” pour démarrer la conversion analogique-numérique et par conséquent la correction P.I.D. Les paramètres sont directement visualisés sur l’afficheur LCD. Quatre digits sont utilisés, de gauche à droite : Kp, Ki, Kd et lalimite d’intégration de l’asservissement. Le clavier est composé de 3 boutons(“+”, “-“, “v” pour valider). Une première pression sur “v” permet d’activer le

mode de sélection du paramètre à modifier. On se déplace sur l’afficheur àl’aide des boutons “+” pour aller à gauche, et “-“ pour aller à droite. Une fois le

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 7/73

 

ESME Sudria p.6/72

2003

choix du paramètre à modifier effectué, on le valide par pression sur “v”. Ainsion passe dans le mode de sélection de la valeur du paramètre qui peut varier par pas de 1 entre 0 et 9. Le “+” et le “-“ permettent d’incrémenter oudécrémenter la valeur que l’on valide avec la touche “v”. L’opération demodification du ou des paramètres de corrections peut être effectué à tout

instant. Lorsque l’on appuie sur la touche “Reset”, tous les paramètres sontremis à 0. On peut ainsi réaliser un nouvel asservissement.

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 8/73

 

ESME Sudria p.7/72

2003

B - Conception matérielle

Choix des composants

Le cahier des charges nous impose d’utiliser certains composants. Ils ont étéchoisis pour leurs caractéristiques techniques et les performances nécessairesà la bonne exécution du système.

Le microcontrôleur est le cœur du système. Il doit effectuer en permanence lecalcul de la correction P.I.D., mais il doit aussi gérer l’envoi de données audriver LCD afin d’effectuer un affichage cohérent des paramètres du correcteur.Le PIC doit également prendre en compte les interruptions engendrées par lesmodifications possibles des paramètres à l’aide de boutons-poussoirs. Il est deplus équipé d’un convertisseur analogique-numérique (CAN) 10 bits en entrée.En sortie du PIC nous avons choisi d’utiliser un convertisseur numérique-analogique (CAN) 8 bits de référence AD557. Il délivre en sortie un signalcompris entre [0V ; +2,5V]. Ce convertisseur est placé avant l’adaptateur desortie.

L’utilisation de ce PIC et du CAN impose quelques contraintes. Il ne peutrecevoir en entrée qu’un signal compris entre 0 et 5 Volts. Or nous effectuons

l’asservissement d’une machine à courant continue, nous avons donc un signalcompris entre –5 et +5 Volts en entrée du PIC.Il faut alors utiliser deux montages d’adaptation. Un en entrée pour réduirel’amplitude du signal de [-5V ; +5V] à [0V ; +5V] et un autre en sortie pour augmenter l’amplitude de [0V ; +2,5V] – sortie du CAN – à [-5V ; +5V].

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 9/73

 

ESME Sudria p.8/72

2003

Schéma bloc

Détails techniques

Adaptateurs d’entrée

Conversion [+5v ; -5v] => [+5v ; 0v] 

Il faut adapter le signal d’entrée. Nous devons diminuer l’amplitude du signal de[+5v ; -5v] à [+5v ; 0v].

Équation à réaliser : V s=

V e+ 5( )2

Pour réaliser cette opération, on utilise deux amplificateurs opérationnels (AOP)en série. Le premier est utilisé en montage amplificateur inverseur ; le seconden montage soustracteur recevant sur sa borne V- (borne inverseuse) la sortiedu premier AOP et sur sa borne V+ (borne non-inverseuse) le signal d’entrée àcorriger.

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 10/73

 

ESME Sudria p.9/72

2003

Le choix des résistances est fait de telle sorte que :

R1 = R2 = R5= R6

R3 = R4R3 = 2 R1

Une fois les calculs théoriques effectués, nous avons simulé l’ensemble dumontage d’adaptation à l’aide du logiciel Design Capture. Voici les courbes quenous obtenons après simulation :

Le signal d’entrée, une sinusoïde d’amplitude comprise entre –5 et +5 V, a étéadapté pour pouvoir être injecté au PIC.

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 11/73

 

ESME Sudria p.10/72

2003

CAN

Le principe de la conversion analogique-numérique est d’attribuer une grandeur numérique correspondant à un état physique. Le CAN convertit donc une

tension dite analogique en une valeur numérique.

Le PIC 16F876 utilisé pour le calcul de la correction P.I.D. intègre unconvertisseur 10 bits. Il ne sera donc pas nécessaire d’utiliser un circuitsupplémentaire pour la conversion analogique-numérique.

Résolution d’un convertisseur analogique-numérique

La résolution d’un CAN correspond à la plus petite mesure réalisable par le

CAN, autrement dit la précision du CAN.

Par exemple, si on utilise un CAN 8 bits, ce CAN ne pourra fournir que 255valeurs différentes. La plus petite différence de tension mesurable à ses bornesva être fonction de la plage de mesure en tension utilisée. Si la tension estcomprise entre 0 et 5V, la mesure minimale correspond à : 5/255 = 19,6mV. Ondira que la résolution d’un CAN 8 bits pour une tension de plage de mesure de5V est de 19,6mV.

D’une façon générale, la résolution est égale à la plage de tension de la mesuredivisée par le nombre de bits du CAN :

 

 Résolution =plage

_

de_

mesure

 Nombre_ de_bits_ du_CAN 

Par conséquent, pour augmenter la résolution d’un système, on a 2 possibilités :

- soit augmenter le nombre bits du CAN utilisé- soit diminuer la plage de mesure

On utilise dans ce projet un CAN 10 bits (celui contenu dans le PIC 16F876)pour convertir le signal d’entrée. Néanmoins un CAN 8 bits aurait suffi car on

néglige les deux bits les moins significatif lors de la correction effectuée par lePIC.

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 12/73

 

ESME Sudria p.11/72

2003

Échantillonnage de l’information

La première étape du processus de numérisation est l’échantillonnage. Cela

consiste à passer d'un signal à temps continu (un signal électrique enl’occurrence), en une suite discrète de valeurs (valeurs mesurées à intervallesréguliers). Cet échantillonnage est de l’ordre de la dizaine de microsecondes.

Une relation existe entre la fréquence maximale du signal d’entrée et lafréquence échantillonnage. En effet, pour éviter le phénomène de recouvrementspectral il faut respecter le théorème de Shannon : Fe > 2.Fmax

Détail de fonctionnement du CAN contenu dans le 16F876 

Le microcontrôleur 16F876 intègre un module de conversion analogique-numérique qui est associé à un multiplexeur analogique multivoie des entrées. Autrement dit on peut réaliser des mesures sur plusieurs voies d’entréeanalogiques (jusqu’à 5). Ces voies analogiques correspondent aux broches duport A.

Module CAN 10 bits implique que le résultat de la conversion est un nombre de10 bits, c'est-à-dire compris entre 000H et 3FFH (11 1111 1111 en binaire ou1023 en décimal). Ceci correspond donc à 1023 niveaux de mesure, ce qui pour 5V donne une résolution de 4,8mV, précision largement suffisante.

Le temps de conversion de ce module est de l’ordre de : 40µs ce qui permet enpratique de réaliser jusqu’à 25000 mesures par seconde.

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 13/73

 

ESME Sudria p.12/72

2003

Structure interne du CAN 10 bits des 16F876 

Les registres et bits associés au module CAN 

Il y a 4 registres associés au module CAN du 16F876 :- ADRESH : le registre de résultat “Haut”- ADRESL : le registre de résultat “Bas”

- ADCON0 : premier registre de contrôle du module CAN- ADCON1 : seconde registre de contrôle du module CAN

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 14/73

 

ESME Sudria p.13/72

2003

Les registres ADRESH et ADRESL

Le convertisseur Analogique Numérique est 10 bits et par conséquent 1 octet(=8 bits) ne suffit pas pour contenir le résultat de la mesure. C’est pour cela que

2 registres sont nécessaires et sont donc utilisés. De fait 6 bits restent inutiliséssur les 16 disponibles. Il est possible de définir la « justification » du résultat ausein de ces 2 octets à l’aide d’un bit du registre ADCON1 : le bit ADFM. Voici ladisposition des bits de résultats dans les 2 octets en fonction de la valeur du bit ADFM :

Le registre ADCON0 :

Ce premier registre de contrôle contient plusieurs bits qui configurent lefonctionnement du module CAN :

- Bits ADCS1, ADCS0 : bits de sélection de l’horloge utilisée pour le moduleCAN.

- Bits CHS2, CHS1, CHS0 : les bits de sélection du canal analogique à mesurer.

 Avant toute conversion, il faut définir quel est le canal qui va être utilisé pour cette conversion. Ceci se fait grâce à ces 3 bits selon le tableau suivant :

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 15/73

 

ESME Sudria p.14/72

2003

- Bit GO/DONE : Le bit de lancement de la conversion et témoin de la fin deconversion.

Ce bit n’est actif que si le bit ADON=1, c'est-à-dire si le module CAN est actif. Il

sert à lancer la conversion : en mettant ce bit à 1, on lance la conversion à partir de la voie analogique sélectionnée par les bits CHS2, CHS1 et CHS0.

Une fois que la conversion est terminée, ce bit passe à 0 automatiquement. Ilsera donc possible d’utiliser ce bit pour attendre la fin de la conversion en cours.

- Bit ADON : Le bit “d’allumage” du module CAN.

Ce bit sert à “allumer” le module CAN. Si ADON=0, le module CAN est inactif. Sile bit ADON=1, le module est opérationnel.

Le registre ADCON0 :

Ce second registre de contrôle contient plusieurs bits qui configurent lefonctionnement du module CAN :

- Bit ADFM : Configuration du format du résultat.

Ce bit sert à configurer le résultat au sein des 2 registres ADRESL et ADRESHselon le tableau qui suit :

Les cases vertes représentent le résultat sur 10 bits, X0 correspond au bit depoids faible et X9 au bit de poids fort.

- Bits PCFG0 , CFG1, PCFG2 et PCFG3 : Bits de configuration des ports A (enanalogique ou numérique).

Les broches des ports A (à l’exception de PA4) peuvent être configurées soit enanalogique soit en numérique.Lorsqu’une broche de ce port est configurée en analogique, elle devient un descanaux de mesure utilisables par le CAN. Lorsqu’elle est configurée ennumérique, elle est une broche E/S comme les autres broches des autres ports.

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 16/73

 

ESME Sudria p.15/72

2003

La configuration de la nature des broches du port A est décrite dans le tableausuivant :

L’interruption “fin de conversion” associée au module CAN 

Il existe également une source d’interruption liée au module CAN : la fin deconversion. Comme toute interruption, celle-ci doit être activée pour êtreopérationnelle ce qui se fait par les bits :

- PEIE=1 (activation des interruptions périphériques)- ADIE=1 (activation de l’interruption fin de conversion)

Le bit de drapeau associé à cette interruption est ADIF. Il faudra le mettre à 0avant toute activation de l’interruption. Ce dernier est automatiquement mis à 1en fin de conversion si l’interruption est activée.

Cette interruption est intéressante uniquement si l’on souhaite optimiser lavitesse de conversion au maximum.

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 17/73

 

ESME Sudria p.16/72

2003

Tableau de synthèse issu de la datasheet du 16F876 :

Déroulement d’une conversion analogique-numérique

Étudions comment le module CAN 10 bits réalise une conversion analogiquenumérique. Le schéma suivant résume la séquence d’une conversionanalogique-numérique par le module utilisé :

1. L’ensemble de la conversion est lancé lorsque le bit GO/Done est mis à 1par l’utilisateur.

2. S’en suit un temps de latence interne lié à la présence d’un condensateur 

interne.3. Puis la conversion commence avec le “calcul” des 10 bits4. Lorsque la conversion analogique-numérique est terminée :

a. le résultat est stocké dans les registres ADRESL et ADREHb. le bit GO/Done est mis à 0 automatiquement témoignant de la fin

de la conversionc. le drapeau de l’interruption “fin de conversion” est mis à 1 (si cette

interruption est activée comme expliqué précédemment)

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 18/73

 

ESME Sudria p.17/72

2003

Microcontrôleur 

Le microcontrôleur que nous utilisons est un 16F876. Il a été choisi pour ses

caractéristiques techniques intéressantes.

Il possède une mémoire RAM de 368 octets, une EEPROM de 256 octets ainsiqu’une FLASH de 8 kilo-octets. Cela nous assure un espace suffisant pour stocker et exécuter le programme afin de traiter le signal à corriger.En plus des entrées/sorties programmables et des interruptions, il possèdecertaines ressources internes telles que :

- Un convertisseur analogique-numérique 10 bits qui envoie directement leséchantillons du signal à traiter aux registres internes du PIC afind’effectuer la correction P.I.D. L’intégration de ce CAN simplifie leroutage, évite des problèmes de compatibilité et fait gagner de la placeau montage.

- Des timers. Nous utiliserons le timer 1 pour gérer le clignotement ducurseur. Le timer 1 est un compteur 16 bits. Lorsqu’il est couplé à notreoscillateur de 4MHz avec un pré-diviseur égal à 8 on obtient uneinterruption toutes les 0,5 secondes. La période de clignotement seradonc d’une seconde.

- Des liaisons séries SCI, I2C, SPI qui ne sont pas utilisées dans le cadre dece projet.

- Des sorties P.W.M. (Modulation de Largeur d'Impulsion) si l’on veuteffectuer une commande numérique par exemple.

Pour fonctionner le PIC réclame une configuration hardware minimalecomposée d’un oscillateur et d’un circuit reset :

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 19/73

 

ESME Sudria p.18/72

2003

Afficheur et Driver 

Le driver LCD remplit une double fonction. Il commande l'affichage et d'autre

part se charge de la communication avec l'extérieur.

Il est piloté par le PIC qui lui transmet un signal d’horloge qui cadence l’envoides données à afficher.

Le driver peut afficher jusqu’à 32 segments différents, ce qui correspond dansnotre cas à 4 digits à 7 segments ainsi que 4 points situés à gauche deschiffres. L’afficheur LCD ne pose pas de problème, le routage de chaque digitse fait par paquet de 8 bits.

Clavier 

Le clavier doit permettre la saisie et la modification des paramètres ducorrecteur PID : Kp, Ki, Kd et la limite d’intégration.

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 20/73

 

ESME Sudria p.19/72

2003

Il est constitué de trois boutons-poussoirs avec une capacité de découplage enparallèle pour limiter le phénomène de rebonds.

Les boutons sont connectés au PIC sur le port B.

CNA

Les convertisseurs numérique-analogique convertissent les signaux logiques entensions analogiques. Plusieurs types de convertisseurs sont disponibles danschaque catégorie, ils se différencient par leur précision, leur vitesse detraitement de l'information, leur prix... On devra donc faire des compromis selonses besoins.

Il existe principalement deux types de convertisseurs numérique-analogique sur le marché : les convertisseurs à résistances pondérées, et les convertisseurs àréseau R/2R (ces derniers sont prédominants). Il existe également desconvertisseurs à réseaux de condensateurs fonctionnant sur le même principede base que les réseaux à résistances.

Principe de fonctionnement 

Si on fait l'opération inverse de la conversion analogique-numérique, à chaquevaleur numérique on fait correspondre une et une seule valeur analogique; latension analogique de sortie varie par "bonds", et non plus continûment commedans le signal d'origine. La tension de sortie a une forme d'escalier.

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 21/73

 

ESME Sudria p.20/72

2003

En pratique, on filtre cette tension pour lisser ces discontinuités et essayer dese rapprocher au mieux du signal d'origine :

Définitions

Résolution

La résolution du CNA est la variation de tension de sortie correspondant à lavariation d'une unité du nombre binaire en entrée. La définition est équivalente àcelle du CAN.

Plage de conversion

Il y a ici une petite différence avec le CAN, la plage de conversion numérique vade 0 à 2(N-1), N étant le nombre de bits du convertisseur, et à chaque valeur numérique correspond une unique valeur analogique de sortie. Par rapport à

celle du CAN, la plage de conversion s'arrête donc un LSB (bit le moinssignificatif) plus tôt (sur l'échelle analogique du CAN, ceci correspond à ladernière transition numérique).

Dynamique

La dynamique d'un signal est le rapport entre la tension maxi et la tension minique pourra prendre ce signal.

Mise en relation

D'après ce qui a été dit sur la plage de conversion, la relation entre le pas dequantification (1 LSB), la plage de conversion VMAX et le nombre de bits duconvertisseur sera légèrement différente de l'équation suivante en pratique. Lafigure du paragraphe suivant va éclairer cette équation :

 

 LSB =DV 

 MAX 

2 N 

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 22/73

 

ESME Sudria p.21/72

2003

Exemple : CNA 3 bits

Fonction de transfert d'un CNA 3 bits

Cette figure montre la fonction de transfert d'un CNA 3 bits ayant une résolutionde 1V. On voit clairement ici ce qui a été dit pour la plage de conversion : laplage s'étend de 0 à 7V, et non pas 8V comme pour le CAN, car le dernier étatnumérique est "7".

En pratique, pour un CAN supérieur à 8 bits, la différence avec le résultatthéorique donné par l’équation précédente est très faible.

ERREURS DE CONVERSION 

Erreur de gain

Le fabricant de convertisseurs Analog Devices définit cette erreur ainsi : c'estl'écart entre la valeur théorique et la valeur réelle mesurée sur la dernière

transition du convertisseur et exprimé en LSB. Cette mesure suppose quel'ajustage du zéro soit parfait.

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 23/73

 

ESME Sudria p.22/72

2003

Illustration de l’erreur de gain.

Erreur d'offset 

De même, le code binaire 0 ne correspond pas forcément à une tensionrigoureusement nulle en sortie. Cette tension est la tension de décalage, oud'offset.

Erreur d'offset.

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 24/73

 

ESME Sudria p.23/72

2003

En pratique, Analog Devices définit cette erreur comme étant l'écart entre lavaleur théorique et la valeur réelle mesurée sur la première transition duconvertisseur et exprimé en LSB. En pratique, pour ajuster un convertisseur, onréglera d'abord l'offset, et ensuite le gain.

Erreurs de linéarité

L'erreur de linéarité est due au fait que la résolution des convertisseurs n'estpas constante. On distingue deux formes de non-linéarité :

- Le non linéarité intégrale

La non linéarité intégrale (exprimée en LSB) est la différence maximaleconstatée sur toute la plage de conversion entre les valeurs théoriques et lesvaleurs mesurées.

Cette mesure n'a de sens que si le zéro et le gain sont correctement réglés. Lafonction est représentée dans la figure suivante.

Erreur de linéarité intégrale.

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 25/73

 

ESME Sudria p.24/72

2003

- La non linéarité différentielle

La non linéarité différentielle concerne la différence de tension obtenue lors dupassage au code numérique immédiatement supérieur ou inférieur.

Théoriquement, cette valeur vaut 1 LSB. La non linéarité différentielle sera ladifférence entre l'écart mesuré et le LSB théorique.

Erreur de linéarité différentielle.

La valeur donnée dans les spécifications des constructeurs est la plus grandevaleur constatée sur toute la plage de conversion.

La non linéarité différentielle est plus gênante que la non linéarité intégrale,surtout dans le cas de mesures comparatives effectuées sur une faible partie dela plage de conversion. En général, et pour des causes technologiques, lemaximum de non linéarité différentielle se trouve à la moitié de la pleine échelle

(passage du MSB – bit le plus significatif - de 0 à 1), et ensuite à moindredegré à 1/4 et 3/4 de la pleine échelle. Il faut donc rester vigilant lors demesures dans ces zones.

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 26/73

 

ESME Sudria p.25/72

2003

Monotonicité

Ce phénomène est le même que le précédent, mais poussé à l'extrême : il peutarriver que la pente de la courbe de conversion change de signe. Pour une

tension analogique de sortie, il n’est pas possible d'attribuer un nombre binairecorrespondant : plusieurs valeurs peuvent être attribuées à une mêmecombinaison logique.

Monotonicité

Temps d'établissement 

Les étages de sortie des CNA sont généralement des amplificateursopérationnels. On a vu que la tension de sortie varie "par bonds" quand le codebinaire d'entrée change. De ce fait, l'ampli de sortie va fonctionner en mode

impulsionnel. La stabilisation de la tension de sortie n'est pas immédiate : ellepeut être du type premier ordre ou oscillatoire amortie (deuxième ordre et plus).

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 27/73

 

ESME Sudria p.26/72

2003

On appelle temps d'établissement (setting time en Anglais) le temps mis par lasortie pour atteindre un certain pourcentage de la tension finale stabiliséelorsque l'entrée va varier.

Temps d'établissement

Précision du convertisseur 

Pour obtenir la précision globale du convertisseur, on cumule toutes les erreursprécédemment citées.

En général, ces erreurs sont données soit en % de la pleine échelle, soit enfraction de quantum (± 1/2 LSB par exemple).

Adaptateur de sortie

Conversion [+2,5v ; 0v] => [+5v ; -5v] :

Nous devons adapter le signal de sortie du CNA. Il faut augmenter l’amplitudedu signal de [+2,5v ; 0v] à [+5v ; -5v] pour alimenter correctement la MCC.

Équation à réaliser : V s= 4V 

e- 5

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 28/73

 

ESME Sudria p.27/72

2003

On utilise à nouveau deux AOP en série. Le premier en tant qu’amplificateur inverseur et le second en montage sommateur.La borne V-, du premier AOP, reçoit en entrée le signal de sortie du CNA, etcelle du second AOP est connectée à la sortie du premier. Les bornes V+ desdeux AOP sont reliées à la masse.

Le choix des résistances est fait de telle sorte que :

R2 = 4 R1

etR3 = R4 = R5

Une fois de plus après avoir effectué les calculs théoriques nous avons simulél’ensemble et voici les résultats obtenus :

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 29/73

 

ESME Sudria p.28/72

2003

Nous remarquons que le signal est réadapté et l’amplitude du signal de sortie abien une amplitude comprise entre –5 et +5 volts, comme le signal injecté àl’entrée du module.

Réalisation

Nomenclature

Nb Référence Désignation1 PIC 16F876 Microcontrôleur RISC 8 bits1 AD557 Convertisseur Numérique Analogique 8 bits

1 MM5452 Contrôleur LCD1vi-502 Afficheur LCD 7 segments - 4 digits1 TL084 AOP jfet (x4 AOP)1 Support tulipe 28 broches1 Support tulipe 16 broches (7,5 mm)2 Support tulipe 40 broches1 Support tulipe 14 broches (7,5 mm)6 Support tulipe 8 broches (7,5 mm)2 Support tulipe barrette de 32 broches

2470

Résistance1 5 k Résistance1010 k Résistance

3 20 k Résistance1 50 k Résistance2 15 pF Condensateur  1 15 pF Condensateur  1 10 nF Condensateur  1 47 µF Condensateur  

1 100 µF Condensateur  5 100 nF Condensateur  1 Quartz 4MHz1 Interrupteur ON/OFF4 Bouton poussoir 1 Led verte Ø3 mm1 Led rouge Ø3 mm1 5 m Fil rouge (5V)1 5 m Fil noir (5V)

1 5 m Fil vert (5V)1 Bornier ( IN & OUT coax. / +5v / +12v / -12v / GND )

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 30/73

 

ESME Sudria p.29/72

2003

Schéma de câblage

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 31/73

 

ESME Sudria p.30/72

2003

Procédures de tests

Pour tester le bon fonctionnement du CAN, on lui injecte un signal quelconque,

puis on lit le résultat de la conversion en sortie du PIC à l’aide de 8 diodesplacées sur chacun des bits du bus de sortie.

Le test du CNA se fait en même temps que le test du correcteur proportionnel,quand K vaut 1. Nous injectons en entrée un signal sinusoïdal et nous devonsvisualiser sur l’oscilloscope une sinusoïde similaire de même amplitude. Nouseffectuons le même test avec cette fois-ci K égal à 2. Nous devons pouvoir visualiser une sinusoïde ayant une amplitude 2 fois plus grande que celleinjectée en entrée.

Signaux d’entrée et de sortie pour Kp=3

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 32/73

 

ESME Sudria p.31/72

2003

Pour tester l’action intégrale du correcteur on injecte un signal carré en entrée etnous devons visualiser un signal triangulaire sur l’oscilloscope.

Signaux d’entrée et de sortie pour Ki=1

Pour tester l’action dérivée il faut injecter un signal triangulaire en entrée et nousdevons récupérer en sortie un signal carré.

Signaux d’entrée et de sortie pour Kd=9

Pour vérifier le bon fonctionnement de l’afficheur il suffit d’afficher différentesvaleurs afin d’essayer toutes les possibilités d’affichage.

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 33/73

 

ESME Sudria p.32/72

2003

Montage final

Maquette réalisée durant toute la durée du projet.

Recto

Verso

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 34/73

 

ESME Sudria p.33/72

2003

C – PROGRAMMATION

Organisation du programme

 Avant de procéder à l’élaboration du programme contenu dans le PIC, il estpréférable d’établir au préalable un algorithme qui définisse son principe defonctionnement.

L’organigramme suivant décrit sommairement l’organisation du programme. Ilmodélise l’effet d’un reset, représente la détection et le traitement desinterruptions, et enfin décrit la boucle principale réalisant la correction.L’asservissement se fait en trois phases : l’échantillonnage, le calcul du PID etl’émission du résultat sur le port C.

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 35/73

 

ESME Sudria p.34/72

2003

La réalisation d’un asservissement PID se résume à l’application de la formule :u(k) = Kp e(k) + Ki [ u(k-1) + e(k) ] + Kd [ e(k) - e(k-1) ]

L’organigramme suivant illustre le traitement de la correction.

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 36/73

 

ESME Sudria p.35/72

2003

Formatage des données

La tension du signal d’entrée du module P.I.D. réalisé varie entre -5V et +5V. Ilest donc nécessaire grâce à un adaptateur d’étalonner ce signal entre 0 et 5V

pour l’injecter dans le CAN. À chaque valeur de tension correspondra unevaleur numérique. Le paragraphe suivant à pour but d’expliquer le processus deformatage des données et les correspondances entre les valeurs analogiques etnumériques.

Le CAN échantillonne sur 10 bits un signal initial compris entre -5V et +5V.

  e (k) : +5V 1023

-5V 0Le résultat de la conversion analogique-numérique est stocké dans les registres ADRESH (bits de poids fort) et ADRESL (bits de poids faible).Si l’on choisit de mettre le bit ADFM = ‘0’ (bit 7 du registre ADCON1), alors onchoisit d’effectuer la justification à gauche, c’est-à-dire que le registre ADRESHreçoit les 8 bits de poids fort de la conversion, et ADRESL récupère les 2 bits depoids faible restants.On fait abstraction des 2 bits de poids faible (ADRESL) pour faciliter le calcul dela correction. On obtient donc une conversion sur 8 bits :

  e (k) : +5V (ADRESH) : 255

-5V 0

Pour appliquer la formule de correction, on doit recentrer le signal sur 0. Onsoustrait donc 127 au registre ADRESH :

  e (k) : +5V (ADRESH-127) : 128

-5V -127

=> ADRESH – 127 = a . e (k) (avec a = 128/5)

Pour effectuer la correction, on travaille avec [ a . e (k) ] plutot que de travailler directement avec e (k) car les valeurs des échantillons sont comprises entre-5V et +5V, et ces valeurs sont trop petites pour avoir une résolution suffisante.En effet, on ne peut pas travailler avec des valeurs décimales.

On utilise donc une valeur proportionnelle à e (k) pour faire la correction :[ a . e (k) ] .

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 37/73

 

ESME Sudria p.36/72

2003

- Correction avec [ a . e (k) ] :

u(k) = Kp . e (k) + Kd . [e (k) - e (k-1) ] + Ki . [e (k) + u(k-1) ]e (k) a e (k)

  a u(k) = Kp . a e (k) + Kd . [ a e (k) - a e (k-1) ]+ Ki . [ a e (k) + a u(k-1) ]

On constate qu’en effectuant la correction avec [ a . e (k) ] , on obtient :[ a . u(k) ] .

 Avec : -127 ≤  a . u(k) ≤ 128

On réadapte le résultat pour l’injecter en sortie du Pic (8 bits).Pour cela, on ajoute 127 à [ a . u(k) ] :

0 ≤  a . u(k) + 127 ≤ 255

[ a u(k) + 127 ] : 255 +5V

0 -5V

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 38/73

 

ESME Sudria p.37/72

2003

La programmation d’un microcontrôleur PIC 16F876 se fait en langage« MPASM ». Il s’agit d’un langage assembleur spécifique créé par Microchip. Celangage dispose d’un jeu de 35 instructions assez peu explicites, d’où lanécessité de bien structurer le programme et de le commenter convenablement.

Configuration du PIC :

Création d’une en-tête regroupant les principalesinformations du programme :

Celle-ci est facultative, mais elle peut s’avérer très utile pour la mise en œuvredu PIC dans un circuit. Elle regroupe des informations essentielles :- le nom du fichier (celui ci doit être compilé puis injecté dans le PIC),

- la liste des fichiers à inclure dans le projet pour que la compilation soitpossible (dans notre cas, il s’agit du fichier librairie : « P16F876.inc »),- la fréquence de l’oscillateur externe pour laquelle est conçu ce programme

(ici : 4 MHz),- l’affectation des ports d’entrées-sorties pour le câblage du PIC.

 

;***************************************************************************************;* *;* Réalisation d'un asservissement PID *

;* *;***************************************************************************************;* *;* NOM: projet.asm *;* Date: 23/05/2003 *;* Auteurs: BRUYERE Philippe - GOMBERT Benjamin - VENCE Eric *;* Groupe de projet : P205 *;* *;***************************************************************************************;* *;* Fichiers requis: P16F876.inc *;* *

;***************************************************************************************;* *;* Notes: On utilise un oscillateur 4 MHz *;* Les 8 bits de sortie sont disponibles après correction sur le PORTC *;* L'affichage des paramètres est transmis par la sortie série du PORTB *;* Les boutons poussoir génèrent des interruptions sur les entrées *;* RB4 à RB6 du PORTB *;* *;***************************************************************************************

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 39/73

 

ESME Sudria p.38/72

2003

Déclaration du modèle de PIC utilisé et appel de la librairieen vigueur :

Directive “CONFIG” :La directive CONFIG permet de configurer le compilateur pour que celui-cireconnaisse chacun des paramètres de programmation du PIC sans qu’il ne soitnécessaire de les préciser à chaque fois. Cette directive permet notamment dedéclarer le type d’oscillateur utilisé ainsi que les différents modes de protectionutilisés par le PIC et sa mémoire.

Affectations des entrées-sorties :Pour un bon fonctionnement du PIC, il est nécessaire d’attribuer à chacune deses pins un statut d’entrée ou de sortie afin que le microcontrôleur sache s’il doitlire ou écrie sur chaque pin. Ces affectations doivent être faites par rapport auxfonctions qu’offre chaque pin.Dans notre cas, nous avons besoin d’une entrée analogique que l’on branchesur l’entrée RA0 du PORTA. Les 8 bits de sortie sont ceux du PORTC car nousréservons le PORTB au traitement des interruptions générées par les bouton-poussoirs (le PORTB étant le seul port à gérer les interruptions). Les signaux decontrôle du driver LCD sont disponibles sur deux pins encore libres sur lePORTB (RB0 et RB1).Les pins non utilisées sont déclarées comme des sorties.

LIST p=16F876 ; Définition du processeur#include <p16F876.inc> ; fichier include

__CONFIG _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF &_BODEN_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC

; _CP_OFF Pas de protection; _DEBUG_OFF RB6 et RB7 en utilisation normale; _WRT_ENABLE_OFF Le programme ne peut pas écrire dans la flash; _CPD_OFF Mémoire EEprom déprotégée; _LVP_OFF RB3 en utilisation normale; _BODEN_OFF Reset tension hors service; _PWRTE_ON Démarrage temporisé; _WDT_OFF Watchdog hors service; _XT_OSC Oscillateur XT

;*********************************************************************************;* ASSIGNATIONS SYSTEME *;*********************************************************************************

; DIRECTION DES PORTS I/O; --------------------------------------; (1=entrée ; 0=sortie)

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 40/73

 

ESME Sudria p.39/72

2003

Assignations des registres de configuration :Il est préférable d’effectuer ces assignations au début du programme, celafacilite leur modification et évite de devoir parcourir le programme pour retrouver ces registres.Ceux définis ci-après permettent d’activer et de paramétrer les différents

modules dont dispose le PIC (dans le cadre de ce projet, nous utiliseronsuniquement le module de conversion analogique-numérique et le module dedétection des interruptions).Ces valeurs seront chargées lors de l’initialisation par la routine « INIT ».

Configuration du convertisseur analogique–numérique :Le registre « ADCON1 » permet de choisir le nombre d’entrées analogiquesainsi que le type de justification. Nous avons besoin d’une seule entrée de cetype d’où la valeur des bits de configuration du port : PCFGx = ‘1110’. Leconvertisseur intégré dans le PIC effectue une conversion sur 10 bits. Lerésultat est stocké sur 2 octets : « ADRESH » (octet de poids fort) et« ADRESL » (octet de poids faible). Le processeur ayant une architecture RISC8 bits, il serait inutile, et assez complexe, de conserver et d’exploiter ce résultatsur 10 bits. Nous faisons donc abstraction des deux bits les moins significatifs. Ilsuffit de choisir une justification à gauche (ADFM = 0), ainsi les 8 bits de poidsforts de la conversion sont stockés dans le registre « ADRESH ». Il ne resteplus qu’à le lire.Le registre « ADCON0 » permet de définir la fréquence d’échantillonnage duPIC, et de choisir la pin sur laquelle sera effectuée la conversion. L’oscillateur utilisé étant fixé à 4MHHz, la fréquence d’échantillonnage maximum que l’onpuisse choisir est de 500KHz (ADCSx = ‘01’). Pour terminer la configuration du

module de conversion analogique–numérique, il reste à définir le canal d’entrée.Nous choisissons la pin RAO du PORTA qui correspond au canal « A/D 0 »(CHSx = ‘000’).

DIRPORTA EQU B'00000001' ; Direction PORTA (registre TRISA); RA0 : entrée analogique; RA1 : N.C.; RA2 : N.C.; RA3 : N.C.

; RA4 : N.C.; RA5 : N.C.; on récupère le résultat de la conversion A->N; dans les registres ADRESH (Bank0) et ADRESL (Bank1)

DIRPORTB EQU B'01110000' ; Direction PORTB; RB0 : sortie CLK série pour le driver LCD; RB1 : sortie DATA série pour le driver LCD; RB2 : N.C.; RB3 : N.C.; RB4 : entrée BP [+]; RB5 : entrée BP [-]

; RB6 : entrée BP [V]; RB7 : N.C.

DIRPORTC EQU B'00000000' ; Direction PORTC; RC0 à RC7 : 8 bits du bus de sortie

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 41/73

 

ESME Sudria p.40/72

2003

Mise en service des interruptions :Le registre « INTCON » permet de choisir les interruptions standards que l’onsouhaite traiter. Nous disposons de trois bouton-poussoirs branchés sur les pinsRB4 à RB6. Il faut donc activer le masque d’interruption RB4/RB7 (RBIE=1) etle masque d’autorisation général des interruptions (GIE = 1). Le masque

d’autorisation général des périphériques (PEIE) est mis à ‘1’ pour pouvoir utiliser le « TIMER1 ».

; REGISTRE ADCON1 (ANALOGIQUE/DIGITAL); -------------------------------------------------------------

ADCON1VAL EQU B'00001110' ; Registre ADCON1 (configuration du port A/D); PCFG = 1110 => 1 entrée analogique (RA0); ADFM = 0 => justification à gauche; bit0 : PCFG0 : Port ConFiGuration control bit0

; bit1 : PCFG1 : Port ConFiGuration control bit1; bit2 : PCFG2 : Port ConFiGuration control bit2; bit3 : PCFG3 : Port ConFiGuration control bit3; bit4 : Non implémenté; bit5 : Non implémenté; bit6 : Non implémenté; bit7 : ADFM : A/D result ForMat select

; REGISTRE ADCON0 (ANALOGIQUE/DIGITAL); -------------------------------------------------------------

; ADCS1 | ADCS0 | Diviseur | Fréquence Max du quartz

; -----------+----------+-------------+----------------------------------------------------------; 0 | 0 | Fosc/2 | 1.25 MHz; 0 | 1 | Fosc/8 | 5 MHz => fe = 500 KHz; 1 | 0 | Fosc/32 | 20 MHz => fe = 125 KHz; 1 | 1 | Osc RC | Si > 1 MHz, uniquement en mode "sleep"

; CHS = B'000' => choix du canal A/D 0 (pin RA0)

ADCON0VAL EQU B'01000000' ; Registre ADCON0 (configuration du port A/D); bit0 : ADON : A/D ON bit; bit1 : Non implémenté; bit2 : GO/DONE : A/D conversion status bit

; bit3 : CHS0 : analog Channel Select bit0; bit4 : CHS1 : analog Channel Select bit1; bit5 : CHS2 : analog Channel Select bit2; bit6 : ADCS0 : A/D conversion Clock Select bit0; bit7 : ADCS1 : A/D conversion Clock Select bit1

; REGISTRE INTCON (contrôle interruptions standard); --------------------------------------------------------------------INTCONVAL EQU B'11001000'

; bit0 : RBIF : flag interruption RB4/RB7; bit1 : INTF : flag RB0/Int; bit2 : T0IF : flag tmr0; bit3 : RBIE : masque interruption RB4/RB7; bit4 : INTE : masque interruption RB0/Int; bit5 : T0IE : masque interruption tmr0

; bit6 : PEIE : masque autorisation générale périphériques; bit7 : GIE : masque autorisation générale interruption

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 42/73

 

ESME Sudria p.41/72

2003

Le « TIMER 1 » est un module de comptage 16 bits de cycles d’horloge. Il peutêtre couplé sur un oscillateur externe ou bien sur le même oscillateur que celuidu PIC. Dans notre cas, le timer sera utilisé pour faire clignoter l’afficheur (pour mettre en relief le « curseur »).Dans le registre « PIE1 », le bit « TMR1IE » permet s’il est mis à ‘1’, de traiter 

les interruptions engendrées par le « TIMER 1 ».

Le registre « T1CON » configure le « TIMER 1 ». Le bit « TMR1ON » met enservice ce timer et les bits « T1CKPSx » offrent le choix d’un pré-diviseur. Enutilisant l’oscillateur du PIC et un pré-diviseur égal à 8, nous obtenons uncompteur qui génère une interruption tous les 524288 cycles (soit 8 x 65536 = 8x 2^16), c’est-à-dire une interruption toutes les 0,5s (avec un oscillateur de4MHz). Le curseur de notre afficheur clignotera donc avec une période d’uneseconde.

; REGISTRE T1CON (configuration du Timer 1); ----------------------------------------------------------T1CONVAL EQU B'00110001'

; bit0 : TMR1ON : TiMeR 1 ON bit; bit1 : TMR1CS : TiMeR 1 Clock Source select bit; bit2 : T1SYNC : Timer 1 external clock input SYNChronisation control bit; bit3 : T1OSCEN : Timer 1 OSCillator ENable control bit; bit4 ; T1CKPS0 : Timer 1 oscillator ClocK Prescale Select bit 0; bit5 : T1CKPS1 : Timer 1 oscillator ClocK Prescale Select bit 1; bit6 : Inutilisé : lu comme ‘0’; bit7 : Inutilisé : lu comme ‘0’

; T1CKPS1 | T1CKPS0 | Valeur du pré-diviseur; -------------+-------------+------------------------------; 0 | 0 | 1 -> 65536 cycles (65ms à 4MHz); 0 | 1 | 2; 1 | 0 | 4; 1 | 1 | 8 -> 524288 cycles (0.5s à 4MHz)

; REGISTRE PIE1 (contrôle interruptions périphériques); --------------------------------------------------------------------PIE1VAL EQU B'00000001'

; bit0 : TMR1IE : masque interruption débordement tmr1; bit1 : TMR2IE : masque interruption TMR2 = PR2; bit2 : CCP1IE : masque interruption CCP1; bit3 : SSPIE : masque interruption port série synchrone; bit4 : TXIE : masque interruption transmission USART; bit5 : RCIE : masque interruption réception USART; bit6 : ADIE : masque interruption convertisseur A/D

; bit7 : PSPIE : Toujours 0 sur le PIC 16F876

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 43/73

 

ESME Sudria p.42/72

2003

Mise en place de “Macros” :

La définition de macros rends le programme plus structuré et plus simple àcomprendre. Les macros suivantes permettent de sélectionner une banqueparticulière en positionnant les 2 bits concernés. Il est évident qu’il n’est pastoujours nécessaire de repositionner les 2 bits. Néanmoins, l’utilisation de cesmacros ne nécessite qu’une ligne de code supplémentaire, et elle limitefortement les risques d’erreurs.

Déclaration des constantes :

Pour faciliter la relecture d’un programme, il est préférable d’utiliser desconstantes définies au préalable dont le nom est plus évocateur qu’une valeur quelconque. Ici sont déclarées les constantes de chaque caractère retranscritsur sept segments.

 

; Déclaration des codes permettant d'afficher chaque chiffre sur 7 segments :; -------------------------------------------------------------------------------------------------UN EQU B'00001100' ; 1DEUX EQU B'10110110' ; 2 bit0 : Virgule A 1TROIS EQU B'10011110' ; 3 bit1 : A ==== ====QUATRE EQU B'11001100' ; 4 bit2 : B F || || B 6 || || 2CINQ EQU B'11011010' ; 5 bit3 : C || G || || 7 ||SIX EQU B'11111010' ; 6 bit4 : D ==== ==> ====SEPT EQU B'01001110' ; 7 bit5 : E E || || C 5 || || 3HUIT EQU B'11111110' ; 8 bit6 : F || D || || 4 ||NEUF EQU B'11011110' ; 9 bit7 : G ==== ====ZERO EQU B'01111110' ; 0

TRAIT EQU B'10000000' ; -

;*********************************************************************************;* MACROS *;*********************************************************************************; Changement de banques; --------------------------------

BANK0 macro ; passer en banque0

bcf STATUS,RP0bcf STATUS,RP1endm

BANK1 macro ; passer en banque1bsf STATUS,RP0bcf STATUS,RP1

endmBANK2 macro ; passer en banque2

bcf STATUS,RP0bsf STATUS,RP1

endmBANK3 macro ; passer en banque3

bsf STATUS,RP0bsf STATUS,RP1

endm

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 44/73

 

ESME Sudria p.43/72

2003

Allocation de l’espace mémoire :

Pour traiter les données, il est indispensable d’utiliser des variables. En effet,celles-ci permettent de stocker des valeurs et elles facilitent la compréhensiondu programme si leur nom est choisi judicieusement. Chaque variable doitdisposer d’un espace mémoire dédié. Il faut déclarer chacune d’elles dans unezone mémoire. Le PIC 16F876 dispose de 80 octets de mémoire RAM par banque et de 16 octets de mémoire RAM en zone commune.La mémoire en zone commune est accessible depuis n’importe quelle banque.Nous l’utiliserons pour faire les sauvegardes de variables temporaires lors dutraitement des interruptions et pour stocker les valeurs de chaque digit car celles-ci doivent être accessibles à tout moment.

Le programme s’exécute principalement dans la banque 0 (hormis lors desinterruptions), donc la majorité des variables est déclarée dans l’espacemémoire de la banque 0.

 

;****************************************************************************; VARIABLES ZONE COMMUNE *;****************************************************************************; Zone de 16 bytes; -----------------------

CBLOCK 0x70 ; Début de la zone (0x70 à 0x7F)w_temp : 1 ; Sauvegarde registre Wstatus_temp : 1 ; Sauvegarde registre STATUSdigit1 : 1 ; définition des 7 segments (+ virgule) du 1er digitdigit2 : 1 ; définition des 7 segments (+ virgule) du 2nd digitdigit3 : 1 ; définition des 7 segments (+ virgule) du 3ème digitdigit4 : 1 ; définition des 7 segments (+ virgule) du 4ème digitENDC ; Fin de la zone

;****************************************************************************;* DECLARATIONS DES VARIABLES *;****************************************************************************; Zone de 80 bytes; ----------------------- ; Allocation de l'espace mémoire de la bank0 et déclaration des variables

CBLOCK 0x20 ; Début de la zone (0x20 à 0x6F)menu : 1 ; pointeur de menuchoixParam : 1 ; Variable de choix du paramètre à modifier

; u(k) = Kp £(k) + Ki [u(k-1)+£(k)] + Kd [£(k)-£(k-1)]cligno : 1 ; Variable d'état de clignotementparametre1 : 1 ; paramètre n°1 : Kpparametre2 : 1 ; paramètre n°2 : Kiparametre3 : 1 ; paramètre n°3 : Kdparametre4 : 1 ; paramètre n°4 : Limite d'intégrationcmpt1 : 1 ; compteur n°1cmpt2 : 1 ; compteur n°2resultConv : 1 ; résultat 8 bits de la conversion Analogique -> NumériqueresultConv2 : 1 ; ancien résultat 8 bits de la conversion Analogique -> Numériqueresult1 : 1 ; résultat du calcul de la proportionnelleresult2 : 1 ; résultat du calcul de la dérivée

result3 : 1 ; résultat du calcul de l'intégraleresult4 : 1 ; somme de result1 et result2

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 45/73

 

ESME Sudria p.44/72

2003

Détection et traitement des interruptions :

Détection des interruptions :La routine « interruptions » contient tous les tests qui permettent d’aiguiller les

interruptions vers la bonne sous-routine. Tout d’abord elle effectue lasauvegarde des différents registres.« w_temp » est la sauvegarde du registre de travail « W ». Ce registre va êtreutilisé pour la sauvegarde des autres registres. C’est donc le premier qui doitêtre sauvé. Au moment de l’interruption, on ne peut pas savoir comment sontconfigurés les bits RP0 et RP1, donc on ne sait pas vers quelle banque ilspointent. De ce fait, il est impératif de sauvegarder « W » dans la zone de RAMcommune.« status_temp » doit être sauvegardé car après le traitement des interruptions,le programme doit reprendre son cours avec le même statut (notamment dansla même banque).

 

resultPID : 1 ; résultat du calcul du PIDresultPID2 : 1 ; ancien résultat du calcul du PIDsourceInt : 1 ; source d'interruptionvartemp : 1 ; variable temporairevardigit : 1 ; variable de digitvarparam : 1 ; variable de paramètrevar1 : 1 ; variable n°1

var2 : 1 ; variable n°2var3 : 1 ; variable n°3produitH : 1 ; poids fort du résultat 16 bits de la multiplication 8x8bitsproduitL : 1 ; poids faible du résultat 16 bits de la multiplication 8x8bitssommeH : 1 ; poids fort du résultat de l'addition 8 bits (dépassement)sommeL : 1 ; poids faible du résultat de l'addition 8 bitsdiffH : 1 ; poids fort du résultat de la soustraction 8 bitsdiffL : 1 ; poids faible du résultat de la soustraction 8 bitssigne : 1 ; bits de signeresultDep : 1 ; variable de stockage du dépassement des opérations mathématiques 8 bitsENDC ; Fin de la zone

;*************************************************************************;* DEMARRAGE SUR RESET *;*************************************************************************

org 0x000 ; Adresse de départ après resetgoto INIT ; Initialiser

;*************************************************************************;* ROUTINE INTERRUPTION *;*************************************************************************

;sauvegarder les registres;-------------------------------

org 0x004 ; adresse d'interruptionmovwf w_temp ; sauver registre Wswapf STATUS,w ; swap status avec résultat dans wmovwf status_temp ; sauver status swappéBANK0 ; passer en banque0

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 46/73

 

ESME Sudria p.45/72

2003

Pour tester les interruptions engendrées par les bouton-poussoirs, il faut avanttout vérifier que le masque d’interruption sur RB4/7 est activé. Il suffit ensuite delire le « flag » d’interruption « RRBIF ». Par sécurité et pour éviter le phénomènede « rebond », des boucles de test du relâchement de chaque bouton sontajoutées. Si une interruption sur RB4/7 est détectée, la sous-routine de

traitement de cette interruption « INTBP » est appelée puis le flag d’interruptionest effacé.

Pour tester les interruptions générées par le « TIMER1 », il faut vérifier que lemasque d’interruption « TMR1IE » soit activé (attention, ce registre se trouvedans la banque 1). Il suffit ensuite de lire le « flag » d’interruption « TMR1IF »(banque 0). Si une interruption sur le timer 1 est détectée, la sous-routine detraitement « INTTMR » est appelée puis le flag d’interruption est effacé.

Lors de la fin du traitement, « STATUS » et « W » sont restaurés tels qu’ilsétaient avant l’interruption.

; Test et appel des différentes interruptions;-----------------------------------------------------

; Interruption RB4/RB7INT1 ; ---------------------------

btfsc INTCON,RBIE ; tester si interruption RB4/7 autoriséebtfss INTCON,RBIF ; oui, tester si interruption RB4/7 en coursgoto INT2 ; non sautercall INTBP ; oui, traiter interruption RB4/7

btfsc PORTB,4 ; tester si BP1 [+] appuyégoto $-1 ; oui, attendrebtfsc PORTB,5 ; tester si BP2 [-] appuyégoto $-1 ; oui, attendrebtfsc PORTB,6 ; tester si BP3 [V] appuyégoto $-1 ; oui, attendrebcf INTCON,RBIF ; effacer flag interruption RB4/7goto RESTORE ; et fin d'interruption

; Interruption TMR1INT2 ; -----------------------

bsf STATUS,RP0 ; sélectionner banque1btfss PIE1,TMR1IE ; tester si interruption autoriséegoto RESTORE ; non sauterbcf STATUS,RP0 ; oui, sélectionner banque0btfss PIR1,TMR1IF ; oui, tester si interruption en coursgoto RESTORE ; non sauter

call INTTMR1 ; oui, traiter interruption TMR1bcf PIR1,TMR1IF ; effacer flag interruption

; Restaurer registresRESTORE ; -----------------------

swapf status_temp,w ; swap ancien status, résultat dans wmovwf STATUS ; restaurer statusswapf w_temp,f ; Inversion L et H de l'ancien W sans modifier Z

swapf w_temp,w ; Ré-inversion de L et H dans W (W restauré sans modifier status)retfie ; return from interruption

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 47/73

 

ESME Sudria p.46/72

2003

Traitement des interruptions sur RB4/7 :Chaque interruption détectée sur un bouton poussoir a un effet différent sur leprogramme en fonction du menu en cours d’exécution. Le menu en cours estpointé par la variable « menu ». Un test est donc effectué sur cette variable pour accéder au menu pointé.

Si le menu pointé est le menu n°1, c’est-à-dire le menu de modification duparamètre Kp, alors le paramètre n°1 est :- incrémenté si l’interruption provient du BP1 [+] (si le paramètre dépasse 9, on

boucle en le remettant à 0),

- décrémenté si l’interruption provient du BP2 [-] (si le paramètre devientinférieur à 0, on boucle en le remettant à 9),

- validé si l’interruption provient du BP3 [V] , et la variable « menu » est effacéepour qu’elle pointe vers le menu n°0.

;*************************************************************************;* INTERRUPTION RB4/RB7 *;*************************************************************************INTBP

movf PORTB,w ; Chargement du PORTBmovwf sourceInt ; écriture dans la variable "sourceInt"

TESTMENU1decfsz menu,f ; décrémenter le pointeur de menugoto TESTMENU2 ; menu != 0 ?

; MENU 1 : Menu de modification du paramètre n°1 : Kp; ------------------------------------------------------------------------

btfss sourceInt,4 ; bit RB4=1 ?goto TESTM1incf parametre1,f ; oui -> interruption sur le PB1 [+] -> on incrémente le paramètre 1movf parametre1,wsublw 0x0Abtfsc STATUS,Z ; tester si W = 0clrf parametre1 ; si parametre1 = 10, on boucle le menu en remettant parametre1 = 0goto TESTV1

TESTM1btfss sourceInt,5 ; bit RB5=1 ?goto TESTV1movf parametre1,wbtfsc STATUS,Z ; tester si W = 0movlw 0x0A ; si parametre1 = 0, on boucle le menu en remettant parametre1 = 10

movwf parametre1decf parametre1,f ; oui -> interruption sur le PB2 [-] -> on décrémente le paramètre 1

TESTV1movlw 0x01btfss sourceInt,6 ; bit RB6=1 ?goto TESTF1movlw 0x00 ; oui -> interruption sur le PB3 [V] -> on passe au menu 0clrf choixParam

TESTF1movwf menu ; passage au menu en vigueurmovf parametre1,w ; conversion de parametre1 (chiffres) en digit1 (7 segments)movwf vardigit

call CONVDIGITmovwf digit1goto FINMENU

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 48/73

 

ESME Sudria p.47/72

2003

Si le menu pointé est le menu n°2, c’est-à-dire le menu de modification duparamètre Ki, alors le paramètre n°2 est :- incrémenté si l’interruption provient du BP1 [+] (si le paramètre dépasse 9, on

boucle en le remettant à 0),- décrémenté si l’interruption provient du BP2 [-] (si le paramètre devient

inférieur à 0, on boucle en le remettant à 9),- validé si l’interruption provient du BP3 [V] , et la variable « menu » est effacée

pour qu’elle pointe vers le menu n°0.

TESTMENU2decfsz menu,f ; décrémenter le pointeur de menugoto TESTMENU3 ; menu != 0 ?

; MENU 2 : Menu de modification du paramètre n°2 : Ki; ------------------------------------------------------------------------

btfss sourceInt,4 ; bit RB4=1 ?goto TESTM2incf parametre2,f ; oui -> interruption sur le PB1 [+] -> on incrémente le paramètre 2movf parametre2,wsublw 0x0Abtfsc STATUS,Z ; tester si W = 0clrf parametre2 ; si parametre2 = 10, on boucle le menu en remettant parametre2 = 0

goto TESTV2TESTM2

btfss sourceInt,5 ; bit RB5=1 ?goto TESTV2

movf parametre2,wbtfsc STATUS,Z ; tester si W = 0movlw 0x0A ; si parametre2 = 0, on boucle le menu en remettant parametre2 = 10movwf parametre2decf parametre2,f ; oui -> interruption sur le PB2 [-] -> on décrémente le paramètre 2

TESTV2movlw 0x02btfss sourceInt,6 ; bit RB6=1 ?goto TESTF2movlw 0x00 ; oui -> interruption sur le PB3 [V] -> on passe au menu 0clrf choixParam

TESTF2movwf menu ; passage au menu en vigueur

movf parametre2,w ; conversion de parametre2 (chiffres) en digit2 (7 segments)movwf vardigitcall CONVDIGITmovwf digit2

goto FINMENU

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 49/73

 

ESME Sudria p.48/72

2003

Si le menu pointé est le menu n°3, c’est-à-dire le menu de modification duparamètre Kd, alors le paramètre n°3 est :- incrémenté si l’interruption provient du BP1 [+] (si le paramètre dépasse 9, on

boucle en le remettant à 0),- décrémenté si l’interruption provient du BP2 [-] (si le paramètre devient

inférieur à 0, on boucle en le remettant à 9),- validé si l’interruption provient du BP3 [V] , et la variable « menu » est effacée

pour qu’elle pointe vers le menu n°0.

TESTMENU3decfsz menu,f ; décrémenter le pointeur de menugoto TESTMENU4 ; menu != 0 ?

; MENU 3 : Menu de modification du paramètre n°3 : Kd; -------------------------------------------------------------------------

btfss sourceInt,4 ; bit RB4=1 ?goto TESTM3incf parametre3,f ; oui -> interruption sur le PB1 [+] -> on incrémente le paramètre 3movf parametre3,wsublw 0x0Abtfsc STATUS,Z ; tester si W = 0clrf parametre3 ; si parametre3 = 10, on boucle le menu en remettant parametre3 = 0

goto TESTV3TESTM3

btfss sourceInt,5 ; bit RB5=1 ?goto TESTV3

movf parametre3,wbtfsc STATUS,Z ; tester si W = 0movlw 0x0A ; si parametre3 = 0, on boucle le menu en remettant parametre3 = 10movwf parametre3decf parametre3,f ; oui -> interruption sur le PB2 [-] -> on décrémente le paramètre 3

TESTV3movlw 0x03btfss sourceInt,6 ; bit RB6=1 ?goto TESTF3movlw 0x00 ; oui -> interruption sur le PB3 [V] -> on passe au menu 0clrf choixParam

TESTF3movwf menu ; passage au menu en vigueur

movf parametre3,w ; conversion de parametre3 (chiffres) en digit3 (7 segments)movwf vardigitcall CONVDIGITmovwf digit3

goto FINMENU

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 50/73

 

ESME Sudria p.49/72

2003

Si le menu pointé est le menu n°4, c’est-à-dire le menu de modification de lalimite d’intégration, alors le paramètre n°4 est :- incrémenté si l’interruption provient du BP1 [+] (si le paramètre dépasse 9, on

boucle en le remettant à 0),- décrémenté si l’interruption provient du BP2 [-] (si le paramètre devient

inférieur à 0, on boucle en le remettant à 9),- validé si l’interruption provient du BP3 [V] , et la variable « menu » est effacée

pour qu’elle pointe vers le menu n°0.

TESTMENU4decfsz menu,f ; décrémenter le pointeur de menugoto TESTMENU5 ; menu != 0 ?

; MENU 4 : Menu de modification du paramètre n°4 : Limite d'intégration; ----------------------------------------------------------------------------------------------

btfss sourceInt,4 ; bit RB4=1 ?goto TESTM4incf parametre4,f ; oui -> interruption sur le PB1 [+] -> on incrémente le paramètre 4movf parametre4,wsublw 0x0Abtfsc STATUS,Z ; tester si W = 0clrf parametre4 ; si parametre4 = 10, on boucle le menu en remettant parametre4 = 0

goto TESTV4TESTM4

btfss sourceInt,5 ; bit RB5=1 ?goto TESTV4

movf parametre4,wbtfsc STATUS,Z ; tester si W = 0movlw 0x0A ; si parametre4 = 0, on boucle le menu en remettant parametre4 = 10movwf parametre4decf parametre4,f ; oui -> interruption sur le PB2 [-] -> on décrémente le paramètre 4

TESTV4movlw 0x04btfss sourceInt,6 ; bit RB6=1 ?goto TESTF4movlw 0x00 ; oui -> interruption sur le PB3 [V] -> on passe au menu 0clrf choixParam

TESTF4movwf menu ; passage au menu en vigueur

movf parametre4,w ; conversion de parametre4 (chiffres) en digit4 (7 segments)movwf vardigitcall CONVDIGITmovwf digit4

goto FINMENU

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 51/73

 

ESME Sudria p.50/72

2003

Si le menu pointé est le menu n°5, c’est-à-dire le menu de choix du paramètre àmodifier, alors « choixParam » est :- incrémenté si l’interruption provient du BP1 [+] (si le paramètre dépasse 4, on

boucle en le remettant à 1),- décrémenté si l’interruption provient du BP2 [-] (si le paramètre devient

inférieur à 1, on boucle en le remettant à 4),- stocké dans la variable « menu » si l’interruption provient du BP3 [V].

TESTMENU5decfsz menu,f ; décrémenter le pointeur de menugoto TESTMENU0 ; menu != 0 ?

; MENU 5 : Menu de choix du paramètre à modifier; -----------------------------------------------------------------

btfss sourceInt,5 ; bit RB5=1 ?goto TESTM5

incf choixParam,f ; oui -> interruption sur le PB2 [-] -> on incrémente choixParammovf choixParam,wsublw 0x05btfss STATUS,Z ; tester si W = 0goto TESTV5movlw 0x01 ; si choixParam = 5, on boucle le menu en remettant choixParam = 1movwf choixParamgoto TESTV5

TESTM5btfsc sourceInt,4 ; bit RB4=1 ?decfsz choixParam,f ; oui -> interruption sur le PB1 [+] -> on décrémente choixParamgoto TESTV5movlw 0x04 ; si choixParam = 0, on boucle le menu en remettant choixParam = 4movwf choixParam

TESTV5movlw 0x05btfsc sourceInt,6 ; bit RB6=1 ?movf choixParam,w ; oui => interruption sur le PB3 [V]

; => on passe au menu de modification du paramètre choisimovwf menu ; passage au menu en vigueur

goto FINMENU

TESTMENU0; MENU 0 : Menu de statique : attente d'une interruption

; --------------------------------------------------------------------------btfss sourceInt,6 ; bit RB6=1 ?goto FINMENUmovlw 0x05movwf menu ; passage au choix du paramètre à modifier (menu 5)movlw 0x01movwf choixParam ; initialisation du pointeur du paramètre à modifier

FINMENU

CALL AFFICHAGE ; routine d'affichage des paramètres sur l'afficheur LCD; rafraîchissement de l'afficheur

return ; fin d'interruption RB0/RB4

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 52/73

 

ESME Sudria p.51/72

2003

Si le menu pointé est le menu n°0, c’est-à-dire le menu statique, alors sil’interruption provient du BP3 [V], la valeur 5 est stockée dans la variable« menu » pour qu’elle pointe vers le menu n°5, menu de choix du paramètre àmodifier. « choixParam » est alors initialisée à ‘1’.

Une fois toutes les possibilités de menus testées, et une fois le menu en cours

traité, le programme appelle la routine « AFFICHAGE » pour qu’elle rafraîchisseles valeurs transmises à l’afficheur LCD.

Fin du traitement des interruptions sur RB4/7.

Traitement des interruptions du TIMER 1 :Toutes les 0,5s le timer 1 génère une interruption. A chacune de cesinterruptions, la variable « cligno » passe alternativement de ‘1’ à ‘2’. Si« choixParam » est différent de 0 alors le menu en cours est différent du menun°0 (menu statique). On fait donc clignoter le curseur. Un test du paramètrepointé par la variable « choixParam » est effectué afin de déterminer l’emplacement du curseur. Le digit pointé par « choixParam » reste fixe et lesautres digits sont affichés puis effacés alternativement. Le curseur est alors leseul digit affiché en permanence.

TESTMENU0; MENU 0 : Menu de statique : attente d'une interruption; ------------------------------------------------------------------------

btfss sourceInt,6 ; bit RB6=1 ?goto FINMENUmovlw 0x05movwf menu ; passage au choix du paramètre à modifier (menu 5)movlw 0x01movwf choixParam ; initialisation du pointeur du paramètre à modifier

FINMENU

CALL AFFICHAGE ; routine d'affichage des paramètres sur l'afficheur LCD; rafraîchissement de l'afficheur

return ; fin d'interruption RB4/RB7

;*************************************************************************;* INTERRUPTION TIMER 1 *;*************************************************************************

INTTMR1decfsz cligno,f ; tester la valeur de "cligno"goto TESTPARAM0 ; cligno != 1movf choixParam,w ; cligno = 1movwf varparammovlw 0x02movwf cligno ; passage au choix du paramètre à modifier (menu 5)

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 53/73

 

ESME Sudria p.52/72

2003

TESTPARAM1decfsz varparam,f ; décrémenter le pointeur de paramètregoto TESTPARAM2 ; choixParam != 0 ?movf parametre1,w ; conversion de parametre1 (chiffres) en digit1 (7 segments)movwf vardigitcall CONVDIGITmovwf digit1

movlw 0x00movwf digit2 ; digit2 videmovwf digit3 ; digit3 videmovwf digit4 ; digit4 videgoto FINPARAM

TESTPARAM2decfsz varparam,f ; décrémenter le pointeur de paramètregoto TESTPARAM3 ; choixParam != 0 ?movf parametre2,w ; conversion de parametre2 (chiffres) en digit2 (7 segments)movwf vardigitcall CONVDIGIT

movwf digit2movlw 0x00movwf digit1 ; digit1 videmovwf digit3 ; digit3 videmovwf digit4 ; digit4 videgoto FINPARAM

TESTPARAM3decfsz varparam,f ; décrémenter le pointeur de paramètregoto TESTPARAM4 ; choixParam != 0 ?movf parametre3,w ; conversion de parametre3 (chiffres) en digit3 (7 segments)movwf vardigit

call CONVDIGITmovwf digit3movlw 0x00movwf digit1 ; digit1 videmovwf digit2 ; digit2 videmovwf digit4 ; digit4 videgoto FINPARAM

TESTPARAM4decfsz varparam,f ; décrémenter le pointeur de paramètregoto TESTPARAM0 ; choixParam != 0 ?

movf parametre4,w ; conversion de parametre4 (chiffres) en digit4 (7 segments)movwf vardigitcall CONVDIGITmovwf digit4movlw 0x00movwf digit1 ; digit1 videmovwf digit2 ; digit2 videmovwf digit3 ; digit3 vide

goto FINPARAM

TESTPARAM0

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 54/73

 

ESME Sudria p.53/72

2003

Une fois toutes les possibilités de paramètres testées, et une fois le paramètreen cours traité, le programme appelle la routine « CONVPARAM ». Elle effectuela conversion de la valeur numérique de chaque paramètre en une valeur codéesur 8 bits (7 segments + 1 virgule). Ensuite, la routine « AFFICHAGE » rafraîchitles valeurs transmises à l’afficheur LCD.

Fin du traitement des interruptions sur TMR1.

Initialisations :

Initialisation des ports :Dans cette partie, tous les registres nécessaires à la configuration des portssont initialisés avec les valeurs qui leur ont été assignées au début duprogramme. Ainsi les entrées et sorties de chaque port sont définies (registres« TRISA », « TRISB » et « TRISC »). L’entrée analogique est configurée par lesregistres « ADCON0 » et « ADCON1 ». Les sorties sont mises à ‘0’ pour éviter 

les valeurs aléatoires.

call CONVPARAM

FINPARAM

CALL AFFICHAGE ; routine d'affichage des paramètres sur l'afficheur LCD; rafraîchissement de l'afficheur

return ; fin d'interruption TMR1

;*************************************************************************;* INITIALISATIONS *;*************************************************************************

INIT; initialisation PORTS (banques 0 et 1); -------------------------------------------------

BANK0 ; sélectionner la banque0clrf PORTA ; Sorties PORTA à 0clrf PORTB ; Sorties PORTB à 0

clrf PORTC ; Sorties PORTC à 0movlw ADCON0VAL ; Configuration du mode digital/analogiquemovwf ADCON0 ; écriture dans le registre de contrôle A/Dbsf STATUS,RP0 ; sélectionner banque1movlw ADCON1VAL ; PORTA en mode digital/analogiquemovwf ADCON1 ; écriture dans le registre de contrôle A/Dmovlw DIRPORTA ; Direction PORTAmovwf TRISA ; écriture dans le registre directionmovlw DIRPORTB ; Direction PORTBmovwf TRISB ; écriture dans le registre directionmovlw DIRPORTC ; Direction PORTCmovwf TRISC ; écriture dans le registre direction

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 55/73

 

ESME Sudria p.54/72

2003

Initialisation des registres d’interruptions :Tout comme les registres de configuration des ports, les registres d’interruptionsdoivent être initialisés avec les valeurs assignées précédemment. Les registres« INTCON », « PIE1 » et « T1CON » sont donc initialisés pour permettre lesinterruptions sur les entrées « RB4/7 » et sur le « TIMER 1 ».

Initialisation des variables :Lors de chaque mise en marche du circuit, certaines variables doivent êtreimpérativement initialisées car si elles sont attribuées de façon aléatoire, ellespeuvent compromettre le bon fonctionnement du programme.

Lorsque les initialisations sont terminées, l’exécution se poursuit dans leprogramme principal. Celui-ci centralise l’appel des différentes routines, ilcoordonne donc les tâches qui permettront d’obtenir le traitement del’asservissement. Chacune de ces tâches doit être définie au préalable.

; initialisation des registres d'interruptions (banque 1); ---------------------------------------------------------------------

movlw INTCONVAL ; charger valeur registre interruptionmovwf INTCON ; initialiser interruptionsmovlw PIE1VAL ; Initialiser registremovwf PIE1 ; interruptions périphériques 1bcf STATUS,RP0 ; passer en banque 0clrf TMR1L ; effacer timer1, 8 lsbclrf TMR1H ; effacer timer1, 8 msbmovlw T1CONVAL ; charger valeur registre interruptionmovwf T1CON ; initialiser interruptions

; initialisation variables; -----------------------------

clrf menu ; initialisation de « menu » pour qu’il pointe vers le menu général

clrf choixParam ; initialisation du de la variable de choix du paramètre à modifierclrf parametre1 ; initialisation du paramètre n°1 : Kpclrf parametre2 ; initialisation du paramètre n°2 : Kiclrf parametre3 ; initialisation du paramètre n°3 : Kdclrf parametre4 ; initialisation du paramètre n°4 : Limite d'intégrationmovlw 0x02movwf cligno ; initialisation de la variable d'état de clignotementclrf resultConv ; initialisation de la variable de conversion A/Nclrf resultPID2 ; initialisation de la variable de calcul du PID

goto START ; programme principal

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 56/73

 

ESME Sudria p.55/72

2003

Routines :

La programmation du module d’asservissement PID nécessite de nombreusesopérations. La mise en œuvre d’un tel programme est assez complexe, il doitdonc être découpé en plusieurs modules ayant chacun une tâche différente àaccomplir. C’est le rôle des routines qui permettent entre autres de structurer leprogramme.

Conversion analogique-numérique :Cette routine réalise l’échantillonnage sur une entrée analogique. La conversionse fait en plusieurs étapes :- la valeur de l’échantillon précédent est mémorisée (car elle est nécessaire au

calcul du PID),- le convertisseur est activé par la mise à ‘1’ de « ADON »,- attente de la fin de l’acquisition (le convertisseur intégré au PIC a un temps

d’acquisition Tacq = 19,7µs),- la conversion analogique numérique débute lors de la mise à ‘1’ de « GO »,- attente de la fin de la conversion (le convertisseur intégré au PIC a un temps

de conversion Tad = 3,2µs),- lecture de la valeur de l’échantillon. Chaque échantillon est stocké sur 10 bits

dans la paire de registres « ADRESH » et « ADRESL ». La justification étantfaite à gauche, et pour des raisons de commodité, on n’exploite que les 8 bitsde poids fort que l’on trouve dans le registre « ADRESH ».

;*****************************************************************;* CONVERSION Analogique -> Numérique *

;*****************************************************************;* entrée : *

;* *;* sortie : resultConv *;* *

;*****************************************************************

CONVmovf resultConv,w ; Chargement du résultat de la conversion précédentemovwf resultConv2 ; Stockage de l'ancien résultat de la conversion

; 1 - lancement du convertisseur : ADON = 1; --------------------------------------------------------

bsf ADCON0,ADON

; 2 - attendre que l'acquisition soit effectuée (Tacq = 19.7µs); -------------------------------------------------------

movlw 0x07 ; nb de bouclesmovwf cmpt1 ; initialiser compteur de boucles

LOOPACQ ; (LOOPACQ = 22µs pour cmpt1=x07 et osc=4MHz)decfsz cmpt1,f ; décrémenter le compteur de bouclesgoto LOOPACQ ; if = 0 -> LOOPACQ

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 57/73

 

ESME Sudria p.56/72

2003

Addition :La routine « ADDI » réalise l’addition des chiffres stockés dans les variables« var1 » et « var2 ». L’addition est effectuée par l’instruction « addwf », maisl’utilisation de cette routine permet de détecter les dépassements eninterrogeant le registre « STATUS,C ». Le résultat est alors stocké dans deuxoctets, « sommeL » contenant les 8 bits de poids faible et « sommeH »contenant les éventuels dépassements.

;*****************************************************************;* ADDITION 8 bits *;* avec gestion du dépassement *;*****************************************************************;* entrées : var1 (8 bits) ] variables d'entrée non *;* var2 (8 bits) ] modifiées par le programme *;* *;* sortie : sommeL (8 bits) *;* sommeH (8 bits pour le dépassement de capacité) *;* *;*****************************************************************;* var1 + var2 -> [sommeL ; sommeH] *

;*****************************************************************

ADDIclrf sommeH ; effacer dépassementmovf var1,w ; charger la variable n°1 dans wmovwf sommeL ; sauver dans sommeLmovf var2,w ; charger la variable n°2 dans waddwf sommeL,f ; ajouter w et sommeL puis stocker dans sommebtfsc STATUS,C ; tester si bit de dépassement = 1incfsz sommeH,f ; oui, ajouter au résultat poids fort

return

; 3 - démarrer la conversion en positionnant le bit GO du registre ADCON0; ------------------------------------------------------------------------------------------------

bsf ADCON0,GO

; 4 - attendre que la conversion soit terminée (2Tad = 3.2µs); --------------------------------------------------------

movlw 0x01 ; nb de bouclesmovwf cmpt1 ; initialiser compteur de boucles

LOOPAD ; (LOOPAD = 4µs pour cmpt1=x01 et osc=4MHz)decfsz cmpt1,f ; décrémenter le compteur de bouclesgoto LOOPAD ; if = 0 -> LOOPAD

; 5 - Lire le résultat de la conversion dans ADRESH; ---------------------------------------------------------------

movf ADRESH,w ; Chargement du registre ADRESHmovwf resultConv ; Stockage des 8 bits du résultat de la conversion

return

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 58/73

 

ESME Sudria p.57/72

2003

Soustraction :La routine « SOUSTRAC » soustrait la variable « var2 » à la variable « var1 ».La soustraction est effectuée par l’instruction « subwf », mais l’utilisation decette routine permet de gérer les résultats négatifs qui se traduisent par desdépassements de capacité que l’on détecte en interrogeant le registre

« STATUS,C ». Dans le cas d’un résultat négatif, il faut calculer le complémentvrai pour obtenir un résultat exploitable. Le résultat est stocké dans l’octet« diffL », et le bit « signe,0 » reçoit le bit de signe du résultat.

Multiplication :La routine « MULTI » multiplie « var1 » et « var2 ». Le résultat nécessite donc16 bits, donc 2 octets « produitH » et « produitL ».Pour illustrer le principe de fonctionnement, voici la réalisation d’unemultiplication manuelle. Nous multiplions ici 12 par 13, c’est une opération de4x4 bits avec un résultat sur 8 bits. Ceci afin de simplifier l’explication.Le tableau suivant montre que pour programmer une multiplication, il suffit demultiplier les bits un à un en effectuant un décalage à gauche lors duchargement d’un nouveau bit multiplicateur.

;*****************************************************************;* SOUSTRACTION 8 bits *;*****************************************************************;* entrées : var1 (8 bits) ] variables d'entrée non *;* var2 (8 bits) ] modifiées par le programme *;* *;* sorties : diffL (8 bits) *

;* signe,0 bit de signe du résultat *;* *;*****************************************************************;* var1 - var2 -> (signe) diffL *;*****************************************************************

SOUSTRACbcf signe,0 ; effacer le bit de signemovf var1,w ; charger la variable n°1 dans wmovwf diffL ; sauver dans diffLmovf var2,w ; charger la variable n°2 dans wsubwf diffL,f ; soustraire w à diffL puis stocker dans diffL

btfss STATUS,C ; tester si bit de dépassement = 0 , le résultat est donc négatif  goto COMP ; si résultat <0 , on cherche le complément à 2return

COMP bsf signe,0 ; stockage du bit de signe négatif  comf diffL,f ; calcul du complément restreintincf diffL,f ; calcul du complément vrai (complément à 2)

return

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 59/73

 

ESME Sudria p.58/72

2003

1 1 0 0 12X 1 1 0 1 13

1 1 0 0 120 0 0 0 0 0

1 1 0 0 0 0 481 1 0 0 0 0 0 96

1 0 0 1 1 1 0 0 156

Les résultats intermédiaires sont cumulés dans la variable « produitH »,au fur et à mesure du traitement. Le calcul d’un produit 8x8 bits comportedonc 8 étapes intermédiaires qui correspondent au traitement de chaque

bit du multiplicateur.

;*****************************************************************;* MULTIPLICATION 8 x 8 bits *;*****************************************************************;* entrées : var1 (8 bits) ] variables d'entrée non *;* var2 (8 bits) ] modifiées par le programme *;* *;* résultat sur 16 bits : produitH (8 bits de poids fort) *;* produitL (8 bits de poids faible) *;* *;*****************************************************************;* var1 * var2 -> [produitH ; produitL] *;*****************************************************************

MULTIclrf produitH ; effacer le résultat poids fortclrf produitL ; effacer le résultat poids faiblemovlw 0x08 ; pour 8 bitsmovwf cmpt1 ; initialiser compteur de bouclesmovf var1,w ; charger le multiplicateur n°1 dans wmovwf vartemp ; sauver dans vartempmovf var2,w ; charger le multiplicateur n°2 dans w

LOOPMULTI

rrf vartemp,f ; décaler le multiplicateur vers la droitebtfsc STATUS,C ; tester si bit sorti = 1addwf produitH,f ; oui, ajouter au résultat poids fortrrf produitH,f ; décaler le résultat poids fortrrf produitL,f ; décaler le résultat poids faibledecfsz cmpt1,f ; décrémenter le compteur de bouclesgoto LOOPMULTI ; pas fini, bit suivant

return

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 60/73

 

ESME Sudria p.59/72

2003

Calcul du PID :La routine « PID » résout l’équation suivante :

u(k) = Kp e(k) + Ki [ u(k-1) + e(k) ] + Kd [ e(k) - e(k-1) ]

avec : e(k) : résultat de la conversion A/D (variable « resultConv »)

e(k-1) : résultat de la conversion A/D précédente (« resultConv2 »)u(k-1) : résultat précédent du calcul du PID (« resultPID2 »)

La valeur des échantillons est codée sur 8 bits (registre « ADRESH »). Cettevaleur correspond à une tension comprise entre –5V et +5V. Il est doncnécessaire d’étalonner les données avant de commencer à résoudre l’équation.L’étalonnage est effectué comme nous l’avons précédemment défini dans lapartie « étalonnage des données ». Cela consiste simplement à recentrer lesdonnées sur ‘0’, c’est-à-dire soustraire ‘127’ à la variable d’entrée.

;*****************************************************************;* Calcul du PID *;*****************************************************************;* entrées : resultConv, resultConv2, resultPID2 *;* parametre1, parametre2, parametre3, parametre4 *;* signe *;* *;* sorties : resultPID *;* signe, resultPID2, resultConv2 *

;*****************************************************************;* u(k) = Kp £(k) + Ki [u(k-1)+£(k)] + Kd [£(k)-£(k-1)] *;*****************************************************************

PID ; resultPID = [ parametre1 + parametre2 + parametre3 ] * resultConv; + parametre2 * resultPID2 - parametre3 * resultConv2

; -1 < parametre1, parametre2, parametre3 < 10

; signe,1 contient le signe de resultConv centré sur 0 = signe de result1; signe,2 contient le signe de resultConv2 centré sur 0 = signe de result3; signe,3 contient le signe de resultPID centré sur 0; signe,4 contient le signe de resultPID2 centré sur 0 = signe de result2

; signe,5 contient le signe de result4

; 1) Recentrer la valeur du signal échantillonné sur 0

; ------------------------------------------------------------------; -5V < E(k) < +5V => 0 < resultConv < 255; => -127 < resultConv - 127 < +128

movf resultConv,w ; charger resultConv dans var1movwf var1movlw D'127' ; charger '127' dans var2movwf var2call SOUSTRAC ; appel de la routine de soustractionmovf diffL,w ; stockage de resultConv recentré sur 0movwf resultConvbcf signe,1 ; effacer signe,1btfsc signe,0 ; stockage du signe du résultat de la soustraction dans signe,1

bsf signe,1clrf resultDep ; effacer l'octet de traitement des dépassements

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 61/73

 

ESME Sudria p.60/72

2003

Une fois l’étalonnage effectué, le calcul débute. Celui-ci est scindé en plusieursrésultats intermédiaires afin de simplifier le traitement des dépassements. Eneffet, chaque résultat intermédiaire découle d’une multiplication dont le résultatoccupe jusqu’à 16 bits. Dès qu’il y a un dépassement, on l’ajoute ou on lesoustrait à la variable « resultDep » en fonction du signe du résultat sur lequel

apparaît ce dépassement. Si à la fin du calcul « resultDep » est différent dezéro, il y a un dépassement et le signal devra être écrêté pour éviter des valeursaberrantes.Le premier résultat intermédiaire correspond à « ( Kp + Ki + Kd ) . e(k) »Son bit de signe est stocké dans le bit « signe,1 ».

Le second résultat intermédiaire correspond à « Ki . u(k-1) »Son bit de signe est stocké dans le bit « signe,4 ». S’il présente undépassement, « resultDep » est modifié en conséquence.

; 2) Calculer : result1 = [ parametre1 + parametre2 + parametre3 ] * resultConv; -----------------------------------------------------------------------------------------------------

movf parametre1,w ; charger parametre1 dans var1movwf var1movf parametre2,w ; charger parametre2 dans var2

movwf var2call ADDI ; appel de la routine d'additionmovf sommeL,w ; stocker la somme de parametre1 et parametre2 dans var2movwf var2movf parametre3,w ; charger parametre3 dans var1movwf var1call ADDI ; appel de la routine d'additionmovf sommeL,w ; stocker la somme des parametre1, 2 et 3 dans var2movwf var2movf resultConv,w ; charger resultConv dans var1movwf var1call MULTI ; appel de la routine de multiplication

movf produitH,w ; stockage de produitH dans resultDepmovwf resultDepmovf produitL,w ; stockage de produitL dans result1movwf result1 ; le signe de result1 est donné par signe,1

; 3) Calculer : result2 = parametre2 * resultPID2; -------------------------------------------------------------

movf resultPID2,w ; charger resultPID2 dans var1movwf var1movf parametre2,w ; charger parametre2 dans var2movwf var2call MULTI ; appel de la routine de multiplicationbtfss produitH,0 ; resultDep est incrémenté si produitH =! 0goto SKIPDEP1 ; produitH = 0btfss signe,4 ; prohuitH > 0incf resultDep,f ; result2 > 0btfsc signe,4decf resultDep,f ; result2 =< 0

SKIPDEP1

movf produitL,w ; stockage de produitL dans result2movwf result2 ; le signe de result2 est donné par signe,4

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 62/73

 

ESME Sudria p.61/72

2003

Le troisième résultat intermédiaire correspond à « Kd . e(k-1) »Son bit de signe est stocké dans le bit « signe,2 ». S’il présente undépassement, « resultDep » est modifié en conséquence.

Les calculs intermédiaires sont maintenant terminés. Il reste à tester si leur dépassement cumulé est nul. Dans le cas contraire, il est inutile de poursuivre le

calcul, car le signal doit être écrêté à sa valeur maximale (soit ‘255’) si« resultDep » est positif, ou à sa valeur minimale (soit ‘0’) s’il est négatif.

S'il n’y a pas de dépassement, ou si ces dépassements s’annulent, le calcul del’équation se poursuit.

; 4) Calculer : result3 = parametre3 * resultConv2; ----------------------------------------------------------------

movf parametre3,w ; charger parametre3 dans var1movwf var1movf resultConv2,w ; charger resultConv2 dans var2movwf var2call MULTI ; appel de la routine de multiplicationincf produitH,f  decfsz produitH,f ; tester la valeur de produitHgoto TRAITDEP2 ; prohuitH > 0goto SKIPDEP2 ; produitH = 0

TRAITDEP2

btfss signe,2incf resultDep,f ; result3 > 0btfsc signe,2decf resultDep,f ; result3 =< 0

SKIPDEP2movf produitL,w ; stockage de produitL dans result3movwf result3 ; le signe de result3 est donné par signe,2

incf resultDep,f  decfsz resultDep,f ; tester la valeur de resultDepgoto TRAITDEP3 ; resultDep =! 0goto SKIPDEP3 ; resultDep = 0

TRAITDEP3movf resultDep,w ; charger resultDep dans wbtfsc STATUS,Z ; tester si w = 0goto DEPASSNEG ; resultDep < 0 => on écrète le signal à sa valeur min : 0

; resultDep > 0 => on écrète le signal à sa valeur max : 255movlw D'255' ; il y a dépassement positif => charger '255' dans wgoto SUITECR4

DEPASSNEGmovlw D'0' ; il y a dépassement négatif => charger '0' dans wgoto SUITECR4

SKIPDEP3

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 63/73

 

ESME Sudria p.62/72

2003

Les deux premiers résultats intermédiaires sont additionnés en tenant comptede leur signe respectif. Si leurs signes sont différents, alors c’est unesoustraction qu’il faut réaliser.On obtient un quatrième résultat intermédiaire dont le bit de signe est stockédans le bit « signe,5 ».

Pour terminer le calcul, il reste à soustraire les deux derniers résultatsintermédiaires en tenant toujours compte de leur signe. Si leurs signes sontdifférents c’est une addition qu’il faut réaliser.

; 5) Additionner : result4 = result1 + result2; -------------------------------------------------------

movf result1,w ; charger result1 dans var1movwf var1movf result2,w ; charger result2 dans var2movwf var2bcf signe,5 ; initialisation du bit de signe de result4btfss signe,1 ; test sur le signe de result1goto RCPOSITIF3 ; result1 >= 0btfss signe,4 ; result1 < 0

goto SIGNDIFF3 ; result2 >= 0 et result1 < 0bsf signe,5 ; result4 est négatif  goto SIGNEQU3 ; result2 < 0 et result1 < 0

RCPOSITIF3btfsc signe,4 ; result1 >= 0goto SIGNDIFF3 ; result2 < 0 et result1 >= 0

SIGNEQU3 ; result2 >= 0 et result1 >= 0call ADDI ; appel de la routine d'additionmovf sommeL,wgoto SUITECR3

SIGNDIFF3btfss signe,1 ; test sur le signe de result1

goto SKIPINV3 ; result1 > 0 et result2 < 0movf result2,w ; result1 < 0 et result2 > 0movwf var1 ; permuter result1 et result2 avant de les soustrairemovf result1,wmovwf var2

SKIPINV3call SOUSTRAC ; appel de la routine de soustractionmovf diffL,wbtfsc signe,0 ; test du signe du résultat de la soustractionbsf signe,5 ; result4 est négatif  

SUITECR3movwf result4 ; le signe de result4 est donné par signe,5

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 64/73

 

ESME Sudria p.63/72

2003

On obtient le résultat final « resultPID » dont le bit de signe est stocké dans lebit « signe,3 ».

Le calcul du PID est maintenant réalisé, cependant cette valeur doit êtredécentrée conformément au formatage des données défini précédemment.

; 6) Soustraire : resultPID = result4 - result3; -------------------------------------------------------

movf result4,w ; charger result4 dans var1movwf var1movf result3,w ; charger result3 dans var2movwf var2bcf signe,3 ; initialisation du bit de signe de resultPIDbtfss signe,5 ; test sur le signe de result4goto RCPOSITIF4 ; result4 >= 0btfss signe,2 ; result4 < 0goto SIGNDIFF4 ; result3 >= 0 et result4 < 0goto SIGNEQU4 ; result3 < 0 et result4 < 0

RCPOSITIF4

btfss signe,2 ; result4 >= 0goto SIGNEQU4 ; result3 >= 0 et result4 >= 0

SIGNDIFF4 ; result3 < 0 et result4 >= 0btfsc signe,5 ; test sur le signe de result4 => resultPID est du signe de result4bsf signe,3 ; resultPID est négatif  call ADDI ; appel de la routine d'additionmovf sommeL,wgoto SUITECR4

SIGNEQU4btfss signe,5 ; test du signe de result4goto SKIPINV4 ; result4 > 0 et result3 > 0movf result3,w ; result4 < 0 et result3 < 0

movwf var1 ; permuter result3 et result4 avant de les soustrairemovf result4,wmovwf var2

SKIPINV4call SOUSTRAC ; appel de la routine de soustractionmovf diffL,wbtfsc signe,0 ; test du signe du résultat de la soustractionbsf signe,3 ; resultPID est négatif  

SUITECR4movwf resultPID ; le signe de resultPID est donné par signe,3

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 65/73

 

ESME Sudria p.64/72

2003

En effet, « resultPID » doit être compris entre ‘0’ et ‘255’ pour pouvoir êtreinjecté sur le PORTC. Il suffit donc d’ajouter ‘127’ à « resultPID ». Dans le casoù la valeur de « resultPID » centrée sur ‘0’ est négative, il faut soustraire« resultPID » à ‘127’.

; 7) Décentrer la valeur du signal corrigé pour qu'il soit compris entre 0 et 255; ---------------------------------------------------------------------------------------------------; -127 < resultPID < +128 => 0 < resultPID + 127 < 255; => -5V < E(k) < +5V

movf resultConv,w ; mémoriser le résultat de la conversion centré sur 0movwf resultConv2bcf signe,2btfsc signe,1 ; mémoriser le signe du résultat de la conversion centré sur 0 dans signe,2bsf signe,2movlw D'127' ; charger '127' dans var1movwf var1movf resultPID,w ; charger resultPID dans var2movwf var2movwf resultPID2 ; mémoriser le résultat du calcul du PID centré sur 0btfsc signe,3 ; mémoriser le signe du résultat du calcul du PID centré sur 0 dans signe,4goto SOUSPIDbcf signe,4 ; resultPID centré sur 0 est positif  call ADDI ; appel de la routine d'additionmovf sommeL,wgoto FINPID

SOUSPIDbsf signe,4 ; resultPID centré sur 0 est négatif  call SOUSTRAC ; appel de la routine de soustraction

movf diffL,wFINPID

movwf resultPID ; stockage de resultPID compris entre 0 et 255

return

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 66/73

 

ESME Sudria p.65/72

2003

Conversion de chiffres en digits :La routine « CONVDIGIT » réalise la conversion de la variable « vardigit » en uncode 8 bits. Ce code représente l’affichage sur sept segments du chiffrecontenu dans « vardigit ».Cette routine permet donc d’obtenir la représentation sur sept segments (plus

une virgule) d’une valeur comprise entre ‘0’ et ‘9’. Dans le cas d’une valeur erronée qui ne se trouverait pas dans cet encadrement, la routine retourne lecode d’un digit représentant un trait « – ». Ainsi, si l’on visualise un trait sur l’un des digits de l’afficheur LCD, cela indiqueune erreur.

;*****************************************************************;* CONVERSION Chiffres -> Digits *;*****************************************************************;* entrée : vardigit *;* *

;* sortie : w *

;*****************************************************************

CONVDIGIT

btfss STATUS,Z ; tester si W = 0goto DIGITUNmovlw ZEROgoto FINCONV

DIGITUNdecfsz vardigit,f ; décrémenter le chiffre à traitergoto DIGITDEUXmovlw UN ; var1 = 0 ?goto FINCONV

DIGITDEUXdecfsz vardigit,f ; décrémenter le chiffre à traitergoto DIGITTROISmovlw DEUX ; var1 = 0 ?goto FINCONV

DIGITTROISdecfsz vardigit,f ; décrémenter le chiffre à traitergoto DIGITQUATRE

movlw TROIS ; var1 = 0 ?goto FINCONV

DIGITQUATREdecfsz vardigit,f ; décrémenter le chiffre à traitergoto DIGITCINQmovlw QUATRE ; var1 = 0 ?goto FINCONV

DIGITCINQdecfsz vardigit,f ; décrémenter le chiffre à traitergoto DIGITSIXmovlw CINQ ; var1 = 0 ?

goto FINCONV

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 67/73

 

ESME Sudria p.66/72

2003

DIGITSIXdecfsz vardigit,f ; décrémenter le chiffre à traitergoto DIGITSEPTmovlw SIX ; var1 = 0 ?goto FINCONV

DIGITSEPT

decfsz vardigit,f ; décrémenter le chiffre à traitergoto DIGITHUITmovlw SEPT ; var1 = 0 ?goto FINCONV

DIGITHUITdecfsz vardigit,f ; décrémenter le chiffre à traitergoto DIGITNEUFmovlw HUIT ; var1 = 0 ?goto FINCONV

DIGITNEUFdecfsz vardigit,f ; décrémenter le chiffre à traiter

goto DIGITERRORmovlw NEUF ; var1 = 0 ?goto FINCONV

DIGITERRORmovlw TRAIT

FINCONV

return

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 68/73

 

ESME Sudria p.67/72

2003

Conversion des paramètres en digits :La routine « CONVPARAM » réalise la conversion de l’ensemble des quatreparamètres que l’on doit visualiser sur l’afficheur.Cette routine fait appel à la précédente pour réactualiser la valeur de chaqueparamètre à sur l’écran LCD.

;*****************************************************************;* CONVERSION des paramètres en digits *;*****************************************************************;* entrées : parametre1, parametre2, parametre3, parametre4 *;* *;* sorties : digit1, digit2, digit3, digit4 *;* *;*****************************************************************

CONVPARAM

movf parametre1,w ; conversion de parametre1 (chiffres) en digit1 (7 segments)movwf vardigitcall CONVDIGITmovwf digit1

movf parametre2,w ; conversion de parametre2 (chiffres) en digit2 (7 segments)movwf vardigitcall CONVDIGITmovwf digit2

movf parametre3,w ; conversion de parametre3 (chiffres) en digit3 (7 segments)movwf vardigitcall CONVDIGITmovwf digit3

movf parametre4,w ; conversion de parametre4 (chiffres) en digit4 (7 segments)movwf vardigitcall CONVDIGITmovwf digit4

return

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 69/73

 

ESME Sudria p.68/72

2003

Affichage des paramètres par une transmission “série” :La routine « AFFICHAGE » génère deux signaux synchronisés qui permettentd’établir un transfert de données série du PIC vers le contrôleur LCD.Un signal « Data » est émis sur la pin « RB1 » du PORTB et le signal d’horlogecorrespondant est disponible sur la pin « RB0 ».

Pour mettre à jour l’afficheur, le driver LCD doit recevoir un paquet de 36 bitssynchronisé par un signal d’horloge.

Les 36 bits envoyés sont organisés de la façon suivante :

- le début de l’envoi est signalé par un bit de « start » (les instructions « nop »n’influencent pas le programme, elles ont pour seul but de créer un retard pour permettre le temps d’établissement des signaux)

- les 4 octets correspondant au code des quatre digits (variables « digit1 » à« digit4 ») sont envoyés les uns après les autres. La transmission se fait du bitle moins significatif au bit le plus significatif.

;*****************************************************************;* AFFICHAGE (transmission série des données) *;*****************************************************************;* entrées : digit1, digit2, digit3, digit4 *;* *;* sortie : *;* *;*****************************************************************

AFFICHAGE

bcf PORTB,1 ; Mise à 0 du signal DATAnopbsf PORTB,0 ; Mise à 1 du signal CLOCKnopbcf PORTB,0 ; Mise à 0 du signal CLOCKnopbsf PORTB,1 ; Mise à 1 du signal DATAnopbsf PORTB,0 ; Mise à 1 du signal CLOCK

movf digit4,w ; charger le 1er octet à envoyercall AFFDIGIT ; Appel de la routine de transmission d'un mot de 8 bitsmovf digit3,w ; charger le 2ème octet à envoyercall AFFDIGIT ; Appel de la routine de transmission d'un mot de 8 bitsmovf digit2,w ; charger le 3ème octet à envoyercall AFFDIGIT ; Appel de la routine de transmission d'un mot de 8 bits

movf digit1,w ; charger le 4ème octet à envoyercall AFFDIGIT ; Appel de la routine de transmission d'un mot de 8 bits

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 70/73

 

ESME Sudria p.69/72

2003

- il faut transférer un paquet de 36 bits pour que le driver puisse exploiter cesignal. Jusqu’ici, nous avons envoyé un bit de « start » et quatre octets, soit 33bits. Il faut donc ajouter deux bits vides et un bit de « fin » pour terminer latransmission.

Transmission “série” d’un octet :La sous-routine « AFFDIGIT » est intégrée dans la routine « AFFICHAGE ».Elle génère un signal « Data » et un signal d’horloge synchronisés permettantde transmettre un octet.

movlw B'00000100' ; charger les bits permettants de compléter la série de 36 bits transmismovwf vartemp ; stocker l'octet à transmettre dans vartempmovlw 0x03 ; 3 boucles pour transmettre les 3 bits manquantsmovwf cmpt1 ; initialiser compteur de boucles

LOOPAFF2rrf vartemp,f ; décaler vers la droitebcf PORTB,0 ; Mise à 0 du signal CLOCKbtfsc STATUS,C ; tester le bit de dépassement Cbsf PORTB,1 ; C=1 -> Mise à 1 du signal DATAbtfss STATUS,C ; tester le bit de dépassement Cbcf PORTB,1 ; C=0 -> Mise à 0 du signal DATAnopbsf PORTB,0 ; Mise à 1 du signal CLOCK

decfsz cmpt1,f ; décrémenter le compteur de bouclesgoto LOOPAFF2 ; si = 0 -> LOOPAFF2

bcf PORTB,1 ; Mise à 0 du signal DATAbcf PORTB,0 ; Mise à 0 du signal CLOCK

return

AFFDIGITmovwf vartemp ; stocker l'octet à transmettre dans vartemp

movlw 0x08 ; 8 boucles pour afficher un octet (1 mot de 8 bits)movwf cmpt1 ; initialiser compteur de boucles

LOOPAFF1

rrf vartemp,f ; décaler vers la droitebcf PORTB,0 ; Mise à 0 du signal CLOCKbtfsc STATUS,C ; tester le bit de dépassement Cbsf PORTB,1 ; C=1 -> Mise à 1 du signal DATAbtfss STATUS,C ; tester le bit de dépassement Cbcf PORTB,1 ; C=0 -> Mise à 0 du signal DATAnopbsf PORTB,0 ; Mise à 1 du signal CLOCK

decfsz cmpt1,f ; décrémenter le compteur de bouclesgoto LOOPAFF1 ; si = 0 -> LOOPAFF1

return

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 71/73

 

ESME Sudria p.70/72

2003

Programme principal :

Le programme principal centralise les appels des différentes routines qu’il estnécessaire d’exécuter pour réaliser l’asservissement.

Lors du démarrage, le programme commence par une phase d’initialisation del’afficheur et du convertisseur analogique-numérique :- les paramètres sont convertis et codés sur sept segments,- la valeur de chaque digit est transmise au contrôleur LCD via une liaison

série,- une première acquisition et une conversion du signal d’entrée analogique

sont effectuées (il est indispensable de donner une valeur à « e(k-1) » avantde commencer le calcul du PID).

Ensuite, une boucle infinie effectue en permanence la correction voulue et la

restitue sur le PORTC. Cette correction se fait en plusieurs étapes :- acquisition et conversion analogique – numérique d’un échantillon,- calcul du PID,- stockage du résultat sur le PORTC.

 

;*********************************************************************************;* PROGRAMME PRINCIPAL *;*********************************************************************************

STARTorg 0x300

CALL CONVPARAM ; routine de conversion des paramètres (chiffres) en digits (7segments)

CALL AFFICHAGE ; routine d'affichage des paramètres sur l'afficheur LCD (initialisation)

CALL CONV ; routine d'acquisition et de conversion du signal d'entrée analogique; (une première acquisition est nécessaire; avant de pouvoir calculer le PID)

LOOPCALL CONV ; routine d'acquisition et de conversion du signal d'entrée analogique

CALL PID ; routine de calcul du PID

movf resultPID,w ; Chargement du résultat du calcul du PID

movwf PORTC ; Ecriture sur le PORTC des 8 bits du résultat du calcul du PID

goto LOOP

end

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 72/73

 

ESME Sudria p.71/72

2003

D – SYNTHÈSE

 Au cours de cette étude les différentes parties qui composent un moduled’asservissement P.I.D. d’une MCC ont été étudiées. À savoir :

- La programmation du P.I.D.- Les conversions analogique-numérique et numérique-analogique.- Les adaptateurs de tensions.- La gestion des boutons-poussoirs.- L’affichage, sur un écran LCD à 4 digits, des paramètres de correction du

P.I.D. par l’intermédiaire d’un driver LCD.

Nous pouvons qualifier ce projet de pluridisciplinaire. En effet, nous avonstravaillé dans différents domaines tels que : l’électronique analogique,l’électronique numérique, l’automatique et l’informatique pour la programmationdu P.I.D.

En dehors de l’aspect technique, ce projet nous a permis de nous rendrecompte de l’importance de la gestion du temps et de la répartition des tâches ausein du groupe.

Améliorations envisagées

Nous envisageons une amélioration de ce module en y ajoutant :- Un filtre en sortie du CNA pour obtenir un signal de sortie plus stable.- La gestion de la limite d’intégration.

5/17/2018 Correcteur-PID - slidepdf.com

http://slidepdf.com/reader/full/correcteur-pid 73/73

 

ESME Sudria p.72/72

2003

E – SOURCES

- Datasheets des composants suivants :16F876 (PIC)TL084 (AOP) AD557 (CNA)MM5452 (driver LCD)VI502 (afficheur LCD)

- Projet de première année : enregistreur numérique (par BRUYERE PhilippeGOMBERT BenjaminVENCE Eric)

- Programmation 16f876 par Bigonoff 

- www.abcelectronique.com- kudelsko.free.fr - fribotte.free.fr/bdtech/PidSurPic/PidSurPic1.html- perso.wanadoo.fr/yves.heilig/ElecRob/page1.htm

REMERCIEMENTS

Nous tenons à remercier M. Touseau et M. Aït Abderrahim pour leur aide, leursconseils, leur disponibilité et l’encadrement qu’ils nous ont accordé tout au longde ce projet.

Nous remercions également Mr Deleau pour son soutien logistique.