Ce projet a commencé par un petit dessin ou j'ai imaginé pouvoir rassembler tous les besoins énoncés ci-dessus.
L'inventaire de mes tiroirs : Un Esp-32 MiniKit de chez Wemos flambant neuf, un TM1638 oublié dans un coin, un écran LCD ILI 9341 qui a ma grande déception
ne comporte pas l'option de saisie tactile, un encodeur rotatif que je trouve bien pratique pour choisir dans un menu ou
saisir du texte sans s'imposer un clavier et puis différents petits accessoires que nous découvrirons plus loin...
Freecad est bien pratique pour donner forme à ses idées.
Difficile de penser à tous, il manquera forcément des choses... Il faudra prévoir un petit cache pour l'écran et un tiroir pour les fils de câblage.
Cura annonce une impression de 1 journée 5 heures et 30 minutes
C'est très long, mais il est indispensable de prévoir des zones de soutien pour éviter que l'impression ne s'écroule
Le résultat me plait bien ! Mais je sais que je ne verrais les erreurs que plus tard...
Si cette impression répond aux besoins, je métrais à disposition sur le site le fichier stl si quelqu'un veut se construire un circuit équivalent.
Les trous hexagonaux sont prévus pour les plaquettes d'essai.
Le petit compartiment dessous va servir au rangement des fils de câblage.
Il faut découper une belle planche de connexion.
D’abord en deux. Ça fait un peu mal au cœur, mais l'idée c'est de pouvoir
enficher un esp et avoir des connexions de libre sur les côtés.
Puis en trois. En réalité j'ai fait ces découpages avant la création sous Freecad pour avoir une
idée très précise des dimensions des trous à réaliser pour encastrer les planches à trous.
La scie et la Dremel ne sont pas de trop ! Il est toujours possible d'ajuster de quelques mm
la planche pour qu'elle rentre sans contrainte, sur la mienne il y avait dessous de l'autocollant bien pratique.
Premiers test du TM1638. Les afficheurs permettront de visualiser la tension (2 chiffres et 2 décimales)
et l'intensité (1 chiffre et 3 décimales). Les boutons permettront de choisir la fonction utilisée et les leds afficheront
la fonction en cours.
Premier aperçu de la platine. L'écran, les afficheurs et les planches à connexion rentrent dans les trous prévus, c'est un début...
Premier test, un petit montage sert de serveur TCP-IP (Ici un petit émetteur de trame NMEA).
L'esp 32 de la plateforme de développement est donc programmé pour se connecter sur ce serveur et réceptionner
les trames Wifi.
Connexion de l'Esp-32 sur le serveur créé par le montage en test, pratique de voir si tout fonctionne bien pendant cette phase
de test !
Test de la liaison série, les menus permettent de choisir la vitesse de transfert. La liaison est établie avec les petits
connecteurs en haut de la platine Rx et Tx.
Test de mesure de la tension avec une entrée ADC de l'esp et un pont diviseur, on voit que la tension est juste lorsque l'on est dans
la plage de calcul des résistances du pont diviseur mais que sur le reste de la plage les mesures ne sont vraiment plus fiable, il faut une autre solution...
Mise au point des mesures de tension et d'intensité avec un circuit INA219 en I2C. Les premiers tests
réalisés avec une entrée analogique de l'esp et d'un pont diviseur n'étant pas probant, j'ai pris l'option de ce circuit.
L'INA219 permet de mesurer des tensions jusqu'à 26 volts et une intensité jusqu'à 3.2 Ampères ce qui est
largement suffisant pour cette application. La stabilité de la mesure m'a impressionné pourtant l'ADC n'est que de 12 bits
comme celui de l'ESP mais la précision reste la même sur toute la plage de mesure.
Ici l'intensité sur le moteur est supérieur à 2A, cet exemple me montre que la plateforme sera sufisament
équipée pour faire face à mes petits développements.
L'application doit pouvoir afficher la tension et l'intensité tout en réceptionnant une liaison wifi ou série.
Ici un circuit de test emet des trames série à 9600 bauds que l'Esp-32 affiche pendant que le circuit sur I2C mesure la tension
et l'intensité.
Ici la liaison série est activée et je test l'alimentation d'un moteur sur une autre source afin de lancer la lecture en simultané par l'Esp-32
de la tension et de l'intensité qui parcourt le moteur.
Test d'un montage, suivi des messages de debug sur le com série et de la tension et de l'intensité consommée par le montage.
Rapidement le besoin de pouvoir sauvegarder un certain nombre de paramètre s'est fait sentir.
En cas de test d'un montage qui utilise une connexion TCPIP il faut pouvoir conserver le ssid, le passe, l'IP...
Il est vite désagréable de rentrer ces paramètres à chaque démarrage, c'est pourquoi l'eeprom de l'esp32 est utilisée.
L'écran de démarrage affiche un rappel de chaque fonction associée aux boutons de commande du TM1638.
Une fois la fonction sélectionnée la led correspondante s'allume et un menu contextuel est affiché sur l'écran.
Ici la led "W" est allumée, cela signifie que je suis dans le menu Wifi. L'esp va pouvoir être positionné en mode
serveur (il va ouvrir un ssid de test pour le montage en cours de test) ou en réception TcpIP pour tester par exemple un échange mqtt.
Les paramètres utiles sont classiques, il est par exemple possible de lister tous les ssid à proximité, d'en choisir un et de saisir
le mot de passe correspondant.
Pour pouvoir saisir du texte et se déplacer dans des menus sur l'écran LCD ILI 9341, j'ai été obligé
d'adapter les class C++ que j'avais développées pour les écrans OLED SD1306 à ce nouveau type d'écran que je n'avais pas encore utilisé.
Il est donc possible de saisir des majuscules, des minuscules, des numériques et des caractères spéciaux.
Les fonctions de correction, d'effacement, d'annulation ou de validation sont bien sur présentes. Je métrais ces class à dispo
si quelqu'un est intéressé sur le site quand j'aurais finalisé ce projet.
Les montages utilisent très souvent une fonction de débogage qui renvoie sur l'interface série des messages
indiquant l'état de certaines variables ou simplement le cheminement du programme. Il sera ici possible de connecter
directement les fils TXD et RXD du montage en test sur le connecteur en haut de la plateforme de dev et l'Esp-32 affichera les messages.
Il est possible de choisir la vitesse de cette interface série. Les vitesses les plus élevées 921600 ne
fonctionnent actuellement pas correctement ! Malgré l'utilisation d'un buffer certains caractères se perdent au moment
de la mise à jour de la tension et de l'intensité sur les afficheurs... J'espère pouvoir régler ce problème... En principe c'est
maintenant ok (Utilisation du mode multitache de l'Esp-32 pour mesurer la tension et l'intensité).
Test de la PWM : Choix de la fréquence et choix du pourcentage de PWM, visualisation sur oscilloscope du résultat. J'ai finalement ajouté dans le menu la possibilité de sélectionner
des valeurs de fréquence courante ce qui fait gagner du temps de saisie !
Ici un test de la PWM est réalisé avec un servomoteur, les fréquences les plus courantes sont directement disponibles dans un menu.
Pour des fréquences particulières il est possible d'entrer directement la fréquence en Hertz. Pour un servomoteur on voit que la pwm
est active que sur une petite partie haute du signal.
Fonction Oscilloscope: Bon il est nécessaire de préciser que cet outil n'a rien à voir avec les performances d'un véritable oscillo (celui-ci est plutôt destiné à des amateurs fauchés !).
Les signaux qu'il sera possible de visualiser en temps réel ne dépasseront pas 1Khz (à suivre il sera peut-être possible d'aller plus loin en diminuant le nombre d'échantillon par mesure
(actuellement il est de 12bit/point ce qui donne des valeurs entre 0 et 4095 points sachant que sur l'écran je n'ai qu'une amplitude de 200 points il y a matiere à revoir ce point !)...).
Afin d'augmenter la fréquence admissible je pense également ajouter une fonction mémoire, dans ce cas la phase de mémorisation ne comporte plus que des lectures / enregistrement plus aucune
contrainte d'affichage à gérer il est donc possible de mémoriser beaucoup plus de point dans la même milliseconde...
L'esp 32 dispose de deux ADC (8 canaux pour l'ADC1 et 10 pour l'ADC2) le gpio39 est dispo sur ma platine il correspond à l'ADC1 canal 3. Il faut donc mesurer la valeur d'entrée, la convertir
dans une valeur cohérente avec l'écran, l'afficher et ainsi de suite en décalant progressivement les points vers la droite. Il faut également gérer l'effacement des anciens points.
Ensuite, il est nécessaire de pouvoir synchroniser le signal afin qu'il ne défile pas sur l'écran.
Pour aller plus loin j'ai été obligé d'ajouter un petit menu qui permet de régler en plus de la synchronisation du signal, l'offset (déplacement vertical du signal sur l'écran afin de pouvoir recentrer
la visualisation, l'échelle de tension sera alors dévalidée). Choix de l'amplitude (verticale) et de la base temps (Horizontale) L'échelle temps est automatiquement mise à jour en fonction des mesures.
L'échelle de tension (verticale) n'est pas encore traitée ici !
Ici la platine et l'oscilloscope sont connectés sur la sortie d'un générateur de signaux qui permet de régler la fréquence et la forme du signal. Comme on peut le voir à basse fréquence, l'apparence du signal
est bonne ce qui était mon but initial. PS: j'ai utilisé un petit cordon blindé comme sonde afin d'éviter au maximum les parasites (bien que les fréquences restent basses).
Début du dev de la partie oscillo mémoire : Depuis le menu on peut donc faire défiler la fenêtre de visualisation du buffer de sauvegarde, cela est visible sur la barre en haut du graphique.
L'échelle de temps est différente de celle du temps réel, ici on choisit un rapport de temps de la mémorisation, l'unité est ici la microseconde. On a également la possibilité de jouer sur l'offset du signal.
A suivre...
Carte SD : Il y a quelques fonctions de base pour gérer la carte (ouverture, fermeture, liste dir...)
Mais l'idée c'est d'utiliser ce média pour mémoriser un maximum de documentation, dans un premier temps deux types d'infos :
Documentation des composants présents sur les petites plaquettes qui viennent se greffer sur la plateforme.
Documentation générale constituée de "mémo" sur des composants ou des utilitaires de programmation.
Un apperçu de la gestion de la carte SD, ici affichage des répertoires.
Sur la carte SD il est possible de mémoriser de nombreuses informations sous la forme de fichier jpg. Il me reste à trouver
une solution pour donner un accès facile au stock de donnée ? Recherche par mot clés (nom du fichier) ? Hiérarchie de menus
par catégorie de composant ? A suivre...
La plateforme est prévue pour accueillir plusieurs cartes complémentaires avec des composants propres à l'utilisation de l'utilisateur.
La carte SD permet de documenter les fonctions et les composants de ces cartes.
La carte SD va permettre de personnaliser la plateforme de développement, il sera possible de mémoriser des informations bien spécifiques à une activité.
Le générateur de fréquence : Après quelques essais en tentant de générer les signaux :
- Avec le processeur : La gamme de fréquence est limitée et pendant que le processeur fait ça
il ne fait pas autres chose ! Donc difficile par exemple d'utiliser la fonction oscillo en même temps !
- Génération avec le circuit horloge DS3231. La aussi, la gamme de fréquence est très limitée.
Je me suis donc dirigé vers un module spécialisé l'AD9850 qui permet de générer des signaux sinusoïdales
entre 1 Hz et 40 Mhz et des signaux carrés jusqu'à 10 Mhz avec possibilité de jouer sur les créneaux (PWM).
Ce circuit comble largement les besoins pour ma petite platine de développement ! Il existe un AD9851 (voir même un9852)
qui a une gamme de fréquence encore plus grande mais qui est un peu plus chère et qui ne se justifie pas ici même
si je crois que le câblage et le code sont les mêmes.
Premiers tests de l'AD9850, le problème c'est que je n'ai plus suffisamment de gpio sur l'Esp-32 de la platine,
j'ai donc fait des tests avec un autre Esp-8266 de faire fonctionner l'AD derrière des gpio d'un PCF8574 raccordé en I2C.
Il n'y a pas de vitesse minimum pour programmer les registres de l'AD par contre il faut rythmer l'émission entre les différents signaux.
Aprés quelques tests le fonctionnement c'est révélé viable. Donc grosse économie de gpio de l'Esp-32 en prévision.
Comme je voulais pouvoir modifier la largeur d'impulsion (PWM) du signal carré et que le potentiomètre
qui permet de réaliser cela sur le module AD9850. Je me suis décidé à couper le petit potar du PCB avec une pince pour éviter
de détruire les pistes en les surchauffant. J'ai ensuite installé un potentiomètre extérieur au module que je pourrais rendre
accessible depuis la face avant de la platine de développement.
Petit frisson au moment de refermer la pince !
Souvent pour préserver les pistes d'un circuit imprimé par exemple dans le cadre d'un dépannage, il est préférable de casser
le composant plutôt que de surchauffer les pattes du circuit. Il est ensuite très facile de dessouder les pattes du composant
et de vider les trous pour installer un nouveau composant.
Il est important de protéger les broches des composants avec de la gaine thermo rétractable comme sur les pattes du potentiomètre, cela peut éviter
un court-circuit comme cela m'est déjà arrivé à maintes reprises. Finalement dans une prochaine version je remplacerais ce gros potentiomètre par un modèle
beaucoup plus petit !
Ici l'AD9850 génère une fréquence carré de 20 MHz (signal de 50 microsecondes), c'est vraiment
son grand max en signal carré. je pense que 10 Mhz, c'est le max pour avoir un signal propre !
En signal sinusoïdale, il est possible d'espérer un signal de 40 Mhz mais son amplitude ne dépasse à peine le volt.
Ici on voit ma nouvelle platine avec un écran temporaire oled 1303 en I2C pour les premiers tests avec l'Esp-32 Wemos.
Donc comme on peut le voir l'AD9850 fonctionne bien avec l'Esp-32, il est en réalité câblé derrière un PCF85741 en I2C. Le signal de sortie
visible sur l'oscilloscope est un exemple de PWM (Modulation d'impulsion du signal carré).
Ici on génère un signal sinusoïdale de 40 MHz comme on peut le voir l'amplitude est descendue à 1 volt.
J'ai utilisé des petits câbles blindé et des prises BNC pour essayer de ne pas trop perturber les signaux lorsque l'on monte un peu dans les fréquences.
L'avantage d'avoir utilisé un module spécialisé indépendant de l'Esp-32 c'est qu'une fois la fréquence programmée le l'esp ne s'occupe plus de rien, les deux
signaux sinus et carré sont généré, jusqu'a une nouvelle demande de fréquence différente. L'intérêt est de pouvoir injecter un signal dans un circuit et de
pouvoir visualiser l'impact du composant avec l'oscillo de la platine de developpement (si on reste dans des fréquence que le petit oscillo capte !).
Nouvel écran ili9341, nouveau câblage : J'ai reçu un nouvel écran et ce coup-ci, j'ai vérifier lors de la commande si la
fonction tactile était bien présente !
Le défi était donc de racorder tous les fils de l'écran sur un connecteur que j'avais en stock de 10 pins. Donc SPI TFT + SPI Tactile + SPI carte SD le tout sur 10 fils.
Opération réussie ! Ouf !
Nouvel écran avec nouvelle fonctions donc nouvelles fonctions à développer dans ma librairie de gestion des saisies et des menus.
Le nouvel écran dans son nouvel environnement.
Câblage nouvelle platine : Il reste à insérer cette nouvelle carte avec tous ses connecteurs dans la platine de développement !
Dans la précédente version j'avais soudé au fil de l'évolution du montage les fils directement sur l'Esp-32 et sur les différents composants.
Finalement c'était devenu un gros bazar et certaine connexions devenaient moins fiables et me généraient des problèmes parfois difficile à détecter.
L'arrivée du nouvel écran tactile a été l'occasion de repartir sur un nouveau câblage, j'ai utilisé dans un premier temps une platine à trous mais l'idée,
c'est bien de réaliser rapidement un PCB...
J'ai pris l'option d'utiliser un maximum de connecteur de façon à ce que quand je passerais à la version PCB je n'aurais pas tous les câbles extérieurs à ressouder.
Il y a donc des connecteurs pour l'écran, l'encodeur rotatif, le TMI1638, les sorties série et pwm, l'alimentation, le capteur ina219 pour les mesures tension et intensité. J'ai par contre câblé en "dur"
l'entrée oscillo ainsi que les deux sorties du générateur de fréquence (câbles blindés donc j'ai évité les points de coupure).
La bonne nouvelle c'est que tout rentre facilement !
Sur la façade avant j'ai donc ajouté les deux prises BNC pour le générateur de fréquence et le petit potentiomètre au milieu.
L'esthétique n'est vraiment pas terrible, je pense que si je me lance dans une deuxième version du boitier pour corriger certains défauts je prévoirais
quelque chose de mieux pour cette partie avant !
Les plaquettes de composants : Suivant les besoins, il est possible d'ajouter
des plaquettes avec des composants facilement accessibles, l'idée est d'en faciliter à l'extrême l'utilisation et le câblage.
Sur toute la plateforme, je me suis efforcer de ne prévoir que des connexions femelles de façon à ne plus avoir que des straps male-male.
Une plaquette peut avoir un domaine bien spécifique, la première expérimentée me permet de raccorder des composants sur le bus i2c, malgré le
nombre important de composant le câblage se résume à 4 straps males car la plaquette est entièrement pré câblée. Ceci permet un énorme gain de temps
et évite du câblage répétitif.
En rouge sont entourés les plaquettes de composants.
Ici la plaquette I2C, quatre fils permettent de commander tous les circuits. Ils ont tous des adresses différentes
et il est possible de les retirer du circuit par des petits cavaliers.
La carte est câblée à la "va-vite" mais l'idée c'est d'utiliser des circuits imprimés...
Sur le bloc central des composants passifs ont été sélectionnés, résistances
+ réseau de résistance de 10k, condensateur mais aussi des boutons des leds une cellule photo un buzzer.
Un exemple d'utilisation des composants de la platine additionnelle i2c.
Recherche d'une solution fiable pour le générateur de signaux, ici test d'un circuit qui est capable
de générer des signaux sinusoïdales ou carré entre 1hz et 40Mhz.
La partie Bluetooth est en cours de développement...
1 -> Carte SD de l'écran, elle est utilisée pour mémoriser la documentation de la platine (plaquettes) et pour des mémos sur certains circuits.
2 -> Ces petites sorties vont être utilisées pour l'entrée série (tx,rx) pour l'oscilloscope, pour les signaux carrés, pour la PWM...
3 -> Ces deux connecteurs permettent la mesure d'intensité, pour faire passer 3 ampères il faut du solide !
4 -> Le bouton marche / arrêt de la plateforme avec sa petite led.
5 -> L'encodeur rotatif qui permet de se déplacer dans les menus et de saisir du texte.
6 -> La sortie du 5 volts pour les montages. La platine est alimentée par un bloc d'alimentation de Raspberry qui peut fournir 2A.
Pour faire tourner un moteur comme dans les exemples ci-dessus il faut le raccorder à une source extérieur ce qui n'empêche pas d'utiliser
le voltmètre et l'ampèremètre de la platine en créant une masse commune.
7 -> La sortie 3.3 volts pour les montages, la platine dispose d'un régulateur qui permet de mettre à disposition 1 ampère sous 3v3