Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

A.Uno. Generare quadra circa 1 kHz

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteMassimoB, Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[1] A.Uno. Generare quadra circa 1 kHz

Messaggioda Foto UtenteMarcoD » 14 dic 2022, 10:26

Cerco un pezzo di programma su Arduino Uno per generare un segnale a onda quadra
di circa 1 kHz, che attraverso un filtro passa basso trasformo in una sinusoide abbastanza pulita.
Attualmente adopero provvisoriamente l'istruzione " analogWrite ( 11, 128); " che mi genera la quadra sul pin 11 con la frequenza di 490 Hz.
Quando voglio l'uscita OFF adopero " analogWrite ( 11, 0); "
E' un'uscita PWM, il ciclo utile dell'uscita varia fra 0 %, 0 e 100 %, 255; il valore 128 è a metà e viene l'onda quadra al 50 %.
Non so se altri tipi più moderni di Arduino hanno una maggiore frequenza del PWM.
O_/
Avatar utente
Foto UtenteMarcoD
11,0k 5 9 13
Master EY
Master EY
 
Messaggi: 5773
Iscritto il: 9 lug 2015, 16:58
Località: Torino

0
voti

[2] Re: A.Uno. Generare quadra circa 1 kHz

Messaggioda Foto Utentestefanopc » 14 dic 2022, 11:22

Cercando in rete si trova molto materiale al riguardo.
Ad esempio.
https://electronics-fun.com/arduino-sin ... generator/
https://www.electronicwings.com/users/s ... rduino-uno
Naturalmente bisogna fare qualche prova e magari ripassare il paragrafo sul datasheet ufficiale del produttore.
Certo che hanno proprio risparmiato sulla sua stesura alla Atmel #-o
Ciao
600 Elettra
Avatar utente
Foto Utentestefanopc
8.408 4 8 13
Master EY
Master EY
 
Messaggi: 3106
Iscritto il: 4 ago 2020, 9:11

0
voti

[3] Re: A.Uno. Generare quadra circa 1 kHz

Messaggioda Foto UtenteMarcoD » 14 dic 2022, 11:34

Grazie, ma non mi va bene, permette di generare sinusoidi solo fino a circa 50 Hz.
Adopera l'istruzione " delayMicroseconds(..); che impedisce al programma di fare altro.

Mi servirebbe un qualcosa che dimezza l'intervallo di tempo dell'istruzione " millis() " ,
ossia a passi di 0,5 ms invece che 1 ms.


Oppure impostare un timer a 0,5 ms che scatena un interrupt nella cui routine viene commutata una uscita digitale.

Ma non lo so fare :(

Chiedo cose che l'ambiente arduino non prevede e forse non permette.
Avatar utente
Foto UtenteMarcoD
11,0k 5 9 13
Master EY
Master EY
 
Messaggi: 5773
Iscritto il: 9 lug 2015, 16:58
Località: Torino

0
voti

[4] Re: A.Uno. Generare quadra circa 1 kHz

Messaggioda Foto Utentestefanopc » 14 dic 2022, 12:23

Io comincierei ad approfondire l'utilizzo di TIMER1 con i vari registri dedicati.
http://www.gammon.com.au/timers
C'è da perdere un po' di tempo per imparare la filosofia di funzionamento ma ci si arriva abbastanza tranquillamente .
https://m.youtube.com/watch?v=jf4nHaLD1i4
Ciao
600 Elettra
Avatar utente
Foto Utentestefanopc
8.408 4 8 13
Master EY
Master EY
 
Messaggi: 3106
Iscritto il: 4 ago 2020, 9:11

0
voti

[5] Re: A.Uno. Generare quadra circa 1 kHz

Messaggioda Foto Utentespeedyant » 14 dic 2022, 12:31

Io con micros() sarei arrivato a circa 60kHz
Son quello delle domande strane!
Avatar utente
Foto Utentespeedyant
4.878 3 6 8
Master
Master
 
Messaggi: 3672
Iscritto il: 9 lug 2013, 18:29
Località: Torino

2
voti

[6] Re: A.Uno. Generare quadra circa 1 kHz

Messaggioda Foto UtenteIlGuru » 14 dic 2022, 12:36

Non per farmi pubblicità, ma magari può esserti utile:
https://ilguru.eu/programmazione-avr-timer-counter0-e-pwm/
Si può arrivare ben oltre il kHz
\Gamma\nu\tilde{\omega}\theta\i\ \sigma\epsilon\alpha\upsilon\tau\acute{o}\nu
Avatar utente
Foto UtenteIlGuru
5.144 2 10 13
G.Master EY
G.Master EY
 
Messaggi: 1842
Iscritto il: 31 lug 2015, 23:32

0
voti

[7] Re: A.Uno. Generare quadra circa 1 kHz

Messaggioda Foto Utentestefanopc » 14 dic 2022, 12:46

Molto interessante.

Giusto per curiosità in questo tutorial si fa qualcosa di simile a 50 Hz.
https://m.youtube.com/watch?v=BWouNZAFWG0
Ciao
600 Elettra
Avatar utente
Foto Utentestefanopc
8.408 4 8 13
Master EY
Master EY
 
Messaggi: 3106
Iscritto il: 4 ago 2020, 9:11

0
voti

[8] Re: A.Uno. Generare quadra circa 1 kHz

Messaggioda Foto UtenteThEnGi » 14 dic 2022, 15:12

Se non vuoi imparare niente ci sono le librerie per generare un sPWM
Dai un occhiata qua trovi belli spunti link (leggi lo stesso fa ottimi esempi )

Dubito che riesci a fare fare altro al Arduino, sicuramente non tramite IDE. Devi abbassarti di livello e usare le vere potenzialità del chip. (basta il C, non serve l'Assembly). Altrimenti vai su un chip più performante.
Anche perché la risoluzione del PWM di Arduino è limitata a 8 bit e fatica a generare una sinusoide "bella".

Cosa deve fare questa sinusoide/quadra ?

Sicuramente partirei dal datasheet del ATMEGA328P, anche perché c'è un capitolo dedicato al PWM (3 modalità addirittura)

O_/

ps. A naso con i classici 16MHz viaggi a circa 60KHz
Ultima modifica di Foto UtenteThEnGi il 14 dic 2022, 15:14, modificato 1 volta in totale.
Avatar utente
Foto UtenteThEnGi
426 4 7
Sostenitore
Sostenitore
 
Messaggi: 661
Iscritto il: 6 ott 2022, 18:43

0
voti

[9] Re: A.Uno. Generare quadra circa 1 kHz

Messaggioda Foto UtenteEcoTan » 14 dic 2022, 15:13

MarcoD ha scritto:impostare un timer a 0,5 ms che scatena un interrupt nella cui routine viene commutata una uscita digitale.

Lo stesso timer ha una modalità "output compare" (richiamata tramite il Timer/Counter Control
Register) grazie alla quale genera un'onda quadra direttamente su un pin di uscita, senza far girare il processore.
Avatar utente
Foto UtenteEcoTan
6.819 4 11 13
Expert EY
Expert EY
 
Messaggi: 4728
Iscritto il: 29 gen 2014, 8:54

0
voti

[10] Re: A.Uno. Generare quadra circa 1 kHz

Messaggioda Foto UtenteMarcoD » 14 dic 2022, 15:55

Ringrazio tutti per le utili informazioni.
Al momento ho scoperto leggendo nei link ricevuti che entrambe le informazioni su arduino erano parzialmente corrette:
Ho verificato con l'oscilloscopio che la frequenza PWM dell'uscita 11 è 480 Hz, mentre quella dell'uscita 6 è circa 960 Hz. Quindi entrambe le informazioni di 480 e 960 Hz erano corrette, ma non specificavano le uscite.

Ora una breve spiegazione forse confusa su cosa cerco di fare solo per divertimento.
Mi sto dedicando con molta calma a provare un " direction finder" (radiogoniometro) per
V/UHF FM di cui avevo realizzato un prototipo anni fa per individuare un disturbatore;
E' un radiogoniometro a discontinuità ( o salto) di fase, costituito da due antenne distanti fra loro meno di mezza lunghezza d'onda, con un commutatore elettronico che le commuta alternativamente a 800 Hz al ricevitore; finché le due antenne non sono parallele (esattamente equidistanti) al fronte d'onda, si sente nella ricezione FM la nota della frequenza della commutazione.
Al momento lo ho provato all'interno della abitazione, funziona, ma pare essere influenzato dalla presenza di altre antenne/fili presenti a pochi metri.

Per validarlo intendo generare una portante con un TX a 144600 kHz dalla mia abitazione, e poi temperatura esterna permettendo, spostarmi attorno a casa. Vorrei che la portante sia anche modulata a intervalli per capire come può interferire con la frequenza di commutazione delle antenne, e per rimanere nella legalità devo anche codificare in morse o RTTY l'emissione del nominativo ogni qualche minuto.
Applico l'onda quadra a un filtro LC a pigreco, adopero la sinusoide in uscita attenuata con un potenziometro per modulare il TX FM. Mentre ci meditavo sopra mi è venuto in mente anche di provare misurare l'indice di modulazione e regolarlo per un indice di 2,5 per il quale la riga corrispondente alla portante dovrebbe essere nulla. Dovrei riuscire a identificarla con un RX SSB, magari con un PC con un programma analizzatore di spettro audio.
Conoscendo la frequenza della modulazione ricavo la deviazione di frequenza
( deltaF = indice modulaz x freq,modulazione).
Per facilità di calcolo e spaziamento fra le righe vorrei una frequenza di modulazione di circa 1000 Hz, 500 è troppo bassa.
Poi potrebbe essere utile generare alternativamente anche una modulazione di 2 kHz
e quindi potrei avere necessità di utilizzare più a fondo le informazioni che mi avete trasmesso.

O_/
Avatar utente
Foto UtenteMarcoD
11,0k 5 9 13
Master EY
Master EY
 
Messaggi: 5773
Iscritto il: 9 lug 2015, 16:58
Località: Torino

Prossimo

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti