Indice

Applicazioni di elettronica di potenza

In grassetto i contenuti più importanti.

Osservazioni sparse sui MOSFET

Risorse su MOSFET

Video:

Articoli da blog e siti di prof:

Articoli e application note dei produttori di componenti:

Risorse su ponte H

Altro:

Simulazioni

Datasheet

Software: generatore di segnale PWM con Arduino

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.

1)
NB sembra la stessa configurazione di un lato del ponte H (half-bridge) ma non lo è! Infatti i transistor NPN e PNP sono scambiati di posto e il funzionamento non è da switch ma da inseguitore di emettitore (buffer) e i BJT non lavorano in saturazione ma in zona lineare. Questa configurazione è chiamata anche totem pole