Plancha-CMS: Refusion et fin de projet
Amis Maker,
Pas plus tard qu'hier, le projet "Plancha-CMS", un projet MicroPython de refusion CMS, se voyait doté d'une interface utilisateur et de ses premières fonctionnalités (Cooling et Pre-Heat)!
Très excité par cette avancée rapide, je décidais de poursuivre sur ma lancée avec la refusion!
projet "Plancha-CMS" |
La refusion
La refusion (reflow en anglais) est un procédé permettant de réaliser la soudure de composants montés en surface (CMS, SMD en anglais) placés sur la carte. C'est ma refusion de la pâte à soudé (aussi appliqué sur la carte) qui soude les composants.
Plus de détails ici sur Wikipedia.
Le profile de refusion
Il n'est pas question de placer la carte, les composants et la pâte de refusion sur une surface étant déjà 250°C! Il faut y aller "en douceur" si je peux m'exprimer ainsi.
Il faut donc suivre ce que l'on appelle un "profile de refusion" visant à:
- éviter un choc thermique trop brutal,
- de permettre au composant de monter un peu en température
- permettre au flux contenu dans la pâte de fondre et de se répandre sur la carte
- d'éviter que les composants ne grillent parce qu'il restent trop longtemps à une température trop élevée.
Voici deux exemples de profile de refusion:
Enfin, l'article "Reflow Soldering Technology" propose de nombreuses informations pratiques.
Source: Reflow Soldering Technology |
Source: Reflow Soldering Technology |
Profile d'essai SN0 de la Plancha-CMS
Sur base des informations ci-dessus, voici les 5 phases du profile que je vais mettre en oeuvre pour les premiers essais.
- Mise en chauffe: Montée à 150°C en 90' => soit une rampe de 2°C/sec
- pré-chauffage: (Rampe jsq'à 180°C en 90' => soit une rampe de 0.33°C/sec
- Mise en refusion: montée à 245°C en 45' => soit une rampe de 1.44°/sec
- Refusion: maintient à 245°C pendant 30'
- Refroidissement: coupure de la chauffe et ventilation
Codage du profile SN0 en Python
Le profile ci-dessous peut être encodé comme suit:
PROFILE_SN0 = [(150,90),(180,90),(245,45),(245,30)]
Voici une liste de tuple (t°_finale, temps_alloué_sec) décrivant les différentes phases détaillées ci-avant.
Le refroidissement venant après la dernière phases.
La première phase est donc 150°C en 90 sec. La dernière est 245°C pendant 30 sec (le maintient à la température de refusion).
Du code pour le peuple
Le code est bien entendu disponible sur le dépôt GitHub Plancha-CMS.
Le script main.py assure le traitement d'un profile par l'appel de la méthode profile_heating( profile ) qui accepte le profile en paramètre (voir PROFILE_SN0 ci-avant).
Petit rappel
La mise en oeuvre du profile de chauffe s'appuie sur un contrôleur PID qui, lui, contrôle la température de la semelle chaque seconde et applique la correction nécessaire (voir les précédents articles sur Plancha-CMS).
Traitement d'une phase
Pour chacune des phases, le temps alloué en divisé en intervalles de 5 secondes, ce qui permet de calculer la rampe de température à suivre pour atteindre la température finale désirée.
Le PID est donc informé, toutes les 5 secondes, de la nouvelle température à atteindre. Cela permet d'éviter les trop brusques montées en température de la semelle.
Avec des intervalles de 5 secondes, le contrôleur PID dispose de 4 à 5 itérations pour effectuer l'asservissement de la température.
En admettant que la température de la semelle est à 22°C (t° de la pièce) lors du démarrage de la première phase (150,90) du profile, soit (atteindre 150°C, en 90Sec) , nous pouvons déduire:
- Nous aurons 90 / 5 = 18 itérations de 5 secondes pour cette phase.
- Une différence de température de 150°C - 22°C = 128°C à combler
- Soit 128°C / 18 itérations = une augmentation de 7.11 °C toutes les 5 secondes.
La fin de la première phase atteinte, il ne reste plus qu'a passer immédiatement à la suivant, donc (180,90), et procédé à l'identique... sauf que cette fois, la température de départ est 150°C (T° de fin de la phase précédente).
Contrôler l'exactitude de la régulation.
Voici les informations PID produites par l'exécution de profile_heating( PROFILE_SN0 ) :
1, 46, 41 2, 46, 40 3, 46, 41 4, 46, 41 5, 46, 42 0, 52, 43 1, 52, 44 2, 52, 44 3, 52, 46 4, 52, 47 1, 58, 48 2, 58, 50 3, 58, 50 4, 58, 51 5, 58, 52 0, 65, 53 1, 65, 54 2, 65, 54 3, 65, 55 4, 65, 56 0, 71, 57 1, 71, 58 2, 71, 59 3, 71, 61 4, 71, 63 1, 77, 64 ....
On constate que la première colonne est remise a zéro toutes les 5 secondes (à chaque fois que le PID est informé d'une nouvelle température. La deuxième colonne est la T° a atteindre, la troisième colonne est la température de la semelle.
Les données importées dans une feuille de calcul permet de générer un rendu sous forme de graphique.
La première colonne (les itérations PID, chaque seconde) est remplacée par une valeur incrémentée permettant ainsi d'obtenir un écoulement du temps linéaire et globale sur la totalité de la régulation.
Rendu dans le graphique, il est possible de voir les escaliers des différentes consignes attribuées au PID (en bleu) et le suivit de température de la semelle (en rouge).
Phases de la refusion et température de la semelle |
La courbe de refusion est excellente (même si elle présente un retard de 5 à 10 degrés). Il y manque la phase de maintient à 245°C qui n'était pas encodée dans le script Python.
Après une légère adaptation du code, il est maintenant possible de relever une courbe de refusion complète... et le résultat est plutôt satisfaisant :-)
Refusion SN0 -> refusion de SnCu à 245°C |
Auto-critique:
1. il serait plus approprié d'avoir un pointe a 245°C qui dure plus longtemps.
2. le retard systématique entre la consigne et la température est probablement causée par le déplacement de la sonde de température du dessous de la semelle au dessus de la semelle. Ce qui aurait sensiblement modifié les paramètres PID.
3. Adapter les paramètres pour répondre au point 2 pourrait fort bien corriger le point 1.
Ressources
- Dépôt du projet Plancha-CMS (GitHub)
Voici un projet terminé qui saura se monter utile.