Table des matières:
- Fournitures
- Étape 1: Mode entrelacé ou simultané
- Étape 2: Prototypage
- Étape 3: Atténuateurs
- Étape 4: Terre virtuelle
- Étape 5: encodeurs rotatifs et débogage
- Étape 6: Affichage et base de temps
- Étape 7: ADC et DMA
- Étape 8: Interface utilisateur
- Étape 9: Construction et améliorations possibles
- Étape 10: Le code et une courte vidéo
- Étape 11: SUPPLÉMENT: Overclocking
Vidéo: Oscilloscope à double trace : 11 étapes (avec photos)
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:05
Lorsque j'ai construit mon précédent mini oscilloscope, je voulais voir dans quelle mesure je pouvais faire fonctionner mon plus petit microcontrôleur ARM, un STM32F030 (F030), et il a fait du bon travail.
Dans l'un des commentaires, il a été suggéré qu'une "Blue Pill" avec un STM32F103 (F103) pourrait être meilleure, plus petite que la carte de développement avec le F030 et peut-être même moins chère. Mais pour le mini oscilloscope je n'ai pas utilisé la carte de développement mais le F030 sur une carte SMD-DIP encore plus petite, donc là une Blue Pill ne serait certainement pas plus petite et je doute qu'elle soit moins chère aussi.
Le code est maintenant disponible sur Gitlab:
gitlab.com/WilkoL/dual-trace-oscilloscope
Fournitures
Liste des pièces: - boîte en plastique - panneau perforé (carte prototype double face 8x12 cm) - Blue Pill - écran TFT ST7735s - batterie lithium-ion - régulateur à faible chute de tension HT7333 3.3V - double opamp MCP6L92 - carte TSSOP8 à DIP8 - cristal 12 MHz (pas nécessaire) - encodeur rotatif plus bouton (2x) - interrupteur d'alimentation - bornes bananes (4x) - carte chargeur lithium-ion - plusieurs résistances et condensateurs - entretoises en nylon, écrous et vis
Outils:
- station de soudure - soudure 0.7mm - quelques fils - pince coupante - lunettes et loupe - perceuse - multimètre - oscilloscope - STLink-V2
Logiciel:
- STM32IDE - STM32CubeMX - Utilitaire STLink - Bibliothèque LowLayer - Bibliothèque adaptée pour ST7735 - Notepad++ - Kicad
Étape 1: Mode entrelacé ou simultané
Pilule Bleue
Mais l'idée était là, et je savais que le F103 avait deux ADC ! Et si j'utilisais ces deux ADC ensemble en mode "entrelacement", ce que j'ai déjà fait avec le STM32F407 (F407). La vitesse d'échantillonnage doublerait. Cela, combinez cela avec un microcontrôleur plus rapide et cela ferait un excellent successeur du mini oscilloscope.
Mode entrelacé Bizarrement les ADC du F103 sont moins avancés que celui du F030 (et du F407), vous ne pouvez pas choisir la résolution. Plus important encore, vous ne pouvez pas non plus modifier la synchronisation entre les deux ADC. Maintenant, lorsque vous utilisez le mode d'entrelacement, vous voulez généralement que l'échantillonnage soit le plus rapide possible avec le temps le plus court entre tous les échantillons, mais avec un oscilloscope, il est nécessaire de modifier la synchronisation. Peut-être que cela peut encore être fait, je ne suis pas un concepteur professionnel d'oscilloscopes, mais j'ai abandonné le projet d'utiliser le mode entrelacé.
Mode simultané
Mais, avoir deux ADC offre beaucoup plus d'options, les deux ADC peuvent également être réglés en mode "régulier-simultané". Que diriez-vous d'un double trace-oscilloscope ?
Ayant décidé d'essayer de faire un oscilloscope à double trace, je voulais également avoir une sensibilité d'entrée variable, une option que je n'avais pas sur le mini oscilloscope. Cela signifie un atténuateur (et un amplificateur) sur les entrées. Et peut-être que j'en voulais encore plus ? J'ai donc fait une petite liste de "nice-to-haves".
LISTE DE SOUHAITS
deux canaux
sensibilité variable sur les deux canaux
déclenchement sur les deux canaux
niveau de déclenchement variable sur les deux canaux
décalage variable
alimentation par batterie unique
tenir dans la même boîte que le mini-oscilloscope
Étape 2: Prototypage
Comme d'habitude, j'ai commencé ce projet sur une maquette. (Voir photo) Et avant de tout souder sur le perfboard, j'essaie de savoir si et comment il s'intégrera dans la boîte de projet choisie. Ça va, mais juste. Certaines parties sont cachées sous l'écran, d'autres sous la pilule bleue. Et encore une fois, comme pour la plupart de mes projets, il s'agit d'un projet unique et je ne concevrai pas de PCB pour cela.
Étape 3: Atténuateurs
Dans les oscilloscopes ordinaires, les atténuateurs d'entrée sont des circuits qui modifient l'atténuation et l'amplification en commutant des résistances d'entrée et de sortie avec de petits relais de signal. Bien que j'aie certains de ces relais, je sais qu'ils ne commuteront pas à moins de 4 volts, cela signifie qu'ils ne fonctionneront qu'avec une batterie lithium-ion entièrement chargée (4,2 V). J'avais donc besoin d'un autre moyen de changer ces résistances. Bien sûr, je pourrais simplement installer des interrupteurs mécaniques, mais cela ne rentrerait certainement plus dans la boîte du projet dans l'idée, je pourrais peut-être essayer à nouveau un meilleur potentiomètre numérique (celui que j'ai est beaucoup trop bruyant).
Puis j'ai pensé aux "commutateurs analogiques", avec ceux-ci je peux faire moi-même un potentiomètre numérique. Dans ma collection de pièces, j'ai trouvé le CD4066 avec quatre commutateurs analogiques. L'idée est de rendre la résistance de rétroaction d'un amplificateur opérationnel variable en commutant des résistances d'entrée et de sortie parallèles à la résistance de rétroaction.
Cela fonctionne très bien, mais n'ayant que 4 switchs dans le 4066 et ayant 2 canaux il n'était pas possible de faire plus de trois niveaux de sensibilité. J'ai choisi 500mV, 1V et 2V par division car ce sont les niveaux de tension que j'utilise le plus. L'écran est divisé en 6 divisions, ce qui donne les plages -1,5V à +1,5V, -3V à +3V et -6V à 6V.
Avec la "terre virtuelle", vous pouvez déplacer ces plages vers le haut et vers le bas de sorte que même 0v à +12V est possible.
Étape 4: Terre virtuelle
Étant donné que l'oscilloscope utilise un seul rail d'alimentation (3,3 V), les amplificateurs opérationnels ont besoin d'un niveau de sol virtuel ou ils ne fonctionneront pas. Ce niveau de sol virtuel est réalisé avec PWM sur un canal de sortie du TIM4, son cycle d'utilisation passe de quelques pour cent à près de cent pour cent. Un filtre passe-bas avec une résistance de 1k et un condensateur de 10uF le transforme en une tension de (presque) 0V à (presque) 3,3V. La fréquence de l'onde carrée est juste en dessous de 100 kHz, donc le simple filtre passe-bas est assez bon.
Assez tard dans la construction de cet oscilloscope, j'ai réalisé que vous ne pouvez pas avoir deux décalages séparés pour les canaux. Cela est dû au fait qu'avec une seule alimentation, le niveau de masse d'entrée doit être séparé du niveau de masse réel des amplificateurs opérationnels. Ainsi, les deux canaux se déplacent de la même manière lorsque vous modifiez le réglage GND.
Étape 5: encodeurs rotatifs et débogage
Sur le mini oscilloscope, j'ai utilisé un seul encodeur rotatif pour toutes les fonctions. Cela rendrait un oscilloscope double très difficile à utiliser, alors ici j'en ai besoin de deux. Un encodeur pour les atténuateurs et le niveau du sol virtuel et l'autre encodeur pour la base de temps et le déclenchement. Malheureusement, tout comme dans mon autre projet, ces encodeurs rotatifs sont très "bruyants". Ils sont si mauvais qu'ils ne fonctionneraient tout simplement pas avec des minuteries en "mode codeur", la manière standard de les lire. J'ai dû faire un mécanisme anti-rebond avec le timer TIM2, en vérifiant les encodeurs tous les 100us. Cette minuterie à son tour est démarrée (uniquement) lorsqu'il y a une certaine activité sur les encodeurs, ceci est vérifié avec la fonctionnalité EXTI sur les ports d'entrée. Maintenant, les encodeurs fonctionnent bien.
Et comme vous pouvez le voir, avoir un écran peut également être très pratique pour afficher des informations de débogage.
Étape 6: Affichage et base de temps
L'affichage a une résolution de 160 x 128 pixels donc il y a 160 échantillons nécessaires pour un écran plein, j'ai réussi à accélérer les ADC pour faire 1,6 million d'échantillons par seconde et cela, avec le microcontrôleur beaucoup plus overclocké (plus de détails plus tard), donne une base de temps minimum de 20us par division (100us par écran). Ainsi, une forme d'onde de 10 kHz remplira tout l'écran.
C'est seulement deux fois plus rapide que le mini oscilloscope que j'ai fait auparavant. Eh bien, maintenant c'est avec deux canaux:-).
Comme dit, l'affichage fait 160 pixels de large, donc seulement 160 valeurs sont nécessaires par écran. Mais tous les tampons contiennent en fait 320 échantillons. Ainsi, le DMA stocke 320 valeurs avant de déclencher une interruption de transmission complète (TC). C'est parce que le déclenchement est fait dans le logiciel. L'échantillonnage commence à un moment aléatoire, il est donc très peu probable que la première valeur dans le tampon soit l'endroit où le point de déclenchement devrait être.
Par conséquent, le point de déclenchement est trouvé en lisant le trace_x_buffer, si la valeur est à la valeur de déclenchement souhaitée et si la valeur précédente est juste en dessous, le trigger_point est trouvé. Cela fonctionne assez bien, mais vous avez besoin d'un tampon plus grand que la taille réelle de l'affichage.
C'est également la raison pour laquelle le taux de rafraîchissement des paramètres de base de temps inférieurs est plus lent que prévu. Lorsque vous utilisez le paramètre 200 ms/div, un écran plein de données dure 1 seconde, mais comme le double du nombre de conversions est effectué, cela prend 2 secondes. Sur les paramètres de base de temps plus rapides, vous ne le remarquerez pas beaucoup.
TIM3 est utilisé pour générer la base de temps. Il déclenche les ADC avec la vitesse requise par le paramètre de base de temps sélectionné. Son horloge de TIM3 est de 120MHz (voir OVERCLOCKING), le nombre maximum auquel il compte (ARR) détermine à quel point il déborde ou, en langage ST, il se met à jour. Via TRGO, ces impulsions de mise à jour déclenchent les ADC. La fréquence la plus basse qu'il génère est de 160 Hz, la plus élevée est de 1,6 MHz.
Étape 7: ADC et DMA
Les deux CAN convertissent la tension sur leurs entrées en même temps, ils stockent ces deux valeurs de 12 bits dans une seule variable de 32 bits. Ainsi, le DMA n'a qu'une variable par (double) conversion à transférer.
Pour utiliser ces valeurs, il est donc nécessaire de les scinder en deux valeurs afin qu'elles puissent être utilisées pour afficher les deux traces. Comme indiqué, les CAN du F103 ne peuvent pas être réglés sur d'autres résolutions que 12 bits. Ils sont toujours en mode 12 bits et les conversions prennent donc toujours le même nombre d'impulsions d'horloge. Pourtant, avec l'overclocking des ADC, 1,6 MSamples par seconde peut être fait (voir Extra: Overclocking).
La référence des ADC est Vdd, le rail 3.3V. Pour convertir cela en valeurs plus pratiques (par division), j'ai calculé les valeurs des atténuateurs, car je n'ai pas les valeurs exactes des résistances qui ressortent de ces calculs, certaines corrections sont effectuées dans le logiciel.
Dans ce projet, j'utilise DMA en "mode régulier". Dans ce mode, le DMA arrête le transfert de données (depuis les ADC vers la mémoire) lorsque le nombre de mots (ou demi-mots ou octets) est transféré. Dans l'autre mode possible, le "mode circulaire", le DMA se réinitialise et continue de transférer des données sans interruption. Cela n'a pas fonctionné avec le F103, il est si rapide qu'il écrase les données dans le adc_buffer avant que le reste du programme ne puisse les lire. Alors maintenant, le processus est le suivant:
- configurer le DMA sur le nombre de données à transférer et activer le DMA
- lancer le déclenchement des ADC, ceux-ci demanderont des transferts DMA après chaque (double) conversion
- après le transfert du nombre de conversions défini, le DMA s'arrête
- arrêter immédiatement également le déclenchement des ADC
- faire toutes les manipulations nécessaires sur les données en mémoire
- afficher des traces sur l'écran
- recommencer le processus
Étape 8: Interface utilisateur
Un écran de 160 par 128 pixels n'est pas très grand et je veux en utiliser le plus possible. Il n'y a donc aucune partie réservée aux réglages courants. Dans les dernières lignes, la sensibilité verticale, la base de temps, le niveau de déclenchement et le canal de déclenchement sont affichés, mais lorsque les signaux sont suffisamment gros, ils apparaîtront dans la même zone. L'option active est affichée en jaune, le reste est affiché en blanc.
Étape 9: Construction et améliorations possibles
Je suis assez content de ce projet. Cela fonctionne bien et fait le travail, mais cela pourrait être mieux.
La boîte de projet est trop petite pour tout ranger confortablement, ce qui oblige à placer des composants sous la pilule bleue. Pour rendre cela possible, la Blue Pill ne pouvait pas être soudée directement à la "carte principale". Et parce que cela le rendait trop haut, j'ai dû retirer de nombreuses pièces de la pilule bleue, comme les cavaliers pour sélectionner BOOT0 et BOOT1 (des choses que je n'utilise jamais de toute façon) et j'ai même dû déplacer le cristal du haut vers le bas de le pcb.
J'ai rendu la vie plus difficile en utilisant des connecteurs banane au lieu de connecteurs BNC ou SMA, cela signifiait qu'une grande partie du panneau perforé était une "zone interdite". de mettre des pièces dessus.
Un autre problème de tout mettre dans une si petite boîte de projet est que les circuits analogiques et numériques sont très proches les uns des autres. Vous pouvez voir qu'il y a pas mal de bruit visible sur les deux traces. Ce que je n'avais même pas sur la planche à pain ! En déplaçant les lignes électriques des circuits analogiques et numériques aussi loin que possible, une petite amélioration a été apportée, mais pas assez à mon goût. Réduire encore plus que moi toutes les valeurs de résistance dans les circuits analogiques (la résistance d'entrée est de 100kOhm au lieu de 1MOhm) n'a pas aidé. Je soupçonne que le déclenchement sur le réglage de base de temps le plus rapide (20us/div), ce qui n'est pas génial, s'améliorera également avec moins de bruit sur les signaux.
Si vous faites cette conception sur un "vrai" circuit imprimé, avec toutes les parties smd et des couches séparées pour l'analogique, le numérique et l'alimentation (cela fait 4 couches !), cela fonctionnera probablement très bien. Il sera beaucoup plus petit, il n'utilisera pas une Blue Pill complète mais juste le F103 et cela permettra de l'alimenter avec un Vdda analogique séparé (propre) pour les ADC.
Comme touche finale, j'ai décidé de vaporiser la boîte en noir, cela change de toutes les boîtes beiges qu'elle possède.
Étape 10: Le code et une courte vidéo
Étape 11: SUPPLÉMENT: Overclocking
Tout comme je l'ai fait avec le F03, je voulais voir à quel point un F103 peut être overclocké. Les spécifications de ce microcontrôleur affirment que la vitesse d'horloge maximale ne doit pas dépasser 72MHz (ce qui bien sûr est déjà plus rapide que le F030) mais j'avais lu dans plusieurs blogs que l'overclocker était facile, alors pourquoi pas ?
La Blue Pill est munie d'un cristal de 8MHz, la PLL multiplie cela par un facteur de 9 à 72MHz. La PLL peut être augmentée jusqu'à 16 donnant une horloge de 128MHz. Ce n'était pas du tout un problème pour ma Blue Pill, en fait, toutes mes Blue Pills fonctionnent sans aucun problème sur 128 MHz.
Mais maintenant, je voulais savoir quelle est la vraie limite. J'ai donc retiré le cristal de 8MHz et l'ai remplacé par un de 12MHz. Encore une fois, j'ai augmenté le multiplicateur PLL jusqu'à ce que le microcontrôleur abandonne finalement. C'était à 168MHz ! Sur 156MHz, cela fonctionnait toujours bien. Je l'ai laissé tourner à cette vitesse pendant des heures et je ne l'ai jamais vu s'écraser. Dans cet oscilloscope, j'ai opté pour 120MHz, une vitesse qui peut être sélectionnée avec un cristal de 12MHz et une PLL sur 10, ainsi qu'avec un cristal de 8 MHz et la PLL sur 15. (voir SystemClock_Config dans main.c)
Les ADC fonctionnent maintenant aussi plus vite, je les fais tourner à 30MHz (au lieu de 14), ils fonctionnaient toujours bien sur 60MHz, STMicroelectronics fait du bon matériel !
STMicroelectronics met ces limites dans la fiche technique pour une bonne raison, elles garantissent que le microcontrôleur fonctionne aux 72MHz spécifiés dans toutes les conditions.
Mais comme je n'utilise pas le microcontrôleur à -40 Celsius, +85 Celsius, sur seulement 2,0 volts ou 3,6 volts, je pense qu'il est sûr de l'overclocker. Ne faites PAS cela lorsque vous avez l'intention de vendre un appareil avec ses microcontrôleurs, vous ne savez jamais où ils seront utilisés.
Conseillé:
Mini oscilloscope CRT alimenté par batterie : 7 étapes (avec photos)
Mini oscilloscope CRT alimenté par batterie : Bonjour ! Dans ce Instructable je vais vous montrer comment faire un mini oscilloscope CRT alimenté par batterie. Un oscilloscope est un outil important pour travailler avec l'électronique; vous pouvez voir tous les signaux qui circulent dans un circuit et résoudre les problèmes
Envoi de données d'Arduino vers Excel (et tracé): 3 étapes (avec images)
Envoi de données d'Arduino vers Excel (et tracé) : j'ai longuement cherché un moyen de tracer la lecture de mon capteur Arduino en temps réel. Non seulement tracer, mais aussi afficher et stocker les données pour d'autres expérimentations et corrections. La solution la plus simple que j'ai trouvée était d'utiliser Excel, mais avec
Créez facilement votre propre oscilloscope (Mini DSO) avec STC MCU : 9 étapes (avec photos)
Créez facilement votre propre oscilloscope (Mini DSO) avec STC MCU : il s'agit d'un simple oscilloscope fabriqué avec STC MCU. Vous pouvez utiliser ce Mini DSO pour observer la forme d'onde. Intervalle de temps : 100 us-500 ms Plage de tension : 0-30 V Mode de dessin : vecteur ou points
Mettez à niveau le DIY Mini DSO vers un véritable oscilloscope avec des fonctionnalités impressionnantes : 10 étapes (avec photos)
Mettez à niveau le DIY Mini DSO vers un vrai oscilloscope avec des fonctionnalités impressionnantes : la dernière fois que j'ai partagé comment faire un Mini DSO avec MCU. Pour savoir comment le construire étape par étape, veuillez vous référer à mon précédent instructable : https://www.instructables. com/id/Make-Your-Own-Osc…Comme beaucoup de gens sont intéressés par ce projet, j'ai passé quelques ti
Track&trace pour les petits magasins : 9 étapes (avec photos)
Track&trace pour les petits magasins : il s'agit d'un système conçu pour les petits magasins qui est censé être monté sur des vélos électriques ou des scooters électriques pour des livraisons à courte distance, par exemple une boulangerie qui souhaite livrer des pâtisseries. Que signifie Track and Trace ?Track and trace est un système utilisé par ca