Semplice domanda del PWM di Arduino

Salve ragazzi vi tartasso con le domande perchè la documentazione mi è difficile comprenderla =D

Solo una piccola domanda riguardo i pin di arduino.

Nella piattaforma sono presenti dei pin PWM e non, mi chiedevo, quando usare l'uno, quando usare l'altro? Si, d'accordo, è una tecnica per ottenere risultati analogico con alcuni digitali, ma riesco a comprenderne del tutto il significato. Se ad esempio si connette un servo o un sensore in PWM? E se lo metto in un pin non PWM? Inoltre, quando conviene usarli e su quali componenti?

Vi ringrazio per la pazienza =P

sono un novellino come te xò provo a risponderti lo stesso così magari poi confronto la mia risposta con quella di uno più bravo di me :P cmq il pwm ti permette di simulare un segnale analogico e quindi è da usare per tutte le applicazioni in cui hai bisogno di stati intermedi e non solo di stati acceso e spento! credo quindi che se attacchi un servo a un pin digitale e metti il pin HIGH il servo compirà la massima rotazione, se metti il pin LOW il servo andrà a 0 gradi! se lo attacchi ad un pin pwm modificando la lunghezza dell'impulso simuli vari stadi di tensione e puoi pilotare il servo come preferisci! spero di aver detto giusto! :)

edit: ho provato blink attaccando un servo al pin digitale e non succede nulla :P

i servi non usano il segnale PWM ma il segnale PPM (libreria Servo.h). per il resto è corretta la spiegazione, se al posto del servo avessi messo un ponte H e relativo motore, o magari un led da accendere in modo "soffuso"

smasho: sono un novellino come te xò provo a risponderti lo stesso così magari poi confronto la mia risposta con quella di uno più bravo di me :P cmq il pwm ti permette di simulare un segnale analogico e quindi è da usare per tutte le applicazioni in cui hai bisogno di stati intermedi e non solo di stati acceso e spento! credo quindi che se attacchi un servo a un pin digitale e metti il pin HIGH il servo compirà la massima rotazione, se metti il pin LOW il servo andrà a 0 gradi! se lo attacchi ad un pin pwm modificando la lunghezza dell'impulso simuli vari stadi di tensione e puoi pilotare il servo come preferisci! spero di aver detto giusto! :)

edit: ho provato blink attaccando un servo al pin digitale e non succede nulla :P

xD Quindi la tua teoria sui servo non va bene =D Quindi diciamo che i PWM sono utilizzabili solo da componenti che supportano sia il segnale LOW-HIGH che quello analogico, almeno questo è quello che penso io :)

In sostanza allora, tutti i componenti potrebbero essere utilizzati in tutti i pin di Arduino, naturalmente pensando che è inutile utilizzare un led su un segnale analogico, almeno è questo che ho capito °__°

la cosa è ancora più vera se pensi che il PWM non è altro che tanti 1 e 0 velocissimi che FANNO CREDERE di essere un segnale analogico... Non è inutile, quando serve serve, anche se nella maggior parte dei casi te la puoi cavare anche senza

xD Quindi la tua teoria sui servo non va bene =D

avevo iniziato a pensarlo anche io quando tutto contento della mia "intuizione geniale" ho provato blink con il servo attaccato al pin digitale e non si è mosso nulla :P

Grazie per le risposte ora avrei una serie di informazioni da chiedervi: 1. I sensori ad ultrasuoni devono essere collegati quindi al PWM o a quello normale? 2. I servomotori al PWM o normale?

Vi ringrazio, siete molto cordiali e tempestivi =D

smasho: ... credo quindi che se attacchi un servo a un pin digitale e metti il pin HIGH il servo compirà la massima rotazione, se metti il pin LOW il servo andrà a 0 gradi! se lo attacchi ad un pin pwm modificando la lunghezza dell'impulso simuli vari stadi di tensione e puoi pilotare il servo come preferisci! spero di aver detto giusto! :)

I servo vengono pilotati con un segnale PPM. Ogni 20mSecondi (50Hz) c'é un impulso High. la informazione per il Servo per la posizione é codificata nella lunghezza del impulso High. 1mSecondo é 0 Gradi 2mSecondi sono 180 Gradi. I Servo funzionano piú o meno anche con un PWM di Arduino perché anche il PWM modifica la lunghezza del impulso di HIGH ma da 0 a 100% del periodo. La frequenza del PWM del Arduino é di ca 490Hz.

Ciao Uwe

Diamond39: Grazie per le risposte ora avrei una serie di informazioni da chiedervi: 1. I sensori ad ultrasuoni devono essere collegati quindi al PWM o a quello normale? 2. I servomotori al PWM o normale?

Vi ringrazio, siete molto cordiali e tempestivi =D

1) Dipende dal sensore a Ultrasuoni. Devi leggere le istruzioni d'uso o il datasheet. 2) I servo a un pin normale usando la libreria servo.h . http://arduino.cc/en/Reference/Servo Ciao Uwe

ma dai sensori ad ultrasuoni non devi prendere l'input scusa? penso che tu li debba collegare ai pin A0...A5 e fare una analogRead! per i servo usa la libreria servo.h

edit: vista la risposta di uwe ci deve essere qualcosa che mi sfugge :blush:

smasho:
ma dai sensori ad ultrasuoni non devi prendere l’input scusa? penso che tu li debba collegare ai pin A0…A5 e fare una analogRead!
per i servo usa la libreria servo.h

Si ma io ho preso spunto dal Ping °__°, allora come mai lì è messo in output? Ho un pò di confusione :expressionless:

ahahaha anche io in effetti!

qua è spiegato bene come funzionano http://www.gioblu.com/tutorials/sensori/132-il-sensore-ad-ultrasuoni-srf05-e-simili

Ti riferisci all’esempio Ping?
Lì lo stesso pin viene prima usato per generare l’impulso e poi per leggere l’eco dello stesso mediante il conteggio del tempo intercorso per il ritorno degli impulsi, con il quale si ottiene la distanza dell’ostacolo. Non leggi un valore più o meno alto, leggi un tempo.

loool ma io ho capito il funzionamento del Ping ^^ Ma se è un sensore dal quale devo leggere la distanza, perchè lo devo mettere in output!! xD :0

Te l'ho scritto:

Lì lo stesso pin viene prima usato per generare l'impulso e poi per leggere l'eco dello stesso mediante il conteggio del tempo intercorso per il ritorno degli impulsi,

Impostando in output spedisce la sequenza che attiva il sensore, che così spedisce il PING.... poi mette il pin in input e legge l'eco del PING. Calcolando il tempo fra i 2 segnali che ha in ingresso si può sapere la distanza a cui è stato rilevato un ostacolo.

leo72: Te l'ho scritto:

Lì lo stesso pin viene prima usato per generare l'impulso e poi per leggere l'eco dello stesso mediante il conteggio del tempo intercorso per il ritorno degli impulsi,

Impostando in output spedisce la sequenza che attiva il sensore, che così spedisce il PING.... poi mette il pin in input e legge l'eco del PING. Calcolando il tempo fra i 2 segnali che ha in ingresso si può sapere la distanza a cui è stato rilevato un ostacolo.

Grazie 10000!

Ritornando alla discussione, il sensore lo devo mettere con PWM o no? xD

Vedendo lo sketch di esempio... no. Lì viene usato il pin 7, che non ha il PWM.

Ultimissima domanda e poi vi lascio in pace xD

Dato che abbiamo parlato di servo, ho guardato un pò di tutorial e si fa riferimento solo ad un range da 0° a 180°, ma se io avessi la necessità di partire a 90° e spostandomi di +90° (180°) e di -90°(0°)??? Non so se sono stato chiaro :D

non Ti sei spiegato bene.

Cosa é il problema? Mandi il valore correspondente al angolo al servo e quello si muove fino lí.

Ciao Uwe