Mot-clé - tutoriel

Fil des billets - Fil des commentaires

Dimanche, mars 16 2014

[DIY] Stencil pour soudure de CMS

Bonjour tout le monde !

Après presque un mois d’essais infructueux, j’ai fini par trouver une façon simple et viable de graver des stencils pour soudure de composants CMS.

DSCF2695

Un stencil ce n’est rien de plus qu’une plaque en métal (ou en plastique) avec des trous aux endroits où se trouvent les empreintes des composants CMS.

Avec un stencil, l’opération de soudure de composants CMS se limite à appliquer de la patte à souder sur le circuit avec le stencil puis à passer la carte avec les composants au four (de refusions, pas le four de le cuisine ;) ).

Plus besoin de souder chaque composant à la main. Autant dire que le gain en temps est énorme !

Vous vous demandez surement pourquoi d’un coup je cherche à faire des stencils ?

En fait, j’ai un projet « top secret » sur lequel je travaille depuis plusieurs mois.
J’avais prévu de le rendre public en début d’année, mais j’ai dû me résoudre à attendre encore un peu.
Finalement j’espère pouvoir vous montrer le résultat dans le milieu de l’année, juste pour l’anniversaire des 3 ans du blog.

C’est un projet assez costaud qui me demande de souder un bon nombre de composants CMS, d’où la nécessité d’un stencil pour accélérer l’opération de montage.

En attendant, voici ma méthode étape par étape, du fichier de typon, au stencil final ;)

Remarque n°1 : ma méthode est fortement inspirée de celle disponible sur ce blog anglais :
http://rayshobby.net/?p=1246
Je n’ai pas réinventé la roue, j’ai juste ajouté un peu plus de gomme autour ;)

Remarque n°2 : j’ai laissé traîner un paquet d’indices dans les captures d’écrans ci-dessous.
Mais croyez-moi, ce n’est que la partie visible de l’iceberg ;)

Etape 1 – Générer les fichiers Gerber

eagle_brd

La première étape consiste à générer les fichiers Gerber à partir du typon.
Avec Eagle il suffit d’utiliser l’option « CAM » pour cela.

Suivant le logiciel utilisé la façon de faire est différente.
Mais dans tous les cas il doit être possible de générer les fichiers Gerber à partir des couches du typon.
Si ce n’est pas le cas, changer de logiciel de CAO, c’est vraiment un truc de base.

gerber_zip

Au final pour mon circuit, j’obtiens toute une série de fichiers Gerber prêts à être envoyés en fabrication.
Personnellement je fais fabriquer mes circuits chez Seeedstudio. Je n’ai jamais été déçu par la qualité des PCB.

Etape 2 – Vérification des fichiers Gerber

gerbv_all_layers

L’étape 2 consiste à ouvrir les fichiers Gerber avec un éditeur pour voir si tout va bien.
J’utilise Gerbv pour cela.

Logiquement vous devriez vérifier les fichiers générés avant de les envoyer en fabrication.
Si vous ne le faites pas, vous aurez des surprises parfois ;)

Etape 3 – Sélection des couches « solder mask »

gerbv_p_layers

Après avoir vérifié que tout allez bien, vous devriez pouvoir facilement mettre de côté les couches « solder mask » (masque de soudure) qui nous intéressent.
Ces couches servent à masquer les zones où la soudure devra être appliquée.

Etape 4 – Export en SVG

gerbv_p_layers_export

Une fois les couches « solder mask » séparées du reste il faut les exporter en SVG.
Avec Gerbv il suffit de faire « File » -> « Export » -> « SVG ».

L’opération devra être répétée autant de fois qu’il y a de couches « solder mask » (théoriquement il devraient en avoir une ou deux).

Etape 5 – Ouverture du SVG

inkscape_layer

Une fois la couche « solder mask » exportée en SVG il faut l’ouvrir avec un éditeur de SVG.
Pour cela rien ne vaut Inkscape.

Etape 6 – Dégroupage (étape spécifique à Inkscape)

inkscape_ungroup

Par défaut Inkscape fait des « blocs » quand vous ouvrez un fichier SVG.
Si vous essayez de cliquer sur un des pads de composant, vous remarquerez que tout le bloc se sélectionne.

Ce n’est pas pratique et ça va poser des problèmes par la suite, il faut donc dégrouper le bloc.
Pour ce faire : « Object » -> « Ungroup ».

inkscape_ungrouped

À présent chaque élément du fichier SVG (= chaque empreinte de composants) est indépendant.

Attention : à ce stade, évitez de bouger une empreinte par erreur sinon le stencil sera complètement faux à la fin ;)

Etape 7 – Préparation avant impression

Pour pouvoir graver le stencil, il faut que les pads soient blancs sur fond noir.
Une simple impression en mode négatif pourrait suffire, mais niveau consommation d’encre se serait un massacre d’imprimer des pages noir.

L’idée consiste donc à entourer chaque morceau du stencil d’une zone noir, ni trop grande, ni trop petite.

inkscape_square

Pour dessiner les zones noires, il suffit d’utiliser l’outil « Rectangle ».

inkscape_white_square

Ensuite avec la roue de sélection chromatique il suffit de mettre tous les pads en blanc et les rectangles en noir.

inkscape_lower

Astuce : les rectangles se dessinent toujours par-dessus les autres formes avec Inkscape.
Il suffit de cliquer sur l’icône « Lower selection to bottom » pour « descendre » le rectangle d’un niveau, et faire en sorte qu’il soit en dessous des pads.

Etape 8 – Impression

Pour fabriquer mes stencils, mes PCB, mes faces avant de boitier, bref tout, j’utilise la technique du « transfert de toner ».
Cette technique consiste à utiliser une imprimante laser (et uniquement laser, pas jet d’encre) pour imprimer un motif sur du papier et ensuite le transférer sur un support.

« L’encre » dans une imprimante laser s’appelle du « toner ». C’est une sorte de plastique qui se transfère très bien à la chaleur.
Cerise sur le gâteau : le toner étant un plastique il ne craint pas l’acide, c’est donc tiptop pour faire des circuits ;)

DSCF2627

Pour faire mes circuits, j’utilise une petite imprimante laser du fabricant « Brother » qui m’as coûté ~80€.
Les recharges de toner (noir uniquement) font environ 1000 feuilles et coûtent 40€, pour une imprimante laser c’est vraiment low-cost.

Ironie, si vous avez une imprimante laser professionnelle qui peut imprimer plus de 100 feuilles par minute (le genre de grosses imprimantes laser qui font souvent scanner automatique et fax) ça ne marchera pas aussi bien qu’avec une petite imprimante laser comme la mienne qui fait au maximum 20 pages à la minute les jours de beau temps.
Cela est dû à la puissance du fil Corona des rouleaux chauffant qui chauffent le toner pour l’incruster dans le papier. Sur les grosses imprimantes laser, ils sont tellement puissant que le toner est carrément fondu d’un bloc dans le papier.

DSCF2630

Concernant le papier justement, il faut impérativement du papier glacé pour que le transfert puisse se faire.
MAIS, il ne faut PAS du papier de qualité …

L’idéal c’est le papier glacé de publicité, le truc qu’on jette sans même lire, c’est tiptop.
Pas la peine d’acheter du papier « ultra glossy » à 20€ les 10 feuilles ça ne marchera que très moyennement.

J’adore cette technique pour ce côté « ne marche qu’avec de la merde » :)

Etape 9 – Préparation

DSCF2589

Pour faire les stencils, il faut du métal, idéalement de l’acier au carbone.
Mais bon, l’acier au carbone c’est hors de prix et en plus ça ne se grave pas.
Donc à moins d’avoir une découpeuse laser ça ne vaut pas le coup.

Personnellement pour faire mes stencils j’utilise deux types de métaux : du cuivre et de l’aluminium.
Le cuivre se grave sans problème comme un circuit classique, par contre à l’usage le stencil s’use plus vite.
L’aluminium dure plus longtemps à l’usage et se grave assez facilement avec la bonne méthode. Quand on commence à maîtriser la technique, c’est une solution très intéressante.

Dans les deux cas, les feuilles de métal doivent faire très exactement 1/10iéme de millimètre. C’est l’épaisseur standard d’un stencil pour soudure CMS.
Ce genre de feuille se vend au mètre à 10-20€ le mètre, une petite recherche google donne plein de résultats ;)

DSCF2632

Pour faire la base des stencils, il suffit de découper un rectangle de métal de taille raisonnable.

Etape 10 – Nettoyage

DSCF2636

Avant de pouvoir transférer le toner sur le métal, il faut enlever toute trace de graisse, d’encre, de poussière et autre saloperie.
Pour ce faire il suffit d’essuie-tout, d’acétone et d’huile de coude.

Précaution d’usage : gants et une bonne ventilation, l’acétone n’est pas très bon pour la santé.

Etape 11 – Transfert du toner

C’est désormais le moment de transférer le toner sur le métal.

DSCF2639

Il vous faut :
– un fer à repasser, idéalement un fer à repasser pas cher qui ne servira qu’à cela,
– de l’essuie-tout pour protéger le métal,
– un support dur et bien plat.

DSCF2641

1) Préchauffer le métal en le glissant dans une feuille d’essuie-tout pour éviter que le fer soit en contact direct avec le métal.
Le fer à repasser doit être réglé sur la puissance maximale, faut que ça chauffe !

Laisser préchauffer 20-25 secondes.

DSCF2643

2) Poser le papier avec le toner côté métal. Bien faire attention de ne pas faire de plis.

Attention : le métal chaud va immédiatement faire fondre le toner qui va commencer à se transférer.
Il n’y a pas le droit à l’erreur lors de la pose.

DSCF2645

3) Pour finir le transfert, il suffit de chauffer le métal (toujours en le glissant dans une feuille d’essuie-tout) pendant 30 secondes de plus. Penser à faire des mouvements circulaires et n’oublier pas les angles, c’est ce qui se transfère le plus mal.

Etape 12 – Épluchage

DSCF2648

Après un rapide passage à l’eau froide le papier devrait se décoller facilement.

DSCF2651

DSCF2653

DSCF2655

Il suffit de tirer doucement sur un coin pour que le toner reste sur le métal, mais pas le papier.
Si le transfert c’est bien fait le papier doit se décoller comme un auto-collant.

DSCF2623

DSCF2657

Plusieurs essais sont souvent nécessaires pour trouver le bon type de papier, mais une fois que c’est bon le résultat est au rendez-vous.

Etape 13 – Protection des zones non couvertes

DSCF2660

DSCF2665

Avant de passer le métal dans l’acide, il faut protéger chaque centimètre carré de métal à nu.
Les seuls endroits à nu doivent être les zones à graver.

Le scotch transparent marche super bien pour faire le masquage.

Etape 14 – Gravure

DSCF2668

Je ne donnerai pas de détails concernant le mélange permettant la gravure.
C’est une solution acide extrêmement puissante qui grave en moins d’une minute le cuivre ou l’aluminium, mais qui est extrêmement dangereuse à réaliser.

Si vous voulez savoir comment elle se réalise voici un tutoriel :
http://www.instructables.com/id/Stop-using-Ferric-Chloride-etchant!–A-better-etc/?ALLSTEPS

Cette solution est vraiment puissante, en plus de graver ultra rapidement elle est réutilisable indéfiniment.
La réaction avec le cuivre génère une deuxième solution qui peut être régénérée avec de l’oxygène, redonnant la solution de départ.
En plus la solution est transparente, contrairement au perchlorure de fer qui est jaune opaque.

C’est vraiment LA solution pour graver des circuits, mais elle demande de prendre beaucoup de précautions.
Autant le perchlorure de fer n’est pas bien dangereux, à part faire des taches il ne peut pas arriver grand-chose.
Autant l’acide ci-dessus peut ronger tout et n’importe quoi, en plus de réagir violemment au contact de toute substance organique.

Pour faire simple, c’est un mélange d’acide chlorhydrique à 23% et de peroxyde d’hydrogène (eau oxygénée) à 30%.
Même séparément ces deux composantes peuvent ronger du métal … ou une main.

Dans tous les cas, il est obligatoire de porter un vêtement à manche longue en coton, des lunettes de protection pour la chimie (qui couvre contre les éclaboussures), des gants de chimies et un masque (idéalement à cartouche, mais je n’en ai pas).
Le mélange doit impérativement se faire en extérieur, avec une source d’eau vive proche disponible à tout instant.

Pour vous donner une idée, voici ce que donne le mélange dès que le cuivre entre en contact avec l’acide :

DSCF2670

DSCF2671

Ça fait des bulles … d’oxygène et de chlore. À ne pas respirer donc.

Etape 15 – Nettoyage

DSCF2678

Au bout d’une grosse minute, le cuivre devrait être rongé entièrement.
Il suffit alors de rincer le stencil à l’eau froide et d’enlever le scotch.

Remarque : la solution de gravure doit être conservé dans un récipient en VERRE, pas en métal (logique) ou en plus plastique (à long terme il sera rongé).
En aucun cas la solution de gravure ne doit être jetée dans la nature. N’essayez même pas d’annuler l’acide avec une base, le résultat serait catastrophique. Si vous voulez vous débarrasser d’un trop-plein de solution, il faut aller en déchetterie.

Le résultat final :

DSCF2681

Etape 16 – Utilisation

Le stencil est prêt, il ne reste plus qu’à le tester !

DSCF2685

Patte à souder, raclette, support, scotch à peinture, stencil et circuit. Let’s go !

Le résultat :

DSCF2689

Avec les composants :

DSCF2691

PS : Pour la recuisson j’utilise un mini four à infrarouge contrôlé par un module « Reflow Controller V2″ de BetaStore.
Ce module m’a coûté un bras, mais le résultat vaut largement mieux qu’un four de recuisson infrarouge tout fait.

Bon WE à toutes et à tous !


Classé dans:projet, tutoriel Tagged: cms, diy, madeinfr, pcb

Vendredi, janvier 25 2013

Remplacer un composant CMS sans prise de tête

Bonjour tout le monde !

Il y a déjà quelques temps on m’a donné un debuggeur ICD2 de microchip, celui ci avait « juste » un problème : il ne marchait plus.
Le problème le plus probable se situait au niveau des portes logiques « OUI » servant d’interface entre le PIC et l’électronique interne du debuggeur.
C’est un problème classique de l’ICD2, assez simple à réparer quand on sait comment faire.

J’avais une heure de temps libre à meubler j’ai donc décidé de tenter une réparation, « propre » :)
L’article en lui même n’est pas d’un très grand intérêt je doit le reconnaitre, mais qu’importe !
Sortez les fers à souder et le cutter on va faire sauter remplacer proprement et dans les règles de l’art des composants cms :)

Avant de commencer : le debuggeur ICD2 :

P1050978

Comme vous pouvez le voir c’est un vrai debuggeur ICD2, pas un clone chinois ou une version bricolée à la main avec 3-4 composants sorties d’un tiroir.
Celui ci dispose d’une connectique plutôt complète : RS232, USB et ICSP.

Seul les parties usb et ICSP semblent HS, la liaison RS232, quand à elle, à l’air de fonctionnait normalement.
Sauf que sans l’ICSP l’ICD2 devient inutile … (un programmateur qui ne programme pas … c’est un peu useless)

P1050980

Fabrication 100% composants CMS.
À noter que Microchip utilise un circuit Cypress pour l’usb et non un de leurs propres circuit usb/série …

Les deux portes logiques sur le banc des accusés :

P1050983

Sur le banc des accusés :
- HA126
- HB126

Deux portes logiques « buffer », en cas de boulette dans le câblage du port ICSP c’est elles qui sont sacrifiées pour sauver les meubles.
Il semblerait que « globalement » les debuggeur « low cost » soit très sensibles aux mauvais câblages, le même genre de problèmes survient avec un « AVR dragon » par exemple.

Remplacer ces circuits « buffer » permet (souvent) de sauver l’ICD2, mais il y a un problème, ce sont des circuits en boîtier SSOP.
Qui dit SSOP dit composant microscopique, à peine 5mm par 5mm …

Remplacement des deux portes logiques :

Voici la recette magique pour remplacer un composant SSOP en 5 étapes ;)

Étape 1, obtenir deux portes logiques neuves :

P1050985

J’ai pris 4 SN74HC126 chez farnell pour tenter ma réparation.

Pourquoi 4 et pas juste 2 ?
Je suis un peu bourrin sur les bords, vu le prix ridicule d’un circuit je me suis laissé une bonne marge.

P1050986

Remarque: la réglette de 4 circuits fait à peine 3cm de long … ça donne une idée de la taille d’un circuit.

Étape 2, rassembler le matériel nécessaire :

P1050990

Il faut :
- (au moins) 2 circuits 74HC126 neuf
- une pince à bec fine
- de la soudure (de préférence de petit diamètre)
- un cutter avec une lame neuve
- de la tresse à dessouder
- un fer à souder avec une tête fine
- la carte à réparer (merci captain obvious ;) )

Étape 3, retrait des circuits défectueux :

P1050992

Pour retirer les circuits défectueux sans détruire le pcb de la carte :
- prendre un cutter (avec un lame neuve de préférence)
- poser le cutter à plat sur les broches du circuit à enlever, au plus prêt du boîtier
- appuyer doucement sur le cutter pour couper les pattes du circuit à ras du boîtier
- faire de même pour l’autre côté
- enlever le boîtier du circuit (note : les pattes resteront quand à elles soudées au pcb ce n’est pas un problème)

Étape 4, nettoyage et préparation du pcb :

P1050993

Avant de continuer :
- dessouder avec un fer à souder à tête fine les morceaux de pattes restées soudées au pcb
- passer un coup de tresse à dessouder sur les pistes du pcb pour enlever les restes de soudure
- mettre un peu de soudure « neuve » sur chaque pistes pour faciliter la soudure des nouveaux circuits

Étape 5, souder les nouveaux circuits :

P1050996

C’est l’étape la plus compliquée car il faut faire preuve de sang froid et de patience …

La première étape consiste à placer le circuit avec la pince à bec.
Ça demande un certain doigté pour aligner correctement le boîtier et les pistes du pcb.

Une fois en place le plus simple est de souder la patte n°1 du circuit pour qu’il ne bouge plus.
Pour souder les autres pattes rien de plus simple, pour faciliter l’opération les composants CMS sont fourni avec un enrobage de soudure sur chaque broche.
De fait, grâce au surplus de soudure déposés sur les pistes à l’étape 4 il suffit de poser la tête du fer sur le dessus d’une broche et d’attendre que l’enrobage de celle ci fonde, entraînant la fonte de la soudure déposée sur la piste en dessous et par conséquent soudant la broche en place.

Même chose pour le deuxième circuit :

P1050999

Et voila, remplacement effectué avec succès en même pas 15 minutes ;)

La question existentielle : est-ce que ça (re)marche ?

P1060002

Et bien … non …

Le remplacement des deux buffer n’a semble t-il pas résolu tout les problèmes …
L’usb est bien reconnu en tant que périphérique « Microchip custom » mais impossible de s’y connecter avec mplab.
En passant par le port RS232 la connexion avec mplab fonctionne, le firmware du PIC16F877 se met à jour sans problème mais la lecture du n° de série du PIC « cible » retourne toujours 0×00 …

Les circuits d’origine était des 74HC126 annotés respectivement HAxxx et HBxxx, ceux que j’ai utilisés sont annotés HCxxx.
C’est peut être le problème pour la lecture du « 0×00″ mais ça ne me dit pas pourquoi l’usb ne marche pas …
Bref il semblerait que ma réparation ne soit pas encore tout à fait au point …


Classé dans:Corrigé, tutoriel Tagged: diy, madeinfr

Samedi, septembre 22 2012

[hack] TL-MR3020 + openWRT = bidouillage USB / Wifi / Ethernet

Bonjour tout le monde !

Pour continuer mon projet de « Blyss box DIY » j’ai entrepris d’utiliser un petit routeur usb / wifi / ethernet.
Celui ci va servir de « lien » entre une carte arduino (et mon code BlyssSpoofer / BlyssSniffer) et une interface web (ou autre, à voir).

D’autres membres du forum arduino.cc se sont aussi lancés dans l’aventure, voici un des nombreux topic sur le sujet :
http://arduino.cc/forum/index.php?topic=115889

Le plus gros problème a été de trouver un routeur wifi capable de gérer la situation.
Celui devant respecter les critères suivant :
- être de petite taille, idéalement de la taille d’une carte arduino UNO
- avoir un port usb (ou à défaut un port série) pour connecter la carte arduino
- être compatible avec openWRT (distribution linux pour routeurs)
- avoir un interface réseau : wifi, ethernet ou les deux

Après pas mal de recherche et les conseils avisés des membres du forum arduino deux candidats sont sortis du lot :
- le TL-WR703N (dispo uniquement en chine),
- le TL-MR3020 (dispo en france mais plus chère)

Niveau hardware c’est quasiment la même chose (même chipset Atheros, même RAM, même Flash) à quelques différences prêt (port ethernet blindé vs non blindé, nombre de led, …).

Pour ma part j’ai choisi d’utiliser le TL-MR3020 avec openWRT (version trunk) :
http://wiki.openwrt.org/toh/tp-link/tl-mr3020

Pourquoi le TL-MR3020 et non son clone chinois le TL-WR703N ?
- plus de led = plus de GPIO = plus de possibilités de bidouillage
- connecteur série au pas 2.54mm (pas standard = pas à ce casser la tête avec des fils « volants »)

Bon par contre niveau prix c’est pas du tout la même chose … 17€ environ pour le TL-WR703N sur ebay contre quasiment le double pour le TL-MR3020 sur amazon, ldlc, …
A vous de choisir ;)

Dans ce premier article je vais détailler uniquement la partie hardware. Je parlerai de la partie software dans un article séparé.

La boite :

Si vous lisez mes articles depuis un certain temps déjà vous devez avoir remarqué que j’adore déballer tout ce que je reçois en photo :)
Ce routeur ne fait pas exception, voici donc à quoi ressemble la boite :

Le routeur à l’intérieur de la boite avec son film de protection :

Et tout les accessoires divers et variés :

Un câble mini usb d’alimentation, un adaptateur 5v secteur, un câble ethernet, bref tout le nécessaire pour un utilisateur « classique ».

Le routeur, petit tour du propriétaire :

Le routeur dans son ensemble :

A part la couleur (gris au lieu de bleu) et le duo led + bouton il n’y a aucune différence esthétique avec le TL-WR703N.

Au niveau de la face avant :

On retrouve :
- le port ethernet
- le port mini usb POUR L’ALIMENTATION UNIQUEMENT
- le switch permettant de choisir le mode de fonctionnement du routeur (avec le firmware d’origine)

Sur le côté droit :

On retrouve le port usb permettant (normalement) de connecter un dongle 3G.
Dans mon cas ce sera un hub avec une clef usb (pour le rootfs) et une carte arduino qui seront connectés au port usb.

Sur le dessus :

Les 5 leds :
- power
- 3G
- wifi
- ethernet
- WPS

Et le boutons WPS.

-> 1ère différence avec le TL-WR703N, celui ne possède que 2 led (dont une qui n’est pas montée par défaut) et un bouton reset.

Ps: ceci est un câble ethernet … j’ai pas trop confiance en sa solidité ^^ »

Opération décorticage, ou comment ouvrir un boitier impossible à ouvrir :

Ouvrir le boitier du TL-MR3020 est juste impossible sans un couteau avec une lame très fine (et solide) et beaucoup, beaucoup de patience …

Pour ouvrir le boitier il faut faire sauter les deux clips du capots coloré, tout en glissant une lame tout autour du capot pour briser les points de colle.

Le premier clip se trouve juste au dessus du port mini usb, le second est en face à ~1.5cm à gauche du logo TP-LINK.
Voila ce que ça donne une fois le boitier ouvert :

Vous remarquerez les petites équerres tout autour du boitier qui sont TOUTES collées par ultrason au capot supérieur.

Ps: attention de ne pas vous blesser en glissant la lame du couteaux dans la fente du boitier, un accident est si vite arrivé …

Le circuit électronique :

Une fois le boitier ouvert il est (enfin) possible de voir ce qui ce cache dans la bête :

Le numéro de révision du circuit se trouve sur le connecteur ethernet :

Comme on peut le voir j’ai un version 1 révision 7.

-> 2éme différence avec le TL-WR703N, sur le TL-WR703N le port ethernet est blindé, sur le TL-MR3020 il ne l’est pas …

Le détails du hardware :

J’ai pas vraiment respecté d’ordre particulier, c’est un peu en vrac ;)

Le chipset Atheros + antenne :

Le chipset Atheros est le cœur du routeur, il est composé du CPU et de la partie réseau ethernet / wifi.

Il s’agit d’un chipset Atheros AR9330 révision 1 (= AR9331).
Le cpu à l’intérieur est de la série des AR72xx et plus précisément un AR7240 tournant à 400MHz.

La partie wifi supporte au maximum du 802.11 b/g/n à 150Mbps.
La partie ethernet quand à elle supporte les modes 10Mpbs et 100Mbps.

Le port mini usb d’alimentation et le port usb « classique » :

Le port mini usb n’est là que pour fournir l’alimentation +5v du circuit.
Il ne peut donc pas être utilisé en usb device ou autre.

D’après le wiki d’openWRT le TL-MR3020 peut fonctionner avec des tensions relativement basses de l’ordre de 2.6/2.7v.
Cela laisse donc la possibilité d’utiliser des batteries lipo 1S 3.7v pour l’alimentation (il faudra que je test pour voir).

Le second port usb, plus « classique » peut quand à lui être utilisé en usb host comme n’importe quel port usb normal.
Il suffit d’avoir les drivers adéquat dans son image openWRT et tout ira bien ;)

La RAM et les leds :

La mémoire RAM est d’une taille de 32Mo ce qui laisse pas mal de place pour l’utilisateur.

Quand aux leds elles sont aux nombres de 5 comme je le précisais un peu plus haut.

Le détail du câblage des leds est disponible sur le wiki d’openWRT :
http://wiki.openwrt.org/toh/tp-link/tl-mr3020#leds

La mémoire flash SPI :

La mémoire flash SPI est d’une taille de 4Mo, celle ci est découpée suivant ce plan mémoire si dessous :
mtd0 (128Ko) : u-boot
mtd1 (1Mo) : kernel
mtd2 (2.75Mo) : rootfs
mtd3 (64Ko) : configuration
mtd4 (64Ko) : art (= Atheros Radio Test)

Ne surtout pas toucher à la zone mémoire nommé « ART » sinon le chipset wifi ne fonctionnera plus du tout.

Si jamais vous brickez le bootloader du routeur il est possible de sauver les meubles en dessoudant la flash et en la reliant à un programmateur.

Le wiki d’openWRT fourni même une image d’usine de l’intégralité de la flash :
http://wiki.openwrt.org/toh/tp-link/tl-mr3020#restoring.original.firmware
(2éme lien de la section « link dump »)

Par mesure de sécurité je ferai un dump complet des zone mtd0 et mtd4 …
Mais j’en reparlerai dans l’article sur la partie software ;)

Les boutons :

Il y a deux boutons, câblés sur trois GPIO.
Le premier bouton est de type « bouton poussoir », il est normalement utilisé pour activer l’authentification WPS wifi.
Le second bouton est de type « glissière » et comporte trois positions, il est normalement utilisé pour choisir le mode de fonctionnement du routeur.

Le détail du câblage des boutons est disponible sur le wiki d’openWRT :
http://wiki.openwrt.org/toh/tp-link/tl-mr3020#buttons

Le port série :

C’est la partie la plus intéressante car c’est celui ci qui permet d’accéder au bootloader (u-boot) et de modifier en profondeur le kernel linux et le rootfs du routeur.

Je n’utilise pas la méthode de flash par l’interface web, je trouve ça trop bancale.
La méthode de flash par le bootloader demande une extrême vigilance pour ne pas bricker le routeur mais quand on est habitué c’est beaucoup plus fiable.

Le port série est câblé de la manière suivante :
| (vcc) (gnd) (rx) [tx] |
() représente une pastille ronde et [] la pastille carré (repère de la broche 1).

Le port série est configuré en 115200 bauds, 8 bits de données, 1 bit de start, 1 bit de stop, pas de parité et pas de contrôle de flux.

Problème : le port série est câblé un peu bizarrement, ce qui fait qu’avec certains adaptateurs série -> usb celui ci ne marche pas correctement.
J’ai testé avec mon ftdi basic de sparkfun, effectivement ça ne fonctionnait pas de base.

Mais ne paniquez pas, il suffit de mettre une résistance de 10K entre VCC et Tx pour régler le problème ;)
(Merci à celui qui a pris le temps de rajouter une note à ce sujet dans le wiki d’openWRT, sinon je serait encore en train de chercher le problème ^^)

Histoire de faire les choses propre j’ai fait un adaptateur série -> FTDI basic avec un morceau de pcb qui trainait :

Note: je n’ai pas relié la broche VCC du connecteur FTDI basic au VCC du circuit, ainsi je peux utiliser un ftdi basic 5v ou 3v3 sans problème ;)

Une fois le connecteur série soudé ça donne ceci :

Il suffit ensuite de brancher l’adaptateur sur le connecteur série :

Et le ftdi basic sur l’adaptateur :

Ensuite on branche l’usb d’alimentation et hop tout s’allume !

Et sur le moniteur série on obtient une jolie console série :

U-Boot 1.1.4 (Mar 20 2012 - 11:37:54)

AP121 (ar9330) U-boot

DRAM:  32 MB
led turning on for 1s...
id read 0x100000ff
flash size 4194304, sector count = 64
Flash:  4 MB
Using default environment

In:    serial
Out:   serial
Err:   serial
Net:   ag7240_enet_initialize...
No valid address in Flash. Using fixed address
No valid address in Flash. Using fixed address
: cfg1 0x5 cfg2 0x7114
eth0: 00:03:7f:09:0b:ad
ag7240_phy_setup 
eth0 up
: cfg1 0xf cfg2 0x7214
eth1: 00:03:7f:09:0b:ad
athrs26_reg_init_lan
ATHRS26: resetting s26
ATHRS26: s26 reset done
ag7240_phy_setup 
eth1 up
eth0, eth1
Autobooting in 1 seconds
## Booting image at 9f020000 ...
   Uncompressing Kernel Image ... OK

Starting kernel ...

Booting AR9330(Hornet)...
Linux version 2.6.31--LSDK-9.2.0.312 (root@localhost.localdomain) (gcc version 4.3.3 (GCC) ) #199 Tue Mar 20 11:38:41 CST 2012
flash_size passed from bootloader = 4
CPU revision is: 00019374 (MIPS 24Kc)
Determined physical RAM map:
 memory: 02000000 @ 00000000 (usable)
User-defined physical RAM map:
 memory: 02000000 @ 00000000 (usable)
Zone PFN ranges:
  Normal   0x00000000 -> 0x00002000
Movable zone start PFN for each node
early_node_map[1] active PFN ranges
    0: 0x00000000 -> 0x00002000
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 8128
Kernel command line: console=ttyS0,115200 root=31:02 rootfstype=squashfs init=/sbin/init mtdparts=ar7240-nor0:128k(u-boot),1024k(kernel),2816(rootfs),64k(config),64k(ART) mem=32M
PID hash table entries: 128 (order: 7, 512 bytes)
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.
Primary data cache 32kB, 4-way, VIPT, cache aliases, linesize 32 bytes
Writing ErrCtl register=00000000
Readback ErrCtl register=00000000
Memory: 29876k/32768k available (1884k kernel code, 2892k reserved, 521k data, 116k init, 0k highmem)
Hierarchical RCU implementation.
NR_IRQS:128
plat_time_init: plat time init done
Calibrating delay loop... 266.24 BogoMIPS (lpj=532480)
Mount-cache hash table entries: 512
NET: Registered protocol family 16
===== ar7240_platform_init: 0


Whoops! This kernel is for product mr3020 v1.0!

bio: create slab <bio-0> at 0
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 1024 (order: 1, 8192 bytes)
TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
TCP: Hash tables configured (established 1024 bind 1024)
TCP reno registered
NET: Registered protocol family 1
AR7240 GPIOC major 0
squashfs: version 4.0 (2009/01/31) Phillip Lougher
NTFS driver 2.1.29 [Flags: R/O].
msgmni has been set to 58
alg: No test for lzma (lzma-generic)
alg: No test for stdrng (krng)
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered (default)
Serial: 8250/16550 driver, 1 ports, IRQ sharing disabled
ttyS0: detected caps 00000000 should be 00000100
serial8250.0: ttyS0 at MMIO 0xb8020000 (irq = 19) is a 16550A
console [ttyS0] enabled
PPP generic driver version 2.4.2
NET: Registered protocol family 24
cmdlinepart partition parsing not available
set partition boot 
set partition kernel 
set partition rootfs 
set partition config 
set partition art 
set partition ÿ 
Searching for RedBoot partition table
5 RedBoot partitions found on MTD device ar7240-nor0
Creating 5 MTD partitions on "ar7240-nor0":
0x000000000000-0x000000020000 : "boot"
0x000000020000-0x000000120000 : "kernel"
0x000000120000-0x0000003e0000 : "rootfs"
0x0000003e0000-0x0000003f0000 : "config"
0x0000003f0000-0x000000400000 : "art"
->Oops: flash id 0x10215 . 
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
Port Status 1c000004 
ar7240-ehci ar7240-ehci.0: ATH EHCI
ar7240-ehci ar7240-ehci.0: new USB bus registered, assigned bus number 1
ehci_reset Intialize USB CONTROLLER in host mode: 3
ehci_reset Port Status 1c000000 
ar7240-ehci ar7240-ehci.0: irq 3, io mem 0x1b000000
ehci_reset Intialize USB CONTROLLER in host mode: 3
ehci_reset Port Status 1c000000 
ar7240-ehci ar7240-ehci.0: USB 2.0 started, EHCI 1.00
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
TCP cubic registered
NET: Registered protocol family 17
802.1Q VLAN Support v1.8 Ben Greear <greearb@candelatech.com>
All bugs added by David S. Miller <davem@redhat.com>
ar7240wdt_init: Registering WDT success
VFS: Mounted root (squashfs filesystem) readonly on device 31:2.
Freeing unused kernel memory: 116k freed
init started:  BusyBox v1.01 (2012.01.16-03:21+0000) multi-call binary
This Board use 2.6.31
xt_time: kernel timezone is -0000
nf_conntrack version 0.5.0 (512 buckets, 5120 max)
ip_tables: (C) 2000-2006 Netfilter Core Team
insmod: cannot open module `/lib/modules/2.6.31/kernel/iptable_raw.ko': No such file or directory
insmod: cannot open module `/lib/modules/2.6.31/kernel/flashid.ko': No such file or directory
PPPoL2TP kernel driver, V1.0
PPTP driver version 0.8.3
insmod: cannot open module `/lib/modules/2.6.31/kernel/harmony.ko': No such file or directory

 (none) mips #199 Tue Mar 20 11:38:41 CST 2012 (none)
(none) login: Now flash open!
Now flash open!
ATHR_GMAC: Length per segment 1536
ATHR_GMAC: fifo cfg 3 01f00140
ATHR_GMAC: Mac address for unit 1:bf1f0006
ATHR_GMAC: 25:51:9d:db:e0:5c 
ATHR_GMAC: Max segments per packet :   1
ATHR_GMAC: Max tx descriptor count :   40
ATHR_GMAC: Max rx descriptor count :   96
ATHR_GMAC: Mac capability flags    :   4D83
ATHR_GMAC: Mac address for unit 0:bf1f0000
ATHR_GMAC: 03:30:dc:d3:6e:49 
ATHR_GMAC: Max segments per packet :   1
ATHR_GMAC: Max tx descriptor count :   40
ATHR_GMAC: Max rx descriptor count :   252
ATHR_GMAC: Mac capability flags    :   4403
athr_gmac_ring_alloc Allocated 640 at 0x81e7d800
athr_gmac_ring_alloc Allocated 4032 at 0x81d61000
Setting Drop CRC Errors, Pause Frames and Length Error frames 
Setting PHY...mac 0
athr_gmac_ring_alloc Allocated 640 at 0x81e7d400
athr_gmac_ring_alloc Allocated 1536 at 0x81f2b000
athr_gmac_mii_setup: MDC check failed
Setting Drop CRC Errors, Pause Frames and Length Error frames 
ATHRS26: resetting s26
ATHRS26: s26 reset done
Setting PHY...mac 1
device eth0 entered promiscuous mode
Now flash open!
nf_conntrack_rtsp v0.6.21 loading
nf_nat_rtsp v0.6.21 loading
asf: module license 'Proprietary' taints kernel.
Disabling lock debugging due to kernel taint
ath_hal: 0.9.17.1 (AR9380, DEBUG, REGOPS_FUNC, WRITE_EEPROM, 11D)
ath_rate_atheros: Copyright (c) 2001-2005 Atheros Communications, Inc, All Rights Reserved
ath_dev: Copyright (c) 2001-2007 Atheros Communications, Inc, All Rights Reserved
ath_ahb: 9.2.0_U5.508 (Atheros/multi-bss)
Boostrap clock 25MHz
ar9300RadioAttach: Need analog access recipe!!
Restoring Cal data from Flash
ath_get_caps[4735] rx chainmask mismatch actual 1 sc_chainmak 0
ath_get_caps[4710] tx chainmask mismatch actual 1 sc_chainmak 0
wifi0: Atheros 9380: mem=0xb8100000, irq=2
wlan_vap_create : enter. devhandle=0x80d202c0, opmode=IEEE80211_M_HOSTAP, flags=0x1
wlan_vap_create : exit. devhandle=0x80d202c0, opmode=IEEE80211_M_HOSTAP, flags=0x1.
VAP device ath0 created 
 
 DES SSID SET=TP-LINK_POCKET_3020_D6E207 
ieee80211_scan_unregister_event_handler: Failed to unregister evhandler=c0aeb860 arg=80c1aac0
wlan_vap_delete : enter. vaphandle=0x81eaa000
wlan_vap_delete : exit. vaphandle=0x81eaa000
wlan_vap_create : enter. devhandle=0x80d202c0, opmode=IEEE80211_M_HOSTAP, flags=0x1
wlan_vap_create : exit. devhandle=0x80d202c0, opmode=IEEE80211_M_HOSTAP, flags=0x1.
VAP device ath0 created 
 
 DES SSID SET=TP-LINK_POCKET_3020_D6E207 
 ieee80211_ioctl_siwmode: imr.ifm_active=393856, new mode=3, valid=1 
WARNING: Fragmentation with HT mode NOT ALLOWED!!
device ath0 entered promiscuous mode
br0: port 2(ath0) entering forwarding state
 ieee80211_ioctl_siwmode: imr.ifm_active=918144, new mode=3, valid=1 
br0: port 2(ath0) entering disabled state
 
 DES SSID SET=TP-LINK_POCKET_3020_D6E207 
br0: port 2(ath0) entering forwarding state

 TL-MR3020 mips #199 Tue Mar 20 11:38:41 CST 2012 (none)
TL-MR3020 login: root
Password: 5up
Jan  1 00:01:13 login[150]: root login  on `ttyS0'



BusyBox v1.01 (2012.01.16-03:21+0000) Built-in shell (msh)
Enter 'help' for a list of built-in commands.

# help

Built-in commands:
-------------------
	. : break cd continue eval exec exit export help login newgrp
	read readonly set shift times trap umask wait

# cd /bin
# ls
busybox       df            kill          msh           sh
cat           echo          login         ping          true
chmod         false         ls            ps            umount
date          iptables-xml  mount         rm
#   

Mot de passe par défaut pour la console série :
login = root
password = 5up

Mot de passe par défaut pour l’interface web :
login = admin
password = admin

Ps: Je n’ai pas pris le temps de regarder l’interface web de base …
J’ai juste booté le routeur pour être sûr qu’il fonctionnait puis immédiatement après je l’ai démonté ;)

Prochaines étapes à réaliser :
- Compilation de openWRT trunk pour le TL-MR3020
- Flash du nouveau firmware
- Mise à jour du bootloader u-boot (quoi que celui d’origine semble déjà à jour)
- Boot de la uImage et d’un rootfs sur une partition de la clef usb
- Intégration de la carte arduino avec mon code BlyssSpoofer / BlyssSniffer
- Mise en place d’un GUI html + cgi

Bonus pour les curieux :

Les deux côtés du pcb en haute résolution ;)


Bon WE et bidouillage à tous ! :)


Classé dans:Corrigé, projet, tutoriel Tagged: madeinfr, openwrt

Samedi, janvier 21 2012

Flux de création de fichiers GCODE avec des outils libres

Après le petit tutoriel de ce matin, voici un post qui résume le « flux de production » de mes fichiers GCODE.

  • La base

Tout commence par l’objet indipensable à la prise de mesure: le pied à coulisse.

  • Les matériaux

Une fois l’objet à créer correctement dimensionné, il faut trouver le matériau dans lequel on va le créer. J’utilise principalement des bois et plastiques, les métaux étant (à par pour de la gravure) trop difficiles à fraiser avec mon matériel (il manque un refroidissement liquide ou un moteur de broche avec une faible vitesse et un gros couple).

  • Pour le bois, je prends en général du MDF ou du contreplaqué qui peuvent faire entre 3 et 15 mm.
  • Pour le plastique j’utilise beaucoup le PVC qui a un bon rapport qualité / prix ainsi que du PEHD ( c’est ce qui est utilisé pour les plaques à découper dans votre cuisine ;-)   ou encore du DELRIN (qui est excellent mais cher)

Le choix du matériau est fait, maintenant les logiciels ! Ne soyez pas effrayés, il y en a un certain nombre mais chacun est très performant dans son domaine.

  • Les logiciels de CAO

Pour dessiner des pièces à usiner, celui que j’utilise le plus, c’est LibreCAD. C’est un fork libre du projet QCAD. Avec un peu d’habitude, vous dessinerez en quelques minutes des pièces relativement complexes en 2D. Vous pouvez commencer par regarder le tutoriel d’Andre PASCUAL, il parle de QCAD mais c’est la même chose, à part les icones qui changent, le principe est identique et le tutoriel est excellent.

 

Quand il s’agit de graver des dessins ou du texte, rien de vaut inkscape qui n’est plus à présenter. Il est préférable lorsque vous utilisez inkscape pour créer des fichiers DXF, nécessaires dans la suite du flux de production, d’enregistrer avec le greffon « Better DXF Output ». Pour certains dessins contenant des courbes de bezier ( splines ), je suis obligé d’ouvrir les DXF de LibreCAD avec Inkscape puis de les réenregistrer pour qu’il convertisse tout en polyline. Sinon, j’ai des plantages lors de la génération du GCODE avec HeeksCNC. Un bug qui sera surement corrigé par les développeurs, mais en attendant…

Dans un autre cadre très particulier, celui de la création de circuits imprimés, j’utilise KiCAD, un concurrent du très connu EagleCAD. Avec ce logiciel, je génère des fichiers GERBER qui seront ensuite convertis en GCODE.

  • Les logiciels de création du GCODE

Ici, seulement deux logiciels sont utilisés:

HeeksCAD / HeeksCNC vont permettre de transformer le fichier DXF 2D en un fichier permettant de piloter la machine CNC. On renseigne au logiciel le diamètre de l’outil, son positionnement par rapport à la pièce, la vitesse d’avance… Bien qu’assez jeune, ce logiciel donne de très bon résultats.

 

En dehors des DXF, il y a les fichiers GERBER de Kicad. Là j’utilise pcb2gcode qui est un logiciel en ligne de commande.

 

pcb2gcode --metric --zsafe 2 --zwork -0.06 --offset 0.2 --zchange 25 --mill-feed 100 --mill-speed 5000 --back $back
  •  Pilotage de la CNC

Ici, un seul choix et non des moindres: EMC (LinuxCNC). Il prend en entrée les fichiers gcode et pilote la machine au travers d’un support temps réel du noyau linux. Il est préférable d’ailleurs de lui dédier une ancienne machine.

Et voilà après 2 heures de travail une manette de coinceur pour un voilier. L’originale en rouge est fendue, la nouvelle en DELRIN est très solide :-) et identique à l’originale (les économies de plastique en moins), elle parait plus épaisse mais ce n’est qu’un effet d’optique sur la photo.

 

 

Diagramme du flux de production

 

Si vous connaissez, utilisez d’autres outils, mettez les en commentaire c’est toujours intéressant !

Petit tutoriel vidéo pour utiliser LibreCAD, HeeksCAD et HeeksCNC

Un tout petit tutoriel pour apprendre à créer des fichiers GCODE en 5 minutes avec LibreCAD, HeeksCAD et HeeksCNC.

A voir en 720p / FullScreen sur Youtube.

Vendredi, novembre 3 2006

Scanner Wi-Fi rétro-éclairé

Pour quelqu'un toujours en vadrouille et qui a souvent besoin de se connecter à internet pour envoyer un courriel, passer un coup de fil par voix IP, surfer, que sais-je..., quoi de plus pratique qu'un détecteur Wi-Fi autonome pour trouver des réseaux auxquels se connecter par la suite ?

J'ai trouvé récemment ce scanner Wi-Fi (réseaux 802.11b/g, 2.4Ghz) autonome, faisant aussi office de clef wi-fi, le dénommé TEW-429UB dont voici la photo :

Photo du détecteur Wi-Fi

Il est très très sensible, à ma grande surprise d'ailleurs, je m'attendais plus à un gadget, bref, j'en suis parfaitement content mais il manquait tout de même une chose importante : le rétro éclairage, c'est maintenant chose faite, vous trouverez sur le lien ci dessous des photos de la démarche que j'ai entreprise pour pouvoir s'en servir dans le noir complet !

L'écran rétro-éclairé

La page sur le wiki

Jeudi, janvier 12 2006

Connecter la télécommande eSky du Carbooon sur un PC pour profiter de FMS

Ce montage simple vous permettra de connecter votre télécommande eSky fourni avec l'hélicoptère Carbooon (appelé aussi par erreur Carboon) à votre PC afin d'augmenter le réalisme du simulateur de modèles réduits Flying-Model-Simulator

Photo de la boite du Carbooon

Ce montage fonctionne sans problème sous Window$ XP contrairement à beaucoup d'autres montages.

La page du projet

Mercredi, juillet 6 2005

Un suiveur de lumière à base de PIC10F

J'ai réalisé un p'tit montage tout simple, didactique avec 2 photodiodes, un servo et... un PIC10F qui permet de suivre une source de lumière placée à proximité de ses capteurs.

La réalisation hardware et software est expliquée sur le wiki par ici : SuiveurLumiere

Suiveur de lumière à base de Pic et servo Vu du servo équipé de ses 2 capteurs de lumière


Suiveur de lumière à base de Pic et servo from hugo on Vimeo.