Misura Indici di riflessione e rifrazione Linea Coassiale con Arduino UNO

Lo studio delle Linee di Trasmissione, e del loro comportamento al variare della R di carico applicata alla sua terminazione, può essere effettuata con tecniche diverse. applicando all’ingresso un generatore di treno di impulsi oppure un’onda quadra.
La misura che effettueremo con Arduino è di quest’ultimo tipo.

Alla terminazione di una Linea di trasmissione il segnale trasmesso può subire, a seconda del tipo di Resistenza di carico applicata alla linea, una Riflessione parziale o totale con conseguente perdita di segnale sul carico.
Tale Riflessione dipende dal valore della Rl di carico sulla linea: se tale valore è uguale alla Impedenza caratteristica della linea, cioè adattamento del carico (nel nostro caso 50 ohm), si aveva totale Rifrazione, e quindi Riflessione nulla, con totale passaggio del segnale al carico. Se invece il valore di Rl è disadattato (nel nostro caso 220 ohm) si ha parziale Riflessione del segnale trasmesso, che ritorna verso l’ingresso della linea.
Nel caso limite di Rl=infinito (linea aperta) si ha totale Riflessione.

Gli Indici di Riflessione IRFl e di Rifrazione IRFr sono il rapporto % tra la Tensione Vi di ingresso e la VRFl o VRFr:

IRFl = VRfl/Vi*100
IRFr = VRfr/Vi*100

La linea sulla quale effettueremo le misure è un Cavo Coassiale di lunghezza 11 m avente impedenza caratteristica uguale a 50 ohm.
Applichiamo all’ingresso della linea un generatore di Onda Quadra di 3v di picco, con periodo molto maggiore del ritardo introdotto dalla linea, nel nostro caso f = 500 KHz, ed alla sua terminazione, in modo alternato gestito da Arduino, una Rl = 50 ohm (Linea Adattata) ed una Rl > 50 ohm (Linea Disadattata, nel nostro esempio Rl = 220 ohm).

Schema circuito di misura con Arduino

Il compito di Arduino è quello di acquisire sull’ingresso analogico A2 i valori del segnale in ingresso alla linea senza riflessione (caso Linea adattata) e con segnale parzialmente riflesso (caso Linea disadattata), e di gestire l’inserimento dell’una o dell’altra Rl con tempi prefissati usando le uscite digitali A0 e A3 che controllano l’eccitazione dei relè di inserimento.

Segnali che oltre ad essere acquisiti vengono anche visualizzati su Oscilloscopio digitale.

FIG.1 – Visualizzazione segnale di ingresso alla Linea con Rl adattata e Rl disadattata

Come si può notare dalla FIG.1B è possibile anche misurare il tempo di percorrenza del segnale nella linea dal momento in cui il segnale entra a quello in cui ritorna all’ingresso sommandosi dopo la riflessione (2t), e quindi la sua velocità di propagazione nella linea.

Alla scheda Arduino UNO è stato collegato un modulo Relè per l’inserimento delle due diverse resistenze di carico

 

FIG.2 – Circuito di misura
FIG.3 – Circuito di misura (particolare)

Il codice del programma Arduino:

/*
 * Programma per la Misura degli Indici di Rifrazione e Riflessione di una Linea Coassiale
 * 
 * Il programma controlla l'nserimento delle diverse R di carico (adattata->50ohm, disadattata->220ohm)
 * e, variandole in modo automatico, legge il valore di acquisizione del segnale entrante nella Linea.
 * Utilizzando la componente Riflessa che viene a sommarsi con Rl->disadattata, calcola
 * l'Indice IRFR e IRFL della linea coassiale.
 * 
 * Corso Informatica e Telecomunicazioni - IIS "Cattaneo - Dall'Aglio"
 * FunLab: funlab.info
 */

const int R50 = A0;
const int R220 = A3;
const int Vin = A2;
float ValoreVin50 = 0;
float ValoreVin220 = 0;
float VRifl = 0;
float VRifr = 0;
float IRifl = 0;
float IRifr = 0;
float IRifl_percent = 0;
float IRifr_percent = 0;

void setup() {
  pinMode(R50, OUTPUT);
  pinMode(R220, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  // Leggo il valore della Vin con R0=50
  digitalWrite(R50, HIGH);
  digitalWrite(R220, LOW);
  delay(100); //Ritardo necessario per permettere la commutazione delle RL
  ValoreVin50 = analogRead(Vin);
  //Serial.print("Vin50 = ");
  //Serial.println(ValoreVin50);
  delay(1000);
 
  // Leggo il valore di Vin + VRiflessa con R0=220
  digitalWrite(R50, LOW);
  digitalWrite(R220, HIGH);
  delay(100); //Ritardo necessario per permettere la commutazione delle RL
  ValoreVin220 = analogRead(Vin);
  //Serial.print("Vin220 = ");
  //Serial.println(ValoreVin220);

  // Calcolo il valore di Indice Riflessione
  VRifl = ValoreVin220 - ValoreVin50;
  VRifr = (2*ValoreVin50) - ValoreVin220;
  IRifl = VRifl / ValoreVin50;
  IRifr = VRifr / ValoreVin50;
  IRifl_percent = IRifl*100;
  IRifr_percent = IRifr*100;

  Serial.println("");
  Serial.println("VALORI DEGLI INDICI DI RIFLESSIONE E RIFRAZIONE LINEA COASSIALE");
  Serial.println("---------------------------------------------------------------");
  Serial.print("Indice Riflessione = ");
  Serial.println(IRifl);
  Serial.print("Indice Riflessione = ");
  Serial.print(IRifl_percent);
  Serial.println(" %");
  Serial.print("Indice Rifrazione = ");
  Serial.println(IRifr);
  Serial.print("Indice Rifrazione % = ");
  Serial.print(IRifr_percent);
  Serial.println(" %");
  Serial.println("");

  delay(9000);
}

Una volta caricato lo sketch su Arduino, aprendo il Monitor Seriale, vengono visualizzati i valori degli Indici di Riflessione e Rifrazione relativi e percentuali.