Progettazione amplificatore classe D
Moderatori: carloc,
g.schgor,
IsidoroKZ,
BrunoValente
22 messaggi
• Pagina 2 di 3 • 1, 2, 3
0
voti
Non so darti una risposta precisa, non credo vengano rispettati degli standard con grande precisione, da quello che ho visto negli anni quando mi è capitato di lavorare con apparecchiature audio non professionali le ampiezze massime dei segnali di un'uscita line o Aux vanno da circa 300mV a circa 1V di valore efficace che per segnali sinusoidali corrispondono a 425mV e 1.41V di picco e a 850mV e 2.82V picco-picco
-
BrunoValente
33,6k 7 10 13 - G.Master EY
- Messaggi: 6545
- Iscritto il: 8 mag 2007, 14:48
1
voti
Avendo acquisito una certa esperienza con la regolazione dei motori tramite MicroControllerUnit nel campo dei robottini, è sorta spontanea l'idea di mettere un altoparlante al posto del motore, magari aumentando la frequenza di commutazione. La regolazione, anzi in questo caso la modulazione, viene pilotata da un segnale audio prelevato dall'esterno, per esempio dalla presa auricolare di un qualsiasi apparecchio.
L'hardware e il software sono presi da un robottino già realizzato, apportando soltanto le minime varianti indispensabili:
Ai capi dell'altoparlante in assenza di segnale audio si ha una portante in onda quadra. In presenza del segnale vengono modulate le durate dei due semiperiodi, lasciando sempre invariata la durata totale dell'intero periodo, ottenendo un risultato lineare senza bisogno di controreazione. Vi è un breve dead time fra i semiperiodi, peraltro la forma d'onda risente della modesta qualità dell'hardware.
Il registro P1TPER del programma, rappresenta la metà del numero degli impulsi di clock contenuti in un periodo della portante. Considerando che il clock va a 40 MHz mentre P1TPER vale 700, risulta una frequenza della portante pari a circa 30 kHz.
P1TPER rappresenta anche la metà del numero dei livelli del segnale audio ottenibili, cioè la risoluzione. Infatti la modulazione avviene variando il duty cycle fra zero e 2 X P1TPER. 1400 livelli significa più di 10 bit (1024 livelli) e meno di 11 bit (2048 livelli).
Data la frequenza del clock, il valore impostato nel detto registro rappresenta quindi un compromesso fra le opposte esigenze che la risoluzione sia elevata, e che la frequenza della portante sia bene al di sopra della banda udibile.
La corrente assorbita, comprendente anche il consumo della MCU e del ponte H, è 390 mA in assenza di segnale, con un altoparlante bicono tipo autoradio, e la prova di ascolto sembra buona. Il tempo di elaborazione è stato verificato esaminando con l'oscilloscopio l'apposita uscita digitale evidenziata nel programma, e risulta che il main program viene soltanto interrotto per un microsecondo o poco meno, ad ogni semiciclo della portante. Pertanto, nei progetti che già prevedono la presenza di una MCU, un simile amplificatore potrebbe essere aggiunto quasi a costo zero. La tensione di alimentazione e la potenza potrebbero essere aumentati anche molto ma non ho provato.
L'articolo completo si trova su:
http://www.grix.it/viewer.php?page=12898&mode=preview
L'hardware e il software sono presi da un robottino già realizzato, apportando soltanto le minime varianti indispensabili:
- Codice: Seleziona tutto
#include "fusebit.c" //fusebit fastRC wPLL e tutto libero
#include "p33FJ128MC802.h" //descrittore MCU
//_FOSCSEL (FNOSC_FRCPLL & IESO_ON)//Oscillatore FastRC 7,37 MHz with PLL
#define ledv PORTAbits.RA2 // RA2 pin9 verde
#define ledr PORTBbits.RB4 // RB4 pin11 rosso
#define dc700 P1DC1 //PWM duty cycle da 700 a 0 polarità -, da 700 a 1400 +
int buf;
int main (void) { //Main Program
PLLFBDbits.PLLDIV=41; // M=43 PLLDIV=41 clock oscillator Tcy=25 ns
CLKDIVbits.PLLPOST=0; // N1=2 N2=2(default) 7.37*M/N1/N2=79Mhz~40MIPS
while (OSCCONbits.COSC != 0b001){}; // Sure for FastRC w PLL
while(OSCCONbits.LOCK!=1) {}; // Wait for PLL to lock
AD1CHS0bits.CH0SA = 4; //AN4 pin 6 chan0 segnale audio
AD1CON1bits.SSRC=7; //ADC1 module auto-convert
AD1CON1bits.AD12B=1; //ADC1 module 12 bit
AD1CON1bits.FORM=1; //ADC1 module signed integer
AD1CON3bits.SAMC = 16; // SAMPLE TIME 16 CK
AD1CON3bits.ADCS = 12; //ADC CK 39.6/(12+1)MHz 14conv+16samp 100 kS/s 10 us
AD1PCFGL = 0b000000000101111; //analog input AN4 pin6 audio
TRISA = 0b1111111111111011; //OUT RA2 PIN9 LED2 verde
TRISB = 0b0011111111101111; //OUT RB4 PIN11 LED2 rosso RB14,15 ponteH
AD1CON1bits.ADON=1; //ADC1 module ON
P1TCONbits.PTMOD = 3; //PWM1 continuous up/down count with double interrupts
P1TPER = 700; //PWM1 time base half period/Tcy PWM1 30 kHz?
PWM1CON2bits.IUE = 1; //PWM1 duty cycle immediate update enable
PWM1CON1bits.PEN1H = 1;//PWM1 duty cycle enabled channel 1 pin 25 RB14 high
PWM1CON1bits.PEN1L = 1;//PWM1 duty cycle enabled channel 1 pin 26 RB15 low
P1DTCON1bits.DTA = 63; //PWM1 dead time A =63*Tcy
P1TCONbits.PTEN = 1; //PWM1 time base enabled
IEC3bits.PWM1IE = 1; //PWM1 int.enable
dc700=700;
prova: ledr^=1; //per testare i tempi di elaborazione
goto prova; }
void __attribute__((no_auto_psv)) _ISRFAST _MPWM1Interrupt(void) //PWM1
{ buf=ADC1BUF0; //legge registro di conversione ADC
AD1CON1bits.SAMP=1; //ADC1 module sample start
dc700=700+(buf/3); //modula il duty cycle (sarebbe meglio uno shift)
IFS3bits.PWM1IF = 0; } //ISR esce
Ai capi dell'altoparlante in assenza di segnale audio si ha una portante in onda quadra. In presenza del segnale vengono modulate le durate dei due semiperiodi, lasciando sempre invariata la durata totale dell'intero periodo, ottenendo un risultato lineare senza bisogno di controreazione. Vi è un breve dead time fra i semiperiodi, peraltro la forma d'onda risente della modesta qualità dell'hardware.
Il registro P1TPER del programma, rappresenta la metà del numero degli impulsi di clock contenuti in un periodo della portante. Considerando che il clock va a 40 MHz mentre P1TPER vale 700, risulta una frequenza della portante pari a circa 30 kHz.
P1TPER rappresenta anche la metà del numero dei livelli del segnale audio ottenibili, cioè la risoluzione. Infatti la modulazione avviene variando il duty cycle fra zero e 2 X P1TPER. 1400 livelli significa più di 10 bit (1024 livelli) e meno di 11 bit (2048 livelli).
Data la frequenza del clock, il valore impostato nel detto registro rappresenta quindi un compromesso fra le opposte esigenze che la risoluzione sia elevata, e che la frequenza della portante sia bene al di sopra della banda udibile.
La corrente assorbita, comprendente anche il consumo della MCU e del ponte H, è 390 mA in assenza di segnale, con un altoparlante bicono tipo autoradio, e la prova di ascolto sembra buona. Il tempo di elaborazione è stato verificato esaminando con l'oscilloscopio l'apposita uscita digitale evidenziata nel programma, e risulta che il main program viene soltanto interrotto per un microsecondo o poco meno, ad ogni semiciclo della portante. Pertanto, nei progetti che già prevedono la presenza di una MCU, un simile amplificatore potrebbe essere aggiunto quasi a costo zero. La tensione di alimentazione e la potenza potrebbero essere aumentati anche molto ma non ho provato.
L'articolo completo si trova su:
http://www.grix.it/viewer.php?page=12898&mode=preview
0
voti
Di solito si mette un filtro LC passa-basso sull'uscita
Le persone sagge parlano perché hanno qualcosa da dire.
Le persone sciocche perché hanno da dire qualcosa.
Le persone sciocche perché hanno da dire qualcosa.
-
SediciAmpere
1.867 4 5 8 - Expert EY
- Messaggi: 2230
- Iscritto il: 31 ott 2013, 15:00
0
voti
BrunoValente ha scritto:...vanno da circa 300mV a circa 1V di valore efficace che per segnali sinusoidali corrispondono a 425mV e 1.41V di picco e a 850mV e 2.82V picco-picco
Grazie mille per la precisazione.
Nel frattempo per curiosità mi sono messo con oscilloscopio a registrare qualche statistica:
Effettivamente pare che Vpp sia al massimo di 1.50V circa su entrambi i canale (DX & SX).
A questo punto, visto che voglio alimentare l'amplificatore a 24 V, sceglierei un guadagno dello stadio di 26dB. Così facendo posso anteporre allo stadio di amplificazione uno per la regolazione del volume e uno per la regolazione dei toni.
Può funzionare secondo voi?
Andrea
0
voti
EcoTan ha scritto:...Pertanto, nei progetti che già prevedono la presenza di una MCU, un simile amplificatore potrebbe essere aggiunto quasi a costo zero. La tensione di alimentazione e la potenza potrebbero essere aumentati anche molto ma non ho provato.
Ciao EcoTan, grazie per l'articolo. Effettivamente mi chiedo anche io perché non ci sia un filtro RC di uscita.
Andrea
0
voti
E va bene, ho messo circa 300 microH con 1 microF. Ma c'è di peggio, quell'hardware non è adatto, ho dovuto aumentare il dead time a ben 6 microsec per avere una corrente a vuoto più ragionevole. Dovrei fare un ponte H più serio coi MosFet e ci vorrebbe anche una MCU ancora più veloce. E magari chiudere il tutto in un loop di reazione.
Ma la cosa va presa per quello che è, un esperimento abbastanza nuovo e subito abbastanza riuscito.
Ma la cosa va presa per quello che è, un esperimento abbastanza nuovo e subito abbastanza riuscito.
0
voti
Buonasera a tutti e buon anno!
Il progetto non è morto, sto solo raccogliendo le idee.
Avrei bisogno di una delucidazione:
Il TPA3116/3126 ha due ingressi differenziali, uno per ogni canale (DX e SX). Volendo io anteporre uno stadio per la regolazione del volume (potenziometro doppio) + uno stadio per la regolazione dei toni (Baxandall attivo probabilmente) sono obbligato a trasformare il segnale differenziale in single-ended. Il TPA funziona correttamente anche riferendo a massa i relativi ingressi negativi dei canali ma, a livello pratico, ci possono essere ripercussioni? Mi viene in mente una maggiore suscettibilità ai rumori ma nient'altro..
Grazie!
Il progetto non è morto, sto solo raccogliendo le idee.
Avrei bisogno di una delucidazione:
Il TPA3116/3126 ha due ingressi differenziali, uno per ogni canale (DX e SX). Volendo io anteporre uno stadio per la regolazione del volume (potenziometro doppio) + uno stadio per la regolazione dei toni (Baxandall attivo probabilmente) sono obbligato a trasformare il segnale differenziale in single-ended. Il TPA funziona correttamente anche riferendo a massa i relativi ingressi negativi dei canali ma, a livello pratico, ci possono essere ripercussioni? Mi viene in mente una maggiore suscettibilità ai rumori ma nient'altro..
Grazie!
0
voti
Dal link relativo al giradischi abbiamo questa informazione:
"Connessione phono posteriore per collegare il giradischi allo stereo di casa."
Se il segnale è sbilanciato in origine, e resta tale lungo la linea di collegamento, direi che tanto vale rinunziare all'ingresso differenziale anche nell'amplificatore.
"Connessione phono posteriore per collegare il giradischi allo stereo di casa."
Se il segnale è sbilanciato in origine, e resta tale lungo la linea di collegamento, direi che tanto vale rinunziare all'ingresso differenziale anche nell'amplificatore.
0
voti
In realtà il giradischi ha due uscite RCA, una per canale. Quindi direi che le uscite sono differenziali.
22 messaggi
• Pagina 2 di 3 • 1, 2, 3
Chi c’è in linea
Visitano il forum: Google Adsense [Bot] e 44 ospiti