Source de tension variable / Alimentation de précision

Bonjour JP, bonjour à tous.

La version Arduino Nano se doit d’être minimaliste:

  • Matriçage des 10 contacts des 3 commutateurs rotatifs.
  • Il aurait été possible d’utiliser 3 des sorties PWM de l’Arduino mais:[list][*]elles doivent être suivies des 3 filtres passe-bas et du sommateur déjà proposés et simulés, ce qui complexifie le schéma et va à l’opposé de la simplicité recherchée en augmentant le nombre de composants nécessaires,
  • l’amplitude des signaux PWM est liée à celle de l’alimentation de l’ATmega et non pas à une tension de référence fiable.
    [/:m][]Un DAC MCP4821 serait une solution nettement plus optimale:* avec 4096 échelons pour une référence interne de 2048 mV et un gain fixé à 2 pour l’amplificateur incorporé, ce DAC délivre donc en sortie 1mV par échelon,
  • suivi d’un amplificateur booster (TCA0372) dont le gain est fixé à 2,5, on obtient alors 10 mV pour 4 échelons, soit 10 volts pour 4000 de ces échelons.
    [/*:m][/list:u]
    Exemple de raccordement (arbitraire) des contacts des 3 commutateurs sur les pins de l’Arduino Nano:

Le prototype avec un Arduino nano V3, je n’avais sous la main que des commutateurs 3 circuits 4 positions ce qui limite actuellement l’expérimentation à 4 chiffres au lieu de 10 par commutateur:


Au départ je pensais pouvoir utiliser des procédures de la bibliothèque « keypad » livrée en standard avec l’IDE Arduino. Les commutateurs étant alors déclarés comme 3 claviers 1×10 partageant les mêmes horizontales au lieu d’un seul clavier matricé 3×10n, à l’instar de l’exemple « HelloKeypad3 » Cette configuration permettait de définir les contacts et les pins de l’Arduino indépendamment des commutateurs.

Je me suis vite aperçu que cette bibliothèque conçue pour des claviers dont les contacts sont fugitifs dysfonctionnait avec des contacts permanents. J’ai donc dû écrire la fonction de scrutation des contacts, elle renvoie une valeur numérique comprise entre 0 et 999, sans filtrage des rebonds (« debouncing ») puisque les contacts sont quasi permanents et prévus pour être scrutés toutes les 500 ms.

Le croquis de test avec la fonction de scrutation, les contacts de même rang doivent être câblés en // mais les pins associées ne sont pas figés, ils sont redéfinissables.

Ce qu’affiche le croquis de test, quand on agit sur les commutateurs:

Un des problèmes gênant pour la suite, c’est qu’il reste peu de pins disponibles sur l’Arduino Nano avec les contacts des commutateurs organisés en matrice 3×10. Une solution simple pour gagner 4 ports digitaux supplémentaires serait de remplacer la puce ATmega328 par sa version récence, la version PB comme l’a fait Elektor avec son Uno R4.

L’Arduino Nano n’est pas en reste, il a lui aussi un challenger avec le Piksey Nano.
Deux nouvelles broches ont été ajoutées dans le même alignement que les existantes et à l’opposé du connecteur USB. Ce qui porte leur nombre à 2×16 et permet d’accéder aux deux derniers ports digitaux offert par la puce version PB tout en restant compatible avec l’Arduino Nano de base.


En tenant compte des ces 4 ports digitaux supplémentaires, ce nouveau schéma de principe avec un Piksey Nano permettrait, en réaffectant les fils de la matrice 3×10, de dégager jusqu’à 5 pins comme sorties PWM.


Une alternative bien plus économique que le Piksey Nano est le clone Nano compatible vendu par Thinary Electronic sur AliExpress. Bien que ce ne soit pas indiqué explicitement dans l’annonce, les photos incluses montrent qu’il est bien équipé de la puce ATmega328 version PB.
Tel quel, il permet déjà de récupérer 2 ports digitaux supplémentaires (les entrées analogiques A6 et A7 qui, avec cette version PB, peuvent être aussi configurés en entrée/sortie digitale).
Les pattes 3 et 6 de la puce, qui étaient redondantes avec les pattes 5 (GND) et 4 (Vcc), sont maintenant devenues des ports digitaux. Comme elles sont reliées à rien du tout sur ce clone, autant les relier à deux nouvelles broches logées opportunément dans deux des trous (de fixation?) en bout de plaquette à l’instar des deux extra-pins du Piksey Nano.
Voici donc mon ersatz de Piksey Nano réalisé à partir du clone nano compatible acquis chez Thinary Electronic:


Bon maintenant, on ne peut pas exploiter ces nouvelles ressources aussi facilement, l’IDE Arduino standard ne connaît pas cette évolution de l’ATmega, il faut donc lui adjoindre un package spécifique.
J’ai donc préféré charger celui prévu pour l’Uno R4 d’Elektor’ qui me paraissait plus abouti. En fin de compte j’ai été aussi obligé de charger celui conçu pour le Piksey car la programmation du bootloader dysfonctionnait avec ce premier package.

Le support sur la maquette de test n’a pas été épargné non plus par cette évolution, les bornes en vis à vis du reset ont dû être délaissées afin de pouvoir décaler deux blocs à vis d’un cran et ainsi accéder aux deux nouvelles pins du clone Nano compatible.
Les 13 fils de la matrice des contacts ont été câblés à l’instar du nouveau schéma de principe, ce qui a permis de constater immédiatement que les 4 nouvelles pins étaient bien fonctionnelles.


Coté croquis, pour l’instant pas d’évolutions transcendantes, juste la modification de la déclaration des pins consécutive au nouveau matriçage des contacts:

Ainsi que l’ajout d’une présomption dans la détection de changement de position des commutateurs :

Bonjour à tous, bonjour Gérard,
Très intéressant ce clone de Piksey sur Ali :wink:
Le seul hic! avec ce clone c’est les 2 soudures à réaliser sur la puce Atmega qui ne sont pas à la portée de tout le monde.
Pour y palier, on pourra aussi utiliser le véritable Piksey (pour les maladroits) moyennant 10€ de plus
Et en regroupant le tout sur un PCB, y compris les 3 commutateurs rotatifs, le module DAC et les alimentations 5V et +/- 15V on arriverait à un ensemble compact facile à câbler et pas trop onéreux.
Je vais commander le matériel nécessaire pour câbler un PCB proto de mon côté.

Je ne sais pas où en est l’ami sylvain avec sa solution basée sur un CPLD.

A suivre donc…

Edité : je n’ai pas trouvé de module câblé avec un MCP4821, il faudra probablement s’orienter vers un module MCP4725 alimenté par une référence de tension 5V « boostée » telle que LT1236-5 par exemple.

@Gérard :
Il me faudrait les dimensions du module du clone Piksey pour réaliser l’empreinte PCB ( je suppose que le pitch des pins est de 2.54 mm) mais je n’ai pas l’écartement en largeur… :mrgreen:

Bonjour à tous, bonjour JP.

Le compatible Nano vendu par Thinary Electronic est plutôt un clone d’Arduino Nano puisqu’il n’a que 2×15 pins. D’après ce que j’ai pu lire sur le net, ce n’est pas le seul. Certains vendeurs chinois livrent aussi des clones de Nano équipés d’ATmega328-PB mais c’est une loterie car rien n’est indiqué dans leurs annonces.

Le soudage des deux fils sur la puce n’est pas évident mais avec une loupe d’atelier et une panne de fer très fine, on y arrive assez facilement, témoin cette photo des miennes:

GrosPlanSoudures.JPG
Avec le grossissement on s’aperçoit que les fils ne sont pas bien centrés sur les pattes de la puce. J’ai utilisé du fil pour mini-wrapping que je tenais d’une main pendant que je soudais de l’autre. Peut-être aurais-je dû les immobiliser avec un point de colle, puis les rectifier/centrer avant de les souder. La prochaine fois je tenterai de souder du fil émaillé si j’arrive à obtenir un décapage bien franc de l’émail.

Mon plus gros souci a été la programmation du bootloader sur le clone Nano Compatible. J’ai d’abord tenté de le faire avec mon programmeur TL866 II plus et son logiciel dernière version (8.51). L’ATmega328 version PB y est bien répertorié mais ça ne fonctionne pas en ICSP, faut probablement utiliser le support Textool comme ici: tosiek.pl/arduino-nano-with-atm … e-support/

J’ai ensuite tenté de le faire avec l’IDE Arduino dernière version et un programmeur USBasp V2.0.

usbasp.jpg
L’USBasp n’était pas reconnu avec Windows10, c’était un problème de signature du driver USB et j’ai du remplacer l’existant (quadmeup.com/working-solution-f … -10-64bit/).

Après avoir enfin installé le bon driver, la programmation du boot-loader s’effectuait bien à partir de l’IDE Arduino sur un clone Nano standard (ATmega328 non suffixé) mais pas sur le clone compatible de Thinary pour un problème de création de fichier avrdude.log. A un moment donné j’ai eu l’intuition de changer de package car l’article d’Elektor plutôt loquace sur le contenu et l’installation de celui-ci, était muet sur sur cette opération et n’évoquait qu’évasivement la présence du fichier nécessaire à l’intérieur.
Et là, bingo, j’ai pu programmer le bootloader inclu dans le package du Piksey (un optiboot) dans le clone compatible Thinary et par la suite y téléverser un croquis en sélectionnant à nouveau le package Elektor.

Il existe une plaquette toute prête à base de MCP4921 chez Microe. Sinon il existe un challenger au MCP4821, c’est le MCP4721 quasi identique sauf qu’il nécessite une référence externe.
Pourquoi un module tout câblé? Alors que MCP4821 et 4721 existent en boitier DIP8 (chez RS particuliers)?

C’est standard au pas de 2,54 entre pins y compris les 2 extra-pins, l’écartement entre rangées est aussi au standard Arduino Micro, il est de 6 pas soit 15,24 mm.

J’ai mis le schéma au propre, (effectivement, le MCP4921 existe en boitier conventionnel dont je me suis servi sur le schéma)
J’ai ajouté une référence 5V externe LT1236-5 elle aussi en boitier DIP8
Voilà ce que ça donne pour le moment en espérant ne pas avoir fait d’erreur…

Quand ce sera bon et vérifié, je tracerai le PCB et j’en ferai graver quelques uns à distribuer.
piksey nano.jpg

Schéma avec une meilleure définition…

piksey nano.jpg

Je n’ai pas implanté l’alimentation 5V du Piksey mais si il ne consomme pas trop peut-être pourra-t-il être alimenté par la référence 5V « boostée ».

A voir…

Bonjour a tous

il y a pas mal d’évolution depuis le début , les vacances vous ont réussi :laughing:
je vient de recevoir une partie du matériel pour la réalisation première avec les résistances 0.1%
dans un premier temps ce sera sur une plaque d’essais
cette version me convient bien pas trop compliqué :bulb:

cdlt
laurent

Bonjour Laurent,
Ne t’inquiètes pas, je ferai graver les PCB de la 1ère version comme je l’avais dit.
Celle-ci c’est pour le fun et pour faire fumer les neurones, il en faut pour tous les goûts. :laughing:

Une simulation d’une version 5V « boostée » par un darlington PNP TIP127 avec une charge de 1.5 A.
Le courant débité par la référence de tension est inférieur à 1 mA (courbe rouge)

référence boostée.jpg

Jean Paul
oui il en faut pour tous les goûts heureusement
mais c’est pas mal la version avec les machins Arduino
cela doit améliorer la précision et le câblage
en plus modifiable a volonté :bulb:

cdlt
laurent

Voilà en gros ce que pourrait donner le PCB

piksey board.jpg

Bonsoir à tous, bonsoir JP.

Est-ce possible de modifier l’implantation et prévoir des cavaliers de configuration pour avoir le choix entre un MCP4921 et un 4821 voir même un 4822 (2×DAC’s)?
Il n’y a que l’utilisation de la broche 6 qui diffère!

Bonsoir,
Jean Paul a raison aucune solution n’est ni meilleure ni moins bonne seuls dependent les criteres de choix.
De mon cote j’avais proposé 2 autres possibilités:
-une methode statistique FPGA et filtre mais pas de résistances
-l’autre le 11 Aout avec ARduino et un DAC
Aujourd’hui ce ne sera pas ARDUINO mais simplement un ATmega 328,boitier DIP, avec l’horloge interne pas besoin de quartz , programmé en C ou C++
Dans ce cas il y aura assez de broches pour les commutateurs 10 positions. il existe d’ailleurs des commutateurs qui codent directement en BCD et meme si l’on veut garder les anciens pourquoi ne pas utiliser un petit circuit: encodeur de priorite (contraire de decodeur) style 74HC147 vous allez gagner 6 fils sur 10.
Egalement pourquoi ne pas utiliser des roues incrementales et un afficheur LCD tout cela rentre dans un mini
Vous voyez on ne s’arrete pas
Pour ma part j’ecrit en C et j’utilise CVAVR comme IDE c’est tres efficace d’autres compilateurs existent, gratuits.
J’essaierai de faire un prototype d’ci 15 jours
Bonne soirée
Sylvain
PS Arduino peut se programmer en C.

Bonsoir Sylvain,
Je ne pense pas qu’un afficheur soit nécessaire, les index 0 à 9 des 3 commutateurs donnant directement la valeur de la tension de sortie.
Ce serait compliquer inutilement le schéma.
Quand à utiliser des commutateurs rotatifs BCD, le prix pique un peu les yeux… (13€54/pièce chez RS) :mrgreen:
https://fr.rs-online.com/web/p/commutateurs-rotatifs/0256250/

Par contre, on attend ta solution avec intérêt.

Bonsoir à tous, bonsoir Sylvain.

Je suis en train de regarder s’il est possible de réécrire mon bout de programme en mBloc, (Scratch pour Arduino).
Toutes ces étiquettes colorées imbriquées les une dans les autres, c’est quand même du plus bel effet et bien plus agréable à regarder qu’un texte de mots abscons en noir sur papier blanc.

Scratch_button_en[2].png

Bonjour à tous, bonjour Gérard,
La nuit ne m’a pas porté conseil, aussi j’ai plusieurs interrogations en suspend:
Avec une référence 5 V « boostée » servant aussi à alimenter le Piksey le LSB sera de 1.220703125 mV (5000 mV / 4096)
Comment atteindre le pas minimum de 10 mV? (facteur de multiplication de 8.192)
Si on utilise une référence 4.096V, le problème sera plus simple à résoudre sauf qu’il faudra du 5V pour le Piksey, à moins qu’il fonctionne avec 4.096 V.
Quelque chose m’échappe…
J’ai bien trouvé cette page issue de la datasheet mais je m’y perds un peu…

MCP4921.jpg

Bonjour à tous, bonjour JP.

Extraits du datasheet de l’ATmega328-PB:
• Operating Voltage:
– 1.8 - 5.5V
• Speed Grade:
– 0 - 4 MHz @ 1.8 - 5.5V
– 0 - 10 MHz @ 2.7 - 5.5V
– 0 - 20 MHz @ 4.5 - 5.5V

29.3 Speed Grades.PNG.jpg
Donc le pseudo Picsey devrait fonctionner à 4,096 volts, cadencé à 16 MHz, il devrait encore être dans la zone grise de sécurité. Par contre il faudra choisir un seuil de brown-out adéquat s’il doit rester validé.

Mais la solution la plus sure serait de ne pas mélanger les torchons et les serviettes : une alimentation en 5 volts d’un coté et une référence fiable (2,048 ou 4,096 volts) de l’autre, pour éviter la contamination de la seconde par la première. Dans ce cas, nul besoin d’un transistor pour renforcer la référence!

La précision de la référence intégrée au MCP4821 est de ± 2% (40 mV/2048 mV) et sa dérive de 50 ppm/°C, Celle du MCP1541 du schéma DAC click Microe avec MCP4921 n’est que du double (± 1%).

1322663145_dac_sche[1].jpg
Déjà une référence extérieure adaptée à la résolution du DAC (2048 ou 4096 mV) serait impérative pour obtenir au final 10 mV pile poil tous les 4 échelons. Une meilleure précision avec une dérive moindre en température serait aussi nécessaire. Par exemple chez RS, j’ai trouvé la REF191 (2,048V) et la REF198 (4,096V) avec une précision de 0,05% et une dérive inférieure 5 ppm mais ce ne sont pas les seules. Le hic, c’est qu’aucune n’est en boitier DIP8, au mieux en CMS au pas de 1,27.

C’est bien ce que je pense aussi, il faut utiliser une référence avec une tension de sortie compatible puissance².
Le circuit MAX6241ACPA+ pourrait convenir, bien qu’un peu cher il est en boitier DIP8 avec une tolérance de +/-0.02%.
Après évidemment les REF198 ou REF191 sont bien moins chers mais difficilement soudables pour certains d’entre-nous.

Là ou ça coince un peu, c’est les 3 alimentations nécessaires au projet en ajoutant un 5V spécifique pour l’ATmega.
Je réfléchis à comment s’en affranchir simplement…

Bonjour tous
La sieste porte conseil
Les commutateurs BCD valent 5 euros les 10 à HK, on gagne 6 entrées
Personne n’a relevé l’encodeur 74147 , assez meconnu, on gagne 6 entrées et on conserve vos commutateurs 10 positions
Si l’on utilise un codage incremental il faut un afficheur, nous sommes en relatif par rapport à un commutateur qui est absolu
Pourquoi ne pas utiliser un ATmega 328 en boitier DIP avec son Bootstrap Arduino ?
A bientôt pour de prochaines aventures
Sylvain
PS en relisant mes mails j’ai trouvé quelques fautes d’orthographe que bien sur vous corrigerez et pardonnerez