Je vais mesurer des temps très courts aussi précisément que possible. L'appareil recevra une première impulsion et, dans les 150 microsecondes, six autres, chacun sur ses propres fils. Le temps entre le premier signal et chacun des six autres signaux doit être mesuré aussi précisément que possible. La précision doit être d'au moins 100 nanosecondes, mais plus c'est mieux.
Quel microcontrôleur serait le mieux pour cela? J'ai trouvé ça . Ils semblent avoir une minuterie avec une période de 4 nanosecondes. Ce serait assez précis pour moi.
Un autre microcontrôleur serait-il préférable de le faire? Cela peut-il être fait avec AVR?
microcontroller
time
Kestis
la source
la source
Réponses:
La vitesse du microcontrôleur n'est pas toujours le facteur limitant. Le MSP430 peut être une solution appropriée, non pas parce qu'il ne fonctionne que jusqu'à 25 MHz, mais parce que plusieurs périphériques MSP430 ont le périphérique Timer D qui permet une période de temps allant jusqu'à 4 ns (256 MHz). C'est plus rapide que presque tous les microcontrôleurs. Même le STM32 dans ses dernières versions (F4) ne peut faire que 180 MHz.
La minuterie D est disponible sur les appareils MSP430F51x1 et MSP43051x2 tels que le MSP430F5131.
Cependant, cela ne résout que la possibilité de capturer le temps. La grande question est de savoir ce que vous en faites car le traitement lui-même sera plus lent. Vous pouvez échantillonner le temps entre deux impulsions, mais vous ne pourrez faire aucun traitement entre elles, si c'est ce que vous voulez dire.
la source
Le chronométrage à une résolution de 100 ns nécessite un minuteur fonctionnant à 10 MHz. De nombreux microcontrôleurs devraient être capables d'exécuter une minuterie aussi rapidement.
Le problème survient lorsque vous essayez de chronométrer l'arrivée de 6 signaux. Ces signaux sont-ils tous sur le même fil, ou chacun sur un fil différent?
S'ils sont tous sur le même fil, il est possible de le faire avec précision sur n'importe quel MCU avec une seule minuterie de 10 MHz. Naïvement, le code pour ce faire ressemblerait à ceci:
Le problème est qu'il faut un temps limité pour réinitialiser la minuterie. Cela provoque deux problèmes:
Les temps mesurés seraient erronés de quelques 100 ns, selon votre implémentation. Cependant, ils devraient toujours se tromper. IE mal à chaque fois exactement le même montant. Cela signifie que vous pouvez facilement le compenser en ajoutant une petite quantité à chaque mesure.
Il y aurait un temps minimum que vous pourriez mesurer. Si une impulsion quelconque est arrivée 100ns après la précédente, vous la manquerez probablement. Je ne sais pas si vous pouvez faire quelque chose à ce sujet dans le logiciel. Vous devrez trouver un microcontrôleur capable de gérer plusieurs impulsions dans le matériel.
Quel microcontrôleur peut gérer plusieurs impulsions dans le matériel? Le Cypress PSoC ! Il s'agit d'un microcontrôleur qui contient également des blocs numériques configurables, ce qui signifie que vous pouvez facilement faire fonctionner 6 minuteries distinctes, chacune à 60 MHz, vous offrant une résolution meilleure que 20 ns.
Voici un exemple que j'ai fait rapidement pour vous montrer le genre de choses que vous pourriez faire avec. J'ai 6 minuteries distinctes, toutes fonctionnant sur l'horloge du bus, qui peut aller jusqu'à 67 MHz. Il y a une broche de déclenchement qui démarre tous les chronomètres en cours d'exécution et 6 autres broches, chacune provoquant un événement de capture dans le chronomètre. Un registre d'état permet à votre code de surveiller les minuteries qui capturent une impulsion. Le code peut lire les valeurs des minuteries.
la source
Réponse révisée : un oscilloscope à stockage numérique rapide ou éventuellement un compteur de fréquence.
Ancienne réponse :
En termes simples, "le microcontrôleur le plus rapide que vous puissiez trouver", au motif que plus votre horloge / échantillonnage est rapide, plus vous pouvez être précis. Les MSP430 ne sont pas des appareils rapides.
Les STM32 sont 32 bits et fonctionneront plus rapidement, en plus d'avoir des cartes et des outils de développement similaires à bas prix, mais même cela est assez lent par rapport à certaines des choses les plus puissantes disponibles (Raspberry Pi @ 800MHz - 1GHz (Overclocked)). Cependant, plus vous avancez vite, plus le processeur est compliqué, de sorte qu'il peut y avoir un compromis dans la courbe d'apprentissage.
Ajouté: Benji a raison, vous avez peut-être aussi besoin d'un oscillateur précis pour le micro si vous voulez des mesures très précises (vous ne spécifiez pas vraiment les limites d'erreur dans votre question).
la source