Gestion de LED RVB, 2013/2014, TD1

De Wiki de Projets IMA
Révision datée du 11 juin 2014 à 18:47 par Qsultana (discussion | contributions) (Partie électronique)

Première séance

Partie électronique

• prise en main de la nanoboard et du logiciel Altium à l'aide d'un tutoriel. Je pense que c'est la meilleure façon de commencer le projet sur la nanoboard, puisque ça permet de mettre en place une application fonctionnelle de A à Z (réalisation d'un petit compteur). Cela permet entre autre de comprendre l'agencement des librairies, le type données traités, les interfaces d'entrées-sorties...

réalisation d'un schéma de test "PWM"

Schéma réalisé à la première séance

J'ai réalisé un schéma simple dans avec un bloc PWM qui, à l'aide d'un registre 8 bits (valeur à coder) et d'une horloge (porteuse) permet d'envoyer sur une des sorties de la nanoboard un signal modulé.

• réalisation d'un circuit de filtrage passe bas RC J'ai réalisé un circuit passe bas avec une fréquence de coupure très basse (environ 100Hz) d'ordre 1.

• test du système précédemment décrit sur la led RVB J'ai branché le signal filtré sur chacune des broches de la diode RVB (sauf la masse évidement). La diode fonctionne bien, je visualise bien le rouge, le vert et le bleu. Pour tester le bon fonctionnement du système PWM, j'ai fait varier la valeur du registre 8 bits (configurable digital IO) et j'ai put voir que l'intensité de la couleur variait. Avec 0XFF sur le registre, on obtient l'intensité de couleur maximale. Avec 0x0B, la diode est quasiment éteinte. En changeant la valeur de la résistance du filtre l'intensité varie, on a donc une plus grande précision, car si R est faible, il y aura quand même un courant non négligeable dans la diode pour des valeurs faibles du registre 8 bits. Il faut aussi tenir compte de la vitesse de la porteuse (signal d'horloge) pour réaliser un signal bien propre (pas de découpage après le filtrage), plus on aura une porteuse élevé, moins il y aura ce découpage à la sortie d'un même filtre. Je pense aussi qu'il faut dimensionner le filtre en fonction de cette fréquence de découpage.

• visualisation sur l'analyseur logique et sur oscilloscope J'ai visualisé à l'aide l'analyseur logique les signaux de ma PWM, cependant, j'ai préféré utiliser le mode oscilloscope, qui ne va pas "nettoyer" mes signaux certes, mais va me permettre de faire des tests plus rapidement sur la partie analogique et sur la partie signaux logiques. Je pense malgré tout que l'analyseur logique est un bon outils lorsque l'on travaille uniquement sur des systèmes binaires.

Partie informatique

1) Prise en main du sujet, lecture du cahier des charges, découverte et analyse des programmes d'exemples de la page des projets http://rex.plil.fr/Enseignement/Systeme/Projet.IMA3/index.html.

2) Ecriture d'une procédure en C pour allumer la LED RVB à l'aide d'une liaison série. Nous nous sommes inspire de l'exemple de programme C utilisant le port série.

3) Recherche documentaire sur la bibliotheque JQuery Bibliothèque libre en javascript permettant une interactivité avec l’utilisateur sans relancer la page html. La bibliothèque comprends de nombreuses fonctions. Dans ce projet cette bibliotheque va nous servir pour animer un curseur qui sera deplacer par l’action de la souris de l’utilisateur. La transmission des parametres au programme en C se fera au relachement du bouton de la souris.

4) Recherche et analyse d'une page web contenant un objets de type "slider" écrit en javascript et utilisant la bibliothèque JQuery. Il s'agit d'un curseur sur une barre qui va nous permettre d'ajuster la valeur de chaque couleur.

Deuxième séance

Partie électronique:

• recherche sur la liaison J'ai fais des recherches sur la liaison série sous Altium, il existe un bloc configurable pour réaliser des communications entre système. Il semble qu'il faille éditer les drivers de ce bloc pour modifier les vitesse, bit de stop... En fait, il semble que ce soit un autre groupe de recherche qui travaillent sur le sujet. On m'a appris que mon application devait gérer 8 bits d'entrées et un bit de stop. C'est à dire que mon système va recevoir:

• 8 bits de données pour le rouge (noté R)

• 1 bit de stop

• 8 bits de données pour le vert (noté V)

• 1 bit de stop

• 8 bits de données pour le bleu (noté B)

• 1 bit de stop

Cette information est des plus précieuses, car après avoir testé la sortie de mon système (PWM + filtrage + LED RVB), je connais la forme de mes informations d'entrées. Mon travail est alors de réaliser un système qui va automatiser la lecture des informations les unes après les autres.

A la réflexion, je me rend compte d'une chose, que se passe il si l'information de couleur rouge reçu est interprété comme une autre couleur?

Voici comment j'ai imaginé le système:

En entrée, je dispose d'un registre 8 bit qui représente l'information de couleur R, V ou B et d'un interrupteur simulant le bit de stop. Je fixe la valeur pour R, et j'actionne le bit de stop: •une première PWM se déclenche

PUIS

•je fixe V et j'actionne le bit de stop, une deuxième PWM s'actionnent (tout en laissant le PWM-R en action).

Ainsi à chaque appuie sur l'interrupteur stop, la valeur du registre 8 bits doit être mémorisé pour ne pas perdre cette information lorsque les 8 bits suivant arrivent.

• réalisation du schéma électrique total sur Altium designer. Je réalise à tâtons un système qui permet d'envoyer successivement les valeurs voulues.


Schéma réalisé à la deuxième séance


A la fin de la séance, le système ne fonctionne pas vraiment. La PWM réalisé avec plusieurs blocs opère. Mais il manque des blocs logiques, le schéma est incomplet et il me manque des informations quant au bon fonctionnement de certains blocs.

• fabrication du circuit électrique total (3 filtres RC et brochage) Je prend le temps de fabriquer 3 circuits RC (1 par couleur) je les dimensionnent avec pour avoir la fréquence de coupure au alentours de 500Hz.

Partie informatique:

Nous avons lors de cette seance fait fonctionner et analyser le fonctionnement de l'exemple du script CGI-BIN. Un script CGI est un programme executé par le serveur web qui va permettre de transmettre au script les paramètres envoyé par le navigateur grace au fonction POST ou GET. Nous avons choisi de faire appel au script CGI, lorsque nous relâchons le bouton de la souris. Par contre le déplacement du curseur met à jour en continu sa valeur, visible par l'utilisateur. Seul le javascript est utilisé lors de cette phase.

Un programme CGI peut être écrit dans à peu près n'importe quel langage de programmation pourvu que celui-ci soit :

• capable de lire le flux de données d'entrée ;

• capable de traiter des chaînes de caractères ;

• capable d'écrire sur le flux standard de sortie ;

• exécutable ou interprétable par le serveur web.

Nous écrirons notre programme en C pour y intégrer la partie du code permettant le fonctionnement de la diode et de la liaison série écrite en séance 1. Nous choisissons le script CGI plutot que le php comme langage intermédiaire entre le navigateur et notre application, puisque notre application est déja écrite en C.

Le programme CGI peut être tester indépendamment de la page html. au lancement du CGI on a (offline mode: enter name=value pairs on standard input) il suffit de fournir les couples nom=valeur correspondant aux paramètres envoyés par le javascript.

Troisième séance

Partie électronique:

• Ajout de blocs de mémorisation Je réalise le schéma final dont voici un aperçu:

Schéma final

Description:

Lorsque le système reçoit les 8 bit-R, la valeur est sur le registre 8bits (entrée). Celle ci est recopié via un multiplexeur sur un registre qui mémorise cette valeur et l'écrit en permanence en sortie. Un bit de stop apparait à la fin de la transmission de ces 8 premiers bits. Ce bit de stop est relié à un un système de compteur. Ce compteur modulo 3 (reset avec une porte ET) permet d'activer les sorties de 2 multiplexeurs. L'un va permettre de répartir la valeur 8 bits sur le registre R, V ou B, l'autre va orienter une clock haute fréquence sur ce même registre. Cette clock va permettre d'enregistrer la valeur 8 bits sur le registre.

A chaque nouvelle réception, on va avoir un registre R V B mis à jours.

Les sorties des registres sont donc la dernière valeur enregistré pour la couleur en question.

Les blocs de comparaison vont réaliser une PWM. Ces blocs prennent en entrées les valeurs d'un compteur 8 bit et la valeur à coder. En sortie on a un 1 logique lorsque A est supérieur à B.

• Test avec le système de LED de la nanoboard pour avoir un visu habile Personnellement je conseille d'utiliser le système de LED disponible sur la nanoboard. On peut relier assez facilement les éléments des circuits qu'on réalise. Ca permet d'avoir un visu de ce qu'il se passe. Le travail à l'aveugle fait perdre du temps.

Conclusion à propos de la nanobard. C'est un travail qui est long, de découvrir le mode de fonctionnement de Altium + nanoboard, mais la prise en main n'est pas si difficile au final. Je conseille vraiment de commencer par travailler sur le tutoriel même si ça fait perdre en apparence au moins 2h, c'est du temps de gagné pour la suite. Au final, le schéma que j'ai réalisé fonctionne.

• Amélioration du filtre • E‰tude de la diode RVB en courant et tension

Partie informatique:

On crée un script shell compile.sh pour générer un ledrvb.cgi. cet exécutable sera placé dans le répertoire dédié au script CGI. Ce répertoire est imposé par le serveur web.

#apt-get install cgilib

gcc -o ledrvb.cgi ledrvb.c serial.c -lcgi

cp ledrvb.cgi /usr/lib/cgi-bin/ledrvb.cgi

Une fois le script cgi compilé on peut le tester, en accédant à la page web à l'adresse http://localhost.

Dés que la méthode est validée pour un slider, on multiplie le procédé pour avoir 3 sliders.

On obtient une page web de la forme suivante :

Ledrvbweb.png

On teste l'ensemble du projet sur le PC qui nous sert pour la programmation. Une fois cette validation faite nous sommes prêt à transférer notre projet sur la foxboard. Il faut, dans un premier temps, initialiser la foxboard avec l'utilitaire de gestion de l'interface série : minicom. On modifie ensuite les adresses et masques pour permettre un accès par ssh. Nous choisissons la foxboard numéro 10. On y accède donc par la commande : ssh root@172.26.79.10. Nous accédons au système de stockage de la foxboard avec la commande scp. Nous copions donc les fichiers de notre projet aux même endroit que sur notre PC de programmation. Le script cgi-bin dans /usr/lib/ La page web, Bibliotheque JQuery, css, etc dans /var/www

Une fois l'ensemble des fichiers copiés, on compile le script cgi-bin. l'accès à la page web à l'adresse 172.26.79.10/index devient possible.

Nous constatons bien qu'une modification des curseurs de la page web modifie la couleur de la diode.


Ledrvb-rouge.png
Ledrvb-vert.png

Le fonctionnement nécessite une initialisation préalable de la liaison série. Pour obtenir un fonctionnement direct à chaque démarrage, nous plaçons cette initialisation dans le fichier /etc/rc.local. Ce script est exécuté en fin de démarrage de la foxboard.