Fabrication de circuits imprimés avec une CNC

De fablab
Aller à : navigation, rechercher

Le but est de réaliser les différentes étapes de fabrication d'un circuit imprimé avec une machine à commande numérique (CNC ; voir une vidéo ) :

  • on fraise des pistes conductrices sur des plaques d'epoxy recouvertes de cuivre et on perce les vias (trous conducteurs qui permettent de relier les deux faces du PCB) : cela permet de relier électriquement les composants entre eux
  • on dépose de la pâte à souder au niveau des connecteurs des composants ainsi qu'au niveau des vias
  • on fait du "pick & place" avec une pompe à vide : on va chercher les composants électroniques et on les place par dessus la pâte à souder

Il ne reste ensuite "plus qu'à" chauffer le circuit/la pâte à souder pour obtenir un circuit imprimé fonctionnel.

Je dispose d'une CNC "fait maison" d'1m par 1m. Actuellement la CNC ne fait que fraiser, il convient donc de l'améliorer pour pouvoir déposer la pâte à souder et faire du pick & place. Le but est de pouvoir faire des circuits imprimés de très grande taille, sans machines industrielles extrêmement coûteuses. Le projet peut être vraiment intéressant, parce qu'il fait intervenir de nombreux domaines de l'ingénierie. Voici les différentes étapes du projet tel que je le vois :

  • 1) faire une première version du pick & place : tous les composants sont alignés sur une grille à côté du circuit
    • 1.a) la CNC est pilotée par GRBL, un programme open source pour Arduino qui interprète le g-code et pilote les moteurs de la machine. GRBL ne gère que le fraisage, il faut donc le modifier pour qu'il puisse actionner une pompe à vide, grâce à un relai.
    • 1.b) écrire un script capable de générer le g-code correspondant : pour chaque composant, il faut déplacer la pompe au dessus de la grille, descendre, activer la pompe, remonter, se placer au bon endroit sur le circuit imprimé, redescendre puis désactiver la pompe.
  • 2) gérer la distribution de pâte à souder :
    • 2.a) déterminer la solution optimale entre un système de pousse-seringue contrôlé par un moteur pas à pas et un système pneumatique : le premier est plus simple mais moins précis (et en pratique jamais utilisé dans l'industrie), tandis que le deuxième est plus précis mais plus cher et plus compliqué à mettre en place.
    • 2.b) modifier GRBL pour contrôler ce nouvel outil
    • 2.c) écrire un nouveau script pour générer le g-code correspondant
  • 3) faire une version améliorée du pick & place : les composants ne sont plus sur une grille mais dans des rouleaux (conditionnement classiques des composants CMS)
    • 3.a) modéliser puis fabriquer un dérouleur : quand on lui en donne l'ordre le dérouleur doit se "dérouler d'un composant", c'est à dire que le composant suivant du rouleau doit être à la même position que le composant précédent, pour que la pompe à vide puisse venir le prendre
    • 3.b) remodifier GRBL
    • 3.c) puis encore une fois écrire un script générant le g-code
    • 3.d) gérer plusieurs pompes sur le porte-outil : pour plus de rapidité on peut installer deux pompes sur la CNC et diviser par deux le nombre d'aller-retours entre le circuit et le dérouleur

Si nous avons le temps, on peut même commencer une 4ème partie : concevoir de A à Z et fabriquer un four à refusion de grande taille. Une fois les composants placés sur la pâte à souder, il faut quand même chauffer cette dernière. L'idée est donc d'utiliser un four à refusion avec un profil de température. Les étapes du projet seraient donc :

  • 4.a) choix des technologies de chauffe : infrarouge direct ou convection forcée. La première méthode est la plus simple mais consomme énormément d'énergie et n'est pas toujours optimale, tandis que la deuxième est plus compliquée à mettre en place mais meilleure si bien implémentée.
  • 4.b) choix des matériaux et techniques de fabrication : type d'isolation, assemblage des plaques de tôle par soudure ou rivetage, etc.
  • 4.c) modélisation du four (pour des circuits de 600x960mm) en CAO (SolidWorks)
  • 4.d) commande des pièces & fabrication
  • 4.e) configuration et tests, il y a très peu de code à écrire, de nombreuses solutions open source existant pour contrôler des fours à refusion.

N'hésitez pas à me contacter si vous avez des questions.


--

Premier suivi :

Ce qui a été fait :

  • découper au laser des nouvelles plaques en plexiglas et les monter sur la CNC
  • refaire tout le câblage et les soudures pour plus de fiabilité
  • choix d'un système à air comprimé pour le dépôt de pâte à souder

Prochaines étapes :

  • modifier GRBL pour gérer les relais
  • étudier fichier gerber pour générer du GCode
  • configurer OpenPnP et le tester avec la CNC

Changements par rapport aux objectifs initial :

  • utiliser une caméra et un Raspberry Pi pour détecter les contours, l'angle et le centre d'un composant CMS afin de le placer et de l'orienter correctement
  • réalisation complète d'un dérouleur pour composants CMS (vidéo 1, vidéo 2)
  • si on fait le four, on ne le fabriquera pas de A à Z, on modifiera un four normal


Deuxième suivi :

Ce qui a été fait :

  • configuration d'openPnP pour le faire marcher avec notre CNC et GRBL
  • extension de GRBL avec un deuxième Arduino pour permettre d'ajouter des g-codes et contrôler plus de sorties
  • début de la programmation de notre propre logiciel ("OpenPnP maison")

Prochaines étapes :

  • branchement des pompes et des relais, modélisation et impression 3D / découpe laser de plexiglas des pièces nécessaires pour fixer les outils
  • modélisation et premiers tests sur le dérouleur
  • continuer notre logiciel (IHM selon le design pattern MVC, communication via USB avec l'Arduino, configuration des macros directement depuis le logiciel)
  • vidéo de démonstration de l'avancement actuel

Changements par rapport aux objectifs initial :

  • abandon du fraisage des pistes (solution OpenSource trouvée mais manque de précision mécanique lorsque trop de force appliquée en Z)
  • abandon du four à refusion (dans le cadre du projet Fablab) pour se concentrer sur les autres objectifs


Troisième suivi :

Ce qui a été fait :

  • extension de GRBL en passant par un deuxième Arduino (mais pas encore intégré à la CNC) : relais et moteur pas-à-pas pour feeder
  • énorme avancée sur 'PnPTerminator' :
    • connexion automatique sur le bon port Serial
    • affichage intégré des deux caméra (top & bottom vision)
    • contrôle manuel de la CNC
    • lecture de 4 formats différents de données de pick & place pour Eagle et Kicad (reconnaissance automatique du format, ajout de nouveaux formats directement en XML)
    • ajout et paramétrage de feeders en rouleau (Reel feeder)
  • vidéo de démonstration (voir plus bas)
  • premières recherche sur la détection de contours de composant avec OpenCV (bottom vision)


Prochaines étapes :

  • continuer PnPTerminator :
    • ajout et paramétrage de feeders en grille (Tray feeder)
    • génération du gcode correspondant à un Job avec les feeders configurés
    • multiples Boards
    • sauvegarde/chargement de configuration (feeders)
    • amélioration de l'IHM (menus, gestion des erreurs)
  • récupérer une base de données d'un maximum de composants CMS (nom, package, etc.)
  • tester le dépôt de pâte à souder puis l'intégrer à la CNC
  • continuer la modélisation et l'impression du prototype de reel feeder
  • continuer les tests de bottom vision sur OpenCV
  • vidéo de démonstration d'un Job complet


Changements par rapport aux objectifs initial :

  • sans essayer de l'intégrer à la CNC, utiliser des images d'exemples (cf. "bottom vision" plus bas) pour déterminer s'il est envisageable de :
    • vérifier que le composant est bien présent (-> vérifier que le composant a bien été saisi ou que le reel feeder n'est pas vide)
    • détecter les contours et l'angle d'un composant (-> compenser les légers décalages lors du pick et l'orientation peu précise dans les feeders)
    • compter le nombre de pins du composant (-> combiné aux dimensions du composant, vérifier qu'il s'agit du bon package, ce qui permet d'éviter certaines erreurs d'origine humaine, comme l'inversion de deux reel feeders ou la mauvaise configuration d'un tray feeder)
  • si les résultats sont encourageants, on pourra s'intéresser à la "top vision" :
    • soustraction entre deux images après/avant le job (-> vérifier que tous les composants ont bien été placés, et au bon endroit, avec le bon angle)
    • vérifier la présence d'un composant (-> vérifier qu'un reel feeder n'est pas vide ou qu'un tray feeder a bien été configuré)
    • identifier le package d'un composant (-> vérification de la configuration des feeders)


Répartition des tâches

  • Modélisation : Térence
  • Extension de GRBL : Emmanuel
  • Tests et programmation des feeders : Emmanuel
  • Programmation de l'interface PnP : Aurélien et Térence
  • OpenCV : Emmanuel

Documentation / Spécification

Spécification des feeders

Photos

Cnc1.jpg Cnc4.jpg Cnc5.jpg Cnc2.jpg Cnc3.jpg

Vidéos de démonstration

https://youtu.be/kvJKnJp9iSc

Bottom Vision

Empty (2).jpg 0603 (3).jpg 3528 (7).jpg Tssop28 (2).jpg