Ok ma è un po come dire che mele e pere hanno i semini...
Non volevo fare il precisino ma l'accostamento mi ha colpito, i driver nell'accezione più comune oggi sono al più alimentatori, non amplificatori
Differenza amplificatore-driver
Moderatori: g.schgor, BrunoValente, carloc, IsidoroKZ
35 messaggi
• Pagina 2 di 4 • 1, 2, 3, 4
0
voti
EcoTan ha scritto:Un certo parallelismo fra le due situazioni indicate dall'OP a mio avviso sussiste.
Questo è un progettino, sia pure a carattere amatoriale,
http://www.grix.it/viewer.php?page=1289 ... %3Ftab%3D0
in cui si fa commistione a bella posta fra le due cose. (è su un sito che richiede registrazione e anche qualche stelletta per leggere i progetti e in qualche modo potrei sbloccarne il contenuto)
Potrei averlo ?
0
voti
richiurci ha scritto:Ok ma è un po come dire che mele e pere hanno i semini...
Non volevo fare il precisino ma l'accostamento mi ha colpito, i driver nell'accezione più comune oggi sono al più alimentatori, non amplificatori
Grazie richiurci
Ora ho le idee più chiare! Hai qualche lettura sull'argomento da consigliare?
0
voti
Tommino ha scritto:Potrei averlo ?
Fornito dall'autore:
Amplificatore in classe D basato su una MCU
Generalità
Sull'esperienza acquisita con la regolazione dei motori tramite MicroControllerUnit, si è messo un altoparlante al posto del motore, e aumentata 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
Si riporta lo schema:
Il software
Si riporta il listato del programma in C commentato.
- 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
Un oscillogramma della portante
Si riporta un oscillogramma della tensione ai capi dell'altoparlante in assenza di segnale audio. Questo tipo di portante consente di modulare il duty cycle in PulseWidthModulation, cioè le durate dei due semiperiodi, lasciando sempre invariata la durata totale dell'intero periodo, ottenendo un risultato lineare senza bisogno di controreazione. Si nota la presenza di un breve dead time fra i semiperiodi, peraltro la forma d'onda non è un granchè e sicuramente risente della modesta qualità dell'hardware:
Un compromesso
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.
Il risultato
La corrente assorbita, comprendente anche i consumi propri 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 risultato, sia come rendimento energetico, che come fedeltà e come costi, è paragonabile allo standard di altri amplificatori per usi generali. 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.
P.S. Da parte mia osservo che trattasi di un classe AD con modulazione a due livelli e che è privo, forse provvisoriamente, di filtro in uscita.
0
voti
Scusate se vado leggermente off-topic, commentando lo schema (che mi piace, anche se non è un'invenzione nuova).
Stavo scorrendo il post, e mi sono fermato sul consumo a riposo: 390 mA, per me un'enormità (é quasi il 10% della corrente nominale dei transistor).
Poi ho guardato bene la forma d'onda e la descrizione, che dice
Normalmente, in un ponte ad H, questa condizione va evitata: per far uscire una tensione media nulla basta pilotare i due rami (o "semiponti") nello stesso modo. Così si ha sull'altoparlante tensione nulla e corrente nulla, istante per istante. Secondo me il consumo diventa molto ridotto.
Forse per fare questo occorre una somma in più nel codice, ma potrebbe valerne la pena, anche considerando che l'alimentazione (7.4 V) potrebbe magari arrivare da una batteria.
Per uso didattico, recentemente stavo facendo più o meno la stessa cosa con un Arduino (programmando i registri, non con AnalogWrite & C.) ed una schedina pronta con L298.
Stavo scorrendo il post, e mi sono fermato sul consumo a riposo: 390 mA, per me un'enormità (é quasi il 10% della corrente nominale dei transistor).
Poi ho guardato bene la forma d'onda e la descrizione, che dice
Se è così e se, come penso, la forma d'onda è centrata attorno allo zero, il consumo è dovuto alla corrente che circola inutilmente nell'altoparlante.Si riporta un oscillogramma della tensione ai capi dell'altoparlante in assenza di segnale audio.
Normalmente, in un ponte ad H, questa condizione va evitata: per far uscire una tensione media nulla basta pilotare i due rami (o "semiponti") nello stesso modo. Così si ha sull'altoparlante tensione nulla e corrente nulla, istante per istante. Secondo me il consumo diventa molto ridotto.
Forse per fare questo occorre una somma in più nel codice, ma potrebbe valerne la pena, anche considerando che l'alimentazione (7.4 V) potrebbe magari arrivare da una batteria.
Per uso didattico, recentemente stavo facendo più o meno la stessa cosa con un Arduino (programmando i registri, non con AnalogWrite & C.) ed una schedina pronta con L298.
-
SandroCalligaro
2.910 2 4 5 - G.Master EY
- Messaggi: 1173
- Iscritto il: 6 ago 2015, 19:25
0
voti
SandroCalligaro ha scritto:per far uscire una tensione media nulla basta pilotare i due rami (o "semiponti") nello stesso modo. Così si ha sull'altoparlante tensione nulla e corrente nulla, istante per istante. Secondo me il consumo diventa molto ridotto
Non sono sicuro di avere capito bene. Per dare tensione nulla all'altoparlante direi che ci vuole un ponte H con 4 comandi indipendenti per i 4 switch e quindi una modulazione a 3 livelli.
In effetti il progettino già visto è stato sviluppato anche in questa direzione, e il consumo di corrente in assenza di segnale audio viene drasticamente ridotto. Però nasce il problema della distorsione di incrocio, dovuta ai necessari dead time e in parte compensabile a software.
P.S. Quanto sopra si riferisce a un ponte H in cui i transistor finali siano disposti secondo lo schema riportato e sperimentato cioè con uscite dai collettori. Se invece usassimo la disposizione totem pole tipo doppio emitter follower complementare su ciascun semiponte, oppure un L298, probabilmente semplificheremmo il problema e non ci sarebbe più bisogno di impostare dei dead time a programma.. però provare per credere.
0
voti
I comandi indipendenti sono sempre 2, visto che su ciascuna gamba (mezzo ponte) devono H ed L essere, ovviamente, complementari, anche se occorrerebbe una NOT tra H ed L (o una periferica PWM seria, che forse su qualche PIC c'è).Per dare tensione nulla all'altoparlante direi che ci vuole un ponte H con 4 comandi indipendenti per i 4 switch e quindi una modulazione a 3 livelli.
Quello che si farebbe è generare due segnali PWM sincroni (uno per gamba), cioè con l'impulso alto sempre allineato tra i due. In pratica, con la stessa portante PWM, i due duty-cycle saranno
dove è l'ingresso e K l'amplificazione.
Mi sembra che qui, invece, il duty-cycle sia uno solo, ma le forme d'onda PWM siano opposte, tra un ramo e l'altro.
Tra i due casi (cioè tra quello mostrato qui sopra e quello di cui parlo io) non dovrebbe esserci una differenza sostanziale, dal punto di vista della distorsione di dead-time, ma dovrei pensarci su.
Se la frequenza di switching è sufficientemente alta, dal punto di vista audio non occorre il filtro di uscita, visto che le armoniche nell'imtorno della frequenza di switching sono comunque oltre il range dell'udibile.è privo, forse provvisoriamente, di filtro in uscita.
-
SandroCalligaro
2.910 2 4 5 - G.Master EY
- Messaggi: 1173
- Iscritto il: 6 ago 2015, 19:25
0
voti
Potrebbe essere una buona idea, attendiamo gli sviluppi se ci saranno.
Vorrei avere conferma che I semiponti integrati, come quelli contenuti nello L298, sono intrinsecamente esenti dall'esigenza di un dead time, cioè non fanno mai cortocircuito chiudendo per un attimo contemporaneamente high side e lower side, con nessun tipo di comando. E' un fatto che le MCU (dico dsPic della serie MC) dedicano parecchi registri per specificare i dead time da generare sulle diverse commutazioni. Vorrei anche l'indicazione di un cosiffatto ponte integrato, capace di reggere qualche ampere (magari anche lo stesso L298), e come acquistarlo.
Vorrei avere conferma che I semiponti integrati, come quelli contenuti nello L298, sono intrinsecamente esenti dall'esigenza di un dead time, cioè non fanno mai cortocircuito chiudendo per un attimo contemporaneamente high side e lower side, con nessun tipo di comando. E' un fatto che le MCU (dico dsPic della serie MC) dedicano parecchi registri per specificare i dead time da generare sulle diverse commutazioni. Vorrei anche l'indicazione di un cosiffatto ponte integrato, capace di reggere qualche ampere (magari anche lo stesso L298), e come acquistarlo.
0
voti
I moduli come l'L298 hanno internamente i driver che occorrono per pilotare correttamente high-side e low-side di ciascuna gamba, a partire da un singolo segnale digitale che, in pratica, viene amplificato.
Non direi che non hanno i tempi morti, ma piuttosto che se li gestiscono da soli.
A dire il vero non sono abituato a ragionare con BJT, che ormai non si usano da parecchio nella potenza.
Sia i MOSFET che gli IGBT (che hanno uno stadio di ingresso equivalente ad un MOSFET) hanno il problema della gate charge, perciò per avere tempi di commutazione bassi richiedono l'uso di driver di correnti anche piuttosto alte (dipende dalla taglia del dispositivo, ovviamente).
Per potenze medie (da qualche kW alle decine di kW) dei moduli ad IGBT non nuovissimi necessitano di solito di almeno 1-2 us di dead-time.
Penso comunque che anche con i BJT dell'L298, per quanto piccoli, occorra un minimo di dead-time, ma il funzionamento è garantito dal costruttore a partire da un solo segnale per semiponte (d'altra parte, non ce ne sono altri!). Peccato, perché aveva già a bordo lo shunt per la misura di corrente ed il relativo condizionamento!
Io ho iniziato a fare qualcosina per la didattica con una scheda cinese (non ha un marchio, ma eventualmente posso postare una foto) che monta un L298 e poco altro (condensatori, morsetti,...). Credo che costi pochi euro.
Sconsiglio l'Arduino motor shield, perché il collegamento tra i pin di ingresso alla scheda e quelli dell'L298 è per me molto strano e fortemente limitante (tanto per fare un esempio, la PWM agisce sull'Enable dell'L298!).
Non direi che non hanno i tempi morti, ma piuttosto che se li gestiscono da soli.
A dire il vero non sono abituato a ragionare con BJT, che ormai non si usano da parecchio nella potenza.
Sia i MOSFET che gli IGBT (che hanno uno stadio di ingresso equivalente ad un MOSFET) hanno il problema della gate charge, perciò per avere tempi di commutazione bassi richiedono l'uso di driver di correnti anche piuttosto alte (dipende dalla taglia del dispositivo, ovviamente).
Per potenze medie (da qualche kW alle decine di kW) dei moduli ad IGBT non nuovissimi necessitano di solito di almeno 1-2 us di dead-time.
Penso comunque che anche con i BJT dell'L298, per quanto piccoli, occorra un minimo di dead-time, ma il funzionamento è garantito dal costruttore a partire da un solo segnale per semiponte (d'altra parte, non ce ne sono altri!). Peccato, perché aveva già a bordo lo shunt per la misura di corrente ed il relativo condizionamento!
Io ho iniziato a fare qualcosina per la didattica con una scheda cinese (non ha un marchio, ma eventualmente posso postare una foto) che monta un L298 e poco altro (condensatori, morsetti,...). Credo che costi pochi euro.
Sconsiglio l'Arduino motor shield, perché il collegamento tra i pin di ingresso alla scheda e quelli dell'L298 è per me molto strano e fortemente limitante (tanto per fare un esempio, la PWM agisce sull'Enable dell'L298!).
-
SandroCalligaro
2.910 2 4 5 - G.Master EY
- Messaggi: 1173
- Iscritto il: 6 ago 2015, 19:25
0
voti
SandroCalligaro ha scritto:un solo segnale per semiponte
Se il segnale di Enable è basso, l'uscita del semiponte resta aperta flottante?
(che i tempi morti vengano gestiti internamente dallo L298 mi pare comunque confermato dal datsheet)
Per quanto riguarda la distorsione di incrocio cioè al passaggio per lo zero del segnale audio, per semplificare i ragionamenti potremmo considerare un carico resistivo puro.
35 messaggi
• Pagina 2 di 4 • 1, 2, 3, 4
Chi c’è in linea
Visitano il forum: Nessuno e 82 ospiti