Un microcontroleur plus rapide qu’Arduino ?

a marqué ce sujet comme résolu.
Auteur du sujet

Bonjour pour un projet perso (contrôle d’intégrité d’une barre) j’ai besoin de capter, enregistrer et comparer l’écho d’un choc sur cette barre. Vu la vitesse du son dans l’acier j’ai besoin d’effectuer un échantillonage sur une base de temps de l’ordre de la micro-seconde…

Dans un premier post on m’a parlé de la fonction "micros" mais finalement la limitation vient de la fréquence du microcontroleur : la conversion analog/num est trop lente pour permettre de travailler sur un échantillonnage sous la ms…

Quelqu’un connait-il une solution pas trop compliquée a mettre en place ?

merci, bonne journée à tous

+0 -0

Salut,

Il existe des composants spécialisés dans le traitement du signal, qu’on appelle sans grande imagination des DSP (Digital Signal Processor) qui sont fait pour ça. Cependant la mise en oeuvre va être plus complexe et faut faire attention aux autres fonctionnalités que tu as besoin dans ton projet

jadis @leroivi - all in all we’re just another brick in the wall

+0 -0

Cette réponse a aidé l’auteur du sujet

Le bon point, c’est qu’un échantillonage à la µs, c’est ce que fait un ADC 1MS/s (S pour sample, 1 million d’échantillons par seconde), ce qui est assez courant sur des microcontrôleurs, avec 10 ou 12 bits de précision. On devrait pouvoir trouver facilement une solution à ton problème.

Par exemple, et en restant proche de ton arduino, on peut aller vers l'Arduino Due, dont le MCU SAMX a des ADC 12bits 1MS/s.

+1 -0

C’est pas le tout d’échantilloner, il faut aussi stocker les échantillons.
Pour cette application, la durée de mesure devrait être courte, de façon à pouvoir garder les échaanyillons en mémoire.

Il se faut s’entraider, c’est la loi de la nature. (Jean de La Fontaine, l’âne et le chien)

+0 -0
Auteur du sujet

oula… merci à tous (et peut-être toutes ?) je vais éplucher tout ça alors premières réponses… @ Etherpin : la durée ne devrait pas dépasser les 100us, pas long… et je tourne sur une Méga

pour les autres, j’ai trouvé un petit tuto sur un super site appelé… ZesteDeSavoir (vous devriez essayer, bons tutos et communauté très sympa 😂😉👍) permettant de pousser Arduino aux limites de son processeur en programmant un peu plus profond

merci, vraiment, je vous tiendrai au courant de la suite… et de la réussite de ce projet 😉

+0 -0

Personnellement je ne sais pas comment vous pouvez répondre précisemment à l’OP vu qu’il manque le détail de ce qu’il souhaite faire exactement.
Quand je vois durée d’échantillonnage de 100µs, bah je sais pas trop ce que ça veut dire :

  • Faire une mesure toute les 100 µs
  • Faire des mesure pendant 100µs avec un taux de rafraichissement de 1µs par exemple

Car au niveau de l’application, on envoie une onde dans l’acier. L’ADC vient faire une mesure à un moment T et non pendant une période.

Pour l’ATMega 2560 qui compose l’Arduino Mega, l’ADC interne a un taux d’échantillonage (1 mesure toutes les x secondes) de 15kSPS @ 10bits (= 1 mesure toutes les 66 µs) et peux monter à 76.9kSPS (1.3 µs) en diminuant la précision. Mais attention au temps de conversion, qui est de minimum 13µs et peux monter à 260 µs en fonction de ton setup.
Je trouve qu’on est un peu en limite pour l’utilisation en 10 bits, si on souhaite augmenter l’échantillonnage ça sera difficilement possible.

Tu peux partir sur un ADC en SPI, par exemple MCP33111–05 ou LTC2312–12, ADC 500kSPS 12-bits qui ont l’avantage d’un temps de conversion égal ou inférieur au taux d’échantillonnage, donc tu pourras les utiliser à pleine vitesse si nécessaire.

Ensuite le principe pour faire un échantillonnage à intervalle régulier "précis" c’est d’utiliser un timer avec la fréquence d’échantillonnage souhaité, il vient démarrer la routine d’acquisition et de traitement des données. A toi de t’arranger pour que le l’acquisition et le traitement (ou une partie ou tout le traitement, ça dépend de ce que tu as besoin), dure moins longtemps :)

+1 -0
Auteur du sujet

@zeqL : un grand merci, ta réponse est documentée… même si quelque peu technique ! En effet, je ne me suis pas étendu sur le coté technique, plutôt sur la partie programmation : pour initier mes élèves aux CND, je cherche à soit choquer un métal et enregistrer l’écho, soit envoyer un son en variant la fréquence et enregistrer les résonnances.

Vu la célérité du son dans l’acier (~ 5 km/s) je dois tourner à max la dizaine de µs par période, sur une durée totale d’échantillonnage de l’ordre de la dizaine (voire la centaine) de ms

En gros, T = 10 µs, t =10 ms => j’ai un tableau de t/T échantillons soit un petit millier de valeurs, voire une dizaine de milliers


EDIT : "Tu peux partir sur un ADC en SPI, par exemple MCP33111–05 ou LTC2312–12, ADC 500kSPS 12-bits qui ont l’avantage d’un temps de conversion égal ou inférieur au taux d’échantillonnage, donc tu pourras les utiliser à pleine vitesse si nécessaire.'

Tu peux préciser cette phrase s’il te plaît ? je sens qu’il y a du potentiel, mais c’est plutôt dans le côté obscur de la force ;-D

Édité par TriFidE

+0 -0

Je reste donc sur ma proposition d’Arduino Due, qui a un ADC 12bits 1MS/s. Il reste une difficulté: stocker l’enregistrement en attendant de le traiter. Avec 1MS/s, (vu qu’on veut enregistrer une réponse impulsionnelle, autant travailler à la fréquence d’échantillonnage maximum), en 100ms, on a 100000échantillons, de 12 bits, qui vont donc occuper 2 octets, il faut un chip avec au moins 200kB de RAM. L’arduino Due que je citais n’en a pas autant, et sa plus grande banque mémoire fait 64kB. On sera donc limités à un enregistrement de 32ms, à moins de baisser la fréquence d’échantillonage. On peut même être plus limités que ça si on utilise le logiciel Arduino, qui peut utiliser une partie de cette mémoire. Cela dit, on tient le cahier des charges (enregistrement de 10ms, échantillonage à 100kHz) avec un microcontroleur qui devrait être assez simple à prendre en main, puisqu’il est compatible arduino.

+0 -0
Auteur du sujet

merci Jacen, j’ai acheté un data shield qui permet de connecter une SD à Arduino, ça devrait régler le problème de stockage.
j’ai à peu près rédigé le -petit- programme, me reste le comparateur : je ne dois pas comparer exactement deux tableaux de données, mais charcher les simitudes, et surtout LA différence; il me faut donc implémenter une fonction de corrélation qui comparera l’allure générale des deux tableaux…
j’ai un peu l’impression de pédaler dans la choucroute pour tout dire !
Merci en tous cas à la communauté ;-D

Édité par TriFidE

+0 -0

Cette réponse a aidé l’auteur du sujet

Le problème des adaptateurs SD card pour Arduino, c’est qu’ils ne fonctionnent pas comme ceux d’un PC, et n’ont pas les même performances. J’ai cherché rapidement sur internet, les gens semblent parler de capacité de logging de l’ordre de 2000 données par seconde, qu’ils font monter à 100kB/s après optimisation. Ce n’est pas suffisant pour les enregistrements que tu souhaites faire.

En première approche, je te conseille de faire le traitement en 2 temps: d’abord l’enregistrement de la réponse, puis le traitement des données (qui peut éventuellement être fait sur PC, ce qui permet de faire de l’affichage, de disposer d’une quantité simili-illimitée de mémoire, …). Ca oblige à tout enregister, mais ça reste beaucoup plus simple à mettre en oeuvre. N’essaye pas de gérer toutes les difficultés d’un coup.

+0 -0
Auteur du sujet

Je pense qu’on a à peu près la même approche : voici la mienne

  • Je réalise l’enregistrement du son (deux cartes arduino, une pour l’émission l’autre pour la réception, vu les fréquences de travail je ne pourrai pas en demander plus à un seul ATméga)
  • j’enregistre les échantillons dans un tableau de unsigned long que je stocke ensuite dans la SD
  • Au branchement de la carte sur le PC, il reçoit les données et fait le job de comparateur.

ça correspond à ton idée ?

Et… merci encore pour le temps passé ;-)

+0 -0

Salut,

Désolé de la réponse tardive, je n’étais pas disponible.


EDIT : "Tu peux partir sur un ADC en SPI, par exemple MCP33111–05 ou LTC2312–12, ADC 500kSPS 12-bits qui ont l’avantage d’un temps de conversion égal ou inférieur au taux d’échantillonnage, donc tu pourras les utiliser à pleine vitesse si nécessaire.'

Tu peux préciser cette phrase s’il te plaît ? je sens qu’il y a du potentiel, mais c’est plutôt dans le côté obscur de la force ;-D

TriFidE

Les ADC sont souvent caractérisés par le nombre d’échantillons par seconde qu’ils peuvent capter. Le problème c’est qu’il faut aussi regarder le temps de conversion : le temps que met l’ADC pour sortir le résultat de la numérisation.

Parfois l’ADC a besoin de temps pour se configurer à l’allumage et la toute première conversion prendra plus longtemps. Donc dans ce cas si on s’amuse à faire on/off à l’ADC il faut prendre en compte le temps de conversion.

Dans le cas du microcontrôleur de l’Arduino Mega, la datasheet de l’ATMega2560 indique différent temps de conversion selon les situations, or le temps minimum de conversion ne permet pas de tenir la vitesse d’échantillonnage indiquée, donc soit c’est une erreur, soit je n’ai pas lu en détail et n’ai pas trouvé la subtilité.
Les deux ADC que j’ai donné en exemple on un temps de conversion inférieur ou égal à la vitesse max d’échantillonnage, donc on peut les utiliser réellement à cette vitesse sans craindre que le temps de conversion soit, selon certains paramètres, trop long.

Concernant la proposition de Jacen, comme souvent je suis contre le fait de déployer l’artillerie lourde pour tuer une mouche.
Un MCU 32-bits juste parce que la RAM interne est pas sufffisante… y a moyen de mieux faire ;)

Maintenant dans un cadre d’apprentissage et surtout dont le sujet principal n’est pas l’électronique, pourquoi pas sortir l’artillerie lourde, mais il faut comprendre pourquoi.

(J’ai rien contre toi Jacen, mais juste un peu marre de voir les gens sortir une Raspberry Pi pour contrôler 3–4 leds… :) )

+0 -0

(J’ai rien contre toi Jacen, mais juste un peu marre de voir les gens sortir une Raspberry Pi pour contrôler 3–4 leds… :) )

zeqL

Bah, tu sais que, sur le fond, je suis d’accord avec toi; mais pour un débutant, ça facilite beaucoup l’étude (le MCU 32 bits, pas le RPi). Cela dit, ici, vu que l’OP a déjà son matériel, c’est sans doute du gâchi de le remplacer. J’ai pas encore pris le temps l’ATMega2560 et la carte d’extension SD pour déterminer l’optimum théorique et proposer une solution plus raisonnable.

+0 -0

Il n’est pas obligé d’utiliser une SD mais une flash NOR en SPI de 32 ou 64Mbits (ça coute $2–3) peut suffire potentiellement.

Mais bon dans un cadre éducatif faut prendre une solution simple même si c’est pas optimal, la limite sera l’évolution possible.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte