Comincio a capire qualcosina....almeno leggendo i datasheet comprendo più di prima.
Una domanda...scusa ma sono un po' curioso....
1) vedo che i micro hanno delle porte con possibilità di generare un PWM.
Se genero un segnale da queste porte uso il Timer e suoi comparatori.
Al contrario se genero sempre un PPM , ma da porte senza PWM...dovrò dare sempre dei tempi Ton e Toff usando il clock/timer comune a tutti ( ??? ) forse meno preciso del primo.
All' atto pratico cosa cambia tra i due segnali ....tra quello generato attraverso una porta con PWM e una senza ?????
Grazie
Microcontrollori....mi date qualche info ?
Moderatori:
carloc,
g.schgor,
BrunoValente,
IsidoroKZ
22 messaggi
• Pagina 2 di 3 • 1, 2, 3
0
voti
0
voti
Adesso sono curioso io.
Portami un esempio, un datasheet, una definizione di "porta PWM".
Rimango in attesa.
Portami un esempio, un datasheet, una definizione di "porta PWM".
Rimango in attesa.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
ammazza come sei curioso....
Sicuramente uso impropriamente il nome porta PWM...intendendo che posso usare un tot. di "moduli" PWM sulle porte in uscita.
Forse avevo un po' di confusione perché quando leggo cose del tipo:
The Arduino Duemilanove ("2009") is a microcontroller board based on the ATmega168 (datasheet) or ATmega328 (datasheet). It has 14 digital input/output pins (of which 6 can be used as PWM outputs), 6 analog inputs, a 16 MHz crystal oscillator, a USB connection....[CUT] ......
Controllando nei datasheet leggo che un certo micro ha un tot di PWM hardware utilizzabili sulle porte.
Comunque mi rimane il dubbio di cosa cambia nel generare un PPM con delle semplici istruzioni che dicono HIGH per 1ms e LOW per 20ms...rispetto ad utilizzare un PWM ( penso utilizzando delle librerie ).
Grazie
Sicuramente uso impropriamente il nome porta PWM...intendendo che posso usare un tot. di "moduli" PWM sulle porte in uscita.
Forse avevo un po' di confusione perché quando leggo cose del tipo:
The Arduino Duemilanove ("2009") is a microcontroller board based on the ATmega168 (datasheet) or ATmega328 (datasheet). It has 14 digital input/output pins (of which 6 can be used as PWM outputs), 6 analog inputs, a 16 MHz crystal oscillator, a USB connection....[CUT] ......
Controllando nei datasheet leggo che un certo micro ha un tot di PWM hardware utilizzabili sulle porte.
Comunque mi rimane il dubbio di cosa cambia nel generare un PPM con delle semplici istruzioni che dicono HIGH per 1ms e LOW per 20ms...rispetto ad utilizzare un PWM ( penso utilizzando delle librerie ).
Grazie
0
voti
Non cambia niente. Se pero' lo fai con istruzioni e ritardi il micro fara' quello e basta. I moduli servono perche' viaggiano da soli (piu' o meno) ed il micro si puo' dedicare a fare altro o a gestire altri moduli.
Inoltre generando segnali con moduli dedicati ottieni generalmente maggiore precisione.
Inoltre generando segnali con moduli dedicati ottieni generalmente maggiore precisione.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
OK, quindi sia in un modo che nell' altro usano sempre lo stesso timer .... giusto ?
Quello che viene chiamato JITTER, che mi sembra di aver capito essere un specie di errore dato di ritardi o anticipi...come posso valutarlo dalle caratteristiche del micro ? Non cambia nulla se lo genero con moduli PWM o via "SW" ?
Grazie ancora
Quello che viene chiamato JITTER, che mi sembra di aver capito essere un specie di errore dato di ritardi o anticipi...come posso valutarlo dalle caratteristiche del micro ? Non cambia nulla se lo genero con moduli PWM o via "SW" ?
Grazie ancora
0
voti
PPM e PWM sono due cose sostanzialmente differenti. Le periferiche PWM di un micro non consentono di norma di ottenere un PPM. Sono fatte per generare PWM che richiede meno informazioni rispetto ad un PPM.
La soluzione è scrivere un programma che comandi tutte le uscite tenendo traccia dei tempi in modo indipendente. Farlo per 12 canali è impresa difficile anche per un programmatore esperto. Devi certamente usare l'assembler che ti permette di avere controllo totale sui tempi esatti delle commutazioni e il jitter, se il lavoro viene eseguito come si deve, diventa sostanzialmente nullo.
Dodici canali con una risoluzione di 1 us richiedono un microcontrollore molto veloce e con un 8 bit è molto difficile tu possa riuscirci.
La soluzione è scrivere un programma che comandi tutte le uscite tenendo traccia dei tempi in modo indipendente. Farlo per 12 canali è impresa difficile anche per un programmatore esperto. Devi certamente usare l'assembler che ti permette di avere controllo totale sui tempi esatti delle commutazioni e il jitter, se il lavoro viene eseguito come si deve, diventa sostanzialmente nullo.
Dodici canali con una risoluzione di 1 us richiedono un microcontrollore molto veloce e con un 8 bit è molto difficile tu possa riuscirci.
1
voti
Certo farlo in un loop ... si può.. ma a parte l'eleganza c'è da dire che il processore non può fare nient'altro, in particolare andarsi a "leggere" in qualche modo i valori di impulsi da generare significherebbe "sballare tutte le temporizzazioni...
Io proverei così (esempio con 4 impulsi)...
* un timer -chiamato genericamente T0 ma poi dipende dal micro che usi quale convenga usare- un timer dicevo fissa la cadenza del gruppo di impulsi,come dire .... free run, autoreload, interrupt on overflow ma non voglio scendere nei dettagli che dipendono da che micro usi... ma sono funzioni che hanno tutti più o meno simili...
* il suo interrupt esegue il codice 1 che, carica nel timer T1 il tempo del primo impulso, setta l'uscita e avvia T1 (poche istrucioni che anche in C non prendono più di qualche decina di cicli macchina)
* ogni successivo interrupt di T1 inverte l'uscita e carica nel registro di compare dello stesso T1 il tempo successivo ( uno alto, uno basso, etc. etc...) e conta a che impulso siamo. Codice 2 , anche in questo caso sono poche istruzioni ed abbiamo invece almeno 300 us per eseguirle (minima durata di un impulso)
* arrivati all'ultimo impulso, codice 3, azzeriamo l'uscita, fermiamo T1 e aspettiamo... che T0 faccia ripartire tutto...
Anche con micro lenti, così a spanne ognuno di quei codici non prende più di 10-20us ogni minimo minimo 300us, questo è rappresentato (non in scala) nel grafico giallo... nel frattempo puoi leggerti una seriale in polling (o anche con un altro interrupt di priorità più bassa), o chissà da dove arrivano i dati da inviare ai servo....
Per l'uscita se fai come dicevo sopra hai un jitter che dipende dal fatto che la latenza dell'interrupt non è fissa ma qualcosa tipo da 4 a 6 cicli -numeri a crai- certo è poca cosa... 2 cilci di jitter a 20MHz sono 100 ns...non credoi che un servo se ne accorga... ma se vuoi strafare ci potrebbero essere dei modi di timer che all'interrupt o al match invertono l'uscita autonomamente, via hardware, e con jitter virtualmente nullo (mi pare che AVR ce l'ha ma documentati)
Io proverei così (esempio con 4 impulsi)...
* un timer -chiamato genericamente T0 ma poi dipende dal micro che usi quale convenga usare- un timer dicevo fissa la cadenza del gruppo di impulsi,come dire .... free run, autoreload, interrupt on overflow ma non voglio scendere nei dettagli che dipendono da che micro usi... ma sono funzioni che hanno tutti più o meno simili...
* il suo interrupt esegue il codice 1 che, carica nel timer T1 il tempo del primo impulso, setta l'uscita e avvia T1 (poche istrucioni che anche in C non prendono più di qualche decina di cicli macchina)
* ogni successivo interrupt di T1 inverte l'uscita e carica nel registro di compare dello stesso T1 il tempo successivo ( uno alto, uno basso, etc. etc...) e conta a che impulso siamo. Codice 2 , anche in questo caso sono poche istruzioni ed abbiamo invece almeno 300 us per eseguirle (minima durata di un impulso)
* arrivati all'ultimo impulso, codice 3, azzeriamo l'uscita, fermiamo T1 e aspettiamo... che T0 faccia ripartire tutto...
Anche con micro lenti, così a spanne ognuno di quei codici non prende più di 10-20us ogni minimo minimo 300us, questo è rappresentato (non in scala) nel grafico giallo... nel frattempo puoi leggerti una seriale in polling (o anche con un altro interrupt di priorità più bassa), o chissà da dove arrivano i dati da inviare ai servo....
Per l'uscita se fai come dicevo sopra hai un jitter che dipende dal fatto che la latenza dell'interrupt non è fissa ma qualcosa tipo da 4 a 6 cicli -numeri a crai- certo è poca cosa... 2 cilci di jitter a 20MHz sono 100 ns...non credoi che un servo se ne accorga... ma se vuoi strafare ci potrebbero essere dei modi di timer che all'interrupt o al match invertono l'uscita autonomamente, via hardware, e con jitter virtualmente nullo (mi pare che AVR ce l'ha ma documentati)
Se ti serve il valore di beta: hai sbagliato il progetto!
0
voti
Con un timer a 16 o piu' bit con 2 comparatori (che possano far commutare l' uscita) e la possibilita' di utilizzarne uno per il reset si puo' fare (quasi) qualsiasi cosa, con ottima risoluzione e senza jitter.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
TardoFreak ha scritto:Con un timer a 16 o piu' bit con 2 comparatori (che possano far commutare l' uscita) e la possibilita' di utilizzarne uno per il reset si puo' fare (quasi) qualsiasi cosa, con ottima risoluzione e senza jitter.
Uno si, 12 no.
0
voti
Infatti.
E se pensiamo che un micro del genere di canali ne puo' anche avere due (senza andare a prendere micro galattici) in un contenitore da 8 pin direi che il problema e' risolto.
Poi, per carita', ognuno e' libero di incasinarsi l' esistenza come meglio crede.
Di modi per fare cose esagerate ce ne sono tantissimi.
E se pensiamo che un micro del genere di canali ne puo' anche avere due (senza andare a prendere micro galattici) in un contenitore da 8 pin direi che il problema e' risolto.
Poi, per carita', ognuno e' libero di incasinarsi l' esistenza come meglio crede.
Di modi per fare cose esagerate ce ne sono tantissimi.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
22 messaggi
• Pagina 2 di 3 • 1, 2, 3
Chi c’è in linea
Visitano il forum: Nessuno e 63 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)



