Newsgroup: it.hobby.elettronica.digitale
Titolo: inverter sinusoidale con micro

Salve a tutti voglio realizzare un inverter sinusoidale e voglio
utilizzare un micro per realizzare una sinusoide con un segnale PWM .
Quindi vorrei dividere una sinusoide in 256 step dove il max negativo
corrisponde a un duty cycle del 1% a 0 un D.C. del 50% e il max
positivo un D.C. del 99%.Se  calcolo i punti intermedi linearmente
viene un dente di sega.
Il mio problema è come calcolare i punti intermedi? Grazie a tutti.

 Il mio problema è come calcolare i punti intermedi? Grazie a tutti.
Basta usare la funzione seno:
http://it.wikipedia.org/wiki/Seno_%28trigonometria%29

 
http://it.wikipedia.org/wiki/Seno_%28trigonometria%29
Naturalmente è consigliabile calcolare prima e una volta per tutte i valori
che ti servono. Poi li memorizzi in una tabella (detta LUT) nel uC e non
devi fare altro che scorrere ciclicamente questa tabella. 
Marco / iw2nzm

 devi fare altro che scorrere ciclicamente questa tabella.
ciao
spero possiate darmi dei chiarimenti :-)))
come mai è meglio compilare una tabella???
solo per il fatto che sono un numero finito di passi e si "alleggerisce" il 
micro???
oppure ci sono altri motivi???
ciao
Roberto 

 oppure ci sono altri motivi???
Per due motivi principali: se usi microcontrollori a 8 bit (la grande
maggioranza dei PIC, AVR e simili) fargli calcolare funzioni
trigonometriche in tempo reale per ogni punto della sinusoide è
praticamente impossibile. Se usi una LUT invece hai solo bisogno della
EEPROM interna (o al limite anche della flash stessa) e il micro deve solo
leggere in sequenza le locazioni di memoria. 
Anche ammesso di disporre di una MCU più performante non avrebbe senso
impegnare la CPU per eseguire calcoli inutili (inutili perché sono
ripetitivi e sempre uguali, quindi non contenendo "informazione" si possono
benissimo sostituire da valori costanti).
Ciao
Marco / iw2nzm

 ha scritto:

Perchè se il µC dovesse calcolare tutto a runtime non ce la farebbe, mentre con
le tabelle vai liscio e devi solo gestire lo scorrere di un puntatore in
risposta ad un interrupt del timer.
La precisione temporale è fondamentale in questi casi.
--
ciao
  Stefano

Grazie a tutti  ho compilato la mia tabella , ora comincio a scrivere
il programma , se ho problemi vi rompo le scatole.

 benissimo sostituire da valori costanti).
ciao
tanto per capire :-)))
allora tutte le funzioni trigonometriche che sono implementate nei 
compilatori sono solo "accessori" che servono solo in sporadici e rarissimi 
casi???
cioè se io volessi usare un micro tipo 16f84 (meglio 628) per generare 
solamente una onda sinusoidale a 50Hz non ce la farebbe???
ciao
Roberto 

 solamente una onda sinusoidale a 50Hz non ce la farebbe???
tempi di calcolo Pic18f, piů di un ordine di grandezza inferiori a qullo di 
un pic16f:
@ 10MIPS
Function       Prog Words     RAM     Max Time (uS)
8 x 8 unsigned multiply  1   - 0.1
16 X 16 unsigned multiply  30   7  3
16 X 16 signed multiply  40   8 4
32 x 32 signed multiply  140   18  15
32 / 16 signed divide   450   9  42
Float Add (IEEE 32bit)   320   12  7
Float Mul (IEEE 32bit)   350   13  10
Float Div (IEEE 32bit)   130   14  32
Sqrt (32bit)    320   10  57
Sin (32bit)    420   11  241
consiglio: usa un Pic con PWM enhanced, fatto apposta per pilotare ponti ad 
H, con tempo morto programmabile:
http://snipurl.com/10m7v
-- 
simone.bern
Mr. Heisemberg is not the only one who can affect a measurement by looking 
at it (Robert A. Pease)
zsimone...@zliberoz.it
 (Rimuovere i caratteri di zorro per rispondere 
via mail)

"bobwolf" ha scritto

Se si deve calcolare il seno di alcuni valori e questi valori sono sempre
gli stessi (come è nell'esempio che è stato citato), non ha senso usare la
funzione seno e far fare delle operazioni (non poche) che sono sempre le
stesse in quanto i valori in ingresso della funzione seno sono sempre gli
stessi. Si fa una tabella dove sono tabulati i valori che interessano
(bastano i valori relativi ad un periodo del seno). Con 2-3 istruzioni
macchina si ha pronto il risultato che serve.
Se invece si deve calcolare il seno di un valore che è variabile e quindi
non lo si conosce a priori, allora si usa la funzione seno (non lo si può
calcolare prima).
La funzione seno disponibile nei vari linguaggi di programmazione ha come
argomento e come valore di ritorno un numero floating point. Quindi il
calcolo del seno è estremamente oneroso dal punto di vista computazionale.
Nella tabelle con i valori precodificati viene salvato in genere un semplice
valore intero (1 byte) che è il valore che ad esempio viene mandato in
ingresso al convertitore D/A per generare il segnale analogico seno.

 
http://snipurl.com/10m7v
URCA che tempi !!!!
oltretutto con un quarzo da 40MHz (credo)
da quello che ne posso capire è proprio uno spreco di risorse!!!
ecco perchè è meglio la tabella...
comunque la mia era solo curiosità ma mi hai fatto capire perchè quando 
faccio dei programmi (semplici) per il 16F877A mi vengono fuori delle cose 
strane :-(((
per il fatto del PWM non gli devi comunque dare la forma d'onda ???
ciao
Roberto 

 per il fatto del PWM non gli devi comunque dare la forma d'onda ???
che cavolo vuol dire 'sta frase ? Devi MODULARE il pwm con quello che vuoi 
tu, un seno, una gaussiana, una polinomiale, un'onda quadra.
L'importante è che se vuoi fare un'inverter, ovvero un dispositivo che a 
partire da una tensione continua ti generi un'onda sinusoidale e piloti 
dispositivi di una certa potenza, devi usare ponti ad H, e devi approfondire 
(e poi implementare) il concetto di dead time, o tempo morto, del pilotaggio 
pwm. Altrimenti rischi di fare guai.
Poichè ci sono Pic che implementano questa funzione automaticamente, ti giri 
molto meno le scatole se usi uno di quelli.
Se sei solo curioso, puoi leggerti un datasheet. Non mi ricordo quale, ma 
diversi Pic18 e ,direi, dsPic hanno una periferica pwm enhanced. Cerca nel 
sito.


 che cavolo vuol dire 'sta frase ? Devi MODULARE il pwm con quello che vuoi
ciao
grazie dell'interessamento
la mia per ora è semplice curiosità
ho dato un'occhio anche ad il link alla tua discussione e qualcosa 
intravedo, ma poichè per ora non mi è necessario fare ne inverter ne 
controlli di motori non ci perdo la testa :-)))
da quello che ho capito:
il PWM va modulato, con le tabelle del seno già scritte e non calcolate, 
l'uscita va mandata ad un ponte H strutturato in modo che a PWM 50% dia 0V 
in uscita , a 100% pwm +Vmax ed a 0%pwm -Vmax
il dead-time è quella zona temporale in cui i mosfet del ponte potrebbero 
essere ancora attivi (anche se "ufficialmente" disattivati), quindi con alta 
frequenza di PWM rischieresti di mettere involontariamente in conduzione due 
lati del ponte che non lo devrebbero essere (corto circuito)
ho capito una ceppa :-)))???
ciao
Roberto 

 ho capito una ceppa :-)))???
Hai capito perfettamente e riassunto con ottima sintesi.
Ciao


 circuito)
Il dead time spesso te lo controlla anche l'integrato che poi va a pilotare 
il ponte H (se lo fai a mosfet).
Vedi Intersil HIP4081, 4082, International Rectifier ed altri.
ciao
coals