Table des matières:

Outil de mesure de vitesse d'avance CNC fabriqué à partir de ferraille : 5 étapes
Outil de mesure de vitesse d'avance CNC fabriqué à partir de ferraille : 5 étapes

Vidéo: Outil de mesure de vitesse d'avance CNC fabriqué à partir de ferraille : 5 étapes

Vidéo: Outil de mesure de vitesse d'avance CNC fabriqué à partir de ferraille : 5 étapes
Vidéo: Formation d'usinage de A à Z avec un maître fraiseur 2024, Juillet
Anonim
Outil de mesure de vitesse d'avance CNC fabriqué à partir de ferraille
Outil de mesure de vitesse d'avance CNC fabriqué à partir de ferraille

Quelqu'un a-t-il déjà voulu mesurer la vitesse d'avance réelle sur une machine CNC ? Probablement pas, jusqu'à ce que les fraises soient intactes après un travail CNC… mais quand elles commencent à casser régulièrement, il est peut-être temps d'enquêter. Dans ce instructable, vous pouvez suivre une quête pour déterminer le taux d'alimentation réel d'une machine CNC. Il couvrira la partie rétro-ingénierie d'une imprimante, le micrologiciel arduino, le logiciel PC et les résultats que j'ai obtenus avec l'aide de mes collègues, ainsi qu'une poubelle transformée en trésor.

Étape 1: Matériaux, outils, appareils utilisés pour faire fonctionner le projet

Quand j'ai commencé à travailler là-dessus, j'ai pensé à une courte liste des choses dont nous aurons besoin:

  • mécanisme de chariot d'imprimante démonté
  • outils à main pour peaufiner cela
  • fer à souder, soudure, fils
  • multimètre
  • oscilloscope ou analyseur logique - ce n'est pas absolument nécessaire
  • source de courant
  • microscope
  • Arduino nano + brochage
  • PC avec Arduino IDE, Visual Studio 2008 Express + outils MS Charting installés
  • (MPU6050 - j'ai fini par ne pas l'utiliser)
  • prêt à rechercher tout ce que vous ne savez pas faire

Au début, je pensais qu'une carte MPU6050 me permettrait de mesurer la vitesse d'avance sur les trois axes à la fois. Ayant l'accéléromètre à l'intérieur, j'étais sûr que la somme des données de l'accéléromètre me donnerait la valeur souhaitée - la vitesse sur chaque axe. Après avoir téléchargé et modifié un extrait Arduino qui affichait des données brutes sur le moniteur série, j'ai écrit un petit programme PC dans Visual Studio qui traitait les données et les affichais sur un graphique pour une interprétation plus facile. J'ai dû télécharger à la fois Visual Studio C# Express 2008 et les outils de création de graphiques pour cela.

Après avoir codé un certain temps et recherché toutes les choses dont j'avais besoin pour la communication série, je me suis retrouvé avec les valeurs tracées, mais peu importe ce que j'ai fait, ce n'était pas utilisable. Des mouvements petits mais soudains entraîneraient d'énormes pics, tandis que les voyages plus longs n'apparaîtraient même pas sur les graphiques. Après deux jours à marteler le MPU6050, j'ai finalement abandonné et me suis tourné vers autre chose - un mécanisme de retour de position d'une imprimante démonté.

Étape 2: Matériel qui devait être fait

Matériel qui devait être fait
Matériel qui devait être fait
Matériel qui devait être fait
Matériel qui devait être fait
Matériel qui devait être fait
Matériel qui devait être fait
Matériel qui devait être fait
Matériel qui devait être fait

Ingénierie inverse

Bien sûr, le mécanisme de l'imprimante n'avait pas de numéro de pièce que j'aurais pu utiliser pour déterminer ses propriétés exactes, il a fallu un peu de rétro-ingénierie pour arriver là où nous voulions. Après avoir examiné de près le mécanisme et l'électronique, j'ai décidé que la première chose devait être l'identification des broches du capteur optique. Cela devait être fait afin d'interfacer le tout avec l'Arduino. J'ai démonté la partie en plastique noir, extrait le PCB et examiné le capteur: il y avait écrit ROHM RPI-2150 dessus. Cela m'a rendu heureux, l'espoir était grand que je trouverai une fiche technique. Malheureusement, il s'agit soit d'une pièce ancienne, soit d'une pièce personnalisée - aucune fiche technique n'a été trouvée sur le Web. Cela signifiait que je devais prendre les choses en main: sachant que ces capteurs ont généralement une LED infrarouge et deux photo-transistors à l'intérieur, j'ai attrapé un multimètre, l'ai mis en mode de mesure par diode et j'ai commencé à mesurer entre les broches.

Les broches d'alimentation sont généralement faciles à trouver - elles sont traversées par des condensateurs et elles sont généralement connectées avec de larges pistes sur les PCB. Les pistes de terre sont souvent connectées à plusieurs plots pour une meilleure réjection du bruit.

Les broches d'entrée et de sortie ne sont pas si triviales, cependant. Lors de la mesure à travers une diode, le compteur affichera sa tension directe dans un sens et sa surcharge (infinie) dans l'autre. J'ai pu identifier quatre diodes entre les broches, j'ai conclu que la quatrième diode devait être une sorte de diode Zener ou TVS, car elle était juste entre les broches d'alimentation du composant. Localiser l'émetteur infrarouge était facile, il y avait une résistance 89R en série avec lui. Je me suis retrouvé avec deux mesures de diodes sur les deux broches restantes, celles-ci devaient être les deux récepteurs.

Remarque: Ces capteurs disposent de deux récepteurs afin de pouvoir déterminer le sens de déplacement en plus de déterminer la position en comptant les impulsions. Ces deux formes d'onde de sortie sont déphasées de 90°, elles sont utilisées pour produire une impulsion de décompte ou de décompte. En suivant le nombre de ces impulsions, la position exacte de la tête d'impression peut être déterminée.

Lorsque l'émetteur et les deux récepteurs ont été localisés, j'ai soudé des fils sur leurs broches, afin de pouvoir interfacer le capteur avec l'Arduino. Avant de faire cela, j'ai alimenté le capteur avec 3,3 V, tiré la bande entre le capteur à quelques reprises et observé l'onde carrée sur les sorties. La fréquence de l'onde carrée variait avec la vitesse de déplacement, et j'ai conclu que le système de mesure est maintenant prêt à être connecté à l'Arduino.

Connexion de l'Arduino

La connexion de ce nouveau "capteur" est très simple. Connectez simplement les sorties du capteur à D2 et D3 (broches capables d'interruption !), et les lignes d'alimentation, et le codage peut commencer.

Étape 3: Codage Arduino

Codage Arduino
Codage Arduino

Le code Arduino est assez simple. J'ai assigné une fonction qui s'exécute à chaque fois que D2 voit un front montant, il s'agit de la fonction d'écoulement du code Arduino que j'ai joint. Si vous jetez un oeil sur les signaux d'un codeur quadratique, vous verrez ceci:

  • dans un sens, la phase A est au niveau logique haut sur chaque front montant de la phase B
  • dans l'autre sens, la phase A est au niveau logique bas à chaque front montant de la phase B

C'était la propriété de l'encodeur dont j'ai profité: puisque la fonction elapse s'exécute à chaque fois que D2 a un front montant, j'ai juste écrit un if qui incrémente un compteur lorsque D3 est haut et le décrémente lorsque D3 est bas. Cela a fonctionné au premier essai, j'ai envoyé la valeur du compteur au moniteur série et je l'ai regardé augmenter/diminuer lorsque j'ai déplacé la tête d'impression sur l'arbre.

Pour faire court, le firmware fait la chose suivante dans la fonction de boucle:

  1. vérifie le tampon de réception série pour toutes les données entrantes
  2. s'il y a des données entrantes, vérifiez s'il s'agit d'un « 1 » ou non
  3. si c'est un '1', cela signifie que le logiciel du PC demande la valeur du compteur
  4. envoyer la valeur du compteur au PC via série
  5. recommencer à 1.

Avec cela, la balle est maintenant dans le camp du logiciel PC. Entrons là-dedans !

Étape 4: Logiciel Visual Studio C#

Le but du programme VS C# était de déplacer la charge de calcul de l'Arduino vers le PC. Ce logiciel reçoit les données fournies par l'Arduino, calcule et affiche la vitesse sous forme de graphique.

Ce que j'ai fait pour la première fois, c'est de rechercher sur Google comment établir une communication série en C#. J'ai trouvé beaucoup de bonnes informations sur MSDN.com avec un bon exemple, puis j'ai juste jeté ce dont je n'avais pas besoin - essentiellement tout sauf la partie lecture. J'ai configuré le port COM et la vitesse pour qu'ils correspondent à ceux de l'Arduino, puis j'ai fait quelques essais et j'ai vidé tout ce qui arrivait sur le port série dans une zone de texte multiligne.

Une fois les valeurs lues, je pouvais simplement utiliser les fonctions readto & split pour isoler les mesures les unes des autres et des caractères délimiteurs. Celles-ci ont été tracées sur un champ Graphe, et les valeurs ont commencé à apparaître à l'écran.

Si vous ne voyez pas le contrôle Chart dans votre boîte à outils VS, vous pouvez rechercher le problème sur Google et trouver la solution ici (recherchez la réponse n°1): lien

Le principe de mesure

Pour trouver le lien entre le nombre de comptages et la distance parcourue par la tête, nous avons remis à zéro la valeur de comptage, déplacé la tête d'impression de 100 mm à la main et observé le changement de comptage. Nous avons finalement obtenu la proportion suivante: 1 point = 0,17094 mm.

Puisque nous pouvons interroger la distance et mesurer le temps entre les échantillons, nous pouvons calculer la vitesse à laquelle le changement de position se produit - nous pouvons calculer la vitesse !

Il y a un timing logiciel approximatif de 50ms grâce à TMR0, mais nous avons observé que ces timings n'étaient pas trop précis. En fait, après quelques mesures de vitesse logicielles, nous avons constaté que les 50 ms chronométrés n'étaient pas du tout 50 ms. Cela signifiait que les échantillons n'étaient pas prélevés à intervalle fixe, de sorte que le calcul de la vitesse ne pouvait pas non plus utiliser une base de temps fixe. Une fois que nous avons trouvé ce problème, il était facile de passer à autre chose: nous avons pris la différence de distance et la différence de temps et avons calculé la vitesse comme D_distance/D_time (au lieu de D-distance/50ms).

De plus, comme notre équation renverrait la vitesse en unités de mm/50 ms, nous devons la multiplier par 1200 pour obtenir la distance que la tête parcourrait en une minute, en [mm/minute].

Remarque: le logiciel de contrôle de fraisage CNC Mach 3 définit les vitesses d'avance en unités de [mm/minute]

Filtration

À partir de ce moment, les mesures semblaient assez précises, mais il y avait du bruit sur le signal mesuré. Nous soupçonnions que cela était dû à des incohérences mécaniques dans l'arbre, l'accouplement d'arbre, etc., nous avons donc décidé de le filtrer, pour obtenir une bonne valeur moyenne de ce qui est mesuré.

Réglages fins du logiciel

Afin de modifier le taux d'échantillonnage et le taux de filtrage pendant l'exécution, des barres de défilement ont été ajoutées - une pour chaque. En outre, la possibilité de masquer les parcelles a également été introduite.

Étape 5: Résultats

Résultats
Résultats
Résultats
Résultats
Résultats
Résultats
Résultats
Résultats

Une fois les composants matériels et logiciels prêts, nous avons effectué trois séries de mesures avec mach 3 + mon logiciel, vous pouvez voir les résultats sur les images ci-jointes. Des expériences ultérieures ont montré une meilleure précision, avec une augmentation des taux de filtrage et d'échantillonnage. Les graphiques montrent la vitesse mesurée en rouge continu et la moyenne en pointillé bleu.

Cela étant dit, il semble que Mach 3 gère ces paramètres de vitesse assez précisément, mais maintenant nous en sommes sûrs:)

J'espère que vous avez apprécié ce court instructable sur la rétro-ingénierie et la transformation de l'eau en vin !

À votre santé!

Conseillé: