software:devices:dac

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Prossima revisione
Revisione precedente
software:devices:dac [2014/10/23 14:57] – modifica esterna 127.0.0.1software:devices:dac [2020/07/13 15:06] (versione attuale) qem103
Linea 1: Linea 1:
 +====== DEVICE DAC ======
 +
 +
 +====== - Introduzione ======
 +
 +Il device interno DAC permette di gestire un’uscita analogica in tensione +/- 10 V con risoluzione 16 bit. Le principali caratteristiche del device sono: \\
 +
 +  * impostazione in bit del valore di tensione da generare in uscita;
 +  * applicazione di un valore di offset alla tensione in uscita;
 +  * applicazione di un limite minimo e massimo alla tensione in uscita;
 +  * inversione del segno della tensione in uscita.
 +
 +
 +===== - Dichiarazione del device =====
 +
 +Nella unit di configurazione, la sezione INTDEVICE deve essere dichiarata in modo tale che siano presenti le risorse hardware necessarie all'utilizzo del device DAC. Deve essere presente almeno un'uscita analogica. Nella sezione INTDEVICE della unit di configurazione deve essere aggiunta la seguente definizione:
 +
 +<code QCL>
 +;---------------------------------
 +; Devices definitions
 +;---------------------------------
 +INTDEVICE
 +<device name>  DAC  <IOutA>
 +</code>
 +
 +dove:
 +^Nome campo^Descrizione^Esempio^Note^
 +|<device name>|Nome assegnato al device.|AnOut| |
 +|DAC|Parola chiave che identifica il device uscita analogica.| | |
 +|<IOutA>|Indirizzo hardware del componente DAC dell'uscita analogica.|3.AN01| |
 +
 +^:info:^Differentemente da altri device, per il device DAC non viene introdotto il tempo di campionamento in quanto si limita a convertire il dato in ingresso e ad aggiornare l'uscita solamente nel momento in cui è introdotto il dato.^
 +
 +** Esempio **
 +
 +<code QCL>
 +;---------------------------------
 +; Devices definitions
 +;---------------------------------
 +INTDEVICE
 +AnOut DAC  2.AN01
 +</code>
 +
 +
 +===== - Descrizione del funzionamento =====
 +
 +Lo schema a blocchi del device è il seguente:
 +{{ :software:devices:dac:dac_01.png?nolink650 |}}
 +
 +Il device DAC, poiché lavora con una risoluzione di 16 bit, accetta in ingresso valori compresi fra -32768 e 32767: il valore di tensione dell'uscita è proporzionale al valore introdotto dall'utilizzatore. Il device ha comportamento simmetrico rispetto il valore zero di tensione analogica a meno di un eventuale valore di offset introdotto.
 +I valori di tensione analogica minimo e massimo possono essere limitati con i parametri lowlim ed uplim, sempre restando entro il limite ±10 V:
 +  * 32767 --> +10 V (massimo valore introducibile),
 +  * -32768 --> -10 V (minimo valore introducibile).
 +Il valore che si introduce nel device per ottenere una tensione analogica VOUT (in V) viene calcolato tramite una proporzione.
 +  * Per valori positivi: in = (VOUT * 32767) / 10,
 +  * per valori negativi: in = (VOUT * 32768) / 10.
 +
 +
 +==== - Elenco Parametri ====
 +
 +=== - in ===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Input DAC|
 +|dim=Word|
 +|default=Ritentivo|
 +|accesstype=Read - Write|
 +|um=-|
 +|id=-|
 +|range=-32768÷32767|
 +|wrcond=-|
 +|longdescr=Parametro che permette di scegliere il valore di tensione in uscita dal DAC. Esso deve essere compreso nell'intervallo -32768÷32767. Per ottenere una tensione analogica VOUT (in V) il parametro in viene calcolato tramite una proporzione:
 +  * Per valori positivi: in = (VOUT * 32767) / 10,
 +  * per valori negativi: in = (VOUT * 32768) / 10.}}
 +-----------------------------------------------------------------------------------------------------------------------------------
 +
 +=== - offset ===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Output offset|
 +|dim=Word|
 +|default=Ritentivo|
 +|accesstype=Read - Write|
 +|um=-|
 +|id=-|
 +|range=-32768÷32767|
 +|wrcond=-|
 +|longdescr=Offset dell'uscita analogica. Questo parametro definisce la correzione dell'uscita analogica, viene introdotto in valori interi compresi tra -32768 e 32767 e perciò si sfrutta la consueta proporzione per avere un valore in Volt.}}
 +-----------------------------------------------------------------------------------------------------------------------------------
 +
 +=== - uplim ===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Valore massimo di tensione in uscita|
 +|dim=Word|
 +|default=Ritentivo|
 +|accesstype=Read - Write|
 +|um=-|
 +|id=-|
 +|range=-32768÷32767|
 +|wrcond=-|
 +|longdescr=Questo parametro indica la tensione massima di uscita dal device. Se il valore calcolato dal DAC oltrepassa //uplim// questo viene forzato al valore del parametro. Il valore introdotto può essere sia positivo che negativo con valori interi compresi tra -32768 e 32767; per ottenere un valore in Volt si sfrutta la consueta proporzione.}}
 +-----------------------------------------------------------------------------------------------------------------------------------
 +
 +=== - lowlim ===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Valore minimo di tensione in uscita|
 +|dim=Word|
 +|default=Ritentivo|
 +|accesstype=Read - Write|
 +|um=-|
 +|id=-|
 +|range=-32768÷32767|
 +|wrcond=-|
 +|longdescr=Questo parametro indica la tensione minima di uscita dal device. Se il valore calcolato dal DAC oltrepassa //lowlim// questo viene forzato al valore del parametro. Il valore introdotto può essere sia positivo che negativo con valori interi compresi tra -32768 e 32767; per ottenere un valore in Volt si sfrutta la consueta proporzione.}}
 +-----------------------------------------------------------------------------------------------------------------------------------
 +
 +=== - out ===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Output DAC|
 +|dim=Word|
 +|default=Ritentivo|
 +|accesstype=Read|
 +|um=-|
 +|id=-|
 +|range=//lowlim//÷//uplim//|
 +|wrcond=-|
 +|longdescr=Parametro che esprime il valore di tensione di uscita del dispositivo DAC. Il valore visualizzato è la somma algebrica tra i valori impostati nei parametri in e
 +offset. Se il valore dovesse oltrepassare i limiti fissati da uplim e lowlim, out sarà forzato al valore massimo o minimo preimpostato. Anche questo parametro
 +è espresso con valori interi compresi tra -32768 e 32767 che sono convertiti in Volt tramite la consueta proporzione.}}
 +
 +
 +==== - Elenco Stati ====
 +
 +=== - st_lowlim ===
 +{{template>lib:tpl:tpl-s-statedev-010
 +|shortdescr=Stato di superamento del limite inferiore per la tensione d'uscita|
 +|default= Ritentivo|
 +|id= - |
 +|longdescr=Stato che segnala il superamento del limite inferiore di tensione in uscita. Ciò significa che il device ha calcolato un valore di tensione che supera il limite
 +imposto lowlim e quindi l'uscita è stata forzata al valore lowlim:
 +  * 0: valore in uscita entro il limite inferiore, 
 +  * 1: superamento del limite inferiore per la tensione d'uscita.
 +}}
 +-----------------------------------------------------------------------------------------------------------------------------------
 +
 +=== - st_uplim ===
 +{{template>lib:tpl:tpl-s-statedev-010
 +|shortdescr=Stato di superamento del limite superiore per la tensione d'uscita|
 +|default= Ritentivo|
 +|id= - |
 +|longdescr=Stato che segnala il superamento del limite superiore di tensione in uscita. Ciò significa che il device ha calcolato un valore di tensione che supera il limite
 +imposto uplim e quindi l'uscita è stata forzata al valore uplim:
 +  *  0: valore in uscita entro il limite superiore, 
 +  * 1: superamento del limite superiore per la tensione d'uscita.
 +}}
 +-----------------------------------------------------------------------------------------------------------------------------------
 +
 +=== - st_outrev ===
 +{{template>lib:tpl:tpl-s-statedev-010
 +|shortdescr=Stato di inversione del segno della tensione d'uscita|
 +|default= Ritentivo|
 +|id= - |
 +|longdescr=Stato che segnala che, in seguito al comando OUTREV, il valore della tensione d'uscita è stato cambiato di segno.
 +}}
 +
 +
 +==== - Elenco Comandi ====
 +
 +I comandi a disposizione per gestire il device sono qui elencati: il device esegue i comandi nell'ordine in cui sono stati ricevuti.
 +
 +
 +=== - OUTREV ===
 +{{template>lib:tpl:tpl-s-cmddevice-010
 +|cond= - |
 +|shortdescr=Inversione del segno della tensione d'uscita.|
 +|id= - |
 +|longdescr=La tensione d'uscita viene invertita di segno.}}
 +-----------------------------------------------------------------------------------------------------------------------------------
 +
 +=== - OUTDIR ===
 +{{template>lib:tpl:tpl-s-cmddevice-010
 +|cond= - |
 +|shortdescr=Ripristino del segno della tensione d'uscita.|
 +|id= - |
 +|longdescr=Il segno della tensione d'uscita viene ripristinato.}}
 +-----------------------------------------------------------------------------------------------------------------------------------
 +
 +
 +===== - Limitazioni =====
 +
 +Nessuna limitazione.
 +
 +
 +===== - Esempio applicativo =====
 +
 +In questa sezione si vuole fornire una porzione di codice che faccia da esempio all'utilizzatore per poter muovere i primi passi utilizzando il device che si sta trattando.
 +Come è già stato chiarito è necessario, come primo passo, dichiarare correttamente il device nella unit di configurazione. In seguito sarà possibile creare una nuova unit Qcl in cui scrivere il codice per comandare lo strumento. Si riporta qui di seguito una porzione di codice adeguatamente commentata che esegua alcune semplici operazioni con il device.
 +
 +==== - Unit di configurazione ====
 +
 +<code QCL>
 +[...]
 +BUS
 +    1   1K31F   30
 +    2         .
 +    3   1MG8F   .
 +    4   .
 +  
 +INPUT
 +  ifChangeOut F 3.INP01 ;Output voltage change command
 +  
 +INTDEVICE
 +  AnalogOut DAC 3.AN01
 +</code>
 +
 +==== - Unit QCL ====
 +
 +<code QCL>
 +SYSTEM
 +  slOutAna    L IN         ;Variable for analog output
 +  
 +GLOBAL
 +  gfChange    F         ;Rise edge flag
 +  
 +BEGIN
 +  ; Initializations
 +  AnalogOut.offset = 0 
 +  AnalogOut.uplim = 32767      ;Max analog output as 10V
 +  AnalogOut.lowlim = -32768    ;Min analog output as -10V
 +  AnalogOut.OUTDIR             ;Set the right analog output sign
 +  WAIT NOT AnalogOut.st_outrev ;WAIT the right state
 +  slOutAna = 0                 ;Set the variable as 0V
 +MAIN:
 +  IF ifChangeOut
 +    IF NOT gfChange;Attende attivazione ingresso
 +      gfChange= 1 ;Setta il flag di cambio avvenuto
 +      AnalogOut.in = (slOutAna * AnalogOut.uplim) /100 ;Set the device analog output
 +    ENDIF
 +  ELSE
 +    gfChange = 0 ;Resetta il flag di cambio avvenuto
 +  ENDIF
 +  
 +  WAIT 1
 +  JUMP MAIN
 +  
 +END
 +</code>
 +
 +Quando l'ingresso //ifChangeOut// viene attivato, sul fronte di salita, viene aggiornato il valore di tensione in uscita tramite il device DAC dichiarato (che abbiamo chiamato //AnalogOut//). Il valore in decimi volt della tensione è contenuto nella variabile //slOutAna//. Un'altra unit presente nel progetto potrebbe accedere alla variabile //slOutAna// e impostare il valore voluto.
 +