Strumenti Utente

Strumenti Sito


ponteh

Applicazioni di elettronica di potenza

Risorse su MOSFET

Video:

Articoli e application note:

Osservazioni sparse sui MOSFET:

  • ci sono tanti tipi di MOSFET ma a grandi linee:
    • si usano quelli enhancement (ad arricchimento)
    • canale N (Ron minore)
    • non logic-level (che hanno Ron e corrente sul gate maggiori)
  • il controllo è in tensione ma serve corrente nel passaggio da ON a OFF
  • con correnti basse la commutazione è lenta e si hanno perdite
  • meglio usare un driver in grado di fornire corrente elevata e garantire tempi di commutazione rapidi
  • si mette una resistenza di pull-down sul gate per evitare commutazioni indesiderate se G risulta isolato
  • si mette una resistenza in serie al gate per regolare la corrente e quindi i tempi di commutazione (R alta se pilotato da un microcontrollore → tempi lunghi e corrente bassa, R bassa se si usa un driver) e smorzare possibili oscillazioni dovute alla componente capacitiva del MOSFET e induttiva dei conduttori
  • driver: push-pull discreti BJT, integrati dedicati (eventualmente con funzione booster o charge-pump per usare MOSFET a canale N anche come high-side switch)
  • in corrispondenza di Vth il MOSFET comincia a condurre ma con una resistenza ancora elevata e perdite; il valore di VgsON si ricava nella riga di RdsON del datasheet
  • la potenza dissipata va calcolata stimando anche la temperatura effettiva di funzionamento: si considera il caso peggiore e si calcola Ron*I^2, poi si stima l'aumento di temperatura del silicio con Rth*P e nel caso si installa un dissipatore
  • per stimare il tempo di carica si può usare Ciss (capacità equivalente in ingresso) o Qg (total gate charge); in entrambi i casi si ipotizza di caricare un condensatore a corrente costante (cosa abbastanza vera quando Vgs raggiunge Vth)

Risorse su ponte H

Ponte H:

Altro:

  • Charge Pump per pilotare MOSFET a canale N (inglese)
  • Pompa di carica in italiano (la pagina è sulla RS232 ma questa soluzione viene usata anche nei gate driver per permettere l'utilizzo dei MOSFET a canale N come interruttori high-side (source)

Simulazioni

Datasheet

Software

Di seguito un programma per generare un segnale PWM sul con frequenza di 1 kHz e duty-cycle regolabile usando la scheda Arduino. Usa quattro pulsanti: uno per avviare e uno per fermare la generazione del segnale PWM, uno per aumentare e uno per diminuire il duty-cycle.

// pin (i pin 0 e 1 sono impegnati per la trasmissione seriale)
const int pinStart = 8; // piedino da mettere a massa per attivare il PWM
const int pinStop = 9; // piedino da mettere a massa per disattivare il PWM
const int pinPWMup = 2; // piedino da mettere a massa per incrementare il duty-cycle
const int pinPWMdown = 3; // piedino da mettere a massa per diminuire il duty-cycle
const int pinPWM = 5; // piedino di uscita del segnale PWM (a 1kHz in quel piedino)
// altre variabili
int spinning = 0; // attiva o no il segnale PWM 
int duty = 100; // da 0 a 255 -> 0-100%
int PWMup; // stato pin che incrementa il duty-cycle
int PWMupPrec = 1; // stato precedente pin che incrementa il duty-cycle
int PWMdown; // stato pin che diminuisce il duty-cycle
int PWMdownPrec = 1; // stato precedente pin che diminuisce il duty-cycle
 
void setup() {
  pinMode(pinPWM,OUTPUT);
  pinMode(pinStart, INPUT_PULLUP); // pull-up interno al micro
  pinMode(pinStop, INPUT_PULLUP);
  pinMode(pinPWMup, INPUT_PULLUP);
  pinMode(pinPWMdown, INPUT_PULLUP);
  pinMode(13,OUTPUT); // LED 13 acceso quando gira il motore
  Serial.begin(9600); // debug su serial monitor
}
 
void loop() {
  // gira se pinStart a GND
  if (!digitalRead(pinStart)){
    spinning = 1;
  }
  // si ferma se pinStop a GND
  if (!digitalRead(pinStop)){
    spinning = 0;
  }
  // LED sulla scheda acceso se gira (PWM attivo) 
  digitalWrite(13, spinning);
  // attiva/disattiva PWM
  if(spinning){
    // attiva PWM
    analogWrite(pinPWM, duty);
  }
  else{
    analogWrite(pinPWM, 0);
  }
  // incremento/decremento duty-cycle
  PWMup = digitalRead(pinPWMup);
  PWMdown = digitalRead(pinPWMdown);
  if((!PWMup)&&PWMupPrec){
    if (duty+10 < 255) {
      duty += 10;
    }
    delay(20); // antirimbalzo
    Serial.println(duty);
  }
  if((!PWMdown)&&PWMdownPrec){
    if (duty-10 > 0) {
      duty -= 10;
    }
    delay(20);
    Serial.println(duty);
  }
  PWMupPrec = PWMup;
  PWMdownPrec = PWMdown;
}

Nel video qua sotto il codice in azione.

Questo sito Web utilizza i cookie. Utilizzando il sito Web, l'utente accetta la memorizzazione dei cookie sul proprio computer. Inoltre riconosci di aver letto e compreso la nostra Informativa sulla privacy. Se non sei d'accordo, lascia il sito.Maggiori informazioni sui cookie
ponteh.txt · Ultima modifica: 2022/02/26 12:17 da admin