Pages: [1] 2   Go Down
Author Topic: Output in PPMsum, è possibile?  (Read 2294 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti,

per il mio progetto avrei bisogno di un output in PPMsum a 4 canali: con arduino leggo i 4 canali di una ricevente RC e li dovrei replicare (con o senza modifiche al valore dei singoli canali a seconda della situazione) in un unico output in PPMsum. Come si può realizzare l'output in PPMsum?
grazie a tutti per l'aiuto.
Logged

0
Offline Offline
Sr. Member
****
Karma: 1
Posts: 443
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti,

per il mio progetto avrei bisogno di un output in PPMsum a 4 canali: con arduino leggo i 4 canali di una ricevente RC e li dovrei replicare (con o senza modifiche al valore dei singoli canali a seconda della situazione) in un unico output in PPMsum. Come si può realizzare l'output in PPMsum?
grazie a tutti per l'aiuto.

Questa è una cosa che interessa anche a me e mi sono sempre ripromesso di approfondire ma non ho mai trovato il tempo.
Non so se ti può aiutare ma una cosa che pensavo di fare è studiarmi la parte del codice MultiWii dove decodifica i segnali PPMSUM e vedere se da li si riesce a capire
come fare l'inverso.

Ciao.
Logged


Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 129
Posts: 9419
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Come si può realizzare l'output in PPMsum?

E' una cosa semplicissima da fare, prima misuri la durata dei quattro segnali PPM in ingresso, poi durante la pausa tra due due frame consecutivi, i famosi 20 ms per ogni ripetizione, metti un pin a 1 logico per tanti microsecondi quanto durano i quattro segnali in ingresso, rispettando l'ordine, separandoli tra loro con uno 0 logico di almeno 100 us.
In pratica avrai una cosa simile dove canale1, canale2, canale3, canale4 sono il periodo in microsecondi dei vari impulsi PPM in ingresso, il tutto va ripetuto ogni 20 ms utilizzando di volta in volta le letture in ingresso dei canali.

Code:
digitalWrite(OutPin, HIGH);
delayMicroseconds(canale1);
DigitalWrite(OutPin, LOW);
delayMicroseconds(100);

digitalWrite(OutPin, HIGH);
delayMicroseconds(canale2);
DigitalWrite(OutPin, LOW);
delayMicroseconds(100);

digitalWrite(OutPin, HIGH);
delayMicroseconds(canale3);
DigitalWrite(OutPin, LOW);
delayMicroseconds(100);

digitalWrite(OutPin, HIGH);
delayMicroseconds(canale4);
DigitalWrite(OutPin, LOW);



« Last Edit: April 11, 2012, 07:21:54 am by astrobeed » Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 48
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tutto chiaro! Grazie Astrobeed!
Logged

0
Offline Offline
Sr. Member
****
Karma: 1
Posts: 443
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Rianimo un po' questa discussione perchè ora ho iniziato a ragionarci (sono molto veloce a fare le cose che mi passano per la testa  smiley-lol).
Ho letto la spiegazione di astro che è stata molto chiara, però mettendola in pratica funziona in parte, quindi ho fatto delle ricerche, a dire il vero non ho trovato molto, infatti
ho trovato solo questo: http://www.mftech.de/ppm_en.htm che però mi sembra anche ben spiegato.
Da quello che dice qui, il pacchetto ppmsum ha una lunghezza fissa di 22.5ms, l'impulso di ogni canale è separato da una pausa di 0.3ms e l'impulso di ogni singolo canale può durare da
1 a 2ms inclusa la pausa di separazione (0.3ms).
Poi qui parla di un pacchetto di start che mi viene da pensare sia la differenza tra la somma degli 8 canali e 22.5ms.
Il problema è che se implemento il codice con il pacchetto di start non mi funziona più niente, mentre se non lo implemento mi trovo con il canale 1 che in realtà fa muovere il servo
sul canale 2 e andando avanti mi trovo invece che per far muovere il 6 e 7 devo fare riferimento al 5 e 6 però non si muovono del tutto, quindi mi viene da pensare che è una questione
di timing, probabilmente la pausa non deve essere di 100ms ma nemmeno di 300ms.
Chiedo solo se qualcuno mi può linkare qualche documento un po' più esauriente per capire quali sono i tempi esatti da rispettare.
Grazie smiley
Ciao.
Logged


0
Offline Offline
Shannon Member
****
Karma: 131
Posts: 10468
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

che lo consideri sengnale inizale o finale poco cambia. sta di fatto che è un segnalòe LOW e non HIGH come sembra da quel grafico:



Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

0
Offline Offline
Sr. Member
****
Karma: 1
Posts: 443
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Perfetto, però c'è ancora qualcosa che non mi torna.
Nel link postato da me, parlano di 22.5ms di lunghezza del pacchetto, nelle due immagini postate da te parlano di 20ms e visto che poi
mi è venuto in mente che anch'io ho una ricevente frsky con relativo foglietto (avevo la soluzione sotto il naso e l'ho cercata in mezzo mondo  smiley-red)
ho consultato il foglietto della mia ricevente e li parlano di 18ms.
A questo punto ho un po' di confusione sulla durata del paccheto.
Nel frattempo farò un po' di prove con una durata di 20ms e vedo cosa succede.
Grazie della risposta, mi sei stato veramente molto utile smiley
Ciao.
Logged


0
Offline Offline
Shannon Member
****
Karma: 131
Posts: 10468
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

notare il sibolo tilde davanti ai numeri: si tratta di un simbolo che vuol dire "circa". Infatti, fintanto che è presente e riconoscibile un segnale di star o di stop, si può avere delle variani anche significative.
da 18 a 22ms sono 4ms di differenza, che sulla media di 20ms sono il 5% di errore!
la statistica dice che l'errore si indica come la viariazione dal valore medio, nel nostro caso quindi 20ms+-2.5%, ma non mi stupirei se (con qualche problema con molti canali) si raggiunga un errore del 5%. anzi, direi che l'errore massimo è proporzionale al numero di canali usati!
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

0
Offline Offline
Sr. Member
****
Karma: 1
Posts: 443
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

notare il sibolo tilde davanti ai numeri: si tratta di un simbolo che vuol dire "circa". Infatti, fintanto che è presente e riconoscibile un segnale di star o di stop, si può avere delle variani anche significative.
da 18 a 22ms sono 4ms di differenza, che sulla media di 20ms sono il 5% di errore!
la statistica dice che l'errore si indica come la viariazione dal valore medio, nel nostro caso quindi 20ms+-2.5%, ma non mi stupirei se (con qualche problema con molti canali) si raggiunga un errore del 5%. anzi, direi che l'errore massimo è proporzionale al numero di canali usati!

Perfetto, ho creato uno schetch che muove 7 servi contemporaneamente rispettando 20ms di lunghezza pacchetto e 0.3 di separazione canale e funziona smiley
Grazie.
Logged


0
Offline Offline
Sr. Member
****
Karma: 1
Posts: 443
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

E rieccomi qui con il mio PPM smiley-sad
Ho un problemino!
Allora, il primo sketch di prova che faceva muovere i servi andava bene, ma il problema nasce ora che devo tenerli fermi.
Non riesco a tenerli perfettamente fermi, hanno sempre un continuo tremolio.
Vi spiego un po' meglio.........
Ho preso un modulo di trasmissione FRSKY e l'ho collegato ad arduino che genera il segnale PPM e dall'altra parte ho messo una
ricevente (ovviamente FRSKY) con dei servi attaccati (per il momento 4).
Ho fatto la prova di dargli un segnale fisso, ma continuano a tremare in continuazione, mentre se collego il modulo alla mia radio
quando non muovo nulla rimangono perfettamente fermi.
Eppure il segnale che esce sia da arduino che dalla ricevente, misurandolo con l'oscilloscopio è identico, sia per quanto riguarda la
lunghezza totale del segnale, che la pausa tra un canale e l'altro che il quello che va a comandare i servi.
Mi viene il dubbio e chiedo una conferma a voi che il radiocomando invii il segnale solo quando ci sono delle variazioni sui valori
(movimento stick) mentre quando non ci sono variazioni, non invia nulla o invia solo un segnale di conferma che secondo me
potrebbe essere un segnale alto che dura 22.1ms + una pausa di 0.4ms.
Questo purtroppo non saprei come misurarlo perchè dovrei avere la possibilità di vedere effettivamente cosa esce in antenna ma
non ho strumenti per poterlo fare.
Qualcuno di voi conosce meglio di me il sistema di trasmissione dei radiocomandi?
Grazie.
Ciao.
Logged


0
Offline Offline
Shannon Member
****
Karma: 131
Posts: 10468
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

no, il segnale arriva uguale e viene sempre ripetuto. Se sei sicuro che tenendo gli stick fermi i segnali sono IDENTICI allora il problema potrebbe essere l'amperaggio insufficiente.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

0
Offline Offline
Sr. Member
****
Karma: 1
Posts: 443
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

no, il segnale arriva uguale e viene sempre ripetuto. Se sei sicuro che tenendo gli stick fermi i segnali sono IDENTICI allora il problema potrebbe essere l'amperaggio insufficiente.

Ma tu parli di amperaggio sulla ricevente o sulla trasmittente?
Sulla ricevente non può essere, perchè è la stessa fonte di alimentazione che ho usato anche per fare il test direttamente con la radio (batteria lipo 3s+bec).
Nella trasmittente nemmeno perchè uso una batteria al piombo a 12V (ovviamente carica).
Un dubbio che mi è venuto questa sera è che magari il segnale che butta fuori arduino è troppo attenuato rispetto alle esigenze del modulo FRSKY.
Per caso sai di quanto necessita nell'ingresso segnale il modulo FRSKY.
Nei foglietti che ho in dotazioni non ho trovato dati di questo tipo, però domani provo a vedere se nel loro sito c'è scritto qualcosa.
Grazie.
Ciao.
Logged


Marche
Offline Offline
Edison Member
*
Karma: 34
Posts: 2272
azioni semplici per risultati complessi
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Lesto che LITRAGGIO ha il tuo serbatoio?  smiley-lol  smiley-lol  smiley-lol
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 129
Posts: 9419
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi viene il dubbio e chiedo una conferma a voi che il radiocomando invii il segnale solo quando ci sono delle variazioni sui valori
(movimento stick) mentre quando non ci sono variazioni, non invia nulla o invia solo un segnale di conferma che secondo me
potrebbe essere un segnale alto che dura 22.1ms + una pausa di 0.4ms.

Il segnale viene trasmesso di continuo, il tremolio dei servi vuol dire che il tuo segnale non è stabile nel tempo, ovvero non vengono generate sequenze di impulsi perfettamente identiche a parità di condizioni.
Come generi il ppm  e in base a cosa vari le durate dei singoli impulsi ?
Logged

Dubai, UAE
Offline Offline
Edison Member
*
Karma: 22
Posts: 1675
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sorry for the english, but if you guys are still looking to output PPM signals, I have a low level library which does this.

Its a variation of the code here - http://rcarduino.blogspot.com/2012/08/arduino-serial-servos.html, much faster than using digitalwrite and delay.

The clock signal is basically PPM, the variation allows you to set the number of channels and removes the reset pulse.

Duane B

rcarduino.blogspot.com
Logged


Pages: [1] 2   Go Up
Jump to: