Question:
Précision de la gigue inférieure à la microseconde - que faut-il utiliser?
ignoramusextraordinaire
2018-10-01 17:40:02 UTC
view on stackexchange narkive permalink

J'ai quatre signaux de niveau TTL qui doivent changer d'état dans un ordre particulier.

À partir du signal «go» sur l'une des lignes, tout basculement des autres lignes se fera en moins de 100 us. Les trois autres signaux basculeront au plus deux fois. Le début, la fin et la durée entre les changements d'état que ces trois autres signaux vont basculer varient en fonction des métriques du système qui sont bien connues avant que le signal de départ ne se produise. Mais la synchronisation est variable, donc la séquence des impulsions et leurs durées doivent être programmables. Le moment et la durée sont connus avant le début de la séquence.

Voici le hic, j'ai besoin d'une précision de gigue inférieure à la microseconde. Le micro ARM 120 MHz que j'utilise ne peut garantir de tels profils de synchronisation déterministes en raison du pipelining et de nombreuses autres raisons d'amélioration des performances. Nous pouvons faire de notre mieux pour concevoir le système afin de minimiser la gigue, mais je veux savoir s'il utilise un micro plus rapide ou des DSP ou CPLD, PAL, etc. sont un moyen typique d'obtenir la précision et la résolution que je recherche.

Dans le passé, avec un micro 8 bits fonctionnant à 8 MHz avec une instruction par cycle d'horloge, je pouvais écrire un assembleur, mettre le micro en veille, se réveiller en cas d'interruption, compter quelques cycles d'horloge et avoir une précision de 0,25 us

De quelle technologie ai-je besoin pour étudier pour obtenir cette résolution et cette précision?

Les FPGA feront l'affaire
Le pipelining provoquera 10 tics d'horloge de gigue ???
Il serait utile d'avoir une spécification ou au moins quelques exemples de quel signal doit être généré à la suite de quels autres signaux, avec une synchronisation de front minimum et maximum admissible.
Il serait utile que vous puissiez spécifier exactement la pièce que vous utilisez.Par pipelining, entendez-vous réellement la prédiction de branche?Comme dans, une pièce avec mémoire cache peut avoir un comportement indéterministe lorsque la prédiction de branche échoue.Surtout lorsque les états flash & wait sont impliqués.Parce que le pipelining ne devrait pas causer de gigue, mais plutôt rendre le code plus rapide dans l'ensemble.Et le pipelining existe depuis bien avant ARM, donc votre ancien MCU en avait probablement une certaine saveur.
Vous commencez avec une machine à états avec des exigences de synchronisation sur toutes les entrées et sorties, puis vous synchronisez avec une horloge stable pour éliminer la gigue, puis choisissez une solution.Pas l'inverse.c'est-à-dire de bas en haut puis pour d'autres raisons, de haut en bas pour arriver à une solution rentable
* "Dans le passé avec un micro 8 bits ..." * Les micros 8 bits existent toujours.Certains d'entre eux sont très rapides.Pourquoi n'en utiliseriez-vous pas?
Même un Xtal à 32 kHz pour synchroniser les sorties a une période de 31 us et une gigue de xxx ns en utilisant la logique yyy.Le temps mort est-il impliqué?dans la gamme x nous?
"... un moyen typique d'obtenir la précision et la résolution que je recherche." Cela vous aiderait si vous nous fournissiez la précision et la résolution que vous recherchez.Cherchez-vous simplement "submicroseconde" c'est-à-dire moins de 1us, ou avez-vous réellement une exigence plus stricte?
Je suppose qu'un générateur de retard numérique est excessif pour votre projet?Quelles sont vos exigences?
Sept réponses:
Olin Lathrop
2018-10-01 18:08:11 UTC
view on stackexchange narkive permalink

Il n'est pas clair quels sont exactement les signaux que vous devez générer et leur timing par rapport aux signaux entrants.

Cependant, 250 ns n'est pas vraiment difficile à réaliser avec quelque chose comme une série EP dsPIC, par exemple.À un taux d'instruction de 70 MHz, cela vous donne jusqu'à 17 cycles d'instruction de gigue admissible.C'est beaucoup.

Faire en sorte que votre signal entrant provoque une interruption, puis générer les signaux de sortie à partir d'une synchronisation d'instruction fixe vous donnera beaucoup moins de 17 cycles de gigue.Ce serait encore mieux si le signal d'entrée peut déclencher un générateur PWM ou autre.Mais vous n’avez pas donné suffisamment d’informations sur la nature des signaux de sortie pour savoir si le matériel spécifique disponible sur ces micros serait applicable.

Salut Olin - Je prévois d'utiliser l'Atmel ATSAMD51 et pour le moment aucune ressource système n'est allouée.La priorité la plus élevée sont ces quatre signaux afin que je puisse affecter des ressources si nécessaire.Les signaux de sortie sont connectés aux pilotes FET.
La gamme ATSAMD51 de microcontrôleurs possède un périphérique de système d'événements qui permet une communication autonome, à faible latence et configurable entre Plusieurs périphériques peuvent être configurés pour générer et / ou répondre à des signaux appelés événements.Cela pourrait correspondre aux factures de votre application.Il contient également un bloc logique personnalisé configurable qui pourrait fonctionner pour votre application en fournissant une interaction minimale avec le noyau mcu
Lundin
2018-10-01 18:23:15 UTC
view on stackexchange narkive permalink

Habituellement, vous pouvez réaliser ce type de temps réel tant que la sortie ne dépend pas du logiciel / des interruptions.Autrement dit, les broches ne sont pas définies à partir d'un ISR ou similaire, auquel cas vous aurez une gigue de microseconde.La latence d'interruption peut être un temps statique, mais je ne compterais pas dessus, au cas où plus d'une interruption se déclencherait à la fois, etc.

Vous pourrez peut-être résoudre ce problème avec la fonction de comparaison de sortie du minuteur matériel.Autrement dit, toutes les broches pertinentes sont définies lorsqu'une minuterie s'écoule, comme par exemple lors de l'utilisation de PWM.Cela peut souvent être fait avec une horloge système ou une horloge système / 2 précision.D'autres alternatives sont DMA, s'il est pris en charge pour les broches spécifiques.

Cela peut fonctionner jusqu'à 50-100ns quelque part, où vous serez à la merci des caractéristiques analogiques des broches.

Et puis, bien sûr, vous ne pourrez pas obtenir une meilleure précision que ne le permet votre oscillateur.Vous ne pouvez certainement pas utiliser un oscillateur RC intégré, mais vous devez utiliser un cristal de haute précision ou un oscillateur externe.

Dan Mills
2018-10-01 18:03:30 UTC
view on stackexchange narkive permalink

DMA et une minuterie?

Un couple de bus SPI et utiliser simplement les broches de données (peut-être encore avec DMA si vous avez besoin de plus de 32 créneaux horaires)?

Mon sentiment est que 1us devrait être faisable si vous choisissez correctement vos broches IO et que vous êtes prêt à jouer à quelques jeux de bas niveau.

100ns auxquels je devrais réfléchir, mais peut-être quelque chose de sournois avec le chargement d'une puce RAM QSPI puis le cadencement du motif de bits en utilisant une minuterie comme horloge?

10ns est le territoire FPGA.

Dmitry Grigoryev
2018-10-01 19:13:53 UTC
view on stackexchange narkive permalink

Vérifiez si vous avez des minuteries capables de piloter plusieurs broches, généralement utilisées pour le contrôle du moteur (généralement 4 ou 6, pour pont en H et triphasé respectivement).Dans de nombreux cas, ces minuteries ont des registres de "précharge" qui vous permettent de modifier de manière transparente la période et le cycle de service, ce qui signifie que vous pouvez essentiellement générer une forme d'onde arbitraire avec eux.Si c'est bien fait, ces formes d'onde sont précises jusqu'à la résolution du minuteur.

Merci Dmitry - J'utilise l'ATSAMD51, il a ces fonctionnalités et il semble que cela pourrait fonctionner
gregb212
2018-10-01 18:39:49 UTC
view on stackexchange narkive permalink

Peut-être quelque chose comme un PSOC Cypress avec les cellules logiques programmables.Je pense que Microchip a des pièces avec des capacités similaires.Ils sont comme des microcontrôleurs avec des fonctionnalités FPGA minuscules et limitées que vous pouvez personnaliser.Il semble que vous aurez besoin d'une forme de DMA ou de FPGA pour répondre à vos besoins.

akohlsmith
2018-10-02 06:53:33 UTC
view on stackexchange narkive permalink

Les périphériques STM32 ont des périphériques de minuterie très puissants et configurables.Ils peuvent être chaînés ou synchronisés et offrent des sorties précises au cycle.Vous voudrez peut-être passer un peu de temps à lire les fiches techniques des appareils STM32L4 et H4 pour démarrer, et peut-être à passer en revue une partie de la documentation relative au timer spécifique de STMicro.

J'utilise personnellement les minuteries avec un FPGA pour me donner une synchronisation et un séquençage précis à la microseconde pour 32 sorties numériques.Le FPGA ne fait rien de spécifique à la synchronisation, mais consiste simplement à MUXer les excellents minuteurs configurables du STM32 sur l'une des 32 sorties.Le matériel final éliminera le STM32 mais pour le prototypage et le développement, il est imbattable.

Graham
2018-10-02 02:23:09 UTC
view on stackexchange narkive permalink

Je fais quelque chose de très similaire au travail avec un DSP.J'ai un FPGA qui effectue la partie de synchronisation de précision.J'espérais utiliser une onde carrée du DSP pour tester la PLL pour la synchronisation de deux FPGA.En fait, j'ai trouvé que bien que les tolérances de synchronisation FPGA aient été fixées à environ 0,01us en fonction des tolérances d'horloge, mon DSP avait trop de choses à faire pour faire mieux que 0,1us.

Il s'agit cependant d'une boucle de traitement assez complète.Avec une boucle moins intensive, ça pourrait être mieux, bien sûr.Pour les parties qui devaient vraiment être déterministes, les exécuter au tout début de la boucle peut aider.Sachez cependant que bien que la latence d'interruption soit prévisible, elle est très différente de zéro!Pour ma plate-forme, c'est 91 tics d'horloge à 456 MHz.Je peux facilement obtenir une gigue sub-américaine à partir d'interruptions, mais les retards de microseconde ont besoin que la latence d'interruption soit intégrée dans les calculs.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 4.0 sous laquelle il est distribué.
Loading...