segnale con periodo "PPM"

salve a tutti ho una domanda sia teorica che pratica

ho un segnale su 3 cavi rosso,nero,bianco dove so per certezza che in questi credo che è quello bianco ci sia un segnale che porta dei dati al regolatore del mio motore questi dati mi hanno detto che sono solo compresi tra 1000ms e 2000ms ma parlano di periodo di segnale fatemi un po capire

ho pensato di usare questo codice perché ho letto un po in giro

void setup()
{
  pinMode(13, INPUT);
}

void loop()
{
  duration = pulseIn(13, HIGH);
}

perché praticamente devo leggere questo valore (periodo) e fare dei calcoli per poi ributtare fuori il mio segnale sempre con questo criterio in modo da avere sempre 3 cavetti di 1000/2000 ms dopo sarò io a scegliere a quanto deve essere ma dato che quello che mi hanno detto non mi torna non sapevo come fare
quindi io dopo dovrei far uscire da il pin digitale un segnale come quello che entra

Ps non e che non so cosa è il periodo ma dato che mi parlano di 1000 2000 ms io a far andare il mio motore devo variare la velocità del on/off di una porta o il suo periodo quindi non so se intendono voltaggio??
voi cosa capite aparte una grande confusione??

ok oggi mi sono fatto spiegare la differenza tra PPM e PWM ma dato che il mio prof non ne sa di arduino vorrei sapere da voi
o una frequenza di 1000 ms e vorrei praticamente far capire arduino dove si trova il segnale alto perché se non sbaglio il PPM modula un segnale dove il dato varia in funzione di dove si trova il segnale alto.
poi mi interessa sapere come ricreare il segnale sempre in PPM arduino almeno lo può fare??
scusate se insito ma è un progetto per scuola :slight_smile: vi ringrazio

Sei molto difficilmente da capire da quello che scrivi.
Con
duration = pulseIn(13, HIGH);
leggi la durata del impulso high percui il valore che trasmettte il segnale PPM.
Ciao Uwe

scusa ma a te interessa muovere un servomotore, o capire perchè si muove?
in caso, cmq dai un'occhiata alla libreria servo, e trovi un pò di info a riguardo.

io ho un circuito che invia la posizione al servo in PPM io devo decodificare quello che li invia
es se il circuito dice che deve essere il servo uguale a X io devo sapere quanto vale quello che li invia cioè X

allora, tu hai un segnale chiamato PPM.
Questo segnale PPM è diviso in vari canali lunghi 2 MILLIsecondi, e al tuo servo arriva proprio uno di questi "canali". Nota che già non si parla più di PPM :slight_smile:

ora, un canale ha un segnale alto che al minimo dura dai 500 ai 800 MICROsecondi, e al massimo dagli 1500 ai 1800 MICROsecondi.
se un servo si muove da 0 a 180°, allora un segnale altro di durata 500 o 800 microsecondi (dipende dalla regolazione della trasmittente del segnale e dal settaggio del servo) vuol dire posizionati a 0°, e una durata di segnale di 1500 o 1800 corrisponde al posizionamento a 180°, ovviamente ci sono tutti i valori di mezzo :slight_smile:

Ora, già notiamo che entra in campo la regolazione del servo: ogni servo si autoregola la posizione un pò come vuole lui (notare la tolleranza sui tempi, che sulle trasmittenti si può regolare), quindi ogni servo (ma se stai sullo stesso modello si dovrebbe vedere poco) ha valori differenti per la stessa angolazione.

fortunatamente la risposta di quasi tutti i servi è molto lineare, quindi se conosci 2 valori di angolazione dati gli input con una proporzione (o una retta) sai ottenere anche le altre posizioni.

ps. ma non sei italiano o quello di mettere i soggetti dopo i verbi è un tuo vizio? non si capisce una bega! :grin:

I tempi della PPM non sono da 1 mS a 2mS?
Ciao Uwe

si Uwe.
@ilmandorlone Leggiti questo piccolo tutorial, magari aiuta, anche se è dal lato ricevente il discorso non cambia.. Gioblu.com is for sale | HugeDomains

grazie oggi provo appena torno a casa credo che l'ultimo tutorial linkato mi possa tornare utile. :slight_smile:

riguardo a @lesto non vorrei mai che ti stessi confondendo con il PWM che è una modulazione che li si che varia in base al tempo di segnale alto e segnale basso ma nel mio caso devo contare dove viene posizionato il segnale alto .... non so parlo da ingnorante

:slight_smile: si è classico, perchè la libreria servo usa il PWM (modificato apposta) per fare il PPM.
Il normale pwm di arduino credo che sia a 490Hz.

lesto:
al tuo servo arriva proprio uno di questi "canali". Nota che già non si parla più di PPM :slight_smile:

Al servo, o eventuale ESC, arriva sempre un PPM, non ha importanza se è un singolo canale o multipli canali sulla stessa portante, il PPM trasporta l'informazione in base alla durata dell'impulso, può essere sia negativo che positivo, il PWM trasporta l'informazione in base al rapporto tra parte alta e parte bassa del periodo, sono due cose differenti ed è un grave errore confonderle.

ora, un canale ha un segnale alto che al minimo dura dai 500 ai 800 MICROsecondi, e al massimo dagli 1500 ai 1800 MICROsecondi.

Un apparato RC genera impulsi che al massimo sono compresi tra 900 e 2100 us, il valore normale è 1050 e 1950 us con centro a 1500 us oppure, tra 1065 us e 1965 us con centro a 1512 us, dipende dal produttore, i valori minimi e massimi sono ampliabili solo su molti apparati radio, ma non su tutti, tramite apposite funzioni di menù o trimmer per le vecchie radio analogiche.

se un servo si muove da 0 a 180°, allora un segnale altro di durata 500 o 800 microsecondi (dipende dalla regolazione della trasmittente del segnale e dal settaggio del servo) vuol dire posizionati a 0°, e una durata di segnale di 1500 o 1800 corrisponde al posizionamento a 180°, ovviamente ci sono tutti i valori di mezzo :slight_smile:

L'escursione standard di 1 ms, cioè da 1000 a 2000 us, corrisponde a 90°, in realtà bastano 900 us per ottenere tale movimento, per arrivare a 180° è necessario variare il PPM tra 500 us e 2500 us.

ogni servo si autoregola la posizione un pò come vuole lui (notare la tolleranza sui tempi, che sulle trasmittenti si può regolare), quindi ogni servo (ma se stai sullo stesso modello si dovrebbe vedere poco) ha valori differenti per la stessa angolazione.

I servo sono abbastanza precisi nei movimenti, quello che cambia sono le tolleranze che possono causare differenze di pochi gradi tra un servo e un altro a parità di PPM, ma è una cosa più che normale e perfettamente compensabile dalla radio tramite i trim, o meglio con i subtrim se presenti.

fortunatamente la risposta di quasi tutti i servi è molto lineare, quindi se conosci 2 valori di angolazione dati gli input con una proporzione (o una retta) sai ottenere anche le altre posizioni.

La risposta dei servo è lineare, e vale per tutti, perché è un loro parametro di funzionamento, quello che introduce un leggero errore di non linearità è il potenziometro interno usato per il feedback, parliamo di un errore massimo inferiore al 1% nei servo di qualità decente.

BrainBooster:
:slight_smile: si è classico, perchè la libreria servo usa il PWM (modificato apposta) per fare il PPM.
Il normale pwm di arduino credo che sia a 490Hz.

No, la libreria servo usa un timer, e infatti si perdono due canali PWM, per generare i vari impulsi PPM a circa 50 Hz su qualunque pin di Arduino, quindi non solo su quelli PWM.

grazie tutto chiaro ma io non ho nessun trimmer di regolazione apparte questo ho capito :slight_smile:

si astro, come al solito mi ero espresso in maniera pedestre.. alla BB :grin:

ilmandorlone:
grazie tutto chiaro ma io non ho nessun trimmer di regolazione apparte questo ho capito :slight_smile:

Se hai un radiocomando hai per forza i trim sugli stick, non possono non esserci.

astrobeed:
...
L'escursione standard di 1 ms, cioè da 1000 a 2000 us, corrisponde a 90°, in realtà bastano 900 us per ottenere tale movimento, per arrivare a 180° è necessario variare il PPM tra 500 ms e 2500 ms.
...

L' escursione di 1mS non corrisponde a una escursione meccanica di 180 Gradi per un servo che ha un escursione meccanica di 180 Gradi?

La libreria servo.h puó pilotare servo su tutti i pin ma solo al massimo solo 12 servo.

Ciao Uwe

uwefed:
L' escursione di 1mS non corrisponde a una escursione meccanica di 180 Gradi per un servo che ha un escursione meccanica di 180 Gradi?

Lo standard prevede un movimento di +/- 45° (= 90° totali) per una variazione tra 1ms e 2ms, il motivo è semplice da un punto di vista meccanico per come vengono impiegati i servo RC, squadretta con collegati cavi o tiranti, non ha senso andare oltre tale escursione visto che il movimento lineare ottenuto in funzione dell'angolo di rotazione diventa minimo e fortemente non lineare.
In altre applicazioni non legate al mondo del modellismo, p.e. il brandeggio di una telecamera o ruotare un sensore, fa comodo utilizzare tutti i possibili 180°, quasi tutti i servo ci arrivano, però in questo caso è l'impulso deve essere compreso tra 500 us e 2500 us.
Da notare che il limite di 2ms per i radiocomandi era imposto dalla frequenza di ripetizione a circa 50 Hz (20 ms) sulle vecchie radio analogiche perché altrimenti non era possibile arrivare a 8 canali, gli impulsi erano generati tramite una serie di monostabili in cascata e applicati direttamente sulla modulazione radio, inizialmente solo AM e poi FM, oltre ai 16 ms, massimi, totali degli otto canali tocca sommare la separazione, circa 100 us, tra gli impulsi e un periodo di circa 2.5 ms senza impulsi per la sincronizzazione dei frame.
Con le moderne radio digitali e i sistemi di trasmissione in digitale il limite dei canali non esiste più, esistono radio con 14 canali, sulla ricevente gli impulsi sono ricreati in parallelo ricavandoli dalla decodifica del pacchetto dati che contiene le informazioni per ogni singolo canale e viene trasmesso con un frequenza ben maggiore dei 50Hz tipici del PPM sugli apparati RC.

forse dato che la mia radio ha tutto quasi digitale anche i trim saranno da impostare via software boh vedrò

ilmandorlone:
forse dato che la mia radio ha tutto quasi digitale anche i trim saranno da impostare via software boh vedrò

Sotto e di fianco agli stick devi avere degli switch a tre posizioni con ritorno al centro, quelli sono i trim, da software eventualmente hai i subtrim.

questa è la radio che ho tu intendi le levette nere??