Tutoriel – Compilation du driver pour la carte U2C-12 Diolan

Posted in 3D, I2C, informatique, prix, tutoriel on mai 28th, 2009 by Cyril

Bonjour !

La carte d’interface I²C Diolan U2C-12 est fournie avec des pilotes pour Linux et windows. C’est à la compilation des premiers que nous allons nous intéresser aujourd’hui et des exemples d’utilisation suivront un peu plus tard.

La procédure qui suit décrit les différentes étapes de la compilation et de l’installation du driver. Les pré-requis sont d’avoir à sa disposition une distribution Linux fonctionnelle et récente (kernel 2.6 pour ma part) ainsi que tout les packages nécessaires à la compilation en C (gcc, binutils, libtool, autotools, etc…).Si ce n’est pas le cas, ou que vous ne vous êtes pas déja familiarisé avec ces concepts, je vous conseille de vous orienter vers des sites spécialisés comme par exemple les excellents tutoriaux de Léa-Linux ou du site Ubuntu-fr

La dernière version du driver, livrée avec quelques exemples de codes en C et C++, est téléchargeable à cette adresse : Driver U2C-12

Une fois l’archive .tar.gz téléchargée (dans /home/username par exemple), tapez les commandes suivantes dans votre console:

$ cd /usr/local/src
J’ai pris pour habitude de placer mes sources à compiler à cet endroit de mon système. Si ce n’est pas votre cas, vous avez surement de bonnes raisons et je vous laisse le soin de convertir les quelques références futures que je pourrais y faire.

$ tar zxvf /home/username/i2c_bridge-0.2.2.tar.gz

Principales options de tar :
- x (eXtract) extrait les fichiers d’une archive
- t (lisT) affiche la liste des fichiers d’une archive
- v (Verbose) active le mode verbeux (affichage des résultats)
- f (Force) forcer le remplacement de fichiers lors de l’extraction
- z (gZip) traite les fichiers avec gzip

$ cd i2c_bridge-0.2.2/
Pour entrer dans le répertoire d’installation

$ ./configure
Cette commande lance le script de configuration de pré-compilation. A ce stade, vous devrez lire et analyser les éventuelles erreurs retournées par ce script et les corriger, l’erreur la plus courante étant qu’une librairie nécéssaire est introuvable.
Si tout se passe bien et que la derrière ligne de log ressemble à ça: config.status: executing depfiles commands, alors vous pouvez lancer la compilation à proprement parler.

$ make
Make va lancer la compilation du driver et des autres fichiers nécéssaires ( programmes d’exemple dans notre cas).

$ sudo make install
Cette commande va installer la librairie partagée libi2cbrdg.so dans le répertoire par défaut /usr/local/lib/. Seul l’utilisateur root pour installer une librairie à cet endroit de vote système, c’est pourquoi nous devons utiliser sudo

Voilà, le driver est installé et une fois la carte Diolan connectée vous pouvez la tester très facilement en exécutant le programme de test /usr/local/src/i2c_bridge-0.2.2/u2c/tests/func_test.

Bon courage à tout ceux qui voudraient se lancer comme moi dans l’utilisation de cette carte; n’hésitez pas dans ce cas à me demander des conseils concernant l’utilisation du driver.

A bientôt pour des exemples de code !

Commande des moteurs

Posted in I2C, PIC, electronique, informatique on mai 27th, 2009 by Cyril

Hello !

Cela fait maintenant quelques semaines que j’ai repris la fabrication du robot, et après une grosse partie de mécanique enfin achevée, l’électronique avait besoin de progresser pour pouvoir faire rouler le robot et poursuivre son développement.

Bon, la commande de la vitesse et du sens de rotation des moteurs du robot est plus complexe qu’elle peut y paraitre au premier abord et il ne s’agit pas seulement de brancher les moteurs sur un gros potentiomètre avec un joli système d’inversion de polarité pour changer la direction!

Imaginé et conçu en détail depuis belle lurette,il ne manquait plus que la phase de réalisation et d’assemblage pour chacun des éléments suivants (du moteur vers la commande):
1 – Carte de puissance (Pont en H – L298)
2 – Carte de contrôle (Microcontroleur – PIC 18F2431)
3 – Contrôle informatique de la carte de contrôle (haha …)

1 – Carte de puissance
Le courant de puissance des moteurs passe par un pont en H, circuit classique pour commander de manière simple et efficace un moteur à courant continu. Cette carte reçoit en entrée les signaux logiques (5V) de gestion du sens de rotation, et le signal PWM pour varier la puissance.

puissance moteur
Carte de puissance en cours de test, connectée à la carte de contrôle des moteurs (en haut, fils blancs et jaunes) et à la partie puissance (vers le bas, alimentation a droite, moteur de test à gauche).

 

2 – Carte de contrôle

J’avais déjà pas mal travaillé sur la carte de contrôle moteur, celle ci ayant même eu le privilège d’être assemblée sur une plaque de pvc avec le programmateur de PIC, la carte d’interface USB/I²C Diolan, et un petit régulateur 5 volts. Cette implantation étant très pratique pour travailler et tester le code envoyé au PIC, tout est resté comme ça pour les phases de test.

La carte dans sa version actuelle sert simplement de « passerelle » pour les ordres venant du PC en direction de la carte de puissance, et ceux qui pensaient y trouver un contrôleur PID seront – pour l’instant – déçus. Le PIC est programmé en C (MCC18) dans l’IDE MaLab de Microchip.
Pour la partie du code qui s’occupe de la gestion des moteurs, la carte réagis à 6 commandes en provenance du bus I2C. Ces identifiants de commandes sont déclarés dans un ficher d’entête sous forme de constantes, communes au projet MCC18 pour le PIC et à l’interface développée en C++ côté informatique.

Voici les déclarations de commandes avec le code en hexadécimal qui leur est attribué:

#define I2C_SET_PWM1 0x10 //Valeur de la sortie PWM pour le moteur 1 (0-1023)
#define I2C_SET_SENS1 0x11 //Direction de rotation pour le moteur 1 (0-1)
#define I2C_SET_PWM2 0x18 //Valeur de la sortie PWM pour le moteur 2 (0-1023)
#define I2C_SET_SENS2 0x12 //Direction de rotation pour le moteur 2 (0-1)
#define I2C_SET_PWMS 0x20 //Valeur de la sortie PWM pour les deux moteurs (0-1023 / 0-1023)
#define I2C_SET_SENSS 0x21 //Direction de rotation pour pour les deux moteurs (0-1 / 0-1)

3 – Contrôle informatique

Le programme qui commande la carte moteur est développée en C++ sous CodeBlocks à l’aide des librairies graphiques wxWidget, associés au driver de la carte U2C de Diolan compilé sous forme de librairie partagée. Cette interface permet de communiquer avec les différentes cartes à base de PIC via le bus I²C (contrôle moteur, alimentation principale et carte d’interface générale), d’y envoyer des commandes et de lire des valeurs. Les fonctions développées dans cette interface seront par la suite regroupées au sein du driver Player (cf ce post décrivant le système : Contrôle informatique : Player, Stage et compagnie)

interface controle moteur
Interface de contrôle sous Linux

 

Une vidéo est en cours de préparation ou je présenterais une démo d’un moteur, piloté grâce à toutes cette chaine de commande.

A très bientôt pour la suite !

Fabrication de la carte d’alimentation

Posted in I2C, PIC, electronique on avril 21st, 2009 by Cyril

Hi, encore des news !

Il y a quelques semaines (mois…?), j’ai passé un peu de temps sur la fabrication de la carte d’alimentation du robot.

Cette carte ayant été conçue et décrite il y a déjà un bon moment, je met les 2 liens vers les articles correspondants mais je ne vais pas me ré-étendre sur les fonctionnalités de la carte :
Ici : Carte d’alimentation
et là : Carte d’alimentation – Suite

Le PBC avait été gravé en même temps que toutes les autres cartes, il y a plus d’un an, et attendait sagement de recevoir ses composants depuis tout ce temps.

Voici en photos, les étapes de la réalisation !!

Mise en place des straps

La première étape est la mise en place des – trop nombreux – straps de la carte.

Composants fins

On soude ensuite les composants sur la carte, généralement du plus petit au plus gros, ou du plus fin au plus épais comme vous préférez ;-)

Suite de la mise en place des composants…

La carte terminée

Voici la carte terminée. Le connecteur marqué « INT » est celui de l’interrupteur général du robot.

Autre vue de la carte

Sur cette dernière vue, vous pouvez voir de gauche à droite :

- le connecteurs I2C (communication avec la carte mère)
- le connecteur pour la programmation in-situ du microcontrôleur (ICSP)
- la masse générale ( – )
- l’alimentation externe pour l’alimentation en station (EXT)
- l’entrée du chargeur de batterie (BATT)
- les 2 bornes de la batterie (BATT + et -)

J’ai effectué quelques tests sur cette carte et écrit une ébauche de programme pour le PIC 16F819. Ma première impressions concernant la programmation est que je me suis planté en choisissant un pic de cette famille car du coup, je suis obligé de jongle entre 2 compilateurs (le reste de mes micro-contrôleurs sont des 18F).
Pour ce qui est des fonctionnalités principales, la conversion analogique/numérique des 3 tensions à l’air de se passer pas trop mal malgré quelques valeurs bizares et la communication 1²C fonctionne aussi à peu près.

Je ne détaillerais pas le code aujourd’hui mais comme tout le reste, vous pouvez le trouver sur le repository SVN de mon projet Sourceforge

Dans les jours qui viennent, j’espère trouver le temps pour terminer le couplage entre les moteurs et les roues de la base roulante du robot. Une fois que cette première partie mécanique sera terminée, je m’attaquerais à la carte de puissance des moteurs.

A bientôt !

Essais I2C et contrôle moteur

Posted in I2C, PIC, electronique on mars 3rd, 2009 by Cyril

Hop, reprise effectuée avec succès !

La carte de contrôle des moteurs qui me posait tant de problèmes est enfin domptée, il ne me reste que quelques résistances cms de pull up à souder pour qu’elle soit totalement fonctionnelle.

Comme elle n’a pas encore été décrites dans ces colonnes, voici un topo sur son cas:

Cette carte très simple est architecturée autour d’un PIC 18F2431 de Microchip. Vous trouverez la datasheet de ce composant sur sa page produit mais voici quelques unes des caractéristiques qui m’ont fait le choisir:
- Un module SSP (port de communication I²C)
- Jusqu’à 6 sorties PWM (Pulse Width Modulation), pratiques pour le contrôle des moteurs du robot (4 utilisées)
- Un module « MotionFeedback » qui peut se charger du décodage d’un encodeur en quadrature
- Pas mal d’autres IO qui compléteront les fonctionnalités de la carte en assurant par exemple le comptage du 2ème décodeur, etc….

Grâce à ce petit microcontroleur de 28 broches, la carte remplira donc les fonctions suivantes:
- Contrôle de la distance effectuée, de la vitesse et du sens de rotation des 2 moteurs de propulsion grâce aux 2 encodeurs incrémentiels
- Stockage et mise à disposition de ces informations via le bus I²C
- Asservissement en vitesse (position ..?) des moteurs en fonction des commandes de position reçue.
- Communication avec le PC maître, via la carte U2C-12 de Diolan

Voici le schéma électronique de la carte:Dans un prochain post, je montrerais la réalisation de la carte et les premiers pas de son utilisation.

A bientôt !

Carte Diolan U2C-12

Posted in I2C, electronique on avril 27th, 2008 by Cyril

Hello !

Je vais m’attarder un peu sur l’élément principal de l’électronique de mon robot : la carte interface USB <-> I²C.
Vous l’avez déjà aperçu rapidement sur le schéma électrique général que j’avais publié en juillet 2007 mais voici aujourd’hui une description de cette carte.

La carte est une U2C-12 fabriquée par Diolan.


Elle dispose des caractéristiques suivantes:
- Connectée et auto-alimentée sur un port USB 2 (compatible 1.1 et 1).
- Compatible Win, Linux et MacOs
- Drivers écrits en C et code source accessible et modifiable
- Interface I²C maitre en mode rapide ( 400kBit/s ) ou personnalisable de 2kBit/s à 100kBit/s
- Gestion des transactions I²C (paquet de trames)
- Commandes I²C intégrées sur 3 niveaux ( niveau paquet, niveau commande (Read/Write, Start/Stop/Ack) ou niveau ligne (SDA et SCL))

En plus du port I²C, la carte propose quelques petits trucs sympas en complément:
- Interface SPI Full duplex
- 23 lignes d’I/O compatibles 3,3V et 5v

Il ne manque que des entrées analogiques et des triggers sur les IO pour en faire le produit parfait :-)

Un exemple d’utilisation avec les IO sera mis en ligne bientôt (récupération des données de 2 capteurs infra-rouges PROXIR)

Pic et pic et colegram…

Posted in I2C, PIC, electronique, etude on octobre 1st, 2007 by Cyril

Un des gros morceau de la réalisation du robot va concerner les différentes cartes électroniques.
C’est bien beau de disposer d’une carte mère avec 512Mo de ram et un proc à 1,3Ghz mais aussi intelligent qu’il soit, le cerveau du robot aura besoin de nerfs pour communiquer avec ses organes (pitoyable métaphore, je vous l’accorde).
On a vu que c’est un bus I2C qui est utilisé pour communiquer entre la carte mère et les différentes cartes, or qui dit bus i2C dit numérique, et qui dit numérique dit Microcontroleur.

Il existe plusieurs familles de microcontroleurs et je ne vais pas tenter de les citer ni de les comparer. Si vous voulez participer au débat (enflammé), rendez-vous dans la section « Robotics » du forum de planète science. Les adeptes des différentes familles s’y entretuent à coup d’arguments plus ou moins crédibles, certains s’accusent d’avoir des parts dans les différents fondeurs, bref que du bonheur : Planète Science

J’en profite pour remercier tout les participants de ce forum très vivant pour leurs conseils et tout et tout. C’est une vraie mine d’informations sur laquelle je passe tout les jours et ou j’ai trouvé beaucoup de solutions aux problèmes qui m’empêchaient de dormir. (En plus le président de l’assoc est un ami des parents de ma femme… le monde est petit :-) )

Bon je me lance, j’ai choisi de travailler avec des microcontroleurs de Microchip, les fameux PIC.
Vous vous en doutiez ? rhooo tout de suite… j’ai hésité quelques jours à utiliser des AVR mais la gratuité des logiciels, la simplicité de l’architecture et la communauté des Pic ont finis de me convaincre.
Un plus très appréciable pour les radins comme moi, c’est que Microchip a une politique très interessante pour les étudiant/bidouilleurs/profiteurs: les Samples !!
Grace à une simple inscription sur leur site, ils envoient gratos des échantillons de leurs microcontroleurs, frais de ports offerts, et ceci jusqu’à une commande de 12 unités tout les 2 mois. Pas de quoi ouvrir une usine de production en chine mais pour tester et faire joujou avec un robot, c’est plus que suffisant.

Voici la liste des modèles que j’ai choisis pour les différentes applications que j’envisage:

  • PIC16F88 (1ère commande, surement pas utilisés)
  • PIC16F627A (idem)
  • PIC16F819 (carte d’alimentation)
  • PIC18F2431
  • PIC18F4520
  • PIC18F2550

Avec ça, j’ai de quoi faire tout ce dont j’ai besoin et en particulier une carte de commande pour mes moteurs (PWM hardware) et une carte de décodage pour les encodeurs rotatifs.
Tout ces Pics supportent le protocole I2C et seront donc connectés à la carte mère via la petite carte Diolan que je vous ai présentée dans un autre post.

C’est tout fébrile qu’après 10 ans d’abstinence je me suis recollé devant une plaquette à essai, que j’ai branché quelques résistances un condos et 2 leds, et que j’ai vu mes 2 leds clignoter, une larme à l’oeil tellement c’était beau !! (Lise perplexe: « Si c’était pour faire ça, t’aurai pu acheter un interrupteur aussi… » no comment).

En une soirée, j’ai bidouillé mon 16F819 dans tout les sens et j’ai réussi à intégrer 2 commandes ON et OFF en I2C qui allument et éteignent la led ! ouaiiiiii !!!

Je mettrai à disposition les codes sources de mes différentes applis quand elles seront fonctionnelles, ce blog n’ayant pas vocation à devenir un cours de PIC. (Bigonoff s’en charge très bien)

A bientôt !

Carte d’alimentation

Posted in I2C, electronique, etude on octobre 1st, 2007 by Cyril

La création de la carte d’alimentation du robot est presque terminée. Pour la création du schéma et du PCB, j’utilise le logiciel gratuit KiCad qui est très pratique à utiliser après quelques heures de prise en main.

Bon, ça fait très longtemps que je n’avais pas fait d’électronique donc je galère un peu pour mon routage et il n’est pas exclu que je rencontre des problèmes divers et que cette carte finisse soit toute plein de straps, soit dans un placard pour voir une V2 un peu plus aboutie.

Caractéristiques techniques::

  • Distribution du 12V de la batterie.
  • PIC 16F819 pour le pilotage de la carte
  • Détection de placement sur la base de recharge du robot (2 microswitchs)
  • Monitoring des 3 tensions: 12V batterie, 12V externe, 13,5V charge.
  • Basculement de l’alimentation du robot sur le 12V externe (relai).
  • Connexion de la source 13,5V vers la batterie pour la recharge (relai).
  • Régulation 5V pour le PIC et les composants de la carte (7805).
  • 3 leds d’état: 12V batterie, 12V externe, charge ON.
  • Bus I2C pour lecture de l’état et des tensions par le système central (PC embarqué).
  • Connecteurs de sortie pour le 12V vers le reste du robot.

Le schéma et le PCB sont en cours de mise en forme pour la publication. je publierai les images et les fichiers sources au format KiCad.