Ecco una proposta di soluzione per la prova ordinaria del 2018 dell'esame di TPSEE (Tecnologie e Progettazione dei sistemi elettrici ed elettronici).
Da questo link si può scaricare l'esercitazione.
Soluzione della Prima Parte.
Da una attenta analisi della prima parte e dalla lettura della seconda parte, in particolare con la domanda del quesito numero 1 collegato alla prima parte si fanno le seguenti ipotesi aggiuntive preliminari:
-
si ipotizza che i tornelli in ingresso ed in uscita siano in grado di emettere un impulso con il quale sia possibile contare i visitatori (tornello_1_ingresso e tornello_2_uscita)
-
si ipotizza che siano presenti delle fotocellule (fotocellula_1, fotocellula_2, fotocellula_3 e fotocellula_4) in grado di contare i visitatori presenti in ciascuno dei due locali affrescati (locale_1 e locale_2)
-
si ipotizza di usare quattro sensori di umidità e temperatura (tipo il DHT-11) da porre nei quattro angoli del locale archeologico. Essendo due i locali i sensori di umidità e temperatura sono in tutto otto.
-
Il sistema programmabile deve essere dotato di un modulo RTC (Real Time Clock), dotato di batteria tampone che consente al sistema di gestire gli orari e le stagioni, la data e l’ora.
-
In ogni locale il percorso sia unidirezionale.
-
Per ciascuno dei due locali è presente una porta che non può essere aperta se in ciascuno dei due locali sono presenti cinque persone, mentre nel sito archeologico possono esserci al più 30 persone, di cui al massimo dieci nei locali (cinque per locale) e le altre 20 in attesa ai servizi (coffee-bar e bookshop).
Ecco qui il disegno del “Sito Archeologico”:
Domanda 1) Dato l’elevato numero di ingressi ed uscite digitali si pensa di utilizzare Arduino Due e non Arduino Uno. Con Arduino è possibile gestire agevolmente i sensori di temperatura ed umidità DHT_11 con apposite librerie.
Le fotocellule sono ad infrarossi così non vengono molto disturbate dall’illuminazione né sono visibili ai visitatori.
Le fotocellule ed i tornelli vengono collegati ai Pin di Interrupt di Arduino Due.
Domanda 2)
Ecco lo schema a Blocchi con Arduino Due, tutti gli otto sensori di umidità, le fotocellule, i tornelli, il RTC e tutte le uscite come i display, le piastre riscaldanti, i nebulizzatori, i comandi di blocco della porta.
Chiaramente i sensori 1, 2, 3, 4 sono da ripetere due volte, uno per ciascuno locale affrescato.
Il grosso vantaggio nell’usare Arduino Due è legato al grande numero di ingressi e di uscite digitali in esso presenti.
Poi si vuole usare la tecnica dell’Interrupt (e non del Polling) e Arduino Due mette tutti questi Interrupt a disposizione.
Come indicato anche in rete, qualsiasi pin di I/O con Arduino Due puo' essere usato come pin di External Interrupt, mentre in Arduino Uno sono solo due, e in Arduino Mega sono solo sei.
Domanda 3) Lo schema elettrico descrive i circuiti e gli eventuali circuiti di condizionamento. Per il DHT_11 non sono necessari. Puo' essere interfacciato direttamente ai pin digitali di Arduino Due. Lo stesso per il modulo RTC. Resterebbe eventualmente da progettare solo l'interfacciamento con i segnali provenienti dalle fotocellule. Lascio al lettore questa progettazione elettronica.
Lo schema eletrico è diviso per comodità di lettura in due Sheet (due fogli) nel file PDF che si puo' scaricare dal link appena indicato ed anche in basso in questa pagina e che è stato ricavato con il tool online gratuito (previa registrazione) EasyEda.
Per tutte le uscite Arduino comanda un relé che a sua volta pilota la parte di potenza a 220 V per le piastre riscaldanti, i nebulizzatori, i comandi di blocco della porta.Per alimentare Arduino a 12V si utilizza un alimentatore stabilizzato.Per gli altri dispositivi previsti, con particolare riferimento al sistema di distribuzione e ai sistemi di protezione, si utilizza un interruttore generale di emergenza, un magnetotermico, un interruttore differenziale e tutto quanto previsto dalla normativa di sicurezza degli impianti elettrici. In caso di volontà di togliere l’alimentazione il pulsante generale di emergenza toglie l’alimentazione a tutto l’impianto. Automaticamente lo fa anche il magnetotermico in caso di sovraccarico e il differenziale (salvavita) per cortocircuito.
Domanda 4)
Per questa domanda è utile disegnare il diagramma di flusso.
Conviene fin dal diagramma di flusso impostare una programmazione modulare, dividendo il problema in sottoproblemi, non essere troppo impegnati nella descrizione esatta delle azioni ma descrivere il flusso dell'informazione. E' la successiva domanda che deve permettere al candidato di scrivere l'intero codice o una parte di esso.
Pertanto dividiamo il diagramma di flusso in parti. La prima parte contiene il setup iniziale e il controllo estate ed inverno dell'impianto per la temperatura.
La seconda parte del diagramma di flusso è relativa all'umidità ed è indipendente dalle stagioni estiva ed invernale.
La terza parte è relativa al controllo del bloccaggio e dello sbloccaggio delle due porte, una per ogni locale affrescato, e per la visualizzazione del display.
Quando il programma arriva alla "Label" C, ritorna quasi all'inizio, nel punto immediatamente sottostante il setup iniziale. E' dunque presente il ciclo infinito (i.e. void loop() di Arduino, immediatamente dopo il void setup() di Arduino). Il programma è dunque impostato per essere poi codificato per Arduino.
La quarta parte è quella relativa agli Interrupt che agiscono immediatamente al passaggio di un visitatore nei tornelli o nelle fotocellule, incrementanto e decrementando le relative variabili.
La domanda relativa alla descrizione dell'algoritmo è dunque completata.
Domanda 5)
Per questa domanda possiamo indicare lo sketch di Arduino Due (il programma)
Il programma è completo al 90% ma non è stato mai realmente testato, non disponendo di Arduino Due.
/*
This Sketch is dedicated to solve the problem on the
"Esame di Stato - 2018 prova ordinaria per automazione"
16.01.2020 first version (alpha)
Made with love by Fausto
*/
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <DHT.h>
#include <RTClib.h>
#define PIN_TORNELLO_1 22
#define PIN_TORNELLO_2 23
#define PIN_SENSORE_1_LOCALE_1 24
#define PIN_SENSORE_2_LOCALE_1 25
#define PIN_SENSORE_3_LOCALE_1 26
#define PIN_SENSORE_4_LOCALE_1 27
#define PIN_SENSORE_1_LOCALE_2 28
#define PIN_SENSORE_2_LOCALE_2 29
#define PIN_SENSORE_3_LOCALE_2 30
#define PIN_SENSORE_4_LOCALE_2 31
#define PIN_FOTOCELLULA_1 32
#define PIN_FOTOCELLULA_2 33
#define PIN_FOTOCELLULA_3 34
#define PIN_FOTOCELLULA_4 35
#define PIN_PIASTRA_RISCALDANTE_1 36
#define PIN_PIASTRA_RISCALDANTE_2 37
#define PIN_NEBULIZZATORE_1 38
#define PIN_NEBULIZZATORE_2 39
#define PIN_AERATORE_1 40
#define PIN_AERATORE_2 41
#define PIN_PORTA_LOCALE_1 42
#define PIN_PORTA_LOCALE_2 43
int persone_Locale_1=0;
int persone_Locale_2=0;
int persone_Totali=0;
float temperatura_media_locale_1=0;
float temperatura_media_locale_2=0;
float umidita_media_locale_1=0;
float umidita_media_locale_2=0;
float temperatura_locale_1[4]; // vettore per memorizzare le quattro letture dei sensori
float temperatura_locale_2[4];
float umidita_locale_1[4];
float umidita_locale_2[4];
DHT S1_locale1(PIN_SENSORE_1_LOCALE_1, DHT11);
DHT S2_locale1(PIN_SENSORE_2_LOCALE_1, DHT11);
DHT S3_locale1(PIN_SENSORE_3_LOCALE_1, DHT11);
DHT S4_locale1(PIN_SENSORE_4_LOCALE_1, DHT11);
DHT S1_locale2(PIN_SENSORE_1_LOCALE_2, DHT11);
DHT S2_locale2(PIN_SENSORE_2_LOCALE_2, DHT11);
DHT S3_locale2(PIN_SENSORE_3_LOCALE_2, DHT11);
DHT S4_locale2(PIN_SENSORE_4_LOCALE_2, DHT11);
DS1307 rtc;
LiquidCrystal_I2C lcd(0x27, 20, 4);
String mese;
void setup() {
Wire.begin(); // join i2c bus (address optional for master)
Serial.begin(9600); // start Serial for output
setup_io_pin(); // funzione dedicata ad impostare l'I/O dei singoli PIN
setup_Interrupt_pin(); // funzione dedicata ad impostare l'interrupt sui singoli PIN
lcd.begin(20,4);
lcd.init();
setup_DHT();
setup_RTC();
}
void loop(){
Serial.println("Leggo le temperature e l'umidita'");
leggi_temperature();
leggi_umidita();
calcola_media();
gestione_temperatura();
gestione_umidita();
Serial.println("Gestisco le porte");
if (persone_Locale_1>=5){
digitalWrite(PIN_PORTA_LOCALE_1, HIGH); // blocco la porta locale 1
}
else {
digitalWrite(PIN_PORTA_LOCALE_1, LOW); // sblocco la porta locale 1
}
if (persone_Locale_2>=5){
digitalWrite(PIN_PORTA_LOCALE_2, HIGH); // blocco la porta locale 2
}
else {
digitalWrite(PIN_PORTA_LOCALE_2, LOW); // sblocco la porta locale 2
}
mostra_su_display();
}
void setup_io_pin(){
pinMode(PIN_TORNELLO_1, INPUT);
pinMode(PIN_TORNELLO_2, INPUT);
pinMode(PIN_SENSORE_1_LOCALE_1, INPUT);
pinMode(PIN_SENSORE_2_LOCALE_1, INPUT);
pinMode(PIN_SENSORE_3_LOCALE_1, INPUT);
pinMode(PIN_SENSORE_4_LOCALE_1, INPUT);
pinMode(PIN_SENSORE_1_LOCALE_2, INPUT);
pinMode(PIN_SENSORE_2_LOCALE_2, INPUT);
pinMode(PIN_SENSORE_3_LOCALE_2, INPUT);
pinMode(PIN_SENSORE_4_LOCALE_2, INPUT);
pinMode(PIN_FOTOCELLULA_1, INPUT);
pinMode(PIN_FOTOCELLULA_2, INPUT);
pinMode(PIN_FOTOCELLULA_3, INPUT);
pinMode(PIN_FOTOCELLULA_4, INPUT);
pinMode(PIN_PIASTRA_RISCALDANTE_1, OUTPUT);
pinMode(PIN_PIASTRA_RISCALDANTE_2, OUTPUT);
pinMode(PIN_NEBULIZZATORE_1, OUTPUT);
pinMode(PIN_NEBULIZZATORE_2, OUTPUT);
pinMode(PIN_AERATORE_1, OUTPUT);
pinMode(PIN_AERATORE_2, OUTPUT);
pinMode(PIN_PORTA_LOCALE_1, OUTPUT);
pinMode(PIN_PORTA_LOCALE_2, OUTPUT);
}
void setup_Interrupt_pin(){
attachInterrupt(PIN_TORNELLO_1, incrementa_persone_totali, FALLING);
attachInterrupt(PIN_TORNELLO_2, decrementa_persone_totali, FALLING);
attachInterrupt(PIN_FOTOCELLULA_1, incrementa_persone_locale_1, FALLING);
attachInterrupt(PIN_FOTOCELLULA_2, decrementa_persone_locale_1, FALLING);
attachInterrupt(PIN_FOTOCELLULA_3, incrementa_persone_locale_2, FALLING);
attachInterrupt(PIN_FOTOCELLULA_4, decrementa_persone_locale_2, FALLING);
}
void incrementa_persone_locale_1(){
persone_Locale_1++;
}
void decrementa_persone_locale_1(){
persone_Locale_1--;
}
void incrementa_persone_locale_2(){
persone_Locale_2++;
}
void decrementa_persone_locale_2(){
persone_Locale_2--;
}
void incrementa_persone_totali(){
persone_Totali++;
}
void decrementa_persone_totali(){
persone_Totali--;
}
void setup_DHT(){
S1_locale1.begin();
S2_locale1.begin();
S3_locale1.begin();
S4_locale1.begin();
S1_locale2.begin();
S2_locale2.begin();
S3_locale2.begin();
S4_locale2.begin();
}
void setup_RTC(){
DateTime now = rtc.now();
mese = now.month();
if (!rtc.isrunning()) {
lcd.setCursor(0, 0);
lcd.print("RTC non funziona");
Serial.println("RTC non funziona bene....");
lcd.setCursor(0, 1);
lcd.print(" ");
}
}
void leggi_temperature(){
temperatura_locale_1[0] = S1_locale1.readTemperature();
temperatura_locale_1[1] = S2_locale1.readTemperature();
temperatura_locale_1[2] = S3_locale1.readTemperature();
temperatura_locale_1[3] = S4_locale1.readTemperature();
temperatura_locale_2[0] = S1_locale2.readTemperature();
temperatura_locale_2[1] = S2_locale2.readTemperature();
temperatura_locale_2[2] = S3_locale2.readTemperature();
temperatura_locale_2[3] = S4_locale2.readTemperature();
}
void leggi_umidita(){
umidita_locale_1[0] = S1_locale1.readHumidity();
umidita_locale_1[1] = S2_locale1.readHumidity();
umidita_locale_1[2] = S3_locale1.readHumidity();
umidita_locale_1[3] = S4_locale1.readHumidity();
umidita_locale_2[0] = S1_locale2.readHumidity();
umidita_locale_2[1] = S2_locale2.readHumidity();
umidita_locale_2[2] = S3_locale2.readHumidity();
umidita_locale_2[3] = S4_locale2.readHumidity();
}
void calcola_media(){
for (int i=0; i<4; i++){
temperatura_media_locale_1 = temperatura_media_locale_1 + temperatura_locale_1[i];
temperatura_media_locale_2 = temperatura_media_locale_2 + temperatura_locale_2[i];
umidita_media_locale_1 = umidita_media_locale_1 + umidita_locale_1[i];
umidita_media_locale_2 = umidita_media_locale_2 + umidita_locale_2[i];
}
temperatura_media_locale_1 = temperatura_media_locale_1 / 4;
temperatura_media_locale_2 = temperatura_media_locale_2 / 4;
umidita_media_locale_1 = umidita_media_locale_1 / 4;
umidita_media_locale_2 = umidita_media_locale_2 / 4;
}
void gestione_temperatura(){
if ((mese =="Novembre")||(mese =="Dicembre")||(mese =="Gennaio")||(mese =="Febbraio")||(mese =="Marzo")){ // winter time ;-)
if (temperatura_media_locale_1 < 6.0) {
digitalWrite(PIN_PIASTRA_RISCALDANTE_1, HIGH);
}
else if (temperatura_media_locale_1 > 12.0) {
digitalWrite(PIN_AERATORE_1, HIGH);
}
else {
digitalWrite(PIN_PIASTRA_RISCALDANTE_1, LOW);
digitalWrite(PIN_AERATORE_1, LOW);
}
// stessa cosa per il locale 2
if (temperatura_media_locale_2 < 6.0) {
digitalWrite(PIN_PIASTRA_RISCALDANTE_2, HIGH);
}
else if (temperatura_media_locale_2 > 12.0) {
digitalWrite(PIN_AERATORE_2, HIGH);
}
else {
digitalWrite(PIN_PIASTRA_RISCALDANTE_2, LOW);
digitalWrite(PIN_AERATORE_2, LOW);
}
} // winter time ;-)
else { // summer time ;-)
if (temperatura_media_locale_1 < 20.0) {
digitalWrite(PIN_PIASTRA_RISCALDANTE_1, HIGH);
}
else if (temperatura_media_locale_1 > 24.0) {
digitalWrite(PIN_AERATORE_1, HIGH);
}
else {
digitalWrite(PIN_PIASTRA_RISCALDANTE_1, LOW);
digitalWrite(PIN_AERATORE_1, LOW);
}
// stessa cosa in estate per il locale 2
if (temperatura_media_locale_2 < 20.0) {
digitalWrite(PIN_PIASTRA_RISCALDANTE_2, HIGH);
}
else if (temperatura_media_locale_2 > 24.0) {
digitalWrite(PIN_AERATORE_2, HIGH);
}
else {
digitalWrite(PIN_PIASTRA_RISCALDANTE_2, LOW);
digitalWrite(PIN_AERATORE_2, LOW);
}
} // summer time ;-)
}
void gestione_umidita(){
// this part have to be modified to consider 10 minutes maximum
if (umidita_media_locale_1 < 40){
digitalWrite(PIN_NEBULIZZATORE_1, HIGH);
}
else if (umidita_media_locale_1 > 50){
digitalWrite(PIN_AERATORE_1, HIGH);
}
else {
digitalWrite(PIN_NEBULIZZATORE_1, LOW);
digitalWrite(PIN_AERATORE_1, LOW);
}
if (umidita_media_locale_2< 40){
digitalWrite(PIN_NEBULIZZATORE_2, HIGH);
}
else if (umidita_media_locale_2 > 50){
digitalWrite(PIN_AERATORE_2, HIGH);
}
else {
digitalWrite(PIN_NEBULIZZATORE_2, LOW);
digitalWrite(PIN_AERATORE_2, LOW);
}
}
void mostra_su_display(){
lcd.init();
lcd.setCursor(0, 0);
lcd.print("PT: ");
lcd.print(persone_Totali);
lcd.setCursor(0, 1);
lcd.print("loc1: ");
lcd.print(persone_Locale_1);
lcd.print(" loc2: ");
lcd.print(persone_Locale_2);
}
Soluzione della Seconda Parte.
Si devono risolvere solo due quesiti. Per completezza in questo sito riporto la soluzione a tutti e quattro i quesiti, fermo restando che in una prova d'esame, per evitare discussioni e penalizzazioni solo due dei quesiti devono essere risolti dal candidato.
Quesito n°1
Con riferimento alla prima parte, vista la particolarità di integrazione architettonica tra sistemi di controllo previsti e il sito archeologico, il candidato illustri quali procedure vanno seguite per la valutazione di impatto ambientale nel rispetto della normativa vigente.
La valutazione di impatto ambientale è un procedimento di carattere tecnico-scientifico ed amministrativo anche chiamato con la sigla VIA. Uno degli obiettivi è l'attenta analisi dell'impatto ossia dell'effetto che possono o potrebbero avere gli impianti tecnologici o di produzione sull'ambiente.
Il D.Lgs 3 aprile 2006, n. 152 e s.m.i. ha dato attuazione alla delega conferita al Governo dalla legge n. 308 del 2004 per il riordino, il coordinamento e l’integrazione della legislazione in materia ambientale. Dalla sua data di entrata in vigore (29 aprile 2006) ad oggi il Codice ha subito numerose modifiche ed integrazioni.
E' formata da una parte tecnico-scientifica e da una parte amministrativa. La parte tecnico-scientifica, anche detta SIA, studio di impatto ambientale si occupa di effettuare le analisi e gli studi effettivi per l'aria, il suolo, l'energia e le acque.
In particolare per quello che riguarda l'energia si valuta quanta energia occorre per la produzione delle parti e del prodotto finito, i relativi rendimenti.
In questo caso, nel sito archeologico, è importante affinare e studiare il rendimento energetico della climatizzazione della temperatura e la regolazione dell'umidità e dell'illuminazione affinché da un lato siano garantiti il benessere dei visitatori e dei reperti archeologici, minimizzando lo spreco di energia con l'opportuna installazione di luci a Led e attuatori in classe energetica A (almeno).
Quesito n°2
Si consideri un sensore di pressione a diaframma in cui si utilizza un estensimetro come elemento sensibile. L’estensimetro ha resistenza a riposo pari a 100 Ω (corrispondente ad allungamento λ = 0) e gauge factor pari a 2. Si vogliono misurare pressioni che determinano deformazioni della membrana di ± 100 μλ. Il candidato progetti un circuito di acquisizione del segnale utilizzando un convertitore AD con range 0 ÷ 10 V.
Un estensimetro è un sensore la cui resistenza varia con la forza applicata; converte la forza, la pressione, la tensione radiale e superficiale, il peso, ecc., in una variazione di resistenza elettrica che può essere misurata.
Per una panoramica si può vedere qui.
Gli estensimetri sono dei sensori la cui resistenza dipende dalle deformazioni, ossia dagli allungamenti e dagli accorciamenti. La formula che, solitamente, in tutti i manuali e nei libri di testo, viene indicata per mettere in relazione l'ingresso (variazione relativa della lunghezza l di un estensimetro), con l'uscita ossia la variazione relativa della resistenza dell'estensimentro è la seguente:
$ \frac {\Delta R}{R}= K_G \frac {\Delta l}{l} $
essendo KG il Gauge factor che in questo caso è uguale a 2.
Quando non c'è allungamento, né accorciamento λ = 0. In questo caso R=100 Ω .
I sensori di pressione a diaframma, anche chiamati sensori di pressione a membrana, sono utilizzati per le misure di pressione.
Ricordiamo che, dalla Fisica, la pressione è la forza esercitata per unità di superfice
$ P= \frac {F}{S} $
Ricordiamo che, dalla Fisica, la pressione è la forza esercitata per unità di superfice
$ \frac {N}{m^2} $
La pressione si chiama "Pressione" per i gas e per i liquidi, e si chiama Stress per i solidi.
La frase
"Si vogliono misurare pressioni che determinano deformazioni della membrana di ± 100 μλ."
è un po' <ambigua>. Nell'interpretazione "prevalente"
λ
lambda indica
$ λ = \frac {\Delta l}{l} $nella formula prima indicata.
Quindi il significato "prevalente" della frase è che l'estensimetro determina una deformazione relativa di 100 x 10-6 = 10-4. Come si vede si tratta di variazioni piccolissime, che seppure moltiplicate per il gauge factor devono essere amplificate prima di arrivare all'ADC.
A questo proposito è utile anche vedere il seguente video.
Per l'acquisizione del segnale conviene utilizzare un circuito di condizionamento a ponte e convertire poi la tensione di uscita del ponte con un ADC commerciale o integrato negli ingressi analogici del microcontrollore utilizzato, per esempio gli ingressi analogici di Arduino.
Oppure, si puo' mettere un circuito di condizionamento a ponte, un amplificatore, un ADC e un microcontrollore.
Nel ponte le tre resistenze che non sono l'estensimetro R1=R2=R3 si scelgono uguali a 100 Ω
La resistenza R4 dell'estensimetro varia al variare della pressione
$ \Delta R= K_G λ R = 0,02 Ω $Pertanto al variare della pressione
$ R_4 = 100 ± 0,02 Ω $
La teoria ci dice che, nel caso del ponte di resistenze con un solo estensimetro, per valori di x minori dell'1%,
$ V_d=V_G \frac {x}{4}$ essendo x= 0,02 Ω / 100 Ω = 0,0002.Con questi dati si puo' progettare lo stadio di condizionamento ed amplificazione come in un "normale" progetto di elettronica.
L'uscita differenziale deve essere amplificata a ±5V eppoi traslata verso l'alto con un offset di +5V per avere un segnale ±10V adatto alla conversione analogico - digitale.
Quesito n°3
È necessario gestire il ciclo di funzionamento di un motore asincrono trifase a 4 poli e funzionante alla frequenza di rete. L’avviamento avviene mediante un pulsante di start, la velocità del motore aumenta in modo graduale fino a raggiungere il suo valore massimo dopo 15 secondi e tale velocità va mantenuta per 30 secondi, dopodiché il motore comincia a decelerare fino ad arrestarsi completamente dopo 15 secondi. Il candidato discuta le problematiche relative alla fase di avviamento del motore e proponga le modalità di gestione del suddetto ciclo di funzionamento.
Per variare la velocità di un MAT (Motore asincrono trifase) occorre intervenire sulla frequenza del segnale di alimentazione con un inverter (convertitore di frequenza). Agendo sulla frequenza infatti si modifica la velocità di rotazione del campo rotante, che è prossima a quella del motore.
Per maggiori dettagli vedere qui https://leonardocanducci.org/wiki/ee5/motori#motore_asincrono
e qui: https://youtu.be/UU-o61AFg1w
per il principio di funzionamento di un inverter.
Quesito n°4
Il candidato illustri il principio di funzionamento dei dispositivi IGBT e ne discuta vantaggi e svantaggi in rapporto alle caratteristiche dei MOSFET e BJT; inoltre fornisca un esempio di possibile applicazione nell’ambito del controllo di velocità dei motori.
Gli IGBT (insulated gate bipolar transistor) sono un particolare tipo di transistor che combina un MOSFET in ingresso e un BJT in uscita. Questa soluzione sta soppiantando le precedenti tecnologie nelle applicazioni in commutazione per potenze medio-alte (inverter, alimentatori) perché offre sia i vantaggi dei BJT (tensioni di lavoro elevate e bassa VCE) che quelli dei MOSFET (alta impedenza di ingresso e facilità di pilotaggio).
Per maggiori dettagli vedere qui: https://www.vincenzov.net/tutorial/elettronica-di-potenza/IGBT.htm
Soluzione alternativa del prof. Canducci: https://leonardocanducci.org/wiki/tp5/prova2018
con uso di PLC.
Soluzione sul sito della casa editrice Zanichelli: scaricare il PDF.