Vai al contenuto
PLC Forum


ERA: generatore onda quadra arduino


kym

Messaggi consigliati

Possiamo riprendere qui la vecchia discussione, penso.

Si parlava di codici per arduino in grado di generare un onda quadra con duty cycle e frequenza variabili indipenentemente.

 

Io ho trovato questo: https://www.youtube.com/watch?v=HY2X4oEqBMg&feature=plcp

 

 

Che sto al momento usando (il codice è sul forum ufficiale di arduino), e per le basse frequenze è ottimo.

Poi come abbiamo provato io e Livio, salendo di frequenza si discosta molto dalla frequenza visualizzata rispetto a quella realmente generata vista con un frequenzimetro.

 

Il punto è che oggi mi son messo a lavorare su un menù per renderlo autonomo...

Mentre guardavo i comandi mi si è accesa la lampadina delle forse cazzate forse idee :roflmao:

 

Arduino, che monta un ATMEGA328  lavora con clock esterno a 16Mhz .....

Ora mi chiedo, visto che il problema sono i prescaler e le divisioni, perchè non lo facciamo lavorare ad 1Mhz ????

Abbiamo la scelta di poterlo far lavorare ad 8Mhz e attivando il divide anche a 1Mhz e poi volendo anche a 128Khz

 

Per l'uso che ne devo fare io potrebbero bastare persino 128Khz se questo giova ad avere una maggiore precisione, altrimenti 1Mhz che è la frequenza di default del micro prima che il bootloader e l'ide di arduino modifichino i fuse per farlo lavorare con clock esterno nel caso di arduino con quarzo da 16Mhz.

 

Si potrebbe provare... magari acquisisce precisione

Link al commento
Condividi su altri siti


Semmai dovresti farlo lavorare a 160 Mhz (ammesso che accetti una simile frequenza).

Come ti ho spiegato è il fattore di divisione quello che influisce  sulla quantizzazione e sulla precisione.

Più il fattore di divisione è elevato, maggiore è la precisione e migliore è la risoluzione.

Salendo di frequenza di uscita devi diminuire il fattore di divisione, quindi diminuisce la risoluzione e la precisione.

Te lo avevo già spiegato.

Se il timer1, che è quello usato da quel generatore, lo alimenti con una frequenza esterna, e si può fare perchè è previsto, puoi fare un ottimo generatore con variazioni continue e precise di freqeunza.

Link al commento
Condividi su altri siti

Azz io avevo capito il contrario Livio, cioè che la divisione era da abbassare non da alzare....  e nella mia ignoranza ci avevo pensato pure perchè ho pensato che la frequenza madre fosse più precisa 1mhz generatore 1mhz clock micro....

 

Ma con che frequenza lo dovresti fare alimentarlo dall'esterno il timer1? con più range?

Non riesco a capire cosa si potrebbe fare....

 

160Mhz ??? magari, 20mhz è il massimo 30mhz overcloccato pare ci arrivi pure.... ma non di più.

 

Link al commento
Condividi su altri siti

Se tu usi un generatore esterno variabile, per esempio da 2 a 16 MHz puoi combinare le 2 azioni: la variazione della frequnza di clock ed il fattore di divisione, in questo modo la rispluzione diventa molto elevata e non ci sono buchi. In alcuni casi mantieni fisso il fattore di di divisione e vari la frequenza.

 

E' un problema che si ha sempre quando si usa questa tecnica.

Io l'ho incontrato per la prima volta circa 40 anni fa quando sviluppai un sintetizzatore digitale di frequenza. Il mio capo che aveva progettato il sistema, per conciliare la risoluzione minima di 1 kHz tra i canali, con la stabilità di frequenza che richiedeva almeno 100 kHz di riferimento, ipotizzò un'architettura che prevedeva 3 loops a 3 frequenze differenti . Ognuno dei 3 oscillatori variabili lavorava a passi di 100kHz. facendoli battere opportunamente tra di loro si otteneva tutta l'escursione di frequenza necessaria con intervalli di 1 kHz.

 

Non è un lavoretto facile, se lo vuoi fare tutto in automatico.

Link al commento
Condividi su altri siti

Ho visto, è complicata per me la questione soprattutto perchè lo voglio automatico.

Intanto sto facendo un menù....

 

Vorrei usare un encoder rotativo con il push che salta tra i due numeri ma non ho un encoder in mano ed ho un dubbio:

 

passo che fare il menù ho capito come fare, il problema è che non so come fare per avere tutto su un unica schermata, cioè, io posso ogni volta che premo l'encoder switchare ad uno stato dove imposto la freq. ed al successivo click passo al duty ed al successivo ritorno alla schermata principale dove li vedo entrambi.

 

Ecco così non mi piace un granchè vorrei fare così:

 

schermata principale di un 16x2:   prima riga        "FREQ ................. D/C"

                                                      seconda riga   " xxxx hz/khz"          xxx%"

 

Premendo ed alla prima pressione vorrei che senza cambiare schermata avessi una segnalazione che sto cambiando il campo freq. quindi che diventasse che so in negativo (che mi pare non si possa fare!) o che lampeggiasse (idem) o che venisse contornato da un riquadro (idem)..... la stessa premendo ancora una volta per il D/C e poi ripremendo ancora tornasse alla normale visualizzazione.

 

Che fare?

 

Io posso riuscire a farlo che premo, sparisce il D/C imposto la freq.... premo ancora sparisce la FREQ e viene il D/C premo e torna in visualizzazione normale, ma fa schifo così.

potrei mettere due encoder uno per freq ed uno per D/C forse così viene più carino si possono variare insieme a due mani, ma premendo l'encoder siamo sempre li come so che è pronto ad editare il campo se non posso farlo lampeggiare/sottolineare etc.???

 

usando un display 20x4 potrei far venire un carattere "custom" subito sotto e sopra il campo ..... ma credo che per fare un bel lavoro ci vorrebbe un display grafico.

 

che ne dici?

 

Dici che usare un quarzo di qualità esterno non migliori un pochino? Ho letto che i quarzi di arduino (specie quelli mini/nano) non spicchino in precisione....

Link al commento
Condividi su altri siti

Scusa perchè non ai 4 tasti aumenta/diminuisci frequenza e aumenta/diminuisci duty cycle. Sulle 2 righe del display compaione entrambi contemporaneamente. Con un 2x19 ed un ingresso analogico che legge il partitore dei 4 tasti hai risolto tutto.

Link al commento
Condividi su altri siti

Con l'encoder credo sia più veloce con la rotazione....

 

Non sarebbe male fare due passi in più alla pressione dell'encoder e fare la selezione anche della scala passi da 1hz 10hz 100hz 1000hz  in modo che se devi impostare 1687HZ non devi fare più di 1500 click  stessa cosa per il D/C  passi da 1 o da 10

Link al commento
Condividi su altri siti

Non hai mai visto come lavorano i tasti di set point? Se manntieni la pressione li fai avanzare velocemente.

Se vuoi avere la variazione istantane, basta aggungere il tasto enter.

hai pensato a cosa far contare gli impulsi di encoder? ed a come discriminare il conteggio avanti/indietro?

Link al commento
Condividi su altri siti

Ho trovato una libreria già fatta ma non la posso provare perchè non ho ancora un encoder mi devono arrivare.

E ma poi devi fare enter tra un valore e l'altro io lo voglio con variazione effettiva subito.

 

Come mettere i 4 bottoni che dicevi anche tu, SU-GIU sotto freq e D/C  ed è lento passare da un valore basso ad uno più alto.

Si può settare una velocità di avanzamento tenendo premuto un bottone a più scale? tipo fare una cosa così:

 

se premo click avanza di uno se tengo premuto < di 3 sec avanza di 5 ogni mezzo secondo se la pressione supera i 5 secondi avanza di 300 al secondo

 

Livio i pulsanti con il partitore che valori di resistenze tra una e l'altra? 10k?

 

 

Link al commento
Condividi su altri siti

Il valore di resistenza non ha importanza.

Per leggere l'encoder hai bisogno, se è veloce, di un contatore e di un circuito di discriminazione avanti/indietro.

I contatori abilitati al conteggio di segnale esterno sono 2: timer0 e timer1. Il timer 0 è inutilizzabile perchè serve tutte le librrerie di "dalay()", il timer1 lo usi per generare il segnale.

Se l'encoder ha pochi impulsi per giro lo puoi leggere con 2 ingressi, però sei lo stesso lento.

 

Quote

se premo click avanza di uno se tengo premuto < di 3 sec avanza di 5 ogni mezzo secondo se la pressione supera i 5 secondi avanza di 300 al secondo

 

Si questa può essere un'ipotesi di lavoro.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...