[OT] richiesta di aiuto per programmino x Accordatore

Perché cappottare ste povere schede :slight_smile:

Per abbreviare hardware è meglio usare HW
HD si usa per alta definizione

Ricevuto

Campa1957

Salve a tutti,
questo è il mio primo messaggio sul forum, forum che seguo con interesse insieme a quello su www.arifidenza.it in quanto anche io vorrei progettare e realizzare prima o poi un accordatore d'antenna.
Il mio approccio è principalmente teorico: al momento valuto varie alternative, cerco di prevedere le prestazioni, poi forse procederò alla realizzazione di un prototipo, quindi se Campa57 procede alla realizzazione fisica a me va bene.

Come contributo scrivo alcuni miei commenti di cui gradirei ricevere i vostri pareri.

I relè: i relè SIEMENS VR311 sono bellissimi, ma costano 18 € l'uno !.
Un accordatore commerciale per 80-100 W mi pare sia venduto a soli 200 Euro.
Certamente non è competitivo progettarne e costruirne uno, ma lo facciamo per divertimento per imparare come si fa!

x Campa57: Per quale potenza intendi progettare l'accordatore? alcuni kW ?.
I relè VR311 presentano una resistenza dei contatti di soli 0,012 ohm, ma un relè più economico con una resistenza di contatto dieci volte maggiore non va ancora sufficientemente bene?
E la bobina del relè 24V 335 ohm: I = 24/335 = 70 mA , dissipa 240.07 = 1,7 watt.
Con tutti i relè eccitati (8+8)
1,7 = 20 watt, l'ambiente scaldicchia, è in una scatola ventilata? Se la scatola è stagna come fa a essere ventilata?
Forse dopo l'accordo possono venire sottoalimentati a 15 V senza che si sgancino, ma forse aumenta la resistenza dei contatti.
In ogni modo ci si possono saldare bobine e induttori direttamente sui contatti, risparmiando basetta mille-fori o lo stampato.

Un banco di 8+8 relè non si può pilotare direttamente con Arduino1, mancano le uscite necessarie; serve un "8 bit I/O expander with serial line" MCP23S08 seguito da "8bit darlington" ULN2803 Microchip usati dall'OM statunitense, o da altri equivalenti che però non conosco. Però occorre utilizzare una libreria per comandarli con la linea ISP, e per il momento complicherebbe il programma.

Non passerei a Arduino Mega, perché più costoso e utilizzante un controllerCPU a montaggio superficiale. Se si utilizzano solo componenti DIP è più semplice realizzare un kit economico con ATMEL già programmato, che sostituisce la schedina Arduino e che può venire montato da appassionati non attrezzati per le saldature su componenti miniaturizzati.

Lascierei il pin 13 libero, dato che pilota il LED di segnalazione.

Per le prime prove su un dimostratore del funzionamento mi accontenterei di un banco di 5 + 5 relè che dovrebbero essere sufficienti per un accordatore bi-tri-banda 14-21-28 MHz oppure 7-10-14 MHz.
Gli accordatori con 8+8 relè dovrebbero accordare da 3,5 a 30 MHz. Quelli con 9 da 1,8 MHz a 50 MHz.

Per collaudare l'accordatore userei carichi resistivi di 50, 100, 200 ohm da 5W almeno ; l'accordatore deve trasformarli in 50 ohm ossia ROS= 1, Gamma riflessione=0.
In condizioni più generali, il carico potrebbe essere una impedenza con parte reale compresa fra 50 e 300 ohm e reattanza fra -300 (capacitiva) e + 300 (induttiva) ohm.
Con condensatore connesso lato carico, una resistenza di carico minore di 50 ohm non viene accordata.

L'accordatore è pensato per essere utilizzato outdoor, messo vicino all'antenna (sul tetto e traliccio) ?. Se no un accordatore manuale vicino al RTX va bene lo stesso e costa meno.

Se si adoperassero relè di tipo "latch" con ritenuta magnetica dell'ultima posizione comandata?. Occorre duplicare il numero di uscite, perchè ognuno ha un comando di ON e uno di OFF, però una volta commutati non consumano corrente.

Con 5+5 relè e Arduino 1 rimangono disponibili i pin per la linea seriale, per capire che ROS legge Arduino e come funziona il programma.

Attenzione alla tolleranza delle induttanze: 5 bit >> 32 valori>> 100/32 = 3,2 % di tolleranza almeno.

Ora la diagnostica e la verifica del funzionamento.
Prima di preoccuparmi dell'accordo automatico, realizzerei un telecomando, variando induttanza e capacità con un interruttore e due pulsanti applicati agli ingressi (analogici commutati in digitali ) di Arduino. Interruttore:aperto opera su induttanza, chiuso: opera su capacità.
Pulsanti: incremento / decremento del banco selezionato. Attenzione: sviluppare un piccolo algoritmo per eliminare i rimbalzi dei pulsanti che possono provocare degli incrementi multipli.

SE NON FUNZIONA PERFETTAMENTE IN TELECOMANDO SICURAMENTE NON FUNZIONERA' IN AUTOMATICO.

Alleg un programmino che incrementa /decrementa di continuo L e C in modo che con un induttanzimetro si possa osservare una variazione a gradini uniformi della induttanza/capacità. Meglio ancora se osservata in modo grafico su oscilloscopio digitale.
Nel programmino, non spaventatevi: sono dichiarate variabili che non sono adoperate, sul mio Arduino Uno Rev.3 gira, ma non posso vedere le uscite comandi digitali, inoltre visualizza sul monitor del sistema di sviluppo i valori acquisiti dai due canali analogici.
Spero che funzioni.

Ho scritto queste note anche per me come promemoria per un eventuale articoletto.

Saluti a tutti, aspetto vostre osservazioni.
Marco 11/8/2013

Ecco il programma; non è testato spero che funzioni!!

 //...........................
/* IK1PXM Marco Ducco 8/8/2013 11/8/013  Ricerca automatica accordo di un accordatore LC da definire.
L'algoritmo agisce su pcC1 e pcC2 intesi come percentuale di comando 1, percentuale di comando 2, campo di escursione da 0 a 31.
Nel caso dell'accordatore LC uno è il comando dell'induttanza (0 il minimo, 31 il massimo), l'altro il comando della capacità.
Dato che l'algoritmo procede per tentativi, l'assegnazione  ai relè di pcC1, pcC2 è arbitraria.
Compilato con Arduino versione: 1.0.4 
*/
int stato_ric;
int step_ok_C1, step_ok_C2;
int cont_step;//protezione se l'algoritmo non termina
float Gamma,Gammap,Gamma_lim;
int  deltaPCC,dPCCmin;
int pcC1,pcC2,pcCmax;
boolean in_corso;

//definizioni delle uscite/ingressi digitali:
int outCp1 = 2; //comando capacità peso 1 assegnata alla uscita 2
int outCp2 = 3; //comando capacità peso 2 assegnata alla uscita 3
int outCp4 = 4;
int outCp8 = 6;
int outCp16 = 7;

int outLp1 = 8; //comando induttanza peso 1 assegnata alla uscita 8
int outLp2 = 9;
int outLp4 = 10;
int outLp8 = 11;
int outLp16 = 12;

int counter_in = 5;//ingresso riservato alla misura frequenza
int led = 13;//LED lampeggio per segnalare CPU viva


//simulatore rete, parametri banda 20 metri
//pcC1 = 60; //per cento apertura cond variabile C1 (in parallelo lato generatore)
//pcC2 = 84; //per cento apertura cond variabile C2 (in serie lato carico)
float RSC = 100;//resistenza serie iniziale del carico. viene cambiata coi tasti 5 e 6.
float XSC = 0;//reattanza serie del carico (positiva induttiva, negativa capacitiva)
float FMHz_rif = 14.2 ;//frequenza di lavoro di riferimento in MHz
float C1min = 20;// pF capacità minima condensatore C1
float DeltaC1 = 160.;// pF variazione C1 rispetto al minimo
float C2min = 20;//capacità minima condensatore C2
float DeltaC2 = 340.;//variazione C2 rispetto al minimo
float RSL = 0.5;// resistenza serie bobina (perdite resistive DC + effetto pelle)
float C3 =  450;// capacità di C3 in pF
float L1 =  1.1;//2.7 ;// induttanza in uH viene cambiata a passi del 5% coi tasti 7 e 8.
boolean pcC1_inc, pcC2_inc;
int V_rifl,V_dir;

void setup()
{
  Serial.begin(19200); // open the serial port at 19200 bps:
  //delay(1000);  // wait for a second    
  Serial.println(" programma sviluppo accordatore PXM");  
  pinMode(led, OUTPUT); 
  pinMode(counter_in, INPUT); //ingresso misura frequenza (futura miglioria da sviluppare)  
  pinMode(outLp1, OUTPUT);  pinMode(outLp2, OUTPUT);  pinMode(outLp4, OUTPUT);  pinMode(outLp8, OUTPUT); pinMode(outLp16, OUTPUT); 
  pinMode(outCp1, OUTPUT);  pinMode(outCp2, OUTPUT);  pinMode(outCp4, OUTPUT);  pinMode(outCp8, OUTPUT); pinMode(outCp16, OUTPUT); 
  
  stato_ric=0; //variabile della "macchina a stati" stato ricerca
  step_ok_C1=0; step_ok_C2=0; // contatori passi buoni nella ricerca
  cont_step=0; //contatore globale passi
  in_corso = true;

  pcC1=75;pcC2=75; //valori iniziali dei comandi
  deltaPCC = 4;// passo di variazione iniziale dei PCC 
  dPCCmin = 1;//mnimo valore del gradino di variazione
  pcCmax = 31;//limite sup comando

} 


void loop()
{
  sono_vivo();//temporizza di due secondi
  seq_incr_decr();// genera sequenza incremento, un passo ogni 2 secondi
 // ric_veloce_accordo();
  comandi_ai_rele();//da pcC1,pcC2 ai pin comando relè
 // accord_a_LC();
  acquisisci_Gamma();
  Serial.print ("V_rifl="); Serial.print (V_rifl);
  Serial.print ("   V_dir="); Serial.print (V_dir);
}


void sono_vivo()
{ //fa lampeggiare il LED  pin 13 su Arduino 
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}


void seq_incr_decr()
{ //fa variare di una unità a scaletta a salire e scendere in comandi pcC1 e pcC2, in modo da verificare
  //con un induttanzimetro o un capacimetro che l'induttanza e la capacità varino in modo regolare
  if (pcC1_inc) 
  { pcC1= pcC1 +1; if( pcC1> pcCmax){ pcC1=pcCmax; pcC1_inc=false;}}
  else 
{ pcC1= pcC1 -1; if( pcC1<=0){ pcC1_inc=true;}}
  if (pcC2_inc) 
 { pcC2= pcC2 +1; if( pcC2> pcCmax){ pcC2=pcCmax; pcC2_inc=false;}}
 else 
 { pcC2= pcC2 -1; if( pcC2<=0){ pcC2_inc=true;}}
  //delay(1000);  // wait for a second    
}


void comandi_ai_rele() //da pcC1, pcC2 contenenti un mumero fra 0 e 31 ai cinque pin comando relè
{
//Non è una struttura elegante, ma dovrebbe funzionare.
//comando ai relè dell'induttanza  
boolean rilas = HIGH; boolean attrat = LOW;// per invertire azione relè della bancata invertire HIGH con LOW 
if ((pcC1 && 1) !=0){ digitalWrite(outLp1, rilas);}else { digitalWrite(outLp1, attrat);}
if ((pcC1 && 2) !=0){ digitalWrite(outLp2, rilas);}else { digitalWrite(outLp2, attrat);}
if ((pcC1 && 4) !=0){ digitalWrite(outLp4, rilas);}else { digitalWrite(outLp4, attrat);}
if ((pcC1 && 8) !=0){ digitalWrite(outLp8, rilas);}else { digitalWrite(outLp8, attrat);}
if ((pcC1 && 16)!=0){ digitalWrite(outLp16, rilas);}else { digitalWrite(outLp16, attrat);}

//comando ai relè della capacità
rilas = HIGH; attrat = LOW;// per invertire azione relè della bancata invertire HIGH con LOW 
if ((pcC2 && 1) !=0){ digitalWrite(outCp1, rilas);}else { digitalWrite(outCp1, attrat);}
if ((pcC2 && 2) !=0){ digitalWrite(outCp2, rilas);}else { digitalWrite(outCp2, attrat);}
if ((pcC2 && 4) !=0){ digitalWrite(outCp4, rilas);}else { digitalWrite(outCp4, attrat);}
if ((pcC2 && 8) !=0){ digitalWrite(outCp8, rilas);}else { digitalWrite(outCp8, attrat);}
if ((pcC2 && 16)!=0){ digitalWrite(outCp16, rilas);}else { digitalWrite(outCp16, attrat);}
}

void acquisisci_Gamma()
{ // delay(1000); // Ritardo 1 s per attendere assestamento circuiti dopo commutazione relè: funzionale,ma  da modificare perchè brutto datop che blocca il funzionamento di tutto il processore
   V_rifl = readAnalogInput(A0);
   V_dir = readAnalogInput(A1);
    Gamma= float(V_rifl) / float(V_dir);
//    return ((1.0 + (float)(pot_rifl / pot_dir)) / (1.0 - (float)(pot_rifl / pot_dir)));
}

int readAnalogInput(byte input)
{ //lettura con media di un pin
    int tempRead = 0;
    for (byte i = 0; i < 10; i++) { tempRead += analogRead(input);}
    return (tempRead /= 10);
}

//----------fine-------------------------

edit by mod: per favore includi il codice usando gli appositi tag

Finalmente sono riuscito ad assemblare il prototipo 3.0 :slight_smile:

un paio di cosette per Leo72,
premesso che sugli ingressi per ora non ho inserito alcun segnale, il SW si comporta come segue:

  1. inserisce correttamente le 256 combinazioni della serie "L"
  2. fa la verifica di dove inserire la serie "C" ma non sa come farla, mi spiego dopo
  3. inserisce correttamente le 256 combinazioni di "C"
  4. finito il giro delle "C" segnala correttamente che non è riuscito a raggiungere il valore impostato e poi resetta tutta la serie "L" e lasciando "C" inserita riparte dall'inizio ed il giro prosegue all'infinito

spiegazione punto 2)
per fare la verifica di dove inserire la serie "C" dovrebbe:
a) inserire il primo scalino della serie "C"
b) memorizzare il nuovo valore di ROS ottenuto
c) attivare l'uscita A5
d) comparare il nuovo valore di ROS con il valore di ROS al punto b)
e) se nuovo ROS < o = ROS punto b) lasciare uscita A5 alta altrimenti riportarla bassa
f) iniziare il giro di "C" come fa adesso

punto 4)
una volta finiti i giri di "L" e di "C" senza aver raggiunto il valore impostato si ferma e segnala accordo non riuscito mediante il lampeggio veloce del led collegato su A2

altra cosetta,
una volta raggiunto o meno l'accordo, l'ultimo valore di ROS deve essere memorizzato prima dell'invio della segnalazione accordo riuscito / non riuscito.
In caso, durante l'esercizio, il valore di ROS subisca una variazione repentina, vuol dire che è stato fatto un cambio gamma, reset di tutte le uscite e si parte dall'inizio.

sperando di essere stato chiaro, attendo ritorno

x PXM rispondo in altro post.

Campa1957

benvenuto a marcopxm :slight_smile:

x campa: non sono del ramo, non ho mai avuto nemmeno un baracchino, sono della generazione internet e quindi mai ne avro' uno, fatta questa premessa mi chiedevo, ma il discorso di dove sia meglio agganciarsi, se lato trasmettitore o lato antenna, non e' una posizione fissa ? cioe' una volta assodato che il tuo impianto risponde meglio dal lato X a che serve ad ogni accensione rifare questo check ?

Ciao Testato

un accordatore automatico si usa prevalentemente con antenne 'sconosciute' nel senso che se sei in postazione fissa in teoria dovresti avere antenne accordate e non dovrebbe servirti accordarle.
Un accordatore automtico generalmente si usa fuori sede dove magari puoi solo buttare un pezzo di filo come viene.

x PXM

ben venuto nel Forum

hai messo insieme un po troppe domande :slight_smile:
per quanto riguarda un accordatore commerciale già lo uso normalmente, il piacere di autocostruire qualcosa è cosa ben diversa che andare in un negozio e comperare.
per quanto riguarda i relè, ne ho acquistato tempo fà un certo numero per un progetto, poi accantonato, dove avrebbe dovuto girare 1 Kw abbondante, adesso, viste anche le mie antenne, sarei contento di farci passare 200 o 300 W.

ciao

Campa1957

ecco, mi mancava questa variabile, grazie :slight_smile:

Ecco a voi HW 3.0

ciao

Campa1957

Ciao a tutti,

mi servirebbe una dritta per l'utilizzo del ULN2803, mi spiego, come da foto inserita pochi minuti fa, ho inserito nel circuito n.3 ULN2803, n.2 per invertire lo stato delle 16 uscite utilizzate per il pilotaggio dei relè delle due serie "L" e "C" visto che le schedine a relè invertono a loro volta, e n.1 per pilotare con 2 buffer in serie i due led di segnalazione.
Per i primi 2 nessun problema, per quanto riguarda il terzo con cui piloto i 2 Led, i led lampeggiando anzichè spegnersi del tutto rimangono a mezza luminosità e poi si accendono alla massima luminosità regolarmente.
Potrebbe mancare una resistenza verso il positivo o forse verso massa collegata sull'uscita di Arduino?
Prima di fare dei danni chiedo lumi :slight_smile:

grazie

Campa1957

Campa, i lumi, ma quelli al petrolio, te li darei in testa, non puoi continuare a pretendere che ti si leggano gli schemi di collegamento nel pensiero ]:D. Il 2803 si usa collegando il pin 10 a 5V ed il pin 9 a GND; i pin da 1 a 8 sono gli ingressi e quelli da 18 a 11 le relative uscite, attive basse; un LED si collega con il catodo su una uscita e l'anodo ai 5V mediante una R di limitazione (220-330 ohm); se invece di 5V ne stai usando 12 la R diventa di 560-680. Usato così il led si accende con 0 in ingresso e si spegne con 5V in ingresso, a meno che non stai usando qualche sorta di pwm in ingresso.
Se da queste info non trai nulla di utile devi rassegnarti a disegnare lo schema di collegamento tra micro, ULN, LED e quant'altro.

Ciao Michele,
come al solito hai ragione!
pero'................. :slight_smile: :slight_smile: :slight_smile:

Spiego meglio il problema, nel SW Leo72 ha utilizzato le 14 uscite da 0 a 13 più A0 e A1 per avere le 16 uscite di comando per i relè "L" e "C" oltre a questi ha usato A2 e A5, A2 per visualizzare cosa fà il SW e A5 per selezionare il punto di inserimento del ramo "C".
Vedendo i led a 1/2 luce invece che spento, ho pensato che bisognasse in qualche modo 'aiutare' le due uscite in questione, però prima di far fuori delle porte della scheda di Arduino ho chiesto lumi.
Alimento il 2803 a 12v direttamente dalla batteria di alimentazione e la resistenza per consumare meno l'ho messa da 1.000 ohm

Campa1957

Per quanto ne so, i segnali da A02 e A05 appartengono ai sei canali analogici di ingresso, che possono essere commutati come ingressi digitali, ma NON come uscite.

applicando un diodo LED con 1K in serie appeso al +12 V, l' ingresso va in protezione saturato ai +5V con un diodo interno al ATMEL,
la corrente nei diodi vale ( 12V - 5V - cicra 3VLED)/1kohm= 4 mA >> LED sempre accceso con media-bassa intensità.

No, i 6 pin analogici possono essere usati normalmente come pin in/out digitali

Campa, mi dai ragione e non disegni due linee di schema :disappointed_relieved:, confermami almeno che i pin A2 e A5 del micro sono collegati a due pin ingresso del 3° 2803, e sulle due corrispondenti uscite hai collegato i catodi dei led, quindi hai collegato gli anodi alle due R da 1kohm. Il pin 10 del 2803 lo hai collegato ai 12V? il pin 9 lo hai collegato a GND?

@ marco: ti confermo che i 6 pin analogici possono essere regolarmente usati come I/O digitali a tutti gli effetti, senza alcun limite rispetto agli altri 14; non so se nel ragionamento che hai fatto ti è chiaro che questi due pin del micro non sono collegati direttamente ai led ma tramite due stadi di un ULN2803; questo almeno è ciò che mi pare di capire. Purtroppo Campa non si rende conto che è quasi impossibile seguire un discorso, specialmente come li fa lui :sweat_smile:, e tradurlo all'istante in uno schema elettrico, e quindi dobbiamo lavorare di fantasia ed intuito; a volte la cosa può essere divertente, alla lunga stanca ed i problemi restano irrisolti, a buon intenditor....

Ciao Michele,

Campa, mi dai ragione e non disegni due linee di schema smiley-sad-blue, confermami almeno che i pin A2 e A5 del micro sono collegati a due pin ingresso del 3° 2803, e sulle due corrispondenti uscite hai collegato i catodi dei led, quindi hai collegato gli anodi alle due R da 1kohm. Il pin 10 del 2803 lo hai collegato ai 12V? il pin 9 lo hai collegato a GND?

ho fatto tutto esattamente come descritto.

Se non ricordo male, in un vecchio post di Leo72 c'è un accenno a delle resistenze di pull-up per gli ingressi analogici.
L'ho cercato ma senza riuscire a trovare nulla.

Campa1957

La versione che ti avevo allegato giorni fa non usa le pull-up interne.

Per Testato e Michele,
Grazie per le info sulla possibilità di adoperare i pin analogici anche come output digi.
Avevo interpretato male il data sheet del ATMega328P:

L'ho riletto e non è di comprensione semplice, e non avendone necessità avevo finora adoperato gli input ana solo come input digi.
A scambiare informazioni si impara sempre qualcosa. Ancora grazie.

Nel mio ultimo messaggio, avevo erroneamente supposto che i LED fossero connessi direttamente al controllore e non tramite il il driver open collector darlington.
Rimane da spiegare il comportamento segnalato da Campa: forse è dovuto alla mancanza di resistori di pull-up sulla uscita del controllore: con uscita open, la corrente nell'ingresso del driver è evanescente, ma sufficiente a fare passare un poco di corrente nel diodo LED. Però credo che le porte digitali siano in grado di fornire una corrente di source quando l'uscita è a livello alto, e questo contrasta con l'ipotesi di uscita open.
In futuro, per evitare cattive figure, mi asterrò dal diffondere supposizioni .

Per Campa57, auguro buon proseguimento nelle prove, e ti invito a diffondere uno schema elettrico con tutti i valori dei componenti.

73 a tutti da Marco

Ciao a tutti

avendo avuto conferma da Leo72 che non vengono usate le resistenze di pull-up interne, ne collegherò una per il pin A2 e una per il pin A5 verso il +5V.
Potrebbe essere utile mettere la resistenza di pull-up anche su A0 e A1 ???
Se ho capito bene il valore dovrebbe essere di 10Kohm, mi date conferma ???

Per quanto rigurda lo schema in questa fase mi sembra talmente semplice da non essere utile, comunque butto giu qualcosa ben volentieri in questi giorni.

Campa1957

Campa1957:
avendo avuto conferma da Leo72 che non vengono usate le resistenze di pull-up interne, ne collegherò una per il pin A2 e una per il pin A5 verso il +5V.

Bastava guardare il codice :wink:

Potrebbe essere utile mettere la resistenza di pull-up anche su A0 e A1 ???
Se ho capito bene il valore dovrebbe essere di 10Kohm, mi date conferma ???

No. Ti altererebbe la lettura. Casomai una pull-down per tenere a 0 il pin in modo da non avere letture flottanti quando non colleghi nulla agli ingressi analogici.