Buongiorno a tutti,
ho un dubbio teorico riguardo la tensione di alimentazione fornita dai pin di arduino alle periferiche collegate e spero qualcuno possa chiarirmi le idee.
Prima di porre la domanda cerco di spiegare il mio dubbio.
In generale quando si utilizzano pin di arduino per la generazione di segnali pwm (pin dedicati) viene generato un segnale tra 0 e 5v con una determinata frequenza e in base alla % del duty cycle impostato dalla funzione analogwrite possiamo far variare la tensione media in uscita sempre nell'intervallo 0-5v.
Questo consente quindi di pilotare motori in velocità o led in intensità e fin qui tutto chiaro.
Ora la domanda che mi ponevo è che differenza c'è tra il segnale di alimentazione con cui si alimentano le periferiche (gnd-5v) e un segnale pwm (0-5v) con una determinata frequenza e duty cycle del 100%?
Tutto sarebbe più chiaro se anche il segnale di alimentazione avesse una sua frequenza , ma non sono riuscito a trovare questo parametro in alcun datasheet.
Saluti.
Benvenuto. Essendo il tuo primo post, nel rispetto del regolamento, ti chiediamo cortesemente di presentartiQUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO... Grazie.
Qui una serie di link utili, non inerenti al tuo problema:
allora cominciamo col dire che tutti i pin utilizzati come uscite danno una tensione fissa di +5V, con i pin pwm possiamo fornire una tensione variabile da 0 a +5V, quindi la differenza è che con questi ultimi possiamo fornire una tensione inferiore ai 5V.
Il grosso problema (se così vogliamo dire) è che la corrente massima erogabile dai pin di arduino è di 40 milli Ampere al massimo! (normalmente si cerca di non superare i 20 mA) e per ogni serie di pin (sono 3 gruppi) non più di 100 mA in totale. Quindi detto questo, se devi alimentare qualche led o qualche sensore, non ci sono problemi. Rigualrdo a motori (di qualsiasi tipo) o rele, arduino non può fornire corrente a sufficienza... anche se la tensione è sufficente
Innanzitutto grazie mille per la risposta.
Il mio dubbio era più riguardo al concetto di pwm , ma sono stato troppo sintetico nell'esprimerlo.
Credo di averlo risolto in quanto il mio intento era quello di capire come funzionasse nel dettaglio la modulazione pwm , e se fosse possibile attuarla a partire dai pin di alimentazione (In pratica fare quello che la scheda già fa attraverso i timer quando si generano segnali pwm) ma con un circuito esterno.
La differenza di un segnale (un uscita del Controller del Arduino) e un alimentazione é la corrente massima disponibile. Un segnale puó consumare al massimo 20mA (Arduino UNO, MEGA, LEONARDO e simili) con un massimo (somma di tutte le correnti di 200mA) e ulterilre limite per certi gruppi di uscite (non spiego qua in dettaglio). Un Alimentazione puó erogare un corrente piú alta limitata dal dispositivo di comando (transistore, MOSFET, relé, fusibili, collegamneti ecc) e dal alimentatore usato.
Tensor:
Innanzitutto grazie mille per la risposta.
Il mio dubbio era più riguardo al concetto di pwm , ma sono stato troppo sintetico nell'esprimerlo.
Credo di averlo risolto in quanto il mio intento era quello di capire come funzionasse nel dettaglio la modulazione pwm , e se fosse possibile attuarla a partire dai pin di alimentazione (In pratica fare quello che la scheda già fa attraverso i timer quando si generano segnali pwm) ma con un circuito esterno.
Saluti.
Ci sono dei integrati che generano un segnale PWM come per esempio il TLC5940 o TLC5947 per pilotare LED, i WS2811,WS2801, WS2812 ecc come LED RGB, PCA9685 come PWM.
Tensor:
Ora la domanda che mi ponevo è che differenza c'è tra il segnale di alimentazione con cui si alimentano le periferiche (gnd-5v) e un segnale pwm (0-5v) con una determinata frequenza e duty cycle del 100%?
Tutto sarebbe più chiaro se anche il segnale di alimentazione avesse una sua frequenza , ma non sono riuscito a trovare questo parametro in alcun datasheet.
Saluti.
Diciamo che è un po' confusa la domanda.
Un segnale PWM ha una sua frequenza, l'alimentazione 0-5v semplicemente non ce l'ha.
La frequenza con PWM al 100% dovrebbe essere, in teoria, infinita per la parte ON e bassissima per la parte OFF ma essendo impossibile ciò (come fa ad essere infinita una parte e finita l'altra???) la frequenza si limita ad un 99,9% mentre in alcuni processori viene switchata direttamente al positivo (vedi il PIC18F2550)
Patrick_M:
... la differenza è che con questi ultimi possiamo fornire una tensione inferiore ai 5V.
...
Scusa se ti correggo, ma e' bene specificare ... i pin PWM forniscono in uscita una tensione uguale a tutti gli altri, cioe' circa VCC ... la differenza importante e' che forniscono, in condizioni di PWM, un'onda quadra a frequenza fissa, il cui duty-cycle (rapporto fra il tempo in cui rimane alta e quello in cui rimane bassa) puo cambiare da 0 al 100% ... in pratica, un PWM del 50% significa che il tempo in cui rimane a zero e' identico a quello in cui rimane a VCC ...
Lo specifico perche', se si pensasse di usare il PWM settato magari al 60% o simile per alimentarci direttamente un circuito che regge solo 3.3V, pensando che sia la tensione che cambia, ci si ritroverebbe con un circuito bruciato
Quello che cambia e' la tensione "media" apparente, con il PWM ... nel caso ad esempio di un led, al 50% resterebbe acceso sempre al massimo, ma per la meta' del tempo, e siccome a quella frequenza il nostro occhi non percepisce il lampeggio, "apparirebbe" luminoso la meta' ...
Si puo anche ricavarci effettivamente una tensione minore, per piccolissimi carichi, ma serve usare un'integratore RC all'uscita ...
Per quanto riguarda invece lo 0 ed il 100 %, a 0 hai sul pin un livello basso (o GND), ed al 100% hai un livello alto (o VCC), nient'altro
Etemenanki:
Scusa se ti correggo, ma e' bene specificare ... i pin PWM forniscono in uscita una tensione uguale a tutti gli altri, cioe' circa VCC ... la differenza importante e' che forniscono, in condizioni di PWM, un'onda quadra a frequenza fissa, il cui duty-cycle (rapporto fra il tempo in cui rimane alta e quello in cui rimane bassa) puo cambiare da 0 al 100% ... in pratica, un PWM del 50% significa che il tempo in cui rimane a zero e' identico a quello in cui rimane a VCC ...
Lo specifico perche', se si pensasse di usare il PWM settato magari al 60% o simile per alimentarci direttamente un circuito che regge solo 3.3V, pensando che sia la tensione che cambia, ci si ritroverebbe con un circuito bruciato
Quello che cambia e' la tensione "media" apparente, con il PWM ... nel caso ad esempio di un led, al 50% resterebbe acceso sempre al massimo, ma per la meta' del tempo, e siccome a quella frequenza il nostro occhi non percepisce il lampeggio, "apparirebbe" luminoso la meta' ...
Si puo anche ricavarci effettivamente una tensione minore, per piccolissimi carichi, ma serve usare un'integratore RC all'uscita ...
Per quanto riguarda invece lo 0 ed il 100 %, a 0 hai sul pin un livello basso (o GND), ed al 100% hai un livello alto (o VCC), nient'altro
Scusate è tornato un dubbio riflettendo su questa affermazione
"Quello che cambia e' la tensione "media" apparente, con il PWM ... nel caso ad esempio di un led, al 50% resterebbe acceso sempre al massimo, ma per la meta' del tempo, e siccome a quella frequenza il nostro occhi non percepisce il lampeggio, "apparirebbe" luminoso la meta' ..."
Ho capito perfettamente cosa succede per i led , ma non riesco a spiegarmi come gestire questa cosa con i motori , o meglio:
Ipotizzando di voler pilotare un motore dc brushed (0-5V) in pwm (utilizzando i pin pwm ) andremo a generare dei segnali con duty da 0-100% che creeranno una tensione media variabile ai capi del motore.
La frequenza del segnale generato dal pwm di arduino ha una frequenza fissata ma come faccio a sapere se è la frequenza giusta per il motore?
La domanda nasce dal fatto che in generale nei datasheet dei servomotori è presente la frequenza alla quale devono ricevere gli impulsi , e quindi anche il duty da associare all'angolo da attuare , mentre questo dato non è presente nei motori brushed dc. Immagino sia per il diverso meccanismo di funzionamento , ma mi rimane il dubbio sulla scelta della frequenza di pwm per un motore brushed.
per i servo motori si usa un impulso di lunghezza variabile per comandare la posizione, quindi un pwm ma con durata variabile della parte on compresa tra 0,5 e 2,5 ms e ripetuta ogni 20 ms
come in questo esempio
mentre i motori a corrente continua se li alimenti in PWM è come se li accendessi e spegnessi in successione se li lasci sempre spenti.... si fermano
se li accendi per 1/4 del tempo vanno piano
se li accendi per 1/2 del tempo vanno un po più veloci... e così via
vedi questo esempio
essendo motori a corrente continua non esiste una "frequenza giusta" da usare. O meglio ci possono essere problemi di ronzii dovuti alla frequenza usata dal segnale PWM, a quel punto bisogna/è possibile variare questa frequenza al fine di eliminare/ridurre i ronzii, ma questa è un'altra storia
dove appunto ti da la frequenza usata :
The frequency of the PWM signal on most pins is approximately 490 Hz. On the Uno and similar boards, pins 5 and 6 have a frequency of approximately 980 Hz.
In realtà qui ho trovato una spiegazione un pò più dettagliata del problema che potrebbe chiarire le idee anche a qualcun altro poichè la questione è leggermente più complessa.
All'atto pratico per applicazioni in cui non è necessaria un'alta precisione sugli rpm è sufficiente testare direttamente sul motore la giusta frequenza pwm , partendo come dicevi da frequenze maggiori di quelle che generano ronzii .
tutto quello che vuoi ma si tratta sempre di impiegare un segnale pulsato (PWM) per comandare un motore ad una velocità inferiore a quella massima ottenibile inviandogli una tensione a livello costante
e non si tratta di una frequenza giusta per il motore, ma di una frequenza che fa andare il motore alla velocità che tu vuoi