Intro
M’étant mis dernièrement à la lutherie, autant pousser le DIY jusqu’au bout et fabriquer aussi les micros magnétiques des guitares que je fabrique (je reviendrais d’ailleurs sur le sujet plus-tard).
En revanche le sujet de cet article n’étant justement pas les micros magnétiques, voici deux liens pour celui ou celle qui veut en savoir plus:
Lien Wiki sur les micros magnétiques
Un excellent forum traitant de la fabrication amateur de ces micros
Ce qu’il faut retenir c’est qu’une seule bobine (certains micros en possèdent 2) faisant entre 7000 et 10000 tours, les enrouler à la main risque d’être long, très long!
D’où la bobineuse électrique avec compte tour intégré pour pouvoir faire des pauses bières pendant qu’on bobine et pas s’embrouiller dans le comptage (ce n’est qu’une excuse évidemment).
Hard
Aucun soin n’a été porté à la finition, et aucune pièce n’a été achetée spécialement pour ce projet. Ce ne sont que des composants que j’avais en stock ou de récup.
En réalité les seuls composants achetés précédemment sont le µC et l’écran.
Ensuite il y a quatre organes principaux: le µC, le moteur, les capteurs, la commande de vitesse, et l’écran et ses boutons.
- Le µC est un ATmeg48 @ 8MHz. Il fallait suffisamment de sorties pour l’écran, et suffisamment d’entrées pour les boutons.
- Le moteur est un bête moteur DC, certainement récupéré d’un magnétoscope… ou d’une imprimante… ou d’un autre truc qui traînait… J’étais parti au départ sur un moteur pas à pas, mais il n’était pas suffisamment rapide et nécessitait des composants en plus.
La liaison avec l’arbre se fait par courroie, comme ça quand l’arbre se bloque, la courroie patine et le courant n’augmente pas trop.
Le moteur est commandé en 12V via un MOS canal N. Sans oublier bien sûr la diode de roue libre. Le reste de l’électronique étant alimentée et régulée grâce à un 7805: classique. - Les capteurs sont des capteurs infrarouges à fourche récupérés d’une imprimante (cette fois j’en suis certain :mrgreen: ). Ils sont positionnés plus ou moins à 90°, et un demi disque passe entre eux deux, ce qui permet de détecter le sens de rotation (voir la partie soft).
- La vitesse est réglée grâce à un potard en diviseur de tension, branché sur un des ports analogiques du µC. On fait varier la tension, ça fait varier la vitesse.
J’ai gardé la possibilité de pouvoir aussi brancher une pédale (ça libère les deux mains) en rajoutant une prise jack en parallèle du potard. - L’écran est un écran 2×16 caractères, et les boutons proviennent d’une façade de lecteur laser disque, dont j’ai enlevé la plupart des composants pour ne garder que cinq boutons.
Pas de schéma. Le circuit à été fait sur une plaque de prototypage à bande. La grosse erreur à été de ne pas prendre le temps de mettre des connecteurs pour les liaisons externes à la carte (capteurs, écran, moteur…) ce qui n’a pas facilité l’intégration:
Soft
Le plus intéressant.
Le programme est très séquentiel. Les seules choses qui tournent en tâche de fond étant le PWM (mais une fois lancé, il n’y a plus trop à s’en occuper), et le comptage/décomptage qui est sur une interruption.
- La calibration permet de fixer les butées du potentiomètre. Et ça pour deux raisons:
– Lorsque on a pas utilisé le bouzin pendant un bon moment, la température, l’humidité tout ça peut faire varier la valeur du potard.
– Et peut-être que si jamais dans l’éventualité ou je rajoute une pédale, le potard sera forcément différent, et les butées à revoir.
Le logiciel demande à l’utilisateur de mettre le potard en position basse, puis ensuite en position haute. Les valeurs ADCH_min et ADCH_max sont ensuite enregistrées en EEPROM.
La valeur basse sert à ne pas démarrer le moteur alors que la vitesse n’est pas sur 0, et la position haute sert simplement à calculer la vitesse (affichée ensuite en pour-cents). - Pour indiquer la valeur cible du nombre de tours, on utilise les boutons fléchés, ensuite on valide par OK.
Les boutons sont raccordés directement sur une E/S du µC et à la masse. Les pull up des entrées étant activées par logiciel, pas besoin d’en rajouter en externe (schéma). L’entrée est au niveau 1 en permanence, et passe à 0 quand on appui sur le bouton. Logique inversée donc. - Le moteur est piloté en PWM. Le timer0 du µC est configuré en FastPWM et en faisant varier OCR0B, on fait varier le rapport cyclique. Pratique.
Lorsque le moteur se met en route (fonction Motor_on()), on vérifie que la vitesse n’est pas au minimum pour éviter de casser le fil en accélérant trop fort.
- Le potard fait directement varier OCR0B pour faire varier la vitesse:
OCR0B = ADCH;
Avec une petite sécurité quand même, si on atteint la valeur ADCH_min, on coupe le timer pour éviter d’envoyer des pics de tension sur le moteur.
En effet lorsque le potard est en butée basse, on a pas exactement 0V, donc pas exactement 0 non plus sur OCR0B (d’où la calibration). - Concernant l’affichage du nombre de tours, il y a une variable (un octet donc) pour chaque digit. En fait j’ai voulu créer une fonction polyvalente ou le nombre de digit est fixé par une constante. Ça mange un peu plus de mémoire, mais ça simplifie la gestion de l’affichage.
L’écran quand à lui est piloté en mode 4 bits. - En parlant d’affichage, les fichiers screen4b ont été modifiés. La fonction Write_nbr() reçoit un paramètre en plus: le mode.
void Write_nbr(int nbr, unsigned char add, uchar mode) { char buffer[10];if(mode == 42) Write_str(itoa(nbr, buffer, 10), add); else if(mode == '%') Write_str(strcat(itoa(nbr, buffer, 10), "% "), add); else Write_str(strcat(itoa(nbr, buffer, 10), " "), add); }
Par défaut un espace est rajouté à la fin des nombres pour que lorsqu’on passe par exemple de 100 à 99, ça efface le dernier 0 du 100, et qu’on ai pas 990.
Le mode 42 permet au contraire de ne pas mettre d’espace à la fin du nombre. Très utile justement pour l’affichage de digits qui vont uniquement de 0 à 9! :wink:
Et le mode % permet simplement d’ajouter le symbole % à la fin d’un nombre. Utilisé pour la vitesse. - Pour les capteurs, comme dit plus haut, leur positionnement à 90° et le demi disque permettent de détecter le sens de rotation car les signaux sont déphasés de 90°. Voici un petit schéma pour illustrer:
Le capteur A est sur interruption. Au front montant de A, on lit le capteur B:
– Si B = 0 -> On tourne dans un sens -> On compte.
– Si B = 1 -> On tourne dans l’autre sens -> On décompte. - Ensuite, une fois que le compteur à atteint le nombre de tours cible, le moteur s’arrête.
Sources
Les sources sont dispos ici.
Photos!
Voici quelques images. Le premier micro que j’ai fait a éclaté, car le fil était trop serré et/ou que j’ai collé les éléments à la superglue. Le prochain sera collé à l’époxy!
Cela dit il fonctionnait quand même (malgré les parasites microphoniques car je n’ai pas figé les spires dans de la cire).
Tite conclusion
En réalité, et je pense que beaucoup s’en sont rendu compte, c’est une usine à gaz pour ce que ça fait. Une bonne chignole, on compte le nombre de tour de manivelles et c’est suffisant. Mais ce projet m’a permis de m’occuper pendant deux semaines, et ça c’est important! :wink:
2 Commentaires
Auteur
Au contraire c’est très bien de me dire quand il y a des fautes! J’avais qu’à me relire après tout! ^^
Par contre j’aimerais bien ajouter un lien en bas de chaque article vers un formulaire pour les fautes. Je me suis pas encore pencher sur la question donc pour l’instant ça restera via les commentaires :wink:
Pour le démarrage uniquement à vitesse 0 y’a rien de compliqué, c’est un simple while(speed > 0). C’est pour ça que j’ai pas insisté.
Merci pour le message tout de même! :wink:
Hey
Un nouvel article, tu est moins feignant que moi xD
Oui bon ok, je fais genre je découvre alors qu’en fait tu m’as prévenu…
Par contre t’as fais une faute à un endroit “…disque, dont j’ai enlever la plupart des…” enlevé (5em point du hard)
Et dans le paragraphe des photos il manque des mots à la fin de la premières phrase (ou alors j’ai un bug mais j’ai pas l’impression)
Sinon c’est pas mal (mais je le savais déjà puisque je l’ai vue en après première)
Par contre je savais pas que ton micro avait lâché, je trouve ça étonnant.
C’est dommage que t’as pas plus approfondi le fait que le moteur démarre pas tant que le potard n’est pas à zéro, c’est à peine visible parmi le reste alors que je trouve que c’est une idée géniale.
PS: je t’autorise à censurer la partie du commentaire où je dénonce allègrement tes erreurs de typo.