Source de tension variable / Alimentation de précision

Bonsoir,
compteurs + compateurs sont pour éliminer des resistances de precision.
Avec un FPGA en 1 circuit c’est réglé
Mais pour continuer pourquoi pas avec microprocesseur programmé par arduino qui commande un DAC de 16bits
Tu vois Jean Paul tu attise en nous notre esprit orthogonal
Bonne soiree et tiens bon dans ta solution qui est bonne
Sylvain

Bonsoir.

Puisqu’il est question d’Arduino et de DAC…

Un Arduino nano c’est 22 « digital I/O pins ».

  • Les 3 commutateurs 1 circuit 10/11 positions peuvent s’organiser en matrice de contacts distribués entre 10/11 horizontales et 3 verticales.
    Cela monopoliserait 13/14 pins de l’Arduino:[list][*]10/11 pins déclarés en entrée avec résistances de pull-up (les horizontales),
  • 3 autres déclarés aussi en entrée (les verticales) mais forcés fugitivement à tour de rôle en sortie et à zéro pour scruter cycliquement les contacts (les pins déclarés en sortie n’étant pas configurables en drain ouvert).
    [/:m][]Un DAC 12 bits (c’est plus que confortable pour 1000 ou 1331 échelons de tension) pour remplacer les résistances de précision du pont diviseur et du sommateur. De préférence un AD7845 car les données d’entrée sont latchées et de plus il dispose en interne d’un amplificateur de sortie à gain pré-programmable.
    Cela ne monopoliserait qu’un à deux pins supplémentaires à condition de :* Multiplexer les entrées du DAC avec les horizontales du matriçage des commutateurs. La scrutation de ceux-ci serait arrêtée pour que les pins impactés puissent être déclarés temporairement en sortie afin de pouvoir transférer les données dans le latch du DAC.
  • Un pin supplémentaire serait indispensable pour activer la mémorisation dans le latch, un autre facultatif pour le 12ème bit des données (dans le cas où ce LSB ne serait pas utilisé et forcé à zéro) et circonstanciellement un dernier pour éviter de valider le DAC en permanence.
    La référence de tension nécessaire au DAC pouvant être une de celles déjà pressenties.[/*:m][/list:u]Ainsi, on utiliserait que de 14 à 17 pins parmi les 22 disponibles sur l’Arduino nano, le reliquat restant disponible pour ajouter des fioritures.

Bilan :
? 1 référence de tension (AD587),
? 3 commutateurs 1 circuit 12 positions,
? 1 Arduino nano,
? 1 DAC AD7845,
? 1 buffer de sortie (TCA0372).
Étonnant, non ?

Bonjour à tous,
J’ai trouvé un peu de temps pour simuler la proposition de Raffou basée sur des comparateurs 4 bits.
Je n’ai simulé que les Volts ainsi que les 1/10 ème de Volt.
Les résultats de la simulation ci-dessous

reference tension.jpg

Le calcul du filtre :

filtre.jpg

Bonjour à tous,

Simulation de ce matin :
J’ai ajouté les 1/100 de Volt et utilisé une référence de tension « boostée » en courant avec un transistor.
J’ai aussi ajouté un AOP en inverseur afin de retrouver une tension positive en sortie.
Petite remarque au sujet de cette idée de schéma proposé par Raffou : l’excursion de tension va de 0 V à 9.99 V (en utilisant 3 roues codeuses 0-9).
Pour rappel, mon schéma initial permet une excursion de tension de 0 V à 1.110 V avec 3 commutateurs rotatifs 1 circuit / 11 positions.
reference tension.jpg

Bonjour JP, bonjour à tous.

Le problème avec cette configuration, qu’elle soit à 2 ou à 3 comparateurs logiques, c’est qu’elle produit en sortie une tension négative pour des signaux PWM essentiellement positifs. Et malencontreusement, c’est la tension d’alimentation des CMOS qui sert de référence.

Une solution simple serait d’insérer un amplificateur inverseur comme c’était le cas dans les deux premiers schémas publiés dans le premier message de cette discussion. Ce qui ne couterait rien de plus en composant si un quadruple ampli op était utilisé pour réaliser les filtres de Sallen-Key, mais le problème d’une tension de référence propre et stable subsisterait.

Une autre solution plus élaborée serait de reprendre la référence négative du 3ème ou 4ème schéma et de la découper en 3 signaux PWM grâce aux switches d’un 4053:
? Chaque switch serait commandé par la sortie du comparateur associé,
? Avec le 0 volt et le -Vref appliqués sur les entrées de ces switches, on obtiendrait en sortie (donc sur l’entrée des filtres passe-bas) un signal PWM de polarité négative et d’amplitude calibrée (ne dépendant plus d’une tension d’alimentation).
Plus besoin alors d’insérer un amplificateur inverseur intermédiaire (à moins d’employer une référence de tension positive), avec une vraie référence de tension stable pour le coût d’un boitier CMOS 4053 en plus!

Bon au final, ça fait beaucoup de composants pour remplacer un pont de 10 résistances de précision et 3 commutateurs…

Bonjour Gérard,

Sur ma dernière simulation publiée, il y a cet ampli inverseur (simulation à 9.99V)

Tout à fait d’accord avec toi, mais l’exercice intellectuel en valait la peine.

Désolé, cette simulation a été publiée pendant que je rédigeais mon dernier message sinon je l’aurais vue.

Reste la solution avec Arduino nano et ADC pour minorer le nombre de composants et se passer des résistances de précision, est-ce une option pertinente?

Le problème avec le AD7845 proposé plus haut, c’est qu’il coûte cher… (environ 15€) :mrgreen:
Et il y a la programmation en C++ du nano à faire.
Je n’ai pas connaissance d’un simulateur permettant cette option (à part peut-être les dernières versions d’Isis qui sont hors de portée de ma pension de retraite :laughing: )
Attendons Mister Sylvain et sa solution basée sur un FPGA.
Aucune solution n’est à mon avis ni meilleure ni moins chère que celle que j’ai proposée initialement.

Si le schéma initial en intéresse certains, je veux bien faire le dessin du PCB et m’occuper d’en faire graver une certaine quantité (10 minimum).
Dites moi si vous êtes intéressés par MP.

En recherchant un DAC 12 bits économique, j’ai trouvé le MCP4821-E/P à moins de 2€60 TTC la pièce (par paquet de 2) chez RS particuliers: boitier DIP8, référence de tension interne, bus SPI donc ne monopolise que 2 pins de l’Arduino nano
? forum.arduino.cc/index.php?topic=571712.0
? arduinoos.com/2017/10/direct … ds-part-7/

plaindds_mcp4921_a[1].jpg
Sur ce schéma il s’agit d’un MCP4921, c’est quasi le même avec un MCP4821 hormis le fait que la référence est interne.
Sinon il existe des « breakout boards » à base de MCP4725, pour 1€ Fdp inclus, dont le bus I2C ne monopolise que 2 ou 3 pins de l’Arduino. Le hic, c’est que c’est la tension d’alimentation qui sert de référence!
Alimenté par la référence de tension « boostée » du dernier schéma publié, ce dernier écueil devrait pouvoir être éliminé!

Screen_Shot_2014-09-10_at_12.21.12_PM[1].jpg

Adafruit et Sparkfun commercialisant aussi cette plaquette, on devrait pouvoir trouver des exemples de programme tout fait sur le net:
? learn.adafruit.com/mcp4725-12-b … th-arduino
? learn.sparkfun.com/tutorials/mc … -guide/all

MCP4725-Arduino-Module-Tutorial-Hook-Up[1].png

Ces nouveaux arguments devraient permettre de réduire certaines réticences!

En attendant les évolutions d’autres solutions, je bosse sur le futur PCB issu des premiers schémas avec le pont diviseur.
Voilà une ébauche de celui-ci en vue 3D (dimensions 100 x 70)

Référence 3D.jpg

Et le schéma sous un format plus conventionnel que celui de la simulation
référence schéma.jpg

Dimensions du PCB et implantation des composants :

reference board.jpg

Bonjour à tous,
J’ai fait un tableau pour avoir une idée du prix de revient de ce montage

J’ai regardé les prix chez RS Composants et chez TME.
Pour rappel, les frais de port sont offerts le WE chez RS alors qu’il faut ajouter environ 7€ chez TME.
Il y a aussi tout intérêt à commander les 3 commutateurs rotatifs sur Ebay, Aliexpress ou Amazon.
Un exemple de prix sur Ebay.fr (avec le bouton…) : https://www.ebay.fr/itm/RS26-selecteur-de-canal-rotatif-1-pole-position-12-selectionnable-avec-bouton-H-/273617612719
Mais en cherchant bien, on peut trouver encore moins cher.
Les LM324 (ou TL074 ou TL084) sont aussi moins chers chez les chinois.
Je n’ai pas affiné les recherches outre mesure, chacun étant intéressé pourra faire ses propres recherches (et pourquoi pas, en faire profiter la communauté)
Pour les références de tension, il y a le choix entre les références suivantes compatibles broche à broche:
LT1236
REF102
AD587
Et peut être d’autres aussi.
Pour le PCB, je me chargerai de le fournir (port compris) pour 3€
Quoi qu’il en soit, l’ensemble des composants y compris le PCB reviendrait entre 25 et 30€.

Composants référence tension.jpg

Bonjour Jean Paul
Ton projet avance bien et sur je serai en retard avec mes 2 vues de ce probleme tres interessant au demeurant.
Néanmoins , bien entendu, sans vouloir te donner des conseils pense au découplage et aux compensations en température.
Je ne les ai pas quantifiees mais notre Raffou saura le faire bien mieux que moi.
Je m’y remets , le CPLD est fait, juste un petit prototype
Bonne journee a tous et si, d’autres ont des idees ou remarques elles sont les bienvenues
Sylvain

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…