III) Programmation du PIC
1) Hypothèses et choix
Contraintes Commande par un microcontroleur PIC 16F84 (pas de sortie analogiques). Variation de vitesse (CNA 8 bits) L'accélération est fonction de l'angle d'inclinaison de la bande. (roue codeuse)
Schéma structurel
Fonctions réalisées par le programme F1 : Lecture BP marche F3 : Déterminer vitesse F4 :Affecter vitesse F2 : Lecture codeuse
Actigramme de la fonction Gérer
Réalisation des rampes accélération-décélération (de la fonction F3 : Déterminer la vitesse à obtenir)
Rampe d'accélération CNA commandé sur 8 bits : pleine échelle =255 Code for(cpt=0;cpt<255;cpt++) { sortie=cpt+1; //car cpt max = 254 delay(tempoAccelDecel); } Cette méthode permet d'obtenir la rampe suivante:
Accélérations et angles D'après les calculs de mécanique : amax=(-0,1737α+1,9666) Après intégration, vmax=(-0,1737α+1,9666)tmax D'où tmax=vmax/(-0,1737α+1,9666) avec vmax = 0,26m/s tmax=[0,26/(-0,1737α+1,9666)] Δt=tmax /255 Δt=[0,26/(-0,1737α+1,9666)]/255
Calcul de la tempo d'accélération Durée microdelay(n) : T = 3n +1 (microsecondes) n = (T-1)/3
Les différentes versions du programme du cycle
Programme n°1 un cycle programme correspond à un cycle de la bande. Pas de roue codeuse. pas d'arrêt possible en cours de programme
Gestion des tests Simulation lancer la simulation -->(les sorties doivent rester à 0) mise à 1 entrée Ra1 (bouton poussoir marche) --> les sorties clignotent/stabilisent à 1/clignotent/stabilisent à 0 résultats des tests : test OK. La valeur de temporisation a du être adaptée pour que le clignotement soit perceptible. validation sur maquette: test OK
Environnement de développement : Devpic84c
Programme n°2 Objectif : décodage roue codeuse. Gestion des fonction, appels de sous programme pour garantir évolutivité , lisibilité et maintenabilité du programme. Principe: un cycle programme = un cycle de la bande. L'accélération dépend de la valeur codée depuis la roue codeuse.
Programme n°2 : fonction main() Structure identique au prog 1. Appel fonctions lirecodeuse() calculTempoAccel() calculTempoDecel() L'appel de fonction après « marche ».
Spécificité : lecture de la roue codeuse
Gestion des tests Gestion des tests (simulation) Validation décodage roue codeuse : affectation de codeuse sur port B, pendant le palier vitesse. Résultats des tests : test OK Validation sur maquette: test OK Nécessité de complémenter les voies de la roue codeuse pour avoir un signal cohérent.
Programme n°3 Objectif : Autoriser l'arrêt du cycle à tout instant Simplifier la gestion des entrées.
Principe de fonctionnement Scrutation permanente des E/S Fonctionnement programmé sous forme d'un grafcet (4 étapes) Détection de fronts montants du bp_marche. Utilisation d'une table de codage pour la temporisation accélération (en fonction de la variable codeuse.)
Grafcet décrivant les phases du programme
Spécificité : programme type automate void main() { /*Initialisation des paramètres de conception*/ /*Initialisation des paramètres de réglage*/ lecture_entree(porta); // suppression du font initial ; /******************Debut boucle infinie******************/ sortie = 0; phase = 0; for(;;) /***************Attente marche***********************/ lecture_entree(porta); evoluer_phase(); vitesse = piloter_vitesse(vitesse); sortie = vitesse; } //fin for(;;) } //fin void main()
détection des fronts montants Principe de la fonction lecture_entrees() :
Programmation grafcet évoluer phase void evoluer_phase() { switch (phase) { case 0 :{ // ATTENTE if ((bp_marche==1)&&(bp_marche_precedent==0)) {phase = 1; } break;} case 1 :{ // ACCELERATION if (vitesse>= vitesse_max ) { phase = 2; } if ((bp_marche==1)&&(bp_marche_precedent==0)) { phase = 3; } break;} Case 2 :{ // PALIER VIT CONSTANTE if (deplacement>=deplacement_max[codeuse]) phase = 3; } if ((bp_marche==1)&&(bp_marche_precedent==0)) { phase = 3; } break; case 3 :{ // DECELERATION if (vitesse<=vitesse_arret) { phase = 0; } break;} } }
fonction piloter_vitesse()
utilisation d'une variable comme pointeur dans une table
Tests programme 3 Simulation : Test OK
Défaillance - Diagnostic Test sur maquette ==> comportement aléatoire Hyp 1 : Programme : Vérification simulation --> Comportement OK en simulation Hyp 2 : PIC : Échange standard -->Sans effets (Comportement aléatoire) Hyp 3 : Config. E/S : Chargement programme initial -->Sans effets (Comportement aléatoire) Hyp 4 : C.N.A. : Échange standard C.N.A. --> Pilotage correct de la bande