Aller au contenu


Mike118

Inscrit(e) (le) 26 janv. 2012
Déconnecté Dernière activité hier, 12:34
*****

Renforcement des structures par l'Union

Publié Mike118 le 14 juillet 2016 - 12:33 in Programmation

Afin de mieux expliquer à quoi sert l'union et comment l'utiliser il me semble plus simple procédé par la résolution d'un problème concret par l'utilisation d'une structure et d'un union. 

Le problème à résoudre : Je souhaite faire communiquer deux arduino entre eux reliée  ensemble en uart chacune via un module bluetooth . ( Mais valable avec tout type de communication, I2C, SPI uart filaire, même aussi pour une arduino et un RPi etc...) 

On va prendre le cas d'une station météo qui est dehors, équipé d'un capteur de luminosité, de température,  et d'hygrométrie
Une station d'affichage qui est à l'intérieur qui reçoit les données et les affiches sur un écran LCD
hygrométrie et luminosité :  variable sur uint8_t  variant de 0 à 100%
température  variable à virgule sur un float. 
 
Si je veux envoyer depuis la station météo l'hygrométrie et la luminosité je peux faire : 

Côté station météo
Serial.write ( lumValue);
Serial.write ( huValue); 
Côté station d'affichage 
if(Serial.available()>1)
{
   lumValue= Serial.read();
   huValue = Serial.read(); 
   displayValues ( lumValue,huValue ); 
}
Chouette ça marche je récupère bien mes valeurs et je peux les envoyer dans ma fonctions qui les affiche ! Cool ! 

Plus qu'à faire pareil pour " tempValue"  ! Easy me direz vous !
Et bien non... tempValue est un float... et Serial.write est fait pour envoyer des bytes, et donc des variables sur 8 bits. Autrement dit des uint8_t ou des int8_t ( les char en font partie ) ! Chance pour nous que nos deux autres valeurs étaient bien des sur 8 bits car sinon ça marchait pas comme il faut ... 

Du coup comment faire ? 

Comme toujours il y a plusieurs façon de faire. 

On pourrait reconvertir notre float " tempValue " en    int8_t  int8TempValue, avec une opération mathématique ! ça marche bien mais on risque de perdre en résolution sur notre mesure... 
exemple tempValue = 25.25  on choisit de toujours multiplier par 4 par exemple du coup on obtient un   int8TempValue = 101;   on enverra donc 101 qui est bien sur 8 bit et ensuite on oubliera pas de diviser par 4 avant d'afficher car la valeur qui nous intéresse est bien 25.25 et pas 101 dans ce cas concret.

On peut imaginer transformer les float en une chaîne de caractère
 exemple 25,25 =  "2" "5" "," "2" "5"  envoyer la chaîne de 5 caractère dans ce cas ( vu que chacun des caractères est sur 8 bits on peut les envoyer ) par contre après la station d'affichage doit recomposer la chaîne de caractère et traduire l'ensemble ... Ce qui fonctionne mais est gourmand en opérations ... 
On a un bel exemple implémenté ici ! =)

Ou on peut aussi utiliser un union qui aura par exemple cette forme : 
union FLOATTOBYTESCONVERTER 
{
 float floatValue;
 uint8_t bytes[SIZEOFFLOAT];  //  SIZEOFFLOAT =4 car un float est sur 4 bytes. 
} tempValue;
Et qui nous permettra de convertir sans y penser un float en bytes puis des bytes en float comme par magie ! 

Pour cela il vous suffit de créer le même union dans vos deux codes côté station d'affichage et côté station météo et de faire : 
 
Côté station météo 
tempValue.floatValue = 25,25;

for(uint8_t i=0; i<SIZEOFFLOAT; i++)
{
   Serial.write( tempValue.bytes[i] );  
}
et côté station d'affichage 
if (Serial.available()>3)
{
  for(uint8_t i=0; i<SIZEOFFLOAT; i++)
  {
    tempValue.bytes[i] = Serial.read( );  
  }

displayFloat (tempValue.floatValue) ;
abracadabra le tour est joué !  C'est pas beau la vie ? 

Maintenant pour ceux qui le souhaitent rentrons un plus dans le détail et si vous voulez suivre accrochez vous : 
L'union en fait c'est rien de plus que plusieurs types de variable qui sont allouées sur un même espace mémoire ! Et le principe c'est de joueer avec le fait de voir de différentes façon ce même espace mémoire. 

Cas concret : je prend un float de valeur z. Dans le micro contrôleur il sera stocké dans 4  bytes ( 4 *8 bits ) qui auront pour valeur  a b c et d ( sur 8 bits ). 
Si sur le même espace mémoire que là ou je stock z je dit qu'il y a un tableau de 4 bytes alors les valeurs qui seront contenu dans ce tableau de 4 bytes seront bien les valeur a b c d. 

Dans l'exemple précédent puisque je ne peux pas envoyer directement z d'un coup par ma fonction Serial.write, je décide de voir non pas z mais le tableau contenant a b c d , et j'envois  a b c et d que je peux envoyer car ce sont des bytes...  Côté station  je reçois alors a b c d et je les stock dans " l'espace mémoire adéquate " et du coup une fois que c'est rangé correctement en mémoire je peux alors voir z ! 

Maintenant vous savez ce qu'est un union et vous avec eu un exemple d'utilisation avec un float, mais sachez que, ça peut s'utiliser avec d'autre types de variable, même avec des structures !

exemple : 
union METEODATA
{
  struct METEO {
  uint8_t huValue;
  uint8_t lumValue; 
  float tempValue; 
  } meteo;
  uint8_t bytes[6]; 
} myData;


myData.meteo.huValue = 100; 


 Sachez aussi que l'usage de l'union n'est pas uniquement pour faciliter les process de communications bytes par bytes.

 Il est possible de définir des unions avec des variables qui ne sont pas de même tailles 

exemple 
union SHORTER 
{
 char nameComplete[20];
 char nameReduced[3];  
} profile;
Vous pouvez par exemple choisir d'afficher un nom réduit composé des 3 lettres d'un prénom ... 

Et beaucoup d'autres usages encore sont possible ! Et vous comment allez vous utiliser les unions ? :)
 
J'espère que cette présentation vous a plu ! 
N'hésitez pas à commenter ce " tutoriel " avec vos propositions de cas d'applications ! ;)



 


[Composant] le L298

Publié Mike118 le 19 mai 2016 - 09:22 in Electronique

On a tous au moins un composant qui est super pratique mais mal foutu … Et moi, Mike 118, aujourd’hui je vais vous parler de mon préféré de cette catégorie : Le L298N (plus connu sous sa forme multiwatt 15V …)

 

l298.jpg

 

Tout d’abord pour ceux qui ne le connaissent pas encore : qu’est-ce que c’est que ce composant ? Et bien c’est un double pont en H capable de délivrer 2A par pont fonctionnant jusqu’à 46V ! Il est donc idéal pour une grande gamme de moteurs CC et pas à pas.
Pour ceux qui ne savent pas ce qu’est un pont en H je les invite à se renseigner ici par exemple : http://fr.wikipedia.org/wiki/Pont_en_H.
Autre remarque : je vais employer volontairement des mots anglais afin de vous familiariser un peu avec certains termes employé dans les documentations anglaises en vigueur : aussi appelé les datasheet ! Mais ne vous inquiétez pas cela ne sera que ponctuel !

 

Je vais commencer par décrire un peu le composant :
Comme le composant contient deux ponts en H on les notera pont A et pont B. Le L298 a 15 pattes qui se répartissent ainsi :

  • 3 pattes pour l’alimentation qui est commun aux pont A et B. On a donc la masse : Gnd pour "ground", la tension d’alimentation de forte puissance : VS comprise entre 5 et 50V et la tension d’alimentation « logique » noté Vss = 5V (point très intéressant puisque le composant est donc compatible avec tous vos composants favoris tournant en 5V : Pic, Arduino, Aop, Ne555, etc…)
  • 4 pattes pour les deux paire de sorties que l’on nomme output 1 output 2 output 3 et output 4. Avec output 1 et 2 appartenant au pont A et output 3 et 4 appartenant au pont B. C’est là qu’on va brancher notre moteur par exemple et ce sont ces sorties qui seront capable de délivrer 2A en continue et des pics jusqu’à 3A mais à éviter le plus possible.
  • 4 pattes pour les 2 paires d’entrées que l’on note input 1 input 2 input 3 input 4 de chaque pont, là aussi input 1 et 2 appartenant au pont A et input 3 et 4 appartenant au pont B. C’est sur ces pattes qu’on va brancher nos composants préféré qui vont commander les pont A et B. En effet, imposer une tension de 5V sur input 1 va permettre d’imposer la tension VS sur output 1 et imposer 0V va permettre d’imposer 0V sur output1 … de même pour input 2 sur output 2 etc…
  • Cela fait déjà 11 pattes, et on a vu comment on pouvait utiliser le composant dans ces grandes lignes mais il manque encore 4 pattes …
  • Enable A, enable B, current sensing A, current sensing B

A quoi peuvent-elles bien servirent ?
Tout d’abord, chaque pont est pourvu d’une sécurité, d’où les pattes notées « enable A et enable B ». Pour pouvoir utiliser le pont A : à savoir output 1 et output2, il faut qu’une tension de 5V soit appliqué sur enable A sinon le pont est « en roue libre » et dans ce cas on a donc output 1 et 2 qui ne sont relié à rien du tout ! Ni à la masse ni au 24V quel que soit l’état des input1 et input2. De même pour pouvoir utiliser le pont B il faut 5V sur enable B…

 

Cela fait 2 pattes supplémentaires qu’on peut gérer avec nos composants favoris tournant à 5V ! Très intéressant si on veut ajouter un bouton d’arrêt d’urgence par exemple car il suffit de le relier entre la masse et l’enable du port qu’on veut pouvoir arrêter avec le bouton d’arrêt d’urgence… On peut même relier les deux enables ensemble pour pouvoir couper les deux ponts en même temps !

Notez une chose : Si vous n’en avez pas l’utilité, n’oubliez pas de brancher les enables au 5V !

Bon courage ! Il reste plus que deux pattes …
Ce sont des pattes qui permettent de connaitre le courant I circulant dans chaque pont noté current sensing A et B ! Il suffit pour cela de mettre entre une résistance de valeur R entre curent sensing et la masse et de lire la tension U présente à cette patte : On aura I = U/R. Par contre attention ! Il faut choisir une résistance capable de dissiper suffisamment de puissance (2A ce n’est pas rien ! Petit rappel en notant R la valeur de votre résistance on P = R*I² … Donc avec une résistance de 1ohm et du 2A ça fait déjà au moins 4W à dissiper …) De même il est recommandé de ne pas dépasser les 3V sur cette pattes … donc Il est recommandé d’utiliser dans ce cas une résistance inférieur ou égale à 1 ohm et dissipant suffisamment de puissance pour vos applications ! Comme il ne faut pas dépasser une consommation de 3A, que ces pattes nous permettent de connaître la consommation en temps réel de chaque pont et que les enables nous permettent de couper les ponts si besoin … Il ne faut pas chercher bien loin pour se rendre compte qu’on peut faire une régulation du courant consommée dans les pont du L298 en utilisant ces 4 dernières pattes !

 

Bon maintenant que je vous ais embêté avec ça : sachez que si vous n’avez pas besoin de connaître la consommation en courant dans les ponts vous pouvez tout simplement bancher les current sensing à la masse ! (Et ceci résout le problème du choix de la résistance x). )
Maintenant une petite image pour tout récapituler et montrer qui est où sur le composant :

l298-shema.jpg

 

Pour plus d’info sur le composant je vous invite à lire la datasheet du composant disponible ici : Fichier attaché  l298-sgs-thomson-microelectronics-1.pdf   190,37 Ko   1208 Nombre de téléchargements
Bon tout ça c’est bien beau on est d’accord… Vous auriez pu savoir tout ce que je viens de dire en lisant cette datasheet … Mais rappelons-nous j’ai dit que ce composant était « mal foutu »… Pourquoi donc ?
C’est l’organisation de ces pattes ! Sur une seule ligne c’est bien joli :

l298-shema2.jpg

 

Il y a juste la patte VS qui aurait peut-être put être à côté de la masse… mais bon rien de grave !
Le problème voilà… et bien par ce que nous on utilise généralement c’est ce genre de truc :

veroboard-breadboard.jpg

 

Qui eux sont compatible avec le format “Dip” = espacement entre les pattes 2.54mm et dans le cadre de composants sur deux rangées , les deux ranges sont aligéens avec espacement entre 2 rangées de pattes côte à côte 7.62mm (= 3*2.54mm).

 

Or le L298 est ainsi :

l298-shema3.jpg

 

Donc lui aussi est sur 2 rangées, chaque patte de chaque rangé a bien un espacement de 2.54mm mais l’espacement entre les deux rangées n’est pas de 7.62 mais d’environ 5mm. Mais le pire c’est que les deux rangées ne sont pas alignées ! Arg… Pour le rendre compatible il faut plier un peu les pattes … Soit …
On prend donc notre pince préférée si nécessaire, toute notre délicatesse et on s’exécute …

 

N’ayez pas peur ça se fait assez facilement … Les pattes sont plus solides qu’elles en ont l’aire faut juste pas trop répéter l’opération !
La preuve en image , ainsi cela s’adapte parfaitement au standart Dip :

montage-l298-veroboard.jpg

 

Bon c’est cool tout va bien … C’est très simple … Cependant voilà …

 

De manière schématique ce qu’on obtient au choix…

 

l298-l298.jpg

 

Et là stupeur ! nouveau casse tête … Ce qui était si bien ordonné quand tout était en ligne ne l’est plus en deux ligne ! Deux input d’un côté et deux de l’autre … les output de chaques côté … idem pour la masse et le 5V … Et du coup l’interfaçage avec quoi que ce soit et lui aussi un véritable casse tête … C’est la croix et la banière comme diraient certaines … en effet n’aurait il pas tellement été plus simple d’avoir ceci ?

 

schema-l298.jpg

 

Rien de plus simple pourtant … Il suffit de plier les pattes un peu différement !

 

l298-casse.jpg

 

Et c’était jusqu’à maintenant mon petit secret avec ce composant que je vous partage aujourd’hui ! Ce n’est peut-être pas très beau mais c’est monstrueusement efficace !

 

Je ne sais pas vous mais moi mais moi en tout cas je trouve ça 10 fois plus pratique … Et voilà pourquoi avec un petit exemple d’interfaçage :

 

interface.jpg

 

Vous pourrez remarquer que l’interfaçage est beaucoup plus facile : tout ce qui a besoin d’être gérer par nos composants préféré : microcontrôleur etc… est mis du côté droit (représenté en vert). Tout ce qui est sortie et alimentation est du côté gauche… Il ne reste plus qu’à y mettre vos connecteurs préférés et vous avez votre propre shield pour contrôler deux moteurs à courant continu dans les deux sens !
Vous pouvez aussi rajouter 8 diodes rapides 2A au montage afin de protéger le L298 des surintensités dans le cas où un moteur tourne alors qu’il ne devrait pas au vu de la commande… Ce qui arrive en général quand on demande à un moteur de s’arrêter alors qu’il tournait vite … car il met un peu de temps à le faire du à son inertie ! Il faut placer 2 diodes par sortie de la façon ci-contre sur le côté :

2-diodes-par-sortie.jpg

 

De plus je trouve que les pattes inputs et enables sont particulièrement bien agencées ! Cela ne vous rappel pas un autre composant vous ? Moi si ! Quelqu’un me souffle le L297 pour commander les moteurs pas à pas ? Bingo !

 

Regardons de plus près :

 

L297-pour-commander-les-moteurs-pas-a-pas.jpg

 

Et oui !
Correspondance parfaite
pour ces 6 pattes entre
les deux composants !
Voilà aussi de quoi simplifier l’interfaçage entre ces deux composants !

 

 




Utiliser une plaque d'essai ou breadboard

Publié Mike118 le 31 août 2008 - 02:32 in Electronique

Pour tester un montage avant de le souder, il est préférable de vérifier si celui ci fonctionne correctement.

La plaque d'essai (ou breadboard) est un très bon moyen pour tester un montage sans effectuer aucune soudure et s'assurer rapidement qu'il n'y a pas d'erreur dans notre montage.
Encore faut-il savoir s'en servir...

Vous l'aurez donc compris, le but de ce tutoriel est de vous apprendre à vous servir d'une plaque d'essai.
 
  • Qu'est-ce qu'une plaque d'essai ?
C'est une plaque en plastique isolant parsemé de plein de trous. Ces trous sont espacé de 2.54 mm qui est l'espacement standard des composants électroniques que nous utilisons dans nos montages.
 
Vous l'aurez donc compris les trous permettent d'enfoncer des composants ce qui permettra de le relier entre eux afin de réaliser le montage à tester.
 
20160725_010350.jpg
Breadboard maxi avec quelques composants enfichés.
 
Un peu plus de détails concernant la breadboard ; 
  • Il en existe différentes tailles : 
 
20160731_042440.jpg
Photo comparant les dimensions de trois breadboard 

On retrouve sur cette photo une breadboard maxi  une breadboard mini  et une breadboard micro 


 
  • Le dessous des breadboards est généralement composé d'une mousse adhésive.
La mousse adhésive est couverte  d'une protection jaune visible sur la photo ci dessous  : 
 20160731_042607.jpg
Photo de breadboard maxi retournée
 
Vous l'aurez compris si vous enlevez la protection vous pourrez coller votre breadboard où vous voudrez, attention ce n'est valable qu'une seule fois alors choisissez bien ! Sinon après vous devrez utiliser d'autres moyens pour fixer votre breadboard si jamais vous changez d'avis par la suite. 
 
 
 20160731_042747.jpg
Photo de la breadboard maxi avec protection enlevée
 
 
  • Les contacts entre les trous des breadboards sont fait par des bandes métalliques,
 
Si vous retirez la mousse adhésive qui sert aussi d'isolant vous pouvez apercevoir ces bandes métalliques et ainsi mieux comprendre comment sont reliés les différents trous entre eux. 
 
20160725_021648.jpg
20160725_021657.jpg
Photo de bradboard maxi avec mousse adhésive retirée.
 
On remarquera que la connexion au milieu est coupée, cela permet de pouvoir connecter les composants qui ont deux rangé de pattes. 
De plus les bread board moyenne et grandes disposent de rails d'alimentations , qui pour les plus grande sont séparés au milieu !  
N'hésitez pas à faire des tests de continuité avec votre multi-mètre préféré en mode testeur afin de vous assuré de comment sont organisées les connections de votre breadboard !
 
Image IPBAttention ne pas retirer la mousse adhésive comme sur la photo ci dessus. La mousse sert d'isolant afin d'éviter tout cour circuit entre les différentes bandes métallique.  Retirer la mousse comme sur la photo revient à abîmer le produit, ce qui a été fait volontairement ici pour vous montrer ce à quoi cela ressemble afin que vous n'ayez pas à le faire sur votre matériel à vous. 
 
  • Enfin on pourra noter que les bords des breadbords sont pourvu d'encoches
 
Ces encoches sont présente afin de pouvoir facilement assembler plusieurs breadboards ensemble si jamais une seule  ne suffisait pas pour votre projet ! 
Et puisque qu'une image vaut mieux que mille mots voici quelques photo pour illustrer ce derniers point ! 
 
 
20160731_045335.jpg
Encoches sur le côté des breadboard mis en évidence
 
 
20160731_045816.jpg
Deux breadboards assemblées
 
 
     2.   Comment s'en servir ?

Se servir d'une plaque d'essai est très simple une fois que l'on a compris comment les trous sont reliés / vu les rangées de contacts métallique. Si besoin ne pas hésiter à retourner voir la photo de la breadboard retournée avec la mousse adhésive retirée.
 
Les barettes métallique permette de relier les trous entre eux sur une même rangée. Ces rangées de contacts permettent de connecter fils et des composants ensemble juste en les insérant dans les trous d'une même rangé .
Il suffit donc d'enfoncer les composants dans les bons trous et les relier avec des fils qu'on enfoncera aussi dans les trous .



Image IPBAttention à ne pas utiliser des composants dont le diamètre des pattes est trop important, sinon, vous risqueriez d'abîmer vos contacts.


 


il est préférable d'utiliser du fil monobrin 
ou des connecteurs avec un embout mâle
 
 
un exemple de montage " peu propre" 
Image IPB
 

 

 

 
un exemple de montage propre  : 
 
[photo de montage propre]
 
Allez, entraînez-vous, une fois la technique assimilée, vous verrez que c'est vraiment très pratique Image IPB .
 
Allons un peu plus loin, si vous ne connaissez pas encore " frietzing " et que l'idée d'assembler vos montages sur une breadboard vous plaît alors frietzing pourra rapidement devenir un de vos très bon amis ! 

Frietzing est un logiciel gratuit qui permet de réaliser des montages simple et de les modéliser de manière très visuel. 
 
lien vers le téléchargement ...