Domanda:
Precisione jitter inferiore al microsecondo: cosa usare?
ignoramusextraordinaire
2018-10-01 17:40:02 UTC
view on stackexchange narkive permalink

Ho quattro segnali di livello TTL che devono cambiare stato in un ordine particolare.

Dal segnale "vai" su una delle linee, tutte le alternanze delle altre linee verranno effettuate entro 100 noi. Gli altri tre segnali si alterneranno al massimo un paio di volte. L'inizio, la fine e la durata tra il cambiamento di stato che questi altri tre segnali commuteranno varia a seconda delle metriche nel sistema che sono note ben prima che si verifichi il segnale di avvio. Ma la temporizzazione è variabile, quindi la sequenza degli impulsi e la loro durata devono essere programmabili. I tempi e la durata sono noti prima dell'inizio della sequenza.

Ecco il problema, ho bisogno di una precisione di jitter inferiore al microsecondo. Il micro ARM a 120 MHz che sto utilizzando non può garantire tali profili di temporizzazione deterministici a causa del pipelining e di una serie di altri motivi per migliorare le prestazioni. Possiamo fare del nostro meglio per progettare il sistema per ridurre al minimo il jitter, ma voglio sapere se utilizza un micro più veloce oppure DSP o CPLD, PAL, ecc. Sono un modo tipico per ottenere la precisione e la risoluzione che sto cercando.

In passato con un micro a 8 bit funzionante a 8 MHz con un'istruzione per ciclo di clock potevo scrivere un assemblatore, mettere il micro in stato di stop, svegliarsi in caso di interruzione, contare alcuni cicli di clock e avere una precisione di 0,25 us

Quale tecnologia devo esaminare per ottenere questa risoluzione e accuratezza?

Gli FPGA faranno il trucco
Il pipelining causerà 10 tick di clock di jitter ???
Sarebbe utile avere una specifica o almeno alcuni esempi di quale segnale deve essere generato come risultato di quali altri segnali, con un tempo di fronte minimo e massimo consentito.
Sarebbe utile se tu potessi specificare esattamente quale parte stai usando.Per pipelining, intendi effettivamente la previsione del ramo?Come in, una parte con memoria cache potrebbe avere un comportamento indeterministico quando la previsione del ramo fallisce.Soprattutto quando sono coinvolti stati di flash e di attesa.Perché il pipelining non dovrebbe causare jitter, ma piuttosto rendere il codice più veloce nel complesso.E il pipelining esiste da molto prima di ARM, quindi il tuo vecchio MCU probabilmente ne aveva un po '.
Si inizia con una macchina a stati con requisiti di temporizzazione su tutti gli ingressi e le uscite, quindi si sincronizza con un clock stabile per eliminare il jitter, quindi si sceglie una soluzione.Non il contrario.cioè dal basso verso l'alto poi per altri motivi, dall'alto verso il basso per arrivare a una soluzione conveniente
* "In passato con un micro a 8 bit ..." * Esistono ancora micro a 8 bit.Alcuni di loro sono molto veloci.Perché non ne usi uno?
Anche un modesto Xtal a 32kHz per sincronizzare le uscite ha un periodo di 31 us e jitter di xxx ns usando la logica yyy.È coinvolto il tempo morto?in x us range?
"... un modo tipico per ottenere la precisione e la risoluzione che sto cercando." Sarebbe utile se ci fornissi la precisione e la risoluzione che stai cercando.Stai solo cercando "submicrosecond", cioè meno di 1us, o hai effettivamente un requisito più rigoroso?
Presumo che un generatore di ritardo digitale sia eccessivo per il tuo progetto?Quali sono le tue esigenze?
Sette risposte:
Olin Lathrop
2018-10-01 18:08:11 UTC
view on stackexchange narkive permalink

Non è chiaro quali siano esattamente i segnali che devi generare e la loro tempistica rispetto ai segnali in arrivo.

Tuttavia, 250 ns non è poi così difficile da ottenere con qualcosa come un dsPIC della serie EP, per esempio.Con una velocità di istruzione di 70 MHz, si ottengono fino a 17 cicli di istruzione di jitter consentito.È molto.

Se il segnale in ingresso causa un interrupt, la generazione dei segnali in uscita dalla temporizzazione dell'istruzione fissa ti darà molto meno di 17 cicli di jitter.Sarebbe ancora meglio se il segnale di ingresso potesse attivare un generatore PWM o simili.Tuttavia, non hai fornito informazioni sufficienti sulla natura dei segnali di uscita per sapere se l'hardware specifico disponibile su tali microfoni sarebbe applicabile.

Ciao Olin, ho intenzione di utilizzare Atmel ATSAMD51 e in questo momento non sono assegnate risorse di sistema.La priorità più alta sono questi quattro segnali in modo da poter assegnare le risorse secondo necessità.I segnali di uscita sono collegati ai driver FET.
La linea di microcontrollori ATSAMD51 ha una periferica del sistema di eventi che consente una comunicazione autonoma, a bassa latenza e configurabile tra Diverse periferiche possono essere configurate per generare e / o rispondere a segnali noti come eventi.Questo potrebbe adattarsi alle fatture della tua applicazione.Contiene anche un blocco logico personalizzato configurabile che potrebbe funzionare per la tua applicazione fornendo un'interazione minima al core mcu
Lundin
2018-10-01 18:23:15 UTC
view on stackexchange narkive permalink

Di solito è possibile ottenere questo tipo di tempo reale purché l'output non dipenda da software / interrupt.Cioè, i pin non sono impostati da un ISR o simile, nel qual caso si avrà un jitter di microsecondi.La latenza dell'interrupt potrebbe essere un tempo statico, ma non ci conterei, nel caso in cui più di un interrupt si attiva contemporaneamente ecc.

Potresti essere in grado di risolvere questo problema con la funzione di confronto dell'output del timer hardware.Cioè, tutti i pin rilevanti vengono impostati quando scade un timer, come ad esempio quando si utilizza PWM.Questo spesso può essere fatto con l'orologio di sistema o con la precisione dell'orologio di sistema / 2.Altre alternative sono DMA, se supportato per i pin specifici.

Questo può funzionare fino a 50-100 ns da qualche parte, dove sarai in balia delle caratteristiche analogiche dei pin.

E poi, ovviamente, non sarai in grado di ottenere una precisione migliore di quella consentita dal tuo oscillatore.Certamente non è possibile utilizzare un oscillatore RC incorporato, ma è necessario utilizzare un cristallo di alta precisione o un oscillatore esterno.

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

DMA e un timer?

Un paio di bus SPI e usa solo i pin dati (possibilmente di nuovo con DMA se hai bisogno di più di 32 intervalli di tempo)?

La mia sensazione è che 1us dovrebbe essere fattibile se scegli correttamente i tuoi pin IO e sei pronto a giocare ad alcuni giochi di basso livello.

100ns dovrei pensare, ma forse qualcosa di ambiguo con il caricamento di un chip ram QSPI e il clock del modello di bit usando un timer come orologio?

10ns è il territorio FPGA.

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

Verifica se disponi di timer in grado di pilotare più pin, tipicamente utilizzati per il controllo del motore (solitamente 4 o 6, rispettivamente per ponte H e trifase).In molti casi, tali timer hanno registri di "precaricamento" che consentono di modificare senza problemi il periodo e il ciclo di lavoro, il che significa che è possibile generare essenzialmente una forma d'onda arbitraria con essi.Se eseguite correttamente, tali forme d'onda sono precise fino alla risoluzione del timer.

Grazie Dmitry - Sto usando ATSAMD51, ha queste caratteristiche e sembra che potrebbe funzionare
gregb212
2018-10-01 18:39:49 UTC
view on stackexchange narkive permalink

Forse qualcosa come un Cypress PSOC con le celle logiche programmabili.Penso che Microchip abbia parti con capacità simili.Sono come microcontrollori con funzionalità FPGA minuscole e limitate che puoi personalizzare.Sembra che avrai bisogno di una qualche forma di DMA o FPGA per soddisfare le tue esigenze.

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

I dispositivi STM32 hanno periferiche timer molto potenti e configurabili.Possono essere concatenati o sincronizzati e offrono output accurati per il ciclo.Potresti dedicare un po 'di tempo alla lettura dei fogli dati per l'avvio dei dispositivi STM32L4 e H4, e magari rivedere parte della documentazione timer specifica di STMicro.

Uso personalmente i timer insieme a un FPGA per fornire tempi e sequenze accurati al microsecondo per 32 uscite digitali.L'FPGA non sta facendo nulla di specifico per la temporizzazione, ma piuttosto manda in MUX gli eccellenti e configurabili timer dell'STM32 su una delle 32 uscite.L'hardware finale eliminerà l'STM32 ma per la prototipazione e lo sviluppo non può essere battuto.

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

Sto facendo qualcosa di molto simile al lavoro con un DSP.Ho un FPGA che esegue la parte di temporizzazione di precisione.Speravo di utilizzare un'onda quadra dal DSP per testare il PLL per la sincronizzazione di due FPGA.In effetti, ho scoperto che sebbene le tolleranze di temporizzazione dell'FPGA fossero impostate a circa 0,01us in base alle tolleranze di clock, il mio DSP aveva troppo da fare per fare meglio di 0.1us.

Questo è un ciclo di elaborazione piuttosto completo.Con un ciclo meno intenso, potrebbe essere migliore, ovviamente.Per le parti che dovevano essere deterministiche, eseguirle all'inizio del ciclo può essere d'aiuto.Tieni presente che, sebbene la latenza degli interrupt sia prevedibile, è molto diversa da zero!Per la mia piattaforma sono 91 tick di clock a 456 MHz.Posso facilmente ottenere jitter sub-us dagli interrupt, ma i ritardi di microsecondi richiedono la latenza degli interrupt per essere incorporata nei calcoli.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 4.0 con cui è distribuito.
Loading...