Table des matières:

Oscilloscope à double trace : 11 étapes (avec photos)
Oscilloscope à double trace : 11 étapes (avec photos)

Vidéo: Oscilloscope à double trace : 11 étapes (avec photos)

Vidéo: Oscilloscope à double trace : 11 étapes (avec photos)
Vidéo: Tutoriel utilisation du GBF et visualisation à l'oscilloscope 2024, Juillet
Anonim
Oscilloscope à double trace
Oscilloscope à double trace

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é

Mode entrelacé ou simultané
Mode entrelacé ou simultané
Mode entrelacé ou simultané
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

Prototypage
Prototypage
Prototypage
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

Atténuateurs
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

Terre Virtuelle
Terre Virtuelle
Terre Virtuelle
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

Encodeurs rotatifs et débogage
Encodeurs rotatifs et débogage
Encodeurs rotatifs et débogage
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

Affichage et base de temps
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

ADC et DMA
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

Interface utilisateur
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

Bâtiment et améliorations possibles
Bâtiment et améliorations possibles
Bâtiment et améliorations possibles
Bâtiment et améliorations possibles
Bâtiment et améliorations possibles
Bâtiment et améliorations possibles
Bâtiment et améliorations possibles
Bâtiment 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

SUPPLÉMENT: Overclocking
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é: