BaroneRosso.it - Forum Modellismo

BaroneRosso.it - Forum Modellismo (https://www.baronerosso.it/forum/)
-   Circuiti Elettronici (https://www.baronerosso.it/forum/circuiti-elettronici/)
-   -   Convertire PWM (https://www.baronerosso.it/forum/circuiti-elettronici/104552-convertire-pwm.html)

Emanue|e 29 settembre 08 21:26

Convertire PWM
 
Avrei la necessità di convertire il segnale Pwm di comunicazione di servi, riceventi ecc.. in un segnale analogico che varia tra 0 e 5 volt. Cosa mi consigliate?
Vi ringrazio
Emanuele

marcosinatti 29 settembre 08 22:56

Io non avrei dubbi userei un pic che legge la lunghezza dell'impulso minimo 1mS max 2 mS poi darei fuori un uscita in pwm dal pic con una frequenza di qualche Khz e duty cicle da 0 al 100%, poi con una resistenza, un condensatore ed un operazionele in configurazione integratore renderei il segnale analogico, unico neo è che con un operazionele alimentato a 5V non si riesce a tirare fuori 0-5V ma circa 0-3,8V.
Alternativa all'integratore si portrebbe fare un convertitore D/A con 9 resistenze usando 8 uscite del pic, si avrebbero 256 livelli, oppure usare un convertitorino D/A magari in i2c.

Ciao
Marco

Emanue|e 29 settembre 08 23:00

Ciao Marco, puoi dirmi di più su qualche convertitore DA i2c? Potrebbe fare proprio al caso mio!
Grazie

BBC25185 29 settembre 08 23:04

io userei il duty cycle con il PIC... in fondo è già stato fatto (regolatore per motori in continua)

Emanue|e 29 settembre 08 23:06

Citazione:

Originalmente inviato da BBC25185 (Messaggio 1136553)
io userei il duty cycle con il PIC... in fondo è già stato fatto (regolatore per motori in continua)

Ora cerco qualche info. Intanto ti ringrazio.

Emanue|e 29 settembre 08 23:20

Ma in un regolatore per motori a spazzole di quelli già fatti, all'incirca di quanti step di risoluzione parliamo? Mi serviva una cosa abbastanza precisa...

marcosinatti 30 settembre 08 00:21

In i2c ho usato solo convertitori A/D ma i D/A non dovrebbero essere molto diversi, il pic è il master e il convertitore slave e vai a scrivere un indirizzo preciso che determina l'uscita.
Questi del link sono i promi che mi sono capitati a tiro Data Converters - Digital to Analog Converters - DAC5574 - TI.com

Ciao

SoldatoSemplice 30 settembre 08 14:37

Ma non sarebbe molto più semplice uno snubber RC? In questo modo con una resistenza e un condensatore risolvi, senza scomodare un PIC che per giunta andrebbe anche programmato allo scopo e poi sull'operazionale sono d'accordo con te, ma non ho capito per quale motivo gli consigli un integratore, il nostro amico se non sbaglio ha detto che gli serve solo una tensione analogica proporzionale giusto? Magari un semplice buffer o un amplificatore sarebbe migliore, potrebe usare l'LM358 che essendo rail-to-rail non avrebbe problemi di abbassamento di tensione in uscita e si ritroverebbe fedeli i suoi 5 volt, quindi la domanda sorge spontanea, a cosa ti serve questa tensione analogica in uscita? Devi pilotare una qualche forma di carico? E' solo un segnale elettrico che deve pilotare qualcosa tipo un preamplificatore? Andrà amplificata, filtrata modulata o trattata in qualche modo? Raccontaci di più su cosa deve fare la tua tensione in uscita desiderata

Emanue|e 30 settembre 08 16:04

pwm
 
Allora, devo riuscire ad interfacciare un giroscopio per modellismo ad un brick NXT Mindstorm della Lego (è un piccolo robot programmabile). Ancora non ne sono sicuro al 100%, ma l'NXT non è in grado di gestire il segnale del giroscopio con il firmware standard. Il brick accetta connessioni di tipo i2c, ma SOLO COME MASTER e possiede al suo interno un convertitore AD. L'idea, anche se con una serie di conversioni inutili, era di trasformare il segnale digitale del giroscopio in analogico e poi tramite il suo convertitore AD integrato ricreare un segnale proporzionale che possa essere gestito a piacimento. Il tutto andrebbe bene solo se la conversione è abbastanza affidabile. Altra alternativa sarebbe quella di aprire il giroscopio e prelevare il segnale del sensore prima che venga convertito in digitale, ma è davvero piccolo per metterci le mani... Ovviamente esiste già un giroscopio fatto apposta per l'NXT, ma sarebbe troppo facile :P!!
Se la cosa non è fattibile mi toccherà mettere le mani sul firmware del brick (open source) per gestire il segnale del giroscopio così com'è.:huh:

SoldatoSemplice 30 settembre 08 16:15

In pratica tu chiedi una cosa del genere: hai un giroscopio che trasforma una grandezza analogica in una digitale, che tu vuoi ritrasformare in analogico, per mandarla all'NXT il quale la ritrasforma in digitale e tu alla fine vuoi manipolare questo dato sull'NXT giusto? E' fattibile se poi sei in grado di programmare adeguatamente l'NXT comunque comincia a darci qualche informazione più tecnica circa la stringa digitale in uscita dal giroscopio, conosci il formato del frame che viene inviato in ogni pacchetto? Viene inviato qualche bit di preambolo o di CRC che va escluso dal vero payload? Opppure invia direttamente il payload senza formattazione? Perchè nel primo caso bisogna interfacciare un sistema digitale che ti elimina i bit che non ti interessano nel secondo caso passiamo direttamente alla conversione.

Emanue|e 30 settembre 08 16:42

La conversione non ha bisogno di eliminare nessun bit, l'uscita del giroscopio RC comanda il servo di coda negli elicotteri, quindi sfrutta il classico protocollo di comunicazione ad onda quadra con periodo di 20 ms e variando l'ampiezza dell'impulso tra 1.25 ed 1.75. Per fortuna nessun preambolo e nessun CRC. Quello che mi servirebbe è che quando l'ampiezza dell'impulso è 1.25 il convertitore mi da 0 volt, quando l'ampiezza è 1.75 mi da 5 volt.
Grazie
Emanuele

SoldatoSemplice 30 settembre 08 16:45

Se è tutto qui è di una semplicità enorme, aspetta due minuti e ti faccio lo schema

SoldatoSemplice 30 settembre 08 16:57

Aspetta un attimo, mi sono appena rivisto il protocollo di comunicazione ed è parecchio più complicato di come dici tu, da quello che sò io 1,25 e 1,75 non c'entrano nulla sennò era troppo facile... io sapevo che benchè il periodo è di 20 millisecondi come hai detto tu, l'ampiezza è sempre di 5 volt, e il duty cycle varia da 1 millisecondo (condizione di massimo freno) a 2 millisecondi (condizione di massima spinta) sempre su una base di 20 millisecondi, da dove li hai tirati fuori questi 1,25 e 1,75?

Emanue|e 30 settembre 08 17:04

L'ho visto qui sul forum, in questo articolo:
Circuito Prova Servocomando :: BaroneRosso.it :: Il portale del modellismo in Italia
Però devi calcolare che non sono un elettronico, ma quasi un informatico con alcune conoscenze elettroniche!
Grazie

Emanue|e 30 settembre 08 17:09

Doppio messaggio scusate, navigo col cellulare...:angry:

SoldatoSemplice 30 settembre 08 17:10

Infatti era come dicevo io, solo che io metto una certa tolleranza, io mi ricordavo 1 millisecondo e lì dice 1,25; io dicevo 2 e lui 1,75 ma fai attenzione che tu fai un errore grave, confondi una grandezza di tempo con una di tensione, infatti gli 1,25 e 1,75 sono MILLISECONDI e non volt, quindi a te non serve un sistema che discrimina 1,25 volt da 1,75 sempre volt (perchè non sono volt ma millisecondi), ma un sistema che ti trasforma i millisecondi in volt e questo si che è bello più tosto....

Emanue|e 30 settembre 08 17:14

No no, forse mi ero espresso male, dal link che ti ho postato si vede chiaramente che parliamo di tempo e non di volt. Per un attimo mi ero convinto che fosse più facile di quanto pensassi, invece da come dici dovrò perderci più tempo del previsto ed inevitabilmente dovrò mettere in mezzo qualche pic.

SoldatoSemplice 30 settembre 08 17:21

Lasciamo stare i PIC in questo genere di applicazioni per me non sono mai la scelta migliore

MSchiepp 30 settembre 08 18:28

Citazione:

Originalmente inviato da SoldatoSemplice (Messaggio 1137717)
Lasciamo stare i PIC in questo genere di applicazioni per me non sono mai la scelta migliore

Non direi... un 12F629 più uno shift register e 9 resistenze e hai un convertitore a 8 bit, 256 step con una precisione più che accettabile. In analogico c'è qualche problema in più perchè il duty cycle del segnale che devi integrare varia circa da 1/10 a 1/20 (1 o 2 mS su 20 di ciclo) e quindi ti servirebbe un circuito che ti dia 0 a 1/20 e 5 volt a 2/20 con una risoluzione molto piccola, perchè il duty cycle è tutto sbilanciato con un periodo lunghissimo di segnale basso ed uno cortissimo di segnale alto...

Vai con il pic che è facile!

Michele

SoldatoSemplice 30 settembre 08 22:37

E tu generi il segnale invertito in modo di avere un duty cycle ampissimo e poi lo inverti di nuovo, tanto una frequenza massima di 500 hertz si può dire che praticamente qualunque transistor regge (almeno quelli che sono solito trattare io) e neanche viene troppo complicato e resto comunque del parere di non usare il PIC poi ci sono infinite soluzioni per raggiungere un medesimo risultato che decida il nostro amico.....

Mrk89 30 settembre 08 23:52

1 Allegato/i
Citazione:

Originalmente inviato da SoldatoSemplice (Messaggio 1138397)
E tu generi il segnale invertito in modo di avere un duty cycle ampissimo e poi lo inverti di nuovo, tanto una frequenza massima di 500 hertz si può dire che praticamente qualunque transistor regge (almeno quelli che sono solito trattare io) e neanche viene troppo complicato e resto comunque del parere di non usare il PIC poi ci sono infinite soluzioni per raggiungere un medesimo risultato che decida il nostro amico.....

Si potrebbe utilizzare il PIC per "copiare" il segnale PWM del servo più volte.
Il pic rileva il fronte di salita del segnale, resetta il TMR0 e, sul fronte di discesa del segnale memorizza il valore letto dal TMR0.
Nei restanti 18ms ripete il segnale letto.
Sicuramente non sono stato molto chiaro:lol:
Spero si capisca meglio dal disegno.


Supponiamo di aver 2ms divisi in 200 passi di TMR0.
Utiliziamo il TMR0 nei primi 2ms del segnale per leggerlo, e nei restanti 18ms per generare un segnale "copia" del precedente. Poi in uscita si utilizza un semplicissimo RC per portare il segnale da digitale ad analogico variabile da 0 a 5V:wink:

MSchiepp 01 ottobre 08 00:02

Questa è carina!! Più che ripetere il segnale del servo bisogna generare una frequenza il cui periodo alto vari da 0% a 100% quando l'impulso in ingresso varia da 1 a 2 mS: in pratica basta sottrarre i mS dal segnale letto e buttare fuori impulsi da 0 a 1mS ogni millisecondo. Bravo!

Michele

Mrk89 01 ottobre 08 00:10

Citazione:

Originalmente inviato da MSchiepp (Messaggio 1138598)
Questa è carina!! Più che ripetere il segnale del servo bisogna generare una frequenza il cui periodo alto vari da 0% a 100% quando l'impulso in ingresso varia da 1 a 2 mS: in pratica basta sottrarre i mS dal segnale letto e buttare fuori impulsi da 0 a 1mS ogni millisecondo. Bravo!

Michele

Grazie...:lol:
L'avevo fatto tempo fa per un regolatore per motori brushed...^_^
Solo che facevo aprire e chiudere un MOS per variare la velocità di un motore.

P.S. Ho detto "ripetere" perchè io utilizzo il TMR0 sia per leggere il segnale che arriva dalla ricevente, sia per creare il segnale "copia", quindi in uscita riporto il segnale arrivato dalla ricevente "riempito" dai segnali creati dal PIC.:rolleyes:

SoldatoSemplice 01 ottobre 08 14:08

1 Allegato/i
Concordo sul fatto che sia una soluzione elegante e che probabilmente occupa poche righe di codice ma per questa pplicazione è sprecata nel thread sopra stiamo discutendo qualcosa di molto simile, guarda per esempio questo circuito postato nell'altro thread e segui la discussione, al finale tu ci metti un invertitore BJT e ottieni fedele il tuo segnale

Emanue|e 01 ottobre 08 20:34

Vi ringrazio molto per le risposte.
Mi è venuta un' idea che forse renderebbe tutto molto facile ed immediato risolvendo in 5 minuti senza scomodare PIC o integrati, solo che al momento non ho la possibilità di provare...
Ma se smonto un servo, ne prendo il circuito eliminando il potenziometro e prelevando la tensione dove è attaccato al motore? Il motore del servo è il classico due poli in continua giusto? Potrebbe funzionare...
Emanuele


Tutti gli orari sono GMT +2. Adesso sono le 01:04.

Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002