28 ottobre 10, 01:43 | #1 (permalink) Top |
User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| aumentare l'estensione dei servi
salve volevo aprire una discussione che si è parlato in altri ambiti però qui volevo farlo in materia di microcontrollori. Premetto che con il 16F628 riesco a leggere i dati (impulsi) che arrivano dalla ricevete e posso quindi manipolarli come voglio.. .quello che però vorrei un attimo condivere con voi è il problema che se arriva un inpulso più di 1,5 mS ok ..basta solo allungarlo creando un ulteriore ritardo... ma se dovesse arrivare un inpulso inferiore a 1,5 mS come faccio ad andare indietro nel tempo????? !!!!!! be per questo la prima cosa che mi viene in mente è posticipare tutto inviando nuovamente lo stesso inpulso al servo poi però bufferizzando il segnale precedente ne creo uno con un tempo inferiore in modo da scendere fino per esempio a 0.5 mS per cui alla fine potrei aumentare la corsa di un servo da 0.5 mS a 2,5 mS... anzichè da 1 a 2 mS ... Che ne pensate di questa soluzione? si accettano consigli.. Di seguito una piccola routine fatta stamani per catturare l'impulso proveniente dalla RX (la ricenvente è un' Hitec AFHSS 2,4 Ghz ) BSF STATUS,RP0 ; ** BANK1 ** MOVLW b'00000000' MOVWF TRISB ; portB all pins output MOVLW b'11110001' MOVWF TRISA ; RB7-RB4 and RB1(RX)=input, others output BCF STATUS,RP0 ; ** BANK0 ** CLRF COUNT CLRF PORTB MAIN BTFSS PORTA,0 ; IF (bit 0 di PORTA è = 1) GOTO MAIN MOVLW 178 ; MOVWF CL ; GOTO $+1 ; GOTO $+1 ; DECFSZ CL,F ; GOTO $-2 ; XX BTFSS PORTA,0 GOTO SHOW INCF COUNT,F ; attesa di 2uS GOTO XX ; attesa di 2uS SHOW MOVF COUNT,W MOVWF PORTB CLRF COUNT GOTO MAIN END |
28 ottobre 10, 09:37 | #2 (permalink) Top |
User Data registr.: 06-08-2007 Residenza: Empoli
Messaggi: 1.813
|
Non son sicuro di aver capito bene; se volessi leggere il segnale di ingresso per produrne uno diverso in uscita, io disaccoppierei le due cose. Da un lato il processo di input, gestito tramite interrupt, dall'altro il processo di output che genera il segnale. Il processo di input imposta una variabile condivisa che è la lunghezza dell'impulso ricevuto; il processo di output, in base al valore di questa variabile genera il segnale di output. Domanda: ma se vuoi estendere la corsa dei servi, lo devi fare in entrambe le direzioni, quindi non puoi semplicemente aumentare la durata dell'impulso ma anche, nell'altro verso, diminuirla. Giusto?
__________________ ....... |
29 ottobre 10, 10:36 | #3 (permalink) Top | |
User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| ok
hai capito benissimo... ...praticamente è la stessa cosa... anzichè gestire il segnale di ingresso con l'interrupt.. lo leggo normalmente dal pin ..con uno sfasamento di un ventesimo di secondo viene dato in uscita in un altro pin, una risposta.. ..comunque la soluzione proposta da te, è più accademica, secondo è più elegante.. appena ci metto le mani, ti faccio sapere. a dopo fausto Citazione:
| |
29 ottobre 10, 18:36 | #4 (permalink) Top |
User Data registr.: 06-08-2007 Residenza: Empoli
Messaggi: 1.813
|
Non è più accademica o elegante, è l'unica praticabile. Pensaci: hai due oggetti (l'input e l'output) che vanno a velocità diverse. Non possono andare a velocità diverse se uno (l'out) aspetta l'altro. Del resto tu stesso ti sei reso conto del problema
__________________ ....... |
29 ottobre 10, 23:09 | #5 (permalink) Top | |
Adv Moderator Data registr.: 15-08-2007 Residenza: sto a Massa ma sono molto Positivo
Messaggi: 12.071
| Citazione:
facendo una simulazione su una scala dei tempi: T=0 Misuro l'impulso, supponiamo sia 1800uS T=1800 Genero l'impulso 2000 T=3800 Mi metto a riaspettare il nuovo input T=20000 Arriva il nuovo impulso... Non capisco dove serva l'interrupt, ma anche andando all'indietro T=0 Misuro l'impulso 1200 T=1200 Genero l'impulso 1000 T=2200 Mi metto a riaspettare il nuovo impulso T=20000 Arriva il nuovo... I due impulsi non vanno a velocità diverse hanno solo lunghezza diversa ma, se si vuole stare nello standard, la ripetizione è 50 hz. Scomodare la gestione degli interrupt in questo caso non serve, la base dei tempi dei 50hz te la da la ricevente, non è necessario gestire anche la durata della pausa dell'impulso generato. | |
29 ottobre 10, 23:43 | #6 (permalink) Top | |
User Data registr.: 06-08-2007 Residenza: Empoli
Messaggi: 1.813
| Citazione:
L'interrupt non è necessario, basta leggere il timer per calcolare la durata dell'impulso. Forse l'interrupt può tornare utile se il firmware fa anche altre cose, ma se fa solo quello direi che si può evitare. Allora, sarà l'ora tarda, ma continuo a non capire la domanda iniziale. Che vuol dire tornare indietro nel tempo? Forse appena arriva alto l'impulso in ingresso lo porti alto anche in uscita e quindi non puoi farlo più breve di quanto ricevi (a meno di predire il futuro)? Se questa era la domanda, direi che il flusso è sbagliato. Misuri impulso, generi di conseguenza l'impulso in out, più breve o più lungo.
__________________ ....... | |
31 ottobre 10, 04:00 | #7 (permalink) Top |
Adv Moderator Data registr.: 15-08-2007 Residenza: sto a Massa ma sono molto Positivo
Messaggi: 12.071
|
Credo che la domanda iniziale fosse generata dalla voglia di far partire l'impulso in uscita in contemporanea con quello in entrata, ma la cosa è assolutamente inutile ed totalmente infattibile..
|
31 ottobre 10, 17:02 | #8 (permalink) Top |
User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| ok
il problema è che se fosse solo leggere un impulso e poi come risposta sommare un ritardo opportuno.. il discorso era già risolto... ma in caso di impulsi al di sotto dei 1500 uS occorre avere un ritardo ancora più breve... quindi come intuito qui da tutti IMPOSSIBILE.. per questo si può optare nel rielaborare il ritardo durante la pausa dei 20 - 30 millisecondo e quindi dare risposta opportuna diminuendo il ritardo. tutto qui |
31 ottobre 10, 23:00 | #9 (permalink) Top | |
Adv Moderator Data registr.: 15-08-2007 Residenza: sto a Massa ma sono molto Positivo
Messaggi: 12.071
| Citazione:
Tu devi generare un impulso PWM con frequenza totale di 50Hz in base ad un impulso che ti arriva. Che i due impulsi inizino asseme non ti importa nulla, ne tantomeno importa al servo. Pertanto l'unica cosa che devi fare è: leggere l'impulso, calcolare la durata di quello da generare in base alla tua funzione di trasformazione e generare l'impulso in uscita. Non centrano nulla i ritardi o gli anticipi (credo sia la corretta definizione di "ritardo ancora più breve") In picbasic il tuo problema lo si risolve con ben 8 righe di codice. Esempio per aumentare del 20% le corse: while 1=1 a=pulsin(gpio.portain,1); if (a!=0) then b=((a-150)*1.2)+150; low gpio.portaout; pulsout(gpio.portaout, b,1); endif wend Alla fine non mi sembra così complesso... | |
02 novembre 10, 10:38 | #10 (permalink) Top | |
User Data registr.: 19-07-2008 Residenza: catania
Messaggi: 978
| ok
scusami se uso terminologia marziana! appena ho tempo cerco di tradurre tutt oin termini di assembler ..comunque mi la tua osservazione coincide con la mia .. però detta meglio da te ovviamente.. a dopo Citazione:
| |
Bookmarks |
| |
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Commenti | Ultimo Commento |
Aumentare Range TX-RX | Katana13 | Radiocomandi | 12 | 18 marzo 10 18:00 |
Aumentare la velocità | imperatore82. | Aeromodellismo Volo Elettrico | 1 | 04 novembre 09 14:10 |
Aumentare la spinta | twentynine | Aeromodellismo Ventole Intubate | 18 | 18 gennaio 09 20:19 |
Aumentare % miscela | truffolo | Automodellismo Mot. Scoppio On-Road | 10 | 02 ottobre 07 11:24 |
eco 8 - aumentare il passo | xfile69 | Elimodellismo Principianti | 0 | 19 agosto 06 23:51 |