Applicazione di sistemi di controllo in tempo reale per la

Transcript

Applicazione di sistemi di controllo in tempo reale per la
UNIVERSITA' DEGLI STUDI DI BOLOGNA
FACOLTA' DI INGEGNERIA
Dottorato di Ricerca in Ingegneria delle Macchine e dei Sistemi Energetici
Applicazione di sistemi di controllo in tempo reale per la
prototipazione rapida di strategie per il controllo e la diagnosi
dei malfunzionamenti di m.c.i.
Tesi di Dottorato di
Enrico Corti
Relatore
Chiar.mo Prof. Ing. Giorgio Minelli
Coordinatore del Dottorato
Chiar.mo Prof. Ing. Antonio Peretto
XVI CICLO
Anno Accademico 2002-2003
RINGRAZIAMENTI
I ringraziamenti sono, purtroppo, l’unico momento in cui ci si sforza di riconoscere
l’importanza che nella propria attività hanno le persone il cui aiuto, erroneamente, viene
altrimenti dato per scontato. Lo so, non bisognerebbe dare per scontato nulla, ma è
inutile fare finta che non succeda.
Ringrazio innanzi tutto i miei maestri, coloro che hanno seguito non solo il mio lavoro,
ma anche lo sviluppo della mia conoscenza, dell’approccio al problema ingegneristico,
coloro che, senza retorica, mi hanno educato in questo periodo. Grazie dunque al Prof.
Minelli, che ha creato un gruppo di persone professionalmente ed umanamente
straordinarie, al Prof. Moro, al Prof. Azioni, all’Ing. Ponti e all’Ing. Cavina: lavorare
con Voi è un’esperienza impegnativa, stimolante, che ha cambiato il modo in cui vedo
molti aspetti, anche non ingegneristici, della vita.
Grazie anche all’Ing. Serra della Magneti Marelli Powertrain S.p.A, con cui il confronto
sulle tematiche più varie è sempre produttivo, e i cui consigli hanno costituito la base di
questo lavoro.
Un ringraziamento più esteso a tutti i Professori e Ricercatori del Dipartimento ed alla
famiglia dei Macchinisti, da cui sono stato accolto con straordinaria disponibilità e
cordialità.
A proposito di persone il cui contributo è dato per scontato, i primi della lista non
possono che essere i genitori, o forse, più generalmente, la tribù, nel mio caso piuttosto
numerosa, che costituisce la base su cui appoggiare il mio modo di vivere, e quindi di
lavorare. Dire che senza di voi non ce l’avrei fatta sembra una banalità, ma so che a
volte fa piacere sentirsi dire cose banali, quindi considerate questo lavoro come un
frutto dei vostri sforzi.
Voglio ringraziare anche i ragazzi del Dipartimento (Giulio, Nicola, Toni, Federico,
Claudio, Alessandro, Stefano, Stefania), soprattutto per le sedute di terapia davanti alla
macchinetta del caffè e per le sbraciolate, che forse dovrebbero avere maggiore
frequenza.
Un ringraziamento a tutti i laureandi, in particolare quelli che hanno partecipato al
progetto dSPACE, per il loro aiuto ed insegnamento.
Non ringrazio chi mi ha reso, in questi anni, più sereno e più felice: spero che non lo
abbia fatto per piacere mio ma per piacere suo. Per questo, come dico sempre, non si
ringrazia. Quello che – ancora - non voglio dare per scontato e che contribuisce al
risultato (a parte la correzione delle bozze) è il sapersi tirare indietro, facendo violenza
al proprio carattere, è lo spirito di sacrificio: per questo, Nicoletta, posso ringraziarti.
INTRODUZIONE
Sono ormai pochi i campi dell’industria in cui il sistema di controllo dei processi non
assuma grande importanza, al fine di aumentare il livello delle prestazioni raggiungibili, o
garantire, grazie al coordinamento delle azioni di diversi sistemi, ottimi compromessi tra
prestazioni una volta ritenute inconciliabili.
Se questo ha portato, in campo automobilistico, ad una vera e propria rivoluzione
elettronica avvenuta negli ultimi venti anni, nelle applicazioni aeronautiche, spaziali,
robotiche tale rivoluzione, seppure in forma meno repentina, era già avvenuta.
Probabilmente il fatto che in campo automobilistico abbia fatto tanto scalpore è dovuto al
cambiamento di competenze che essa ha richiesto. E proprio la necessità di acquisire
competenze in campo elettronico e controllistici, senza per questo perdere quelle in
campo meccanico, ha portato alla creazione di una disciplina – la meccatronica –in piena
fase di espansione. Proprio in questo campo si inserisce il presente lavoro di tesi: la
conoscenza del sistema fisico (sistema controllato) è necessaria per istruire correttamente
il sistema di controllo/diagnosi, e d’altra parte la conoscenza del sistema di controllo è
necessaria proprio per sapere quali siano le leve a disposizione per sfruttarlo al meglio.
Se poi si pensa a quanto sia diventata strategica la capacità di creare rapidamente
innovazioni o nuovi prodotti, si capisce perchè la prototipazione rapida dei sistemi di
controllo e diagnosi abbia assunto grande importanza.
Per riuscire ad intervenire prontamente nella definizione del sistema di controllo o
diagnosi, è necessario semplificare l’operazione di implementazione sul supporto
hardware e consentire la modifica dei parametri in tempo reale, ovvero mentre il processo
è controllato dal sistema in questione: da una parte gli strumenti impiegati in fase di
progettazione del prodotto finito, quali codici assembly o c possono essere sostituiti da
codici più diffusi nelle fasi preliminari di progettazione degli algoritmi, quali Matlab o
Simulink, dall’altra si deve poter realizzare un sistema molto più flessibile di quello
definitivo, aperto alle modifiche tanto degli algoritmi quanto dei parametri che li
definiscono.
Il normale flusso della progettazione delle strategie per il controllo e la diagnosi, in
particolare di quella definita “model-based”, ovvero basata su un modello fisico del
2
sistema con cui si interagisce, prevede l’elaborazione di un modello del sistema fisico, la
definizione di un sistema di controllo del funzionamento (o del malfunzionamento), i cui
parametri possono essere definiti in fase di simulazione (la così detta fase off-line, o di
software in the loop), cui seguono l’implementazione sul prototipo hardware, la verifica
dell’efficacia e la calibrazione dei parametri sul sistema reale. La fase di passaggio
dall’applicazione dell’algoritmo ad un modello del sistema al sistema vero e proprio può
essere resa particolarmente rapida: se, come si è detto, gli strumenti a disposizione del
progettista sono gli stessi a disposizione dello sperimentatore e del calibratore, basterà,
secondo una logica molto comune per chi usa il calcolatore, “copiare” l’algoritmo
elaborato off-line e “incollarlo” nel sistema di gestione complessivo, per poi
implementarlo sull’hardware prototipale. Se anche quest’ultima operazione è resa
particolarmente rapida, riuslta evidente la possibilità di modificare a piacimento il
sistema di controllo in maniera estremamente veloce ed efficace.
In ambito industriale l’attività continuerà, una volta definite le strategie ed ottimizzati i
loro parametri, con l’ottimizzazione del software e la scelta dell’hardware definitivi, che
non dovranno più essere particolarmente flessibili, ma efficienti ed economici.
La struttura della tesi segue dunque il seguente filo logico:
3
-
definizione delle specifiche per il sistema di controllo in tempo reale
-
descrizione del sistema di controllo realizzato
-
applicazione per la definizione di algoritmi di controllo
-
applicazione per la definizione di algoritmi diagnostici
-
applicazione per il controllo del banco prova
1
IL SISTEMA DI CONTROLLO IN TEMPO REALE ............................... 5
1.1
1.2
1.3
IL CONTROLLO DEI M.C.I. .................................................6
DEFINIZIONE DELLE SPECIFICHE....................................7
IL SISTEMA DI CONTROLLO ...........................................11
1.3.1
1.3.2
1.3.3
1.3.4
1.3.5
1.3.6
1.3.7
1.4
HARDWARE A DISPOSIZIONE ............................................................ 12
DS1003: .................................................................................................. 12
DS2201: .................................................................................................. 13
DS4001: .................................................................................................. 14
L’APPLICAZIONE A M.C.I.................................................................... 16
IL dSPACE Real Time System ed Il Circuito Elettronico Esterno.......... 18
I SEGNALI DI COMANDO .................................................................... 18
STRUTTURA DEL CEE .....................................................20
1.4.1
LA CONFIGURAZIONE D’INSIEME.................................................... 20
1.4.2
L’INTERRUPT BOARD.......................................................................... 21
1.4.3
LA TOP BOARD ..................................................................................... 27
1.4.3.1 La CPU1.............................................................................................. 29
1.4.3.2 La CPU 0............................................................................................. 30
1.4.4
LA SCHEDA DI ALIMENTAZIONE....................................................... 30
1.4.5
LA SCHEDA DI COMUNICAZIONE..................................................... 30
1.4.6
LA SCHEDA MADRE ............................................................................. 31
1.5
MODULI DI POTENZA ......................................................31
1.5.1
1.5.2
1.5.3
1.5.4
1.5.5
1.6
1.7
1.8
1.9
1.8
2
STADIO DI POTENZA DELL’ACCENSIONE....................................... 32
CARICA DELLA BOBINA ...................................................................... 33
SCARICA DELLA BOBINA .................................................................... 34
AFFIDABILITA’ IN CASO DI MALFUNZIONAMENTO...................... 35
STADIO DI POTENZA DELL’INIEZIONE............................................ 36
POSIZIONAMENTO DEI CALCOLI ...................................37
SOFTWARE DEL SISTEMA DI CONTROLLO ..................43
VERIFICA DELLE ATTUAZIONI AL BANCO .....................48
LA REALIZZAZIONE DI MISFIRE E MISFUEL ..................52
BIBLIOGRAFIA..................................................................53
PROTOTIPAZIONE RAPIDA: STRATEGIE DI CONTROLLO DEL
TITOLO 55
2.1
2.2
SISTEMI DI CONTROLLO: RICHIAMI...............................55
IL CONTROLLO DEL TITOLO: OBIETTIVI........................58
3
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL
MINIMO........................................................................................................................ 102
3.1
SIMULAZIONE DEL SISTEMA CONTROLLATO.............103
3.1.1
3.1.2
3.1.3
3.1.4
3.1.5
3.2
3.3
3.4
3.3
4
4.1
4.2
4.3
IL CORPO FARFALLATO ..................................................................... 104
IL COLLETTORE DI ASPIRAZIONE .................................................... 111
LA PRODUZIONE DI COPPIA ............................................................. 113
DINAMICA DELL’ALBERO MOTORE ................................................. 118
IMPLEMENTAZIONE DEL MODELLO................................................ 119
IL SISTEMA DI CONTROLLO DEL MINIMO ...................123
TEST OFF-LINE ..............................................................125
PROVE SPERIMENTALI .................................................133
BIBLIOGRAFIA................................................................138
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI ............... 139
SPERIMENTAZIONE: INDUZIONE DI MISFIRE E MISFUEL
........................................................................................139
DISTINZIONE MISFIRE-MISFUEL: MOTIVAZIONI .........140
FENOMENOLOGIA DELLE MANCATE COMBUSTIONI.142
4.3.1
4.3.2
IL CASO MISFIRE.................................................................................. 144
IL CASO MISFUEL ................................................................................ 148
4.4.1
4.4.2
METODOLOGIA BASATA SUL LAVORO DI ESPANSIONE ............... 152
METODOLOGIA BASATA SUL SEGNALE UEGO............................... 157
4.4
4.3
5
5.1
5.2
5.3
INDICATORI DI MALFUNZIONAMENTO ........................152
BIBLIOGRAFIA................................................................168
SIMULAZIONE DEL VEICOLO AL BANCO PROVA ......................... 169
VERIFICA DEGLI ATTUATORI .......................................170
IL CICLO DI OMOLOGAZIONE .......................................174
SIMULAZIONE DEL VEICOLO........................................181
5.3.1
5.3.2
EQUIVALENZA DELLE CONDIZIONI DI FUNZIONAMENTO.......... 182
MODALITA` DI GESTIONE .................................................................. 187
5.4.1
MODELLO DEL PNEUMATICO........................................................... 191
5.4
IL MODELLO DEL VEICOLO...........................................190
A
IL LINGUAGGIO DI PROGRAMMAZIONE DEL
MICROCONTROLLORE ST6....................................................................................... 1
A.1
DAL CODICE MACCHINA AL LINGUAGGIO ASSEMBLY ..2
A.1.1
IL FORMATO DI UNA GENERICA ISTRUZIONE ................................... 2
A.1.2
IL LINGUAGGIO ASSEMBLY ................................................................... 3
A.1.3
LO STACK E I SOTTOPROGRAMMI........................................................ 4
A.1.4
GLI INTERRUPT ........................................................................................ 4
A.1.5
LE ISTRUZIONI ASSEMBLY UTILIZZATE............................................... 5
A.1.5.1 ISTRUZIONI DI TRASFERIMENTO................................................... 5
A.1.5.2 ISTRUZIONI LOGICHE........................................................................ 7
A.1.5.3 ISTRUZIONI ARITMETICHE .............................................................. 8
A.1.5.4 ISTRUZIONI DI SALTO ....................................................................... 9
A.1.6
IL TEMPO DI ESECUZIONE DELLE ISTRUZIONI............................... 12
A.1.7
ALCUNI COMANDI DELL’ASSEMBLER ............................................... 13
A.2
I REGISTRI DELL’ ST6......................................................13
A.2.1
A.2.2
pdir_c)
A.2.3
A.2.4
A.2.5
A.2.6
A.2.7
A.2.8
A.2.9
B
B.1
STRUTTURA HARDWARE E SOFTWARE DEL CEE........................... 2
INTERRUPT BOARD: HARDWARE ....................................2
B.1.1
B.1.2
B.1.3
B.1.4
B.1.5
B.2
I REGISTRI DEI DATI DELLE PORTE A, B, C (port_a, port_b, port_c) .. 17
I REGISTRI DI DIREZIONE DELLE PORTE A,B,C (pdir_a, pdir_b,
17
I REGISTRI DI OPZIONE DELLE PORTE A, B, C (popt_a, popt_b, popt_c)
17
IL REGISTRO DEGLI INTERRUPT (ior) ................................................ 19
IL REGISTRO DI RICARICAMENTO DELL’AR TIMER (arrc) ............ 21
IL REGISTRO DI COMPARAZIONE DELL’AR TIMER (arcp) ............. 21
IL REGISTRO DI CONTROLLO DELL’AR TIMER (armc) .................... 21
I REGISTRI DI STATO DELL’AR TIMER (ars0, ars1) ........................... 22
IL REGISTRO DRBR PER LA SCELTA DELLA RAM............................. 24
L’ADATTATORE. ..................................................................................... 2
Il BLOCCO DI FASATURA...................................................................... 9
IL SINCRONIZZATORE. ........................................................................ 14
IL DIVISORE REGOLABILE. ................................................................ 16
IL MICROCONTROLLORE ST6. ........................................................... 17
INTERRUPT BOARD: SOFTWARE...................................20
B.2.1
INIZIALIZZAZIONE DELL’ST6............................................................. 22
1.1.1.1 ldi progrON,00000000b.................................................................. 24
B.2.2
MEMORIZZAZIONE DEI DENTI E DEI CANALI DI INTERRUZIONE24
C
C.1
C.2
C.3
C.4
C.5
C.6
C.7
IL SOFTWARE DI COMUNICAZIONE TRA DSPACE E CEE............... 1
S-FUNCTION RESET_22_10.C..............................................1
PROGRAMMA IRQ_05.ASM .....................................................3
S-FUNCTION TOP_22_10.C .................................................8
PROGRAMMA CPU1.ASM ......................................................13
PROGRAMMA CPU1_02.ASM .................................................16
PROGRAMMA CPU0_02.ASM O CPU0.ASM ............................21
INIEZIONE MULTIPLA: IL FILE MULTI.ASM .........................27
IL SISTEMA DI CONTROLLO IN TEMPO REALE
1
IL SISTEMA DI CONTROLLO IN TEMPO REALE
Il primo capitolo ha l’obiettivo di spiegare la struttura e le caratteristiche di
funzionamento del sistema di controllo in tempo reale adottato. In effetti,
l’individuazione delle soluzioni alle problematiche di funzionamento e la messa a punto
del sistema, hanno costituito una buona parte del lavoro svolto, e hanno ovviamente
influito
sulle
scelte
fatte
nell’impiego
del
sistema
stesso
a
scopo
controllistico/diagnostico; tuttavia, riconoscendo l’ostilità del tema per chi, come chi
scrive, è di estrazione “meccanica”, si è cercato di evitare che il presente capitolo
costituisca una condizione necessaria alla comprensione di quelli successivi.
Per meglio comprendere le ragioni di alcune scelte nella definizione del sistema, si
cercherà di spiegare, prima di tutto, quali siano le principali funzioni svolte dalle unità
di controllo dei motori a combustione interna, per poi desumere le specifiche su cui
fondare il progetto di un’unità sostitutiva. Definiti gli strumenti da impiegare per portare
a termine tale progetto, se ne illustrerà l’impiego, terminando con le prove sperimentali
che dimostrano il rispetto delle specifiche di cui sopra.
1.1 IL CONTROLLO DEI M.C.I.
Lungi dal voler trattare in maniera esaustiva il tema del controllo dei motori a
combustione interna, col presente paragrafo si intende chiarire quali siano le principali
funzioni della centralina elettronica preposta ad attuare le strategie controllistiche e
diagnostiche. Sarà così possibile comprendere quali siano le prestazioni da richiedere al
sistema che ne dovrà prendere le funzioni. Visto che, al di là delle impostazioni base, le
realizzazioni possono essere anche molto diverse l’una dall’altra, si prenderà come
riferimento il sistema di controllo che dovrà effettivamente essere sostituito, ovvero
quello del motore FIAT FIRE 1.2 8V multipoint (la sigla è PUNTO 75 MY ‘98).
L’unità di controllo (IAW 49F), il cui collegamento con i sensori e gli attuatori è
efficacemente riprodotto in Figura 1-1, ha il compito di elaborare i segnali provenienti
dai sensori al fine di comandare attuatori in modo da ottimizzare il funzionamento del
motore. Dal punto di vista hardware essa è caratterizzata da un processore Polaris (32
bit, 20 MHz) per l’elaborazione dei dati, un processore RISC per la gestione dei segnali
di posizione e delle attuazioni di iniezione ed accensione, dieci linee di ingresso
analogico (10 bit), memoria RAM da 7,5 kBytes (accesso a 16 bit), memoria EEPROM
da 512 Bytes e EPROM da 256 kBytes (accesso a 16 bit).
5
La struttura software, invece, prevede due livelli: il livello base consente di interfacciare
quello superiore con i sensori, gli attuatori, gli strumenti diagnostici. Il livello superiore
calcola, in base agli algoritmi implementati, i parametri di attuazione.
La centralina è in grado di gestire operazioni scandite sulla base di clock temporali o
angolari: tanto gli eventi il cui significato è legato al dominio temporale (ad esempio la
durata di un’iniezione), quanto quelli definiti sul dominio angolare (ad esempio
l’anticipo di accensione), possono essere gestiti secondo precise priorità.
Le informazioni a cui la centralina accede sono:
-
Tensione di batteria;
-
Pressione assoluta nel collettore di aspirazione;
-
Posizione angolare dell’albero motore;
-
Temperatura dell’aria nel collettore di aspirazione;
-
Posizione di apertura della valvola a farfalla;
-
Temperatura del liquido refrigerante;
-
Inserimento del condizionatore;
-
Segnale della sonda λ.
Si noti che, tramite una strategia opportunamente studiata per eliminare il sensore di
fase (di solito posto sulla puleggia dell’albero a camme), in questo caso si riesce a
stabilire la fase assoluta (sui 720 gradi del ciclo e non solo sui 360 del giro) impiegando
un solo sensore posto sull’albero a gomiti.
Gli attuatori comandati sono invece:
-
Elettroiniettori;
-
Bobine di accensione;
-
Attuatore del minimo (motore passo-passo);
-
Elettrovalvola di spurgo dei vapori di benzina contenuti nel canister;
-
Compressore del condizionatore;
-
Elettroventole per il raffreddamento;
-
Spia di segnalazione errori.
Ovviamente, oltre alle funzioni tipiche di un sistema di controllo, la centralina svolge
anche funzioni diagnostiche e di recovery, ovvero di gestione dei malfunzionamenti.
1.2 DEFINIZIONE DELLE SPECIFICHE
Le specifiche nascono dall’esigenza di avere a disposizione un sistema adattabile ad una
vasta gamma di motori, adatto quindi ad un impiego in una sala prove in cui i motori
6
IL SISTEMA DI CONTROLLO IN TEMPO REALE
montati al banco possono avere, di volta in volta, caratteristiche diverse. I vincoli
imposti sulle caratteristiche dei segnali di attuazione nascono dall’esigenza di poter
dosare precisamente la quantità di combustibile immesso: pensando, in particolare, ai
sistemi common-rail, in cui la durata delle iniettate più brevi scende sotto i 200 [µs],
diventa comprensibile la necessità di una elevata risoluzione temporale dei segnali di
attuazione: un valore di 1 [µs] potrebbe, ad esempio, essere adeguato per applicazioni
satndard. Allo stesso modo, riferendosi a tali motori o ai moderni motori ad accensione
comandata, si può capire l’importanza che ha la collocazione angolare delle attuazioni
(di iniezione nel primo caso, di accensione nel secondo): in questo caso si può
richiedere una risoluzione di 0.25 [°].
Data la destinazione d’uso (prove da svolgere al banco su motori prodotti in serie), si è
pensato di porre un limite di 6000 [rpm] al regime di rotazione, non rinunciando
comunque a gestire motori fino a 12 cilindri.
Il sistema di controllo, basato su una strategia di tipo speed-density, deve gestire, per
ogni cilindro, le attuazioni di accensione ed iniezione, che hanno frequenza ciclica:
viene spontaneo richiedere, per rendere tali attuazioni il più possibile adeguate alle
condizioni di funzionamento del motore (prontezza e precisione del sistema), che i
calcoli siano eseguiti una volta per ciclo per ciascuno dei cilindri.
Per quanto concerne l’esecuzione delle acquisizioni dei dati impiegati nei calcoli, è bene
scegliere una frequenza maggiore: alcune grandezze, infatti, anche nel caso di
condizioni stazionarie, potrebbero presentare forti oscillazioni all’interno del ciclo.
Questa caratteristica, che accomuna il segnale di velocità angolare e di pressione nel
collettore di aspirazione, può rendere la misura dipendente dalla fase angolare in cui è
eseguito il campionamento. Il problema può essere risolto misurando il valore medio sul
ciclo di tali variabili: per minimizzare il numero di campioni necessario per ottenere
questa informazione, si può approfittare del fatto che si conosce il periodo di
oscillazione dei valori da campionare: tanto il segnale di velocità quanto quello di
pressione nel collettore, infatti presentano un periodo pari all’estensione angolare del
ciclo divisa per il numero dei cilindri. Si può quindi campionare con un periodo pari alla
metà di tale valore, ed essere sicuri, dato l’andamento quasi-sinusoidale dei segnali, che
la media di due campioni successivi equivale (in regime stazionario) al valore medio del
segnale sul ciclo.
A tale valore si può sommare, eventualmente, una componente predittiva, basata sulla
variazione registrata rispetto al calcolo precedente.
7
Queste esigenze si riflettono sulla richiesta prestazionale all’hardware impiegato, dal
momento che, in un motore a dodici cilindri che ruota a 6000 [rpm], sarà necessario
eseguire 600 calcoli e 1200 acquisizioni al secondo. Considerando che i loop di
controllo possono essere anche complessi, e che anche le acquisizioni richiedono tempo,
si capisce l’importanza di fare queste considerazioni in sede di determinazione delle
specifiche del sistema.
Queste specifiche di larga massima riguardano la gestione ordinaria del motore: volendo
acquisire informazioni su grandezze il cui campionamento deve essere più rapido, come
la pressione all’interno del cilindro, o il tempo impiegato dall’albero motore a
percorrere l’arco angolare compreso tra due denti adiacenti della ruota fonica ad esso
solidale, esse diverrebbero assai più gravose.
In un sistema di sviluppo, che serva a sostituire la centralina in un’applicazione al
banco, è logico attendersi alcune differenze rispetto alle soluzioni adottate nei prodotti
standard: innanzi tutto l’hardware deve avere prestazioni più elevate poiché non ci si
può aspettare che il software sia ottimizzato come quello sviluppato sulla centralina
originale. Inoltre ci si deve poter permettere l’impiego di algoritmi anche di complessità
non accettabile in fase di produzione, che tuttavia potrebbe rivelarsi utile in fase
sperimentale. Allo stesso modo, la memoria disponibile per immagazzinare dati, deve
avere dimensioni sensibilmente superiori rispetto a quelle tipiche dei prodotti della
grande serie: per quanto riguarda tutti questi dati, sarebbe bene incrementarli di un
ordine di grandezza rispetto ad un’unità standard.
8
IL SISTEMA DI CONTROLLO IN TEMPO REALE
Figura 1-1: layout del sistema di controllo motore
Anche per quanto riguarda il numero di linee dedicate all’acquisizione analogica di
segnali, o alla generazione di segnali analogici, le caratteristiche dell’unità di serie
aiutano nella definizione: a fronte delle 10 linee di ingresso analogico a 10 bit che
caratterizzano la IAW49F, si possono impiegare, in una soluzione adatta ad un uso
sperimentale, un numero maggiore di linee (ad esempio doppio), con maggiore
risoluzione (almeno 12 bit) e con media frequenza di campionamento (1-10 kHz).
Infine devono essere disponibili anche uscite, tanto di tipo analogico quanto di tipo
digitale, per eventuali comandi di attuazione e/o comunicazione con unità esterne. A
9
questo proposito è importante avere la possibilità di comunicare sfruttando protocolli
definiti dall’utente, oppure standardizzati (seriale, CAN): le centraline più recenti,
consentono infatti, se opportunamente programmate, di comunicare secondo tali
protocolli, rendendo di fatto possibile la verifica di una sola parte degli algoritmi di
calcolo (bypass).
Nella presente applicazione, se da una parte si può considerare che alcuni dei sensori e
degli attuatori rimarranno inutilizzati (sono impiegati, ripettivamente, solo quelli in
arancione e in verde in Figura 1-1), dall’altra altri sensori ed altri attuatori potrebbero
essere aggiunti (ad esempio: sonda λ lineare, attuatori del banco prova).
Si conclude la carrellata sulle specifiche che il nuovo hardware deve rispettare
osservando che anche i segnali di attuazione richiedono particolare attenzione: da
questo punto di vista quelli di più difficile soddisfazione sono i requisiti dei segnali di
iniezione ed accensione. Se da una parte essi devono infatti essere controllati con
particolare precisione, dal momento che determinano, rispettivamente, la massa di
benzina iniettata ad ogni ciclo e l’anticpo di accensione, dall’altra richiedono notevoli
potenze elettriche. Si dovranno quindi impiegare circuiti di amplificazione del segnale
(moduli di potenza) pilotati tramite segnali controllati con grande risoluzione. La
risoluzione deve poi essere ottenuta tanto nel dominio temporale quanto in quello
angolare: quella temporale è necessaria per determinare con precisione la durata delle
attuazioni (carica della bobina e tempo di iniezione), quella angolare, invece, influisce
sulla loro fase angolare (particolarmente importante per l’anticipo di accensione nei
motori a combustione interna ad accensione comandata). Volendo determinare
specifiche sui segnali di attuazione comuni ai motori ad accensione comandata e ad
accensione per compressione, si può affermare che risoluzioni temporali dell’ordine di 1
[µs] e angolari di almeno 0.25 [°] costituiscono la base per un buon sistema di controllo.
1.3 IL SISTEMA DI CONTROLLO
Attualmente sono disponibili sul mercato molti prodotti adatti ad applicazioni di tipo
Rapid Control Prototyping e Hardware in the Loop. Si tratta, sostanzialmente, di sistemi
dotati di un processore dedicato, che consente lo svolgimento in tempo reale dei calcoli
necessari ad eseguire il loop di controllo o a simulare il sistema fisico, e di schede di
Input/Output, che consentono l’elaborazione e lo scambio di dati con l’esterno, in forma
analogica e digitale. La prestazione più qualificante è senz’altro la capacità di eseguire
loop di calcolo a frequenza molto elevata, che consente di controllare fenomeni
rapidamente variabili nel tempo o di simulare in tempi brevi sistemi fisici molto
10
IL SISTEMA DI CONTROLLO IN TEMPO REALE
complessi. Per questo i sistemi di controllo in tempo reale sono dotati di processori
dedicati, basati su sistemi operativi “Real Time”, le cui prestazioni sono in perenne e
rapidissima ascesa, come quelle dei processori per PC. Da non sottovalutare è poi
l’importanza del software di gestione del sistema che deve rendere semplice la
programmazione - ovvero la prototipazione, per esempio, degli algoritmi di controllo - e
facilmente controllabili i parametri dei programmi elaborati, i quali devono infine poter
essere modificati in tempo reale, ovvero senza interrompere lo svolgimento dei calcoli.
Se da una parte ci si sta movendo verso l’apertura a programmi già affermati in altri
campi (simulazione, misure), quali Simulink o LabVIEW, che consentono di realizzare
modelli fisici tramite una programmazione a oggetti, dall’altra, per i software di
gestione dei parametri vengono adottate dai diversi produttori soluzioni di diversa
efficacia. Infine le possibilità di comunicazione con unità esterne, quali centraline
elettroniche, calcolatori, strumenti di misura, secondo protocolli standard (CAN, seriale,
ecc.), può svolgere un ruolo di fondamentale importanza. Se da una parte, proprio per
questo motivo, i produttori tendono ad offrire le medesime possibilità di accesso ad
hardware esterno, dall’altra le modalità di impiego di tali funzioni possono essere più o
meno semplificate.
Non esiste quindi un’unica soluzione ottimale per la generica esigenza del controllo
Real Time di un sistema, essa dovrà essere valutata di volta in volta, secondo
l’applicazione, e molto probabilmente dipenderà, data la dinamica del mercato, dal
periodo in cui si colloca il progetto. Volendo riassumere molto sinteticamente le
caratteristiche salienti di un sistema di questo tipo, esse potrebbero essere riassunte in:
-
Potenza di calcolo in tempo reale (tipo e velocità del processore, memoria
disponibile, sistema operativo)
-
Funzioni di I/O analogico (frequenza di campionamento, numero di bit, range di
tensione, velocità di immagazzinamento dati)
-
Funzioni di I/O digitale (frequenza di aggiornamento, possibilità di gestire
protocolli di comunicazione, generazione pattern PWM o simili per il controllo
di attuatori, interpretazione di segnali in ingresso, possibilità di gestire interrupt
e di generare segnali su tale base)
-
Software di programmazione
-
Software di gestione
11
1.3.1 HARDWARE A DISPOSIZIONE
All’inizio del progetto, nel 1999, l’offerta sul mercato era notevolmente più povera
rispetto a quella attuale, ed era sostanzialmente limitata a sistemi ETAS o dSPACE. La
scelta cadde su una particolare configurazione del dSPACE Real Time System.
Per esercitare la propria azione di controllo, il sistema si basa su un certo numero di
componenti hardware e su una suite di programmi che si appoggiano al noto ambiente
di programmazione MATLAB: l’insieme di questi due elementi è chiamato “Total
Development Environment” (TDE - ambiente di sviluppo integrato ). La configurazione
del sistema dSPACE è di tipo modulare, spetta cioè all’utente definire, sulla base delle
esigenze tipiche del proprio progetto, quali sono le funzioni di cui ha bisogno e, di
conseguenza, scegliere le schede in grado di eseguirle.
Nel presente caso sono state scelte le seguenti schede:
•
DS1003 - DSP board;
•
DS2201 - Multi I/O board;
•
DS4001 - Digital and Timing I/O board.
Si passano ora in rassegna le principali caratteristiche di ciascuna di esse, in modo da
conoscere le funzioni che sono in grado di svolgere.
1.3.2 DS1003:
Si tratta della scheda di calcolo ed è dotata di un processore DSP (Digital Signal
Processor).
Questa scheda è adibita esclusivamente ai calcoli, non ha porte d’ingresso o d’uscita per
la comunicazione con l’esterno, ma è collegata con le schede di I/O attraverso il bus
PHS (Peripheral High Speed bus – un cavo piatto attraverso il quale le schede
comunicano tra loro ad alta velocità). Il processore montato su questa scheda ha un
clock da 60 MHz.
Figura 1-2: DS 1003
12
IL SISTEMA DI CONTROLLO IN TEMPO REALE
1.3.3 DS2201:
E’ una scheda di input/output dotata di cinque convertitori A/D, due convertitori D/A
(ogni convertitore è a 12 bit ed è composto da quattro canali separati) e 16 linee digitali.
La massima frequenza di campionamento dei convertitori A/D è di 31 kHz con un solo
convertitore attivato (diminuisce al crescere del numero di convertitori utilizzati).
Figura 1-3 : DS 2201
Questa scheda consente all’unità centrale (DS1003) di acquisire il valore di una certa
grandezza analogica in una forma, quella digitale, direttamente utilizzabile dal
processore per l’esecuzione dei calcoli (grandezza fisica analogica ⇒ conversione A/D
⇒ valore digitale disponibile per il calcolo).
Il risultato dei calcoli può successivamente essere comunicato all’esterno del sistema o
convertendo questo dato in un segnale proporzionale, in tensione, al valore appena
calcolato (risultato del calcolo in forma digitale ⇒ conversione D/A ⇒ segnale fisico in
tensione), oppure trasferendolo ad un dispositivo funzionante in logica digitale
(risultato del calcolo in forma digitale ⇒ linee digitali ⇒ segnale digitale = sequenza
binaria di zero ed uno).
Il range di tensione dei segnali analogici in ingresso ed in uscita deve essere compreso
tra ±10 V.
1.3.4 DS4001:
E` una scheda periferica di input/output completamente digitale, in grado cioè di
ricevere dall’esterno (e trasmettere alla scheda di calcolo DS1003), oppure di
trasmettere all’esterno (ricevendo dalla scheda di calcolo DS1003), informazioni in
forma digitale (cioè attraverso livelli discreti di tensione: 0 o 5 V).
13
La scheda è dotata di 32 linee digitali: il livello del segnale viene considerato alto
(segnale logico 1) nel caso in cui l'ampiezza sia superiore a 2 V, basso (segnale logico
0) se inferiore a 0.8 V.
Oltre ai suddetti canali digitali, questa scheda possiede due linee per l'hardware interrupt
(IRQ0 ed IRQ1) e cinque timer per la generazione di sequenze di impulsi (ad esempio:
PWM) o la determinazione della frequenza di segnali in ingresso.
Figura 1-4 : DS 4401
Le schede sono affiancate da un software che permette la realizzazione pratica dei
modelli di controllo e la loro applicazione mediante le schede stesse. Gli algoritmi di
controllo sono realizzati tramite Simulink (la nota toolbox di Matlab). Tale applicativo
ha il grande pregio di permettere la creazione di programmi di controllo tramite dei
semplici schemi a blocchi (si veda Figura 1-5), realizzabili e modificabili in poco
tempo. Ai blocchi di corredo all’applicativo, si aggiungono (grazie alle librerie RTI –
Real Time Interface – realizzate dalla dSPACE) quelli specifici per le schede DS4001 e
DS2201 (in rosso - Figura 1-5), ai quali viene affidato il compito di interfacciare
l’algoritmo realizzato con il mondo esterno.
14
IL SISTEMA DI CONTROLLO IN TEMPO REALE
Figura 1-5 : esempio di schema a blocchi
Terminata la fase di programmazione, un altro software, il Real Time Workshop
(RTW), si occupa di gestire la traduzione del codice simbolico (lo schema a blocchi) in
un codice C, che, attraverso il compilatore viene poi tradotto in linguaggio macchina
compatibile con il DSP presente sulla DS1003. Successivamente le informazioni
vengono inviate alla scheda stessa (tramite un cavo di collegamento tra PC e dSPACE).
Si può poi interagire in tempo reale con l’algoritmo immagazzinato dalla DSP board
attraverso il software ControlDesk, il cui scopo è quello di fornire un’interfaccia grafica
da utilizzare per visualizzare e/o modificare tutti i parametri che influenzano o sono
influenzati dal modello stesso (si veda Figura 1-6).
15
Icona corrispondente a LOAD APPLICATION
INSTRUMENT SELECTOR
TOOL WINDOW
Figura 1-6 : Controldesk
1.3.5 L’APPLICAZIONE A M.C.I.
Nel caso specifico il sistema di controllo in tempo reale deve servire all’elaborazione di
algoritmi per il controllo e la diagnosi di motori a combustione interna, con particolare
riferimento a quelli ad accensione comandata. In un’applicazione di questo tipo i vincoli
più stringenti riguardano l’alta frequenza di esecuzione dei calcoli, che possono essere
talora complessi, e la necessità di collocare con precisione le attuazioni
contemporaneamente nel dominio angolare e nel dominio temporale. Se il primo
problema può essere risolto con la scelta di un processore sufficientemente veloce e/o
con la semplificazione dei calcoli da eseguire, il secondo richiede invece considerazioni
più approfondite.
Si considerino allora le specifiche per un sistema come quello in oggetto (per
un’applicazione relativa al controllo di m.c.i.):
16
-
regime di rotazione massimo: 6000 [rpm];
-
numero massimo di cilindri: 12;
-
risoluzione temporale sui segnali di attuazione (iniezione): 1 [µs];
-
risoluzione angolare sui segnali di attuazione (accensione): 0.25 [°];
-
esecuzione calcoli: 1 calcolo per ciclo per cilindro
-
campionamento segnali: 2 campionamenti per ciclo per cilindro
IL SISTEMA DI CONTROLLO IN TEMPO REALE
Il sistema dSPACE, nella configurazione acquistata, non è in grado di far fronte alle
specifiche richieste. Infatti, nonostante esso sia in grado di eseguire calcoli anche
complessi, e campionamenti con la frequenza desiderata anche sulla base di eventi
esterni (hardware interrupt), esso non può generare segnali con le caratteristiche
desiderate per il comando degli attuatori. La possibilità di generare segnali digitali di
I/O, infatti, è limitata alla generazione di onde quadre o di tipo PWM, definite quindi
sulla base del tempo. I più importanti segnali di attuazione, invece, sono definiti, nel
caso di un motore a combustione interna, sul dominio angolare, ovvero sulla base di
eventi (raggiungimento di una determinata posizione angolare) in termini di inizio
(iniezione) o fine (accensione) attuazione, e su una base temporale per quanto concerne
la durata.
Per questo si è deciso di integrare il dSPACE Real Time System con un ulteriore
dispositivo elettronico: il circuito elettronico esterno (CEE).
La funzione del sistema dSPACE viene dunque limitata all’informare il CEE, al quale è
collegato tramite un cavo piatto (BOA), sulle caratteristiche che i segnali da inviare agli
stadi di potenza degli attuatori dovranno avere:
•
la loro durata in microsecondi ,
•
in corrispondenza di quale evento devono essere inviati (trigger).
Il CEE comunicherà con i circuiti di potenza tramite una scheda hardware (una per
cilindro) disposta al suo interno, detta Top Board (si veda lo Schema 1-1).
Una modifica hardware così profonda si ripercuote, a livello software, sulla struttura del
modello Simulink.
La fase di aggiornamento è scandita da un interrupt hardware (IRQ), cioè un impulso
inviato dal CEE (tramite il BOA) nell’istante in cui si vuole che la DS1003 esegua i
calcoli. L’algoritmo è diviso in due blocchi (uno per le acquisizioni dei segnali
provenienti dai sensori l’altro per l’esecuzione del modello di controllo vero e proprio),
ognuno dei quali è eseguito all’arrivo di due IRQ distinti detti IRQ0 e IRQ1 (si veda
Figura 1-5). Entrambi gli IRQ sono generati da un’altra scheda presente sul CEE detta
Interrupt Board.
17
Schema 1-1: sistema di controllo
1.3.6 IL dSPACE Real Time System ed Il Circuito Elettronico Esterno
Lo Schema 1-1 può aiutare nel tentativo di chiarire come il dSPACE ed il CEE
interagiscono tra loro.
I sensori di posizione (grano camme, grano volano, denti volano) inviano il proprio
segnale alla interrupt board (CEE); gli altri sensori (pressione nel collettore
d’aspirazione, sonda lambda, temperatura acqua di raffreddamento, tensione di batteria,
ecc…) trasmettono invece ai convertitori A/D presenti sulla DS2201 (dSPACE). Come
vedremo meglio in seguito, è compito dell’interrupt board trattare i tre segnali suddetti
al fine di conoscere (con la risoluzione di un dente del volano) la posizione esatta del
motore in relazione al ciclo (corrispondente a due giri motore). Questa informazione è
sfruttata sempre dalla stessa scheda, per generare i due interrupt (IRQ0 e IRQ1) che
scandiscono le operazioni di acquisizione e di calcolo del dSPACE. I risultati
dell’elaborazione (effettuata dalla DS1003) sono inviati, tramite la DS4001, alla top
board incaricata di gestire il cilindro oggetto del calcolo.
1.3.7 I SEGNALI DI COMANDO
Nel paragrafo precedente è stato detto che il CEE grazie all’interrupt board è a
conoscenza della fase del ciclo con la risoluzione di un dente. La top board
(comunicando con l’interrupt board) utilizza l’informazione per generare, grazie ad un
18
IL SISTEMA DI CONTROLLO IN TEMPO REALE
timer interno caratterizzato da un clock da 1 [MHz] (risoluzione di 1 [µs]), i segnali di
comando (sia per l’iniezione sia per l’accensione) visibili in Figura 1-7 e in Figura 1-8 .
V
5V
t
Trigger
(Zj)
Toj
Tj
Figura 1-7 : segnale di iniezione
Entrambi i segnali sono contraddistinti da un valore di tensione pari a 0 o 5 [V] inoltre,
il passaggio da un valore e all’altro può avvenire con un certo ritardo rispetto al
passaggio del corrispondente dente di riferimento (trigger).
Per quanto riguarda l’iniezione (vedi Figura 1-7), il segnale è caratterizzato da una
prima parte di durata T0j , durante la quale rimane a basso livello e da una seconda parte
di durata Tj, di permanenza ad alto livello. Sul tempo Tj, pari alla durata dell’iniezione,
si ha quindi una risoluzione di 1[µs]. Ad ogni ciclo motore, al passaggio di un
determinato dente Zj (trigger), il conteggio parte nuovamente. La presenza del tempo T0j
permette di collocare l’inizio del segnale di comando all’interno del settore angolare
individuato da due denti adiacenti, svincolando il posizionamento dell’iniezione dal
numero di denti presenti sul volano.
V
5V
t
Trigger 1 (Zic)
Trigger 2 (Zfc)
Toc
Figura 1-8: segnale di accensione
Per l’accensione il discorso è molto simile (vedi Figura 1-8). In questo caso si determina
l’istante in cui scocca la scintilla con la precisione di un microsecondo (Toc), mentre
l’istante d’inizio carica della bobina avviene in corrispondenza del passaggio di un
determinato dente del volano detto Zic. La risoluzione temporale, utilizzata per regolare
19
l’anticipo d’accensione, raggiunge l’obiettivo che ci si è posti al momento di redigere le
specifiche di controllo: l’informazione temporale, infatti, consente, nota la velocità di
rotazione, di passare a quella angolare e di collocare quindi con sufficiente precisione la
transizione da 5[V] a 0[V] del segnale di carica della bobina (corrispondente allo
scoccare della scintilla). Ci si riferisce a segnali di questo tipo come a “monostabili
ritardati” (delayed monoflop).
E’ compito del modello, implementato nella DS1003, calcolare i tempi e i denti di
trigger e trasmetterli alle top board in forma binaria. In particolare, i tempi vengono
rappresentati utilizzando 16 bit mentre per i denti se ne impiegano 8. I valori temporali,
memorizzati all’interno di un circuito integrato chiamato contatore (counter), vengono
decrementati di uno ogni microsecondo pertanto, l’iniezione può durare al massimo
65535 [µs] (un numero binario di 16 bit corrisponde al massimo a 65535 in forma
decimale). Per quanto riguarda i denti, non è possibile superare la soglia degli 8 bit (e
quindi dei 255 denti) perché le celle di memoria destinate a immagazzinare tali valori
sono ampie 1 byte.
1.4 STRUTTURA DEL CEE
Per evitare di disorientare il lettore con un’eccessiva quantità di informazioni ci si limita
ad una descrizione essenziale delle funzioni svolte dall’unità esterna, rimandando, per
approfondimenti, alle appendici A e B.
1.4.1 LA CONFIGURAZIONE D’INSIEME
Il circuito elettronico esterno (CEE) è composto da cinque tipi diversi di schede
hardware (vedi Schema 1-2):
1. l’interrupt board per la generazione degli interrupt IRQ0 e IRQ1;
2. la top board per comandare gli stadi di potenza dell’accensione e dell’iniezione;
3. la scheda di alimentazione per fornire energia all’intero sistema;
4. la scheda di comunicazione per interfacciare il CEE con il dSPACE Real Time
System;
5. la scheda madre per collegare tra loro tutte le schede del CEE.
20
IL SISTEMA DI CONTROLLO IN TEMPO REALE
Schema 1-2: le schede del circuito elettronico esterno
Le prime due (la seconda presente in un numero pari a quello dei cilindri) sono il cuore
del sistema, mentre le altre svolgono funzioni che potremmo definire “di servizio”.
1.4.2 L’INTERRUPT BOARD
La scheda di generazione degli interrupt ha la fondamentale funzione di monitorare la
fase di funzionamento del motore: sulla base dei segnali provenienti dai trasduttori di
posizione montati su albero motore e albero a camme, deve cioè stabilire quando
comincia un nuovo ciclo motore, azzerando il conteggio dei denti della ruota fonica, ed
inviare interrupt al sistema dSPACE in occasione di determinati eventi, ovvero allorché
il conteggio raggiunga valori prefissati. In questo modo le acquisizioni dei segnali e
l’esecuzione dei calcoli può essere eseguita, dal sistema dSPACE, su base evento. La
fasatura angolare, effettuata ad ogni avviamento, viene verificata ad ogni ciclo.
21
Figura 1-9: Interrupt Board
L’Interrupt board ha quindi diverse funzioni.
Un primo compito è quello di elaborare i segnali di posizione e di fase provenienti dal
motore con gli squadratori di cui è composto l’adattatore; si tratta dei tre segnali:
-
Segnale “denti”;
-
Segnale “giro” (o “volano”);
-
Segnale “ciclo” (o “camme”).
Il segnale in uscita dal pick-up induttivo (un sensore a riluttanza variabile) affacciato sui
denti della ruota fonica , 116 nel nostro caso (Figura 1-10), ha un andamento all’incirca
sinusoidale e ampiezza e frequenza direttamente proporzionali alla velocità di rotazione
dell’albero a gomiti (Figura 1-11).
L’ampiezza è inoltre influenzata da altri parametri: l’entità del traferro tra volano e pickup, la posizione reciproca di denti e sensore, la geometria dei denti, le caratteristiche
elettriche del sensore stesso (resistenza, induttanza e capacità).
22
IL SISTEMA DI CONTROLLO IN TEMPO REALE
Figura 1-10: Pick-up affacciato sui denti della ruota fonica
Per quanto riguarda i due restanti pick-up, durante un giro dell’albero a camme o
dell’albero motore, si ha una sola brusca variazione della riluttanza magnetica in
corrispondenza del passaggio del grano.
Figura 1-11: Segnale denti
I segnali ottenuti, pur avendo un andamento molto simile, avranno ampiezze e
frequenze diverse (Figura 1-12) a causa della differenza di velocità angolare tra i due
alberi; in particolare, il segnale proveniente dal volano avrà un’ampiezza maggiore ed
una frequenza doppia (l’albero a gomiti ha una velocità angolare doppia rispetto
all’albero a camme).
23
Figura 1-12: Segnali camme (C1-rosso) e volano (V1 e V2-blu)
Quando un dente del volano, oppure uno dei due grani, è perfettamente allineato con il
proprio pick-up, la variazione del traferro è nulla e di conseguenza, in base alle leggi
dell’induzione magnetica, è nulla anche la tensione indotta ai capi del pick-up.
L’obiettivo che ci si pone è quello di ottenere in uscita dall’adattatore un’onda quadra il
cui fronte di salita indichi l’istante in cui la tensione di ingresso passi per lo zero. In
questo modo si ottengono tre distinte informazioni sulla posizione dell’albero motore:
-
la posizione angolare dell’albero sulla base del giro (tramite il segnale denti);
-
l’istante in cui l’albero motore completa un giro (tramite il grano volano);
-
l’istante in cui l’albero a camme completa un giro corrispondente ad un ciclo
dell’albero a gomiti (tramite il grano camme).
Il motivo per cui è comunque necessario il segnale “Giro” è da ricercarsi nella scarsa
rigidità del collegamento tra l’albero motore e l’albero a camme ottenuto attraverso
l’utilizzo di cinghie dentate; basandosi sul segnale proveniente dal grano posizionato su
quest’ultimo albero, si avrebbe, a causa di oscillazioni angolari tra i due alberi, un
riferimento scorretto del dente 0, il dente dal quale comincia il conteggio della
procedura.
Una volta trasformati dallo squadratore, i segnali vengono ulteriormente elaborati dai
blocchi di sincronizzazione e fasatura. Al termine del trattamento si ottengono due
segnali logici:
o S1;
24
IL SISTEMA DI CONTROLLO IN TEMPO REALE
o S0.
Il segnale S1 costituisce il clock angolare per l’intero sistema; la sua periodicità è legata
al passaggio dei denti della ruota fonica.
A
Figura 1-13: Discesa del segnale S0: il dente 0
Osservando la Figura 1-12, dove sono evidenziati i segnali provenienti dai sensori
affacciati sui due grani, risulta evidente che, con la frequenza di un ciclo motore, si
ripete sempre la stessa sequenza di eventi: per primo arriva il segnale “camme” (C1) e
poi i due segnali provenienti dai sensori affacciati al volano (V1 e V2).
25
Il blocco di fasatura ha il compito di generare un segnale squadrato, il segnale logico
S0, di frequenza pari a quella del ciclo e dotato di un fronte di discesa sincrono con il
passaggio per lo zero del segnale D1 nel punto A indicato in Figura 1-13.
Tale evento corrisponde al primo allineamento tra un dente del volano, il dente 0 che si
sta cercando, ed il pick-up che ne rileva il passaggio cronologicamente successivo
all’annullamento del segnale V2 (in pratica il passaggio di livello avviene ad ogni giro
motore in corrispondenza del dente successivo al passaggio del grano volano). Si ottiene
dunque un segnale il cui stato informa il sistema sulla fase corrente del motore, un’onda
quadra con la frequenza pari a quella del ciclo che ha il fronte di discesa coincidente con
il dente 0: questo evento fissa l’inizio del ciclo per il CEE (individuato dalla sequenza),
dal momento che comanda al microcontrollore di azzerare il contatore dei denti; in
pratica il dente 0 è individuato dalla sequenza camme-volano-volano-dente. Al primo
segnale volano S0 si alza di livello, mentre al secondo passaggio scende e dà inizio al
conteggio.
Attualmente il fronte di discesa del segnale S0, e quindi il dente 0, viene registrato circa
a metà della fase di aspirazione del cilindro 1.
Figura 1-14: Attuale segnale S0 per il cilindro 1
La seconda funzione dell’Interrupt board è quella di informare il sistema dSPACE
dell’avvenuto raggiungimento di una determinata posizione angolare. L’ST6,
microcontrollore che costituisce il cervello della scheda, è in grado di conteggiare il
passaggio dei denti e di generare un impulso di breve durata (8 µs), usato come
26
IL SISTEMA DI CONTROLLO IN TEMPO REALE
Interrupt, in corrispondenza di un determinato dente (Zinterrupt). Gli Interrupt generati
nella configurazione attuale vengono inviati su due specifici canali:
•
Interrupt 1 (o IRQ 0);
•
Interrupt 2 (o IRQ 1).
Figura 1-15: Segnali di Interrupt
Il primo viene inviato su una determinata linea con una frequenza coincidente con il
numero di combustioni a ciclo; la sua funzione è quella di forzare la scheda DS 1003
nell’esecuzione dei calcoli e di inviare i dati aggiornati alle varie Top board. Il secondo
viene generato con una frequenza doppia (due volte a ciclo per ogni cilindro) e comanda
al sistema dSPACE di effettuare l’acquisizione dei segnali di ingresso del modello. Il
motivo per cui questo segnale abbia una frequenza doppia è da ricercare nella
caratteristica dell’andamento temporale dei segnali stessi.
Il conteggio del numero di Interrupt ricevuti dal sistema dSPACE costituisce la tecnica
adottata per la fasatura con il CEE e quindi con il motore: incrementando ad ogni
Interrupt di calcolo una variabile, il sistema di controllo è in grado di risalire alla
posizione angolare del motore e di individuare la corretta Top Board a cui inviare i dati;
al raggiungimento del valore corrispondente al numero di Interrupt a ciclo (ovvero di
cilindri), la variabile viene azzerata.
1.4.3 LA TOP BOARD
La Top board, sulla base dei parametri aggiornati riguardanti l’accensione e l’iniezione
ricevuti dal dSPACE, invia al momento opportuno i segnali logici di comando agli stadi
di potenza che successivamente risulteranno amplificati ed idonei a muovere gli
attuatori. Si è già detto che ci sono tante Top board quanti sono i cilindri del motore
controllato.
27
Figura 1-16: Top Board
L’espletamento delle sue funzioni è basato sulla presenza di due microcontrollori ST6,
che ne stabiliscono la logica di funzionamento, ed un timer Intel 82C54, che opera la
generazione dei segnali di comando.
Gli ST6 contengono dei contatori interni che vengono incrementati ad ogni impulso del
segnale S1 e azzerati alla discesa del segnale S0. Il contenuto del contatore è
confrontato continuamente con un valore memorizzato nel registro del comparatore
(arcp) e, al verificarsi dell'ugualianza, viene richiamata la sottoprocedura (ART-INT)
che istruisce il timer in modo da generare correttamente i segnali di comando degli
attuatori. Il conteggio dei tempi è infatti affidato al chip Intel 82C54, su cui sono
implementati tre timer, ognuno dei quali è abilitato al conteggio dei tre diversi parametri
temporali Toj , Tj , Toc.
Ogni ST6 (CPU 0 e CPU 1) è programmato con un codice specifico. Due sono i
compiti principali a cui ogni microcontrollore deve adempiere:
-
Gestire la comunicazione con il sistema dSPACE ed aggiornare i dati
-
Generare le attuazioni
Si è messa in evidenza la separazione delle due funzioni poichè esse sono eseguite in
maniera asincrona. Mentre la comunicazione (fase chiamata anche "Programmazione")
viene eseguita nella procedura principale del programma (“main”), le modifiche degli
stati di uscita, che determinano le attuazioni, sono contenute in routine del programma
richiamate da interrupt interni aventi maggiore priorità.
Questa caratteristica rende molto complessa la gestione di tutte le operazioni che l'ST6
si trova a dover compiere. Si pensi per esempio alla difficoltà di aggiornare i parametri
angolari di un'attuazione quando essa è già stata avviata.
La CPU1 si occupa di gestire la carica della bobina. Al raggiungimento del dente di
inizio carica, in sincronia con il segnale S1, una sua uscita (!BOB_ON) scende di
28
IL SISTEMA DI CONTROLLO IN TEMPO REALE
livello; tale segnale viene inviato al gate del timer contenente il parametro temporale
Toc. Il timer è sensibile alla sola salita (transizione basso-alto) del segnale di GATE: in
seguito a questo cambiamento di stato avrà inizio il conteggio del tempo Toc, trascorso
il quale cessa la carica della bobina (e quindi scocca la scintilla). In questa occasione il
segnale !BOB_ON viene riportato a livello alto.
Un aspetto molto delicato del funzionamento del software implementato nella CPU1
riguarda l’evenienza in cui l’aggiornamento dei parametri di accensione avvenga a
carica già avviata: bisogna evitare, ad esempio, che il dente di fine carica già
memorizzato venga sostituito dal nuovo dente di inizio carica: questo comporterebbe
infatti una carica di durata eccessiva (quasi un ciclo motore), che, oltre a causare un
misfire, sarebbe potenzialmente dannosa per la bobina. Il problema è risolto
controllando, all’atto della programmazione, lo stato del segnale !BOB_ON: se il suo
livello è alto (la carica non è in atto) viene caricato nel registro di comparazione il dente
di inizio carica, viceversa, nel caso in cui la carica sia già iniziata, viene caricato il dente
di fine carica. Le operazioni sono sintetizzate in Figura 1-17.
Figura 1-17: aggiornamento dei parametri di accensione
La CPU 0 si occupa dell'iniezione, ma anche della programmazione di tutti i timer.
Anche in questo caso le due funzioni di comunicazione e attuazione vengono gestite in
maniera asincrona. L'unico parametro angolare relativo all'iniezione è il dente Zj ,
quando nel comparatore viene raggiunto questo valore viene inviato un impulso ad un
29
timer, il quale inizierà a conteggiare un tempo Toj, che rappresenta l'attesa di inizio
iniezione. Al termine di questo tempo si ha l'attivazione di un secondo timer che
provvede a tenere ad alto livello il segnale "INJ" per un tempo Tj. Il segnale in uscita
dal secondo timer rappresenta dunque proprio il segnale logico di comando
dell'iniettore.
1.4.4 LA SCHEDA DI ALIMENTAZIONE
Questa scheda svolge l’indispensabile funzione di fornire l’energia necessaria per il
funzionamento del circuito, prelevandola dalla batteria, dopo averne opportunamente
adattato il livello di tensione. Il livello di corrente è internamente limitato a 1.5 A.
1.4.5 LA SCHEDA DI COMUNICAZIONE
La scheda di comunicazione ha il compito di amplificare e replicare, dove necessario, i
segnali provenienti dal sistema dSPACE: dato il numero delle utenze (una top board per
ogni cilindro e l’interrupt board…), infatti, le correnti sostenibili dalle linee digitali
delle schede dSPACE (5mA) potrebbero non essere sufficienti a lasciare inalterato il
livello di tensione, creando inopportune variazioni del segnale logico trasmesso.
1.4.6 LA SCHEDA MADRE
Questa scheda ha il compito di far comunicare tra loro quelle che compongono il CEE.
E’ quindi dotata, nella versione definitiva, di quindici connettori da 64 pin per
l’inserimento di tutte le schede (12 top board + 1 interrupt board + 1 scheda di
alimentazione + 1 scheda di comunicazione). Sono stati inoltre aggiunti due connettori
da cinquanta pin per la connessione con gli stadi di potenza tramite cavi piatti ( due
segnali, di comando e di terra, per ogni cilindro, raddoppiati nel caso si debbano usare
stadi di potenza attivi bassi).
1.5 MODULI DI POTENZA
I moduli di potenza sono una delle parti più delicate del sistema di controllo.
Essi hanno il compito di amplificare i segnali in uscita dal CEE, potenziandoli e
rendendoli idonei ad alimentare i vari attuatori che eseguono, a seconda dei casi,
l’iniezione o l’accensione.
I componenti impiegati sono del tipo Insulate Gate Polar Transistor (IGBT),
amplificatori che abbinano alle elevate prestazioni una notevole robustezza nonché
un’elevata semplicità. L’IGBT può essere azionato con un segnale di bassissima
potenza, il che permette il suo impiego diretto all’uscita del CEE; inoltre il canale
30
IL SISTEMA DI CONTROLLO IN TEMPO REALE
collettore-emettitore, controllato da un campo elettrico, è realizzato in modo tale da
permettere il passaggio di una minima corrente elettrica (di pochi µA) al momento
dell’apertura del transistor per evitare elevati picchi di tensione.
Gli IGBT impiegati nei moduli di potenza sono diversi a seconda che si consideri il
circuito di accensione o quello di iniezione. L’IGBT presente nel circuito di accensione
è più sollecitato, sia per le elevate correnti che lo attraversano (fino a 6 A) sia per gli
sbalzi di tensione che si verificano nell’istante in cui scocca la scintilla; il componente
di questo circuito dovrà conseguentemente essere più resistente di quello dell’iniezione.
L’amplificatore impiegato per l’iniezione è dunque di tipo diverso; si tratta infatti di un
MegaFET, un componente che svolge un funzionamento del tutto analogo all’IGBT ma,
dovendo sopportare condizioni meno gravose, presenta di fatto caratteristiche tecniche
inferiori.
Tutti i dispositivi per il controllo del motore sono stati poi sistemati in una scatola
adeguatamente predisposta per le connessioni esterne, sia per l’alimentazione e la
ricezione dei comandi da parte del CEE che per l’interazione con gli attuatori composti
dagli iniettori e dalle bobine dei vari cilindri.
Il modulo di potenza è attivato tramite un interruttore generale manuale, ma è necessario
un altro consenso: un segnale proveniente dal sistema dSPACE, infatti, viene inviato ad
un relè posto sul circuito, che attiva la parte del circuito che contiene gli amplificatori. Il
segnale attiva il circuito solo in fase di avviamento, e lo disattiva in fase di spegnimento
(richiesto o fortuito) del motore, evitando così potenziali danni agli attuatori o agli stessi
amplificatori, dovuti ad errate attuazioni.
1.5.1 STADIO DI POTENZA DELL’ACCENSIONE
Lo scopo dello stadio di potenza dell’accensione è quello di ottenere ai capi
dell'avvolgimento secondario della bobina d’accensione (ovvero gli elettrodi della
candela in Figura 1-18) una differenza di potenziale tale da generare un arco voltaico (la
scintilla d’accensione)
dotato di energia sufficiente ad accendere la miscela aria-
benzina presente in camera di combustione.
31
Figura 1-18 : stadio di potenza dell’accensione
Lo stadio di potenza, visibile in Figura 1-18 nella configurazione per un solo cilindro, è
composto da: un transistor di potenza, un ingresso collegato al circuito elettronico
esterno e un’uscita diretta al primario della bobina d’accensione. Quest’ultima è di fatto
un trasformatore (i due avvolgimenti sono il primario ed il secondario) con un fattore di
amplificazione della tensione molto elevato (circa 100) e con il circuito secondario
chiuso solo quando è presente la scintilla.
1.5.2 CARICA DELLA BOBINA
Durante il funzionamento normale del motore, al transistor viene inviato il comando di
carica della bobina proveniente dal CEE qualche istante (circa 4 ms come vedremo)
prima dello scoccare della scintilla (punto A di Figura 1-19 e Figura 1-20).
32
IL SISTEMA DI CONTROLLO IN TEMPO REALE
Figura 1-19: andamento di i1 nel tempo
Figura 1-20: andamento di Vce nel tempo
Durante questa fase, la differenza di potenziale V1 ai capi dell’avvolgimento primario è
pari alla tensione di batteria meno la caduta di potenziale Vce tra collettore ed emettitore
del transistor (trascurabile). La corrente i1 inizia a crescere seguendo la legge:
di1 V1
= , (Eq 1-1)
dt L1
dove L1 è l’induttanza del primario (di solito circa 8mH).
33
Per ottenere un’accensione sempre affidabile l’energia da immagazzinare sotto forma di
flusso magnetico nella bobina è pari a circa 150mJ. Tale energia vale :
E1 =
1
2
L1i1 . (Eq 1-2)
2
Nota E1 possiamo calcolare i1 ottenendo:
i1 =
2 E1
=
L1
2 × 150mJ
≅ 6 A. (Eq 1-3)
8mH
Per raggiungere questo valore il tempo di carica della bobina ∆tc è pari a:
∆t c =
L1i1 8mH × 6 A
=
= 4ms. (Eq 1-4)
V1
12V
Il sistema di controllo dell’accensione deve contenere questo dato per poter calcolare il
dente di fine carica. La relazione (Eq 1-4) ci suggerisce come poter rendere leggermente
più sofisticata la gestione dell’accensione. Infatti il tempo di carica è inversamente
proporzionale alla V1. Ciò vuol dire che una batteria scarica renderebbe necessario un
∆tc più ampio (anche il doppio) di quello realmente utilizzato dal modello, con il rischio
di ottenere un’accensione a bassa potenza e una combustione incompleta. Una possibile
soluzione consiste nell’acquisizione, tramite il sistema dSPACE, della tensione di
batteria con conseguente variazione in tempo reale del tempo di carica della bobina
d’accensione.
1.5.3 SCARICA DELLA BOBINA
Nel momento in cui il transistor viene spento (circuito del primario aperto) la tensione
di collettore, seguendo la legge di Lenz, passa da un valore pari a pochi decimi di volt
(Vce del transistor acceso) ad un valore di circa 300V. La tensione sale finché il
secondario non raggiunge ai suoi capi (gli elettrodi della candela) una differenza di
potenziale tale da consentire lo scoccare della scintilla (di solito da 5 a 30 [kV] a
seconda del fattore di trasformazione della bobina). Mentre il secondario “scarica” sulla
candela, sul collettore il valore di tensione, dopo le inevitabili oscillazioni dovute
all’inerzia induttiva del circuito (punto B di Figura 1-20), si assesta su di un valore di
poche decine di volt (20-30 [V]), finché tutta l’energia immagazzinata (150 [mJ]) non
viene liberata. A questo punto Vce torna al valore di 12 [V] (punto C di Figura 1-20). Il
ritardo tra il comando di chiusura del transistor e l’effettivo scoccare della scintilla
dipende dal tempo di commutazione del transistor stesso e dal tempo che impiega il
34
IL SISTEMA DI CONTROLLO IN TEMPO REALE
collettore a raggiungere la tensione di circa 300 [V]. Il modello di controllo tiene conto
di questo tramite un offset che viene sottratto all’istante di accensione calcolato.
1.5.4 AFFIDABILITA’ IN CASO DI MALFUNZIONAMENTO
Se il secondario della bobina non “scaricasse” per problemi alla candela o in generale
alla bobina stessa, la tensione di collettore Vce potrebbe raggiungere il valore della
tensione di breakdown del transistor, distruggendolo.
Figura 1-21 : IGBT
Si risolve questo problema collegando il collettore al gate tramite un diodo zener (diodo
con tensione di breakdown nota, vedi Figura 1-21). Con questa configurazione,
raggiunta la tensione di breakdown dello zener (minore di quella del transistor), il gate
riapre parzialmente il canale collettore-emettitore lasciando scaricare il primario prima
che sia troppo tardi. Il dispositivo IGBT è già dotato di tale circuito di protezione. Esso
può essere acceso e spento da un segnale a bassissima potenza, in quanto il canale
collettore-emettitore è controllato da un campo elettrico come nei MOSFET e non da
una corrente di base come nei BJT, onerosa in termini di energia spesa. Il canale
collettore-emettitore è pensato in modo tale da lasciar passare una seppur minima
corrente elettrica (pochi µA come nei BJT tramite i portatori di carica minoritari) al
momento dell’apertura del transistor, per evitare i picchi di tensione elevatissimi tipici
dei MOSFET. L’IGBT è quindi un ibrido: la sezione di controllo (gate) è quella di un
MOSFET e il canale di conduzione (collettore ed emettitore) di un BJT. Per questo
motivo è particolarmente adatto ai nostri scopi.
35
1.5.5 STADIO DI POTENZA DELL’INIEZIONE
Lo schema dello stadio è visibile in Figura 1-22. Quando viene inviato il segnale di
comando dal CEE il transistor si chiude. La bobina dell’iniettore, sottoposta ad una
tensione pari a (Transistor ON):
Viniezione = Vbatteria − Vce ≅ 12V (Eq 1-5)
lascia passare una corrente i crescente secondo la relazione:
di Viniezione
=
. (Eq 1-6)
dt Liniettore
La corrente continua a salire sino a raggiungere il valore di saturazione pari a:
i saturazion e =
Viniezione 12V
=
≅ 0.75 A,
Riniettore 16Ω
(Eq 1-7)
nel tempo tsaturazione:
t saturazione =
Liniettore × i saturazione 8mH × 0.75 A
=
≅ 500 µs. (Eq 1-8)
Viniezione
12V
In questa fase la bobina genera un campo magnetico tale da spostare lo stelo
dell’iniettore e permettere l’invio della benzina nel condotto d’aspirazione. Alla fine
della fase di iniezione il transistor viene aperto per chiudere l’iniettore. La tensione di
collettore, per effetto dell’induttanza presente nel circuito, sale fino raggiungere un
valore limite fissato dal circuito di protezione dalle tensioni di breakdown (60 [V]). In
questo caso uno zener, collegato tra il drain e il source e con una tensione di breakdown
di 60 [V], smaltisce la tensione in eccesso aggirando il transistor che altrimenti si
danneggerebbe irrimediabilmente.
L’energia magnetica accumulata dalla bobina, pari a:
Ebobina =
36
1
1
2
Liniettore × i saturazione = 8mH × 0.75 A = 2.25mJ , (Eq 1-9)
2
2
IL SISTEMA DI CONTROLLO IN TEMPO REALE
è molto inferiore a quella utilizzata nel circuito dell’accensione (circa 150 [mJ]).
Figura 1-22 : Stadio di potenza dell’iniezione
Per questo motivo è stato scelto per l’iniezione un transistor di potenza MOSFET .
1.6 POSIZIONAMENTO DEI CALCOLI
Si è visto come sia opportuno distribuire su un intero ciclo motore (2 giri dell’albero) 4
punti di calcolo e 8 punti di acquisizione, possibilmente in maniera uniforme, onde
evitare di sovraccaricare il processore: è poi evidente l’esigenza di acquisire in un punto
non troppo distante da dove verrà effettuato il calcolo.
Il Circuito Elettronico Esterno, tramite la Interrupt Board, invia al sistema dSPACE due
interrupt: l’IRQ 0 attiva il blocco “acquisizioni analogiche” ogni 90° percorsi
dall’albero motore mentre il segnale IRQ 1 causa l’esecuzione di una parte del modello
ogni 180°, permettendo così di realizzare 8 acquisizioni e 4 calcoli ad ogni ciclo (720°)
Rimane la necessità di determinare il primo punto di calcolo, o meglio, il dente in
corrispondenza del quale viene compiuto il calcolo numero 1. Dovendo riferire l’inizio
del ciclo ad un evento particolare, si è deciso di prendere come riferimento il suo Punto
Morto Superiore Attivo (PMSA) del cilindro 4, e il primo calcolo eseguito sarà quindi il
dente riferito al calcolo delle attuazioni del quarto cilindro.
37
Una prima prescrizione da imporre circa la posizione angolare del calcolo si deve alla
necessità di poter rendere operativo alla prima attuazione l’esito del calcolo: questo vale
tanto per l’accensione quanto per l’iniezione.
Per quanto riguarda l’accensione, si dovrà imporre una distanza minima del calcolo dal
PMS attivo pari a:
alfa = 133.2° + 40°+ 36° = 209.2°
(Eq 1-10)
essendo:
•
133.2 è la distanza angolare necessaria al caricamento della bobina dato dalla
moltiplicazione di 3.7 [ms] (tempo di carica della bobina) per 36 [°/ms]
(considerando la condizione più gravosa di 6000 [rpm]);
•
40 [°] rappresenta l’anticipo massimo che si vuole attuare;
•
36 [°] è la conversione in gradi di 1 [ms], il tempo necessario per il calcolo (in
realtà tale tempo è compreso nell’intervallo 850 ÷ 900 [µs] ma occorre sempre
mantenere un margine di sicurezza)
Dente di calcolo
Dente zero
p.cil(bar)
S0(volt)
10
[V,bar]
90°
8
incognita
alfa
6
4
2
0
C
E
1100
S
1200
A
C
1300
1400
Campioni [10kHz]
1500
1600
Figura 1-23: posizione del dente di calcolo nel ciclo
38
IL SISTEMA DI CONTROLLO IN TEMPO REALE
Il grafico in Figura 1-23 mostra le acquisizioni dei segnali S0 e di pressione nel cilindro
per meglio capire la disposizione dei parametri in gioco; l’acquisizione si riferisce ad
una prova (2500 [rpm] @ 600 [mbar]) in cui l’accensione era stata disattivata
(misfiring).
Il dente 0 coincide con il fronte di discesa del segnale S0, il segnale logico che ha la
frequenza pari a quella del ciclo; la discesa di S0 e il dente 0 rappresentano l’inizio del
conteggio per il Circuito Elettronico Esterno.
Dalla figura è evidente che:
α + β + 90 0 = 720 0 ⇒ β ≈ 420 0
(Eq 1-11)
Lo stesso angolo, espresso in termini di denti del volano, porta ad identificare il dente
ottimale di calcolo: 420°*116/360°=135.6 denti, essendo 116 il numero di denti presenti
sulla ruota fonica.
Per ragioni di comodità nella distribuzione dei task di calcolo ed acquisizione, tale
valore è stato spostato fino a 141; ovviamente il calcolo per il cilindro 1 viene così
eseguito al dente 25, per il cilindro 3 al dente 83, per il cilindro 2 al dente199 (secondo
l’ordine di accensione 1-3-4-2). In questo caso, ovviamente, anche il valore dell’angolo
α, compreso tra la posizione di calcolo e il PMS attivo, passa a 193.4°.
Si noti come i calcoli vengano effettuati prima della chiusura della valvola di
aspirazione, che avviene 41° dopo l’inizio della fase di compressione, per avere la
possibilità di iniziare subito l’iniezione in caso di necessità.
Scelte le posizioni angolari di calcolo in modo da ottenere il massimo aggiornamento
possibile, si determinano le posizioni angolari a cui devono avvenire i campionamenti
dei segnali che, come visto in precedenza, risultano 2 per ogni calcolo.
Si è stabilito che il punto di acquisizione ottimale fra il dente zero e il primo calcolo è il
dente 15, stante la sua distanza da eventi che potrebbero indurre disturbi sui segnali in
acquisizione, ed essendo, allo stesso tempo, sufficientemente lontano dal dente di
calcolo: ogni calcolo è basato sulle due precedenti acquisizioni come viene mostrato in
Figura 1-24.
39
I dati necessari al calcolo dei parametri di attuazione per il primo cilindro vengono
acquisiti al passaggio dei denti 218 e 15; per il secondo cilindro si passa ai denti 44 e 73
(rispettivamente 15+29 e 44+29), e così via seguendo le indicazioni riportate in figura.
Alzata valvola
di aspirazione
Cilindro #1
15
218
Angolo di manovella
Cilindro #2
160 189
Angolo di m anovella
Cilindro #3
44
Angolo di m anovella
73
Cilindro #4
102 131
Successione
calcoli e
acquisizioni
Cilindro #1
Angolo di manovella
Cilindro #2
Cilindro #3
Cilindro #4
Figura 1-24: Posizionamento calcoli e acquisizione
Questi valori sono specificati tramite opportune costanti nel modello di Simulink in cui
è implementato il sistema di controllo: essi sono inviati, tramite una S-function lanciata
in fase di inizializzazione, alla interrupt board, nella quale vengono memorizzati e
impiegati per l’invio degli interrupt.
Fino ad ora l’iniezione non è stata considerata per determinare il posizionamento di
calcoli ed attuazioni: per stabilire i punti di calcolo, è necessario che essi siano
effettivamente corretti in tutte le condizioni di funzionamento del motore al fine di
40
IL SISTEMA DI CONTROLLO IN TEMPO REALE
scongiurare il rischio che l’iniettata inizi a valvola di aspirazione ancora aperta con
conseguente aumento delle emissioni di HC.
Innanzitutto occorre capire quale sia l’arco angolare a disposizione per la fase di
iniezione. La fasatura della distribuzione impone un ritardo di chiusura della valvola di
aspirazione (R.C.A.) pari a 41 gradi e un anticipo di apertura valvola (A.A.A.) di 7
gradi: l’angolo che è possibile sfruttare vale quindi 540°-41°-7°=492°.
Figura 1-25: Durata angolare a disposizione dell’iniezione
Nell’arco individuato il sistema deve iniettare la benzina richiesta e concederle il tempo
di evaporare e miscelarsi con il comburente; nel modello si tiene conto del tempo
necessario al miscelamento col parametro angevap, calcolato in base alla pressione nel
collettore ed alla velocità stimate per l’iniezione. La mappa è stata ricavata
sperimentalmente sulla base delle attuazioni comandate dalla centralina originale.
41
Figura 1-26: Mappa angevap tridimensionale
Il parametro così introdotto viene impiegato secondo lo schema di figura Figura 1-27 e
permette quindi di determinare, in base alla durata dell’iniezione, i parametri Zj e T0j.
Inizio
iniezione
B
Figura 1-27: impiego di angevap
In figura è mostrato quello che può essere un esempio di posizionamento del punto di
inizio iniezione, un esempio perché, come detto, varia in base a Tj ed angevap, valori
continuamente mutevoli.
42
IL SISTEMA DI CONTROLLO IN TEMPO REALE
Si tenga presente che nel ciclo mostrato in Figura 1-27 viene preparata la miscela per il
ciclo successivo, che comincerà con la fase di aspirazione in prossimità della linea B
mentre l’accensione, situata alla fine della fase di compressione, appartiene al ciclo in
atto: si inietta nel collettore di aspirazione mentre la scintilla scocca all’interno della
camera di combustione.
A questo punto ci si chiede se, dati i valori di angevap, il comando di iniezione rientri
sempre nell’arco di 492° calcolato in tutte le condizioni di funzionamento del motore:
soddisfatta questa verifica, si può essere sicuri di avere scongiurato il rischio di iniettare
a valvole aperte: questa situazione sarebbe controproducente, poiché si finirebbe per
iniettare in un ciclo diverso (precedente) rispetto a quello per cui sono stati eseguiti i
calcoli.
1.7 SOFTWARE DEL SISTEMA DI CONTROLLO
Come specificato in precedenza, il software della centralina virtuale programmabile si
appoggia alla toolbox Simulink del programma Matlab grazie alla quale vengono
realizzati i modelli logici di gestione con semplici diagrammi a blocchi.
Si vuole ora descrivere sinteticamente la logica di funzionamento del modello Simulink
implementato nel sistema dSPACE, senza volerne affrontare i dettagli.
Lo scopo è quello di mostrare la struttura del modello, accennando alla funzione dei
suoi principali elementi.
I dati necessari all’esecuzione dei calcoli (numero di cilindri, ordine di accensione,
distanza tra il dente zero ed il PMSA del cilindro di calcolo, mappe di tutti i parametri
impiegati) vengono caricati preliminarmente tramite un file di lancio, che contiene tutti i
parametri relativi all’applicazione particolare, consentendo di impiegare un modello di
validità generale, adatto cioè a diversi tipi di motore.
Osservando il livello gerarchico principale del modello realizzato in Simulink per il
controllo del motore, si può notare la presenza di tre blocchi principali: ogni blocco è
eseguito con frequenze e priorità diverse: il blocco ECU, in cui vengono eseguiti i
calcoli che portano alla definizione delle attuazioni di accensione ed iniezione, a loro
volta sintetizzate nei dati Zj, Zic, Zfc, T0j, T0c, Tj, trasmesse al CEE al termine del
calcolo, viene eseguito ogni 180 gradi di rotazione dell’albero motore. Il blocco
Acquisizioni Analogiche, che consente di gestire la funzione ADC della scheda
DS2201, viene eseguito ogni 90 gradi di rotazione dell’albero. Il blocco Controllo
DES-SAT, eseguito invece su base tempo, realizza la gestione delle attuazioni del banco
(posizione acceleratore e coppia di frenatura). Un ulteriore sistema (Fasatore), la cui
43
esecuzione è comandata una volta al ciclo, controlla la correttezza del procedimento di
acquisizione e calcolo, verificando che nel periodo di un ciclo vengano effettuati 4
calcoli e 8 acquisizioni.
La priorità di esecuzione viene designata in base all’importanza della funzione svolta:
prima di tutto devono essere portati a termine i calcoli ed il passaggio delle istruzioni al
CEE, poi le acquisizioni dei dati, per un controllo ottimale del motore, successivamente
ci si curerà della prontezza nella gestione del banco, tenendo per ultimo il sottosistema
di controllo degli eventuali errori.
Figura 1-28: livello gerarchico principale del modello di controllo
Il blocco di Inizializzazione, eseguito su base tempo, serve a comunicare un comando di
reset al CEE, ad istruire la scheda di interrupt sulla posizione angolare in cui si desidera
fissare l’esecuzione di calcoli ed attuazioni, e a imporre attuazioni ‘innocue’ prima
dell’arrivo dei primi interrupt di calcolo.
Il blocco ECU ha la funzione di calcolare, in virtù dei valori assunti dalle variabili in
ingresso, le uscite del sistema, cioè il valore dei parametri che descrivono le attuazioni,
e di inviarle al Circuito Elettronico Esterno. Al suo interno sono contenuti i sottosistemi
relativi all’Iniezione, all’Accensione, al controllo del minimo (Idle Control), alla
gestione delle situazioni di emergenza (Blocco di Sicurezza), all’indirizzo a cui far
44
IL SISTEMA DI CONTROLLO IN TEMPO REALE
giungere i dati aggiornati (load address, sfasatura parametri angolari) ed all’invio di
tutti i risultati calcolati al dSPACE tramite la S-function con la quale il sistema
comunica e programma il CEE (invio dati).
Figura 1-29: blocco ECU
I sottosistemi relativi alla gestione di iniezione ed accensione, contengono le istruzioni
necessarie al calcolo dei parametri (tempo e fase di iniezione, anticipo di accensione),
quelle atte alla sintesi di tali parametri in grandezze da comunicare al CEE (Zj, Zic, Zfc,
T0j, T0c, Tj), ed infine quelle per la generazione di eventuali malfunzionamenti, secondo
quanto richiesto dall’utente. Nella prima parte sono compresi tra l’altro, i sistemi di
controllo del titolo, tanto in catena aperta (compensazione del film fluido), quanto in
retroazione (con sonda HEGO o UEGO) e dell’anticipo (gestione al limite di
detonazione).
Il controllo del minimo, realizzato tramite l’azione sull’anticipo di accensione e sulla
apertura della valvola a farfalla, deve interagire con la richiesta dell’utente per quanto
riguarda la posizione dell’acceleratore e con la richiesta da parte del blocco Accensione
per quanto concerne il valore di anticipo da richiedere al CEE: se necessario tali valori
45
devono essere alterati, per evitare lo spegnimento del motore. Il blocco dovrà quindi
essere attivato in determinate condizioni di funzionamento, e, in caso sia attivo, dovrà
“filtrare” i due comandi.
In Load address e Sfasatura dei parametri angolari si determina il cilindro al quale si
riferisce il calcolo in atto al quale i parametri calcolati, relativi al cilindro 4, dovranno
essere adeguati: in accensione ed iniezione, infatti, i calcoli vengono sempre riferiti ad
un unico cilindro (il 4, appunto), ed i parametri di attuazione inviati al CEE dovranno
perciò essere opportunamente sfasati, nel caso in cui si riferiscano ad un cilindro
diverso.
L’invio dei dati viene poi gestito da una S-Function (Appendice C) che, secondo un
protocollo di comunicazione preventivamente progettato, comunica con il Circuito
Elettronico esterno, verificando l’efficacia della trasmissione.
Il Blocco di Sicurezza, infine, comanda lo spegnimento del relè del circuito di potenza,
l’induzione di mancate accensioni e mancate iniezioni su tutti i cilindri, la chiusura della
valvola a farfalla e l’annullamento della corrente sulla bobina del freno, in caso si
presentino situazioni di emergenza. Ad esempio il blocco entra in funzione se il motore,
per un qualsiasi motivo, si dovesse spegnere improvvisamente: in questo caso, infatti,
alcune attuazioni potrebbero rimanere attive, causando pericolose sollecitazioni degli
attuatori (bobine, iniettori) e dei circuiti di potenza.
Il blocco Acquisizioni analogiche si occupa dell’acquisizione e del trattamento dei
segnali provenienti dai sensori del motore; i segnali, convertiti prima in unità elettriche
(segnali nel campo 0-10V corrispondono a variabili di Simulink comprese nel campo 01), poi in unità fisiche, vengono inviati direttamente al sottosistema in cui vengono
impiegati per il calcolo, oppure, nel caso di pressione nel collettore e velocità angolare,
vengono prima filtrati, in modo da ottenere una grandezza rappresentativa delle
condizioni di funzionamento “medie” del motore.
A Controllo DES-SAT, è affidato il compito di gestire il banco prova: la comunicazione
con il controllore del freno, DCU2000, è garantita da un’interfaccia hardware che,
smistando segnali analogici e digitali dal sistema dSPACE al DCU2000 e viceversa,
consente di adottare tutte le modalità di controllo messe a disposizione dal controllore,
impiegando, per generare i riferimenti, il sistema dSPACE. Gli attuatori da gestire sono
il motore brushless che permette di azionare la valvola a farfalla ed il circuito di potenza
che opera sulla bobina del freno a correnti parassite, consentendo di variare il valore
della corrente da cui essa è percorsa da 0 fino a 10 Ampere. E` quindi possibile fissare il
46
IL SISTEMA DI CONTROLLO IN TEMPO REALE
numero di giri, o la coppia di frenatura utilizzando una qualsiasi delle due leve (si veda
anche il Paragrafo 5.1): le modalità di impiego più comuni sono la (n, %) e la (M, %), in
cui la posizione della valvola a farfalla è determinata, tramite un opportuno riferimento
in tensione, in percentuale, mentre la corrente di frenatura è gestita in maniera da
inseguire, rispettivamente, un obiettivo di velocità di rotazione o di coppia di carico. In
questo caso il riferimento in tensione determinerà il valore di velocità o coppia da
inseguire.
In Controllo DES-SAT, comunque, non ci si limita ad imporre la filosofia di gestione
del banco e determinare i riferimenti di velocità e carico, si va oltre, dando la possibilità
di variare ciclicamente i riferimenti stessi, in modo da simulare condizioni di
funzionamento quali quelle dei cicli di omologazione, e rendendo altresì possibile un
controllo indiretto della valvola a farfalla, in cui il riferimento relativo alla percentuale
di apertura è controllato in retroazione tramite il valore della pressione nel collettore di
aspirazione, vera “variabile obiettivo”. In questo modo si può richiedere il
raggiungimento di condizioni di funzionamento in termini di velocità di rotazione e
pressione nel collettore.
A volte, ove sia necessario evitare l’intervento del sistema DCU2000, per evitare di
“inquinare” il profilo di velocità di rotazione, ovvero per la simulazione del
funzionamento a carico costante, si usa la modalità di controllo (I, %), in cui è
direttamente imposto il valore di corrente che circola sulla bobina del freno.
Un’ultima funzione svolta dal blocco Controllo DES-SAT è quella di interagire con il
blocco Iniezione, contenuto in ECU, per effettuare il campionamento delle variabili
impiegate dalla centralina programmabile durante il suo funzionamento: data la
possibilità di gestire contemporaneamente motore e banco, è evidentemente possibile
utilizzare il sistema di controllo per operazioni di mappatura: se ad esempio si volesse
conoscere la mappa dei tempi di iniezione corrispondenti al titolo stechiometrico, si
potrebbe gestire il banco in modo che, in maniera automatica, portasse il motore a
funzionare nelle condizioni corrispondenti ai punti della mappa. A questo punto
basterebbe variare i parametri di attuazione (tempi di iniezione) fino a raggiungere la
condizione specificata (stechiometria), per poi aggiornare, una volta acquisite le
variabili di interesse (tempo di iniezione medio, tensione di batteria, temperatura nel
collettore di aspirazione, velocità di rotazione, pressione nel collettore, ecc.), le
condizioni di funzionamento secondo la mappa considerata.
47
1.8 VERIFICA DELLE ATTUAZIONI AL BANCO
La verifica di funzionalità ed efficienza del circuito è stata effettuata impiegando una
versione prototipale dello stesso, dotata di una sola top board, e quindi in grado di
controllare accensione ed iniezione di un solo cilindro: le attuazioni sono state
confrontate con quelle della centralina originale.
In fase iniziale il modello di controllo eseguito dalla DS1003 è stato notevolmente
semplificato, al fine di limitare le cause di malfunzionamento che non traessero origine
dal CEE. In altre parole in questo modo si è voluto evitare che un comportamento errato
del modello, dovuto alla sua complessità, potesse essere interpretato come un problema
del circuito esterno. Dopo avere testato il solo hardware, verificandone la capacità di
generare segnali delle durata temporale specificata con una corretta fase angolare, si è
passati all’applicazione del modello di controllo, che ha permesso di gestire questi
comandi coerentemente alle condizioni di funzionamento del motore. Infine le
attuazioni del cilindro 1 sono state affidate al nuovo sistema di controllo.
Per capire se i segnali di comando dell’accensione e dell’iniezione, inviati dal CEE ai
corrispondenti stadi di potenza (uno stadio di potenza per ogni segnale) del cilindro
controllato (cilindro 1), fossero in grado di soddisfare le specifiche previste in fase di
progetto (risoluzione di 1 µs sul tempo d’iniezione e di 0.25 [°] sull’anticipo), essi sono
stati confrontati con quelli generati dalla centralina di serie per il medesimo cilindro.
Figura 1-30: segnali iniezione
Nelle Figura 1-30 e Figura 1-31 sono rappresentati i risultati di tali raffronti, registrati
durante una prova eseguita con il propulsore posto in regime stazionario a 1780 [rpm],
con 0.44 [bar] di pressione nel collettore di aspirazione e con frequenza d’acquisizione
48
IL SISTEMA DI CONTROLLO IN TEMPO REALE
pari a 45 [kHz]. E` evidente la capacità della VECU di riprodurre il comportamento
dell’unità di controllo originale: se da una parte è riscontrabile una piccola discrepanza
nella fase dell’iniezione (peraltro inferiore a 0.04 [°]), dall’altra si può affermare che
essa è dovuta al sistema che ha deciso, in base alle condizioni di funzionamento
(velocità di rotazione, pressione nel collettore), il posizionamento, non nel sistema che
l’ha attuato. Per quanto concerne il segnale di accensione, si osserva che la durata della
fase di carica della bobina sensibilmente diversa nei due casi, ma sulla posizione
angolare di fine carica la differenza è di circa 0.1 [°].
Figura 1-31: segnali accensione
Successivamente si è passati al confronto degli andamenti di pressione indicata di due
diversi cilindri gestiti dalle due unità, e gli andamenti di coppia indicata media per i due
cilindri in regime stazionario (Figura 1-32, Figura 1-33).
Figura 1-32: andamento della pressione in camera di combustione per i cilindri 1 e 4
La Figura 1-32 mostra chiaramente che tra i due segnali, ottenuti mediando i valori di
pressione corrispondenti a 250 cicli motore, non ci sono differenze significative.
49
Tim1
Tim4
σ1
σ4
7.21
7.08
0.33
0.27
Figura 1-33: coppia indicata per i cilindri 1 e 4
Anche sottoponendo il propulsore a bruschi transitori i risultati sono stati convincenti.
La Figura 1-34 mostra l’andamento della durata dell’iniezione durante un transitorio
eseguito mantenendo costante a 1800 [rpm] il regime di rotazione del motore e variando
la posizione della farfalla.
In seguito la versione definitiva del CEE ha consentito di sostituire completamente
l’unità di controllo originaria.
Figura 1-34: andamento della durata di iniezione nel tempo
Volendo verificare la effettiva aderenza delle attuazioni con i valori delle grandezze
trasmesse dal sistema dSPACE al CEE, è necessario misurare la loro durata e/o la loro
fase. Ad esempio, per quanto concerne l’anticipo di accensione, si può verificare che
quello attuato, ovvero la distanza della transizione di fine carica bobina dal PMS del
cilindro considerato, sia effettivamente coincidente con quello comandato. Sono state
eseguite diverse prove, in diverse condizioni di funzionamento, e l’errore si è sempre
50
IL SISTEMA DI CONTROLLO IN TEMPO REALE
mantenuto al di sotto di 0.1°. E` necessario osservare che le verifiche sono state fatte
confrontando la distanza angolare della transizione considerata con la discesa del
segnale S0, a sua volta riferita al PMS del cilindro 4, inteso come punto di picco del
segnale di pressione in assenza di combustione. E` noto che il segnale di pressione
potrebbe presentare un picco in una posizione non esattamente coincidente con il PMS,
tuttavia tale distanza rappresenterebbe un offset comune alla misura ed all’attuazione,
perciò sarebbe ininfluente ai fini della attuale valutazione.
Acquisendo contemporaneamente il segnale di carica della bobina, il segnale S0 ed il
segnale S1, misurando altresì la distanza temporale tra i denti della ruota fonica per
conoscere la velocità di rotazione del motore, è possibile confrontare il valore richiesto
ed il valore attuato del segnale di fine carica della bobina.
Il risultato è che, riferendosi al caso di Figura 1-35, a fronte di un valore di anticipo
richiesto (a 2000 [rpm] @ 362 [mbar]) di 22.5 [°], se ne misura un valore di 22.53 [°]:
tale differenza, tipica per il caso di funzionamento in regime stazionario, può aumentare
in transitorio, a causa della variazione di velocità angolare del motore tra l’istante di
acquisizione ad opera della centralina virtuale dati e l’istante di attuazione. Tuttavia si
ritiene che, anche in caso di forti transitori, le specifiche di progetto siano sempre
rispettate.
4.5
V
4
3.5
3
2.5
2
1.5
1
0.5
0
1.66
1.665
1.67
1.675
1.68
Campioni [a 300 kHz]
1.685
x 10
5
Figura 1-35: segnali S0 (nero), S1 (giallo), ign1 (rosso)
51
1.9 LA REALIZZAZIONE DI MISFIRE E MISFUEL
Conclusasi con successo la prima fase di messa a punto del CEE, il sistema dSPACECEE è stato utilizzato per realizzare delle sequenze arbitrarie di misfire e misfuel.
La Figura 1-36 rappresenta il segnale d’accensione nel caso di un misfire ogni 10 cicli,
ottenuto portando il propulsore al regime di 1780 [rpm] e alla pressione d’aspirazione di
0.44 [bar].
Figura 1-36: effetto sulla pressione in camera di combustione di un misfire
Occorre notare come la pressione in camera di combustione, al presentarsi della
mancata accensione, si riduca vistosamente, per poi assumere un valore molto elevato
dovuto principalmente ad un migliore riempimento del cilindro. Infatti, non essendo
avvenuta alcuna combustione, il volume della camera di combustione alla fine della fase
di scarico non è occupato da gas di scarico, bensì da una miscela di aria e benzina (si
veda, a questo proposito, il Pragrafo 4.3). La Figura 1-37 infine mostra per il punto
motore precedente gli effetti sull’andamento della pressione all’interno del cilindro 1
dell’induzione di un misfuel ogni 10 cicli. In questo caso, anche se l’iniettore è rimasto
chiuso, non è detto che non entri combustibile nel cilindro, a causa dell’aspirazione di
benzina presente in forma liquida nel condotto d’aspirazione (film fluido). Solitamente
questa quantità non è sufficiente per fare avvenire la combustione, tuttavia la sottrazione
di combustibile dal film fluido può essere causa di combustioni magre successivamente
all’induzione del malfunzionamento.
52
IL SISTEMA DI CONTROLLO IN TEMPO REALE
Figura 1-37: effetto sulla pressione in camera di combustione di un misfuel
1.10 BIBLIOGRAFIA
1. N. Cavina, E. Corti, F. Ponti, Setup of a Rapid Control Prototyping System for New
Engine Control and Diagnostic Systems, CD AUTO 01 - Control and Diagnostics in
Automotive Applications, paper, 01A3040.
[1] D. Konig, ECU Integrated DSP Based Measurement System for Combustion
Analysis, SAE Technical Paper 2000-01-0547, 2000.
[2] A.C. Alkida, R.J. Drews, Effects of Mixture Preparation on HC Emissions of a S.I.
Engine operating under Steady-State Cold Conditions, SAE Technical Paper
961958, 1996.
[3] P. Leteinturier, J. Benning, Enhanced Engine Position Acquisition and Treatment,
SAE Technical Paper 1999-01-0203, 1999.
[4] M. Kawai, H. Hashimoto, S. Akazaki, Y. Nishimura, S. Daibo, S. Ueda, High
precision A/F control ECU for ultra low emission vehicles, 1999, JSAE Review 20,
pp. 191-196.
[5] N. Ladommatos, D. W. Rose, On the Causes of In-Cylinder Air-Fuel Ratio
Excursions During Load and Fuelling Transients in Port-Injected Spark-Ignition
Engines, SAE Technical Paper 960466, 1996.
[6] E. Hendricks, A. Chevalier, M. Jensen, S. C. Sorenson, Modelling of the Intake
Manifold Filling Dynamics, SAE Technical Paper 960037, 1996.
[7] N. Imatake, K. Saito, S. Morishima, S. Kudo, A. Ohhata, Quantitative Analysis of
Fuel Behavior in Port-Injection Gasoline Engines, SAE Technical Paper 971639,
1997.
53
IL CONTROLLO DEL TITOLO
2
PROTOTIPAZIONE RAPIDA: STRATEGIE DI
CONTROLLO DEL TITOLO
E` facile intuire come un sistema di prototipazione rapida possa trovare positive
applicazioni nel campo dei sistemi di controllo: nella fattispecie, dovendo costruire exnovo una centralina elettronica per un motore automobilistico ad accensione comandata,
sono stati sviluppati diversi algoritmi di controllo, i più importanti dei quali sono il
controllo del titolo e del regime minimo di funzionamento del motore.
2.1 SISTEMI DI CONTROLLO: RICHIAMI
La realizzazione di una qualunque azione atta a modificare in un modo non casuale il
mondo fisico richiede due tipi di interventi qualitativamente diversi: il primo consiste
nell’elaborazione delle grandezze fisiche necessarie per realizzare i cambiamenti
desiderati, il secondo nell’elaborazione delle informazioni che definiscono le modalità
con le quali devono essere manipolate le grandezze fisiche di cui sopra. Al primo
intervento corrispondono le manipolazioni materiali e le manipolazioni simboliche: nel
primo caso la manipolazione riguarda oggetti concreti, nel secondo caso oggetti astratti
(dati, segnali analogici e digitali, ecc.).
Un qualunque sistema che svolga un dato compito in maniera automatizzata dal punto
di vista funzionale può ritenersi composto da due parti: una che compie le
manipolazioni simboliche che, sulla base di opportune informazioni fornite dall’esterno,
determina le grandezze che impongono all’altra di effettuare le manipolazioni materiali
desiderate, cioè che fanno sì che una o più variabili del sistema, dette variabili
controllate assumano l’andamento voluto. L’interazione del sistema con l’esterno
avviene tramite le cosiddette variabili in ingresso alcune delle quali non sono
manipolabili e, quando non sono note, vengono chiamate disturbi: esse influenzano in
generale infatti l’uscita in modo indesiderato; le variabili in ingresso manipolabili
vengono dette variabili di controllo. Queste ultime sono talvolta chiamate, anche se a
volte impropriamente, variabili di ingresso oppure ingressi di riferimento quando
servono per informare il sistema sull’andamento che si desidera assumano le uscite. Un
simile sistema costituisce quello che comunemente viene chiamato sistema automatico
di controllo.
55
IL CONTROLLO DEL TITOLO
A loro volta i sistemi automatici di controllo si dividono in due categorie: quelli con
controllo in catena aperta (figura 0.1) e quelli in controllo in catena chiusa, o in
retroazione.
Nel primo caso la realizzazione delle manipolazioni simboliche elaborate dal
controllore, si basa esclusivamente sulla conoscenza a priori, cioè sull’ingresso di
riferimento e sul modello del sistema (o plant) costituito dall’amplificatore,
dall’attuatore e dal sistema da controllare; per tale motivo il controllo così realizzato è
anche detto predittivo.
Nel secondo caso la realizzazione delle manipolazioni simboliche che impongono
all’uscita di raggiungere il valore desiderato si basa oltre che sul modello del sistema di
cui si è detto, anche sulla differenza (effettuata da un comparatore) tra il valore della
grandezza di riferimento e quella controllata.
Nell’elaborazione di un sistema di controllo l’obiettivo principale è quello di fare in
modo che la variabile controllata, ad esempio il titolo, nel controllo di un motore a
combustione interna, assuma il valore del riferimento a fronte di un qualsiasi disturbo
esterno.
Possiamo generalmente schematizzare un sistema di controllo in retroazione come
segue:
DIST URBO
1
RIFERIMENTO
2
G1
G2
Regolatore
Plant
1
VARIABILE
CONTROLLATA
H
Dispositivo di
trasduzione
Figura 2-1: sistema di controllo in retroazione
G1, G2 e H sono le funzioni di trasferimento: in particolare le prime due condizionano
il comportamento del sistema in catena aperta mentre H è responsabile del segnale
retroazionato.
Nell’elaborazione di tale sistema di controllo vogliamo ottenere precisione,
controllabilità e prontezza: il sistema deve essere preciso, nel senso che a fronte di
disturbi esterni la variabile controllata deve assumere il valore di riferimento; deve
56
IL CONTROLLO DEL TITOLO
essere controllabile, nel senso che per ogni variazione del riferimento la variabile
controllata deve risultare uguale al riferimento stesso a transitorio esaurito; deve essere
pronto nel senso che la variabile controllata deve riportarsi nel minore tempo possibile
al valore desiderato, ovvero il transitorio deve essere il più breve possibile.
Si dimostra che per soddisfare le prime due richieste, condizione necessaria e sufficiente
è che la funzione di trasferimento G1 abbia un polo nell’origine, caratteristica questa di
una correzione integrale.
Spesso vengono impiegati, nelle applicazioni con controllo in retroazione, i regolatori
standard, classificati in funzione dell’elaborazione del segnale di errore.
Si chiamano proporzionali quei regolatori che effettuano la moltiplicazione per una data
costante della variabile in ingresso alla parte che opera le manipolazioni materiali. Con
riferimento alla Figura 2-1, si ha un regolatore proporzionale se vale: G1 = Kp .
essendo Kp una costante detta sensibilità proporzionale; esso comporta un aumento
della costante di guadagno del sistema complessivo (se, come generalmente avviene,
Kp > 1 ) e di conseguenza un aumento della pulsazione naturale e quindi della prontezza
del sistema stesso; va tenuto conto tuttavia che l’aumento della costante di guadagno
tende in generale a portare il sistema verso l’instabilità.
Si ha un regolatore di tipo integrale se vale: G1 =
Ki
, essendo Ki costante di guadagno
s
integrale ed s polo semplice.
L’introduzione di un regolatore di tipo integrale produce la riduzione o l’eliminazione
degli errori a regime. D’altra parte la prontezza del sistema di controllo è condizionata
dal polo a parte reale maggiore: di conseguenza si avrà una diminuzione della
pulsazione naturale e quindi una riduzione della prontezza stessa. E’ per tale motivo che
generalmente i regolatori di tipo I e di tipo P si trovano impiegati insieme: il primo
garantisce stabilità e precisione, il secondo garantisce prontezza.
Si ha un regolatore di tipo derivativo se vale: G1 = Kd * s , essendo Kd costante di
guadagno derivativa ed s polo semplice. Tale tipo di regolatore difficilmente può essere
utilizzato da solo, ma deve essere utilizzato in aggiunta di un regolatore proporzionale;
diversamente, in regime statico, l’uscita del regolatore risulterebbe nulla, l’anello di
retroazione risulterebbe interrotto e quindi il sistema non sarebbe più controllato, come
si può intuire dalla Figura 2-1. Per tale motivo si utilizza di fatto il regolatore
57
IL CONTROLLO DEL TITOLO
proporzionale-derivativo, o proporzionale-derivativo-integrale, le cui funzioni di
trasferimento sono, rispettivamente: G1 = Kp + Kds , G1 = Kp + Kds +
Ki
.
s
2.2 IL CONTROLLO DEL TITOLO: OBIETTIVI
Obiettivo di un sistema di controllo del titolo è il raggiungimento, nel più breve tempo
possibile e con la maggior precisione possibile, del valore obiettivo del rapporto A/F.
Spesso, per motivi legati all’efficienza di catalisi del sistema di post-trattamento dei gas
di scarico, tale valore coincide con quello stechiometrico, e la banda di oscillazione
ammessa è piuttosto contenuta (λ∈[0.991.01]), come si evince da Figura 2-2.
Figura 2-2: efficienza del catalizzatore in funzione del rapporto di miscela
Si presentano comunque condizioni di funzionamento in cui il valore ottimale del
rapporto di miscela non è quello stechiometrico: un tipico esempio è quello
dell’avviamento a freddo e della fase di riscaldamento del motore. Resta però vero che
il valore obiettivo deve essere raggiunto velocemente e mantenuto precisamente. Il
controllo in retroazione effettuato con sonda lambda di tipo tradizionale (HEGO)
garantisce la permanenza, in regime di funzionamento stazionario, attorno al valore
stechiometrico, ma il passaggio al controllo in catena aperta è obbligatorio se il valore si
discosta da quello stechiometrico. La sonda lambda lineare (UEGO) consente invece di
estendere il controllo in retroazione a regimi di funzionamento magri o grassi; inoltre
58
IL CONTROLLO DEL TITOLO
può consentire il controllo del titolo cilindro per cilindro. Tuttavia, le caratteristiche dei
sensori e i ritardi propri del sistema controllato non consentono un controllo efficace dei
rapidi transitori di funzionamento. In particolare, risulta ignorata, dal sistema di
controllo così delineato, la dinamica del combustibile nel collettore di aspirazione. È
dunque necessario introdurre una correzione del valore calcolato per l’attuazione, che
consenta di compensare tale dinamica: la compensazione viene fatta impiegando il noto
modello di Aquino. Il presente capitolo presenta l’implementazione, sulla centralina
elettronica programmabile, delle tre strategie di controllo del titolo cui si è accennato.
Per l’implementazione di un sistema di controllo del titolo model-based sono necessarie
informazioni tanto sul sistema controllato (plant) quanto sul sensore impiegato per la
retroazione. Il controllo, infatti, è solitamente basato sulla correzione del parametro che
stabilisce l’attuazione più determinante sul titolo della miscela (il tempo di iniezione)
rispetto al valore suggerito dal sistema predittivo. E` chiaro che la correzione deve
dipendere tanto dalle caratteristiche del sistema quanto da quelle del sensore: in caso
contrario si rischierebbe di eccedere nelle correzioni (sistema di controllo poco preciso e
tendente all’instabilità) o di limitarle troppo (sistema poco pronto). Dato che i parametri
del sistema di controllo (Ki, Kp, Kd) devono essere calibrati, è importante riuscire ad
operare una scelta di partenza corretta, che dovrà essere seguita da un’ottimizzazione al
banco prova. La metodologia più comunemente impiegata consiste nella simulazione
del sistema controllato, del sensore e del sistema di controllo: in un ambiente di
simulazione (quale Simulink) si può così giungere alla determinazione dei valori dei
parametri di controllo da cui la calibrazione potrà partire. Tali valori saranno tanto più
vicini a quelli definitivi quanto più fedeli alla realtà fisica saranno i sistemi simulati. Nel
caso particolare, sviluppando in fase di simulazione (off-line) il sistema di controllo in
ambiente Simulink, la sua esportazione sull’unità di controllo sarà estremamente
semplice, dato che anch’essa è sviluppata sulla base del medesimo software.
2.2.1 LA SONDA A OSSIGENO
La sonda ad ossigeno è il trasduttore che rende possibile il controllo in retroazione del
titolo della miscela in un m.c.i: essa è in grado di convertire l’informazione chimica,
costituita dalla concentrazione di una specie nei gas esausti analizzati, in un segnale
elettrico che può essere elaborato rapidamente dalla centralina.
Vi sono due tipologie di sonda, che si differenziano per la complessità di realizzazione
ma non per il funzionamento di base:
59
IL CONTROLLO DEL TITOLO
La sonda di tipo HEGO (Heated Exhaust Gas Oxygen sensor), che riesce solamente a
fornire un’informazione a due livelli o binaria, segnalando se la quantità d’ossigeno nei
gas di scarico è maggiore o minore di quella stechiometrica.
La sonda lineare UEGO (Universal Exhaust Gas Oxygen sensor), in grado invece di
fornire un segnale in corrente proporzionale alla quantità di ossigeno (se la miscela è
magra) o di incombusti (se la miscela è ricca) nei gas di scarico, con un potenziale
notevole incremento dell’efficienza del sistema di controllo del titolo.
Molti veicoli moderni con motore ad accensione comandata sono equipaggiati con
entrambe le sonde: quella lineare, usata per il controllo del titolo, è montata di solito
all’uscita dei condotti di scarico e prima del pre-catalizzatore; quella tradizionale,
invece, è posta a valle della marmitta catalitica, per consentirne la diagnosi: le recenti
normative, infatti (EOBD II), prevedono la presenza di un sistema di diagnosi dei
malfunzionamenti che possono causare aumenti repentini delle emissioni inquinanti, ivi
comprese le eventuali perdite di efficienza dei sistemi di post-trattamento dei fumi;
questo controllo viene effettuato indirettamente utilizzando i segnali delle due sonde, e
ricavandone poi informazioni sull’efficienza della catalisi.
2.2.2 LA SONDA HEGO
Il sensore rappresentato in figura, sonda lambda HEGO, è capace di rilevare se la
miscela combusta è stata ricca o magra.
Figura 2-3: Sezione di una sonda lambda di tipo on-off o istercica (HEGO)
Questo sensore riveste un ruolo strategico nel controllo-motore: esso consente infatti di
correggere il tempo di iniezione calcolato in catena aperta dal sistema di controllo, in
modo da ottenere una miscela con titolo compreso entro una stretta fascia centrata sul
valore stechiometrico, con una conseguente forte riduzione delle emissioni inquinanti
60
IL CONTROLLO DEL TITOLO
(in tali condizioni, infatti, è massima l’efficienza di conversione del catalizzatore
trivalente).
La sonda lambda, collocata nel collettore di scarico, è in grado di rilevare la presenza o
l’assenza di ossigeno nei gas di scarico: nel primo caso si è nella situazione di
combustione magra, e cioè la massa di aria usata per la combustione è maggiore di
quella stechiometrica; viceversa nel secondo caso, si è nella situazione di combustione
grassa, cioè la massa di aria utilizzata per la combustione è minore di quella necessaria.
Pertanto la quantità di ossigeno nei gas di scarico è utilizzabile come una grandezza
indicativa per valutare il rapporto aria-combustibile.
Il sensore di ossigeno è costituito da una sezione anulare di ossido di Zirconio (ZrO2)
con due elettrodi solidi di platino sulla faccia interna ed esterna all’ossido.
L’ossigeno è un elemento chimico con numero atomico 16, quindi possiede una buona
attitudine ad acquistare due elettroni per poter raggiungere la configurazione stabile del
gas nobile argon; l’ossido di zirconio ha la tendenza ad attrarre gli ioni ossigeno e ad
accumularli sulla superficie adiacente agli elettrodi di platino. L’elettrodo di platino
rivolto verso l’aria è esposto ad una maggiore concentrazione di ioni ossigeno rispetto a
quello a contatto con il flusso di gas di scarico.
Aria
Sensore
di portata
d’aria
Motore
Benzina
Segnale
di portata
d’aria
Sonda
lambda
Iniettore
Segnale di tempo
di iniezione
Centralina
Gas di scarico
Marmitta catalitica trivalente
Figura 2-4: feedback della sonda HEGO
61
IL CONTROLLO DEL TITOLO
La faccia del sensore rivolta verso l’aria si carica così negativamente generando un
campo elettrico nell’ossido di zirconio; essa fa nascere una tensione tra i due elettrodi di
platino e la polarità di questa tensione è positiva sul lato esposto ai gas di scarico e
negativa su quello rivolto verso l’aria.
L’entità di questa tensione dipende dalla concentrazione di ossigeno nei gas di scarico e
dalla temperatura del sensore e viene valutata mediante la relazione semplificata di
Nerst:
f .e.m. = 0.0496T log
pO2
pO′ 2
(Eq 2-1)
Il valore di p O2 può ritenersi costante e pari a 20 kPa. In caso di miscele magre la
pressione parziale dell’ossigeno nei gas di scarico aumenta tendendo alla pressione
parziale dell’ossigeno atmosferico, e quindi la tensione in uscita della sonda tende a
zero. Viceversa per miscele ricche i gas di scarico non presentano ossigeno al loro
interno, quindi la pressione parziale dell’ossigeno è molto bassa e conseguentemente il
valore di tensione in uscita dalla sonda diventa elevato.
Figura 2-5: Schema della cella elettrolitica di una sonda lambda on-off
In Figura 2-6 è rappresentata la caratteristica della tensione in uscita dalla sonda: essa
dipende dalla temperatura cui essa si trova e quindi, per ottenere il corretto
funzionamento del sensore di ossigeno, esso non deve essere utilizzato con temperature
inferiori a 300°C. Questo metodo di rilevazione del titolo non è esente da errori, infatti
la sonda non emette un segnale proporzionale al tenore di ossigeno nei gas di scarico e
quindi le correzioni sulla portata di benzina da iniettare possono avvenire solo a piccoli
passi, permettendo nel frattempo combustioni con miscela non stechiometrica.
62
IL CONTROLLO DEL TITOLO
Misurando il titolo allo scarico un altro problema deriva dal fatto che si allungano
notevolmente i tempi di risposta del sistema in retroazione, con forti emissioni
inquinanti soprattutto nei rapidi transitori.
Per ovviare al primo dei due problemi ora messi in evidenza, si stanno recentemente
diffondendo sonde lambda più sofisticate (sonde lambda lineari, o UEGO) e costose
aventi caratteristica di risposta in tensione lineare rispetto al tenore di ossigeno misurato
cioè, in definitiva, al titolo della miscela bruciata dal motore.
1.2
R :Gas Cons tant
T :Tem perature(k)
F :Faraday Cons tant
Po1:O2 Partial Press ure
in Exhaus t Gas
Po2:O2 Partial Press ure
in Reference Gas
1.0
FEM(Volt)
0.8
370°
480°
595°
705°
815°
Ti p Temp.
0.6
0.4
Ti p Temp.
815°
705°
595°
480°
370°
0.2
0
0.85
0.90
0.95
Ric h
1.00
1.05
λ
1.10
1.15
Lean
Figura 2-6: Caratteristica della sonda
2.2.3 LA SONDA UEGO
La sonda lambda UEGO è di realizzazione nettamente più complessa della precedente e
quindi implica maggiori costi di produzione, ma ha il pregio di garantire alla
caratteristica in uscita la linearità. L’elemento sensibile presenta una camera dalle pareti
porose (Detection chamber) in cui diffondono i gas di scarico attraversando un
cappuccio protettivo in cui sono ricavati fori di passaggio. Tale camera separa due celle
elettrolitiche: una del tutto simile a quella presente nella sonda tradizionale (Vs cell),
che fornisce un segnale in tensione, utile per l’elaborazione del segnale finale, e un’altra
cella (Ip cell), che “pompa” o rimuove ossigeno dalla detection chamber, a seconda del
verso della corrente tra i suoi elettrodi (Ip: pumping current), che dipende dalla
concentrazione di ossigeno nei gas di scarico.
63
IL CONTROLLO DEL TITOLO
Holding
Holdingsensor
sensor&&heater
heater
element
elementby
byglass
glassseal
seal
Holding
Holding ceramic
ceramicholder
holder
by
bycrimping
crimping
Ceramic
Ceramic holder
holder
Sensor
Sensor&&heater
heaterelement
element
Thick
Thickfilm
filmtype
type
Figura 2-7: sonda UEGO
Il segnale in corrente consente di quantificare il numero di molecole d’ossigeno che
diffondono attraverso il dielettrico, ed elaborandolo, è possibile associare al titolo della
miscela un valore in tensione secondo una caratteristica lineare a ridosso del valore
stechiometrico, come quella mostrata in Figura 2-8.
1 V
U L 7.0mA
Sto ic hio metr ic po int
(A/F = 14.7)
A VG 6.0mA
L .L 5.0mA
UEGO Sensor Output (mA)
0 mA
-5mA
0 V
10
14,7
20
A/F
30
A ir
Figura 2-8: caratteristica della sonda UEGO
Per far questo, la sonda è provvista di un controller PID, che ha anche il compito di
prefiltrare il segnale, di gestire il riscaldamento e la diagnostica del sensore.
64
IL CONTROLLO DEL TITOLO
Per assicurare una sufficiente conducibilità elettrica allo strato di zirconio, e quindi
ragionevoli tempi di ritardo della sonda, bisogna mantenerne la temperatura a circa 650°
C; durante le partenze a freddo a questo provvede un controller, che dissipa per effetto
Joule una potenza di poche decine di watt: maggiore è il valore della potenza e più
rapidamente la sonda raggiunge la temperatura di lavoro, consentendo un ottimale
controllo del titolo in retroazione. Poiché l’anima di materiale ceramico, di cui è
costituita la resistenza elettrica, sopporta temperature fino a circa 1050° C bisogna
evitare che la resistenza si bruci adottando un compromesso tra i due aspetti.
Sul tempo di ritardo del sensore, influisce inoltre il diametro dei fori sul cappuccio
protettivo, il quale produce un effetto capacitivo, tanto maggiore quanto maggiori sono
le perdite di carico subite dai gas di scarico per raggiungere la detection chamber.
Anche qui vi è un compromesso, perché realizzare cappucci con fori troppo grandi
rende la sonda sensibile alle oscillazioni temporali del segnale, complicando
l’operazione di ricostruzione del segnale a valle.
Per comprendere come si possa correlare il segnale in corrente con la composizione dei
gas di scarico, si consideri il seguente schema (Figura 2-9):
Heater Pattern
Risc.ceramico
Comparatore
Ip Cell
Ip
Vscell
VRif.=0,45 V
Icp
Gas detecting cavity
O2 Reference Electrode
(Self generation)
Porous Diffusion Passage
Figura 2-9: UEGO, schema di funzionamento
La Vs cell viene utilizzata per formare un valore in tensione che consenta di distinguere
il titolo ricco da quello magro; poiché il valore misurato da una cella di questo genere
per una miscela stechiometrica è di 0,45V, un comparatore confronta la tensione
misurata dalla Vscell con una di riferimento VRif.=0,45V. Una corrente continua Icp=
10µA, alimenta un elettrodo della Vscell, per generare nella cavità relativa una
concentrazione di ossigeno pari a quella atmosferica, trasferendolo dalla detection
65
IL CONTROLLO DEL TITOLO
chamber: in tal modo si evita di dover mettere in comunicazione anche questa con
l’esterno risparmiando in ingombro. Il comparatore genera una tensione pari a |FEMVRif.| elaborata da un controllore PID che fa scorrere la corrente Ip tra gli elettrodi della
Ipcell, innescando una reazione di ossido-riduzione ed il flusso di ioni O- attraverso il
dielettrico, fino alla condizione |FEM-VRif.|=0. Il verso della corrente è dunque tale da
compensare la concentrazione di ossigeno nei gas di scarico al valore stechiometrico:
favorirà cioè la rimozione di quest’ultimo dalla detection chamber se la miscela è
magra, mentre pomperà ossigeno dall’esterno in caso contrario (fenomeno dell’oxygen
pumping). Il valore della corrente Ip, rappresenta la derivata della quantità di carica da
trasferire agli elettrodi per ripristinare la concentrazione stechiometrica dell’ossigeno
nella camera di rilevamento: è in grado quindi di fornire informazioni su quanto
ossigeno manca o è in eccesso rispetto a quello che si osserva in condizioni
stechiometriche, ovvero sul titolo della miscela. L’intensità di corrente dipende quindi
dal flusso di ioni ossigeno attraverso il dielettrico (con miscela magra), dalla camera di
misura verso l’esterno; è influenzata anche dalla presenza di CO ed HC nella detection
chamber, che provoca l’inversione del flusso di corrente per riportare la concentrazione
di ossigeno al valore che caratterizza la miscela stechiometrica.
2.3 IL CONTROLLO CON SONDA HEGO
Il segnale in retroazione della sonda HEGO viene impiegato per generare un fattore
correttivo, un numero adimensionale che, moltiplicato per la durata dell’iniezione
fornita dalla centralina secondo il calcolo in catena aperta, garantisce la permanenza del
titolo attorno al valore stechiometrico (Figura 2-10).
Figura 2-10: correzione della sonda HEGO
66
IL CONTROLLO DEL TITOLO
La generazione del fattore correttivo basato sul segnale della sonda HEGO, avviene
attraverso un controllore PI (Figura 2-11): il segnale, elaborato in modo da ottenere una
variabile oscillante tra i valori –1 (condizioni di miscela grassa) e +1 (condizioni di
miscela magra), viene inviato tanto ad un blocco di correzione integrale quanto ad uno
di correzione proporzionale; le due correzioni vengono sommate e, in seguito, sottratte
all’unità (correzione nulla): esse sono infatti di segno positivo nel caso in cui sia stata
rilevata miscela di composizione grassa.
Figura 2-11: fattore correttivo
I valori attribuiti alle costanti Ki e Kp determinano la prontezza e la precisione del
sistema: premesso che il loro valore definitivo è comunque frutto di una calibrazione al
banco, è comunque utile restringere il campo di indagine, partendo da valori “di primo
tentativo”. La scelta di tali valori può essere basata su un modello fisico del sistema
controllato, che può essere adottato una volta individuate le specifiche da richiedere al
sistema di controllo. Come si può intuire dall’aspetto del segnale di retroazione (Figura
2-6), la componente derivativa non può essere impiegata a causa della forte derivata del
segnale che, da un calcolo al successivo, varia dal valore massimo al minimo (o
viceversa). La prontezza del controllo è allora, come detto, completamente affidata al
contributo della correzione proporzionale, la quale, comunque, riprodurrà l’andamento
dell’errore, ovvero presenterà due possibili livelli. Il valore ideale della costante è
ovviamente quello che garantisce il massimo in termini di prontezza, senza per questo
causare un deterioramento della precisione. Visto che la sonda percepisce
semplicemente la presenza (combustione magra) o assenza (combustione grassa) di
Ossigeno nei gas, il massimo della prontezza si otterrà riportando, appena la sonda ha
67
IL CONTROLLO DEL TITOLO
segnalato una transizione in una delle due direzioni possibili, il titolo della miscela nella
condizione opposta. Si dovrebbe perciò apportare, tramite il contributo proporzionale,
una correzione al tempo di iniezione tale che, appena il sensore abbia segnalato il
passaggio ad una miscela grassa, il comando venga ridotto di una quantità tale da
formare una miscela magra. Tale correzione verrà applicata finché, con un ritardo
dovuto sia al sistema controllato che al sensore, verrà segnalato nuovamente il
passaggio di stato. A questo punto essa assumerà segno opposto.
Correzione che apporterebbe Ki senza il
contributo di Kp
Contributo di Kp
∆Tcal
∆T sca+∆T λ
α
S
A
C
E
S
A
C
E
S
A
t
0
Punto di calcolo
Punto morto
superiore attivo
Il sistema si accorge della
variazione
Periodo di correzioni sbagliate operate da Ki
Calcolo del
Tempo di iniezione di
transizione
0
M
Grasso
M
Magro
Switch dell a
sonda lambda
G
G
Figura 2-12: filosofia di recupero delle sovracorrezioni
68
IL CONTROLLO DEL TITOLO
La componente integrale, invece, darà un contributo crescente (o decrescente) ad ogni
calcolo compreso nel periodo tra uno switch della sonda ed il successivo. Il quantum di
cui il contributo proporzionale corregge il tempo di iniezione influisce ovviamente
anche sulla precisione del controllo. A parità di prontezza, la precisione migliore si
ottiene scegliendo un valore di Kp tale che la correzione proporzionale, al primo calcolo
dopo lo switch, riporti il tempo di iniezione al valore stechiometrico. In questo modo il
tempo necessario affinché la sonda segnali nuovamente il passaggio di stato è quello
minimo possibile, mentre i contributi degli integrali si sommano (o si sottraggono) a
partire dal valore del tempo di iniezione che garantisce una miscela stechiometrica e
non da un valore superiore (o inferiore).
Questa filosofia di gestione delle due componenti del controllo, è di fatto una
metodologia di recupero delle sovracorrezioni, dovute all’azione della componente
integrale negli intervalli temporali che corrispondono al ritardo con cui la sonda
percepisce le variazioni dei tempi di iniezione. L’andamento dei tempi di iniezione (e,
di conseguenza, del titolo) a cui questa strategia porta è visibile in Figura 2-13.
A/F
Campioni [25 kHZ]
Figura 2-13: andamento del titolo atteso
Dalla figura si capisce come, per quanto riguarda il contributo proporzionale, indicando
con Tjstoich il tempo di iniezione corrispondente ad un titolo stechiometrico, per
rispettare la condizione di precisione (±1% a regime) dovrà essere:
69
IL CONTROLLO DEL TITOLO
K p ⋅ TJstoich ⋅ 2 = 0.01 ⋅ TJstoich (Eq 2-2)
Il fattore 2 al primo membro è dovuto al fatto che la transizione di livello del titolo,
secondo lo schema di Figura 2-11, comporta una variazione del segnale da –1 a +1 o
viceversa. La (Eq 2-2)
porta immediatamente a
K p = 0.005 (Eq 2-3)
E` poi possibile, adottando un modello del sistema controllato e del sensore, stimare il
valore del ritardo nelle varie condizioni di funzionamento: questo consente di stabilire
quanti calcoli la centralina opererà in tale intervallo di tempo, e quindi quale potrà
essere il valore di Ki per poter attuare la filosofia di correzione descritta.
Dovrà essere infatti
C I = C p (Eq 2-4)
avendo indicato con CI e Cp le correzioni dovute al termine integrale e proporzionale,
rispettivamente, durante un semiperiodo di oscillazione del segnale proveniente dalla
HEGO. La medesima condizione può essere espressa come:
K I ⋅ ∫ dt = K P ⋅ 2 ⇒ K I = 2 ⋅
K P 0.01
=
(Eq 2-5)
∆T
∆T
La (Eq 2-5) permette di affermare che la sola conoscenza di ∆T, ovvero del periodo di
tempo compreso tra il calcolo che porta il titolo alla transizione di stato e l’istante in cui
la sonda lo segnala, permette di determinare il valore della costante Ki. Visto che ci si
aspetta una dipendenza di ∆T dalle condizioni di funzionamento del motore, allo stesso
modo si dovrà impiegare una mappa di valori per la costante Ki. Per quanto riguarda Kp,
invece, il suo valore può essere ritenuto costante. La determinazione di ∆T, strategica
per l’efficacia della calibrazione off-line, può avvenire come segue.
2.3.1 DETERMINAZIONE DEL RITARDO ∆T
Innanzi tutto si scinde il ritardo totale in tre contributi di origine diversa:
∆Ttot = ∆Tcomb + ∆Tsca + ∆Tλ Eq(2-6)
Questi contributi possono essere calcolati o stimati tramite prove al banco: acquisendo,
in varie condizioni operative, la velocità angolare dell’albero motore, i segnali di
comando degli iniettori, il segnale di pressione nel collettore di aspirazione; il segnale
della sonda lambda HEGO e il segnale della sonda lambda lineare UEGO, avendo a
70
IL CONTROLLO DEL TITOLO
disposizione altri dati utili come la temperatura di scarico, sono state fatte le valutazioni
che seguono.
Iniezione
Sonda HEGO
Calcoli
γ
EVOA
α
0
C
E
S
A
C
E
S
Apertura valvola di aspirazione
A
C
E
S
Apertura valvola di scarico
Figura 2-14: arco angolare corrispondente a ∆Tcomb
In termini angolari, come risulta ad esempio dalla Figura 2-14, dove si è supposto di
imporre un gradino positivo al tempo di iniezione, l’arco angolare percorso nel periodo
∆Tcomb è dato dalla somma di tre contributi:
∆η comb = α + γ − EVOA (Eq 2-7)
Per passare ora in termini temporali sarà sufficiente dividere per la velocità di rotazione
°
dell’albero motore ω espressa in   si ha infatti:
s
∆Tcomb =
∆ηcomb
ω
[°]
= [ s] (Eq 2-8)
°
s
 
La presenza del termine ∆Tsca in contributi di origine diversa:
∆Ttot = ∆Tcomb + ∆Tsca + ∆Tλ Eq(2-6) è dovuto al fatto che fisicamente, tra le valvole di
scarico e la sonda lambda HEGO, è presente una distanza finita, diversa a seconda dei
cilindri. Si ha infatti:
CILINDRO #
Distanza tra valvola e sonda Hego [cm]
1
45
2
38
71
IL CONTROLLO DEL TITOLO
3
30
4
40
Tabella 2-1: lunghezze dei condotti di scarico fino alla sonda
Un altro fattore che condiziona fortemente il termine ∆Tsca è la velocità con cui i gas di
scarico percorrono tale distanza; eseguendo, in condizioni stazionarie, il bilancio di
portate tra portata in aspirazione e portata in uscita si ottiene:
∂ma , aspirata ∂ma , scarico
=
∂t
∂t
(Eq 2-9)
Facendo riferimento alla portata media in un ciclo di funzionamento del motore, si ha:
& a,aspirata =
m
2n Vcil ηvrel ⋅ Pcoll
⋅ ⋅
τ z R ⋅ Tcoll
(Eq 2-10)
m& a , scarico = ρsca ⋅ A ⋅ c (Eq 2-11)
Sostituendo le (Eq 2-11) e (Eq 2-10) nella (Eq 2-9) si ottiene:
ρsca ⋅ A⋅ c =
2n Vcil ηvrel ⋅ Pcoll
⋅ ⋅
τ z R ⋅ Tcoll
(Eq 2-12)
Essendo poi:
ρsca =
Psca
R ⋅ Tsca
(Eq 2-13)
 cm 
Sostituendo si ottiene finalmente la velocità dei gas di scarico, espressa in   :
 s 
c = ηvol , rel ⋅
Pcoll Tsca 2n Vcil 1
⋅
⋅ ⋅
⋅ (Eq 2-14)
Psca Tcoll τ z A
Resta pertanto definito anche il contributo ∆Tsca:
∆Tsca =
l
p T
1
= A ⋅ l ⋅ sca coll
(Eq 2-15)
c
pcoll Tsca Vcil ⋅ 2n ⋅ η
vrel
z 60 ⋅ τ
In Figura 2-19 è illustrato il significato di ∆Tsca attraverso il suo corrispettivo valore
angolare βsca. In figura è anche possibile osservare l’angolo che intercorre tra l’apertura
della valvola di scarico e lo switch della sonda lambda a seguito di una variazione
imposta ai tempi di iniezione a parità di portata d’aria aspirata.
72
IL CONTROLLO DEL TITOLO
Iniezione
Sonda HEGO
Βsca
0
C
E
S
A
C
E
S
Apertura valvola di aspirazione
A
C
E
S
θ
Apertura valvola di scarico
Figura 2-15: angolo βsca, corrispondente al ritardo ∆Tsca
Per quanto concerne ∆Tλ, esso è un parametro caratteristico della sonda, e solitamente il
suo ordine di grandezza è di 70-80 ms. Nel caso specifico, non avendo dati a
disposizione, è stato stimato sperimentalmente. Si può infatti affermare, in base alla
contributi di origine diversa:
∆Ttot = ∆Tcomb + ∆Tsca + ∆Tλ Eq(2-6),
∆Tλ = ∆Ttot − ∆Tsca − ∆Tcomb (Eq 2-16)
I termini ∆Tsca e ∆Tcomb sono valutabili rispettivamente attraverso le (Eq 2-14) e (Eq
2-8), mentre ∆Ttot
può essere determinato sperimentalmente al banco prova, ad
esempio, come si può osservare in Figura 2-19, imponendo gradini del valore di 500 µs
al tempo di iniezione; è così possibile misurare il parametro ∆Ttot per transizioni
grassomagro e magrograsso, e, per differenza, ricavare ∆Tλ.
Si può procedere come segue:
- si fissa un punto motore, (velocità angolare e pressione nel collettore);
- mediante il controllo in catena aperta (che prevede una mappatura dei tempi di
iniezione in funzione dei giri motore e della pressione di aspirazione) si ha un’idea del
valore che il tempo di iniezione deve avere per avvicinarsi a una combustione
stechiometrica;
- si attiva il comando che permette di imporre tempi di iniezione costanti e naturalmente
di variarli durante la prova;
73
IL CONTROLLO DEL TITOLO
- individuata la durata dell’iniezione a partire dalla quale imponendo un gradino il
segnale della sonda cambia stato si può fare partire l’acquisizione imponendo
manualmente o automaticamente tali variazioni.
Tempo [µs]
HEGO [V]
Campioni [100kHz]
Figura 2-16: tempi di iniezione e segnale HEGO
Si ricorda che, diminuendo il tempo di iniezione, la quantità di benzina iniettata cala,
quindi il rapporto
A
cresce in accordo con quanto mostra il segnale della sonda lambda
F
in figura, che permane al valore nullo in caso di miscela magra, al valore unitario in
caso di miscela grassa.
A tal punto si è in grado di determinare ∆Ttot , tempo trascorso tra l’istante di calcolo in
cui è stato comandata la variazione a gradino del tempo di iniezione e lo switch della
sonda lambda.
E` banale a questo punto aggiungere che, scelto un punto motore, è possibile eseguire
una serie di transizioni magro-grasso e grasso-magro, che, acquisite, possono essere
impiegate per la valutazione dell’intervallo di tempo complessivo, tanto in una direzione
quanto nell’altra: si noti che ci si deve comunque riferire al primo cilindro in cui è
avvenuta la prima variazione del tempo di iniezione (Figura 2-17).
74
IL CONTROLLO DEL TITOLO
Tj
[ms]
∆T tot
∆Ttot
HEGO
[V]]
Tempo [ms]
Figura 2-17: il parametro ∆Ttot
Per quanto concerne i valori dei parametri ∆Tsca e ∆Tcomb, entrambi sono funzione dei
punti motore (in termini di numero dei giri e pressione nel collettore), e vanno pertanto
calcolati secondo la griglia dei punti di funzionamento, e quindi per ogni prova eseguita.
E` evidente da quanto detto prima sulle (Eq 2-8) e (Eq 2-14) che
∆Tcomb = f ( p coll , n) (Eq 2-17)
∆Tsca = f ( A, l , p sca , p coll , Tcoll , Tsca ,Vcil , z ,η vrel , n,τ ) (Eq 2-18)
Analizzando i
termini da cui dipende ∆Tsca è possibile notare che A, τ, z ed R,
rispettivamente sezione del collettore di scarico, numero di corse per ciclo, temperatura
del collettore di aspirazione, numero dei cilindri e costante dei gas perfetti sono noti e
costanti; Tcoll è misurabile (e comunque circa costante a motore caldo); pcoll, n ed ηvrel
sono, rispettivamente misurati e mappati,
comunque fissati dalla scelta del punto
motore; psca è stata considerata costante, dato che valori sperimentali non ne hanno
mostrato evidente variazione col punto di funzionamento (si tenga presente che la
contropressione è pressoché assente, data la mancanza del catalizzatore); Tsca è stata
invece ricavata tramite un modello matematico, a sua volta basato su dati sperimentali
relativi allo stesso motore. Infine il parametro l, lunghezza del runner di scarico che è
differente per ogni cilindro:, rende fondamentale l’identificazione del cilindro stesso in
cui per primo avviene la variazione del tempo di iniezione. Si è così ricavato
-per le transizioni grasso magro: ∆Tλ = 0.071 sec. con varianza σ2=0.0035 sec.
-per le transizioni magro-grasso: ∆Tλ = 0.0691 sec. con varianza σ2=0.0030 sec.
75
IL CONTROLLO DEL TITOLO
La media dei due valori risulta essere pertanto: ∆Tλ = 0.0701 sec.
Il risultato finale della metodologia impiegata è la determinazione dei valori Ki
(costante, e pari a 0.005) e Kp per il controllo in retroazione del titolo tramite sonda
HEGO. Ovviamente una verifica al banco prova resta necessaria, e probabilmente
alcuni valori (specie della Ki) potrebbero dover essere rettificati, ma si ritiene che la
mappa mostrata in Figura 2-18 sia comunque piuttosto affidabile.
Figura 2-18: mappa di Ki
Il controllore così definito non nasce però per correggere variazioni elevate dei tempi di
iniezione ma solo eventuali disturbi (la massima correzione ammessa è del 15%) e per
mantenere il titolo in un intorno del ± 1% attorno al valore stechiometrico, consentendo
al catalizzatore di funzionare in zona di massima efficienza; nasce insomma per il
controllo del titolo in stazionario. Per il controllo del titolo nei transitori si fa uso di altri
sistemi: ad esempio la compensazione in catena aperta, tramite il modello di Aquino,
degli scostamenti dal titolo obiettivo dovuti al fenomeno del film liquido.
2.3.2 SIMULAZIONE DEL CONTROLLORE
La possibilità di osservare, tramite un modello (che usa le stesse informazioni impiegate
per il calcolo di Ki), le reazioni del sistema di controllo a sollecitazioni esterne, può
essere impiegata per analizzare il comportamento nel caso di forti transitori.
76
Figura 1.12
IL CONTROLLO DEL TITOLO
Lo schema impiegato per la simulazione è visibile in Figura 2-19, nella quale è possibile
osservare i termini di ritardo (in basso), impiegati per ritardare l’effetto della variazione
del tempo di iniezione sulla risposta del sensore (a destra); il sistema di calcolo
dell’iniezione (e quindi anche il controllore) sono posizionati in un blocco (a sinistra)
eseguito su base-evento, ovvero, come nel caso dell’unità di controllo di serie, ad ogni
PMS.
Figura 2-19: lo schema di Simulink per la simulazione del controllo HEGO
Ipotesi di partenza nell’elaborazione di tale modello è che i tempi di iniezione Tj
mappati, i cui valori sono stati determinati tramite apposite prove in sala, corrispondano
a un titolo stechiometrico, per date tensione di batteria e temperatura nel collettore di
aspirazione. Il rapporto tra massa d’aria e massa di benzina che si desidera ottenere è
definito come:
A ma
=
(Eq 2-19)
F mb
essendo:
Supponendo inoltre la massa di benzina iniettata proporzionale al tempo di iniezione a
mezzo di una costante a (ipotesi, questa, che non considera la reale caratteristica
dell’iniettore, ma che comunque potrebbe essere rimossa, introducendo, ad esempio, un
offset, o addirittura la caratteristica dell’iniettore):
m
 A
= a
= 14.6 (Eq 2-20)
 
 F  stoich a ⋅ Tj mappa
77
IL CONTROLLO DEL TITOLO
Si supponga ora che il motore funzioni in condizioni stechiometriche: dando un gradino
positivo ai tempi di iniezione ∆Tj, aumentando quindi la quantità di carburante iniettato,
mantenendo invece costante la massa d’aria aspirata, il nuovo valore del titolo risulterà:
ma
 A
(Eq 2-21)
  =
 F  new a (Tj mappa + ∆Tj )
Dividendo membro a membro la (Eq 2-20) per la (Eq 2-21) si ottiene:
Tj mappa
 A
 A
(Eq 2-22)
  = 
 F  new  F  stoich Tj mappa + ∆Tj
I due ingressi del blocco relativo a questo calcolo sono la velocità di rotazione e la
pressione nel collettore, e servono per determinare il tempo di iniezione dalla mappa di
cui sopra. L’ingresso a gradino serve invece a imporre un disturbo al sistema al fine di
osservare se effettivamente esso sia in grado di controllare il titolo mantenendolo
costante, con quale precisione e con quale dinamica; infine, l’ingresso correzione
lambda rappresenta la retroazione del segnale della sonda lambda HEGO.
Come si può osservare tale blocco è eseguito sulla base di un segnale esterno: il modello
deve infatti rispecchiare il più possibile il sistema fisico che si sta simulando e sull’unità
di controllo del motore i calcoli vengono eseguiti ogni 180° di rotazione dell’albero
motore; pertanto, essendo noto il numero di giri, è possibile determinare la frequenza
esatta con la quale determinare la condizione di esecuzione. Si tratta di passare dal
dominio temporale a quello angolare (blocco trigger).
 A
 
 F  stoich
Tj [ms]
A/F
Tempi di iniezione
Titolo
14.6
 A
 
 F  new
Gradino ai
tempi di
iniezione
Figura 2-20: effetto della variazione a gradino di Tj
78
IL CONTROLLO DEL TITOLO
Come osservato in precedenza, dopo il calcolo di un ipotetico gradino ai tempi di
iniezione Tj trascorre il tempo ∆T 'tot prima che la sonda lambda segnali la transizione
del titolo; il modello deve naturalmente simulare tale intervallo temporale che può
essere scomposto nei tre contributi già menzionati.
∆T 'tot = ∆Tcal + ∆Tsca + ∆Tλ
(Eq
2-23)
Per quanto concerne il primo contributo, nota la distanza angolare tra punto di calcolo e
apertura della valvola di scarico, basta dividere tale valore per la velocità angolare per
eseguirne una stima.
La determinazione del contributo ∆Tsca richiede, secondo la (2.13), la conoscenza del
rendimento volumetrico relativo, della temperatura di scarico, dipendenti dalle
condizioni di funzionamento del motore, della lunghezza e della sezione del condotto
del cilindro cui si riferisce il calcolo oltre che della cilindrata e del numero di cilindri: si
è infatti considerato costante, pari al valore della pressione atmosferica, il contributo
della pressione di scarico.
Per ∆Tλ, infine, si è impiegato il valore ottenuto tramite le prove descritte al paragrafo
precedente; tale valore risulta pertanto costante e pari a 0.0701 secondi.
Nel blocco sonda lambda si ha la simulazione del comportamento della sonda lambda
con conseguente generazione del segnale logico impiegato per la retroazione: si tratta
banalmente di un interruttore, comandato dall’attraversamento della condizione di
stechiometria, che fa passare il valore del segnale da un livello logico all’altro.
Il valore del titolo valutato in precedenza, opportunamente sfasato di
∆T'tot , viene
inviato in tale blocco e confrontato col valore di riferimento in termini di
A
(14.6):
F
viene così generato il segnale che simula la risposta della sonda HEGO. Tale segnale è
inviato nel sottosistema che comprende il controllore. Esso stabilisce il fattore correttivo
che consente di variare il tempo di iniezione, e quindi il titolo.
E` ora possibile, come già accennato, simulare il comportamento del controllore, non
solo in prossimità della condizione stechiometrica, ma anche in corrispondenza di
brusche variazioni del titolo, per valutarne le qualità dinamiche e di precisione.
La variabile controllata di questo sistema è il rapporto
A
, il valore di riferimento è
F
14.6, il segnale retroazionato è quello della sonda lambda HEGO. Si supponga di
considerare il punto di funzionamento caratterizzato da 3000 [rpm] e 600 [mbar] di
79
IL CONTROLLO DEL TITOLO
pressione nel collettore di aspirazione: imponendo un disturbo del 10% alla variabile
controllata, quello che accade è riportato in figura:
A/F
Campioni (100 Hz)
Figura 2-21: andamento del rapporto A/F in corrispondenza di un disturbo del 10%
La simulazione, effettuata con passo fisso a frequenza di 100 [Hz], mette in luce il fatto
che, prima che il semplice controllore sin qui elaborato riporti il titolo al valore
desiderato, in circa 3 s. Questo significa che le costanti Ki e Kp, calibrate per un corretto
funzionamento nei pressi della composizione stechiometrica, danno luogo a transitori
troppo lenti in corrispondenza di errori elevati. Il problema può essere corretto
aumentando i valori di tali costanti nel caso in cui il periodo di oscillazione della sonda
si discosti da quello prevedibile, in base alla mappa dei ritardi. Impiegando, ad esempio,
tre gradi diversi di modifica, con correzione scelta secondo progressione aritmetica, è
possibile ridurre notevolmente il tempo di ripristino dell’oscillazione, senza rendere per
questo instabile il controllo.
2.4 IL CONTROLLO CON SONDA UEGO
La sonda lambda lineare è spesso impiegata per il vantaggio intrinseco che offre, ovvero
per la possibilità di gestire in retroazione il controllo del titolo anche per valori di A/F
obiettivo diversi da quello stechiometrico. Tale vantaggio è strategico in alcune
applicazioni, quali il controllo dei motori ad accensione comandata con iniezione diretta
di combustibile, che spesso possono funzionare con carica stratificata (e dunque con
miscela complessivamente magra), ma la sonda può rivelarsi utile anche in altri casi: è
ad esempio comunemente impiegata per diagnosticare problemi di funzionamento del
80
IL CONTROLLO DEL TITOLO
catalizzatore, potrebbe essere usata per la diagnosi delle mancate combustioni e per la
gestione del titolo in fase di avviamento. Altra possibile applicazione riguarda invece il
controllo del titolo cilindro per cilindro.
In questo paragrafo si descrive una tecnica per la messa a punto di un sistema di
controllo standard, che, invece di impiegare la sonda HEGO, sfrutti i vantaggi offerti
dalla sonda lineare. In analogia al caso precedente si impiega un modello che consenta
di simulare le prestazioni del controllore e di sceglierne i parametri off-line. E`
importante notare che buona parte del modello rimane invariata, dato che la geometria
del motore è la stessa, e così anche la sua modalità di gestione: cambiano solamente il
blocco di simulazione del sensore e il controllore. Anche per quanto riguarda il calcolo
dei ritardi, che - si ricorda - fanno sì che il segnale della sonda lambda UEGO risulti
ritardato di un intervallo di tempo ∆T rispetto all’istante in cui è stato fatto il calcolo
relativo all’iniezione che ha portato il titola al valore stechiometrico, il sistema risulta
sostanzialmente invariato; il tempo di reazione della sonda in questo caso non è stato
calcolato sperimentalmente perché dichiarato dal costruttore e pari a 0.08 sec.
Primo passo per l’elaborazione del sistema di controllo è la simulazione del segnale
della sonda UEGO: l’effetto capacitivo introdotto dal cappuccio protettivo della sonda
si ripercuote sulla sensibilità della stessa alle alte frequenze, perciò il modello che la
descrive dal punto di vista controllistico è un filtro passa basso del primo ordine.
Il blocco di simulazione del segnale è attivato su base evento da un segnale con un
periodo angolare di 90° di rotazione dell’albero motore: nell’applicazione al banco i
segnali sono campionati con la medesima frequenza angolare; per consentire un primo
filtraggio del segnale viene poi eseguita una media ogni 4 campioni.
Il progetto del sistema di controllo, ovviamente, risentirà della differenza esistente tra il
segnale della UEGO e quello a due livelli della HEGO.
81
IL CONTROLLO DEL TITOLO
Figura 2-22: simulazione del segnale UEGO
A seguito di una variazione a gradino dei tempi di iniezione, e di conseguenza del
rapporto aria benzina, il segnale misurato appare come in Figura 2-23; è possibile
osservare che oltre al già noto ritardo temporale, dipendente da fenomeni fisici, la sonda
si porta al nuovo valore del titolo con pendenza variabile, diversa da quella che ci si
potrebbe aspettare in base alla variazione del tempo di iniezione, tanto nel passaggio da
grasso a magro che in quello da magro a grasso.
A/F
 Teorico
 Misurato
Campioni (100kHz)
Figura 2-23: andamento A/F teorico e misurato
82
IL CONTROLLO DEL TITOLO
L’idea sulla quale si basa il controllore è quella di utilizzare la derivata del segnale della
sonda UEGO, allo scopo di costruire un segnale “lambda virtuale”, che riproduca
quanto più fedelmente possibile l’andamento atteso; tale segnale sarà usato dal
controllore in luogo di quello misurato. Il controllore, la cui struttura rimane peraltro
molto simile a quella vista nel caso della sonda HEGO, dovrà quindi comprendere la
valutazione di tale segnale. Nonostante a rigore si tratti di un regolatore PI, essendo il
segnale a cui esso è applicato ricavato a partire dalla derivata di quello misurato, è
evidente che esso equivale ad un regolatore PID. Si è introdotto, in sostanza, un
approccio fisico alla valutazione della costante Kd del regolatore, rendendo il contributo
della componente derivativa implicito nel segnale elaborato dal controllore vero e
proprio, ridotto a semplice PI.
Passando ad una descrizione analitica, si può sintetizzare che:
d (A / F )
 A
 A
+ KV ⋅
⋅ dt (Eq 2-24)
  = 
dt
 F  virt  F  measured
Essendo il segnale campionato, si deve passare alle differenze finite:
 A
 A
 A
+ K V ⋅ ∆  (Eq 2-25)
  = 
 F  virt  F  measured
F
Per determinare la costante di guadagno Kv è necessario imporre una condizione: ad
 A
esempio si può richiedere che la differenza tra il valore   ed il valore teorico in
 F  virt
caso di una variazione a gradino del tempo di iniezione, sia minima. Ovviamente questo
permette di ottimizzare il valore di Kv solo nell’intorno di determinate oscillazioni del
titolo, ma si deve ammettere che buona parte della vita del propulsore è trascorsa con
valori non troppo variabili del rapporto A/F. Se si temesse un comportamento instabile
in corrispondenza di brusche variazioni di composizione della miscela, si potrebbe
individuare un range di intervento della correzione derivativa, al di là del quale verrebbe
impiegato, per la correzione, il segnale misurato.
In Figura 2-24 è riportato il risultato ottenuto da una simulazione in cui si è imposta una
condizione di funzionamento di 3200 [rpm] e 450 [mbar] e sono stati dati gradini ai
tempi di iniezione di ± 100 µ s rispetto ai valori stechiometrici. In sostanza si impiega
un algoritmo predittivo del titolo, che entra in funzione solamente quando avverte
brusche variazioni del segnale della sonda UEGO.
83
IL CONTROLLO DEL TITOLO
Figura 2-24: A/F teorico, virtuale e misurato
Il segnale così elaborato viene inviato infine al controllore, del tipo PI.
Come nel controllo HEGO l’obiettivo di precisione a regime, imposto dall’esigenza di
un corretto funzionamento del catalizzatore, è di 14.45<A/F<14.75: ancora una volta si
tratta di determinare il valore delle costanti Ki e Kp. A differenza del controllore
progettato per la sonda HEGO, in questo caso non esiste una condizione di
funzionamento che indichi la scelta ottimale di questi valori. Si può allora, come si è
fatto per determinare il valore di Kv, ipotizzare una condizione di transizione limite del
rapporto A/F, che deve poter essere corretta il più rapidamente possibile, senza tuttavia
far superare la tolleranza imposta dalle esigenze di precisione.
Il gradino da prendere in considerazione, in questo caso, potrebbe essere diverso
(minore) rispetto a quello impiegato per la componente Kv: in sostanza si vuole che, a
regime, la Kv sia pressoché ininfluente, lasciando agire solamente Ki e Kp.
Si giunge insomma a definire un sistema in cui, per grandi e rapide escursioni del titolo
interviene la componente derivativa, che, agendo su un dato misurato (ed
opportunamente filtrato), impedisce l’insorgere di tardive sovracorrezioni da parte del
controllore, e che, a regime, vede prevalere, come il controllore della sonda HEGO, le
componenti proporzionale ed integrale.
84
IL CONTROLLO DEL TITOLO
Figura 2-25: mappa di Ki
Impiegando nuovamente il modello che simula il comportamento del controllore e di
parte del sistema controllato, è possibile determinare i valori delle costanti Kp e Ki, i cui
valori sono riportati in Figura 2-25 e Figura 2-26.
Figura 2-26: mappa di Kp
Ovviamente, le superfici rappresentate sono l’esito della pura e semplice applicazione di
un modello di calcolo, e se, da una parte, potrebbero essere sintetizzate, dall’altra
devono ancora essere calibrate al banco.
85
IL CONTROLLO DEL TITOLO
Il sistema di controllo così completato, può essere ora messo alla prova, sottoponendolo
a un disturbo rispetto ai tempi di iniezione stechiometrici: in Figura 2-27 è visibile la
simulazione relativa al caso in cui un aumento a gradino di 100 µs sia imposto nella
condizione 3000 rpm e 450 mbar di pressione nel collettore.
(100 Hz)
(100 Hz)
Figura 2-27: risposta ad un disturbo del sistema di controllo UEGO
86
IL CONTROLLO DEL TITOLO
Nell’immagine ingrandita si mostra che si rientra all’interno della fascia di tolleranza
molto rapidamente, grazie all’assenza di una eccessiva sovraelongazione.
Si è in possesso a tal punto di tutte le informazioni necessarie per la messa a punto del
nuovo controllore.
Può essere interessante mettere a confronto l’azione dei due sistemi di controllo in
diversi punti motore e in presenza di disturbi differenti: ciò può essere fatto impiegando
i modelli già presentati, che consentono di sottoporli alle stesse condizioni operative.
Nelle prove lo step time impiegato è di 1ms, perciò questa è anche la distanza temporale
dei campioni che costituiscono l’uscita osservata.
Vengono riportati gli andamenti del titolo in diverse condizioni di funzionamento
(300mbar@1200rpm; 500mbar@3000rpm, 900mbar@6000rpm): e in ciascuna delle
simulazioni è stato imposto un gradino del 10% al tempo di iniezione, rispetto al valore
stechiometrico.
Figura 2-28: confronto tra sistemi di controllo HEGO e UEGO. 300mbar@1200rpm
Come si può osservare (Figura 2-28), entrambi i controllori svolgono correttamente la
loro funzione: in particolare, il sistema di controllo UEGO si rivela essere più pronto, e
cioè è in grado di riportare il titolo in un intorno del valore obiettivo in un tempo
minore. La buona prontezza del sistema HEGO è confermata, in queste condizioni, al
banco prova, dove il solo sistema HEGO, senza alcuna compensazione in catena aperta,
garantisce un discreto controllo anche nelle fasi di transitorio.
87
IL CONTROLLO DEL TITOLO
Eseguendo la medesima simulazione in diverse condizioni di funzionamento (Figura
2-29) si evidenzia un diverso comportamento: la risposta del controllore UEGO diviene
oscillatoria nella prima fase, imponendo al titolo oscillazioni tra 15.3 e 13.8. Se da una
parte l’ampiezza potrebbe essere ridotta agendo sul guadagno Kv, dall’altra si deve
notare che il controllo HEGO dà comunque risultati peggiori, mantenendo il titolo al di
sotto del valore stechiometrico sino al ripristino della consueta oscillazione. Tutto
sommato, dal punto di vista del corretto funzionamento del catalizzatore, le escursioni
che il controllo UEGO comporta nella fase di transitorio potrebbero non essere sgradite,
dal momento che l’alternanza di miscele grasse e magre favorisce lo smaltimento degli
inquinanti (HC, CO, NOx) prodotti.
Figura 2-29: confronto tra sistemi di controllo HEGO e UEGO. 500mbar@3000rpm
Un andamento simile (Figura 2-30) si rileva portando la velocità di rotazione a 6000
rpm e la pressione nel collettore a 900 mbar. In realtà, in tali condizioni di
funzionamento, l’obiettivo per il titolo sarebbe difficilmente stechiometrico, ma si
ritiene importante indagare il comportamento dei controllori anche in situazioni
estreme, per quanto lontane dalla realtà operativa.
88
IL CONTROLLO DEL TITOLO
Figura 2-30: confronto tra sistemi di controllo HEGO e UEGO. 900mbar@6000rpm
La differenza nei risultati garantiti dai due sistemi di controllo, (a favore del sistema
UEGO), diventa più evidente nel caso di gradini più elevati (Figura 2-31), in cui il
regolatore HEGO si dimostra nettamente più lento.
Figura 2-31: confronto tra sistemi di controllo HEGO e UEGO. 900mbar@6000rpm
Nel caso di Figura 2-31, ad esempio, si può osservare come, nel caso di un gradino del
20%, il tempo di ripristino delle normali condizioni sia, nei due casi, assai diverso. Si
89
IL CONTROLLO DEL TITOLO
deve comunque considerare che, per far fronte a queste escursioni, come già detto,
sarebbe opportuno fare in modo che il controllore HEGO cambiasse i valori di Kp e Ki
dopo un determinato periodo di permanenza del segnale della sonda allo stesso valore,
in modo da cambiare, trascorso tale periodo di tempo, la pendenza della curva di
correzione. Tutte queste considerazioni potrebbero naturalmente essere ripetute per
improvvisi smagrimenti della miscela.
2.5 Compensazione del film fluido
I sistemi sin qui elaborati per il controllo del titolo si rivelano molto efficaci in regime
stazionario mentre, nel caso di rapidi transitori, non sono in grado di garantire il
mantenimento del rapporto aria/combustibile nei limiti desiderati per la tutta la durata
del transitorio stesso. Ciò che si simula nelle figure 3.16 e seguenti è ciò che avviene
nella realtà durante improvvisi diminuzioni o aumenti di carico. Nel primo caso, ad
esempio, il repentino arricchimento della miscela nel sistema fisico reale è dovuto alla
brusca chiusura della farfalla: esiste dunque un effetto capacitivo sulla benzina iniettata
a monte dei cilindri che deve essere compensato, pena la generazione di errori di
dosatura della miscela in ingresso ai cilindri, con conseguente peggioramento della
guidabilità, aumento di emissioni inquinanti e dei consumi.
Lo studio del problema ha portato a individuare una stretta relazione tra la presenza di
benzina liquida sulle pareti del collettore di aspirazione e gli errori commessi nel
controllo del rapporto di miscela durante i transitori: non tutto il carburante iniettato
raggiunge infatti i cilindri durante la fase di aspirazione, ma una parte di esso va a
formare una pellicola liquida, il film fluido, che viene successivamente rilasciata per
evaporazione o per gocciolamento direttamente all’interno del cilindro. Per via di questo
deposito, nel caso di una brusca diminuzione della portata d’aria al motore non si ha
l’immediata diminuzione della portata di benzina attesa, a causa del rilascio per
evaporazione di combustibile dal film precedentemente formatosi o del suo
gocciolamento direttamente in camera di combustione. Storicamente questo fu intuito
anche osservando il fenomeno in motori alimentati con combustibile gassoso: rapide
variazioni della portata d’aria aspirata non erano causa di escursioni del titolo della
miscela in ingresso ai cilindri della stessa entità di quelle che si avevano nei motori a
benzina. Molteplici sono i parametri che influenzano tale fenomeno, (la composizione
della benzina, il grado di nebulizzazione dello spray, la pressione nel collettore, le
temperature di aria e combustibile, la geometria del collettore, il numero di Reynolds
dela miscela) risulta pertanto difficile la modellizzazione dello stesso e, nel corso degli
90
IL CONTROLLO DEL TITOLO
anni, numerosi sono stati i sistemi elaborati per descrivere tali fenomeni fisici connessi
alla formazione e al trasporto della miscela all’interno del collettore di aspirazione. Tra i
più significativi si ricorda il modello di Aquino, elaborato nel 1981 e considerato ancora
un punto di riferimento per le applicazioni pratiche di compensazione e, in generale, di
controllo del rapporto aria/combustibile.
Figura 2-32: il fenomeno del film fluido: schema
Si fanno innanzitutto le seguenti ipotesi semplificative:
- in ogni istante il volume interessato al processo di iniezione si trova in condizioni
uniformi;
- ad ogni iniezione una frazione X del combustibile iniettato si deposita sulle pareti
come film liquido;
- la portata massica di vapore di benzina istantaneamente uscente dal film è
proporzionale alla massa del liquido depositato nel film stesso ed il fenomeno di
evaporazione è descrivibile come un processo del primo ordine con costante di tempo τ.
L’equazione di continuità per il film fluido può essere scritta come:
dm film
dt
= m& in − m& out = Xm& f _ inj − m& (Eq 2-26)
ff
Per la terza ipotesi di cui sopra vale:
m& ff =
m film
τ
(Eq 2-27)
Sostituendo la (Eq 2-26) nella (Eq 2-27) si ottiene:
91
IL CONTROLLO DEL TITOLO
dm film
dt
= Xm& f _ inj −
m film
(Eq 2-28)
τ
La portata di benzina in ingresso ai cilindri è il contributo di due termini: la portata
uscente dal film in forma di vapore e la frazione di portata iniettata che non si deposita:
m& f _ cil = (1 − X )m& f _ inj + m& ff (Eq 2-29)
L’obiettivo nel nostro caso è quello di ottenere un compensatore degli effetti del film in
modo tale da ridurre il tempo in cui il titolo non assume valori stechiometrici; a tale
scopo viene utilizzata l’inversa dell’ equazione reggente (Eq 2-29):
(m& f _ cil −
m& f _ inj =
potendo ricavare il termine
m film
τ
m film
τ
)
1− X
(Eq 2-30)
dalla (Eq 2-28) in funzione della massa di benzina
iniettata.
In generale, il primo passo nell’elaborazione di un controllore è l’individuazione degli
ingressi e delle uscite. Si è ragionato sin qui in termini di masse o di portate in massa di
benzina, ma le esigenze riguardanti il sistema di controllo in esame sono diverse: la
quantità di combustibile iniettata è calcolata infatti mediante i tempi di iniezione, che
costituiscono dunque un ingresso di tale sottosistema; le grandezze X e τ,
rispettivamente frazione del combustibile che si deposita sulle pareti e costante tempo
del fenomeno, sono fortemente influenzate da numero di giri e pressione nel collettore
di aspirazione, che costituiscono gli altri due ingressi del sottosistema.
Riassumendo, i tempi di iniezione calcolati in catena aperta o in retroazione saranno un
input per tale sistema, così come la velocità di rotazione del motore, e la pressione nel
collettore; l’uscita sarà invece costituita dai tempi di inezione corretti. Tali tempi
differiscono da quelli in ingresso solo in caso di transitorio, ovvero nel caso in cui il
secondo termine della (Eq 2-26) sia diverso da zero.
Figura 2-33: Modello di Aquino, implementazione
92
IL CONTROLLO DEL TITOLO
Il passo successivo consiste nell’esprimere le equazioni di Aquino introdotte nel
precedente paragrafo in funzione dei tempi di iniezione e non delle portate in massa; si
fa nuovamente l’ipotesi mb = a ⋅ Tj ∝ Tj .
In tal caso, considerando dt = 1 la (Eq 2-30) diventa:
(b ⋅ Tj calcolo −
b ⋅ Tj corretto =
m film
)
τ
(Eq 2-31)
1− X
da cui segue direttamente che
(Tj calcolo −
Tj corretto =
il termine
m film
τ ⋅b
m film
τ ⋅b
)
(Eq 2-32)
1− X
può essere ricavato dalla (Eq 2-29):
dm film
dt
= X ⋅ b ⋅ Tj corretto −
m film
τ
(Eq 2-33)
da cui:
1 dm film
1 m film
⋅
= X ⋅ Tj corretto − ⋅
(Eq 2-34)
b
dt
b τ
Passando alla trasformata di Laplace:
1
1 m film
⋅ m film =  X ⋅ Tj calcolo − ⋅
α
s
b τ
1
Ponendo
m film
b

 (Eq 2-35)

= Tj film si ottiene:
1
1 m film
Tj film = ( X ⋅ Tjcalcolo − ⋅
) (Eq 2-36)
s
b τ
in cui risulta chiaro il contributo fornito dalla pozza di film liquido che si forma sulle
pareti del runner di aspirazione: esso è positivo, se la frazione di combustibile che si
deposita nel film è minore della porzione di combustibile che evapora dal film stesso,
come accade in una brusca chiusura della farfalla; viceversa è negativo se la frazione di
combustibile depositata è maggiore della quantità di combustibile evaporato, come
accade in una brusca apertura della farfalla; sarà necessario pertanto agire sui tempi di
iniezione calcolati, in modo da diminuirli nel primo caso e da incrementarli nel secondo,
onde ridurre il tempo in cui il titolo della miscela si discosta dal valore stechiometrico.
93
IL CONTROLLO DEL TITOLO
Immediato è ora tradurre tali equazioni in Simulink in maniera tale che, a partire dagli
ingressi, si pervenga al tempo di iniezione corretto. E’ opportuno saturare tale valore,
per evitare attuazioni anomale che potrebbero presentarsi in condizioni particolari.
Per le mappe di X e τ sono stati utilizzati i valori presenti nella centralina originale;
questi dati sono in funzione della velocità di rotazione e della pressione nel collettore.
Figura 2-34: implementazione del modello di Aquino
Per provare off-line la potenziale funzionalità di tale controllo si è impiegato il modello
già utilizzato per la progettazione dei controllori HEGO e UEGO, imponendo una
condizione di funzionamento di 3000 giri al minuto e ipotizzando altresì un improbabile
crollo istantaneo della pressione nel collettore, facendola variare da 800 mbar a 400
mbar. In questo caso ovviamente non aveva grande interesse l’aderenza a condizioni
plausibili, quanto la possibilità di verificare la corretta direzione e l’entità delle
correzioni. La reazione attesa da parte del controllore è una diminuzione netta ai tempi
di iniezione: questo avviene per compensare l’effetto del film fluido che rilascerà, per
evaporazione, una parte della benzina immagazzinata in precedenza. La prova viene
eseguita a passo fisso con step time di un millisecondo; il gradino è impartito in
corrispondenza del campione 20000, cioè dopo 20 secondi; la reazione del controllore è
quella attesa almeno nel verso, per verificarne l’effettiva bontà è necessario provare il
controllore al banco.
94
IL CONTROLLO DEL TITOLO
Figura 2-35: test del compensatore off-line
Come si può osservare lontano dal transitorio i tempi calcolati e quelli coretti in uscita
dal blocco coincidono perfettamente.
Una versione più completa del compensatore è rappresentata in Figura 2-36. Il
controllore sin qui elaborato non tiene conto del fatto che il sistema di controllo esegue
quattro calcoli (uno per ogni cilindro), sfasati l’uno dall’altro di 1 P.M.S. Per fare in
maniera che la correzione venga attuata al giusto iniettore si ritarda il segnale con
blocchi Memory in maniera tale che il sistema di controllo attenda 4 P.M.S prima di
intervenire con la correzione.
Come si può osservare altra differenza con quanto mostrato in precedenza è data dalle
generazione dei parametri X e
τ
: è stata infatti applicata una correzione in funzione
della temperatura del liquido di raffreddamento, che dà idea dello stato di regimazione
termica di tutto il motore, ivi compreso il collettore di aspirazione.
95
IL CONTROLLO DEL TITOLO
Figura 2-36: compensatore del fenomeno del fil fluido
2.6 Risultati sperimentali
Per quanto concerne il sistema di controllo HEGO, quello che si aspetta è un andamento
del titolo corrispondente, in regime di funzionamento stazionario, a quello mostrato in
Figura 2-13, ed un comportamento in regime transitorio (riposizionamento sul valore
stechiometrico a partire da un errore dato, come in Figura 2-29) corrispondente a quello
illustrato nelle figure. Ovviamente, il rispetto dell’escursione rispetto al valore
stechiometrico, dipende dai valori delle costanti del sistema di controllo (Ki e Kp),
ovvero da quanto fedelmente, il modello impiegato per loro determinazione, è capace di
simulare le reali condizioni di funzionamento del motore.
96
IL CONTROLLO DEL TITOLO
Figura 2-37: Andamento dei tempi di iniezione
In Figura 2-37 è visibile l’andamento dei tempi di iniezione in uno stazionario
(450mbar@1700rpm) in cui è stata variata la costante di guadagno Kp: è evidente che il
sistema, allontanandosi dal valore determinato da modello, tende a diventare più lento, a
parità di precisione, a causa del fatto che la correzione proporzionale diviene più bassa,
demandando a quella integrale il ripristino del valore stechiometrico: solo quando il
valore del titolo effettivamente supererà quello stechiometrico la sonda, dopo il ritardo
∆Ttot, lo segnalerà. Mentre nel primo caso questo avviene immediatamente ad opera
della componente proporzionale, nel secondo avviene dopo un certo periodo di tempo:
questo fa aumentare il periodo dell’oscillazione dei tempi di iniezione, dimostrando
l’efficacia della strategia impiegata e della metodologia di determinazione delle costanti
di guadagno. Analogamente, è possibile osservare quello che cambia nel caso in cui si
modifichi la componente integrale, rispetto al valore determinato teoricamente: se essa
viene aumentata, come mostrato in Figura 2-38, aumenta l’ampiezza di oscillazione del
titolo, e, contestualmente,diminuisce la frequenza dell’oscillazione. Questo dipende dal
fatto che, aumentando Ki senza alterare insieme il valore di Kp, la componente
proporzionale non sarà più sufficiente a recuperare le sovracorrezioni di quella
integrale, e quindi aumenterà il tempo impiegato dal contributo di quest’ultima per fare
varcare la soglia della condizione stechiometrica.
97
IL CONTROLLO DEL TITOLO
Figura 2-38: andamento del titolo
L’effetto dell’introduzione del modello di Aquino nel calcolo in catena aperta del tempo
di iniezione, invece, è osservabile in bruschi transitori di apertura o chiusura della
valvola a farfalla. In un transitorio di apertura, ad esempio, se l’aumento della pressione
nel collettore è sufficientemente brusca, si possono addirittura rischiare misfire da
smagrimento. I test al banco prova dimostrano invece l’assenza di tali fenomeni quando
il compensatore è attivato.
Per quanto riguarda invece l’algoritmo di controllo UEGO, si è preferito, per la sua
implementazione, rivisitare il modello della sonda lambda lineare: in molte acquisizioni
del segnale, infatti, si è riscontrata una grande rumorosità, che ha sconsigliato l’uso
della componente derivativa presente nel segnale lambda virtuale, impiegato nella
correzione in retroazione. Per questo motivo ci si è limitati all’implementazione di un
controllore PI, il cui funzionamento presenta le caratteristiche mostrate in precedenza.
Ovviamente l’implementazione verrà realizzata non appena verranno eliminate le fonti
del rumore: si preferisce evitare infatti l’uso di un filtro, che renderebbe la risposta
troppo lenta, e allontanerebbe dal modello fisico del sistema sensore-controller.
98
IL CONTROLLO DEL TITOLO
2.7 LISTA DEI SIMBOLI
a
costante di proporzionalità [kg/s]
A
sezione del runner di scarico [cm2];
 A
 
 F  virt
rapporto aria benzina virtuale;
 A
 
 F  measured
segnale della sonda lambda UEGO misurato;
d ( A / F )lambda
derivata del segnale della sonda lambda UEGO [1/s];
dt
∆( A / F )
variazione del segnale della sonda lambda UEGO nell’intervallo di
tempo ∆t ;
α
angolo compreso tra il punto di esecuzione del calcolo ed il PMSA del
cilindro per il quale il calcolo è eseguito [°];
c
 cm 
velocità dei gas di scarico   ;
 s 
∆ηcomb angolo di manovella tra il calcolo e l’apertura della valvola di scarico [°] ;
γ
angolo corrispondente a quattro fasi del ciclo (720°);
EVOA angolo di anticipo di apertura della valvola di scarico (43°);
KV
costante di guadagno applicata alla derivata del segnale A/F [s];
Ki
costante di guadagno integrale []
Kd
costante di guadagno derivativa [µs2]
Kp
costante di guadagno proporzionale [µs]
l
lunghezza del runner di scarico [cm];
ma massa d’aria aspirata [Kg ] ;
mb
massa di benzina iniettata [Kg ] ;
m&
 Kg 
portata in massa dei gas   ;
 s 
mb
massa di benzina iniettata [kg]
mfilm
massa di film fluido [kg];
& f _ inj portata in massa media di benzina iniettata  Kg 
m
 s 
 Kg 
m& f _ cil portata in massa media in ingresso ai cilindri 

 s 
99
IL CONTROLLO DEL TITOLO
- m& ff
 Kg 
portata in massa media che evapora dal film fluido  
 s 
n
giri motore [rps ] ;
ηvrel
rendimento volumetrico relativo;
p O2
pressione parziale dell’ossigeno nell’atmosfera [Pa];
p O′ 2
pressione parziale dell’ossigeno nei gas di scarico [Pa];
Pcoll pressione nel collettore di aspirazione [ Pa ];
ρsca
 Kg 
densità dell’aria nel collettore di scarico  3  ;
m 
R
 J 
costante dei gas perfetti 
;
 KgK 
∆t
: intervallo di tempo tra un calcolo e il successivo [s];
Tj
tempi di iniezione calcolati per ogni ciclo [s]
∆Ttot
intervallo di tempo trascorso tra l’istante del calcolo dell’iniezione che ha
portato alla transizione dell’A/F dal valore grasso al valore magro e lo switch della
sonda lambda [µs];
∆Tcomb
tempo trascorso dall’istante di calcolo all’apertura della valvola di scarico
[µs] ;
∆Tsca
tempo impiegato dai gas di scarico per percorrere il tratto del collettore di
scarico compreso tra la valvola di scarico e il punto in cui è posizionata la sonda lamda
[µs];
∆Tλ
tempo impiegato dalla sonda lambda per rilevare la variazione del titolo [µs].
T
temperatura dei gas di scarico [K];
Tcoll
temperatura nel collettore di aspirazione [K ] ;
Tsca
temperatura nel collettore di scarico [K ] ;
X
frazione di portata iniettata che si deposita sulle pareti del collettore
τ
costante di tempo del fenomeno di evaporazione [s ]
Vcil
cilindrata [m3 ];
z
numero dei cilindri;
100
IL CONTROLLO DEL TITOLO
2.8 BIBLIOGRAFIA
[1]. Model Based Air Fuel Ratio Control for Reducing Exhaust Gas Emission, A.
Ohata, M. Ohashi, M. Nasu, T. Inoue , SAE Technical Paper, 950075
[2]. Exhaust-Intake Manifold Model for Estimation of Individual Cylinder Air Fuel
Ratio and Diagnostic of Sensor-Injector, SAE Technical Paper, 2003-01-1059.
[3]. Transient A/F Control, Characteristics of the 5 Liter Fuel Injection Engine, C.
F. Aquino, SAE Technical paper, 1981, 810494
[4]. An Algorithm for the Calibration of Wall-Wetting Model Parameters, A. Di
Gaeta, S. Santini, L. Glielmo, F. Di Cristofaro, C. Di Giuseppe, A. Caraceni,
SAE Technical paper – 2003-01-1054.
[5]. Automotive Control Systems for Engine, Driveline and Vehicle, Springer – SAE
International 2000
[6]. Individual Cylinder Fuel Control with a Switching Oxygen Sensor, J. L. Kainz,
J. C. Smith, SAE Technical paper 1999-01-0546
[7]. Determination of Air/Fuel ratio Differences Between Cylinders in a Production
Engine Using Exhaust Gas Oxygen Sensors, G. W. Davis, A. Ego, S. Baumbach,
C. Jordan, E. Ubong, SAE Technical Paper, 1999-01-1170
[8]. Abstract of UEGO Sensor, NGK Spark plug CO L.T.D.
[9]. Gasoline Engine Management, BOSCH – SAE International 1999
[10].
Controlli Automatici, G. Marro, Zanichelli, 1998.
101
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
3
PROTOTIPAZIONE
RAPIDA:
STRATEGIA
DI
CONTROLLO DEL MINIMO
L’implementazione di un sistema di controllo del regime di funzionamento minimo del
motore si presta all’applicazione del sistema di prototipazione rapida. La strategia seguita
in questo caso è simile a quella vista per il controllo del titolo: il sistema fisico viene
simulato in un modello off-line, che, una volta validato sperimentalmente, potrà integrare
il modello del sistema di controllo. In questo modo si possono ottimizzare i valori dei
parametri del controllo. Il sistema così elaborato potrà essere esportato nella centralina
programmabile senza alcuno sforzo, grazie alla possibilità di programmarla in Simulink,
e, finalmente, l’algoritmo potrà essere messo alla prova sul banco. Più il modello del
sistema controllato è preciso, migliore sarà la scelta dei parametri del sistema di controllo
stesso, che non dovranno quindi essere ricalibrati con apposite prove al banco.
Tipicamente, in queste applicazioni, la variabile controllata è la velocità angolare, che
deve essere mantenuta con la massima precisione ad un valore obiettivo, mentre le leve a
disposizione del controllo sono l’anticipo di accensione e la portata d’aria media in
ingresso ai cilindri, che potrà essere variata con circuiti di by-pass o con la valvola a
farfalla, in caso di DBW. Il controllo multivariabile viene impiegato per fare fronte allo
scarso range di coppia spazzato dal valore minimo al massimo della prima delle due leve,
ed alla intrinseca scarsa prontezza nell’azione della seconda: si usa allora l’anticipo per
fare fronte alle rapide richieste di coppia, e la farfalla per rispondere alle esigenze di
coppia più ingenti (ad esempio: entrata in funzione del compressore del condizionatore).
L’errore (differenza tra la velocità misurata ed il valore obiettivo) costituisce l’ingresso
dei due controllori, che possono essere di tipo PI o P.
Non si include, tra le leve di controllo il titolo della miscela, poiché, per motivi
ambientali, si predilige il funzionamento a regime stechiometrico.
Il giudizio di un sistema di controllo del minimo è basato senz’altro sulla sua prontezza e
sulla sua precisione, ma anche su altri obiettivi, quali le qualità di auto-adattatività, la
riserva di coppia media garantita (importante quando si deve uscire dalla condizione di
102
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
minimo con una forte accelerazione), il regime minimo che è possibile attuare
(importante per la riduzione dei consumi), ecc.
Non si deve infine scordare che anche la logica di innesco del sistema di controllo del
minimo deve essere determinata in modo da garantire il rispetto delle prestazioni
promesse dai controllori.
3.1 SIMULAZIONE DEL SISTEMA CONTROLLATO
Come in ogni modello sviluppato a fine controllistici, si cerca di mettere in evidenza solo
lo stretto indispensabile per cogliere l’essenza del comportamento del sistema simulato.
Quest’ultimo, è, in questo caso, particolarmente complicato, dovendo mettere in luce
l’influenza di due variabili quali apertura della valvola a farfalla e angolo di anticipo
dell’accensione sulla velocità angolare del
motore, in presenza di disturbi
(fondamentalmente gradini di coppia resistente). Si cercherà dunque di capire quali siano
le dinamiche che influiscono sul nostro modello e, quindi, quali siano gli aspetti del
sistema fisico da tenere in considerazione.
Il primo passo verso la semplificazione del sistema da simulare, consiste
nell’eliminazione del campo di funzionamento del motore che non coinvolge il controllo
del minimo: il motore verrà allora simulato solo per basse velocità e bassi carichi.
Volendo seguire il percorso del comburente in ingresso al motore, si dovrà partire dalla
simulazione del corpo farfallato. La posizione della farfalla è uno dei parametri attraverso
i quali il sistema riconosce la condizione di minimo e, inoltre, la centralina elettronica usa
questo parametro come leva per intervenire sulla dinamica del sistema. Da qui l’esigenza
di modellizzare questa parte del sistema fisico.
Interessa poter simulare la dinamica della massa d’aria che, attraversando la farfalla,
entra nel collettore di aspirazione.
Il sistema successivo, in catena funzionale, è quello che riguarda il collettore di
aspirazione. E’ nel collettore di aspirazione che si prepara la miscela che entrerà,
attraverso la valvola di aspirazione, in camera di combustione: interessa – soprattutto riuscire a determinare l’andamento della pressione. Ad essa infatti è legata la massa di
aria e quindi di benzina, ovvero di energia chimica, che entrerà nel cilindro e sarà ivi
trasformata in energia meccanica.
103
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
Dal collettore di aspirazione si passa al cilindro o, meglio, ai cilindri. E’ questo il
successivo sottosistema da modellizzare. Data la complessità della dinamica di questo
sottosistema, si è preferito, in questo caso, impiegare un modello a scatola nera; in uscita
da questo blocco ci si aspetta il valore della coppia indicata.
A questo punto, per completare il modello, manca il sistema che trasforma la coppia
indicata in velocità-motore. Questa trasformazione avviene tramite l’albero motore,
tenendo conto che, oltre all’effetto della coppia indicata (componente attiva), si dovranno
considerare le varie componenti negative, quali la coppia d’attrito, i disturbi, etc.
Una volta costruiti i blocchi menzionati sarà possibile valutare se il comportamento del
modello risulterà verosimile e, in seguito, interfacciarlo al blocco del controllo del
minimo.
3.1.1 IL CORPO FARFALLATO
L’analisi di questo sistema si riduce ad un problema molto semplice: determinare la
massa d’aria che attraversa la farfalla in funzione dell’apertura della valvola stessa. Come
spesso accade, la chiarezza del compito che ci si pone non corrisponde ad un’effettiva
facilità dello svolgimento.
Nell’analisi del corpo farfallato, si fa riferimento allo studio del passaggio di un fluido
attraverso un orifizio.
Figura 3-1: schema del corpo farfallato
L’espressione di partenza sarà l’equazione generalizzata del moto dei fluidi in forma
meccanica, in cui si è trascurato il termine dL, poiché il condotto è fisso:
104
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
udu + gdz +
dp
ρ
+ dR = 0 (Eq 3-1)
Integrando tra le sezioni 0 ed 1, nell’ipotesi che il fluido subisca una trasformazione
isoentropica (e quindi che p/ρk=p0/ρ0k), e che le variazioni di quota siano trascurabili, si
ottiene:
1
1
0
0
∫ udu + ∫
1
k
0
1
1
1− 
u g2
u −u
p
k  1− k
k
+ dR =
+
= 0 (Eq 3-2)
 p1 − p 0  + β
2
2
ρ ∫0
ρ0 k −1 

dp
1
2
1
2
0
dove β è il coefficiente di perdita nell’espansione tra la sezione di massimo
restringimento e la sezione 1; detta perdita può essere infatti espressa in funzione della
velocità massima del fluido (ug) che è naturalmente raggiunta in corrispondenza della
sezione di massimo restringimento.
Si evidenzia innanzitutto che, essendo il fluido considerato in quiete nella sezione 0,
risulta u0=0.
Dall’equazione di continuità, in seguito, ponendo uguali le due portate nelle sezioni 1 e g,
si ha che (indicando con A l’area di passaggio nelle varie sezioni):
Ag u g ρ g = A1 u1 ρ 1 (Eq 3-3)
che significa:
ug =
u1 A1 ρ 1
(Eq 3-4)
Ag ρ g
Sostituendo nella (Eq 3-2) si ha poi:
k −1


2
2 

u
A1 ρ 1
p 0 k  p1  k

 − 1 = 0 (Eq 3-5)
1 + β 2 2  +


2 
Ag ρ g  ρ 0 k − 1  p 0 


2
1
da cui è possibile ricavare la velocità nella sezione 1:
u1 =
Ag2 ρ g2
Ag2 ρ g2 + βA12 ρ 12
k −1




p 0 2k 
p1 k 

1− 
(Eq 3-6)
ρ 0 k − 1   p 0  


Se si indica con m& la portata (massica) d’aria, risulta:
105
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
m& 1 = A1 u1 ρ 1 (Eq 3-7)
e quindi:
m& 1 =
A1 Ag
Ag + β
2
1
2
g
ρ
A12
ρ
ρ
ρ
2
1
2
0
k −1




p1 k 
2k 

p0 ρ 0
1− 
(Eq 3-8)
k − 1   p 0  


Ricordando ora che si è fatta l’ipotesi di trasformazione isoentropica, da cui risulta
 ρ1

 ρ0
2
2
k

p 
 =  1  , si ottiene:

 p0 
m& 1 =
A1 Ag
Ag + β
ρ 12 2
A1
ρ g2
2
k −1


2k  p1  k   p1  k 

 1− 

p0 ρ 0
(Eq 3-9)
k − 1  p 0    p 0  


e quindi:
m& 1 =
A1 Ag
Ag + β
ρ 12 2
A1
ρ g2
2
k +1


k
 p1  k 
2k  p1 

 − 

p0 ρ 0
(Eq 3-10)
k − 1  p 0 
p 0  



Si concentri ora l’attenzione sul primo fattore del secondo membro della (Eq 3-10): esso
dipende direttamente dalla Ag (ovvero dall’area, che verrà chiamata “effettiva”, della
minima sezione g del tubo di flusso nel passaggio attraverso la farfalla), che varierà al
variare delle condizioni di funzionamento del motore e dalla A1, che invece è costante,
essendo una caratteristica geometrica; compaiono inoltre β ed il rapporto ρ12/ρ22, che sono
anch’essi dipendenti dalle condizioni di funzionamento del motore considerate. Nel
seguito si tratterà questo fattore, che figura nella (Eq 3-10) prima della radice quadrata,
come un’unica variabile dipendente dal punto di funzionamento del motore, e lo si
chiamerà “area efficace di farfalla”, indicandolo con il simbolo Aeff.
Perciò nella sua versione definitiva la (Eq 3-10) assumerà la seguente forma:
106
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
m& 1 = Aeff
2
k +1


k




p1 k 
2k  p1
  −  
(Eq 3-11)
p0 ρ 0

k − 1  p0 
p
 0 


k
p
 2  k −1
Tale relazione è valida in condizioni subsoniche, cioè se 1 > 
 ; nel caso
p0  k + 1 
k
p
 2  k −1
contrario, in cui risulta 1 ≤ 
 , si è in condizioni di moto sonico e la portata
p0  k + 1 
dipende soltanto dall’apertura dell’orifizio e dalle condizioni a monte, secondo
l’espressione:
k +1
m& 1 = Aeff
 2  k −1
p0 ρ 0 k 
(Eq 3-12)

 k + 1
Si può calcolare la portata d’aria che fluisce attraverso la farfalla usando quella che d’ora
in poi verrà indicata come “relazione dell’efflusso isentropico di un fluido comprimibile
attraverso un orifizio a sezione variabile”:
m& 1 =
p 
C d A1 β  1  (Eq 3-13)
RT0
 p0 
p0
dove col pedice 0 si sono indicate le grandezze relative ad una sezione con flusso
indisturbato a monte dell’ostruzione che determina la massima restrizione della vena,
mentre col pedice 1 ci si è riferiti ad una generica sezione a valle della suddetta
ostruzione; Cd rappresenta il “coefficiente di efflusso”, definito in generale come:
Cd =
m& reale
(Eq 3-14)
m& teorica
ed è stato introdotto nell’equazione dell’efflusso per tenere conto del fatto che il gas in
oggetto non è ideale, e la trasformazione che subisce nell’attraversare il condotto in
questione non è isentropica a causa delle inevitabili perdite; tale coefficiente assume
valori minori di 1 ed è funzione della forma e dimensioni del condotto, del numero di
Reynolds, del numero di Mach e delle proprietà fisiche reali del gas.
107
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
Infine, il fattore indicato con β rappresenta una funzione del rapporto tra le pressioni a
valle e a monte dell’ostruzione attraverso la quale si verifica l’efflusso, ed assume valori
diversi a seconda che il regime di moto sia subsonico in tutti i punti del condotto, oppure
raggiunga le condizioni soniche nella sezione di massimo restringimento della vena: in tal
caso la portata risulta, come detto, costante rispetto ad ulteriori diminuzioni del valore del
suddetto rapporto di pressioni, e si parla di “flusso in blocco sonico”; le espressioni
assunte da questa funzione, nei due casi ora citati, sono le seguenti:
p 
β  1  =
 p0 
2
k +1


2k  p1  k  p1  k 
  −  
k − 1  p0 
 p0  


k +1
p 
 2  2(k −1)
β  1  = k 

 k + 1
 p0 
k
se
p1  2  k −1
>
 (Eq 3-15)
p0  k + 1 
k
se
p1  2  k −1
≤
 (Eq 3-16)
p0  k + 1 
Nel caso in esame, il condotto del corpo farfallato, le sezioni prima indicate con i pedici 0
e 1 corrispondono rispettivamente alla sezione di imbocco del condotto stesso, in cui si
assume di avere le condizioni di pressione e temperatura ambiente (indicate dal pedice
“amb”), e a quella generica del collettore d’aspirazione, in cui la pressione verrà indicata
con pman e la temperatura con Tman (dove il pedice “man” si riferisce al collettore);
pertanto la relazione che fornisce la portata attraverso la farfalla diventa:
m& aria _ farf =
p amb
RTamb
p
C d _ th Ath β  man
 p amb

 (Eq 3-17)

in cui il fattore β è dato dalle (Eq 3-15) o(Eq 3-16), mentre il prodotto tra l’area geometrica
Ath della sezione del condotto di aspirazione in cui lavora la farfalla (dove il pedice “th”
si riferisce appunto alla farfalla) ed il relativo coefficiente di efflusso (Cd_th) altro non è
che la quantità precedentemente indicata come “area efficace di farfalla” (Aeff).
Per risalire all’espressione di tale parametro si stima la portata d’aria in ingresso, in prove
sperimentali in cui l’apertura della valvola, la pressione ambiente, la pressione nel
collettore di aspirazione, la temperatura ambiente sono note: impiegando la (Eq 3-17) è
allora possibile determinare Cd_th ed Ath, ovvero il loro prodotto Aeff.
Per la stima della portata d’aria si è preferito evitare l’uso della mappa del rendimento
volumetrico, solitamente usata per calcolare i tempi di iniezione, perché si è ritienuto che,
108
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
in corrispondenza di condizioni di funzionamento al minimo, non consentisse una stima
affidabile. Si è invece fatto riferimento alla caratteristica degli iniettori, che consente, in
funzione della pressione nel collettore, della tensione di batteria e del tempo di iniezione,
di calcolare la massa di benzina iniettata. Progettando una serie di prove in cui è stato
mantenuto costante (al valore stechiometrico) il titolo della miscela, e sono state misurate
tensione di batteria, pressione nel collettore, tempo di iniezione, temperatura e pressione
ambiente, e, ovviamente, posizione della valvola a farfalla, è stato dunque possibile
legare il coefficiente Aeff all’apertura della farfalla.
Il legame tra tempo di iniezione e massa di benzina iniettata può essere espresso come
T j = m fuel ⋅ K 1 ( pcoll ) ⋅ K 2 (Vbatt ) + K 3 (Vbatt ) + K 4 ( pcoll ) (Eq 3-18)
Tale espressione porta a:
m fuel =
Tinj − K 3 − K 4
K1 ⋅ K 2
(Eq 3-19)
La portata di benzina sarà calcolabile come:
.
m b = Tinj ⋅ m fuel ⋅ z ⋅
n
(Eq 3-20)
120
A questo punto, ricordando che il rapporto tra l’aria aspirata e la benzina iniettata è stato
mantenuto pari a quello stechiometrico, si ricava un’espressione diversa della portata
d’aria al collettore di aspirazione e, quindi, della portata che attraversa il corpo farfallato.
Ricordando la (Eq 3-17), si può scrivere:
p0
RT0
⋅ Aeff ⋅ β = 14.6 ⋅ Tinj ⋅ m fuel ⋅ z ⋅
n
(Eq 3-21)
120
Da quest’ultima equazione si può ricavare l’espressione di Aeff:
Aeff =
14.6
β
⋅
R ⋅ T0
p0
⋅ Tinj ⋅ z ⋅
n
⋅ m fuel (Eq 3-22)
120
per valori ordinari della pressione di collettore, in condizioni di minimo, il coefficiente β
ha un valore di 0.685 (condizioni soniche).
Si giunge, dunque, all’andamento di Aeff rappresentato in Figura 3-2.
109
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
Figura 3-2: andamento dell’area efficace in funzione dell’apertura della valvola.
In Figura 3-2 si notano i punti sperimentali, in blu, e l’andamento interpolato di Aeff in
rosso: si tratta chiaramente di una relazione lineare, valida comunque solo per piccoli
valori di apertura della valvola a farfalla.
A questo punto l’analisi del sistema fisico relativo al corpo farfallato può dirsi esaurita.
3.1.2 IL COLLETTORE DI ASPIRAZIONE
Il successivo sottosistema da integrare nel modello è quello del collettore di aspirazione.
Si vuole considerare la dinamica dei flussi d’aria all’interno del collettore: il problema è
affrontato con il classico approccio filling & emptying.
Il collettore di aspirazione è considerato come un serbatoio in cui si hanno un’entrata ed
un’uscita. La variazione della massa di aria presente nel serbatoio sarà dunque, nell’unità
di tempo, la differenza tra flusso in ingresso e flusso in uscita. Il flusso in ingresso sarà
rappresentato dalla massa d’aria che attraversa il corpo farfallato (di cui al 3.1.1), mentre
il flusso in uscita sarà rappresentato dalla massa aria che accede ai cilindri.
Si può scrivere allora l’equazione di equilibrio:
110
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
4 dm
dma dmaria _ farf
cyl
=
−∑
(Eq 3-23)
dt
dt
dt
1
dove, per convenzione, si sono assunti positivi i flussi entranti e negativi quelli uscenti
dal collettore. La sommatoria che compare a secondo membro nella (Eq 3-23) si
giustifica pensando che il motore in esame è un quadricilindrico; volendo eliminarla, per
semplicità, si può considerare di avere a che fare con un monocilindrico di cilindrata
corrispondente:
dma dmaria _ farf dmmono _ cyl
=
−
(Eq 3-24)
dt
dt
dt
La portata d’aria che entra nel cilindro può essere espressa come:
dmmono _ cyl
dt
= η v _ rel ⋅
ρ m ⋅ Vd ⋅ n
2
(Eq 3-25)
Per quanto riguarda l’aria all’interno del collettore, si può scrivere:
ma =
Vm ⋅ Pm
(Eq 3-26)
R ⋅ Tm
dma
V dPm
= m
(Eq 3-27)
dt
R ⋅ Tm dt
Considerando che:
ρm =
P
1
= m (Eq 3-28)
Vm R ⋅ Tm
e, ricordando la (Eq 3-24), si ottiene:
dPm RTm .
V Pn
=
m aria _ farf − η v _ rel d m (Eq 3-29)
dt
Vm
2Vm
Essendo poi
η v _ rel = η v _ ass ⋅
Tm Pamb
⋅
(Eq 3-30)
Tamb Pm
si ha infine:
111
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
dPm RTm
V T ω
=
maria _ farf − η v _ ass Pamb d m
(Eq 3-31)
dt
Vm
Vm Tamb 4π
Il rendimento volumetrico assoluto può essere determinato a partire dai dati di cui sopra
(3.1.1), grazie ai quali si era ottenuta l’area Aeff.
Ovviamente questo trascura le dinamiche del combustibile, della temperatura, le
propagazioni di onde di pressione, ecc.: nelle condizioni di funzionamento cui ci si
riferisce, tuttavia, non ha interesse pratico integrare modelli più complessi.
3.1.3 LA PRODUZIONE DI COPPIA
Si procede nell’analisi dei sottosistemi prendendo in considerazione quello che succede
dentro i cilindri. Come è noto, il motore del quale ci si occupa è quadricilindrico ma,
come fatto in precedenza, si può considerare un ideale motore monocilindrico equivalente
che abbia la stessa cilindrata. Il parametro che si assume come uscita del sistema è la
coppia indicata. Tale grandezza si può ricavare dalla pressione indicata in camera di
combustione, misurabile grazie ad un sensore affacciato all’interno del cilindro.
Figura 3-3: andamento della coppia indicata in funzione della pressione nel collettore, a parità di
velocità di rotazione e anticipo
Come variabili di ingresso si dovranno considerare la pressione nel collettore, la velocità
di rotazione e l’anticipo di accensione.
112
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
Visto che l’esecuzione di un set completo di prove sperimentali su tre fattori sarebbe
oneroso, si cerca di individuare una dipendenza che consenta di limitare i test.
Esaminando, a livello qualitativo, alcuni dei risultati ottenuti nelle acquisizioni (Figura
3-3), si nota subito che, a velocità ed anticipo costanti, gli andamenti della pressione nel
collettore di aspirazione e della coppia indicata sono molto simili. Questo dà adito a
pensare che la relazione tra queste due grandezze possa essere lineare.
Si può visualizzare meglio il rapporto tra queste due grandezze costruendo un grafico in
cui la pressione nel collettore di aspirazione rappresenti l’ascissa, mentre la coppia
indicata sia l’ordinata (Figura 3-4).
60
Ci [Nm]
50
40
30
ANDAMENTO
REALE
ANDAMENTO
LINEARE
20
10
0
325
400
475
550
625
700
775
PRESSIONE COLLETTORE [mbar]
Figura 3-4: legame tra coppia indicata e pressione nel collettore. 1750 rpm, 20°
Si noti come, in effetti, ci sia corrispondenza lineare tra pressione nel collettore di
aspirazione e coppia indicata. Guardando un altro set di prove, quello eseguito a 1250
rpm e 10° di anticipo rispetto al PMS, per gli stessi step di pressione si ottiene un
andamento simile (Figura 3-5). Anche in questo caso si può considerare che tra le due
grandezze esaminate esista corrispondenza lineare, pur con coefficiente angolare e
termine noto diversi.
Il problema della determinazione di una relazione causale input-output nel sistema può
quindi essere ridotto all’identificazione di due coefficienti m e q tali che l’equazione:
ci = m ⋅ Pm + q (Eq 3-32)
risulti soddisfatta.
113
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
60
50
Ci [Nm]
40
30
ANDAMENTO
REALE
ANDAMENTO
LINEARE
20
10
0
325
400
475
550
625
700
775
PRESSIONE COLLETTORE [mbar]
Figura 3-5: legame tra coppia indicata e pressione nel collettore. 1250 rpm, 10°
Come già detto, in questo sistema, si hanno, oltre alla Pm, altri due ingressi: la velocità di
rotazione del motore e l’anticipo di accensione. Si è poi osservato come, cambiando le
condizioni di funzionamento del motore relativamente a questi due valori, la
corrispondenza lineare precedentemente evidenziata si modifica, pur rimanendo lineare.
Ne consegue che i valori dei coefficienti m e q sono variabili, da un punto motore ad un
altro, in funzione di N e di S.A. .
L’idea, ancora una volta, è quella di ridurre l’uso delle prove al banco alla
determinazione di me q, riducendo quindi i fattori da analizzare da 3 a 2.
Nelle prove, per vari step di Pm, viene misurata la ci al variare di S.A. e di N. In questo
modo, per ogni coppia di valori (N, S.A.), sarà possibile trovare la relazione tra Pm e ci e
costruire una mappa di m e q che copra tutti i vari punti di funzionamento di interesse.
La scelta ottimale dei punti prova potrebbe essere quella di acquisire i dati secondo una
griglia di punti motore molto fitta, in modo da avere il maggior numero possibile di
informazioni. Tuttavia le esigenze che spingono alla limitazione delle prove sono fin
troppo note. Sarebbe quindi opportuno sfruttare tecniche basate sul DOE, per ridurre in
maniera razionale i punti di sperimentazione. D’altronde, in questo caso, un buon
contributo alla riduzione viene dalle osservazioni riportate sopra: volendo trovare una
114
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
relazione lineare tra le due grandezze Pm e ci, relazione che è differente in ogni coppia di
punti (N, S.A.), saranno necessarie almeno due coppie di valori (Pm, ci) per ogni punto
motore (N, S.A.).
Questa riduzione, pur permettendo di trovare la relazione cercata, comporta un
cambiamento nel metodo usato: avendo avuto più di due coppie (Pm, ci) per punto motore
(N, S.A.) sarebbe stato possibile interpolare la disposizione dei punti (Pm, ci)j con una
retta; avendo solo due punti (Pm, ci)j si userà la retta che unisce tali due punti.
Questo comporta una rinuncia abbastanza pesante in termini di precisione, infatti, se uno
dei valori di ci in corrispondenza di un certo Pm fosse impreciso, l’errore si
ripercuoterebbe per ogni valore calcolato di ci in quel punto motore.
Questo concetto è visualizzato nel in Figura 3-6: salta agli occhi come, riferendosi a soli
due punti, gli effetti di un errore nella misurazione di un valore della coppia porti alla
costruzione una retta (Pm,ci) di molto diversa da quella reale.
Ovviamente quanto peggiore risulterà il grado di precisione delle misure effettuate e
quanto più lontano dalla linearità il legame Ci-pcoll, tanto peggio verrà simulato il
comportamento del motore, con ovvie conseguenze sull’esigenza di ricalibrare al banco i
parametri di controllo.
Per questo motivo si deve fare molta attenzione alle condizioni di misura, e a quanto il
valore rilevato sia rappresentativo delle reali condizioni di funzionamento (si deve
considerare, ad esempio, l’effetto della dispersione ciclica).
115
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
60
50
ci [Nm]
40
30
CORRETTO
ERRATO
20
ERRORE!!!
10
700
675
650
625
600
575
550
525
500
475
450
425
400
375
350
325
0
Pm [mbar]
Figura 3-6: effetto di un errore sulla misura di Ci
Le prove sperimentali sono state effettuate per valori dei velocità angolare compresi tra i
950 ed i 1750 [rpm], con passo di 100 [rpm], valori di anticipo compresi tra i 2° ed i 32°,
con passo di 2° e due valori di pressione nel collettore (325 e 700 [mbar]).
Eseguite le prove è immediato calcolare i valori dei coefficienti m e q che compaiono
nella (2.36), mediante le elementari formule relative alla determinazione della retta
passante per due punti:
 y1 = m ⋅ x1 + q
(Eq 3-33)

 y2 = m ⋅ x2 + q
m=
q=
y1 − y 2
(Eq 3-34)
x1 − x 2
x1 ⋅ y 2 − x 2 ⋅ y1
(Eq 3-35)
x1 − x 2
Si arriva così alla determinazione delle mappe del coefficiente angolare m e
dell’intercetta q (Figura 3-7).
116
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
Figura 3-7: andamento dei coefficienti m e q in funzione di velocità angolare ed anticipo
3.1.4 DINAMICA DELL’ALBERO MOTORE
L’esito che le vicende che accadono nelle altre parti del sistema hanno in termini di
variazione della velocità angolare dipende dall’equilibrio dinamico dell’albero motore.
Sull’albero motore agisce il contributo positivo dato dalla coppia indicata prodotta dal
movimento del pistone all’interno del cilindro (o dei pistoni all’interno dei cilindri) e vari
contributi negativi. Questi, in condizioni di funzionamento al minimo, si possono
ricondurre fondamentalmente a due: coppia d’attrito e coppia resistente, dovuta al
trascinamento dei vari organi ausiliari.
La coppia d’attrito è la coppia persa a causa dell’attrito, appunto, durante l’esercizio del
motore, in tutti i contatti meccanici tra le varie componenti in movimento del motore
stesso: essa dipende notevolmente dalle condizioni di funzionamento. In particolare può
essere molto grande in corrispondenza di avviamenti a freddo, essendo profondamente
legata alla variazione delle caratteristiche lubrificanti dell’olio motore in funzione della
temperatura. Inoltre cresce al crescere della velocità angolare del motore, e dipende,
anche se in maniera molto meno sensibile, dal carico (ovvero dalla pressione nel
collettore di aspirazione).
Gli ausiliari che il motore deve trascinare sacrificando parte della sua coppia indicata
possono invece essere identificati, oltre che negli organi meccanici necessari per il
funzionamento stesso del motore, quali albero a camme, valvole, pompa dell’olio, pompa
dell’acqua, ecc., anche dall’alternatore, e, eventualmente dal compressore del
condizionatore.
117
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
Alcuni dei carichi imposti da questi ausiliari dipendono dalle condizioni di
funzionamento del motore, altri (alternatore), dalla richiesta di potenza elettrica, altri
ancora (compressore dell’aria condizionata) sono invece prevedibili, e si potrà dunque
attuare, tramite il sistema di controllo, una correzione nota, per evitare che la loro entrata
in funzione perturbi eccessivamente il sistema.
Dunque la coppia prodotta nei cilindri viene inviata come ingresso al sistema che simula
la dinamica dell’albero motore. In questo sottosistema è calcolata la velocità di rotazione
del motore secondo l’equazione:
•
J ω = Ti − Ta − Tc (Eq 3-36)
Integrando la (Eq 3-36) si ottiene la velocità di rotazione:
ω=∫
Ti − Ta − Tc
(Eq 3-37)
J
La velocità di rotazione, dunque, è l’uscita del sistema albero motore.
La coppia di attrito può essere calcolata come differenza tra i valori medi di coppia
indicata e coppia di carico:
Ta = Ti − Tm (Eq 3-38)
dove Tm è la coppia misurata dal freno, equivalente, concettualmente, alla coppia
resistente.
In realtà questa differenza tiene conto anche della coppia di pompaggio, se la coppia
indicata è calcolata su tutto il ciclo.
Sono reperibili, in bibliografia, modelli matematici atti a prevedere l’effetto dell’attrito e
degli ausiliari primari sulla coppia effettivamente disponibile all’albero, che possono
essere integrati nel modello.
3.1.5 IMPLEMENTAZIONE DEL MODELLO
Il progetto, come detto in precedenza, prevede un modello matematico del motore e del
controllore del minimo e la compilazione di un programma per eseguire la procedura di
“collaudo virtuale” prima di procedere al collaudo reale sul motore al banco che, se in
presenza di una modellizzazione realistica, sarà breve e mirato a sopperire alle situazioni
non simulate dal modello.
118
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
Un modello è un insieme coerente di ipotesi e di equazioni utilizzate per descrivere un
determinato sistema fisico. Esso prevede degli ingressi e delle uscite, gli uni
rappresentativi delle grandezze indipendenti o esterne al sistema, che agiscono su di esso,
e le altre indicative del modo con cui il sistema risponde a tali azioni.
La validazione consiste nell’inserire nel modello gli stessi valori agli ingressi e
confrontare le sue uscite con quelle reali acquisite in sala prove. Opportuni indici
numerici, come lo scarto quadratico medio, danno informazioni sulla bontà del modello
stesso nonché suggerimenti per la correzione delle ipotesi, delle equazioni e delle loro
approssimazioni fatte nella compilazione.
Il modello che ci si appresta a spiegare è stato validato per parti e poi “assemblato”.
In definitiva si tratta di un modello zero-dimensionale essendo temperatura e pressione
assunte uniformi e costanti, così da non dover ricorrere ad equazioni alle derivate
parziali, ai valori medi delle principali variabili, a scatola grigia, data la necessità di
identificazioni sperimentali necessari per il funzionamento di alcune sue parti.
Andando a costruire il modello del motore in Simulink, si dovrà stabilire se farlo
funzionare in base tempo o in base angolo. Come già fatto nel caso della simulazione
usata nell’ambito del controllo del titolo, si è preferito implementare il modello del
sistema fisico su base tempo e quello del controllore su base evento, per meglio
riprodurre da una parte i fenomeni tempo-dipendenti, dall’altra il funzionamento
dell’unità di controllo: se infatti si considera l’equazione valida per il collettore di
aspirazione,
dPm RTm
V T ω
=
maria _ farf − η v _ ass Pamb d m
dt
Vm
Vm Tamb 4π
la derivata temporale di Pm potrebbe essere espressa in base angolo, come
dPm 1 RTm .
Vd
Tm
=
m aria _ farf − η v _ ass Pamb
(Eq 3-39)
dϑ ω Vm
4π ⋅ Vm Tamb
in questo modo, tuttavia, il risultato dipenderebbe dall’esito della simulazione (la velocità
angolare ω), il che potrebbe creare pericolose interazioni tra gli errori sulle due variabili.
Si è quindi proceduto alla costruzione di un modello in base tempo, con step time di 0.01
s. Le dinamiche in gioco, infatti, non richiedono simulazioni più dettagliate.
119
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
Assemblando i vari sottosistemi si ottiene un modello del sistema controllato, che può
essere “collaudato”, comparandone i risultati con quelli ottenuti sperimentalmente: ad
esempio si può osservare il regime di rotazione su cui si colloca l’uscita del modello in
corrispondenza dei valori nominali (o comunque di valori dati, disponibili per un
confronto sperimentale) di apertura della valvola a farfalla ed anticipo, verificando che
questo corrisponda a quello rilevato al banco, oppure si può osservare, ad anticipo e
apertura di farfalla costanti, quale sia il calo di giri dovuto alla sollecitazione con un
carico a gradino.
Figura 3-8: simulazione del sistema controllato
Facendo partire una simulazione in condizioni nominali si ottiene un andamento di
velocità quale quello rappresentato in Figura 3-9. La velocità inizialmente sale, grazie
alla coppia indicata che non è controbilanciata da alcun carico; mano a mano che la
velocità sale, però, comincia a farsi sentire l’effetto della coppia di attrito (proporzionale
alla velocità), e l’accelerazione cala, fino all’assestamento ad una velocità costante
attorno ai 997 rpm. Tale valore dipende profondamente dal modello delle coppie di
attrito: è ovvio che si potrebbe sempre modificare un parametro in modo tale da ottenere
lo stesso risultato, ma un buon modello delle coppie di attrito garantisce il mantenimento
di un errore accettabile su tutto il campo di funzionamento.
120
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
Figura 3-9: velocità nominale
L’applicazione di un disturbo a gradino di ampiezza pari a 5Nm, che interviene quando la
velocità si è già stabilizzata, ha la conseguenza illustrata in Figura 3-10. Come ci si
aspettava, all’inserirsi del carico a gradino, la velocità cala e si assesta su un valore più
basso: si può verificare al banco se l’entità dell’abbassamento di velocità sia verosimile.
Figura 3-10: applicazione di un gradino di 5 Nm
A questo punto si applicherà il modello del controllore del minimo e si eseguiranno le
prove di calibrazione off-line.
121
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
3.2 IL SISTEMA DI CONTROLLO DEL MINIMO
Come si è detto introducendo l’argomento, il sistema di controllo impiegato agisce su due
variabili: l’anticipo di accensione e la posizione della valvola a farfalla. L’errore in
ingresso ai due controllori che gestiscono le rispettive variabili è invece dato dalla
differenza tra la velocità rilevata e quella desiderata.
Il problema fondamentale del controllo sta nell’esigenza di far coesistere i due
controllori: se infatti si impiega l’anticipo perché la sua azione è estremamente rapida, è
altresì vero che, senza prendere le dovute precauzioni, due semplici controllori PI (si
esclude la componente derivativa per il rischio di instabilizzare il controllo) potrebbero
soffrire della diversa dinamica delle correzioni: tutte le correzioni tenderebbero cioè a
saturare l’anticipo, senza coinvolgere la seconda leva, che interverrebbe lentamente,
ovvero quando l’anticipo avrebbe corretto l’errore. Inoltre, in questo modo, si
rischierebbe di far funzionare costantemente il motore con valori di anticipo saturati,
rendendo, di fatto, impossibile un’ulteriore correzione rapida.
Per questi motivi si deve fare in modo che, una volta giunti a regime, ovvero annullato
l’errore, l’anticipo venga riportato in condizioni nominali, con un congruo contestuale
spostamento della valvola a farfalla. Un simile comportamento può essere ottenuto in due
modi: limitando il controllo sull’anticipo ad una pura azione proporzionale all’errore,
oppure impiegando una funzione di raccordo, che, una volta annullato l’errore a regime,
regoli come spiegato sopra l’anticipo e l’apertura della valvola a farfalla.
La prima soluzione, più semplice, potrebbe soffrire di una fastidiosa lentezza nel riportare
il regime al valore nominale, in corrispondenza di piccoli errori di velocità. La seconda,
più complessa, va messa a punto, in particolare nella gestione della variazione di anticipo
a fronte della posizione della farfalla, per errore a regime nullo: in sostanza può essere
problematico definire correttamente la funzione di raccordo. Quest’ultima operazione può
essere effettuata in diversi modi: una possibilità, ad esempio, consiste nel dare correzioni
contemporanee ed opposte ad anticipo e apertura farfalla (ad esempio: diminuzione
anticipo e apertura farfalla), un altro è quello di far diminuire, e “congelare” il valore
dell’anticipo per un tempo determinato, lasciando al controllo in retroazione, ora agente
sulla sola farfalla, l’incombenza di ripristinare il valore di velocità angolare perseguito.
Ovviamente, in entrambi i casi, le correzioni, dovrebbero essere fatte per piccoli passi.
122
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
Per quanto riguarda invece la reazione all’applicazione di carichi noti, si può cercare,
nota la coppia da essi richiesta, di attuare una correzione in open loop preventiva: si
possono cioè stabilire a priori l’apertura della valvola a farfalla e la correzione
sull’anticipo da attuare preventivamente all’applicazione del carico. E` ovvio che questo
si può fare solo quando il sistema di controllo è in grado di conoscere in anticipo la
coppia richiesta dal sistema ausiliario. In tal senso questa correzione può essere attuata
per l’attivazione del compressore dell’aria condizionata, o per l’intervento delle ventole
di raffreddamento del radiatore, che avviene se la temperatura del liquido di
raffreddamento supera un dato valore. Anche in quest’ultimo caso, nota la potenza
elettrica richiesta dalle ventole ed il rendimento del motore elettrico e dell’alternatore, è
possibile risalire alla conseguente richiesta di coppia all’albero motore. Il modello del
sistema controllato illustrato in precedenza può allora essere impiegato per la
determinazione delle traiettorie ottimali delle due variabili.
Volendo schematizzarne il funzionamento (Figura 3-11), si può dire che il valore della
velocità di rotazione in ingresso viene valutato dal blocco “VALUTAZIONE
DELL’ERRORE” che, se ravvisa uno scostamento dal valore immesso come riferimento,
invia in uscita un segnale di errore. Questo segnale di errore viene raccolto dai blocchi
“NEW T.A.” e “NEW S.A.”; tali blocchi raccolgono anche informazioni relative ai valori
correnti di, rispettivamente, T.A. e S.A. e provvedono a fornire dei nuovi valori di T.A. e
S.A. atti a correggere l’errore sulla velocità di rotazione. Il blocco “ABILITAZIONE
CORREZIONE FARFALLA” stabilisce se la correzione si deve fare tramite variazione di
T.A. o tramite variazione di S.A.; si sceglie di abilitare la correzione tramite T.A. se ci si
trova fuori da transitori e se il valore dell’errore è superiore ad una certa entità.
Il blocco “CONTROLLO DELLO S.A.” consente di raccordare la correzione tramite S.A.
con una equivalente in termini di T.A. onde poter riportare, passati i transitori, il valore di
S.A. in prossimità di quello di mappa. Infine, il blocco “CATENA APERTA” prevede una
correzione standard in corrispondenza di disturbi standard.
123
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
Figura 3-11: schema del sistema di controllo
3.3 TEST OFF-LINE
Una volta effettuata la calibrazione dei parametri di controllo tramite il modello, è
possibile sottoporre a test il sistema di controllo, ancora off-line.
Si prende anzitutto in considerazione una velocità di riferimento di 950 rpm. Anzi tutto
interessa vedere come si comporta il sistema di controllo in condizioni stabili, senza
disturbi, e verificare se porti il motore a funzionare ad un regime di 950 rpm.
Si procede ad effettuare la simulazione e a verificare l’andamento della variabile
OMEGA:
Appurato che il sistema riesce, agendo su entrambe le variabili a disposizione a portare il
motore “virtuale” a 950 rpm, si prova a vedere cosa accade in corrispondenza di un
disturbo imprevedibile. Per simulare questa situazione si sollecita il sistema con un
gradino di coppia.
Il disturbo si inserirà dopo che il valore della velocità di rotazione si è stabilizzato al
valore di riferimento, in questo caso 950 rpm, ed avrà, in termini di coppia, un’ampiezza
di 5Nm.
124
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
DISTURBO
Figura 3-12: reazione ad un disturbo a gradino di 5 Nm
Quando il disturbo viene a gravare sull’albero motore, si registra una diminuzione della
velocità di rotazione (Figura 3-12). Il controllo, tuttavia, sembra in grado di far fronte a
questa nuova situazione riportando, con modeste oscillazioni, il valore della velocità di
rotazione al valore di riferimento. Il tutto avviene in maniera sufficientemente rapida.
Si è visto dunque che la reazione del sistema è, a livello di effetti sulla variabile
controllata, soddisfacente; si è adesso interessati a vedere come il sistema sia intervenuto
e quali siano stati gli andamenti dell’angolo di farfalla e dell’angolo di anticipo.
Si nota che il sistema è intervenuto sull’angolo di farfalla incrementandone il valore in
modesta entità. Il valore finale di tale variabile risulta essere di 2.24%.
DISTURBO
DISTURBO
Figura 3-13 effetto del gradino di coppia sulle variabili di controllo.
125
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
Il valore dell’anticipo è stato portato invece da 13.5° a 14.7°.
Si può dunque dire che il sistema gestisce senza difficoltà, velocemente e nel modo
desiderato, l’inserimento del disturbo.
Si è provato ad aumentare il modulo del disturbo; anche con un disturbo di 15 Nm la
reazione del sistema rimane soddisfacente, anche se le oscillazioni subite dalla velocità di
rotazione sono più marcate, e le variazioni di T.A. e S.A., operate come correzione, sono
maggiori.
In Figura 3-14 gli andamenti delle variabili sono stati uniti in un unico grafico, in modo
di poter avere un’idea più precisa di cosa avviene all’inserimento del disturbo.
S.A.
VELOCITA’
INSERIMENTO
DISTURBO
T.A.
Figura 3-14: affetti di un gradino di 15 Nm
A questo punto si vuole verificare il comportamento del sistema in seguito ad una
perturbazione sulle variabili di controllo. Per ottenere questo effetto, si ricorre alla parte
funzionante in catena aperta, attuando le correzioni senza che siano applicati
effettivamente i carichi: ci si aspetta che questo comporti una perturbazione della velocità
di rotazione, e, di conseguenza, una reazione della parte di controllo in retroazione.
126
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
La metodologia utilizzata prevede di avviare la simulazione, aspettare che l’andamento
della velocità di rotazione si sia stabilizzato sul valore di riferimento, quindi inserire, ad
esempio, le ventole di raffreddamento.
Dopo aver aspettato che la situazione sia tornata stabile, si disattiva il segnale delle
ventole .
INSERIMENTO
FAN
DISINSERIMENTO
FAN
INSERIMENTO
FAN
DISINSERIMENTO FAN
Figura 3-15: variazioni di anticipo e farfalla indotte
Nella Figura 3-15 è possibile vedere come il segnale di attivazione delle ventole di
raffreddamento porti immediate conseguenze sugli andamenti di T.A. e S.A.
rispettivamente; considerando che ancora al comando FAN non è collegato alcun carico,
si rileva come il sistema assorba le oscillazioni di T.A. e S.A. riportando i loro valori alle
dimensioni più opportune.
Infatti, se si vede cosa è accaduto alla velocità di rotazione del motore durante le
oscillazioni della farfalla e dell’anticipo, si nota che il sistema è riuscito a riportare
sempre la velocità al valore di riferimento.
La velocità di rotazione del motore è variata a causa delle variazioni di S.A. e T.A.
(Figura 3-16: ), ma le oscillazioni del suo valore sono state modestissime: questo denota
prontezza e stabilità del sistema.
127
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
Figura 3-16: effetti delle variazioni di anticipo e farfalla sulla velocità
Si prova quindi a verificare la conseguenza dell’attivazione del comando CLIMA (che
funziona in maniera identica al comando FAN) abbinando, questa volta, l’inserimento di
un carico piuttosto pesante, supposto pari a 12.5Nm.
In Figura 3-17 viene offerta, di nuovo, una visione d’insieme, non in scala, del
comportamento dei vari parametri all’attivazione/disattivazione del climatizzatore.
SA
TA
VELOCITA’
CLIMA
Figura 3-17: attivazione climatizzatore
128
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
Figura 3-18: andamento velocità di rotazione con inserimento/disinserimento del climatizzatore
In Figura 3-18 è possibile osservare l’andamento della velocità di rotazione; data l’entità
del carico inserito, l’effetto di quest’ultimo sulla velocità di rotazione è sensibile.
Tuttavia il sistema di controllo dimostra di cavarsela ancora una volta egregiamente,
riportando sempre la velocità al valore di riferimento.
In Figura 3-19 sono mostrati gli andamenti delle variabili T.A. e S.A. conseguenti
all’inserimento del climatizzatore. Ancora una volta il sistema conferma la sua capacità
di intervenire su entrambe queste variabili in maniera efficiente.
Il sistema quindi supporta l’aumento di carico portando l’apertura della farfalla al 2.9%, e
il valore dell’anticipo a 15.2°. Quando il carico viene disinserito le due variabili tornano
ai valori che avevano prima dell’attivazione del climatizzatore. In realtà, l’anticipo torna
ad un valore un po’ inferiore e l’angolo di farfalla torna ad un valore di poco superiore.
Figura 3-19: andamento anticipo e apertura farfalla con inserimento/disinserimento climatizzatore
129
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
Volendo passare alle prove sperimentali, è necessario implementare il sistema di
controllo del minimo sull’unità di controllo programmabile.
Si stabilisce quindi la posizione che tale sistema ha all’interno del modello Simulink che
realizza la ECU, le condizioni sotto le quali il controllore viene attivato e con quale
frequenza può eseguire le operazioni richieste.
Si mostra (Figura 3-20), a questo scopo, l’interno del blocco ECU, dove si mette in
evidenza tutto l’apparato del minimo.
Il blocco di cui si sta parlando, si è detto, si trova all’interno del blocco ECU, il che
significa che il sistema opera ogni quarto di ciclo (trigger ogni 180° di rotazione).
Figura 3-20: blocco di controllo del minimo, all’interno di ECU
Dalla posizione centrale del blocco e da come vengono trattati i segnali, si intuisce il
ruolo importante svolto dal controllo del minimo: qualsiasi richiesta di posizione farfalla
e di anticipo accensione, prima di essere realmente utilizzata, viene elaborata dal
controllo del minimo; questo vale sempre, in tutti i punti di funzionamento del motore.
Se sussistono le condizioni che attivano il controllo, le due grandezze vengono
manipolate in base ai dettami del controllore; in caso contrario, se il motore si trova
lontano dal regime minimo, i due valori in ingresso sono lasciati invariati.
Quanto detto rappresenta l’obiettivo finale, attuabile solamente con un controllo del
minimo affidabile.
È vero che il controllore del minimo dà sempre in uscita una richiesta di apertura della
farfalla e di anticipo d’accensione ,sulla base delle stesse due grandezze appena misurate,
ma è evidente che prima di affidare a tale controllore l’intera responsabilità delle due
130
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
richieste, si sono effettuate alcune prove dove, per motivi di sicurezza, si è data la
possibilità di escludere l’idle_control, grazie a delle costanti di attivazione.
Figura 3-21: implementazione del controllore
La prima costante a cui ci si riferisce è denominata “normale” ed è evidenziata in figura
Figura 3-21; questo parametro gestisce la scelta fra la posizione della farfalla in uscita dal
blocco controllo attuatori (sempre in Figura 3-21) e quella proveniente dal blocco ECU,
elaborata dal controllo del minimo. Se normale=0 il blocco del minimo viene saltato.
Questo permette una disattivazione a valle: il sistema è attivo ma le sue direttive non
vengono attuate.
La seconda costante di sicurezza è “attiva minimo” ed è posizionata all’interno del blocco
ECU, visibile in Figura 3-20; anche in questo caso, se attiva minimo=0, il controllo del
minimo viene by-passato e tutto procede come se il blocco non ci fosse operando, in
questo caso, una disattivazione a monte: il blocco del minimo viene totalmente escluso.
In entrambi i casi, se le costanti sono unitarie (o comunque maggiori di 0.5, soglia dello
switch), il controllo del minimo è reso operativo all’interno del modello.
Una volta stabilita l’operatività dell’idle_control, per provocarne l’attivazione occorre
che siano verificate alcune condizioni: la velocità di rotazione dell’albero motore (media
fra il penultimo e l’ultimo valore di velocità istantanea acquisiti) deve essere inferiore a
131
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
1700 rpm; la posizione della farfalla richiesta dall’utente deve essere inferiore alla
posizione della farfalla eventualmente comandata dal controllore del minimo.
Se entrambe le condizioni sono verificate (sono legate da un AND logico), la posizione
della farfalla e l’anticipo di accensione vengono prelevati dall’uscita del controllore del
minimo, altrimenti vengono attuati l’anticipo di mappa e l’apertura della farfalla
desiderata dal guidatore.
Si motiva la scelta delle due condizioni dicendo che, qualora la velocità fosse superiore al
limite stabilito, il motore non si troverebbe ad operare nelle condizioni di minimo. Se il
motore sta girando a 2000 rpm, anche se viene richiesta un’apertura di farfalla nulla, il
controllore non entra in funzione perché tale richiesta può essere dettata, ad esempio, dal
fatto che il guidatore sta cambiando; tuttavia, se così non fosse e l’apertura farfalla
continuasse ad essere nulla o comunque inferiore a quella calcolata dal controllore, la
velocità di rotazione dell’albero comincerebbe a calare ed il controllo del minimo si
attiverebbe a 1700 rpm, valore che gli consente di agire evitando lo spegnimento del
motore; va infatti detto che il valore di velocità immesso come riferimento, in questo caso
1200 rpm, è sensibilmente lontano dalla soglia di attivazione.
Anche nel caso in cui si registri una velocità inferiore a 1700 rpm ma una richiesta di
apertura della farfalla da parte del guidatore superiore a quella proposta dall’idle_control,
il motore non si trova in condizioni di funzionamento al minimo: ciò significa che,
nonostante la velocità sostenuta sia bassa, il guidatore sta accelerando, mantenendo
autonomamente il controllo della situazione.
Non si è ancora puntualizzato che, se entrambe le condizioni sono verificate,
intervenendo il controllore, viene di fatto escluso il guidatore: la sua richiesta di farfalla
viene in questo caso ignorata realizzando così un sistema del tipo Drive By Wire.
3.4 PROVE SPERIMENTALI
Inserito il controllore nel sistema di controllo integrato del motore e del banco, sono state
effettuate numerose prove per verificarne il corretto funzionamento e la sua affidabilità.
Trovandosi a funzionare all’interno di un sistema diverso da quello in cui era stato
implementato (modello del motore realizzato tramite Simulink), il controllore ha bisogno,
per funzionare in maniera soddisfacente, di alcune modifiche.
132
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
La più banale riguarda la velocità di riferimento: il motore montato al banco, infatti, non
viene fatto funzionare a basse velocità di rotazione, per evitare eccessive vibrazioni del
banco. E’ dunque necessario cautelarsi imponendo una velocità di rotazione superiore ai
1000 rpm. Durante le prove sono state impostate velocità di riferimento tra i 1000 edi
1500 rpm.
Fatte le opportune modifiche, dunque, si procede alle verifiche sperimentali. Ogni
condizione operativa viene monitorata ed acquisita per 100 cicli del motore.
Impostata una velocità di riferimento di 1400 rpm, si procede alla simulazione
dell’inserimento di un carico; l’effetto desiderato si ottiene variando la corrente di
alimentazione del freno da 11.5% a 8.5%.
Figura 3-22: andamento sperimentale di anticipo, apertura farfalla e velocità
In questo caso è come se si fosse tolto un carico, quindi il motore tende ad accelerare; il
controllore, di conseguenza, diminuisce il valore dell’anticipo e dell’angolo di farfalla,
riportando il regime al riferimento impostato.
Il funzionamento è piuttosto regolare e il controllore riesce a correggere un errore sui giri
dell’albero motore in circa 20 cicli motore (a 1400 rpm, 20 cicli sono circa 2 secondi) La
sovraelongazione, tuttavia, è troppo alta.
Si precede adesso al cambiamento della velocità di riferimento, che dai 1600 rpm viene
portata a 1050 rpm.
133
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
[rpm]
rpm
Figura 3-23: abbassamento della velocità obiettivo
Il valore di corrente sulla bobina del freno a correnti parassite viene mantenuto, in questo
caso, costante: il sistema di controllo del minimo, ricevendo il comando di abbassare la
velocità angolare obiettivo, diminuisce l’anticipo e chiude la valvola a farfalla.
Le prove sperimentali confermano quindi il corretto funzionamento del controllore. Per
quanto riguarda la sua prontezza, essa è migliorabile, a causa di un non perfetto
intervento della funzione di raccordo.
Sono allo studio soluzioni, sia tramite l’eliminazione della correzione proporzionale per
l’anticipo, sia mediante la riprogettazione della funzione di raccordo e del suo intervento.
La prima, già sperimentata al banco, ha fornito prestazioni soddisfacenti, tanto in termini
di prontezza quanto di precisione, come si può verificare in Figura 3-24.
134
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
30
Brake Torque [Nm]
Spark Advance [deg]
35
25
15
Throttle Opening [%]
Engine speed [rpm*100]
20
10
5
0
0
1
2
3
4
5
Time [s]
6
7
8
9
10
Figura 3-24: controllo del minimo con controllore proporzionale su S.A. e PI su T.A.
Si può notare come, a fronte di una repentina richiesta di cambiamento della velocità
obiettivo (da 1200 a 1600 [rpm]) il robusto intervento delle correzioni proporzionali
sull’anticipo di accensione e sulla posizione della valvola a farfalla consenta di portare la
velocità di rotazione da 1200 a 1500 [rpm] in meno di tre secondi, e che la componente
integrale operante sulla posizione della valvola a farfalla consenta il raggiungimento del
valore obiettivo, con un transitorio un po’ più lento.
Altre prove possono dimostrare l’efficacia del controllore così determinato: sottoponendo
il motore a brusche variazioni di carico, ad esempio, si può verificare la capacità, da parte
del sistema di controllo, di mantenere la velocità angolare vicina al valore imposto. In
Figura 3-25, ad esempio, si osserva come, a fronte di una variazione di coppia da 12 a 6
[Nm], la velocità angolare del motore si mantenga attorno al valore obiettivo di 1100
[rpm], non superando mai il limite dei 1200 [rpm]. L’anticipo, una volta esaurito il
transitorio, viene riportato al valore nominale, mentre la posizione della farfalla rimane
più chiusa, a causa del contributo della componente integrale.
135
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
Brake Torque [Nm]
14
12
10
8
Throttle Opening [%]
Engine speed [rpm*100]
Spark Advance [deg]
16
6
4
2
0
1
2
3
4
5
Time [s]
6
7
8
9
10
Figura 3-25: controllo del minimo. Risposta ad una brusca diminuzione di coppia di carico.
Tale comportamento è ribadito anche in Figura 3-26: al passaggio dai 6 ai 12 [Nm] di
coppia di carico si assiste ad un’oscillazione che porta la velocità di rotazione a sfiorare i
1000 [rpm], seguita dal rientro a 1100 [rpm].
20
Brake Torque [Nm]
18
16
14
12
10
8
Throttle Opening [%]
Engine speed [rpm*100]
Spark Advance [deg]
22
6
4
2
0
0
1
2
3
4
5
Time [s]
6
7
8
9
10
Figura 3-26: controllo del minimo. Risposta ad un brusco aumento di coppia di carico.
136
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
3.5 LISTA DEI SIMBOLI
u velocità de fluido
ρ densità
p pressione
z quota
g accelerazione di gravità
R perdite
β è il coefficiente di perdita
A area di passaggio nelle varie sezioni
Cd coefficiente di efflusso
mfuel massa di benzina iniettata
K1
[µs/mg] funzione di guadagno dell’iniettore, in funzione della depressione nel
collettore
K2 correzione in funzione della tensione di batteria
K3 (V_batt) [µs] tempo di offset
K4(p_coll) [µs]
p0 pressione ambiente
T0 temperatura ambiente;
z è il numero dei cilindri ;
n [giri/secondo]; N [giri/minuto]; ω [rad/secondo]: giri motore
ηv_rel è il rendimento volumetrico relativo,
ρm è la densità dell’aria dentro al collettore,
Vd cilindrata
Vm, Pm e Tm volume, pressione, temperatura del collettore di aspirazione
R costante dell’aria.
Tr è la coppia resistente;
J è l’inerzia del motore ridotta al suo albero [kg·m2];
Ti è coppia indicata;
Ta è la coppia di attrito;
Tc sono i carichi (sia ausiliari vitali che ausiliari esterni).
137
PROTOTIPAZIONE RAPIDA: STRATEGIA DI CONTROLLO DEL MINIMO
3.6 BIBLIOGRAFIA
[1]. John S. Mills, Multivariable Control of Engine Idle Speed, SAE Technical Paper
N. 970611.
[2]. Mitsunobu Kajitani, Kenzo Nonami, High Performance Idle Speed Control
Applying the Sliding Mode Control with H Robust Hyperplane, SAE Technical
Paper N. 2001-01-0263.
[3]. Paul Bromnick, Development of a Model Predictive Controller for Engine Idle
Speed using C-power, SAE Technical Paper N. 1999-01-1171.
[4]. Minesh A Shah, Matthew A, Franchek, Recent Advancements in I.C. Engine
Robust Speed Controllers, SAE Technical Paper N. 971568.
[5]. Stephen Yurkovich, Melinda Simpson, Crank-Angle Domain Modeling and
Control for Idle Speed, SAE Technical Paper N. 970027.
[6]. Heywood J.B., Internal Combustion Engine Fundamentals, McGraw hill, Inc.,
1988.
[7]. Levine W., Control System Application, CRC Press, 1999.
[8]. U. Kiencke, L. Nielsen, Automotive Control Systems for engine, driveline and
vehicle, Springer – SAE International - 2000
138
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
4
PROTOTIPAZIONE
RAPIDA:
STRATEGIE
DI
DIAGNOSI
Le più recenti normative riguardanti l’omologazione dei veicoli mossi da motori a
combustione interna (US Federal Level II, ed EURO IV), prevedono, oltre alle
imposizioni sul rispetto di limiti sulle emissioni inquinanti, anche una garanzia che,
eventuali problemi che affliggessero il sistema di abbattimento delle emissioni, possano
essere diagnosticati.
Da questo punto di vista la diagnosi delle mancate combustioni, nei motori ad accensione
comandata, sicuramente occupa un ruolo di primo piano. La loro immediata conseguenza
sulle emissioni inquinanti così come il potenziale danneggiamento che causerebbero al
catalizzatore, fanno si che la diagnosi sia richiesta in quasi tutte le condizioni di
funzionamento del motore.
Il sistema di controllo in tempo reale, come si è mostrato al paragrafo 1.9, è stato
impiegato anche per indurre malfunzionamenti. Lo scopo è evidentemente quello di
simulare le reali condizioni in cui tali malfunzionamenti si possono presentare sul
veicolo, rendendo possibile l’elaborazione di una strategia di diagnosi. Evidentemente è
necessario avere l’accesso alle variabili di controllo (ad esempio: tempo di iniezione,
tempo di carica della bobina) per poter far venire meno le attuazioni: una centralina
originale non consentirebbe, se non opportunamente “aperta” all’esterno, di indurre
malfunzionamenti programmabili. D’altra parte non sarebbe soddisfacente eliminare
fisicamente la connessione con gli attuatori (una candela o un iniettore), perché questo
stratagemma consentirebbe di simulare una sola condizione di malfunzionamento
(misfire o misfuel sistematico): l’obiettivo è invece quello di poter scegliere liberamente
la successione dei malfunzionamenti da impartire.
In questo capitolo si mostra come i risultati ottenuti dalle prove al banco effettuate con il
sistema di controllo in tempo reale possano essere impiegati per elaborare strategie
diagnostiche. Verrà quindi brevemente descritta l’operazione di esecuzione delle prove,
per poi dare spazio alla spiegazione delle esigenze diagnostiche. Si passerà poi alla fisica
139
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
del fenomeno ed infine all’elaborazione di una strategia per il riconoscimento della causa
delle mancate combustioni (misfire o misfuel).
4.1 SPERIMENTAZIONE: INDUZIONE DI MISFIRE E MISFUEL
I test necessari per questa applicazione diagnostica richiedono innanzi tutto l’esecuzione
di prove in cui manchino, combustioni (per esempio una ogni 20 cicli), vuoi a causa di
mancate accensioni, vuoi a causa di mancate iniezioni. Dal momento che si vuole isolare
il fenomeno della mancata combustione, si impone l’uso di un sistema di controllo in
catena aperta, per evitare che la retroazione ‘inquini’ i risultati sperimentali. La centralina
elettronica virtuale è stata quindi impiegata imponendo le attuazioni secondo quanto
richiesto dalle mappe utilizzate con controllo in open loop (eccezion fatta per le induzioni
dei malfunzionamenti).
D’altra, parte essendo interessati anche all’evolvere della velocità angolare a seguito della
mancata combustione, si è dovuto rinunciare al controllo di velocità da parte del
controller del freno a correnti parassite, impiegato invece in modalità tale da mantenere
costante il valore della corrente sugli avvolgimenti della bobina e la posizione di apertura
della valvola a farfalla.
Le stesse sequenze di induzione dei malfunzionamenti sono state poi variate, attuandone
prima uno ogni venti cicli di funzionamento, poi due consecutivi ogni venti, poi cinque
consecutivi ogni venti. Tale decisione è da imputare alla volontà di mettere in luce il
comportamento in diverse condizioni plausibili, e di conseguenza la capacità di diagnosi
in tali condizioni.
140
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
Manifold Air Pressure [mbar]
925
850
775
700
625
550
475
400
325
1250
1750
2250
2750
3250
3750
Engine Speed [rpm]
4250
4750
Figura 4-1: mappa dei punti prova
Scelte le modalità di prova, è stata determinata una griglia di punti di funzionamento che
fosse in grado di mettere in luce gli aspetti di cui sopra in molteplici situazioni (Figura
4-1).
I segnali sono stati campionati in base angolo, con una risoluzione di circa tre gradi
angolari; per quanto riguarda quello di velocità angolare si è usata l’informazione dei
tempi-dente, campionata a 20 [MHz]. Ovviamente, i segnali più importanti per questa
analisi sono risultati essere quelli di pressione nel cilindro e rapporto aria/combustibile:
per il primo è stato utilizzato un sensore piezo-resistivo Kistler 6117 BEIC, con relativo
amplificatore di carica 5006, per il secondo una sonda lineare ed un controller Horiba
(MEXA-700λ).
4.2 DISTINZIONE MISFIRE-MISFUEL: MOTIVAZIONI
Le mancate combustioni potrebbero essere causate tanto da mancate accensioni quanto da
mancate iniezioni. Potrebbe allora avere interesse diagnostico la possibilità di distinguere
i due tipi di malfunzionamento, anche se nessuna normativa effettivamente lo impone. Se
infatti, da una parte, i misfire sono responsabili della diretta introduzione di miscela
incombusta allo scarico, nel caso dei misfuel, tale miscela ha un contenuto di
combustibile estremamente limitato, di conseguenza, sia dal punto di vista delle
141
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
emissioni immediate, che da quello dei danni al catalizzatore, si può affermare che le
mancate iniezioni sono meno dannose.
Un primo possibile impiego di una tecnica di distinzione potrebbe riguardare allora
l’applicazione di diverse strategie di recovery, una volta che il malfunzionamento sia
stato diagnosticato. Solitamente, infatti, non appena venga diagnosticata una mancata
combustione che si ripresenti con una data frequenza, viene disattivato il controllo del
titolo in retroazione, e le attuazioni (iniezione ed accensione) sul cilindro imputato di
esserne responsabile vengono disabilitate. Questa strategia si deve alla considerazione
che, al di sopra di una determinata frequenza, l’evento del misfire determina danni
permanenti al catalizzatore. Lo stesso costruttore, in fase di omologazione, deve
dichiarare quale sia la soglia al di là della quale è bene non spingersi in termini di
percentuale dei cicli anomali rispetto a quelli normali. Anche se il provvedimento evita la
produzione di grandi quantità di inquinanti e il rischio di danneggiamento del sistema di
post-trattamento dei gas, permangono due limiti: innanzi tutto la guidabilità, eliminando
un cilindro, peggiora notevolmente, in secondo luogo la gestione del titolo della miscela
viene fatta in catena aperta, con ovvie conseguenze sulla precisione del risultato. D’altra
parte il fatto che da un cilindro, in fase di scarico, esca solo aria, rende impossibile
l’impiego del segnale di una normale sonda HEGO per gestire la retroazione. Inoltre,
essendo un cilindro disattivato, il catalizzatore verrebbe lavato con aria una volta al ciclo:
queste conseguenze potrebbero portare ad un funzionamento non ottimale del sistema di
abbattimento delle emissioni.
Se l’applicazione di un simile protocollo è pressoché inevitabile nel caso in cui la causa
del malfunzionamento sia una mancata accensione, lo stesso non si può dire per una
mancata iniezione. La soglia di tollerabilità, sia per le emissioni che per il pericolo di
danneggiamento del catalizzatore potrebbe essere in questo caso molto diversa,
consentendo, proprio perché il misfuel è più sopportabile, di continuare ad usare il
controllo in retroazione con sonda lambda, mantenendo attivi tutti i cilindri. Questo
porterebbe ad un miglioramento della guidabilità e delle emissioni durante la fase di
recovery, grazie alla permanenza del controllo del titolo in retroazione. Ovviamente, in
corrispondenza del malfunzionamento, il segnale della sonda darebbe informazioni
fuorvianti (una mancata iniezione sarebbe vista come una combustione estremamente
142
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
magra), ma questo succederebbe in punti isolati. Per di più, la risposta del controllore
sarebbe quella di ingrassare la miscela, con conseguente produzione di HC ed NOx, ma il
catalizzatore sarebbe in condizioni favorevoli al loro abbattimento, data la grande
quantità di aria che lo attraversa in presenza di misfuel.
Si può poi aggiungere che la possibilità di distinguere i due malfunzionamenti porterebbe
vantaggi in sede di officina: se i codici di malfunzionamento memorizzati in centralina
fossero diversi nei due casi, si potrebbe andare a colpo sicuro nella riparazione.
4.3 FENOMENOLOGIA DELLE MANCATE COMBUSTIONI
In letteratura si trovano molte applicazioni di diverse metodologie per la diagnosi delle
mancate combustioni: molte di esse sono basate sull’osservazione delle loro conseguenze
sulla velocità angolare, impostate sia con analisi in base tempo che di tipo tempofrequenza; altre impiegano le informazioni provenienti da accelerometri montati sulla
testata, altre ancora la pressione dei gas di scarico. Anche la sonda lambda UEGO può
essere impiegata per questo fine: come si vedrà in seguito, essa garantisce anche la
possibilità di distinguere i fenomeni di mancata accensione da quelli di mancata
iniezione. Solitamente le metodologie diagnostiche si basano proprio sull’osservazione
delle conseguenze che l’evento da diagnosticare ha sui segnali osservati. Conseguenze
tipiche di una mancata combustione sono, ad esempio, un calo repentino e localizzato di
coppia indicata, che causa vibrazioni e oscillazioni nella velocità angolare, variazioni di
pressione allo scarico, variazioni della quantità di ossigeno libero contenuto nei gas di
scarico.
Molti sono i fenomeni che interagiscono durante e dopo l’evento da diagnosticare: il loro
effetto può dipendere dalla causa del malfunzionamento, aiutando in questo modo il suo
riconoscimento. L’effetto del misfire e del misfuel sui tipici “osservatori” del
funzionamento del motore (velocità angolare, segnale dell’accelerometro, ecc.), sono, in
prima approssimazione, simili: il loro effetto è comunque un improvviso calo di coppia
indicata. La composizione dei gas di scarico, invece è assai diversa: in un caso il
combustibile non è iniettato, nell’altro la miscela non viene accesa. Oltre alla
conseguenza diretta su quello che un sensore UEGO posto allo scarico può misurare, si
143
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
deve pensare anche a quella che tale caratteristica implica sulla generazione di coppia nel
medesimo cilindro, durante i cicli immediatamente successivi al malfunzionamento.
Nel caso di un misfire la fase di formazione della miscela è normale, l’anomalia consiste
nell’assenza di un innesco per l’inizio della combustione. In questo caso, all’apertura
delle valvole di scarico, uscirà una miscela di aria e combustibile, nella proporzione
determinata dal sistema di controllo. Se la combustione successiva avverrà correttamente
sarà influenzata dal fatto che, il volume normalmente occupato dai gas residui, sarà in
questo caso riempito da una miscela di aria e combustibile, caratterizzata da una
temperatura sicuramente inferiore a quella dei gas residui di una normale combustione:
questo significa che la massa di miscela introdotta nel cilindro di ciclo successivo ad un
misfire sarà superiore a quella introdotta in un normale ciclo di funzionamento.
Il fenomeno del misfuel, ovvero della mancata combustione causata dall’assenza
dell’iniezione, ha una diversa influenza sul ciclo successivo: dal momento che non è stato
iniettato combustibile, nel cilindro entrerà aria che, passando attraverso il runner di
aspirazione, trascinerà con sé parte del combustibile presente nel film fluido depositato
nel collettore di aspirazione. Ovviamente questo sarebbe vero per motori con iniezione
esterna al cilindro, in caso di motori ad iniezione diretta, invece, si potrebbe ritenere, con
buona approssimazione, che nel cilindro entri solo aria. La combustione immediatamente
successiva ad un misfuel risentirà dell’evento che l’ha preceduta, in maniera diversa
rispetto a quanto si è osservato nel caso del misfire: il gas residuo sarà infatti costituito da
una miscela magra (o addirittura solo da aria, per motori GDI), e sarà presente in quantità
maggiore, rispetto a quanto succede in una normale combustione, in ragione della sua
bassa temperatura. La combustione successiva sarà dunque magra, per effetto del
fenomeno dell’egr interno. In motori ad iniezione nel collettore, poi, si dovrà tenere conto
del fatto che parte della massa di combustibile iniettata al ciclo successivo dovrà essere
impiegata per ricostituire il film liquido.
E` possibile osservare queste diversità attraverso l’analisi dei cicli di pressione indicata e,
da questi, del rilascio di calore netto, acquisiti in presenza dei malfunzionamenti.
144
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
4.3.1 IL CASO MISFIRE
Per quanto detto ci si aspetterà, nel caso di una combustione post-misfire, l’introduzione
di una maggiore quantità di energia, e, di conseguenza, lo sviluppo di un maggiore lavoro
indicato. Inoltre, data l’assenza di gas inerti in camera di combustione, si avrà uno
sviluppo più rapido della combustione stessa, ovvero una curva di rilascio del calore più
ripida. I dati sperimentali acquisiti al banco confermano quanto detto, mostrando, da una
parte, consistenti differenze nella pressione media indicata (Tabella 4-1), e, dall’altra, nel
picco di pressione (Figura 4-2) e nella pendenza della curva di rilascio di calore (Figura
4-3). Il ciclo di pressione indicata, in particolare, è pressoché identico, nelle fasi di
aspirazione e scarico, per il ciclo standard ed i cicli post-misfire, il che suggerisce che le
differenze nella fase di combustione non sono dovute a improvvise oscillazioni della
pressione nel condotto di aspirazione o nelle diverse contropressioni allo scarico. E` poi
evidente che, nei cicli post-misfire, il picco di pressione più elevato non è seguito da un
abbassamento della pressione nella successiva fase di espansione, il che suggerisce
effettivamente che il lavoro prodotto sara` maggiore. A parità di pressione nel collettore
di aspirazione, dunque, la combustione post-misfire rilascia una maggiore quantità di
energia, e più rapidamente rispetto ad un ciclo standard.
45
post-misfire: single cycle
post-misfire: single cycle
post-misfire: single cycle
post-misfire: single cycle
standard: mean over 85 cycles
In-Cylinder pressure [bar]
40
35
30
25
20
15
10
5
0
0
90
180
270
360
450
Crankshaft Angle [deg]
540
630
720
Figura 4-2: Pressione all’interno nel cilindro in combustioni post-misfire (0.925 bar @ 1750 rpm)
145
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
Queste impressioni trovano conferma nella maggiore pressione indicata rilevata nei cicli
seguenti il malfunzionamento: la differenza può raggiungere valori compresi tra il 10 ed
il 25%. Si può notare che, tendenzialmente, essa cala all’aumentare della pressione nel
collettore, confermando che l’effetto principale è quello dovuto alla sostituzione dei gas
esausti con miscela incombusta durante la fase di incrocio. E` infatti lecito aspettarsi che
la massa di gas residui imprigionati nel volume della camera di combustione alla fine
della fase di aspirazione dipenda, oltre che dalla temperatura, anche dalla pressione nel
collettore: a carichi più bassi è infatti maggiore la differenza tra la pressione nel condotto
di scarico e quella nel collettore di aspirazione, e tale differenza rappresenta la spinta
propulsiva per i gas che si muovono dallo scarico all’aspirazione.
MAP [bar]
STD IMEP [bar]
POST IMEP [bar]
0.325
1.23
1.56
0.400
2.28
2.79
0.475
3.13
3.70
0.550
3.86
4.49
0.625
4.54
5.32
0.700
5.38
6.01
0.775
6.03
6.75
0.850
6.83
7.59
0.925
7.44
8.75
Tabella 4-1: pressione media indicata per combustioni standard e post-misfire (media su 5 cicli di
malfunzionamentoe 80 cicli standard): 1750 rpm
Questo suggerisce, tra l’altro, che osservazioni di questo tipo possono essere utili nella
valutazione di massima della frazione di gas residuo.
146
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
1200
Net Heat Release [J]
1000
800
600
post-misfire: single cycle
post-misfire: single cycle
post-misfire: single cycle
post-misfire: single cycle
post-misfire: single cycle
standard: mean over 85 cycles
400
200
0
360
370
380
390
400
410
Crankshaft Angle [deg]
420
430
440
Figura 4-3: rilascio del calore per combustioni standard e post-misfire (0.925 bar @1750 rpm)
L’andamento della curva di rilascio del calore mette in evidenza sia la maggiore quantità
di energia rilasciata che la maggiore rapidità del rilascio. In realtà, per poter fare
valutazioni a tal proposito, sarebbe più opportuno adimensionalizzare le curve di rilascio:
il fatto che le curve riportate in blu in Figura 4-3 siano più ripide, potrebbe dipendere
anche dalla maggiore quantità di energia rilasciata (nello stesso arco angolare).
Si può allora considerare il tempo impiegato per passare dal 10 all’80 % del valore
massimo, supponendo che questo corrisponda alla percorrenza, da parte del fronte di
fiamma, di metà dell’alesaggio. E` così possibile passare al concetto di velocità di
combustione. Questo passaggio è mostrato in Figura 4-4, in cui si può osservare come
l’assenza di gas inerte in camera di combustione porti a una precoce liberazione di
energia, e ad un più breve intervallo temporale necessario a coprire l’intervallo 20%-80%
del calore rilasciato. Anche questo parametro potrebbe essere impiegato per stimare la
presenza di gas residuo, dal momento che l’aumento di velocità di combustione è da
imputare alla sua assenza. E` tuttavia improbabile ottenere una stima precisa della massa
di gas ricircolato, dal momento che la velocità di combustione è un parametro che risente
dell’effetto di molti fattori (turbolenza, titolo della miscela nei dintorni degli elettrodi, a
147
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
parità di anticipo), che rischierebbero di mascherare l’effetto della frazione di gas esausto
presente nel cilindro.
1200
Net Heat Release [J]
1000
800
600
Post-Misfire (50 cycles)
Standard (850 cycles)
400
200
0
0
0.002
0.004
0.006
0.008
Time [s]
0.01
0.012
0.014
Figura 4-4: determinazione della velocità di combustione (750mbar@2250rpm, medie su 50 misfire e
850 cicli standard)
Il rilascio di calore, come noto, può essere determinato a partire dalla pressione
all’interno del cilindro secondo le (Eq 4-1), (Eq 4-2).
 T'
 γ − 1  dp dQht
γ
dQch
dV
1
dp
T
1

=
p
+
V
+ +Vcr  +
+
ln
+
(Eq 4-1)
dϑ
γ − 1 dϑ γ − 1 dϑ
 TW TW (γ − 1) bTW  γ '−1  dϑ dϑ
dQch Ab ⋅ ub
LHV
= & ⋅ ηC ⋅
⋅ ρm
(Eq 4-2)
A
e
ϑ
dϑ
+1+
F
F
Come si può notare in (Eq 4-2), molti termini sono influenzati dall’evento del misfire: la
velocità di combustione, presente al numeratore, cresce; inoltre il termine e al
denominatore, che tiene conto della presenza di gas combusto, si annulla (il gas residuo
presente nel ciclo di malfunzionamento in questa fase viene trascurato); infine, la densità
media della miscela cresce, sia a causa della minore temperatura del gas residuo, cui si è
148
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
già accennato, sia della minore temperatura delle pareti del cilindro e del cielo del
pistone, raffreddati dal ciclo senza combustione.
Tutti questi termini sono dunque esaltati dall’evento del misfire, e contribuiscono, al ciclo
successivo, ad accelerare il rilascio del calore, che può essere espresso, in questo caso,
come:
dQchPM Ab ⋅ ubPM
LHV
=
⋅ ηC ⋅
⋅ ρ mPM
&
(Eq 4-3)
A
ϑ
dϑ
+1
F
Effettivamente, in (Eq 4-1), bisognerebbe tenere conto delle variazioni di g, g’, T’,
dQht/dq e Tw, che tuttavia hanno minore importanza.
4.3.2 IL CASO MISFUEL
Nel caso in cui avvenga un misfuel, il combustibile che entra nel cilindro proviene,
facendo riferimento ad un motore con iniettori posizionati nel runner di aspirazione, dalla
massa depositata sulle pareti del runner in forma liquida. Tuttavia, solitamente, tale
quantità non è sufficiente a garantire la formazione di una miscela incendiabile: in questo
caso, al ciclo successivo, i gas residui essendo costituiti da miscela magra, da una parte
garantiranno la presenza di un contributo supplementare di energia chimica introdotta,
dall’altra comporteranno un aumento del rapporto A/F medio della miscela presente nel
cilindro. La quantità di combustibile iniettata nel ciclo post-misfuel, poi, dovrà in parte
essere impiegata per ricostituire la massa di film liquido corrispondente alle condizioni di
funzionamento del motore: la massa di combustibile depositata sul runner in forma
liquida agisce insomma con effetto capacitivo. La prima combustione dopo il
malfunzionamento sarà dunque più magra della media, anche se non necessariamente
meno energetica. Ipotizzando che i fenomeni in questione possano essere descritti
secondo il modello di Aquino (si veda il paragrafo 2.5), si può cercare di valutare il
rapporto di miscela tanto nel ciclo di misfuel vero e proprio, quanto nel ciclo successivo:
l’equazione (Eq 2.29) può essere discretizzata, secondo il metodo di Eulero, per potere
studiare l’evoluzione della massa immessa nel cilindro, ciclo per ciclo:
m& f _ cil = (1 − X )m& f _ inj + m& ff
(Eq 4-4)
149
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
& fcil(i +1) = m
& fcil(i) +(1− X)[m
& finj(i +1) −m
& fnji(i)]+
m
& finj(i) −m
& fcil(i)
ϑc m

 (Eq 4-5)
6τ 
N(i)

Per un ciclo di misfuel, si può porre m& fi (i + 1) = 0 e m& fi (i ) = m& fc (i ) , essendo il motore in
condizioni stazionarie. Sostituendo in (Eq 4-5), si ottiene
& fc(i +1) = Xm
& fi (i) ⇒m
& fcm = Xm
& fiST
m
(Eq 4-6)
Si capisce così che la quantità di combustibile che entra nel cilindro durante un ciclo di
misfuel, legata al parametro X, non è sufficiente a far avvenire la combustione (il valore
massimo che X può raggiungere è, per il motore impiegato nei test, pari a 0.3).
Allo stesso modo si può impiegare il modello di Aquino per stimare il rapporto di miscela
del ciclo successivo: in questo caso m& fi (i ) = 0 e m& fc (i ) = Xm& fi (i − 1) , perciò
m& fc (i + 1) = m& fi (i + 1) +
ϑc  − Xm& fi (i + 1) 
X ϑc
&
&
⇒
m
=
m
(
1
−
⋅ )
fcPm
fiST


6τ 
N (i)
6N (Eq 4-7)
τ

Eseguendo questa valutazione in diversi punti di funzionamento, noti che siano i valori
dei parametri X e τ, è possibile stimare il rapporto A/F della miscela contenuta nel
cilindro nei cicli seguenti un misfuel, per le varie condizioni di funzionamento (Figura
4-5).
Questa valutazione, basata su un modello solitamente applicato a transitori meno violenti
(rispetto a quelli di mancata combustione), non tiene conto del fatto che la miscela
contenuta dentro il cilindro è in realtà ulteriormente smagrita dall’effetto dei gas residui:
questi, come si è detto, hanno una composizione valutabile tramite (Eq 4-6), ovvero più
povera di combustibile, rispetto a quella proveniente dal collettore di aspirazione.
La composizione della miscela è causa di un più lento rilascio del calore (Figura 4-6), e
di una maggiore dispersione ciclica: in presenza di miscele magre, infatti, l’incerto
innesco della combustione rende maggiore la differenza da ciclo a ciclo, e più bassa la
velocità di combustione.
150
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
16
Air-Fuel Ratio
15.8
15.6
15.4
15.2
15
14.8
1000
900
800
700
600
500
Manifold Air Pressure [mbar]
400
300
6000
5000
4000
3000
2000
1000
Engine Speed [rpm]
Figura 4-5:rapporto A/F in un ciclo post-misfuel
Come nel caso del misfire, diversi fenomeni interagiscono nella determinazione
dell’andamento del calore netto rilasciato: da una parte la già discussa formazione di una
miscela magra, dall’altra la presenza di un contributo energetico nei gas residui, presenti
in massa maggiore rispetto ad un ciclo standard, così come nel caso di misfire.
Per questo motivo un ciclo post-misfuel può portare tanto a valori più bassi che più alti di
pressione media indicata, a seconda di quale dei due effetti prevarrà.
Le condizioni di funzionamento del motore hanno a loro volta influenza sull’effetto
complessivo, dal momento che, tanto la presenza di gas residuo, quanto la temperatura
dei gas di scarico, e quindi la differenza tra massa di gas residuo in un ciclo standard ed
in un ciclo successivo ad un malfunzionamento, sono ad esse profondamente legate. I dati
sperimentali confermano queste considerazioni, mostrando che, mentre la combustione è
sempre lenta e caratterizzata da grande dispersione, il calore netto rilasciato può essere
minore, simile, o addirittura maggiore rispetto a quello di una combustione standard.
151
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
1200
Net Heat Release[J]
1000
800
600
400
post-misfuel: single cycle
post-misfuel: single cycle
post-misfuel: single cycle
post-misfuel: single cycle
post-misfuel: single cycle
standard: mean over 85 cycles
200
0
360
370
380
390
400
410
Crankshaft Angle [deg]
420
430
440
Figura 4-6: Rilascio di calore per combustioni standard e post-misfuel (0.925 bar @ 1750 rpm)
L’effetto della dispersione ciclica, in particolare, è notevole anche in termini di pressione
indicata e coppia indicata: due diversi cicli post-misfuel possono portare a valori anche
considerevolmente diversi di pressione media indicata. Non solo la formazione di una
miscela magra, ma anche altri fenomeni, non considerati nell’approccio teorico
impiegato, possono essere la causa di un simile effetto: ad esempio la stessa formazione
del film potrebbe essere caratterizzata da fenomeni di forte dispersione, che si
tradurrebbero in dispersione dei cicli di pressione. Basti pensare al fatto che in un ciclo
standard parte del gas residuo può arrivare a lambire la massa del film depositato,
favorendone l’evaporazione, data la sua elevata temperatura; in un ciclo di
malfunzionamento, invece, la temperatura del gas residuo è molto inferiore: fenomeni di
questo tipo non sono stati considerati e sarebbe comunque difficile tenerli in
considerazione con modelli zero-dimensionali.
Si deve tuttavia notare che in tal senso il comportamento dei cicli post-misfire è del tutto
opposto: la variabilità ciclica della pmi in un ciclo post-misfire è decisamente inferiore a
quella osservabile in un ciclo standard.
152
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
35
In-Cylinder pressure [bar]
30
standard: mean over 85 cycles
post-misfuel: single cycle
post-misfuel: single cycle
post-misfuel: single cycle
post-misfuel: single cycle
25
20
15
10
5
0
0
90
180
270
360
450
Crankshaft Angle [deg]
540
630
720
Figura 4-7: pressione nel cilindro per cicli post-misfuel e normali (0.925 bar @ 1750 rpm).
4.4 INDICATORI DI MALFUNZIONAMENTO
Le osservazioni di cui al paragrafo precedente devono essere sintetizzate nella
definizione di indici che consentano di effettuare il riconoscimento dei misfire e dei
misfuel.
Sono state applicate due tecniche diverse, la prima basata sull’analisi del segnale di
velocità angolare, la seconda sull’analisi del segnale della sonda UEGO.
4.4.1 METODOLOGIA BASATA SUL LAVORO DI ESPANSIONE
La diversa produzione di coppia che segue il ciclo di malfunzionamento, a seconda che si
tratti di misfire o di misfuel, può essere impiegata per eseguirne il riconoscimento.
Ovviamente, dovendo elaborare una tecnica applicabile a bordo veicolo, non si vuole fare
uso del sensore di pressione posto nel cilindro, ma si desidera invece verificare se sia
possibile rintracciare lo stesso effetto attraverso l’osservazione di segnali accessibili ad
una centralina di serie, quali il segnale di velocità angolare, o quello della sonda UEGO
(sempre più diffuso anche in applicazioni di serie).
153
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
In effetti molti algoritmi di stima di coppia sono basati sul segnale di velocità: una
maggiore coppia indicata porta a una maggiore accelerazione angolare dell’albero
motore, perciò, in corrispondenza della fase di espansione del cilindro in cui si manifesti
un misfire, si dovrebbero osservare un brusco calo di accelerazione ed un suo successivo
incremento, superiore a quello medio. Nel caso di un misfuel, invece, il tipico calo di
accelerazione sarebbe seguito, al ciclo successivo, da un valore tendenzialmente inferiore
a quello standard, seppure caratterizzato da una grande dispersione.
300
Expansion Work [J]
250
200
150
100
misfire: mean over 5 faults
standard: mean over 85 cycles
misfuel: mean over 5 faults
50
0
360
380
400
420
440
460
480
Crankshaft Angle [deg]
500
520
540
Figura 4-8: Lavoro di espansione per combustioni standard e post-malfunzionamento
(0.925bar@1750rpm)
Si è detto che una delle conseguenze del misfire è l’introduzione, al ciclo successivo, di
una maggiore massa di miscela nel cilindro (Figura 4-8). Non solo: la velocità di
combustione è anche più elevata, il che porta, da una parte, alla considerazione che il
lavoro di espansione sarà maggiore, dall’altra a ipotizzare picchi di coppia indicata più
elevati, che, a meno di interazioni con gli inevitabili smorzamenti e deformazioni della
driveline, causeranno maggiori accelerazioni angolari. Nella presente trattazione la prima
delle due osservazioni è stata impiegata per passare prima dalla oscillazione di velocità al
lavoro di espansione, poi, da questo alla determinazione del tipo di malfunzionamento,
supponendo che una strategia di diagnosi indipendente ne abbia determinato la presenza.
154
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
La scelta è dovuta al fatto che questa filosofia sembra più adatta ad un’applicazione onboard, essendo basata su valori medi (lavoro erogato in una fase del motore e
conseguente variazione di velocità), accessibili alla centralina che gestisce il motore.
Il legame tra lavoro di espansione e la velocità angolare può essere messo in evidenza
attraverso le equazioni della dinamica applicate all’albero motore:
Ti (t) −Tf (t) −TL(t) −Tr (t) = Jϑ&&(t)
(Eq 4-8)
Ovviamente, le vibrazioni indotte dall’applicazione di una sollecitazione impulsiva quale
il misfire, rendono difficoltosa l’applicazione di questa strategia in una forma semplice:
sarebbe allora d’uopo prendere in considerazione un dato di velocità filtrato, in cui sia
stato cioè eliminato il contributo delle oscillazioni stesse. Se, da un lato, esistono tecniche
che consentirebbero di farlo, dall’altro non si è ritenuto opportuno applicarle, in una fase
preliminare in cui si voleva stabilire l’efficacia della metodologia: infatti si vuole
confrontare il risultato relativo al misfire con quello relativo al misfuel, per stabilire se
effettivamente esista, nella diversità della produzione di coppia, un sufficiente contenuto
informativo sulla causa del fenomeno. In questo caso non avrebbe senso filtrare il segnale
di velocità, ‘scontando’ il contributo delle vibrazioni torsionali, dal momento che esso
sarebbe il medesimo per i due malfunzionamenti. La causa delle vibrazioni, infatti, è la
stessa, ovvero l’assenza del contributo di coppia indicata in fase di combustione, e lo
sono anche le oscillazioni conseguenti.
Procedendo quindi con la valutazione delle differenze tra il ciclo post-misfire ed il ciclo
post-misfuel, si ottiene:
TiPM(t) −Tipm(t) = ∆Ti (t) = J(ϑ&&PM(t) −ϑ&&pm(t))
(Eq 4-9)
La (Eq 4-9) può essere integrata sull’intera fase di espansione, portando a:
∆W = ∫ ∆Ti ⋅ dϑ = ∫ J(ϑ&&PM(t) −ϑ&&pm(t))⋅dϑ
exp
exp
Eq (4-10)
La Eq (4-10 può infine essere riscritta, permettendo di esprimere l’andamento del lavoro
di espansione in funzione della velocità angolare:
155
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
∆W = J ⋅ϑ& ⋅ ∫ d(ϑ&PM −ϑ&pm) = J ⋅ω⋅ ∆ω*
exp
(Eq 4-11)
Il lavoro di espansione può essere valutato tramite la pressione nel cilindro, tanto per cicli
post-misfire quanto per cicli post-misfuel: la differenza può essere osservata in Figura
4-9. Nella stessa figura è rappresentato anche l’andamento della medesima differenza
ricavato tramite il segnale della velocità angolare, come da (Eq 4-11). Si può osservare
come l’andamento ricavato tramite la velocità, nonostante il filtraggio dovuto
all’interposizione del sistema fisico che consente di passare dalla coppia indicata
all’accelerazione angolare, rispecchi quello ricavato dalla pressione indicata.
Figura 4-9: differenza tra lavoro di espansione dei cicli post-misfire/misfuel. Misura con segnale di
pressione e stima con segnale di velocità angolare. Media su 5 cicli (0.925mbar@1750 rpm).
Una volta riconosciuto il malfunzionamento, attraverso una qualsiasi delle numerose
tecniche diagnostiche impiegate, sarebbe possibile, tramite un monitoraggio della
velocità angolare, valutare il lavoro di espansione della successiva combustione, per
identificare la causa del malfunzionamento.
Per un’applicazione on-board, la (Eq 4-8) può ulteriormente essere modificata,
introducendo la velocità sintetica al posto di quella misurata, in modo da eliminare il
contributo delle coppie alterne, impiegando altresì le tecniche di filtraggio che
consentono di tenere conto delle vibrazioni torsionali della driveline:
156
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
Ti (t) −Tf (t) −TL(t) = jϑ&&s (t) =Ti (t) −Ti
(Eq 4-12)
Tale equazione, integrata, fornisce
*
W −W = Jϑ& ∫ dϑ&s = J ⋅ω ⋅ ∆ωs
exp
Eq (4-13)
Si potrebbe infine definire un indicatore, attraverso il confronto con il lavoro di
espansione medio di un ciclo standard:
*
J ⋅ω⋅ ∆ωs
F.I.ω =
W
Eq (4-14)
si giungerebbe così alla definizione di soglie con cui confrontare tale parametro: valori
elevati di FIw dopo un malfunzionamento sarebbero causati da un misfire, valori al di
sotto di una soglia prefissata sarebbero invece causati da un misfuel.
Prima di fare ulteriori passi verso la definizione di un algoritmo applicabile in centralina
è opportuno chiedersi quale sarà la ripetibilità dei risultati, la robustezza della diagnosi.
In questo caso la diagnosi si baserebbe su differenze di lavoro indicato che possono avere
valori limitati (ordine di grandezza del 10%), valutate per via indiretta (attraverso la
velocità di rotazione). Se a questo si aggiunge che, in presenza di misfuel, la variabilità
ciclica assume una dimensione imponente, si capisce come la metodologia presenti,
proprio nelle condizioni in cui la dispersione ciclica è più forte e dove la differenza tra
combustioni post-misfire e post-misfuel è minore, una intrinseca debolezza. Purtroppo,
come si può facilmente capire, la dispersione ciclica è più forte a bassi carichi (e bassa
velocità), mentre la differenza si assottiglia ad alti carichi, il che significa che su buona
parte del campo di funzionamento una simile metodologia non darebbe risultati affidabili.
157
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
6
5
IIMEP
[bar ]
4
MISFIRE
MISFUEL
ST ANDARD (MEAN VALUE)
3
2
1
0
5
10
15
20
25
Malfunction
30
35
40
45
Figura 4-10: andamento della pmi nei cicli post-misfire e post-misfuel; 325 mbar@1750 rpm (sopra)
e 700 mbar@1750 rpm (sotto)
Nonostante la differenza tra ciclo post-misfire e ciclo standard sia ben evidente, si deve
osservare che la differenza tra il ciclo con misfire e quello con misfuel è dello stesso
ordine di grandezza della dispersione ciclica.
Si potrebbe allora pensare di utilizzare un indice che tenga conto della diversità in termini
di rilascio del calore: ancora una volta, però, ci si scontrerebbe con l’esigenza, per
implementare una strategia robusta, di impiegare il segnale di pressione indicata, che non
può essere considerato disponibile per le centraline delle auto di serie.
Si deve dunque concludere che, data la forte dispersione ciclica e le piccole variazioni da
determinare, l’impiego di grandezze indicate stimate sulla base del segnale di velocità
non è implementabile.
4.4.2 METODOLOGIA BASATA SUL SEGNALE UEGO
La sonda lambda lineare non è un sensore presente a bordo di tutte le auto con motori ad
accensione comandata, ma la sua applicazione è in continua espansione, vuoi per
mantenere il controllo in loop chiuso anche con miscele non stechiometriche, vuoi per
diagnosticare eventuali perdite di efficienza del catalizzatore.
158
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
In caso di malfunzionamento, il contenuto di ossigeno nei gas di scarico dipende
fortemente dal fatto che si tratti di misfire o misfuel: se il sensore fosse ideale, esso
segnalerebbe il valore del titolo anche per miscele incombuste, ma il suo comportamento
è in realtà diverso. In caso di misfire, ad esempio, nonostante il valore del titolo non muti,
la sonda segnala un’ampia escursione nel campo del magro, perché, nonostante essa sia
sensibile tanto all’ossigeno quanto agli HC, il suo comportamento dinamico dipende dalla
funzionalità considerata. La dinamica del sensore nel campo delle miscele magre è molto
più rapida di quella nel campo delle miscele grasse, il che implica che venga segnalato
prima l’eccesso di ossigeno, rispetto a quello di idrocarburi.
Nel caso in cui venga indotto un misfuel, la frazione di ossigeno presente nei gas è
sicuramente maggiore: di conseguenza, la sonda segnalerà un picco nel campo delle
miscele magre, raggiungendo valori più elevati rispetto al caso di un misfire.
Nel caso di misfuel, poi, anche il ciclo post-misfuel è caratterizzato da combustioni
magre: ci si aspetta allora di vedere due picchi nel magro consecutivi, il secondo molto
più modesto. Se la velocità di rotazione fosse elevata, la sonda potrebbe non riuscire a
segnalare il secondo picco, anche se ci si potrebbe comunque accorgere della sua
presenza, per il fatto che il rientro del titolo verso condizioni di regime sarebbe più lento.
Ovviamente il sensore UEGO potrebbe essere impiegato anche per la diagnosi, vera e
propria, oltre che per la distinzione dei malfunzionamenti.
In Figura 4-11 si può notare come entrambi i picchi siano visibili, e se ne intravedano
altri due, a testimonianza del fatto che la ricostituzione del film ha una durata di qualche
ciclo di funzionamento.
159
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
20
misfire
misfuel
19
A/F
18
17
16
15
14
0
2
4
6
8
10
Engine cycles
12
14
16
Figura 4-11: andamento del segnale UEGO in presenza di misfire/misfuel (0925 mbar@1750rpm),
media su 5 cicli. Titolo di partenza: 14,6/14.7
Volendo definire un indice che consenta, anzitutto, di diagnosticare le mancate
combustioni, e, in seguito, di discernerne la causa, è necessario ricordare che il valore del
titolo a regime potrebbe essere diverso da quello stechiometrico (grasso in avviamento o
a potenza massima, magro in funzionamento stratificato). In questo caso, allora, il picco
nel magro non dovrebbe essere valutato rispetto al valore stechiometrico, ma rispetto al
valore obiettivo, perseguito dalla centralina: in caso di forti scostamenti verso miscele
magre, si potrebbe essere in presenza di malfunzionamenti. Ovviamente, in fase di brusco
transitorio con apertura della valvola a farfalla, o ogni qualvolta venisse attuata una
strategia di cut-off, sarebbe necessario disattivare la diagnosi, per evitare la segnalazione
di falsi allarmi.
Il modo più corretto di impostare il problema sarebbe quello di fare un modello della
sonda UEGO ed invertirlo, per stabilire, sulla base del segnale, quale fosse il titolo della
miscela in ingresso. Modelli di questo tipo, normalmente messi a punto per effettuare il
controllo del titolo cilindro per cilindro, non sono tuttavia esportabili al presente caso,
viste le condizioni estreme in cui ritrova ad operare il sensore; si può invece adottare la
tecnica basata sull’impiego di “pesi” da attribuire ai contributi dei singoli cilindri, nel
160
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
caso in cui si desideri effettuare l’identificazione del cilindro in cui si manifesta il
problema.
In assenza di un modello invertito della sonda per condizioni di funzionamento con
miscele incombuste è possibile utilizzare una filosofia più semplice, sicuramente adatta a
mostrare l’esistenza del contenuto informativo del segnale più che ad essere
implementata su un’unità di controllo: si tratta di integrare, nel dominio della fase di
scarico del ciclo, lo scostamento dell’AFR misurato, rispetto al valore obiettivo del
sistema di controllo. Anche limitando molto il campionamento della grandezza misurata,
180
[
]
F.I.AFR = ∫ AFR− AFR target dϑ
0
(Eq 4-15)
Un indice di questo tipo metterebbe in evidenza la permanenza, durante la fase di scarico,
in regime di magro, senza impiegare l’informazione relativa alla presenza, in caso di
misfuel, di due picchi consecutivi, o di una persistenza dello squilibrio del titolo rilevato,
per più di un ciclo. E` possibile tenerne conto sommando i due valori relativi allo stesso
cilindro, ad un ciclo di distanza (l’ultimo e il penultimo valore rilevati): in questo modo si
tiene conto non solo del fatto che l’escursione verso miscele magre è maggiore per il
misfuel, ma anche che dura di più.
400
misfire
misfuel
350
300
F.I. AFR
250
200
150
100
50
0
0
1
2
3
4
5
6
Engine Cycles
7
8
9
10
Figura 4-12: Andamento dell’indicatore di misfire/misfuel durante cicli di malfunzionamento
(0.925bar@1750rpm)
161
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
L’applicazione dell’indicatore, definito come in (Eq 4-15) fornisce risultati soddisfacenti,
per quanto concerne la possibilità di distinguere tra misfire e misfuel. In Figura 4-12 si
nota che la differenza nei valori raggiunti dall’indicatore, durante i due tipi di
malfunzionamento, raggiunge valori molto diversi. Si nota inoltre che, allontanandosi
dalla zona di malfunzionamento, il valore dell’indicatore raggiunge livelli molto bassi,
confermando che il rapporto segnale/rumore è buono: questa affermazione può essere
estesa a tutto il campo di funzionamento del motore. I primi dati mostrano una deviazione
standard dei valori assunti dall’indicatore in caso di malfunzionamento, inferiori al 10%,
ed un rapporto tra valori in condizione di misfuel e in condizione di misfire compresi tra
il 150% ed il 350%. Questi risultati potrebbero sicuramente essere migliorati, ad esempio
con una scelta ottimizzata della finestra di osservazione del segnale.
In Figura 4-13 è mostrato l’andamento del segnale della sonda UEGO in corrispondenza
di una successione di 50 misfuel: è comprensibile come, data la ripetibilità dei valori
segnalati dal sensore, l’andamento dell’indice sia, a sua volta, ripetibile.
18
17.5
17
AFR
16.5
16
15.5
15
14.5
14
0
500
1000
1500
2000
2500
3000
3500
4000
Engine TDCs
Figura 4-13: andamento del segnale UEGO in caso di misfuel. (700 mbar@2250rpm)
In Figura 4-14 è possibile osservare la prestazione degli indici in termini di ripetibilità,
sia in caso di misfire che in caso di misfuel.
162
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
300
misfire
misfuel
250
Fault Indicator
200
150
100
50
0
-50
0
50
100
150
200
250
300
350
400
450
500
Engine TDCs
Figura 4-14: andamento dell’indice di malfunzionamento per cicli di misfire e misfuel
(700mbar@1750rpm)
E` necessario ricordare che la metodologia descritta non prende in considerazione il
diverso contributo che i diversi cilindri danno al segnale della sonda lambda lineare: data
l’inerzia che contraddistingue il comportamento dinamico della sonda, i valori
dell’indicatore rimangono anomali per circa due cicli, in caso di misfire, e per circa
quattro cicli in caso di misfuel. Questi valori, che cambiano al variare della velocità
angolare dell’albero motore, suggeriscono che insorgerebbero problemi, nel caso in cui si
desiderasse applicare lo stesso indicatore per la determinazione (o il riconoscimento) di
malfunzionamenti consecutivi. Da questo punto di vista un grande contributo
migliorativo potrebbe provenire dall’applicazione di un modello del sensore, adatto alle
particolari condizioni di funzionamento, contraddistinte da una miscela di aria e
combustibile (a bassa temperatura), piuttosto che da un flusso di gas combusti. Il modello
del sensore potrebbe essere invertito, in modo da poter correlare il contenuto del segnale
al vero rapporto aria/combustibile del generico cilindro, anche in condizioni di
malfunzionamento.
Una possibile elaborazione del segnale, applicabile tanto all’indice così come definito in
(Eq 4-15) quanto ad uno basato sul modello invertito del sensore, è quella del de-trend: si
tratta di un particolare tipo di filtraggio, consistente nella sottrazione, al segnale misurato,
163
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
di un andamento rilevato sperimentalmente dello stesso segnale, in particolari condizioni.
Se, ad esempio, si volesse “ripulire il segnale” dall’effetto di un misfire, per potere così
mettere in evidenza un eventuale ulteriore mancata combustione, oppure semplicemente
al fine di distinguere tale fenomeno da un misfuel, si potrebbe, una volta rilevata una
mancata combustione, sottrarre, al segnale rilevato dalla sonda, il trend rilevato in
presenza di un misfire isolato. Questo garantirebbe la possibilità di ottenere un segnale
paragonabile a quello che si avrebbe avuto se il misfire non fosse avvenuto, il che
consentirebbe di rilevare ulteriori successivi malfunzionamenti, di capire se
effettivamente si è trattato di un misfire piuttosto che di un misfuel, ed infine di
impiegare correttamente il controllo in retroazione.
Si tenga infine presente che le prove sono state eseguite mantenendo costante il tempo di
iniezione, e non è quindi presente l’effetto che il controllo in retroazione del titolo
potrebbe avere sul segnale.
300
250
Fault indicator
200
150
100
50
0
0
10
20
30
40
50
60
70
80
Engine TDCs
Figura 4-15: trend del segnale UEGO in caso di misfuel (700mbar@1750rpm)
164
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
4.5 LISTA DEI SIMBOLI
Ab: Superficie del fronte di fiamma [m2]
A
: rapporto aria-combustibile []
F
b: coefficiente lineare per la dipendenza
γ
-T [1/K]
cv : Calore specifico a volume costante (per la miscela dentro il cilindro) [J/kgK]
e
: rapporto tra massa di gas esausto residuo e massa di combustibile []
F
hc: efficienza di combustione []
F.I.: indicatore di malfunzionamento []
LHV: potere calorifico inferiore [J/kg]
J: Inerzia del motore e del freno [kgm2]
m& fc : portata media di combustibile in ingresso nel cilindro [kg/s]
m ff : massa del fil fluido [kg]
m& fi : portata media iniettata [kg/s]
N: velocità di rotazione dell’albero motore [rpm]
p : Pressione all’interno del cilindro [Pa]
Qch : calore rilasciato durante la combustione[J]
Qht : calore scambiato con le pareti [J]
ϑ : angolo di manovella [rad]
ϑ&,ω : velocità di rotazione dell’albero motore [rad/s]
ϑ&
: velocità di rotazione media dell’albero motore [rad/s]
ϑ&& : accelerazione angolare dell’albero motore [rad/s2]
ϑc : intrevallo angolare per I calculi della ECU [deg]
R: Costante relativa alla miscela dei gas all’interno del cilindro [J/kgK]
rm: densità della miscela all’interno del cilindro [kg/m3]
t: tempo [s]
τ
: costante di tempo per l’evaporazione del combustibile dal film [s]
T : temperatura all’interno del cilindro [K]
T ' : temperatura dei gas negli interstizi [K]
TW : temperatura delle pareti [K]
165
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
Ti : coppia indicata [Nm]
DTi: differenza di coppia indicata tra combustioni post-misfire e post-misfuel [Nm]
TL : coppia di carico [Nm]
T f : coppia di attrito [Nm]
Tr : coppia di inerzia delle masse in moto alterno [Nm]
γ
: rapporto tra calore specifico a pressione e volume costante []
γ ' : rapporto tra calore specifico a pressione e volume costante all’interno degli interstizi []
ub: velocità media di propagazione del fronte di fiamma [m/s]
V: volume istantaneo del cilindro [m3]
Vcr: volume dgli interstizi [m3]
V0 : volume della camera di combustione [m3]
X: frazione della massa di combustibile iniettata che si deposita nel film []
Dw*: differenza tra I segnali di velocità angolare in condizioni post-misfire e post-misfuel [rad/s]
DW: differenza tra lavoro di espansione in condizioni post-misire e post-misfuel [J]
pedici
M: Misfire
m: misfuel
PM: Post-misfire
pm: Post misfuel
ST: stechiometrico
STD: standard (combustione normale)
4.6 BIBLIOGRAFIA
[1]. The Effect of Engine Misfire on Exhaust Emission Levels in Spark Ignition Engines,
A. Soliman, G. Rizzoni, V. Krishnaswami SAE Technical paper, 1995, 950480
[2]. Transient A/F Control, Characteristics of the 5 Liter Fuel Injection Engine, C. F.
Aquino, SAE Technical paper, 1981, 810494
[3]. Internal Combustion Engine Fundamentals, J. B. Heywood,
McGraw Hill
International Editions, New York, 1988.
[4]. The Effect of Cooled Egr on Emissions and Performance of a Turbocharged Hcci
Engine J. O. Olsson, P. Tunestal, J. Ulfvik, B. Johansson, SAE Technical paper,
2003-01-0743
166
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
[5]. Influence of Egr on Combustion and Exhaust Emissions of Heavy-Duty Di Diesel
Engines Equipped With Common-Rail Injection Systems R. Schubiger, A. Bertola,
K. Boulouchos, SAE Technical paper, 2001-01-3497
[6]. Cycle to Cycle Variations in Combustion and Mixture Concentration in the Vicinity
of Spark Plug Gap K. H. Lee, D. E. Foster, SAE Technical paper, 1995, 950814
[7]. An Algorithm for the Calibration of Wall-Wetting Model Parameters, A. Di Gaeta, S.
Santini, L. Glielmo, F. Di Cristofaro, C. Di Giuseppe, A. Caraceni, SAE Technical
paper – 2003-01-1054.
[8]. Multiple Misfire: Detection and Cylinder Isolation Based on Engine Speed
Measurements, N. Cavina, ASME technical paper – ICES2003-676.
[9]. Simplified Engine Diagnostics Using “Synthetic” Variables, J. J. Moskwa, W. Wang,
SAE Technical paper – 2000-01-0364.
[10]. Measurement and Analysis of Knock in a S.I. Engine Using the Cylinder Pressure
and Block Vibration Signals, K. M. Chun, K. W/. Kim, SAE Technical paper 1994,
940147.
[11]. Online Detection of Cylinder-to-Cylinder Variations by a Vibration Analysis
System, G. de Botton, E. Sher, E. Frenkel, B. Rivin, I. Hening, B. Cumming, M.
Watts, SAE Technical paper – 2002-01-0848.
[12]. Combustion Supervision by Evaluating the Crankshaft Speed and Acceleration,
M.Schmidt, F. Kimmich, H. Straky, R. Isermann, SAE Technical paper 2000-010558.
[13]. Direct Estimation of Cyclic Combustion Pressure Variability Using Engine Speed
Fluctuations in An Internal Combustion Engine, F. T. Connolly, SAE Technical
paper, 1994, 940143.
[14]. The Determination of Air/Fuel Ratio Differences between Cylinders in a Production
Engine Using Exhaust Gas Oxygen Sensors, G. W. Davis, A. Ego, S. Baumbach, C.
Jordan E. Ubong, SAE Technical paper – 1999-01-1171.
[15]. Application of a Wide Range Oxygen Sensor for the Misfire Detection, Y. Chung, C.
Bae, S. Choi, K. Yoon, SAE Technical paper – 1999-01-1485.
[16]. Spark Advance for Optimal Efficiency, Lars Eriksson, SAE Technical paper – 199901-0548.
167
PROTOTIPAZIONE RAPIDA: STRATEGIE DI DIAGNOSI
[17]. Measurement of Residual Gas Fraction Using a Fast Response NO Sensor, R. Ford,
N. Collings, SAE Technical paper – 1999-01-0208.
168
5
SIMULAZIONE DEL VEICOLO AL BANCO PROVA
I cicli di omologazione per i veicoli con motore a combustione interna sono svolti,
secondo le vigenti normative (Direttiva 70/220 in Europa), con il veicolo posto sul banco
a rulli, percorrendo cicli che simulano le normali condizioni di funzionamento dei veicoli
in circolazione.
Figura 5-1: ciclo adottato per la prova di tipo I (MVEG)
Durante il test vengono raccolti i gas di scarico, che vengono in seguito analizzati: la
normativa impone un limite alla presenza delle specie inquinanti nei gas di scarico, in
termini di massa di inquinante mediamente emessa per ogni km percorso sul banco a
rulli. Si può osservare che è quindi possibile eseguire il ciclo solo una volta che sia
disponibile il veicolo completo, e quindi non in una fase preliminare del progetto.
Sarebbe invece utile, in determinate situazioni, sapere quale sia la potenzialità del
169
motore, montato su veicoli con diverse caratteristiche, in termini di emissioni inquinanti
sul ciclo di omologazione. Inoltre, visto che il ciclo viene solitamente eseguito da un
collaudatore alla guida del veicolo (anche se esistono applicazioni di guidatori
robotizzati), sarebbe opportuno verificare quale sia la dipendenza dei risultati dai fattori
umani quali la modalità di esecuzione della cambiata, la capacità di seguire
rigorosamente la traiettoria di velocità imposta, ecc.
Per questo motivo si è pensato di riprodurre tali test sul banco prova, con il solo motore
collegato ad un freno a correnti parassite: simulando i carichi resistenti dovuti alla
presenza del veicolo ed imponendoli tramite il freno, è infatti possibile far funzionare il
motore al banco come se fosse montato su un veicolo. In questo modo, a parità di
condizioni al contorno (soprattutto temperatura ambiente), ci si aspettano prestazioni, in
termini di consumo di carburante e di emissioni inquinanti, paragonabili a quelle rilevate
tramite il test tradizionale, eseguito su veicolo.
Ovviamente, l’impiego di un banco freno a correnti parassite, preclude la possibilità di
far funzionare il motore, come può succedere a bordo veicolo, trascinato da un’inerzia,
ma si può verificare che queste condizioni non accadono se non in brevi istanti di
transitorio dopo la cambiata nelle marce più alte, in dipendenza dallo stile di guida del
pilota. Se la dinamica degli attuatori è sufficientemente rapida, si può quindi affermare
che è possibile riuscire nella simulazione completa del ciclo.
Una volta verificata ala possibilità di eseguire il ciclo di omologazione sul motore al
banco, si può passare all’elaborazione di un modello che simuli le richieste di coppia da
parte del veicolo durante il ciclo di omologazione, o, ancora meglio, durante una qualsiasi
condizione di marcia dell’auto. Queste richieste possono essere imposte tramite gli
attuatori del banco, individuabili nella bobina del freno a correnti parassite e nel motore
brushless che permette di muovere la valvola a farfalla.
Il modello dei carichi, implementato sullo stesso sistema di controllo in tempo reale
impiegato per controllare il motore, viene dunque impiegato per simulare una generica
condizione di marcia. E` allora possibile lasciare all’utente la scelta di come “guidare” il
motore, oppure di fare eseguire automaticamente un ciclo di omologazione.
170
5.1 VERIFICA DEGLI ATTUATORI
Prima di elaborare un modello che simuli i carichi imposti al motore attraverso
l’autoveicolo, si deve verificare se sia possibile, attraverso gli attuatori, imporre tali
carichi, in modo da fare avvenire effettivamente la simulazione. Si è detto che le leve a
disposizione del sistema di controllo sono due: la posizione dell’acceleratore (nel nostro
caso si può parlare della posizione della valvola a farfalla) e la corrente imposta sulla
bobina del freno a correnti parassite. Per quanto riguarda quest’ultimo parametro, si può
decidere di lasciare all’unità di controllo del freno l’incombenza di gestirne il valore,
trasformando la richiesta della centralina programmabile in un setpoint di coppia. In
questo caso l’uscita del modello dei carichi, ovvero la coppia da imporre al motore, viene
direttamente inviata al controllore del freno, che gestisce autonomamente la corrente di
frenatura in modo da garantire il raggiungimento del valore di coppia di carico richiesto.
In ogni banco freno si può decidere in maniera libera la gestione degli attuatori: si può ad esempio - imporre in catena aperta i valori della corrente e della posizione
dell’acceleratore, oppure si può decidere di imporre, con un controllo in retroazione sulla
corrente di frenatura, una certa velocità di rotazione, oppure fare lo stesso, agendo sulla
valvola a farfalla. Allo stesso modo si può controllare la coppia di carico con uno dei due
attuatori, e, ad esempio, la coppia di carico con l’altro. In sostanza le possibilità di
controllo sono quelle riassunte in Tabella 5-1.
TIPO
VARIABILE CONTROLLATA
VARIABILE CONTROLLATA
CON CORRENTE
CON ACCELERATORE
%, %
#
#
N, %
N (GIRI MOTORE)
#
%, N
#
N (GIRI MOTORE)
M, %
COPPIA DI CARICO (M)
#
%, M
#
COPPIA DI CARICO (M)
M, N
COPPIA DI CARICO (M)
N (GIRI MOTORE)
N, M
N (GIRI MOTORE)
COPPIA DI CARICO (M)
0, 0
%=0
%=0
Tabella 5-1: possibilità di controllo del freno
Nella scelta della modalità di controllo più adatta si è cercato di individuare quella che
meglio simulasse le condizioni di guida a bordo veicolo, in particolare quelle relative al
171
ciclo di guida svolto sul banco a rulli: in questo caso, essendo la marcia imposta, e
dovendo il veicolo seguire un prefissato profilo di velocità, il guidatore ha il solo
acceleratore (o, se necessario, i freni) a disposizione per seguire il ciclo, mentre i carichi
sono imposti attraverso le inerzie e la corrente di frenatura dei rulli. Il modo migliore di
riprodurre una simile situazione è dunque quello di usare la modalità di regolazione M,
%, in cui la corrente di frenatura è impiegata per mantenere la coppia di carico richiesta,
mentre la valvola a farfalla è comandata in modo da garantire la percorrenza del ciclo di
omologazione. Una possibile alternativa potrebbe essere quella di inglobare, nel modello
dei carichi, anche quello del freno a correnti parassite, ed il relativo sistema di controllo
in retroazione, gestendo quindi il banco nella modalità %, %. Tale possibilità non è stata
ritenuta - per il momento - interessante, viste le prestazioni soddisfacenti del sistema di
controllo originale.
Impiegando dunque il banco freno nella modalità M, %, per valutare la dinamica degli
attuatori si deve semplicemente capire se, effettivamente, si riescano a riprodurre
situazioni realistiche. In primo luogo la farfalla deve poter essere azionata con la stessa
dinamica
che
caratterizza
un
motore
di
serie.
L’attuatore,
caratterizzato
sperimentalmente, ha mostrato prestazioni simili a quelle di un DBW di un motore di
serie (Figura 5-2). Si Noti infatti che, a fronte di una richiesta a gradino dallo 0 al 50%
dell’apertura, il ritardo sia di circa un decimo di secondo.
60
target
real
50
% acc
40
30
20
10
0
0
0.5
1
1.5
Time [s]
Figura 5-2: dinamica dell’acceleratore.
172
Per quanto riguarda la bobina del freno a correnti parassite, oltre ad una mappa statica,
che consente di esprimere la coppia frenante in funzione della velocità di rotazione del
rotore e della corrente di eccitazione, utilizzabile nel caso in cui si decidesse il passaggio
alla modalità di controllo %, %, sono state ricavati dati dinamici, che, ancora una volta,
mostrano dinamiche dell’ordine dei 10 Hz, per richieste a gradino 0-50% della corrente di
eccitazione (Figura 5-3): tali valori sono più che soddisfacenti, se si deve solamente
simulare la dinamica complessiva del veicolo. Si deve inoltre tenere in considerazione il
fatto che, per il motore in prova, la corrente di eccitazione della bobina difficilmente
supera il 15% (la coppia massima del motore è di 106 Nm a 4000rpm, e, dalla Figura 5-4
risulta evidente che, anche a bassa velocità, bassi valori della corrente sono sufficienti a
garantire la necessaria frenatura). Le capacità dinamiche di variazione del carico garantite
dall’azione sulla corrente di frenatura, quindi, possono essere considerate superiori.
Questo significa che gli attuatori utilizzati consentono di simulare fedelmente le azioni da
parte del guidatore (posizione farfalla) e della strada (coppia di carico) che il motore
subisce.
60
target
real
50
I%
40
30
20
10
0
0
0.5
1
1.5
Time [s]
Figura 5-3: dinamica della corrente nella bobina del freno
173
200
Tcb [Nm]
150
100
50
0
3000
20
2500
15
2000
Speed [rpm]
10
1500
5
1000
0
I [%]
Figura 5-4: mappa statica delle prestazioni del freno
5.2 IL CICLO DI OMOLOGAZIONE
La prova di tipo I viene effettuata per misurare le emissioni dallo scarico dopo una
partenza a freddo e va effettuata su tutti i veicoli la cui massa massima non superi la 3.5
tonnellate. Normalmente il veicolo viene installato su un banco dinamometrico a rulli
provvisto di un sistema che simuli la resistenza all’avanzamento e all’inerzia, ovvero un
freno e un volano inerziale, posto in un locale climatizzato.
L’impianto è schematizzato in Figura 5-5.
Il motore è sottoposto allo stesso sforzo che si eserciterebbe su strada, perché le ruote
mettono in movimento i rulli (1), i quali sono collegati a un freno elettrico (2) che
riproduce la stessa resistenza aerodinamica che la vettura dovrebbe vincere se fosse
mossa realmente alle diverse velocità imposte dal ciclo di prova.
La coppia che il motore deve esercitare per spostare la massa della vettura, viene
riprodotta da un volano (3) posto sull’albero dei rulli.
174
Figura 5-5: assetto sperimentale per l’esecuzione del ciclo di omologazione
Un ventilatore (4) crea il flusso d’aria necessario per raffreddare il motore. Su un monitor
(5) viene visualizzato il ciclo di riferimento, ovvero la traiettoria di velocità che il veicolo
deve percorrere, la marcia che deve essere inserita e gli istanti in cui deve eseguire la
cambiata. Il collaudatore deve guidare in modo che la velocità effettiva (rappresentata
dall’andamento del punto sullo schermo) dell’auto si sovrapponga a quella prevista.
Al tubo di scarico della vettura viene applicata una manichetta che invia i gas combusti
agli strumenti di misura.
La prova di tipo I ha durata totale di 19 minuti e 40 secondi (1180 s) ed è costituita di due
parti: UNO e DUE (Figura 5-6). Con il permesso del costruttore, può essere inserito un
periodo di arresto, al massimo di 20 secondi, fra la fine della parte UNO e l’inizio della
parte DUE, per facilitare la regolazione dell’attrezzatura di prova.
La parte UNO della prova è costituita da quattro cicli urbani elementari (fig. 5.6A) che
comprendono ciascuno quindici fasi; la parte DUE (fig. 5.6B) è costituita da un ciclo
extraurbano che comprende tredici fasi.
175
Figura 5-6: ciclo urbano elementare e ciclo extraurbano (parte UNO e parte DUE)
In generale occorre effettuare alcuni cicli di prova preliminari per determinare il miglior
metodo d’azione dei comandi dell’acceleratore e del freno del veicolo in modo che il
ciclo effettivo riproduca il ciclo teorico entro i limiti prescritti.
Si tollera uno scarto di ±2 km/h tra la velocità indicata e la velocità teorica durante le
accelerazioni, le fasi a velocità costante e le decelerazioni. Durante i cambiamenti di fase
si accettano tolleranze sulla velocità superiori a quelle prescritte a condizione che la
durata degli scarti constatati non superi mai 0.5 s per volta.
Le tolleranze sui tempi sono di ±1 s.
Le fasi di minimo si effettuano con frizione innestata e cambio in folle.
Per poter effettuare le accelerazioni seguendo il ciclo normale, si inserisce la prima
marcia con frizione disinnestata 5 s prima della fase di accelerazione successiva al
periodo di minimo del ciclo urbano elementare. Il primo periodo di minimo all’inizio del
ciclo urbano elementare si compone quindi di 6 s con cambio in folle, frizione innestata,
e di 5 s con prima marcia inserita, frizione disinnestata.
Per le fasi intermedie di minimo di ciascun ciclo urbano elementare i tempi
corrispondenti sono rispettivamente di 16 s con cambio in folle e di 5 s con prima marcia
inserita,frizione disinnestata.
Tra due cicli urbani elementari successivi, il periodo di minimo è di 13 s durante il quale
il cambio è in folle, con frizione disinnestata.
La fase di minimo all’inizio del ciclo extraurbano si compone di 20 s di minimo con
prima marcia inserita, frizione disinnestata.
176
Alla fine della fase di decelerazione (arresto del veicolo sui rulli) del ciclo extraurbano, la
fase di minimo si compone di 20 secondi con cambio in folle, frizione innestata.
Le fasi di accelerazione vengono effettuate con un’accelerazione la più costante possibile
durante tutta la durata della fase. Si devono evitare movimenti bruschi dell’acceleratore
durante il passaggio dalla fase di accelerazione alla fase di velocità costante successiva.
Durante i periodi a velocità costante si mantiene fissa la posizione dell’acceleratore.
Tutte le decelerazioni del ciclo urbano elementare vengono effettuate togliendo del tutto
il piede dall’acceleratore e mantenendo la frizione innestata. Quest’ultima viene
disinnestata, lasciando la marcia inserita, quando la velocità è scesa a 10 km/h.
Anche per le decelerazioni del ciclo extraurbano si toglie il piede dall’acceleratore e si
mantiene la frizione innestata, solo però fino ad una velocità di 50 km/h, dopodiché si
disinnesta la frizione.
Se la decelerazione richiede più tempo del previsto per questa fase, si ricorre ai freni del
veicolo per poter rispettare il ciclo.
Le normative impongono, oltre ad i cicli di guida, anche le modalità di esecuzione delle
prove, in particolare esistono delle prescrizioni riguardo ai banchi a rulli sui quali
vengono eseguite le prove. Anche in questo caso si considera la legislazione europea. Il
banco a rulli deve consentire di simulare la resistenza all’avanzamento su strada (tramite
un freno) e l’inerzia del veicolo, attraverso masse collegate ai rulli. La sua regolazione
deve rimanere costante nel tempo e non deve provocare vibrazioni percettibili sul
veicolo, tali da nuocere al normale funzionamento del medesimo. La velocità del veicolo
deve essere determinata in base alla velocità di rotazione del rullo (del rullo anteriore nel
caso di banchi a due rulli) e deve essere misurata con un’approssimazione di 1 km/h a
velocità superiori a 10 km/h.
Il banco può avere uno o due rulli. Il rullo, nel caso ve ne siano due quello anteriore, deve
trascinare, direttamente o indirettamente: le masse di inerzia e il freno.
La forza assorbita dal freno e dagli attriti interni del banco per una velocità da 0 a 120
km/h è data dalla seguente formula:
F = [a + (b ⋅ V 2 ) ± (0.1 ⋅ F80 )]
(Eq 5-1)
in cui F esprime la forza totale assorbita dal banco dinamometrico, F80 la forza assorbita
177
alla velocità di 80 [km/h], a è un coefficiente che permette di tenere conto della forza di
rotolamento, b un coefficiente che permette di tenere conto della resistenza opposta
dall’aria all’avanzamento.
Per effettuare la regolazione del banco occorre poter misurare la depressione nel
collettore d’aspirazione del veicolo con una precisione di ±0.25 kPa e deve essere
possibile registrare questo parametro in modo continuo o a intervalli che non superino un
secondo.
Anche la velocità deve essere registrata in continuo, con una precisione di ±0.4 km/h.
Dopodiché si eseguono le prove su pista, ovvero si fa funzionare il veicolo ad una
velocità costante di 80 km/h, registrando velocità e depressione: si ricava così la T80,
ovvero il valore del carico che, a 80 [km/h], impone lo stesso livello di pressione nel
collettore.
Per la regolazione del freno del banco occorre far funzionare il veicolo, dopo averlo
scaldato, ad una velocità costante di 80 [km/h] e regolare il freno in modo da ottenere il
valore di depressione nel collettore ottenuto in precedenza, durante la prova su pista.
Oppure, con l’accordo del costruttore, si può regolare il freno in modo da assorbire la
potenza esercitata sulle ruote motrici a una velocità costante di 80 km/h in conformità con
la Tabella 5-2.
Le inerzie collegate ai rulli devono essere scelte secondo la massa di riferimento,
riportata in Tabella 5-3.
Per massa di riferimento Mr si intende la somma di tara, rifornimenti più 100 kg.
Le prestazioni dinamiche degli attuatori, di cui si è discusso al paragrafo precedente,
consentono la simulazione di un ciclo MVEG completo: conoscendo il comportamento
del motore durante l’esecuzione di un ciclo su banco a rulli è possibile, impiegando gli
attuatori del banco, imporre le stesse condizioni di funzionamento, simulando perciò
l’esecuzione della prova di omologazione Basta, ad esempio, conoscere la velocità
angolare, la pressione nel collettore e/o la posizione della valvola a farfalla durante le
prove su banco a rulli, e fare in modo che le stesse traiettorie siano seguite sul banco
freno.
178
Massa di
riferimento del
veicolo
Mr [kg]
Mr<480
480<Mr<540
540<Mr<595
595<Mr<650
650<Mr<710
710<Mr<765
765<Mr<850
850<Mr<965
965<Mr<1080
1080<Mr<1190
1190<Mr<1305
1305<Mr<1420
1420<Mr<1530
1530<Mr<1640
1640<Mr<1760
1760<Mr<1870
1870<Mr<1980
1980<Mr<2100
2100<Mr<2210
2210<Mr<2380
2380<Mr
Potenza e forza
Inerzia
assorbita dal banco a
equivalente
80 km/h
kg
kW
N
455
3,8
171
510
4,1
185
570
4,3
194
625
4,5
203
680
4,7
212
740
4,9
221
800
5,1
230
910
5,6
252
1020
6,0
270
1130
6,3
284
1250
6,7
302
1360
7,0
315
1470
7,3
329
1590
7,5
338
1700
7,8
351
1810
8,1
365
1930
8,4
378
2040
8,6
387
2150
8,8
396
2270
9,0
405
2270
9,4
423
Coefficienti
a
N
3,8
4,2
4,4
4,6
4,8
5,0
5,2
5,7
6,1
6,4
6,8
7,1
7,4
7,6
7,9
8,2
8,5
8,7
8,9
9,1
9,5
b
N/(km/h)^2
0,0261
0,0282
0,0296
0,0309
0,0323
0,0337
0,0351
0,0385
0,0412
0,0433
0,0460
0,0481
0,0502
0,0515
0,0536
0,0557
0,0577
0,0951
0,0605
0,0619
0,0646
Tabella 5-2: potenza assorbita
Massa di riferimento del
veicolo
Mr [kg]
Massa equivalente del
sistema di inerzia
I [kg]
Mr<750
750<Mr<850
850<Mr<1020
1020<Mr<1250
1250<Mr<1470
1470<Mr<1700
1700<Mr<1930
1930<Mr<2150
2150<Mr<2380
680
800
910
1130
1360
1590
1810
2040
2270
Tabella 5-3: masse di riferimento
179
2800
tes t bench
target
roll dynamometer
2600
2400
2200
2000
1800
1600
1400
1200
1000
0
20
40
60
80
100
120
140
160
Figura 5-7: simulazione di una porzione di ciclo MVEG
In figura 5.7 è possibile osservare le traiettorie della velocità angolare imposta, di quella
effettivamente raggiunta e, infine, di quella campionata sul banco a rulli in una porzione
del ciclo MVEG. E` evidente come l’unica zona di discrepanza si abbia in corrispondenza
di un comando errato, ovvero in una zona in cui la velocità angolare imposta si discosta
da quella fatta registrare sul banco a rulli. Si può infatti notare che, anche in questa zona,
la traiettoria rilevata sul freno a correnti parassite non si discosta da quella di riferimento.
1.1
test bench
roll dynamometer
1
3500
0.9
3000
0.8
test bench
roll dynamometer
0.7
2500
0.6
0.5
0.4
0
10
20
30
40
50
60
70
80
2000
0
10
20
30
40
50
60
70
80
Figura 5-8: velocità angolare e pressione nel collettore in una porzione di un ciclo MVEG
180
Non basta però che le traiettorie di velocità siano le medesime: anche il carico deve
essere, negli stessi istanti, coincidente: per questo si deve confrontare anche la pressione
nel collettore (Figura 5.8). Non avendo a disposizione un freno dinamico, non si possono
simulare le traiettorie di velocità del motore che si avrebbero in situazioni in cui il
veicolo trascina il motore, a meno di non impiegare una diversa pressione nel collettore.
2400
rolls dynamometer
eddy current brake
Engine Speed [rpm]
2200
2000
1800
1600
1400
1200
1000
800
0
1
2
3
4
Time [s]
5
6
7
Figura 5-9: andamenti della velocità angolare in un rilascio.
La figura 5.8 mostra l’andamento di velocità angolare fatto registrare nelle stesse
condizioni (cut off), sul veicolo ed al banco: l’effetto dell’inerzia del veicolo in questo
caso è evidente. Tali zone del ciclo non sono comunque determinanti dal punto di vista
delle emissioni inquinanti e non limitano quindi la validità dell’esperimento e la capacità
di riprodurre le emissioni fatte registrare su veicolo.
5.3 SIMULAZIONE DEL VEICOLO
Come accennato in precedenza, affinché il risultato delle analisi dei gas di scarico,
effettuate sul motore al banco, sia attendibile ai fini delle omologazioni, occorre che il
motore funzioni esattamente come se fosse sul veicolo in prova.
181
Questo significa che i due motori, quello al banco e quello sul veicolo, devono avere,
istante per istante, la stessa velocità di rotazione e lo stesso carico (nel caso di un motore
ad accensione comandata ci si potrebbe riferire direttamente alla pressione nel collettore).
In pratica, alla stessa pressione nel collettore corrisponde lo stesso numero di giri se la
coppia resistente è la stessa per entrambi i motori.
Le condizioni di funzionamento di un motore nella marcia su strada possono essere
schematizzati, ai fini della simulazione, come
-
Marcia standard: motore e ruote hanno la stessa velocità di rotazione, a meno del
rapporto di trasmissione e del coefficiente di slittamento del pneumatico; la
frizione è innestata e il pedale del freno è sollevato.
-
Marcia con cambiata: comprende gli istanti in cui si esegue il cambio della
marcia. Questa fase può essere pensata come la successione delle seguenti azioni:
chiusura della farfalla, disinnesto della frizione, cambio marcia, reinnesto di
frizione e contestuale ri-apertura della farfalla.
-
frenata: generalmente essa avviene a farfalla chiusa, con frizione innestata o
disinnestata.
5.3.1 Equivalenza delle condizioni di funzionamento
Per ottenere l’equivalenza dei due sistemi (motore montato sul veicolo e motore montato
al banco), è necessario considerare l’equilibrio delle coppie e delle forze che agiscono sui
rispettivi elementi, e imporre le stesse condizioni di funzionamento.
Quando il motore è posto sul veicolo è sottoposto a due azioni: la coppia trasmessa dai
dischi della frizione solidali all’albero motore e la coppia d’inerzia derivante
dall’accelerazione delle sue inerzie.
Per quanto riguarda il lato driveline e veicolo, la coppia trasmessa dalla frizione viene
bilanciata dalle coppie di inerzia dovute al veicolo, alle ruote, alla driveline e al cambio,
nonché dalla coppia resistente dovuta all’avanzamento del veicolo e, eventualmente, dalla
coppia frenante esercitata tramite i freni.
182
JE , ωE
TE TCE
TCE
TCD
JW , J, ωW
FR
TR
TCD
TB
JDi , ωi
Figura 5-10: scomposizione dei carichi sui componenti
Tale scomposizione è rappresentata in Figura 5-10.
In questa trattazione tutti i vettori (coppia, forza e velocità) sono stati considerati positivi
nel verso di avanzamento o nelle azioni di trazione per il veicolo, e sono stati ipotizzati
tutti dello stesso segno. Questo significa che, in un’applicazione numerica, ci si aspetterà,
ad esempio, per le coppie resistenti, un valore negativo.
Applicando la seconda legge di Newton sul lato motore, sulla frizione e sul lato vettura,
si avranno le seguenti equazioni di equilibrio:
183
TE + TCE = J E ⋅
dω E
dt (Eq 5-2)
TCE = −TCD
TCD ⋅τ + T R + T B = ( J V + J W ) ⋅
(Eq 5-3)
dω W
dω
+ ∑ J Di ⋅ i
dt
dt (Eq 5-4)
i
Imponendo l’equilibrio alla frizione, (Eq 5-3), si ottiene la coppia agente sul motore in
funzione delle coppie agenti sul il veicolo:
TCD = T E − J E ⋅
dω E 1 
dω
dω 
= ⋅  − T R − TB + ( J V + J W ) ⋅ W + ∑ J Di ⋅ i 
dt
dt
dt  (Eq 5-5)
τ 
i
La velocità di rotazione di ogni elemento della driveline è ovviamente in relazione con la
velocità angolare della ruota, e quest’ultima è legata alla velocità veicolo:
ω i = ωW ⋅τ i
ωW =
(Eq 5-6)
V
R (Eq 5-7)
Tutto questo sarebbe vero, ovviamente, in assenza di slittamento. La (Eq 5-7) rimane
valida se lo slittamento è introdotto indirettamente, in termini di variazione del raggio di
rotolamento.
Tutti i termini inerziali possono essere riferiti allo stesso albero attraverso l’equivalenza
dell’energia cinetica:
1
1
⋅ M ⋅ V 2 = ⋅ J V ⋅ ωW2
2
2
1
1 '
⋅ J Di ⋅ ω i2 = ⋅ J Di
⋅ ωW2
2
2
JV =
⇒
⇒
M ⋅V 2
ω
2
W
= M ⋅ R2
'
J Di
= J Di ⋅τ i2
(Eq 5-8)
(Eq 5-9)
La coppia dovuta alle resistenze aerodinamiche e di rotolamento TR può essere calcolata
conoscendo le forze resistenti FR che agiscono sul veicolo. Queste ultime possono essere
determinate tramite un modello del veicolo e risulteranno funzione della sua velocità e di
184
alcuni parametri tecnici, come il coefficiente di resistenza aerodinamico Cx, la superficie
frontale, il coefficiente d’attrito, ecc.
Per semplicità si considera costante il raggio di applicazione delle forze alla ruota, ipotesi
che comunque, anche in caso di slittamento del pneumatico, non si allontana molto dalla
realtà:
TR = FR ⋅ R0 (Eq 5-10)
dω W
1 dV
=
⋅
dt
R0 dt (Eq 5-11)
Combinando le equazioni appena viste si ottiene una nuova formulazione per la (Eq 5-5):
TE − J E ⋅
dω E
τ  dV
R T
 M ⋅ R JW
= − FR ⋅ − B + 
+
+ ∑ J Di ⋅ i  ⋅
dt
R  dt (Eq 5-12)
τ τ  τ
τ ⋅R i
Il segno negativo dei due primi termini del secondo membro è dovuto alla convenzione
sui segni, spiegata in precedenza. In realtà entrambi questi termini risultano essere
negativi (quindi di contributo positivo al secondo membro), visto che, sia la coppia
resistente che la coppia frenante, si oppongono al moto del veicolo.
Considerazioni analoghe possono essere fatte per il motore al banco. In questo caso il
motore è direttamente collegato al freno, sul banco di prova (Figura 5-11), quindi il
carico del motore è determinato dalla coppia resistente applicata dal freno TCB e dalla
coppia d’inerzia dovuta all’accelerazione delle inerzie di motore e freno.
JCB , ωE
JE , ωE
TE
TCB
Figura 5-11: motore al banco: scomposizione in sottosistemi
L’equazione di equilibrio di questo sistema è la seguente:
185
T E + TCB = ( J E + J CB ) ⋅
dω E
dt (Eq 5-13)
che può anche essere vista come:
TE − J E ⋅
dω E
dω E
= −TCB + J CB ⋅
dt
dt (Eq 5-14)
Le equazioni (Eq 5-13) e (Eq 5-14) determinano le condizioni per l’equivalenza dei due
sistemi analizzati:
dω E 
dω E 


=  TE − J E ⋅
 TE − J E ⋅


dt  veicolo 
dt  banco

(Eq 5-15)
da tale eguaglianza è possibile individuare la coppia frenante da richiedere al freno per
rispettare l’equivalenza dei due sistemi:
TCB = FR ⋅
R
τ
+
τ  dV
dω
 M ⋅ R JW
−
+
+ ∑ J Di ⋅ i  ⋅
+ J CB ⋅ E
R  dt
dt (Eq 5-16)
τ  τ
τ ⋅R i
TB
Questa equazione non può essere usata quando la frizione è disinnestata, anche solo
parzialmente. Infatti, quando il pedale della frizione viene premuto, la forza con cui i
dischi sono premuti l’uno contro l’altro cala, e la coppia trasmessa dall’innesto
diminuisce fino ad annullarsi, nel momento in cui il pedale della frizione viene premuto
completamente.
Per avere l’equivalenza dei due sistemi in ogni fase di guida, occorre considerare
l’influenza della posizione della frizione, da cui dipende la coppia trasmessa dall’innesto.
Tale scopo può essere raggiunto inserendo un fattore c(t), variabile nel tempo da 0 a 1,
rispettivamente per le condizioni di frizione disinnestata (pedale frizione premuto) e
frizione completamente innestata (pedale della frizione rilasciato).
Volendo simulare un cambio di marcia il fattore c(t) dovrà, prima, passare rapidamente
da 1 a 0, per simulare il disinnesto, rapido, della frizione, poi rimanere uguale a 0,
durante il periodo in cui viene cambiata la marcia, ovvero modificato il rapporto di
trasmissione, e infine tornare gradualmente da 0 ad 1, per simulare il reinnesto della
frizione e quindi la progressiva reintroduzione del carico nei confronti del motore
Con l’introduzione del fattore c(t) la (Eq 5-15) diventa:
186
TE − J E ⋅

τ  dV 
dω E
R T
 M ⋅ R JW
= c(t ) ⋅ − FR ⋅ − B + 
+
+ ∑ J Di ⋅ i  ⋅

dt
R  dt 
τ τ  τ
τ ⋅R i

(Eq 5-17)
e quindi la (Eq 5-16):

τ  dV 
dω E
R T
 M ⋅ R JW
TCB = c(t ) ⋅  FR ⋅ + B − 
+
+ ∑ J Di ⋅ i  ⋅
 + J CB ⋅
R  dt 
dt
τ τ  τ
τ ⋅R i

(Eq 5-18)
L’ultima espressione rappresenta la coppia frenante che il freno del banco prova deve
opporre alla coppia motrice del motore affinché vi sia, in ogni condizione di
funzionamento, l’equivalenza tra prova al banco e prova sul veicolo.
L’equivalenza delle condizioni di funzionamento appena determinata, ci permette di
affermare che il motore al banco può essere soggetto alle stesse condizioni di carico e
regime di rotazione del motore montato sul veicolo.
Si è quindi in grado di simulare al banco ogni condizione di funzionamento
dell’autovettura riproducibile attraverso la coppia Tcb.
5.3.2 MODALITA` DI GESTIONE
Definita la filosofia di controllo del banco (M, %) e imposta la condizione che permette
di simulare la presenza del veicolo determinando la coppia resistente da richiedere al
freno, rimane ancora un grado di libertà: la gestione della valvola a farfalla. Da questo
punto di vista si possono pensare due alternative: la gestione del comando
dell’acceleratore può infatti essere automatizzata, nel caso, ad esempio, di simulazione di
un ciclo di omologazione, o manuale, nel caso in cui si voglia lasciare all’operatore la
possibilità di decidere autonomamente come “guidare”.
In generale, il modello di dinamica veicolo - motore al banco può essere così
schematizzato:
187
ICB
Modello
di dinamica
veicolo
“PILOTA”
αT
## ## ##
V
Figura 5-12: layout del sistema
6
In Figura 5-12 si mette in evidenza come, lo schema generale, preveda un blocco “pilota”
tramite il quale si decide come “guidare” il veicolo (a questo punto, ovviamente,
simulato), che potrà prevedere la selezione di una guida automatica o manuale; il blocco
“modello di dinamica del veicolo”, trasforma le uscite del blocco pilota in attuazioni per
il motore e per il freno al banco, ovvero posizione farfalla αT e corrente di frenatura ICB.
In questo blocco viene stimata la velocità veicolo V, la quale viene impiegata come
variabile di retroazione dal blocco pilota per essere confrontata con la traiettoria di
velocità del ciclo, nel caso di guida automatica, oppure viene controllata dall’operatore,
analogamente a ciò che fa ogni pilota con il tachimetro dell’automobile.
In caso di guida automatica il veicolo deve seguire traiettorie predefinite di velocità in
funzione del tempo (ad esempio: ciclo di omologazione). Solitamente è imposta anche la
successione delle marce, e, di conseguenza, saranno prevedibili le conseguenti azioni del
pilota, quali l’innesto e disinnesto della frizione e l’impiego dell’acceleratore. Gli input
per il blocco pilota, parte integrante del modello Simulink che implementa il sistema di
controllo complessivo, saranno dunque la traiettoria di velocità da seguire (ciclo di
omologazione), la marcia inserita, la modalità di cambiata, sintetizzabili tramite
opportune mappe che ne esprimano l’andamento in funzione del tempo.
La velocità del veicolo, stimata dal modello, viene impiegata in retroazione, per decidere,
come farebbe un pilota sul banco a rulli, la posizione del pedale dell’acceleratore, e,
eventualmente, di quello dei freni. Se ad esempio la velocità calcolata per il veicolo
virtuale fosse inferiore a quella richiesta dal ciclo, il sistema di controllo in retroazione
(pilota automatico) aprirebbe di conseguenza la farfalla, viceversa, se fosse superiore, la
188
chiuderebbe. Se poi, a farfalla completamente chiusa, la velocità dovesse ancora essere
superiore a quella imposta, così come il pilota agirebbe sui freni dell’autoveicolo, il pilota
virtuale interverrebbe aumentando la coppia di frenatura richiesta al freno.
Figura 5-13: layout con guida automatico
Il valore dell’angolo di farfalla determinato nel blocco “controllo dell’acceleratore”
equivale alla richiesta del pilota, e deve quindi essere inviata al modello di controllo del
motore, che, in base al software presente nella ECU implementata, attuerà la
corrispondente apertura. Questo sistema consente l’impiego di soluzioni DBW; in caso di
soluzioni tradizionali, invece, il segnale di richiesta del guidatore automatico viene
direttamente attuato, senza essere “filtrato” dalla ECU.
Il modello di dinamica del veicolo, oltre alla velocità V, fornisce in uscita il carico, in
termini di coppia di frenatura da attuare al freno.
In caso di guida manuale, invece, l’operatore gestisce liberamente i comandi, come se
fosse sul veicolo. Come in un qualsiasi veicolo, gli input che il pilota invia al modello
saranno: posizione acceleratore, posizione pedale frizione, posizione pedale freno, marcia
inserita, eventualmente, angolo di sterzatura.
189
Figura 5-14: layout con guida manuale
La posizione dell’acceleratore entra direttamente nel blocco che simula la centralina
elettronica, che determina la posizione della farfalla da attuare sul motore al banco.
Gli altri comandi del pilota rappresentano ingressi per il modello di dinamica veicolo (o
dei carichi) dove vengono usati per calcolare la coppia di frenatura.
La velocità del veicolo può essere visualizzata all’operatore, nel caso in cui voglia
controllare l’effetto dei suoi comandi su tale parametro.
5.4 IL MODELLO DEL VEICOLO
Il modello che simula la dinamica del veicolo, per le ipotesi fatte in precedenza, deve
fornire in ogni istante il valore della coppia frenante da richiedere al freno per rispettare
l’equivalenza dei due sistemi, ovvero motore al banco e motore montato sul veicolo. Tale
coppia, finora indicata con TCB, è dovuta principalmente alla somma delle diverse coppie
resistenti che si oppongono al moto del veicolo, inoltre tiene conto del contributo fornito
dalle inerzie del freno a correnti parassite, presente nel banco (e ovviamente non sulla
vettura).
Le coppie resistenti possono essere divise in tre gruppi: resistenze di rotolamento,
resistenze aerodinamiche e resistenze dovute alle inerzie.
190
Il modello deve fornire anche una stima della velocità del veicolo in ogni istante di
simulazione, per dare la possibilità al blocco “pilota”, sia esso manuale o automatico, di
seguire la traiettoria di velocità desiderata.
Per semplicità, si scompone il modello di veicolo in diversi sottomodelli ognuno dei quali
ha il compito di simulare parte del sistema. Si definiscono allora i seguenti sottosistemi:
-
modello del pneumatico, che ha il compito di individuare l’effettivo raggio di
rotolamento e la resistenza al rotolamento del pneumatico
-
modello
aerodinamico,
nel
quale
vengono
determinate
le
resistenze
aerodinamiche in funzione della velocità del veicolo
-
modello delle inerzie
-
modello di frizione, che, in funzione della posizione del pedale della frizione,
fornisce l’entità della coppia trasmessa dall’innesto
-
modello di impianto frenante, che, in funzione della posizione del pedale del
freno, determina l’entità della coppia frenante su ogni ruota
-
eventuale modello di sterzo, nel caso in cui interessi simulare anche il
comportamento del veicolo in curva
Il sistema così suddiviso può essere schematizzato come in Figura 5-15, in cui sono
rappresentati, alla sinistra, in cornice blu i sistemi reali (motore e freno), in rosso gli input
dovuti al pilota ed in verde i veri e propri sottosistemi appartenenti al modello.
Figura 5-15: modello del veicolo
191
5.4.1 MODELLO DEL PNEUMATICO
Nello studio delle forze scambiate tra ruota e suolo è opportuno ricorrere al sistema di
riferimento rappresentato in Eq 5-16.
La sua origine è fissata nel centro della zona di contatto tra ruota e suolo, gli assi X e Y
definiscono il piano di contatto, con l’asse X, definito dall’intersezione tra il piano medio
della ruota ed il suolo, e diretto nella direzione d’avanzamento.
Il riferimento considerato è il più generale, in quanto tiene conto dell’inclinazione γ del
piano della ruota rispetto al piano XZ perpendicolare al piano stradale e dell’angolo di
deriva α, ovvero dell’angolo tra l’asse X e la direzione della velocità della ruota.
Il modello da noi considerato si basa su di un pneumatico in rotolamento con: α = γ = 0 ,
dove la forza che il pneumatico riceve dal suolo agisce nel centro della zona di contatto.
Fig 5-16: sistema di riferimento per lo studio del pneumatico
Tale forza può essere scomposta lungo gli assi del riferimento dando origine a tre
componenti: Fx (forza longitudinale), Fy (forza laterale) ed Fz (forza normale).
Allo stesso modo il momento che il pneumatico riceve dalla strada, nell’area di contatto,
può essere scomposto lungo le stesse direzioni: Mx (momento di ribaltamento), My
(momento dovuto alla resistenza di rotolamento), Mz (momento di auto allineamento).
Il momento applicato al pneumatico dal veicolo attorno al suo asse di rotazione è il
192
momento motore o coppia motrice T.
Se consideriamo una piccola porzione dell’area di contatto pneumatico strada, la forza
per unità di area esercitata dal pneumatico sulla strada, può essere scomposta in:
una componente perpendicolare alla strada, detta σz
una componente tangenziale τ, la quale può essere ulteriormente scomposta nelle
direzioni X e Y, dando origine alle componenti τx e τy
Le risultanti delle distribuzioni di σz, τx e τy sono le già definite forza normale,
longitudinale e laterale.
Queste distribuzioni non sono costanti e sono influenzate da molti fattori, come struttura
del pneumatico, carico, pressione dell’aria, ecc.
Se la ruota non è in movimento, la distribuzione delle tensioni normali σz è simmetrica
rispetto al piano YZ e anche rispetto al piano XZ, come possiamo notare dalla figura
seguente:
Figura 5-17: distribuzione delle tensioni a pneumatico fermo
In questa condizione, la risultante delle σz passa attraverso il centro di contatto.
Data la sua elasticità in senso verticale, un pneumatico rotolante in “folle” (free rolling) e
sottoposto ad un carico verticale, si “schiaccia” nella zona di contatto con il suolo. Il
contatto è quindi ben lontano dall’essere puntiforme. In tale zona la distanza RL tra l’asse
del pneumatico e il suolo diviene perciò minore del raggio indeformato R, come si può
comprendere osservando la Figura 5-18.
193
Figura 5-18: deformazione del pneumatico in free rolling
Per motivi di deformabilità strutturale e di (modesta) resistenza al rotolamento, l’effettivo
raggio di rotolamento Re del pneumatico non coincide né con R né con RL, ma ha un
valore intermedio tra i due. Ne deriva che il vero centro di istantanea rotazione assoluta
del pneumatico si trova leggermente al di sotto del piano stradale, quindi non coincide,
come si potrebbe supporre, col punto A, centro della zona di contatto.
Le differenze, di fatto, sono modestissime, ma concettualmente importanti per capire la
meccanica del pneumatico.
Applicando il principio del moto relativo, considerando cioè fermo il centro del
pneumatico, con il suolo che gli scorre sotto con velocità V, pari alla velocità della
vettura, si considera la velocità angolare ω del pneumatico pari a V/Re e perciò la velocità
periferica del battistrada scarico:
V P = ω ⋅ R (Eq 5-20)
Essa è maggiore della velocità della vettura, in quanto Re < R.
Ne consegue che ogni elemento del battistrada, avvicinandosi al contatto, deve rallentare,
e dunque comprimersi in senso tangenziale, ed accelerare, dunque distendersi,
allontanandosene.
194
Tale variazione di velocità viene evidenziata chiaramente in Figura 5-14, dove è
rappresentato l’andamento della velocità periferica del battistrada per ogni punto della
circonferenza esterna del pneumatico.
A causa della loro bassa rigidezza verticale, i pneumatici radiali hanno un raggio sotto
carico RL minore di quello dei pneumatici convenzionali con uguale R, ma il raggio di
rotolamento effettivo Re è più vicino al raggio indeformato, dato che la fascia battistrada
è circonferenzialmente più rigida.
Ad esempio valori tipici possono essere:
Re = 96% di R e RL = 94% di R per un pneumatico convenzionale
Re = 98% di R e RL = 92% di R per un pneumatico radiale
Il raggio di rotolamento effettivo Re di un pneumatico in “free rolling”, è influenzato da
diversi fattori dipendenti dal tipo di pneumatico e dalle condizioni di funzionamento,
quali il tipo di struttura della carcassa, il tipo di struttura delle tele, lo stato di usura del
battistrada, la pressione del pneumatico, il carico Fz e la velocità del veicolo.
Ad esempio si rileva che un aumento del carico Fz o una diminuzione della pressione del
pneumatico, provocano una riduzione sia di Re che di RL; al crescere della velocità il
pneumatico tende poi ad espandersi sotto l’azione della forza centrifuga, per cui R, RL e
Re tenderanno ad aumentare. Questo aumento è notevole nel caso di pneumatici a
struttura convenzionale, mentre è molto contenuto, a causa della notevole rigidezza
circonferenziale della cintura, nei pneumatici radiali.
Gli andamenti del raggio di rotolamento sono rappresentati di seguito, per pneumatici
7,60-15 a tele incrociate (convenzionale) e 155 SR 15 a carcassa radiale:
195
Figura 5-19: variazione del raggio di rotolamento con la velocità del veicolo
Quanto esposto vale per pneumatici in rotolamento “folle”, qualsiasi coppia motrice o
frenante applicata alla ruota porta a notevoli variazioni di Re.
Si consideri una ruota in rotolamento “folle” su di una superficie piana. Se la ruota e la
strada fossero perfettamente indeformabili, non ci sarebbe alcuna resistenza e di
conseguenza nessuna necessità di esercitare una forza di trazione.
Tuttavia, nella realtà non esistono corpi perfettamente rigidi e sia la strada che la ruota
sono soggetti a deformazioni nella zona di contatto: durante il moto nuovo materiale
entra continuamente in questa zona e viene quindi deformato, per poi tornare alla sua
forma iniziale quando se ne allontana. Per produrre questa deformazione è necessario
spendere una certa quantità di energia, che non viene del tutto recuperata alla fine della
zona di contatto a causa dello smorzamento interno del materiale (isteresi).
Riassumendo questo continuo processo di compressione-distensione, subito da ciascun
elemento del battistrada, introduce, tramite l’elevata isteresi della gomma, il principale
meccanismo di dissipazione di energia all’interno della struttura stessa del pneumatico.
Tali dissipazioni costituiscono la radice profonda della resistenza al rotolamento del
pneumatico.
Nel caso di pneumatici in rotolamento su asfalto o su cemento, le deformazioni sono
localizzate quasi esclusivamente nella ruota ed il fenomeno è dominato dall’energia
dissipata nei pneumatici.
Altri meccanismi, come piccoli strisciamenti tra ruota e suolo, la resistenza aerodinamica
e l’attrito del perno sono responsabili di un piccolo contributo alla resistenza totale,
196
dell’ordine di pochi punti percentuali.
Figura 5-20:distribuzione delle pressioni a ruota in movimento
La distribuzione delle pressioni, che, a ruota ferma, era simmetrica rispetto al centro della
zona di contatto, diventa asimmetrica quando la ruota è in rotolamento e la loro risultante
Fz si muove in avanti di una quantità ∆x, producendo una coppia:
M y = − Fz ⋅ ∆x
rispetto
all’asse di rotazione (Figura 5-20).
La resistenza di rotolamento è prevalentemente dovuta a questa coppia, insieme ai piccoli
contributi dell’attrito al perno e della resistenza aerodinamica della ruota, che possono
essere sinteticamente raccolti nella quantità Mf.
La resistenza di rotolamento viene definita dal documento SAE J670 come:
“quella forza applicata nel centro della ruota in direzione dell’asse X tale per cui il suo
momento rispetto ad una retta passante per il centro di contatto del pneumatico e
parallela all’asse di rotazione della ruota, EQUILIBRI il momento delle pressioni di
contatto del pneumatico intorno a tale retta”
Si userà questa definizione con due piccole modifiche. Innanzi tutto la forza viene
cambiata di segno, cosicché si otterrà una forza agente in direzione opposta alla velocità.
Poi vengono inseriti il momento resistente aerodinamico della ruota e la coppia resistente
applicata al perno, tramite Mf, in modo da considerare anche questi due effetti nella
resistenza di rotolamento totale.
Fatte queste dovute considerazioni, si può determinare la resistenza di rotolamento Fr di
197
una ruota in rotolamento “folle” su una strada piana, con il suo piano medio coincidente
con il piano XZ, cioè con α = 0 e γ = 0 e ipotizzando che non sia applicato altro momento
traente o frenante oltre ad Mf.
Fr ⋅ R L = Fz ⋅ ∆x + M f
Fr =
(Eq 5-21)
− Fz ⋅ ∆x + M f
RL
(Eq 5-22)
L’equazione così ottenuta ha una limitata utilità pratica, per le difficoltà che si incontrano
nella determinazione di ∆x e Mf. Ai fini pratici la resistenza di rotolamento si esprime
come:
Fr = − f ⋅ Fz (Eq 5-23)
dove con f si è indicato il coefficiente di rotolamento, parametro che deve essere misurato
sperimentalmente. Tale coefficiente dipende da un gran numero di fattori, tra i quali la
velocità di marcia V, la pressione di gonfiaggio dei pneumatici p, il carico Fz gravante
sulla ruota, le dimensioni della ruota e della zona di contatto, la struttura e il materiale
costituente il pneumatico, la temperatura del pneumatico, la natura e le condizioni della
strada, le forze Fx ed Fy che la ruota esercita sul terreno.
Si analizzano dunque brevemente alcune di queste dipendenze, per individuare una
espressione di f che sia adatta all’implementazione nel modello.
Il coefficiente di rotolamento f cresce in generale al crescere della velocità di marcia V
del veicolo, dapprima lentamente, poi in misura più marcata (Figura 5-21). Tale
dipendenza è solitamente ricavata sperimentalmente, e dipende dal pneumatico
considerato (e dalle condizioni sperimentali). Si può tuttavia cercare un’espressione
empirica, di validità il più possibile generale.
198
Figura 5-21: andamento del coefficiente di attrito di rotolamento in funzione della velocità della
vettura
La legge f(V) può allora essere approssimata con un’espressione polinomiale del tipo:
n
f = ∑ fi ⋅V i
i =0
(Eq 5-24)
In generale si ritengono sufficienti due termini di tale espressione, per approssimare in
modo soddisfacente l’andamento sperimentale di f(V). Si può usare la seguente
espressione:
f = f 0 + K ⋅V 2
(Eq 5-25)
L’unico inconveniente di questa espressione è che bisogna conoscere i valori di f0 e di K
(valori sperimentali) per ogni pneumatico.
La velocità alla quale la curva f(V) presenta un “ginocchio” viene generalmente indicata
come velocità critica del pneumatico. La presenza di tale velocità può essere
agevolmente spiegata dai fenomeni vibratori che si verificano nei pneumatici ad alta
velocità, o per meglio dire, dall’amplificazione dei fenomeni non stazionari sempre
presenti nei vari elementi del pneumatico stesso, a causa del continuo passaggio da
situazione carica a scarica, nei pressi della zona di contatto.
Il funzionamento di un pneumatico al di sopra della velocità critica è tuttavia in buona
sostanza “proibito”per un pneumatico correttamente progettato.
199
In genere un aumento della pressione di gonfiaggio o una diminuzione del carico Fz
agente sulla ruota provocano una diminuzione del coefficiente di rotolamento ed un
innalzamento della velocità critica. Questo comportamento risulta abbastanza ovvio viste
le osservazioni fatte in precedenza, in quanto entrambe le operazioni eseguite tendono a
diminuire la deformazione del pneumatico.
Per tenere conto dell’influenza del carico e della pressione di gonfiaggio sul coefficiente
di rotolamento si può usare la seguente formula empirica suggerita dalla SAE :

5,5 ⋅ 10 5 + 90 ⋅ Fz 1100 + 0,0388 ⋅ Fz
K' 

f =
⋅  5,1 +
+
⋅ V 2 
1000 
p
p

(Eq 5-26)
Il coefficiente K’ vale 1 per i pneumatici convenzionali e 0,8 per quelli radiali. Il carico
Fz, la pressione p e la velocità V devono essere espresse rispettivamente in N, N/m2 (Pa) e
m/s.
Va comunque notato che, per ogni pneumatico, la pressione di gonfiaggio è determinata
in funzione del carico Fz, per cui non è possibile ridurre la resistenza di rotolamento
mediante arbitrarie variazioni di p.
Questa espressione di f risulta essere più idonea della precedente, ai fini del modello, in
quanto è descritta in funzione di quantità accessibili all’interno del modello stesso.
Si consideri una ruota in rotolamento, alla quale venga applicata una coppia frenante Mf.
Le distribuzioni delle pressioni normali e tangenziali che risultano dall’applicazione del
momento frenante sono schematizzate in Figura 5-22b.
Gli elementi della fascia battistrada che entrano in contatto con il suolo risultano in
trazione, mentre nel caso del rotolamento puro erano in compressione.
La velocità periferica della ruota, relativa al suo centro, con cui la fascia di battistrada
entra in contatto con il suolo ωRe’ è quindi maggiore della velocità periferica ωR della
ruota indeformata. Il raggio di rotolamento effettivo Re’, che nel caso di rotolamento puro
era Re, compreso tra RL ed R, si sposta verso R e, al crescere di Mf può diventare anche
maggiore di R.
200
Figura 5-22: velocità e pressioni di contatto per ruota traente (b) e frenata (a)
Il centro di istantanea rotazione C, distante Re dal centro della ruota, si porta quindi ad
una maggior profondità al di sotto della superficie stradale (Figura 5-23).
Figura 5-23: centro di istantanea rotazione per ruota in rotolamento puro, in frenatura ed in trazione
(b); ruota frenata: centro di istantanea rotazione e velocità di scorrimento (a)
La velocità angolare reale della ruota ω risulta minore di quella che caratterizza il
rotolamento puro: ω0 = V/Re.
Si può così definire uno scorrimento longitudinale σ della ruota come:
σ=
R
v ω ⋅ Re − V ω ⋅ R e
ω
−1= =
=
− 1 = e' − 1
'
ω0
V
V
ω ⋅ Re
Re
(Eq 5-27)
dove v è la velocità di spostamento della zona di contatto sul suolo e V è la velocità di
traslazione del centro della ruota.
201
Se invece di essere frenata, la ruota è motrice, la parte anteriore della zona di contatto è
compressa invece di essere tesa, come nel caso precedente (Figura 5-23). Il valore del
raggio di rotolamento effettivo Re’ è inferiore a quello che caratterizza il rotolamento
puro, e, di solito, è minore di RL. La velocità angolare reale della ruota risulta quindi
essere maggiore di ω0.
La presenza di una velocità di slittamento v non significa però che si abbia uno
slittamento globale del pneumatico. La velocità periferica nella prima parte della zona di
contatto vale infatti V = ωRe’, per cui in quella zona non si ha slittamento.
Solamente a partire dal punto indicato in Figura 5.24 con A la velocità della fascia
battistrada comincia a diminuire (nel caso di trazione, ad aumentare in frenatura) e si ha
una zona di slittamento. Questa zona, che si estende ad una piccola parte della zona di
contatto per bassi valori di σ, si allunga al crescere dello scorrimento fino ad occuparla
per intero. In queste condizioni il pneumatico si trova in slittamento vero e proprio, come
appare evidente in figura:
Figura 5-24: zona di slittamento nel contatto ruota suolo (a) e andamento qualitativo del coefficiente
di aderenza longitudinale µx
La forza longitudinale Fx che la ruota trasmette al suolo è funzione dello scorrimento σ.
Essa vale zero quando σ = 0, ruota in puro rotolamento (free rolling), e cresce molto
rapidamente, all’inizio con legge all’incirca lineare, raggiungendo poi un picco per valori
di slittamento tra il 10 e il 20%, e appiattendosi poi su valori più bassi. In frenatura il
valore estremo, per lo slittamento, è σ = -1, che caratterizza lo slittamento puro
(bloccaggio della ruota), in trazione, invece, σ può assumere qualsiasi valore positivo,
sino ad infinito per una ruota in rotazione a veicolo fermo.
202
In prima approssimazione si può ritenere che la forza Fx sia proporzionale, a parità di
scorrimento longitudinale σ, al carico normale Fz, per cui si può definire il coefficiente di
aderenza longitudinale:
µx =
Fx
Fz (Eq 5-28)
In Figura 5-24 è riportato l’andamento qualitativo del coefficiente di aderenza
longitudinale µx in funzione dello scorrimento longitudinale σ. Sul grafico si possono
individuare due valori notevoli di µx: il valore di picco, indicato con µp, ed il valore che
individua lo slittamento puro µs. Il primo valore caratterizza il massimo dell’aderenza in
trazione e in frenata.
Il tratto della curva µ(σ) che giace al di fuori del campo definito dai due picchi è nell’uso
pratico del veicolo, un tratto di funzionamento instabile. Infatti l’equazione del moto
della ruota intorno al suo asse è:
J⋅
dω
= Fx ⋅ R L − M f
dt
(Eq 5-29)
Se una diminuzione di σ a velocità V costante porta ad una diminuzione del valore
assoluto di µx, cioè della forza che mantiene la ruota in rotazione Fx, e tale diminuzione
non è accompagnata da una diminuzione del momento frenante Mf (non è realistico
ipotizzare che il guidatore riesca a dosare la frenatura in modo tale da impedire che ciò
avvenga), ne consegue un ulteriore rallentamento della ruota, accompagnato da una
riduzione di Fx. In pratica, una volta che il valore ottimale di σ, caratterizzato dal valore
µpf, è stato superato, si arriva immediatamente al bloccaggio completo della ruota.
Di solito le curve mostrano una certa simmetria tra le condizioni di frenatura e di
trazione, e spesso si ipotizza che la massima forza frenante sia, in modulo, uguale alla
massima forza traente.
La funzione µx(σ) dipende da un certo numero di parametri, quali il tipo di pneumatico
(mescola, dimensioni, carcassa), le condizioni della strada, la velocità del veicolo,
l’ampiezza della forza laterale Fy, ecc.
Il valore massimo della forza longitudinale diminuisce all’aumentare della velocità, ma
203
questa diminuzione è fortemente influenzata dalle condizioni della strada. In generale, la
diminuzione non è molto sensibile su strada asciutta, mentre è maggiore sulla strada
bagnata.
Figura 5-25: influenza della velocità di marcia sui valori di µP,( con A si indica suolo asciutto e B
bagnato)
I valori indicati nei grafici devono essere considerati solo come indicazioni medie, dal
momento che sono molto variabili. Si noti che, in buone condizioni, la forza longitudinale
può essere uguale al carico che agisce sul pneumatico o addirittura maggiore (µP > 1);
tuttavia i valori riportati si riferiscono a pneumatici normali, usati su vetture da turismo.
Pneumatici ad alte prestazioni, soprattutto quelli usati sulle vetture da competizione,
hanno valori di picco di µx che possono arrivare fino a 1,5-2, ma anche questi pneumatici
non raggiungono valori molto alti di coefficiente di forza longitudinale in condizioni di
slittamento; la differenza tra µP e µS è ancora maggiore.
Si noti che i pneumatici radiali offrono quasi sempre prestazioni migliori di quelli
convenzionali.
Le curve µx(σ) possono essere approssimate con espressioni analitiche. Nel campo -1 < σ
< 1 può essere usata la seguente formula:
µ x = A ⋅ (1 − e − Bσ ) + C ⋅ σ 2 − D ⋅ σ
(Eq 5-30)
204
1
 K n
B=

a
+
d

 e A, C, D, K, d ed n coefficienti che devono essere ottenuti dalle
essendo
curve sperimentali, e non hanno quindi alcun significato fisico. Essi non dipendono
soltanto dalle condizioni della strada, ma anche dal carico.
Un’ottima approssimazione della forza longitudinale Fx in funzione dello scorrimento σ
può essere ottenuta per mezzo dell’equazione empirica introdotta da Pacejka e nota come
“magic formula”. Questa espressione matematica permette di esprimere le forze Fx e Fy
ed il momento di autoallineamento Mz in funzione della forza normale Fz, dello
scorrimento σ, dell’angolo di deriva α e dell’angolo di campanatura γ.
L’equazione che dà la forza longitudinale Fx, in funzione dello scorrimento σ, è:
Fx = D ⋅ sin (C ⋅ arctan{B ⋅ (1 − E ) ⋅ (σ + S h ) + E ⋅ arctan[B ⋅ (σ + S h )]}) + S v (Eq 5-31)
dove B, C, D, E, Sv e Sh sono sei coefficienti che dipendono dal carico Fz e dall’angolo γ.
Essi devono essere ottenuti sperimentalmente e non hanno alcun significato fisico diretto.
Il modello di pneumatico sviluppato per l’auto in esame, ovvero la Punto 75, è valido per
una ruota con piano medio sempre perpendicolare alla strada, ovvero nell’ipotesi α = γ =
0.
Figura 5-26: andamento di µx in funzione di σ
205
L’andamento della curva µx(σ) può essere ottenuto utilizzando la (Eq 5-30), considerando
i seguenti dati: A = 1,12; C = 0,625; D = 1; n = 0,6; k = 46; d = 5, determinati sulla base
di ricerca bibliografica su veicoli di questo tipo.
Ciò che si vuole ottenere dal modello di pneumatico è il raggio effettivo di rotolamento
Re’ in ogni condizione di carico applicato alla ruota, per poter stimare la velocità del
veicolo, tramite la conoscenza della velocità angolare della ruota stessa:
V = ω ruota ⋅ Re'
(Eq 5-32)
Una volta noto il diagramma µx(σ) occorrerà trasformarlo in un diagramma Re’(Tw), che
esprima il valore del raggio effettivo di rotolamento in funzione della coppia applicata
alla ruota. Per far ciò ci si avvale delle seguenti relazioni:
Tw = Fx ⋅ R L = Fz ⋅ µ x ⋅ R L (Eq 5-33)
Re' =
Re
1 + σ (Eq 5-34)
essendo noti, per il veicolo in questione, Fz, RL e Re (questi ultimi due sono valori relativi
ad un pneumatico in rotolamento libero, free rolling). I dati a nostra disposizione riguardo
alla Punto 75 sono:
-
pneumatico: 165/65 R14, quindi di raggio indeformato pari a 285 mm
-
peso netto della vettura: 895 kg, per cui considereremo un peso in marcia di circa
1000 kg
Considerando una distribuzione dei carichi pari al 60% sull’avantreno e 40% sul
retrotreno (come confermato dai dati sperimentali relativi a questo modello), si otterrà un
carico verticale Fz su ogni pneumatico anteriore (ruote motrici), di circa 3000 N.
RL è scelto pari ad una frazione fissa del raggio indeformato, come suggerito in
bibliografia, ad esempio: RL = 92% di R.
Per quanto riguarda il valore di Re, invece, dal confronto con i dati tecnici di alcune
riviste del settore, pare più opportuno considerare: Re = 94% di R.
Grazie a queste ipotesi si può determinare il diagramma che esprime l’effettivo raggio di
rotolamento in funzione della coppia alla ruota:
206
Figura 5-27: andamento di Re’ in funzione di Tw
Come già accennato, una volta superato il valore corrispondente al picco di aderenza si
può ipotizzare la ruota già in condizione di bloccaggio (frenata) o di slittamento
(trazione) completo. Aggiungnedo poi che in situazioni di marcia ordinaria non si
raggiungono condizioni così estreme, si è deciso di non considerare la parte di
diagramma Re’(Tw) che supera i due picchi di aderenza. Di fatto questa considerazione
equivale a ipotizzare che sia sempre µx < µp.
Il diagramma così ottenuto, rappresentato in Figura 5-28, può essere introdotto tramite
una Look-up Table all’interno del modello di pneumatico in Simulink. In questo modo
basterà inviare, come ingresso per la Look-up Table, il valore della coppia alla ruota,
stimata dal modello, per ottenere in uscita il valore del raggio effettivo di rotolamento.
Nota la velocità di rotazione del motore al banco, si potrà dunque stimare la velocità del
veicolo utilizzando la (Eq 5-7).
207
Figura 5-28: limitazione dell’andamento di Re’ in funzione di Tw
5.4.2 RESISTENZA AERODINAMICA
L’unica forza esercitata dall’aria a veicolo fermo è la forza aerostatica, che agisce in
direzione verticale ed è uguale al peso del fluido spostato. Essa assume valori non
trascurabili solo nel caso di corpi rigidi molto grandi e leggeri, quindi viene
completamente trascurata nelle valutazioni aerodinamiche dei veicoli.
Se l’aria fosse un fluido a viscosità nulla sulla superficie del corpo non agirebbe alcuna
forza tangenziale e si potrebbe dimostrare che nessuna forza potrebbe essere scambiata
tra il corpo e il fluido, ad eccezione delle forze aerostatiche, qualunque fosse la velocità
relativa tra i due, dato che la risultante della distribuzione di pressione sarebbe nulla.
Sempre nel caso di fluido non viscoso, la pressione p e la velocità V dello stesso
sarebbero legate dall’equazione di Bernoulli:
p+
1
1
⋅ ρ ⋅ V 2 = cos tan te = p 0 + ⋅ ρ ⋅ V02
2
2
(Eq 5-35)
dove p0 e V0 sono i valori della pressione ambiente e della velocità in un punto
sufficientemente lontano dal corpo, a monte di esso.
208
I valori della pressione atmosferica, della densità, della temperatura e della viscosità
cinematica dell’aria a quote di interesse dal punto di vista automobilistico, estratti dalle
tabelle dell’aria I.C.A.O., sono riportati di seguito:
Tab 5-4: caratteristiche medie dell’aria in funzione della quota
La densità a temperature e pressioni diverse da Ta e pa in condizioni standard può essere
calcolata mediante la relazione:
ρ = ρa ⋅
p Ta
⋅
pa T (Eq 5-36)
Si noti che l’equazione di Bernoulli, valida lungo ciascuna linea di corrente, è stata scritta
senza il termine gravitazionale, che dà origine alle forze aerostatiche. Essa stabilisce
semplicemente la conservazione dell’energia lungo ciascuna linea di corrente.
Si consideri, per esempio, un cilindro circolare retto, di altezza infinita, disposto
normalmente ad una corrente di fluido, non viscoso, avente velocità Vr.
209
Figura 5-29: linee di corrente e campo delle pressioni per un cilindro di lunghezza infinita
Le linee di corrente si aprono intorno al corpo e la velocità del fluido aumenta nelle zone
intorno ad esso, dando luogo ad una diminuzione di pressione, come descritto
dall’equazione di Bernoulli. Nella parte anteriore vi è un punto (in realtà nel caso del
cilindro, una linea) che divide la parte della corrente che passa sopra il corpo da quella
che passa sotto ad esso. In tale punto, detto punto di arresto, la velocità della corrente si
annulla e la pressione raggiunge il suo valore massimo, quello della pressione totale:
p tot = p 0 + 1 ⋅ ρ ⋅V 2
2
(Eq 5-37)
Se la viscosità è nulla, non vi è dissipazione di energia, e, quando il fluido rallenta
nuovamente, dopo aver raggiunto la massima velocità nel punto in cui la larghezza del
corpo è massima, la pressione viene completamente recuperata: la distribuzione di
pressione è simmetrica ed il corpo non scambia alcuna forza con il fluido. Ciò è vero per
qualsiasi forma, purché la viscosità sia nulla.
In realtà nessun fluido è realmente privo di viscosità.
La viscosità ha un duplice effetto: da una parte produce le forze tangenziali che danno
luogo alla cosiddetta resistenza di attrito, dall’altra modifica la distribuzione di pressione,
la cui risultante non è più nulla. Questo secondo effetto, che per fluidi poco viscosi è in
210
generale più importante del primo, produce la portanza, la forza laterale e la resistenza di
pressione. Gli effetti diretti della viscosità, cioè le forze tangenziali, possono in generale
essere trascurati, mentre le modifiche che essa causa al campo aerodinamico devono
essere tenute in conto in ogni caso.
A causa della presenza della viscosità, lo strato di fluido a diretto contatto del corpo tende
ad aderirvi, cioè la sua velocità rispetto ad esso si annulla, causando la presenza, attorno
alla superficie esterna, di una zona di fluido in cui si hanno notevoli gradienti di velocità.
Tale zona viene detta strato limite, e si assume che tutti gli effetti della viscosità siano in
essa concentrati.
Figura 5-30: strato limite
Al di fuori dello strato limite la viscosità viene generalmente trascurata e si può applicare
l’equazione di Bernoulli.
Si nota che lo spessore dello strato limite cresce, man mano che il fluido perde energia a
causa della viscosità, e rallenta. Ad un certo punto il flusso nello strato limite si può
persino fermare, creando una zona di aria stagnante in contatto con il corpo: il flusso si
separa dalla superficie, spesso causando la formazione di una scia.
Se la distribuzione di velocità all’esterno dello strato limite fosse nota, sarebbe possibile
calcolare la distribuzione di pressione all’interfaccia tra strato limite e fluido esterno. Se
lo strato limite è molto sottile, come avviene sempre quando il flusso non è staccato dalla
superficie, si può assumere che la pressione sulla superficie sia uguale a quella che si ha
all’esterno dello strato limite, e le forze ed i momenti aerodinamici agenti sul corpo
possono essere calcolati integrando tale distribuzione di pressione. Mentre questo modo
di procedere può essere applicato per calcolare la portanza di corpi di buona finezza
211
aerodinamica, non porta tuttavia a risultati utili nel caso di corpi tozzi, come quelli
studiati nell’aerodinamica automobilistica, e per il calcolo della resistenza.
Si consideri allora il seguente sistema di riferimento:
Figura 5-27: sistema di riferimento per il veicolo
Per generalizzare i risultati sperimentali, ottenuti soprattutto nelle gallerie del vento, le
forze F ed i momenti M aerodinamici vengono espressi nella forma:
F=
M =
1
⋅ ρ ⋅ Vr2 ⋅ S ⋅ C f
2
(Eq 5-38)
1
⋅ ρ ⋅ Vr2 ⋅ S ⋅ l ⋅ Cm
2
(Eq 5-39)
dove le forze e i momenti sono considerati proporzionali alla pressione dinamica della
2
corrente ρVr / 2 , ad una superficie di riferimento S (nell’espressione del momento
compare anche una lunghezza di riferimento l) ed ai coefficienti dimensionali Cf e Cm, da
determinare sperimentalmente. Tali coefficienti dipendono dalla geometria e dalla
posizione del corpo, oltre che da due parametri dimensionali: i numeri di Reynolds e di
Re =
Mach. Il primo è definito come:
V ⋅l
ν , dove ν è la viscosità cinematica del fluido, ed
è un parametro che indica l’importanza relativa degli effetti inerziali e viscosi nel
determinare le forze aerodinamiche. Se il suo valore è basso, i secondi sono più
212
importanti dei primi, mentre se è alto le forze aerodinamiche sono dovute principalmente
6
all’inerzia del fluido. In quest’ultimo caso (per i veicoli se Re > 3 ⋅10 ), la dipendenza
dei coefficienti aerodinamici dal numero di Reynolds è molto piccola e può essere
trascurata. Ciò avviene di solito per gli autoveicoli, almeno per velocità maggiori di 3040 km/h.
Il numero di Mach è il rapporto tra la velocità dell’aria e la velocità del suono nel fluido.
Tale parametro adimensionale non ha alcun interesse nel campo automobilistico dato che
i valori della velocità raggiungibili dai veicoli su strada, ad eccezione di rarissimi veicoli
da primato, portano a numeri di Mach tanto bassi da non avere praticamente alcuna
influenza sui coefficienti aerodinamici.
La superficie S e la lunghezza l di riferimento sono arbitrarie, a tal punto che talvolta si
usa, come superficie di riferimento, una superficie non individuabile fisicamente. Esse
esprimono solamente la dipendenza delle forze e dei momenti rispettivamente dal
quadrato e dal cubo delle dimensioni lineari del corpo.
E’ però evidente che il valore dei coefficienti aerodinamici dipende dalla scelta di S e l,
che deve quindi essere specificata esplicitamente. In campo automobilistico la superficie
di riferimento è quella della sezione trasversale del veicolo, anche se una certa confusione
può essere dovuta al fatto che taluni usano l’area della proiezione frontale, altri l’area
della massima sezione trasversale.
Figura 5-32: sezioni di riferimento
La raccomandazione SAE J670 stabilisce che si deve usare la prima definizione, e che
tale proiezione deve includere anche i pneumatici e le parti sotto il veicolo.
Un modo semplice ma approssimato per esprimere il valore della superficie di
riferimento è S = ψ ⋅ t ⋅ h1 , dove il coefficiente ψ assume generalmente valori compresi
tra 0,85 e 0,95, t corrisponde alla carreggiata della vettura e con h1 si indica l’altezza del
213
veicolo.
La lunghezza di riferimento l è in genere il passo, anche se nell’espressione del momento
Mx ci si riferisce generalmente alla carreggiata t.
I coefficienti aerodinamici usati nell’aerodinamica autoveicolistica sono quelli relativi
alle componenti delle forze e dei momenti nel sistema di assi xyz di figura 5-27, ovvero:
-
Cx
coefficiente di forza longitudinale o coefficiente di resistenza
-
Cy
coefficiente di forza laterale
-
Cz
coefficiente di forza normale o coefficiente di portanza
-
CMx
coefficiente di momento di rollio
-
CMy
coefficiente di momento di beccheggio
-
CMz
coefficiente di momento di imbardata
Le forze e i momenti derivanti dalle azioni aerodinamiche possono essere così espressi:
-
Fx =
1
⋅ ρ ⋅ V r2 ⋅ S ⋅ C x = R
2
Fy =
1
⋅ ρ ⋅ V r2 ⋅ S ⋅ C y
2
Fz =
1
⋅ ρ ⋅ V r2 ⋅ S ⋅ C z = P
2
detta anche resistenza aerodinamica
detta anche portanza
Mx =
1
⋅ ρ ⋅ V r2 ⋅ S ⋅ t ⋅ C x
2
detto anche momento di rollio
My =
1
⋅ ρ ⋅ V r2 ⋅ S ⋅ l ⋅ C y
2
detto anche momento di beccheggio
Mz =
1
⋅ ρ ⋅ V r2 ⋅ S ⋅ l ⋅ C z
2
detto anche momento di imbardata
(Eq 5-40)
Volendo simulare solamente l’effetto della resistenza, e, eventualmente, quello della
portanza (che alleggerisce il carico sui pneumatici), è sufficiente prendere in
considerazione la prima e la terza delle precedenti equazioni, e saranno perciò necessari
solamente i dati di superficie frontale, coefficiente di resistenza all’avanzamento e
coefficiente di portanza, contenuti nella tabella riassuntiva dei dati del veicolo riportata
alla fine del presente capitolo.
Questi sono i parametri da modificare nel caso in cui si desideri porre in evidenza
214
l’effetto dei parametri aerodinamici sulle prestazioni (consumi, emissioni, ecc.).
5.4.3 SIMULAZIONE DELLE INERZIE
Note la massa del veicolo, il raggio di rotolamento dei pneumatici ed i rapporti di
trasmissione è possibile ricavare, secondo le (Eq 5-8) e (Eq 5-9), i momenti di inerzia
equivalenti, riportati cioè all’albero motore. Nel caso di funzionamento secondo il ciclo
di omologazione si dovrà impiegare, per la massa del veicolo un valore dipendente dalla
categoria alla quale appartiene il veicolo stesso, secondo la Tabella 5-2. E` ovvio che, nel
caso in cui si voglia determinare l’influenza della massa, o dei rapporti di trasmissione
sulle prestazioni (accelerazione, consumi, emissioni), si scelgono i rapporti di
trasmissione in maniera libera, influenzando di conseguenza i valori delle inerzie
equivalenti.
5.4.4 SIMULAZIONE DELLA TRASMISSIONE
Il motore a combustione interna è collegato alle ruote tramite una trasmissione che
comprende un innesto a frizione, un certo numero di ruote dentate ed alcuni giunti. E’
quindi necessario tenere conto del rendimento della trasmissione ηT.
L’espressione della potenza disponibile alle ruote PW:
PW = PE ⋅η T (Eq 5-41)
dove PE indica la potenza fornita dal motore.
Nel caso di una trasmissione meccanica, il suo rendimento può essere stimato senza
difficoltà: basta assegnare un rendimento costante a ciascuna coppia di ruote dentate e a
ciascun giunto, con valori dell’ordine di 0,97 per ruote dentate cilindriche, 0,95 per ruote
coniche od ipoidi e 0,99 per giunti cardanici od omocinetici. Quelli forniti sono
ovviamente dei valori medi , dato che il rendimento delle ruote dentate dipende da fattori
quali le condizioni di lubrificazione, la temperatura, l’usura, i giochi e, soprattutto,
soprattutto dipende dalla potenza trasmessa.
Per tenere conto della dipendenza del rendimento dalla velocità sono suggerite
espressioni empiriche, come la seguente, che però trascura la sua dipendenza dalla coppia
trasmessa:
215
ηt = [0,96 − 7,07 ⋅ 10−4 ⋅ V − 2,9 ⋅ 10−5 ⋅ V 2 ]⋅ {0,998⋅ [1 − 0,007⋅ (mg − i)] − 1,965⋅ 10−4 ⋅ (2,08mg−i ) ⋅ V }
Eq 5-42
dove la velocità V è espressa in m/s, mg è il numero di marce ed i indica la marcia usata.
5.4.5 SIMULAZIONE DELLA FRIZIONE E DELLA CAMBIATA
Si è ritenuto necessario elaborare un modello che ricostruisca il comportamento della
frizione ed il modo in cui essa viene gestita per stabilire come il carico venga trasferito
dalle ruote al motore: se la frizione è innestata il problema non si pone, potendo supporre
che la coppia resistente sia totalmente trasferita all’albero motore, mentre in fase di
cambiata questo non avviene. Come si è detto in 5.3.1, è necessario, per stabilire quale sia
la coppia frenante da richiedere al freno a correnti parassite, impiegare una funzione che
stabilisca la frazione di carico resistente trasferita al motore. Tale funzione potrà essere
ricavata sulla base di un modello fisico della frizione, in ragione delle caratteristiche
dell’innesto e della posizione del pedale di comando, oppure tramite un approccio
sperimentale, cercando, ad esempio, di capire quale sia lo “stile di guida” del collaudatore
che esegue il ciclo sul banco a rulli.
Siccome l’elaborazione di un modello a “scatola bianca” richiederebbe una approfondita
conoscenza del sistema e darebbe luogo a risultati non indispensabili per le esigenze del
modello di veicolo, si è optato per un modello semplificato, che si limita a semplici
considerazioni, necessarie per determinare il valore dei parametri di interesse.
Schematicamente la frizione può essere considerata costituita da due dischi, uno solidale
all’albero motore, l’altro solidale al primario del cambio, spinti l’uno contro l’altro
tramite una molla, e allontanati tramite il comando a pedale. La coppia viene trasmessa
per attrito, ed il massimo valore trasmissibile dipende dalla forza con cui le superfici sono
spinte l’una contro l’altra. Si suppone quindi che la coppia trasmissibile dall’innesto,
TcMAX, sia dipendente secondo una funzione da determinare (ad esempio: una spezzata,
per tenere conto del fatto che la prima parte della corsa è inefficace), della posizione del
pedale. Se la coppia resistente, o la coppia motrice (o, più in generale, la maggiore delle
due, Tc), fossero superiori a tale valore, la coppia effettivamente trasmessa dall’innesto
rimarrebbe congelata al valore TcMAX, e la velocità del motore non sarebbe più coerente a
quella del veicolo. Visto che, nella simulazione del veicolo, si deve poter prevedere
216
correttamente la velocità di rotazione delle ruote, per poter stimare il valore dei carichi
resistenti, è necessario impiegare un modello che consenta di prevedere l’andamento
della velocità relativa dei due dischi, nella condizione in cui sia Tc>TcMAX. Si possono
trovare in bibliografia applicazioni di modelli del tipo massa-molla-smorzatore, per
simulare condizioni di funzionamento quali le fasi di slittamento: in questo caso
Tc = Dc ⋅ (ω E − ω P ) + K C ⋅ ∫ (ω E − ω P ) ⋅ dt
(Eq 5-43)
La velocità angolare ωE è, in un’applicazione al banco, misurata, mentre la velocità del
primario ωP può essere determinata, una volta note la coppia Tc ed i parametri di
rigidezza e smorzamento.
La Figura 5-33 mostra come il modello descritto possa essere positivamente impiegato
per ricostruire la velocità del veicolo a partire dalla velocità di rotazione del motore,
anche nelle fasi di cambio marcia.
70
V
60
[km/h]50
40
30
20
10
0.4
0.6
0.8
1
1.2
Samples (250 Hz)
1.4
1.6
x 10
4
Figura 5-33: simulazione della velocità veicolo a partire dalla velocità di rotazione del motore
Se invece si vuole capire come la frizione viene gestita durante un ciclo di prova al banco
a rulli, si può optare per l’analisi dei dati sperimentali: nonostante non si disponga di un
segnale di posizione del pedale della frizione, è possibile osservare come il guidatore
217
gestisca i comandi durante i transitori di cambiata utilizzando i segnali disponibili.
In questo caso l’obiettivo consta nell’identificazione della procedura di cambiata, che può
essere in seguito implementata in maniera automatica: da una parte, impiegando il banco
secondo la strategia di guida automatica, questo consentirebbe di eseguire le cambiate
così come sono state eseguite dal collaudatore, dall’altra, nell’impiego con guida
manuale, sarebbe possibile fare avvenire in maniera automatica il solo cambio di marcia.
Si può osservare che la fase di cambiata è costituita da alcune fasi sempre presenti:
-
Rilascio acceleratore
-
Disinnesto frizione
-
Cambio marcia
-
Ripristino acceleratore e innesto frizione
E` quindi necessario definire da una parte la variazione del carico, e, dall’altra, la
traiettoria seguita dalla valvola a farfalla: si suppone infatti di inviare una richiesta di
cambiata senza alterare, da parte dell’utente del banco, la posizione della stessa, perciò è
necessario che la chiusura venga effettuata autonomamente.
In sostanza, l’esito dell’analisi deve essere la definizione di due funzioni: una (c(t))
servirà a parzializzare il carico trasferito al motore, l’altra (alfa(t)) servirà invece a
parzializzare l’apertura della valvola a farfalla.
Quest’ultima è facilmente determinabile in base al segnale di posizione della farfalla,
osservato nelle varie cambiate: si tratterà solo di normalizzare il segnale stesso, in modo
da renderlo variabile da 0 a 1, così da poterlo moltiplicare direttamente, in fase di cambio
marcia, per il valore di apertura richiesto dall’utente del banco. L’istante di tempo in
corrispondenza del quale la cambiata ha inizio è quello in cui la valvola viene chiusa,
quello in cui ha fine è invece definito dal completarsi dell’innesto. Quest’ultimo evento
può essere identificato osservando l’andamento del rapporto tra la velocità del veicolo e
la velocità di rotazione del motore: tale rapporto varia quando la velocità relativa tra i
dischi della frizione è diversa da zero, per poi assestarsi ad un valore dipendente dal
rapporto inserito (Figura 5-34).
218
0.015
V/rpm
[km/hrpm]
0.0125
0.01
0.0075
0
0.2
0.4
0.6
0.8
1
1.2
1.4
1.6
1.8
Time [s]
Figura 5-34: andamento del rapporto V/rpm in fase di cambiata I-II (tre cambiate, in nero:
andamento medio)
A questo punto non resta che normalizzare il segnale di posizione della valvola,
attribuendo il valore 0 alla condizione di completa chiusura, ed il valore 1 alla condizione
di apertura corrispondente all’istante di fine innesto. La funzione così ottenuta (Figura 535) può essere impiegata direttamente nel modello di simulazione del veicolo. Si deve
comunque considerare che le traiettorie sono diverse per le diverse cambiate: solo i
passaggi II-III, III-IV, IV-V possono essere sintetizzati con le stesse funzioni.
Non avendo a disposizione un segnale di posizione del pedale della frizione, non si può
seguire la stessa procedura per la determinazione della funzione c(t), e si deve quindi
desumere l’azione del pilota su tale comando attraverso le sue conseguenze, osservabili
attraverso gli andamenti della velocità di rotazione del motore e della pressione nel
collettore di aspirazione.
219
14
1.4
12
1.2
T.O. 10
[%]
8
Alfa
0.8
6
0.6
4
0.4
2
0.2
0
0
1
0.2
0.4
Time [s]
0.6
0.8
0
0
0.2
0.4
0.6
0.8
time [s]
Figura 5-35: andamento del segnale di posizione farfalla per cambiate II-III, III-IV, IV-V (nero:
valore medio) e, a destra, sua sintesi (blu: espressione analitica)
La prima azione che il guidatore esercita sul pedale opera il completo disinnesto della
frizione, immediatamente dopo la chiusura della valvola a farfalla. Tale azione può essere
semplicemente simulata tramite un andamento lineare di c(t) nel passaggio da 1 a 0. La
pendenza della retta può essere piuttosto elevata, dal momento che l’azione del guidatore
è rapida: si può supporre che il transitorio abbia una durata inferiore a 0.5 secondi,
partendo dall’istante in cui il parametro v/rpm si impenna (o dal momento in cui la
farfalla raggiunge la completa chiusura). La fase di ripristino del carico è invece più
complessa: se, per quanto riguarda l’istante di fine innesto, le considerazioni sono
analoghe alle precedenti, per quanto concerne l’istante di inizio innesto, ci si può
concentrare sull’osservazione del segnale di velocità angolare. Per quanto riguarda la
partenza, in genere essa viene effettuata, nel primo tratto, sfruttando l’energia cinetica
dell’albero motore (e del volano), e poi gestendo il resto del transitorio attraverso la
coppia erogata dal motore (ovvero attraverso la farfalla). Si può quindi notare una prima
fase di accelerazione del motore, seguita da un abbassamento della velocità,
corrispondente all’applicazione del carico, e, in seguito, al contemporaneo aumento del
numero di giri e della velocità del veicolo (Figura 5-36). In realtà, anche se la posizione
della valvola a farfalla restasse costante, dopo la prima apertura impiegata per
incrementare l’energia cinetica di albero motore e volano, la velocità di rotazione
tenderebbe ad assestarsi su un valore dipendente dall’entità della coppia indicata e dal
valore della coppia resistente (in questo caso solo la coppia di attrito e degli ausiliari).
220
1800
engine
1600
speed
[rpm] 1400
1200
1000
800
600
0
1
2
Time [s]
3
4
5
Figura 5-36: velocità di rotazione del motore nel transitorio di partenza
In ogni caso, essendo il transitorio sufficientemente rapido, si può considerare la
variazione di accelerazione angolare del motore dipendente solamente dall’applicazione
di un carico esterno. Quando il valore decresce (tipicamente diventa negativo, facendo
prima appiattire, poi calare la velocità) la frazione di carico resistente applicata al motore
diventa diversa da zero. Le stesse osservazioni possono essere ripetute per tutte le
cambiate.
Tra i due istanti di tempo così individuati si dovrebbe far variare la funzione c(t) da 0 a 1:
la traiettoria dipenderà da come il pedale è stato rilasciato. Un possibile andamento,
rappresentato in Figura 5-37, si ricava applicando il modello di stima delle coppie
resistenti alla traiettoria di velocità del veicolo misurata: tale andamento, normalizzato,
preso tra l’istante di inizio e l’istante di fine innesto, costituirà la funzione cercata.
L’unico problema di questa tecnica sta nella scarsa risoluzione del segnale impiegato, che
genera errori di discretizzazione. In particolare, si rischia di ignorare il tratto di
avviamento a bassissima velocità, compreso tra l’inizio dell’innesto e l’istante in cui il
segnale di velocità diviene diverso da zero. Per ovviare a questo problema si impiega, su
questo tratto, un’interpolazione lineare (Figura 5-37).
221
Figura 5-37: frazione di carico trasmessa al motore in partenza
In conclusione è possibile, stabilite le traiettorie Alfa(t) e C(t) per ogni cambio di marcia,
impiegarle per il comando della valvola a farfalla e della coppia di carico in modo da
simulare il transitorio di cambiata eseguito sul banco a rulli.
5.4.6 VALIDAZIONE DEL MODELLO
Considerando un veicolo in moto a velocità costante su strada piana e rettilinea, le forze
che devono essere vinte per mantenere costante la velocità sono la resistenza
aerodinamica e quella di rotolamento (a cui può essere aggiunto un contributo dovuto
all’attrito delle parti in moto relativo nel veicolo).
Al crescere della velocità l’importanza della prima aumenta e, ad una certa velocità,
diviene più importante della resistenza di rotolamento, come si può notare in Figura 5-38,
dove vengono considerati i contributi di entrambe resistenze per la vettura presa in esame
(Fiat Punto 75).
222
Figura 5-38: resistenza aerodinamica (1), di rotolamento (2, comprensiva di altri contributi), e
somma delle due (3)
Tale velocità è minore per piccole vetture rispetto ai veicoli di dimensioni maggiori, ciò è
dovuto al fatto che, al crescere delle dimensioni del veicolo, la massa cresce in generale
più rapidamente della superficie trasversale.
Se la strada è in pendenza, alla resistenza al rotolamento ed a quella aerodinamica deve
essere aggiunta la componente del peso agente in direzione perpendicolare alla velocità.
Tenendo conto anche della portanza aerodinamica, la resistenza totale al moto può essere
scritta nella seguente forma:
1
1


R = m ⋅ g ⋅ cos(α ) − ⋅ ρ ⋅ V 2 ⋅ S ⋅ C z  ⋅ f 0 + K ⋅ V 2 + ⋅ ρ ⋅ V 2 ⋅ S ⋅ C x + m ⋅ g ⋅ sen(α )
2
2


(
)
(Eq 5-44)
La potenza necessaria al moto a velocità costante V può essere ottenuta semplicemente
moltiplicando la resistenza R, per la velocità (Figura 5-39).
223
Figura 5-39: potenza necessaria per l’avanzamento su strada piana (Punto 75)
Il moto a velocità costante è quindi possibile solamente se la potenza disponibile alle
ruote è almeno pari alla potenza necessaria per l’avanzamento della vettura. Ciò significa
che il motore deve fornire una potenza sufficiente, tenendo anche conto delle perdite
nella trasmissione, e che il contatto ruota-suolo deve essere in grado di trasmetterla.
Come già anticipato nel capitolo 1, le prove di omologazione vengono eseguite ponendo
il veicolo su di un banco a rulli e simulando il carico aerodinamico e di rotolamento
tramite un freno elettrico. La massa del veicolo, invece, viene riprodotta da un volano
posizionato sull’albero dei rulli.
In particolare la forza assorbita dal freno e dagli attriti interni del banco in funzione della
velocità segue l’andamento indicato dalla (Eq 5.1), per velocità comprese tra 0 e 120
Km/h.
Per il veicolo considerato (Fiat Punto 75), di massa pari a 895 kg, la Tabella 5-1 e la
Tabella 5-2 forniscono:a = 5,7 [N] e b = 0,385 [N/(Km/h)2], quindi la (Eq 5-1) diventerà:
(
F = 5,7 + 0,0385 ⋅ V 2 ± F80
) (Eq 5-45)
224
Figura 5-40: andamento delle forze resistenti da normativa
Quindi, nel caso in cui si voglia simulare il più fedelmente possibile una prova di
omologazione, è opportuno utilizzare la curva di resistenza suggerita dalla normativa,
adattata per il veicolo in esame, rappresentata in Figura 5-40.
Le leggi di resistenza, viste nei paragrafi precedenti, invece sono adatte a simulare il
funzionamento reale del veicolo.
Riassumendo si può affermare che, in caso di guida automatica è più corretto utilizzare
un modello di forze resistenti conforme alla normativa relativa alle prove di
omologazione, in guida manuale, invece, è necessario considerare le reali leggi fisiche
che regolano il moto del veicolo.
La validazione del modello del veicolo, o di alcune sue componenti, può essere realizzata
per via indiretta, utilizzando dati campionati su un ciclo MVEG durante la prova del
veicolo in questione. Ovviamente, se sul banco a rulli è stata impiegata una curva di
assorbimento diversa da quella relativa alle condizioni di marcia su strada, il confronto
dovrà essere eseguito sulla base della stessa curva di assorbimento, e non sulla base delle
caratteristiche incluse in (Eq 5-43).
Tipicamente, in un ciclo di omologazione non vengono campionate la potenza o la coppia
erogate dal motore: nel presente caso, ad esempio, sono disponibili solamente la
225
pressione nel collettore, la velocità di rotazione del motore, la velocità del veicolo, la
marcia inserita, ecc. I primi due dati, comunque, possono essere impiegati per stimare il
valore di coppia erogato dal motore nella data condizione di funzionamento. Avendo a
disposizione lo stesso motore montato al banco, infatti, è possibile misurare la coppia
erogata in funzione del numero di giri e della pressione nel collettore, potendo così
stimare, a posteriori, il valore della coppia erogata durante il ciclo di omologazione. Tale
valore può essere confrontato con quello che risulta dal modello del veicolo.
Il confronto può essere fatto in diverse condizioni di funzionamento: per meglio calibrare
i parametri che definiscono il modello del veicolo è opportuno eseguirlo prima in
condizioni di marcia a velocità costante, poi durante rampe di accelerazione. Nel primo
caso, infatti, l’auto è soggetta solamente alle resistenze aerodinamiche e di rotolamento,
dV
=0
essendo dt
, e quindi, il contributo fornito alle resistenze dalle inerzie risulta nullo.
In un ciclo MVEG esistono diversi tratti percorsi a velocità costante, come si può
verificare dalla Figura 5-1. In questi intervalli si possono ricavare, dai dati campionati sul
banco a rulli, i valori medi di pressione del collettore e velocità di rotazione del motore
corrispondenti a fissate velocità relative alla prova.
In particolare, considerando le forze resistenti applicate all’asse della ruota, dalla seconda
legge di Newton applicata alla ruota, si ottiene:
TW − R ⋅ R L =
dω W
=0
dt
⇒
TW = R ⋅ R L (Eq 5-46)
Riportando la coppia Tw all’albero motore, tramite il rapporto di trasmissione totale τT
(noto una volta nota la marcia inserita) e il rendimento di trasmissione totale ηT, si ottiene
la stima della coppia resistente (carico) per ogni valore della velocità veicolo, TR (Vcost),
che, in condizioni stazionarie, equivale alla coppia erogata dal motore.
Dal confronto tra i due valori di coppia, quella stimata TR (Vcost) dal modello del veicolo
e quella stimata tramite la mappa di coppia e i valori di pressione nel collettore e velocità
angolare, TE (Vcost), si può verificare la validità del modello. Ovviamente, in questa fase,
si potrà solo valutare l’esattezza dei sottomodelli preposti al calcolo delle resistenze
aerodinamiche e di rotolamento, ovvero delle curve di resistenza imposte dalle
normative, secondo le condizioni di prova con cui sono stati ottenuti i dati.
226
Per quanto riguarda la simulazione eseguita con i dati relativi al funzionamento su strada,
si può invece fare riferimento a valori di potenza o coppia necessari a fare avanzare il
veicolo a determinate velocità, che possono essere trovati in bibliografia. Nonostante
l’esiguità dei dati suggerisca un atteggiamento prudente, il confronto, come si può
evincere dalla seguente tabella, fornisce risultati confortanti. Si deve comunque
considerare che a tali velocità prevalgono le resistenze aerodinamiche, perciò si potrà
considerare buona la stima di tali componenti, e di altre, agenti come offset (coppia
assorbita dagli ausiliari e forza resistente degli accoppiamenti con moto relativo).
Velocità [km/h]
Pmodello [kW]
Pquattroruote [kW]
Scarto %
100
13.1
13.1
0
130
24.9
24.7
0.8
175 (vmax)
56.1
55.1
1.8
Tabella 5-5: potenza assorbita in marcia a velocità costante
Volendo fare un confronto con i dati campionati sul banco a rulli, si possono selezionare i
tratti percorsi a velocità costante, controllare quali siano le condizioni di funzionamento
del motore, determinando così la coppia erogata, e, infine, confrontarne il valore medio
sul tratto con il valore indicato dal modello.
La simulazione che porta al risultato mostrato nella tabella seguente è stata eseguita
impiegando dati leggermente diversi da quelli dichiarati dal costruttore: la categoria di
massa a cui appartiene il veicolo è infatti tale da imporre l’uso di una massa equivalente
di 1020 kg, inoltre, l’incoerenza dei dati di velocità del veicolo con quelli della velocità
di rotazione del motore, ha suggerito l’impiego di un raggio di rotolamento del
pneumatico indeformato pari a 310 mm. Infine è stata impiegata la curva di assorbimento
suggerita dalle normative, e non quella ottenibile dal modello del veicolo. La differenza
tra i due andamenti di coppia a velocità costante è molto limitata, al di sopra dei 50 km/h,
e peggiora a velocità più basse. Si deve comunque tenere presente che, per velocità
limitate, il motore si trova in condizioni di funzionamento particolari (bassi carichi, bassa
velocità) per le quali non si hanno a disposizione dati di coppia: vengono quindi
estrapolati i valori della mappa, fornendo risultati poco realistici.
227
Velocità [km/h]
Coppia da mappa [Nm]
Coppia da modello [Nm]
Scarto %
34
10.4
9.8
6
50 (III)
12
12.1
1
50 (IV)
15.4
15.1
2
70
26.4
25.2
2
100
44.5
44.5
0
120
59
61
3
Tabella 5-6: coppia assorbita in marcia a velocità costante sul banco a rulli
Una volta appurato che i sottomodelli relativi all’aerodinamica e al rotolamento sono
corretti, resta da validare il contributo delle resistenze dovuto alle inerzie. Per fare ciò si
considerano i tratti ad accelerazione costante del ciclo MVEG.
Analogamente al caso precedente, si utilizzano i dati a disposizione per determinare
l’andamento della coppia presumibilmente erogata dal motore TE,ac.cost. attraverso la
mappa di coppia.
Aggiungendo al modello utilizzato nella fase precedente il calcolo dell’inerzia
equivalente (riferita alla velocità motore), si può stimare la coppia necessaria a vincere le
resistenze in un moto ad accelerazione costante. Infatti il modello fornirà la resistenza
totale:
RTOT . = R + J eq. ⋅
dω E
dt (Eq 5-47)
dove ωE non è altro che il dato di velocità di rotazione del motore fornito dai dati
campionati sul banco a rulli. Tale forza resistente, moltiplicata per il raggio del
pneumatico caricato RL e riportata all’albero motore, tramite il rapporto di trasmissione
totale e il rendimento della trasmissione, fornirà la coppia cercata:
TR , ac. cos t . =
RTOT . ⋅ R L
τ T ⋅η T (Eq 5-48)
Dal confronto tra i due valori di coppia (TE,ac.cost. e TR,ac.cost.), su tutto il tratto ad
accelerazione costante, si può verificare la validità del sottomodello delle inerzie.
Il risultato globale della validazione può essere compreso osservando la Figura 5-42, che
ripropone, sull’ultimo tratto del ciclo urbano e su tutto quello extra-urbano, l’andamento
della velocità del veicolo (in rosso), della coppia necessaria per l’avanzamento del
228
veicolo in base al modello delle azioni resistenti e della coppia risultante dalla mappa,
impiegando come input la velocità angolare e la pressione nel collettore effettivamente
campionate. Si ricorda, ancora una volta, che la simulazione è stata eseguita impiegando
parametri adatti a riprodurre il funzionamento del veicolo su strada, non quello sul banco
a rulli.
Figura 5-41: validazione del modello di veicolo
E` chiaro, come da Figura 5-41, che non ci può essere coerenza tra i due valori di coppia
calcolati, in fase di decelerazione: in questo caso, infatti, il motore segue un transitorio, in
termini di velocità di rotazione e pressione nel collettore, che non può essere riprodotto
attraverso la mappa di coppia: in casi di brusca chiusura della valvola a farfalla, infatti, la
centralina attua una strategia di cut-off, che porta il propulsore a funzionare in un campo
non contemplato dalla mappa di coppia impiegata. Si potrebbe pensare allora di
analizzare le fasi di frenatura con un'altra ottica: si potrebbe, anzitutto, cercare di capire
se esistono fasi in cui il motore è trascinato dal veicolo (situazione che non potrebbe
essere riprodotta al banco con un freno passivo), e, in caso in cui sia invece necessaria
una frenatura supplementare, si potrebbe cercare di capire quale sia la sua entità.
229
Purtroppo, non avendo alcuna informazione sulla posizione del pedale del freno, tale
entità non potrebbe essere correlata al comando del guidatore, rivelandosi quindi poco
utile. In ogni caso, visto che in fase di decelerazione la centralina smette di iniettare
combustibile, ripercorrere al banco queste traiettorie nel campo di funzionamento del
motore non ha grande interesse. Per questo motivo, anche disponendo di un freno
passivo, non in grado di simulare le fasi di trascinato, è possibile simulare efficacemente
l’emissione di inquinanti o il consumo di combustibile sul ciclo di omologazione: se da
una parte può verificarsi, al banco, un rallentamento più brusco da parte del motore,
dall’altra questa discrepanza riguarderebbe il solo funzionamento in condizioni di
trascinato, ovvero in condizioni di funzionamento pressoché ininfluenti ai fini di
emissioni e consumi.
5.5 DATI DEL VEICOLO
Tabella 5.7: dati veicolo
Veicolo
Punto 75 1.2 8v
Massa (a vuoto) [kg]
895
Pneumatici
165/65 R14
R=0.285 [m] P= 2 [bar]
Rapporti di trasmissione 1
3.909 2 2.157
3 1.480 4 1.121
5 0.902 ponte 3.733
Superficie frontale [m2]
1.7
CX
0.32
CZ
-0.21
Inerzie veicolo [kgm2]
Volano+frizione
0.085 0.04 0.055 0.095
Primario Secondario 0.58
Dischi freno ruote
Inerzia freno [kgm2]
Rotore freno
0.14
230
5.6 LISTA DEI SIMBOLI
a
coefficiente curva di assorbimento secondo le normative di omologazione 70/220
[N]
b
coefficiente curva di assorbimento secondo le normative di omologazione 70/220
[N/m2]
αT
posizione farfalla
αB
posizione pedale del freno
αC
posizione pedale della frizione
αS
posizione dello sterzo
F
forza di frenatura dei rulli [N]
F80
forza di frenatura a 80 km/h [N]
JCB
momento d’inerzia del freno a correnti parassite [kgm2]
JDi’
inerzia di ogni elemento della driveline riferita alla ruota
JV
inerzia del veicolo riferita alla ruta [kgm2]
JE
inerzia del motore [kgm2]
JW
inerzia della ruota [kgm2]
M
massa del veicolo [kg]
ηT
rendimento totale della trasmissione
R
raggio della ruota [m]
Re
raggio di rotolamento effettivo [m]
TD
coppia in uscita dal differenziale, ovvero coppia al semiasse [Nm]
TN
coppia netta, ovvero decurtata delle perdite di trasmissione [Nm]
TWB
coppia frenante, imposta dal pilota [Nm]
TW
coppia scarica sulla ruota [Nm]
TEAUX coppia assorbita dagli ausiliari [Nm]
TCB
coppia da applicare al freno del motore al banco per simulare la presenza del
veicolo o coppia di carico [Nm]
TERT
coppia resistente totale [Nm]
TP
coppia all’albero primario (ingresso) del cambio [Nm]
TS
coppia all’albero secondario (uscita) del cambio [Nm]
TE
coppia all’albero motore [Nm]
TCE
coppia trasmessa dalla frizione al motore [Nm]
231
TCD
coppia trasmessa dalla frizione alla driveline [Nm]
TR
coppia dovuta alle resistenze aerodinamiche e di rotolamento, applicata alla ruota
[Nm]
τ
rapporto di trasmissione totale
τi
rapporto di trasmissione tra l’elemento della driveline e la ruota
TB
coppia frenante sviluppata dai freni [Nm]
V
velocità del veicolo (stimata) [km/h]
ωE
velocità angolare del motore [rad/s]
ωP
velocità angolare dell’albero primario del cambio [rad/s]
ωS
velocità angolare dell’albero secondario del cambio [rad/s]
ωW
velocità angolare della ruota [rad/s]
ωi
velocità di rotazione di ogni elemento della driveline [rad/s]
5.7 BIBLIOGRAFIA
[1].Control of emissions from new and in-use highway vehicles and engines – Protection
of environment, Code of Federal Regulations - Title 40, part 86, 2001, Environmental
Protection Agency, USA.
[2]. EEC Directive 70/220 – approximation of the laws of the Member States relating to
measures to be taken against air pollution by emissions from motor vehicles Official Journal of the European Communities – 1970 – 2002 update.
[3] Global Emissions regulations –special supplement to Automotive Engineering
International -2002.
[4]. Nonlinear Vehicle Performance Simulation With Test Correlation and Sensitivity
Analysis, M.R. Petersen, J. M. Starkey, SAE Technical Paper, 960521
[5]. TVSIM Transient Engine Simulation program and its Correlation with Chassis Rolls
Dynamometer Results, Sergey M. Schurov, Bob Ceen SAE Technical paper – 200001-1143.
[6]. Vehicle and Tire Modeling for Dynamic Analysis and Real-Time Simulation, R.
Wade Allen, Theodore J. Rosenthal, David H. Klyde, Jeffrey P. Chrstos, SAE
Technical paper – 2000-01-1620.
[7]. Eddy Current Brake Control for Test Cycles Simulation, Enrico Corti. ASME paper
– ICES2003-670.
[8]. A Transient Test System for Single-Cylinder Research Engines With Real-Time
Simulation of Multi-Cylinder Crankshaft and Intake Manifold Dynamics, John L.
Lahti, John J. Moskwa. SAE Technical paper – 2004-01-0305.
[9]. Study on the Engine Dynamic test Bench, Jungzhi Zhang, Lu Qinqchun, IVEC 99
Proceedings of the IEEE International – 99EX257.
232
[10]. Inertia Simulation in Brake Dynamometer testing, James K Thomson, Aaron J.
Marks, Denis Rhode, SAE Technical paper – 2002-01-2601.
[11]. Comparison of Chassis Dynamometer In Use Emissions with engine Dynamometer
FTP Emissions for Three Heavy Duty Vehicles, Robert L. McCormick, Lisa B. A.
Ryan, Teresa L. Daniels, Michael S. Graboski, SAE Technical paper – 982653.
[12]. Prediction of Torque Response During the Engagement of Wet Friction Clutch,
Yubo Yang, Robert C. Lam, Tamotsu Fujii, SAE Technical paper – 981097
[13]. Modeling for Functional Expression of Rotary Apparatus, S. Sumida, S. Hiramatsu,
M. Nagamatsu, SAE Technical paper 2002-01-0814
[14]. Multi-Body Dynamics, H. Rahnejat, SAE International, 1998
[15]. SAE J670
[16]. Car and Vehicle Dynamics, H. B. Pacejka, SAE International, 2002
[17]. Race Car Vehicle Dynamics, W. F. Milliken, D. L. Milliken, SAE International,
2000
[18]. A Robust Lumped-Parameters Tire Model Developed for Real Time Simulation, P.F.
Noronha, SAE Technical Paper, 980243
[19]. The Tire: Rolling Resistance and Fuel Savings, Société de Technologie Michelin,
2003 Clermont Ferrand, France
[20]. Quattroruote, 09/93 Torino, Italy
[21]. An Improved Friction Model for Spark-Ignition Engines, J. B. Heywood, D.
Sandoval, SAE Technical paper, 2003-01-0725
[22]. Meccanica dell’Autoveicolo, Genta, Leverotto & Bella 1999.
233
A
IL LINGUAGGIO DI PROGRAMMAZIONE DEL
MICROCONTROLLORE ST6
All’interno del circuito elettronico esterno gli unici componenti provvisti di software
sono gli ST6. Nei tre microcontrollori, quello presente sull’interrupt board e i due
collocati sulla top board, sono memorizzati rispettivamente tre programmi diversi scritti
in linguaggio macchina.
Prima di analizzare nel dettaglio gli algoritmi può essere utile chiarire che tipo di
istruzioni è in grado di eseguire un microcontrollore.
A.1 DAL CODICE MACCHINA AL LINGUAGGIO ASSEMBLY
L’insieme di istruzioni eseguibili da un microcontrollore è detto set di istruzioni. Nel caso
dell’ ST6 possiamo utilizzare 40 istruzioni appartenenti a 5 categorie diverse.
1. Istruzioni di trasferimento: eseguono il trasferimento di dati tra i registri del
microcontrollore e la memoria o l’input/output.
2. Istruzioni logiche: implementano le operazioni dell’algebra booleana (ad esempio
le istruzioni di AND, OR, NOT, scorrimento a destra e a sinistra).
3. Istruzioni aritmetiche: sono istruzioni di calcolo su numeri interi.
4. Istruzioni di salto: permettono al microcontrollore di alterare il normale flusso
sequenziale del programma, modificando il contenuto del program counter (cioè il
registro che contiene l’indirizzo di memoria della prossima istruzione da
eseguire).
5. Istruzioni
di
controllo:
permettono
di
gestire
il
funzionamento
del
microcontrollore.
A.1.1 IL FORMATO DI UNA GENERICA ISTRUZIONE
Una singola istruzione è costituita da un codice numerico (codice operativo) che permette
al processore di identificarne il tipo.
1
Le istruzioni coinvolgono quasi sempre dati presenti nella memoria o, temporaneamente,
nei registri del microcontrollore. Un’istruzione completa contiene sia il codice sia una
qualche informazione riguardo al dato su cui la CPU deve operare.
Tutte le istruzioni eseguibili da un processore sono chiamate istruzioni macchina e, di
conseguenza, il linguaggio che le utilizza linguaggio macchina.
Il formato di un’istruzione macchina è il seguente:
Codice operativo
Campo indirizzo
Schema A-1: istruzione in linguaggio macchina
-
Il codice operativo (OP CODE) specifica quale istruzione deve essere eseguita.
Per l’ ST6 il codice operativo occupa un byte.
-
Il campo indirizzo specifica il dato stesso, oppure la locazione di memoria dove
si trova il dato con cui il microcontrollore deve operare. Per l’ ST6 il campo
indirizzo occupa fino a due byte.
Il modo con cui il microcontrollore gestisce il campo indirizzo viene detto modalità di
indirizzamento.
Nei programmi sono state impiegate le seguenti modalità di indirizzamento:
-
implicito: il campo indirizzo in questo caso non esiste essendo implicitamente
specificato nel byte del codice operativo;
-
immediato: in questo caso il campo indirizzo non specifica una locazione di
memoria vera e propria bensì un dato numerico da utilizzare congiuntamente al
codice operativo;
-
diretto: il campo indirizzo specifica direttamente l’indirizzo di memoria
utilizzato;
-
indiretto: il campo indirizzo specifica la locazione di memoria in cui è
contenuto l’indirizzo del dato; in sostanza si sfrutta il contenuto di un registro
per indirizzare il dato. In questo caso il campo indirizzo viene racchiuso tra
parentesi tonde.
A.1.2 IL LINGUAGGIO ASSEMBLY
La notazione binaria usata per i codici delle istruzioni è molto scomoda e non facilita
sicuramente la lettura di un programma scritto in linguaggio macchina.
2
Per abbreviare la scrittura dei codici operativi e dei numeri contenuti nel campo indirizzo
si preferisce usare una notazione particolare che costituisce il cosiddetto linguaggio
assembly: in questo linguaggio in luogo dei codici operativi si utilizza il codice
mnemonico dell’istruzione, cioè una breve stringa di caratteri. Per i valori contenuti nel
campo indirizzo è possibile utilizzare indifferentemente la notazione esadecimale o quella
binaria (è molto semplice convertire un numero binario in esadecimale).
E’ importante notare che l’assembly non è altro che un modo più umano per scrivere gli
algoritmi in codice macchina. Quest’ultimo rimane comunque l’unico linguaggio
comprensibile dal processore. La traduzione (da assembly in codice macchina), che è del
tutto meccanica (una istruzione assembly corrisponde ad una istruzione macchina e
viceversa), viene demandata ad un opportuno programma traduttore chiamato assembler
(assemblatore).
A.1.3 LO STACK E I SOTTOPROGRAMMI
Spesso nella programmazione assembly si utilizzano delle strutture particolari per la
memorizzazione dei dati.
Una struttura particolarmente interessante è lo stack o pila. Una pila viene gestita con la
politica LIFO (Last In First Out): l’ultimo dato inserito nella pila è il primo che uscirà da
essa. L’utilizzo che se ne fa è il salvataggio dell’indirizzo di ritorno nelle chiamate ai
sottoprogrammi (subroutine). L’ ST6 è dotato di uno stack a 6 livelli (in altre parole è
possibile mettere uno sopra l’altro un numero massimo di 6 indirizzi corrispondenti ad
altrettante routine in esecuzione contemporanea).
Un sottoprogramma è un blocco di codice che può essere chiamato da qualunque punto
del programma principale; al termine della subroutine l’esecuzione deve riprendere
esattamente in corrispondenza dell’istruzione che segue la sua chiamata.
Quest’ultima fase è resa possibile dallo stack.
A.1.4 GLI INTERRUPT
Alcuni segnali diretti ai microcontrollori (si pensi a S0) possono giungere in qualsiasi
momento (se il motore è momentaneamente fermo possono anche non giungere per
lunghi intervalli di tempo).
Questi eventi esterni devono essere rilevati dal processore.
3
Per ottenere ciò gli ST6 sono dotati di un meccanismo detto di interruzione. All’arrivo di
uno dei segnali suddetti il microcontrollore interrompe l' attività che sta svolgendo ed
esegue un opportuno sottoprogramma. Terminata l’esecuzione della subroutine, la CPU
riprende l’attività esattamente dal punto in cui l’aveva interrotta. Il meccanismo è molto
simile ad un salto a sottoprogramma, con la differenza che l’interruzione è tipicamente un
evento asincrono. In altre parole il salto può aver luogo da qualunque punto del
programma in esecuzione.
Se sopraggiunge un’altra interruzione durante l’esecuzione di una subroutine di interrupt,
quello che si ottiene è un ulteriore salto di programma.
Una situazione del genere potrebbe generare un errore sul posizionamento delle nostre
attuazioni.
Si pensi ad esempio al segnale S0: all’arrivo del fronte di discesa di tale segnale l’ ST6
dovrebbe azzerare il conteggio dei denti. Se tra l’arrivo del segnale ed il momento
dell’azzeramento si presenta un altro evento d’interruzione, il contatore potrebbe essere
aggiornato in ritardo quando già un altro dente è passato sotto il pick-up; ciò che
otteniamo è un errore angolare sulle attuazioni (pari a 360°/z con z i denti del volano) per
tutto il ciclo successivo agli interrupt.
Il microcontrollore evita che si verifichino situazioni del genere, assegnando una priorità
ben definita ad ogni evento di interruzione.
E’ bene precisare che gli eventi di interruzione possono provenire anche dalle periferiche
interne all’ ST6 tra le quali c’è l’auto-reload timer. Quando è verificata la corrispondenza
tra il dente di riferimento (Zj, Zic, Zfc) e quello attuale (Zatt) viene infatti generato un
interrupt.
Il nostro microcontrollore distingue tra cinque livelli di priorità; l’interrupt legato al
segnale S0, per i motivi appena spiegati, ha priorità assoluta. Esso inoltre non è
disabilitabile e per questo motivo è chiamato non mascherabile (NMI - Not Maskable
Interrupt).
4
A.1.5 LE ISTRUZIONI ASSEMBLY UTILIZZATE
In questo paragrafo ci occupiamo di descrivere esclusivamente le istruzioni utilizzate nei
nostri programmi, classificandole secondo il gruppo di appartenenza (vedi par. A.1).
A.1.5.1 ISTRUZIONI DI TRASFERIMENTO
LD – Load
Sintassi: LD
dst,src
Questa istruzione carica il dato contenuto nel registro di indirizzo src nel registro di
indirizzo dst (vedi par. A.2). Occorre osservare che uno dei due registri deve essere
l’accumulatore. Tale registro ha la funzione di contenere i risultati delle operazioni
effettuate dalla ALU (Arithmetic Logic Unit - il dispositivo interno al microcontrollore
che esegue le operazioni aritmetiche e booleane)
Esempio (vedi tabella): LD
45h,37h
Indirizzo registri
Valore
memorizzato
37h
10h
………
45h
sconosciuto
Tabella A-1
Dopo l’esecuzione dell'istruzione il registro di indirizzo 45h (notazione esadecimale)
contiene il valore 10h.
Modalità di indirizzamento:
-
Src: diretta o indiretta,
-
Dst: diretta o indiretta.
LDI – Load immediate (caricamento immediato)
Sintassi: LDI
dst,src
Questa istruzione carica il dato numerico src nel registro di indirizzo dst. Vale la pena di
sottolineare che src è un dato numerico e non un indirizzo di memoria, si sfrutta cioè la
modalità di indirizzamento immediato.
Esempio: LDI
37h,10h
5
Il valore 10h viene caricato nel registro presente all’indirizzo 37h.
Modalità di indirizzamento:
-
Src: Immediata,
-
Dst: diretta.
RES – Reset bit (azzeramento di un bit)
Sintassi: RES
dst,src
L’ istruzione reset è utilizzata per azzerare il bit dst di un registro presente nello spazio
dei dati all’indirizzo src.
Esempio: RES
4,23h
Se il registro all’indirizzo 23h contiene il byte:
Bit 0
Bit 1
Bit 2
Bit 3
Bit 4
Bit 5
Bit 6
Bit 7
1
1
1
1
1
1
1
1
Tabella A-2
dopo l’esecuzione dell’istruzione avremo:
Bit 0
Bit 1
Bit 2
Bit 3
Bit 4
Bit 5
Bit 6
Bit 7
1
1
1
1
0
1
1
1
Tabella A-3
Modalità di indirizzamento:
Src: diretta
SET – Set bit
Sintassi: SET
dst,src
L’ istruzione set è utilizzata per portare al valore 1 il bit dst di un registro presente nello
spazio dei dati all’indirizzo src.
Esempio: SET
3,23h
Se il registro all’indirizzo 23h contiene il byte:
Bit 0
Bit 1
Bit 2
Bit 3
Bit 4
Bit 5
Bit 6
Bit 7
0
0
0
0
0
0
0
0
Tabella A-4
6
dopo l’esecuzione dell’istruzione avremo:
Bit 0
Bit 1
Bit 2
Bit 3
Bit 4
Bit 5
Bit 6
Bit 7
0
0
0
1
0
0
0
0
Tabella A-5
Modalità di indirizzamento:
-
Src: diretta
A.1.5.2 ISTRUZIONI LOGICHE
ANDI – Logical AND immediate
Sintassi: ANDI
a,dst
Questa istruzione calcola il risultato di un AND logico tra il contenuto dell’accumulatore
e il byte dst e lo memorizza nell’accumulatore stesso
Esempio: ANDI
a,33h
Se l’accumulatore a contiene il byte 01100100 otteniamo:
Bit 0
Bit 1
Bit 2
Bit 3
Bit 4
Bit 5
Bit 6
Bit 7
A
0
1
1
0
0
1
0
0
33h
0
0
1
1
0
0
1
1
a AND 33h
0
0
1
0
0
0
0
0
A
0
0
1
0
0
0
0
0
Tabella A-6
Modalità di indirizzamento: immediato
COM – Complement
Sintassi: COM
a
Questa istruzione inverte il valore dei bit contenuti nell’accumulatore.
Esempio: COM
a
Se l’accumulatore a contiene il byte 01100100 otteniamo:
Bit 0
Bit 1
Bit 2
Bit 3
Bit 4
Bit 5
Bit 6
Bit 7
A
0
1
1
0
0
1
0
0
COM a
1
0
0
1
1
0
1
1
7
1
A
0
0
1
1
0
1
1
Tabella A-7
A.1.5.3 ISTRUZIONI ARITMETICHE
CLR – clear
Sintassi: CLR
dst
Questa istruzione azzera il valore memorizzato nell’indirizzo dst.
Esempio: CLR
22h
Modalità di indirizzamento: diretto.
INC – Increment
Sintassi: INC
dst
L’istruzione incrementa di uno il contenuto del registro di indirizzo dst
Esempio: INC
(33h)
Indirizzo
Valore
Registro
memorizzato
33h
45h
………
45h
11h
Tabella A-8
Il registro di indirizzo 33h contiene a sua volta l’indirizzo del registro in cui è
memorizzato il valore da incrementare di una unità.
Il risultato dell’operazione è il seguente:
Indirizzo
Valore
Registro
memorizzato
33h
45h
………
45h
12h
Tabella A-9
Modalità di indirizzamento:
8
Dst: diretta e indiretta (quest’ultima è stata impiegata nell’esempio)
SUBI – Subtraction Immediate
Sintassi: SUBI
a,src
Questa istruzione sottrae il valore src al dato contenuto nell’accumulatore.
Esempio: SUBI
a,1
Modalità di indirizzamento: immediato.
A.1.5.4 ISTRUZIONI DI SALTO
CALL – Call subroutine
Sintassi: CALL
nome_subroutine
Questa istruzione lancia in esecuzione la subroutine chiamata nome_subroutine.
Al massimo si possono nidificare sei subroutine (lo stack ha infatti sei livelli – vedi par.
A.1.3).
JP – Jump
Sintassi: JP
dst
Questa istruzione rimpiazza l’indirizzo contenuto nel program counter (PC) con
l’indirizzo dst (12 bit). Si verifica quindi un salto di istruzioni all’interno del programma.
Il precedente valore del PC non viene memorizzato nello stack.
Esempio: JP
5CDh
Nel PC viene caricato il valore 5CDh e l’istruzione successiva è quella presente a tale
indirizzo.
JRNZ – Jump Relative on Non Zero flag
Sintassi: JRNZ
dst
Questa istruzione controlla il valore della zero (Z) flag.
Se tale valore è pari a 0, al valore del program counter viene aggiunto dst.
Se il valore del bit è 1, si passa all’istruzione successiva senza effettuare il salto.
Il salto deve essere contenuto all’interno del range –16,+15.
9
Invece di indicare il numero di istruzioni da saltare si può marcare con un nome
prestabilito (da indicare anche nell’istruzione di salto) la riga di codice da raggiungere. Il
calcolo del numero di istruzioni da saltare viene poi eseguito dall’assemblatore.
La zero flag è un bit che viene posto ad 1 solo se il risultato dell’ultima operazione
aritmetica o logica è stato pari a 0 (per ulteriori chiarimenti si veda il datasheet dell’
ST6).
Esempio: JRNZ
–5
Durante l’esecuzione del programma si torna indietro di 5 istruzioni se la zero flag vale 0.
JRR – Jump Relative if Reset
Sintassi: JRR
num,src,dst
Questa istruzione verifica il valore del bit num presente nel registro di indirizzo src.
Se tale valore è pari a 0, al valore del program counter viene aggiunto dst.
Se il valore del bit è 1, si passa all’istruzione successiva senza effettuare il salto.
Il salto deve essere contenuto all’interno del range –126,+129.
Invece di indicare il numero di istruzioni da saltare si può marcare con un nome
prestabilito (da indicare anche nell’istruzione di salto) la riga di codice da raggiungere. Il
calcolo del numero di istruzioni da saltare viene poi eseguito dall’assemblatore.
Esempio 1: JRR
4,70h,-20
Supponiamo che nel PC sia presente l’indirizzo 110.
Dopo l’esecuzione dell’istruzione, se il quarto bit del registro di indirizzo 70h vale 0,
otteniamo PC=110-20=90.
Esempio 2 (uso della label):
JRR 4,70h,main
……………
……………
main LDI 37h,10h
Schema A-2: esempio di uso della label
10
In questo caso, al verificarsi della medesima condizione dell’esempio precedente, il
programma esegue l’istruzione marcata con la label main.
JRS – Jump Relative if Set (salto condizionato)
Sintassi: JRS
num,src,dst
Questa istruzione verifica il valore del bit num presente nel registro di indirizzo src.
Se il valore del bit è 0, si passa all’istruzione successiva senza effettuare il salto.
Se tale valore è pari a 1, al valore del program counter viene aggiunto dst.
Il salto deve essere contenuto all’interno del range –126,+129.
Anche in questo caso si può usare la label.
Esempio : JRS
7,AFh,+25
Supponiamo che nel PC sia presente l’indirizzo 123.
Dopo l’esecuzione dell’istruzione, se il settimo bit del registro di indirizzo AFh vale 0,
otteniamo PC=123+25=148.
RET – Return from subroutine
Sintassi: RET
Questa istruzione è usata alla fine di una subroutine per tornare alla procedura in
esecuzione prima della chiamata del sottoprogramma. Ciò avviene recuperando
l’indirizzo dallo stack.
RETI – Return from Interrupt
Sintassi: RETI
Questa istruzione decreta la fine di una routine di interrupt. Nel program counter viene
memorizzato l’indirizzo dell’istruzione successiva a quella che il microcontrollore stava
eseguendo prima del verificarsi dell’interrupt. Tale indirizzo viene recuperato dallo stack.
A.1.6 IL TEMPO DI ESECUZIONE DELLE ISTRUZIONI
Per eseguire un’istruzione l’ ST6 impiega un certo numero di cicli macchina ognuno dei
quali corrisponde a 1.625 microsecondi.
Il tempo di esecuzione di ogni singola istruzione è pari al numero di cicli moltiplicato per
1.625 microsecondi.
11
La seguente tabella riassume le istruzioni utilizzate, il numero di cicli ed il tempo
necessari per la loro esecuzione.
ISTRUZIONE
CICLI
TEMPO (µs)
LD (load)
4
6.5
LDI (load immediate)
4
6.5
RES (reset)
4
6.5
SET (set)
4
6.5
ANDI (AND immediate)
4
6.5
COM (complement)
4
6.5
CLR (clear)
4
6.5
INC (increment)
4
6.5
SUBI (subtraction immediate)
4
6.5
CALL (call subroutine)
4
6.5
JP (jump)
4
6.5
JRNZ (jump relative on non zero flag)
2
3.25
JRR (jump relative if reset)
5
8.125
JRS (jump relative if set)
5
8.125
RET (return)
2
3.25
RETI (return interrupt)
2
3.25
Tabella A-10: tempi di esecuzione delle istruzioni
A.1.7 ALCUNI COMANDI DELL’ASSEMBLER
All’interno del codice assembly sono presenti alcuni comandi di cui l’assemblatore si
serve per la generazione del codice macchina.
Quelli utilizzati dal nostro codice sono:
•
.def: associa ad una stringa di caratteri un valore numerico (esempio: motore .def
8Fh ; la stringa motore è equivalente al valore 8Fh);
•
.end: indica la fine del programma;
•
.org: indica l’indirizzo di memoria da cui partire per l’immagazzinamento delle
istruzioni successive (esempio: .org 0080h);
•
.title: titola il programma (esempio: .title "IRQ_05");
12
•
.vers;definisce la versione del software (esempio: .vers “ST62E65B”).
A.2 I REGISTRI DELL’ ST6
La maggior parte delle istruzioni assembly trasferiscono dati da un registro all’altro.
Questi ultimi contengono le informazioni per l’elaborazione e per il controllo dei
programmi.
A livello hardware un registro è una memoria temporanea essenzialmente costituita da un
insieme di flip-flop di tipo D. La scrittura di un byte nel registro si ottiene attivando il
segnale di clock comune a tutti i flip-flop. Il dato inoltre è sempre disponibile alle uscite
Q (vedi Figura A-1 per un esempio di registro ad otto bit).
Figura A-1 Registro a 8 bit
Il datasheet dell’ ST6 fornisce un elenco dettagliato dei registri disponibili assieme ai
rispettivi indirizzi (vedi Figura A-2).
13
Figura A-2 Data Memory Space
Per rendere maggiormente chiaro il codice, si associano, tramite il comando .def, delle
stringhe di caratteri agli indirizzi.
14
Il risultato è il seguente:
CODICE
REGISTRO
MNEMONICO
a
accumulatore
x
registro x
y
registro y
wdog
registro del watchdog
port_a
registro dati della porta A
port_b
registro dati della porta B
port_c
registro dati della porta C
pdir_a
registro di direzione porta A
pdir_b
registro di direzione porta B
pdir_c
registro di direzione porta C
popt_a
registro opzioni porta A
popt_b
registro opzioni porta B
popt_c
registro opzioni porta C
ior
registro degli interrupt
armc
registro di controllo dell’auto-reload timer
ars0
registro uno di stato dell’auto-reload timer
ars1
registro due di stato dell’auto-reload timer
arrc
registro di ricaricamento dell’auto-reload timer
arcp
registro di comparazione dell’auto-reload timer
drbr
registro per la scelta della RAM
Tabella A-11: registri utilizzati
L’accumulatore immagazzina i risultati delle operazioni effettuate dalla ALU mentre i
registri x e y sono utilizzati dal software del CEE per memorizzare indirizzi RAM.
Il watchdog contiene un valore numerico che ad ogni clock si riduce di un’unità: se tale
valore si annulla l’ ST6 genera un reset.
Ricaricando il registro almeno ogni 27 istruzioni (vedi datasheet), tramite la riga di
codice ldi wdog,0ffh evitiamo che ciò avvenga.
15
Quando invece un programma si blocca, il conteggio prosegue sino alla fine e la
ripartenza che ne consegue permette al microcontrollore di uscire dall’empasse.
Una conoscenza di base delle funzioni svolte dagli altri registri consente sicuramente una
migliore comprensione del software.
A.2.1 I REGISTRI DEI DATI DELLE PORTE A, B, C (port_a, port_b, port_c)
Parliamo dei registri ad 8 bit corrispondenti alle tre porte di input/output dell’ ST6.
Scrivere su di essi ha l’effetto di emettere, sulle linee settate come output, i livelli logici
corrispondenti. Le porte sono dotate di “latch”, in altre parole mantengono lo stato logico
relativo all’ultima scrittura effettuata. Una lettura invece rileva dalle linee di input i valori
in ingresso e dalle linee di output quelli precedentemente scritti.
A.2.2 I REGISTRI DI DIREZIONE DELLE PORTE A,B,C (pdir_a, pdir_b,
pdir_c)
Ciascuna linea di una porta può essere configurata come input o come output, mediante la
scrittura di un 1 (output) o di uno 0 (input) nel corrispondente bit del registro.
Esempio:
Lo stato del registro pdir_a è il seguente:
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
1
0
0
1
1
1
0
0
Tabella A-12: registro di direzione
I piedini denominati PA0, PA1, PA5, PA6 sono linee di input; tutti gli altri di output.
A.2.3 I REGISTRI DI OPZIONE DELLE PORTE A, B, C (popt_a, popt_b,
popt_c)
Tramite questi registri si definiscono alcune proprietà delle porte di input/output (piedino
per piedino). In particolare possiamo impostare gli ingressi scegliendo tra tre possibilità:
1. normali (Figura A-3);
2. con resistenza di pull-up (Figura A-4);
3. con interrupt (in corrispondenza dei fronti di salita o di discesa del segnale in
ingresso sono generati dei segnali di interruzione - Figura A-5).
16
Figura A-3: input normale
Figura A-4 : input con resistenza di pull-up
Figura A-5 : input con interrupt
Le uscite sono programmabili in due modalità diverse:
1. normale (per generare il segnale in uscita si impiegano due mosfet complementari
disposti secondo lo schema push-pull di Figura A-6);
2. open drain (Figura A-7); la utilizziamo quando sul canale considerato si riversano
segnali di output provenienti anche da altri dispositivi.
Per scegliere una tra le cinque opzioni, i bit del registro potp non bastano. E’ necessario
servirsi anche dei due registri precedenti (port, pdir) seguendo le regole indicate dalla
Tabella A-13.
17
Figura A-6 : output normale
Figura A-7 : output open drain
port
pdir
popt
Modo
Opzione
0
0
0
Input
Con pull-up e niente interrupt
1
0
0
Input
Senza pull-up e niente
interrupt
0
0
1
Input
Con pull-up e con interrupt
Qualsiasi
1
0
Output
Con Open-drain
Qualsiasi
1
1
Output
Con push-pull
Tabella A-13: configurazione porte di comunicazione
A.2.4 IL REGISTRO DEGLI INTERRUPT (ior)
Le porte di comunicazione (A, B, C) e alcune periferiche interne all’ ST6 (ad esempio
l’auto-reload timer) possono generare interrupt corrispondenti a prefissati livelli di
priorità (vedi Tabella A-14).
18
Periferica
Priorità
Indirizzo di
memoria
auto-reload Timer
4
FF2h
Porta C
3
FF4h
Porte A e B
2
FF6h
Not Maskable Interrupt
1
FFCh
Tabella A-14: priorità interrupt
Note:
-
La priorità 5 non è tabulata perché corrispondente a periferiche (il convertitore A/D, il Timer,
l’interfaccia seriale SPI) non utilizzate;
-
Priorità 1 = Priorità assoluta
Le istruzioni di salto alle subroutine di interruzione devono essere disposte in locazioni
ben precise della memoria di programma. Gli indirizzi di tali locazioni sono detti
Interrupt Vector Address.
Il registro ior definisce alcune caratteristiche degli eventi di interruzione:
1. Il bit 6 (LES - Level/Edge Selection bit) consente di scegliere, per le periferiche
con priorità 2 (porte A e B), fra generazione di interrupt su fronte di discesa
(LES=0) o su cambiamento di livello (LES=1 - quando il livello logico è alto le
chiamate alla subroutine di interruzione si susseguono una dopo l’altra);
2. il bit 5 (ESB - Edge Selection bit) seleziona, per le periferiche con priorità 3
(porta C), tra generazione di interrupt su fronte di discesa (ESB=0) o su fronte di
salita (ESB=1);
3. il bit 4 (GEN - Global Enable Interrupt) abilita (GEN=1) o disabilita (GEN=0)
tutti gli interrupt escluso l’NMI. In caso di reset il bit GEN viene posto al valore
0.
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
-
LES
ESB
GEN
-
-
-
-
Tabella A-15: registro degli interrupt (ior)
19
A.2.5 IL REGISTRO DI RICARICAMENTO DELL’AR TIMER (arrc)
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Dato 7
Dato 6
Dato 5
Dato 4
Dato 3
Dato 2
Dato 1
Dato 0
Tabella A-16: registro di ricaricamento dell’AR TIMER (arrc)
Il contenuto dell’arrc viene inviato al comparatore quando il BIT 7 del registro armc vale
1 (vedi il par. A.2.7).
Lo utilizziamo per azzerare il conteggio dei denti al completamento di ciascun ciclo
motore (fronte di discesa di S0)
A.2.6 IL REGISTRO DI COMPARAZIONE DELL’AR TIMER (arcp)
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Dato 7
Dato 6
Dato 5
Dato 4
Dato 3
Dato 2
Dato 1
Dato 0
Tabella A-17: registro di comparazione dell’AR TIMER (arcp)
Il dato contenuto in questo registro è confrontato continuamente con quello presente nel
comparatore. A seconda del microcontrollore che consideriamo (ST6 della interrupt
board , CPU0, CPU1) vi memorizzeremo ad ogni ciclo motore :
-
i denti di interrupt Zint (uno alla volta);
-
il dente Zj di riferimento per il processo di iniezione;
-
i denti Zic e Zfc (uno alla volta) di inizio e fine carica della bobina d’accensione.
Nel comparatore sarà naturalmente presente il valore del dente attuale (Zatt).
A.2.7 IL REGISTRO DI CONTROLLO DELL’AR TIMER (armc)
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
TCLD
TEN
PWMOE
EIE
CPIE
OVIE
ARMC1
ARMC0
Tabella A-18: registro di controllo dell’AR TIMER (armc)
Questo registro viene impiegato per:
1. definire le modalità operative dell’auto-reload timer;
2. abilitare il clock, cioè il segnale che genera gli impulsi necessari per effettuare il
conteggio (nel nostro caso S1);
3. inizializzare il contatore.
20
In caso di reset il contenuto dell’armc viene azzerato.
Le funzione di ciascun bit è la seguente:
-
Bit 7 (TLCD - Timer Load Bit). Se vale 1 il contenuto del registro arrc viene
caricato nel contatore (lo usiamo per azzerare il conteggio dei denti del volano).
-
Bit 6 (TEN - Timer Clock Enable). Se vale 1 il contatore inizia ad incrementare
di uno il proprio valore (Zatt) ad ogni impulso di clock; se vale 0 il conteggio è
interrotto (il valore nel contatore è “congelato”).
-
Bit 5 e 6 (PWMOE - PWM Output Enable e EIE - External Interrupt Enable).
Non usiamo questi due bit e li poniamo pari a zero.
-
Bit 3 (CPIE - Compare Interrupt Enable). Se assume il valore 1 viene abilitato
l’interrupt di comparazione; l’interruzione scatta quando il contenuto del
contatore (Zatt) è uguale a quello dell’arcp (Zj, Zoc, Zic, Zint).
-
Bit 2 (OVIE - Overflow Interrupt). Se vale 1, nel caso si verifichi un overflow
(il contatore supera il valore massimo consentito pari a 255), viene generato un
interrupt. Nel nostro caso, poiché il segnale S0 azzera il valore del dente attuale
prima che ciò avvenga, il bit vale sempre 0. Si ricorda che nel caso il volano
contenga più di 255 denti entra in gioco il divisore di frequenza.
-
Bit 1-0 (ARMC1-ARMC0 - Auto-Reload Mode Control). Questi due bit
permettono di selezionare la modalità di funzionamento dell’AR Timer. Nel
nostro caso valgono 0 e 0 (per ulteriori chiarimenti si rimanda al datasheet del
microcontrollore).
A.2.8 I REGISTRI DI STATO DELL’AR TIMER (ars0, ars1)
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
inutilizzato inutilizzato inutilizzato inutilizzato inutilizzato
Bit 2
Bit 1
Bit 0
EF
CPF
OVF
External Compare Overflow
Interrupt Interrupt interrupt
Tabella A-19: il registro ars0
Il primo dei due registri (ars0), tramite il bit 1 (CPF –Compare Interrupt Flag), registra
l’eventuale verificarsi di un interrupt di comparazione portandone ad uno il valore. Se
21
tale valore non viene azzerato agendo via software, l’auto-reload timer blocca la
generazione degli interrupt successivi.
Gli altri bit svolgono la stessa funzione per segnali di interruzione che non utilizziamo
(interrupt esterno, interrupt di overflow)
L’ars1 configura il clock.
Bit 7
Bit 6
Bit 5
Bit 4
PS2
PS1
Ps0
Non utilizzato
(deve
Bit 3
Bit 2
Bit 1
Bit 0
SL1
SL0
CC1
CC0
essere
tenuto a zero)
Tabella A-20: il registro ars1
La frequenza del segnale di clock può essere ridotta da un dispositivo chiamato prescaler.
Se si impongono i valori di Tabella A-21 ai bit dal 7 al 5 (PS - Prescaler division
Selection) si possono ottenere 8 diversi fattori di divisione, ognuno doppio dell’altro.
PS1
PS2
PS3
Fattore di divisione
0
0
0
1
0
0
1
2
0
1
0
4
0
1
1
8
1
0
0
16
1
0
1
32
1
1
0
64
1
1
1
128
Tabella A-21: bit 7, 6, 5 del registro ars1 per la configurazione del divisore di clock
I bit 2 e 3 selezionano il fronte del segnale di clock da utilizzare per il conteggio (vedi
Tabella A-22)
SL1
SL0
Fronte
Qualsiasi
0
Clock disabilitato
0
1
Fronte di salita
1
1
Fronte di discesa
Tabella A-22: bit 3, 2 del registro ars1 per la configurazione del conteggio
22
I bit 1 e 0 scelgono il segnale da utilizzare come clock. Nel nostro caso S1 è collegato
al piedino PB6, chiamato anche ARTIMin, a cui corrispondono, per i due bit
considerati, i valori 1 e 0.
A.2.9 IL REGISTRO DRBR PER LA SCELTA DELLA RAM
Oltre ai 60 byte di RAM che già conosciamo è possibile utilizzarne altri 64, posizionati
nella parte iniziale della memoria dati (Figura A-2), configurabili come memoria di tipo
RAM scrivendo nel registro drbr il valore 10h. D’ora in poi chiameremo la RAM
ordinaria (60 byte) RAM0 e la RAM ausiliaria (64 byte) RAM1.
23
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
B
STRUTTURA HARDWARE E SOFTWARE DEL CEE
B.1 INTERRUPT BOARD: HARDWARE
Dal punto di vista funzionale la scheda è composta dai seguenti dispositivi:
-
un adattatore di segnale (composto da tre squadratori uguali tra loro),
-
un blocco di fasatura,
-
un generatore di clock,
-
un sincronizzatore,
-
un divisore,
-
un microcontrollore ST6.
B.1.1 L’ADATTATORE.
La fase del motore, all’interno del ciclo di funzionamento, è determinata per mezzo di
tre pick-up induttivi, il primo dei quali rileva il passaggio dei denti del volano, il
secondo il passaggio di un solo grano (un evento a giro) montato ancora solidalmente
all’albero motore, il terzo il passaggio di un solo grano montato sulla puleggia di
trascinamento dell’albero a camme (un evento a ciclo). Tale abbondanza,
apparentemente eccedente l’esigenza di riferire un evento sul ciclo di funzionamento del
motore, è dovuta al fatto che il terzo di questi segnali non può essere ritenuto
rappresentativo della precisa fase di funzionamento, dato il collegamento elastico
(cinghia dentata) con l’albero motore. Questo significa che esso potrà solo essere usato
per discernere tra i due giri che costituiscono un ciclo del motore, mentre l’informazione
proveniente dal secondo sensore sarà impiegata per avere un preciso riferimento
angolare (impiegato, per esempio, per azzerare il conteggio dei denti). Il primo pick up
potrà invece essere impiegato per segnalare il passaggio dei denti, il cui conteggio potrà
essere azzerato grazie alla conoscenza di una posizione assoluta sul ciclo, resa dall’uso
contemporaneo degli altri due sensori.
Ognuno dei tre squadratori ha il compito di trattare il segnale proveniente da uno dei
sensori di posizione collocati sul propulsore, trasformandolo in un’onda quadra.
Il segnale in uscita dal pick-up induttivo affacciato sui denti del volano (Figura B-1 ), ha
un andamento all’incirca sinusoidale (Figura B-6) e ampiezza e frequenza direttamente
proporzionali alla velocità di rotazione dell’albero a gomiti. Per quanto riguarda i
restanti due pick-up, durante un giro dell’albero a camme o dell’albero motore, si ha una
1
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
sola brusca variazione della riluttanza magnetica in corrispondenza del passaggio del
grano. I segnali ottenuti, pur avendo un andamento molto simile (vedi VIN in Figura B-4
e Figura B-5 ), avranno ampiezze e frequenze diverse a causa della differenza di
velocità angolare tra i due alberi; in particolare, il segnale proveniente dal volano avrà
un’ampiezza maggiore ed una frequenza doppia (l’albero a gomiti ha una velocità
angolare doppia rispetto all’albero a camme).
Figura B-1 : Pick-up affacciato sui denti del volano
Quando un dente del volano, oppure uno dei due grani, è perfettamente allineato con il
proprio pick-up la variazione della riluttanza del circuito magnetico è nulla e, di
conseguenza, per le leggi dell’induzione magnetica, è nulla anche la tensione indotta ai
capi del pick-up.
L’obiettivo che ci si pone è quello di ottenere in uscita dall’adattatore, per ognuno dei
segnali trattati, un’onda quadra il cui fronte di salita indichi l’istante in cui la tensione di
ingresso passa per lo zero. Si ottengono in questo modo le tre informazioni sulla fase
del ciclo:
-
l’istante in cui l’albero motore completa un giro (tramite il grano volano);
-
la posizione angolare dell’albero motore nell’ambito di un giro (tramite i denti
del volano);
-
l’istante in cui l’albero a camme completa un giro (tramite il grano camme).
2
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
V-
VIN
A
B
VC
Vout
I6
Figura B-2: schema elettrico di uno squadratore
Lo scehema elettrico (Figura B-2) l’andamento delle tensioni nei cinque punti
fondamentali del circuito (ottenuto tramite Protel 99 SE, un CAD per circuiti elettrici in
grado di simularne il comportamento) permettono di descrivere il funzionamento di uno
squadratore.
V-
VIN
A
B
VC
Vout
I6
Figura B-3: Schema elettrico di uno squadratore
Il ponte di diodi (due 1N4148 adatti per segnali a bassa potenza) garantisce la presenza
nel punto A di un valore di tensione VA compreso nell’intervallo 0-5V. Se VA fosse
3
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
maggiore di 5 Volt, il diodo D1 cortocircuiterebbe il punto A col il morsetto
d’alimentazione, eliminando in un tempo quasi nullo la tensione in eccesso.
Parallelamente, una tensione VA minore di 0 verrebbe resa nulla dal diodo D2 collegato
alla terra del circuito. In realtà la caduta di potenziale ai capi di ciascun diodo è pari a
circa 0.5 Volt, un valore ridotto, ma non nullo; il segnale di tensione in ingresso (VIN)
viene perciò saturato ai valori –0.5-5.5 Volt (Figura B-4 e Figura B-5 ).
Figura B-4 : segnale camme in uscita dal ponte diodi (verde) e dal filtro (blu)
Figura B-5 : segnale di giro in uscita dal ponte diodi (verde) e dal filtro (blu)
4
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Figura B-6: segnale denti in uscita dal ponte diodi (verde) e dal filtro (blu)
La presenza dei diodi garantisce il corretto funzionamento dell’integrato LM339,
eliminando, con un ampio margine di sicurezza, la possibilità che il suo ingresso non
invertente presenti una tensione maggiore dei limiti (inferiore o superiore) sopportabili
dall’integrato. A valle del punto A troviamo un capacitore elettrolitico (C1) che funge,
assieme alla resistenza R2, da filtro “passa-alto”. Il segnale presente in B, quindi ha un
valore medio, per il principio della sovrapposizione degli effetti (valido nel nostro caso
dato che siamo nel campo di funzionamento linerare), pari a 2.5 Volt. Il catodo del
capacitore si trova infatti tra due resistenze in serie (R2 e R3) di ugual valore sottoposte
complessivamente alla tensione di alimentazione (5 Volt).
Riassumendo:
V B = V A − (V A )media + 2.5V (Eq B-1)
La tensione V- (tensione di soglia) presente all’ingresso invertente dell’LM339 è
regolabile a piacere all’interno dell’intervallo 5/3-10/3 Volt, agendo sulla resistenza
variabile R6 (un trimmer). Possiamo infatti considerare le resistenze R4, R6, R5
collegate in serie poiché l’assorbimento di corrente da parte del comparatore è quasi
nullo; la corrente i6 vale :
i6 =
Val
V
5V
= al =
= 0.017 A, (Eq B-2)
R1 + R6 + R5 3R 300Ω
e le cadute di potenziale tra la terra e le due posizioni limite raggiungibili dal cursore del
trimmer valgono:
5
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
V 4 = i6 × R =
V 4 = i6 × 2 R =
Val
5
× R = V , Eq B-3
3R
3
Val
10
× 2 R = V . Eq B-4
3R
3
La differenza di potenziale all’ingresso dell’LM339 è pari a:
∆V = VB − V− = V A − (V A )media + 2.5V − V−. Eq B-5
In presenza di segnali alternati di modesta entità (con ampiezza inferiore a 0.5 Volt), il
ponte diodi non altera il segnale in ingresso, mentre il filtro “passa-alto” elimina un
valore medio già nullo in partenza.
Si ottiene dalla (B.5) regolando il trimmer sui 2.5 Volt (posizione intermedia del
cursore):
∆V = V A . Eq B-6
Con questa configurazione il comparatore squadra esattamente in corrispondenza del
passaggio per lo zero della tensione VA (allineamento perfetto tra
pick-up ed il
corrispettivo grano o dente).
La soglia è stata mantenuta variabile per poter squadrare solo i segnali di maggior
ampiezza (cioè quelli corrispondenti al passaggio di un dente o di un grano) e tagliare
invece il rumore elettromagnetico che può accompagnarli.
Quando VIN raggiunge ampiezze superiori ai 0.5 Volt, il valore di (VA)media non è più
nullo; la distorsione del segnale, generata dal ponte diodi e dal capacitore C1 (Figura
B-4 , Figura B-5 , Figura B-6), fa si che il fronte di salita del segnale squadrato non sia
più sincrono con il passaggio per lo zero di VIN (lo sfasamento dei due eventi dipende
anche dalla velocità di rotazione del propulsore capace di aumentare l’ampiezza di VIN).
L’errore di posizione che ne risulta è peraltro modesto, valutabile in una decina di
microsecondi che a 6000 rpm, ad esempio, corrispondono a 0.3° di rotazione dell’albero
motore (Figura B-9).
L’LM339 ha l’inconveniente di presentare una certa lentezza di commutazione. Per
ottenere in uscita (VD) un livello alto o basso è necessario che la differenza di tensioni
in ingresso, amplificata dal guadagno di tensione ad anello aperto, sia abbastanza
elevata da mandare in saturazione l’amplificatore operazionale (Figura B-7 ).
6
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Figura B-7 : uscite dal comparatore e dallo squadratore
ERRORE
Figura B-8 : Confronto tra il segnale in ingresso e quello in uscita dello squadratore
7
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Questo fenomeno, molto evidente se si osserva la Figura B-8 , viene ridotto
drasticamente dal NOT posto a valle del comparatore (un integrato MM74HC14) dotato
di trigger di Schmitt. Quest’ultimo è in grado di annullare i tempi di commutazione
indipendentemente dalla lentezza di variazione della tensione Vc.
La presenza del NOT è giustificata anche dal basso valore di tensione in uscita dal
comparatore, che raggiunge un livello massimo inferiore di circa un Volt alla tensione
di alimentazione Val (il fenomeno è dovuto alla struttura interna dell’LM339).
L’M74HC14 si occupa di portare il segnale squadrato VOUT ad un valore massimo di
circa 5 Volt e di capovolgerlo, rendendolo utilizzabile dal blocco di fasatura.
B.1.2 Il BLOCCO DI FASATURA.
Osservando su di uno stesso grafico i segnali provenienti dai sensori affacciati sui due
grani (Figura B-9), si nota che con la frequenza di un ciclo motore si ripete sempre la
stessa sequenza di eventi: arriva per primo il segnale proveniente dal pick up montato
sull’albero a camme (C1) e poi due segnali provenienti dai sensori montati sul volano
(V1 e V2).
Figura B-9 : segnali camme (C1 - rosso) e volano (V1 e V2 - blu)
Il blocco di fasatura ha il compito di generare un segnale squadrato, chiamato S0, di
frequenza pari a quella del ciclo e dotato di un fronte di caduta sincrono con il passaggio
per lo zero del segnale dei denti (D1) nel punto A indicato in Figura B-11 .
8
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Figura B-10: Segnale di fasatura S0
V2
D1
A
Figura B-11 : segnale dei denti (D1)
Tale evento corrisponde al primo allineamento tra un dente del volano (che chiameremo
dente 0 o Z0) ed il pick-up che ne rileva il passaggio cronologicamente successivo
all’annullamento del segnale V2.
9
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Staccando la candela di un cilindro e acquisendo il segnale di pressione in camera di
combustione, si può valutare con buona approssimazione dove si trova il suo punto
morto superiore attivo (PMSA - sotto queste condizioni infatti, il picco massimo di
pressione corrisponde quasi esattamente al punto cercato). Confrontando questa
informazione con il segnale S0 è possibile riferire il passaggio del dente zero ad una
posizione perfettamente nota del ciclo di funzionamento del motore (ad esempio, PMSA
del cilindro 1) e conoscere, di conseguenza, l’angolo di rotazione dell’albero a gomiti
che divide i due riferimenti.
La squadratura del segnale proveniente dal sensore affacciato sui denti del volano
permette, grazie al microcontrollore, di contare i denti man mano che l’albero motore
ruota. Azzerando ad ogni ciclo questo valore contemporaneamente alla caduta del
segnale S0, conosciamo con la risoluzione angolare di 360/z gradi (z è il numero di
denti del volano) la posizione angolare dell’albero motore e quindi la fase in cui i suoi
cilindri si trovano.
Vediamo di chiarire il concetto.
Se il contatore segna un valore pari a Zatt vuol dire che l’albero motore ha spazzato, a
partire dall’istante in cui il dente zero è passato sotto il proprio sensore, un angolo α pari
a:
α=
360
× Z att ; Eq B-7
Z
noto l’angolo γ tra Z0 e PMSA sappiamo che l’angolo β tra il PMSA e la posizione
attuale dell’albero vale:
β = γ − α . Eq B-8
Abbiamo ottenuto l’informazione che volevamo, conosciamo cioè, attraverso l’interrupt
board, la collocazione di un pistone rispetto al suo PMSA.
Dall’ordine d’accensione è facile risalire alla posizione di tutti i pistoni.
Appare chiara ora la scelta di acquisire un segnale legato alla posizione dell’albero a
camme (dato che un ciclo copre due giri motore, la sola informazione proveniente dal
volano non basta a stabilire in quale fase si trovino i diversi cilindri).
L’azzeramento del conteggio dei denti tuttavia non viene effettuato al passaggio del
grano camme per i seguenti motivi:
-
il collegamento tra albero motore ed albero a camme è solitamente realizzato
con cinghie dentate che, essendo elastiche, non realizzano un cinematismo
rigido, come potrebbe essere, ad esempio, quello realizzato con ruote dentate,
10
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
soprattutto se si ha a che fare con un organo deteriorato per l’uso e
l’invecchiamento;
-
la rigidità torsionale dell’albero a camme è molto inferiore a quella dell’albero
motore; la puleggia dell’albero a camme su cui è fissato il grano potrebbe per
questo motivo ruotare relativamente all’albero;
-
le camme possono perdere la loro geometria iniziale o può capitare (molto più
spesso di quanto possa sembrare) che nella vita del motore cambi la fasatura,
a causa del salto di un dente nel collegamento albero motore-albero a camme.
Figura B-12: il blocco di fasatura
Tornando al circuito osserviamo che il segnale S0 è generato dai due flip-flop tipo D
(U5A e U5B) visibili in Figura B-12. Il primo dei due flip-flop (l’U5A) viene utilizzato
per dimezzare la frequenza del segnale squadrato di giro (giro_out - corrispondente a
VOUT per lo squadratore del segnale proveniente dal pick-up che rileva il passaggio del
grano volano). Per ottenere ciò si collega l’uscita negata (!Q) all’ingresso D. In questo
modo, ad ogni fronte di salita del segnale di clock (il segnale giro_out con frequenza
pari all’inverso del periodo si rotazione dell’albero a gomiti), l’uscita commuta, in
quanto all’ingresso è presente il suo valore negato (Figura B-7 ).
11
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Q
CLK
Figura B-13 : segnali Q e CLK del FLIP-FLOP D U5A
Poniamoci ora nella configurazione iniziale Q=0 (cui consegue !Q=1 e D=1). Per
ottenere questa condizione si collega l’uscita ciclo_out all’ingresso !CLR (segnale di
reset) dell’U5A. Al completamento di ogni ciclo motore lo squadratore del segnale
proveniente dall’albero a camme fornirà l’impulso necessario per azzerare Q.
All’arrivo del primo fronte positivo del segnale di clock, il dato presente in D viene
trasferito all’uscita. Nella condizione d’ipotesi, questo significa: Q=1, !Q=0 e D=0. Al
successivo fronte di clock si ripristinano le condizioni iniziali e tutto ricomincia. E’
evidente che, commutando ad ogni fronte di salita, il segnale d’uscita ha una frequenza
pari alla metà di quella di clock; inoltre il fronte di discesa risulterà contemporaneo al
passaggio per lo zero del secondo segnale di volano. All’ingresso D del secondo flipflop (l’U5B) abbiamo quindi un segnale che corrisponde in parte a ciò che volevamo: ha
la frequenza giusta, i fronti di salita e discesa corretti, ma non è ancora sincronizzato
con il passaggio dei denti del volano. La soluzione naturale è quella di collegare il clock
dell’U5B al segnale squadrato dei denti (denti_out). In questo modo in uscita otteniamo
S0: un segnale leggermente ritardato rispetto al precedente, ma con i fronti di discesa e
salita al posto giusto, cioè corrispondenti al passaggio del dente 0 e del dente z.
12
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
B.1.3 IL SINCRONIZZATORE.
U2B
U3A
U2A
U3B
U4C
Figura B-14: il sincronizzatore
Per effettuare il conteggio dei denti, il microcontrollore ha bisogno di un segnale
squadrato “pulito” da ogni possibile sbavatura, sincrono con il passaggio dei denti e con
permanenza al valore alto di pochi microsecondi.
Nel tentativo di snellire la trattazione si utilizza d’ora in poi la seguente notazione: agli
ingressi D e !CLR e alle uscite Q e !Q si aggiunge il codice che identifica il flip-flop. Se
il flip-flop che consideriamo è l’U2B, gli identificativi degli input e degli output
assumeranno la seguente forma: D2B, !CLR2B, Q2B, !Q2B.
L’output dello squadratore del segnale dei denti, pur risultando insufficiente, è utilizzato
come base di partenza per la generazione di un siffatto treno di impulsi. Il primo flipflop del sincronizzatore (l’U2B) utilizza come segnale di comando (!CLK2B) il clock
vero e proprio del circuito digitale (quello cioè che scandisce tutte le operazioni
all’interno del CEE), portato dagli originali 8 MHz ad 1 MHz, attraverso un divisore di
frequenza integrato siglato CD4040B.
L’ingresso D2B è collegato in retroazione con l’uscita negata !Q2B. Il dispositivo
funge, per quanto detto in precedenza, da divisore di frequenza. Il segnale Q2B,
perfettamente quadro (duty cycle del 50%) e con frequenza di 500 kHz, arriva agli
ingressi di clock dei flip-flop U3A e U3B.
13
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Q2B
!CLR2A
CLK2A
Q2A
Q3B
Q2B
!CLR2A
CLK2A
Q2A
Q3B
Figura B-15 : Confronto tra i segnali Q2B, !CLR2A, CLK2A, Q2A, Q3B
L’ input D3B proviene dal flip-flop U2A. Al giungere del fronte di salita del segnale dei
denti, la tensione presente all’ingresso D2A, pari a 5 Volt, attraversa, in un lasso di
tempo pari a due cicli di clock (4 µs), i flip-flop U3B e U3A, arrivando alle uscite Q3A
e !Q3A di quest’ultimo. Al ciclo successivo il segnale !Q3A, essendo collegato in
retroazione con !CLR2A, annulla il segnale Q3B (Figura B-15 ).
Questa sequenza di operazioni si ripete ad ogni fronte di salita del segnale squadrato dei
denti.
Q2B
CLK2A
!Q3A
Q2B
CLK2A
!Q3A
!Q3B
!Q2A
S1
!Q3B
!Q2A
S1
Figura B-16 : Confronto tra i segnali Q2B, CLK2A,!Q3A, !Q3B, !Q2A, S1
14
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Il segnale S1 viene generato da una serie di tre operatori logici (3 NAND l’ultimo dei
quali avendo gli ingressi cortocircuitati tra loro è di fatto un NOT) i cui ingressi sono
collegati alle uscite !Q2A, !Q3A, !Q3B.
!Q3B
!Q3A
!Q2A
Uscita
dell’U4C
0
0
0
0
0
0
1
0
1
0
0
0
1
0
1
1
0
1
0
1
0
1
1
1
1
1
0
1
1
1
1
0
Tabella B-1: segnali sincronizzatore
Se analizziamo la Figura B-16 , servendoci della Tabella B-1, risulta chiaro che
all’uscita del NOT avremo sempre 1 nell’intervallo di tempo durante il quale i segnali
(!Q2,!Q3,!Q4) sono per così dire “perturbati” (tensione nulla), all’arrivo del fronte di
salita del segnale denti, dal fluire del segnale D2A attraverso i tre flip-flop
(U2A,U3B,U3A). Tale lasso di tempo, lungo circa sette microsecondi (il valore varia a
seconda della posizione reciproca tra il primo fronte di salita del segnale CLK2B
successivo a quello dei denti e quest’ultimo), è il segnale S1.
B.1.4 IL DIVISORE REGOLABILE.
Come vedremo successivamente, man mano che il conteggio dei denti del volano
prosegue, il valore raggiunto (Zatt) è memorizzato dall’ST6 all’interno di un registro da
8-bit. Il numero massimo di denti rappresentabile è dunque di 256 al ciclo
(l’azzeramento avviene ogni ciclo motore). Dal momento che il propulsore ha un volano
con un fissato numero di denti, se il loro numero supera la metà di questo tetto, non
rimane che trattare il segnale a valle del sincronizzatore dividendone una o due volte la
frequenza (così da far credere al microcontrollore di avere a disposizione un volano con
la metà o un quarto dei denti). Il metodo utilizzato è il solito: si utilizzano due flip-flop
in serie, con le rispettive uscite collegate in retroazione agli ingressi (Figura B-17e
Figura B-18). Si nota subito che i segnali a frequenza ridotta non sono più impulsivi,
ciononostante il microcontrollore nelle prove effettuate al banco prova ha continuato a
funzionare correttamente.
15
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
S1
Figura B-17: divisore regolabile
La scelta della frequenza adatta è operabile tramite dei jumper identici a quelli presenti
sulle schede madri dei personal computer. Con l’aiuto del divisore, il volano può
arrivare ad avere 512 denti senza che ci siano problemi.
Q6A
Q6B
S1
Figura B-18: Divisore del segnale S1
B.1.5 IL MICROCONTROLLORE ST6.
Un sistema a microprocessore che contenga integrata in un unico chip, oltre alla CPU,
una memoria di programma del tipo a sola lettura (ROM) e una memoria dati di tipo
RAM è detto microcontrollore. Tali dispositivi sono concepiti per applicazioni
industriali di controllo, in cui il programma di gestione, una volta messo a punto, non
16
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
richiede più modifiche; essi prevedono inoltre una memoria ridotta rispetto ai computer
classici ed un limitato set di istruzioni.
Mentre si rimanda al datasheet del costruttore per una descrizione completa, vediamo
qui di seguito le caratteristiche principali del dispositivo:
•
frequenza di clock massima pari a 8 MHz;
•
memoria di programma EPROM di 3872 byte;
•
memoria dati di tipo RAM di 128 byte;
•
21 piedini di Input/Output completamente programmabili;
•
stack hardware a sei livelli (permette di memorizzare l’indirizzo successivo
all’ultima riga di codice eseguita prima di passare il controllo del programma ad
una subroutine);
•
un auto-reload timer ad 8 bit (viene utilizzato per il conteggio dei denti).
Sono poi presenti alcune funzioni tipiche dei controllori, di solito assenti nei
microprocessori di uso generale, ma utili nelle applicazioni di controllo:
•
l’auto-reset all’accensione senza necessità di componenti esterni; il reset porta il
Program Counter (registro di memoria in cui è contenuto l’indirizzo di memoria
dell’istruzione da eseguire) alla locazione 0080h da cui parte l’esecuzione del
programma;
•
la possibilità, attivabile in fase di programmazione, di utilizzare un power-up
timer, cioè una temporizzazione interna che ritarda di alcuni millisecondi l’inizio
dell’esecuzione del programma all’atto dell’accensione, per dare modo alla
tensione di alimentazione e all’oscillatore di clock di stabilizzarsi;
•
la presenza di un watchdog timer (temporizzatore “cane da guardia”) capace di
generare un reset ogni pochi millisecondi. Questa “ripartenza” ciclica del
programma è utile per sbloccare l’ST6 da eventuali situazioni critiche o di
blocco in cui possa finire a causa, ad esempio, di bug nel software.
17
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Figura B-19 : schema a blocchi dell' ST6
In Figura B-19 è riportato lo schema a blocchi del microcontrollore; si notino la
separazione delle memorie di programma e dati, le porte di comunicazione con l’esterno
A, B, C (programmabili sia come input che come output piedino per piedino), i piedini
per il collegamento al generatore di clock esterno, l’ingresso del Not Maskable Interrupt
(segnale che permette l’esecuzione di task con priorità assoluta) e del segnale di reset (il
cui scopo è ovviamente quello di far ripartire il programma quando vogliamo).
Durante la fase di inizializzazione della scheda, eseguita dal modello di controllo del
motore memorizzato sulla DS1003, viene attivata una subroutine il cui scopo è quello di
comunicare col processore per trasmettergli alternativamente, per mezzo della porta A
(8 bit), i denti (in senso numerico crescente) ai quali si richiedono gli interrupt (Zint) e la
linea sulla quale li desideriamo (Tint, per un massimo di sette linee).
Come noto, le prime due linee sono utilizzate per l’aggiornamento dei parametri
d’iniezione e d’accensione e per comandare l’inizio delle acquisizioni analogiche. Tutti
i sette segnali di interrupt sono disponibili all’uscita di un connettore a 20 pin saldato
sulla interrupt board. Tra i possibili utilizzi ricordiamo il controllo di dispositivi per
l’acquisizione dati da attivare quando il propulsore si trova in determinate
configurazioni. E’ inoltre possibile (lo vedremo meglio nel prossimo capitolo) associare
ad uno stesso dente più segnali di interruzione.
Per gestire la generazione degli interrupt ovviamente l’ST6 deve essere a conoscenza
della fase di funzionamento del motore, cioè del dente attualmente nelle vicinanze del
18
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
pick-up (Zatt). Il microcontrollore si serve, come abbiamo già più volte detto, di due
segnali:
-
S1, proveniente dal blocco divisore, che fornisce un impulso perfettamente
sincronizzato con il passaggio dei denti. Ad ogni impulso (in realtà all’arrivo
del fronte di salita) l’auto-reload counter (ARC) ad 8 bit (il dispositivo che
conteggia il passaggio dei denti) incrementa di uno il valore memorizzato
(cioè il dente attuale Zatt). Non è possibile accedere direttamente a tale
contatore ma è comunque possibile leggerne o modificarne in tempo reale il
contenuto attraverso il registro ARLR (AR Load Register). La CPU compara
l’informazione contenuta nell’AR counter (Zatt) con quella disponibile presso
il registro di comparazione (ARCR – auto-reload Compare Register), cioè il
dente di interrupt (Zint). Quando il confronto fornisce esito positivo viene
generato un AR Timer Interrupt. Tale interruzione provoca l’esecuzione di
una subroutine che, una volta letto dalla RAM il numero del canale Tint
corrispondente, invia l’impulso di interrupt verso l’esterno. A questo punto ci
si prepara per un nuova sessione di comparazioni memorizzando nell’ARCR
lo Zint successivo.
-
S0 originato dal blocco “fasatura” che è un’onda quadra con la frequenza pari
a quella del ciclo ed ha il fronte di discesa coincidente con il dente zero.
Proprio questo evento, che fissa l’inizio del ciclo per il CEE (individuato dalla
sequenza camme-volano-volano-dente), comanda al microcontrollore di
azzerare il contatore dei denti. Il segnale S0 è considerato dall’ST6 come il
più importante degli interrupt. Esso è definito come Not Maskable Interrupt
(NMI – interrupt non mascherabile): non è possibile disabilitarlo e se si
verifica l’evento che lo controlla (nel nostro caso il fronte di discesa del
segnale S0) ed ha la priorità su tutte le altre operazioni.
B.2 INTERRUPT BOARD: SOFTWARE
Per una migliore comprensione del presente paragrafo si raccomanda la lettura
dell’appendice A.
Gli unici elementi programmabili del CEE sono i microcontrollori. L’operazione di
programmazione deve essere effettuata in un linguaggio comprensibile alla macchina,
ovvero in forma binaria. Per rendere più agevoli questa operazione è disponibile
un’interfaccia che consente l’impiego di un gruppo di istruzioni in formato più
19
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
comprensibile e memorizzabile rispetto alle istruzioni binarie. Si parla in questo caso di
linguaggio assembly.
La prima operazione da compiere nella programmazione è quella di associare dei
puntatori agli indirizzi di memoria RAM in cui saranno scritti o letti i dati manipolati
dall’algoritmo.
Per la interrupt board ne vengono impiegati sei:
savea .def
084h
saveb .def
085h
savec .def
086h
start
087h
.def
command
.def
088h
progrON
.def
089h
Nota: l’indirizzo associato alla variabile savea è
pari a 084h perché in tale punto inizia il banco di
memoria RAM (60 byte in tutto)
Codice B-1: dichiarazione variabili
Il valore contenuto nell’accumulatore viene memorizzato, al momento di eseguire un
sottoprogramma, all’interno della locazione RAM puntata da savea (oppure da saveb o
savec) e restituito, al termine della stessa, nella medesima posizione di memoria. In
questo modo si è sicuri che il programma principale continui ad operare correttamente
avendo a disposizione gli stessi dati presenti al momento della chiamata alla subroutine.
Si utilizzano tre puntatori per non essere in difficoltà nel caso in cui il microcontrollore
sia costretto ad eseguire più sottoprogrammi contemporaneamente (dovuti ad esempio a
due interruzioni quasi contemporanee).
Una generica subroutine è quindi sempre accompagnata dalle seguenti due istruzioni
(con la variabile save si indica una qualsiasi tra savea, saveb, savec):
inizio subroutine
ld save, a (il contenuto di a viene memorizzato in save)
………… codice della subroutine
ld a, save (il contenuto di save viene memorizzato in a)
fine subroutine
Il puntatore start viene impiegato per collocare in memoria i denti di interrupt (Zj),
rappresentativi delle posizioni angolari dell’albero motore in corrispondenza delle quali
20
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
vengono inviati al sistema dSPACE gli interrupt, necessari per stabilire l’istante in cui i
calcoli o le acquisizioni di dati devono essere eseguiti; command invece memorizza il
canale sul quale verrà inviato un determinato interrupt.
Infine progrON registra l’avvenuta programmazione dell’ST6 (in questo caso assumerà
il valore 255).
B.2.1 INIZIALIZZAZIONE DELL’ST6
Il microcontrollore può scambiare informazioni con il resto del circuito se le sue porte
di input e output (porte A, B, C) sono configurate correttamente.
LD
IRQ 0
STR
IRQ 1
IRQ 2
IRQ 3
IRQ 4
ACK
Led 1
Led 2
IRQ 5
S0
S1
IRQ 6
D7
D6
D5
D4
D0
Alim.
Terra
D1
D2
D3
Figura B-20 L’ ST6 dell’interrupt board
La porta A è utilizzata per ricevere dal sistema dSPACE i valori dei denti e dei canali di
interrupt perciò tutti i suoi piedini sono settati come input: tale specificazione si ottiene
specificando il codice mnemonico relativo alla porta a, definendone la direzione (il
valore 00000000b corrisponde a 8 input) e le eventuali opzioni (Codice B-2).
21
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
ldi
wdog,000000000b
ldi
port_a,00000000b
ldi
pdir_a,00000000b
ldi
popt_a,00000000b
Codice B-2: configurazione porta A
I pin PB0, PB1, PB2 corrispondono ai tre segnali del protocollo di comunicazione;
rispettivamente !LD, !STR, !ACK. I primi due saranno naturalmente degli input (con
pull-up) mentre il terzo un output. Per quest’ultimo viene specificata l’opzione di uscita
open drain, poichè sul canale cui è collegato si riversano segnali di output provenienti
anche da altri dispositivi.
I pin PB3 e PB4, collegati a led LD1 (led program) e LD2 (led debug), sono degli
output push-pull. I due led si accendono e spengono al verificarsi di determinati eventi,
consentendo di capire cosa sta accadendo all’interno del microcontrollore.
I pin PB5 e PB7 sono i canali d’uscita (dedicati al parametro Tint) degli interrupt IRQ5 e
IRQ6, sono quindi configurati come output push-pull.
Infine il pin PB6 acquisisce in ingresso S1, necessario per il conteggio dei denti del
volano. Esso è quindi un input con resistenza di pull-up.
ldi
port_b,00000000b
ldi
pdir_b,10111100b
ldi
popt_b,10111000b
Codice B-3: configurazione porta B
La porta C è composta soltanto da cinque piedini (da PC0 a PC4) utilizzati per l’invio
dei segnali di interruzione (da IRQ0 a IRQ4); sono settati perciò come output push-pull.
I primi due pin (PC0, PC1) inviano alla DS1003 gli interrupt IRQ1 e IRQ0 per scandire
le operazioni di acquisizione dei dati analogici e di aggiornamento dei parametri
dell’accensione e dell’iniezione.
ldi
port_c,00000000b
ldi
pdir_c,00011111b
ldi
popt_c,00011111b
Codice B-4: configurazione porta C
L’ultima fase dell’inizializzazione prevede l’azzeramento del contenuto della cella di
memoria puntata da progrON (stante a indicare che la programmazione della scheda non
è ancora avvenuta) e la disabilitazione degli interrupt tramite l’azzeramento del bit GEN
appartenente al registro ior (bit 4) . In questo modo si può essere sicuri che la successiva
22
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
fase della programmazione (blocco di programma main) non venga bloccata da segnali
di interruzione (l’unica subroutine che potrebbe essere attivata è quella legata al NMI).
1.1.1.1 ldi
progrON,00000000b
ldi
ior,00000000b
Codice B-5: disabilitazione interrupt
B.2.2 MEMORIZZAZIONE DEI DENTI E DEI CANALI DI INTERRUZIONE
Il blocco principale (main) dell’algoritmo regola le trasmissioni tra DS1003 e ST6 al
fine di memorizzare i parametri Zint e Tint, necessari per la generazione degli interrupt
(da IRQ0 a IRQ7).
Le informazioni da memorizzare vengono inviate dal sistema dSPACE al CEE secondo
la sequenza riportata in Tabella B-2.
B.2.2.1 Dato (1 byte) B.2.2.2
Commento
B.2.2.4 Primo dente di interrupt
B.2.2.3 Zint1
B.2.2.6 Canali di trasmissione di Zint1 (IRQ0, IRQ7)
B.2.2.5 Tint1
B.2.2.8 Secondo dente di interrupt
B.2.2.7 Zint2
B.2.2.10
Canali di trasmissione di Zint2 (IRQ0,
B.2.2.9 Tint2
IRQ7)
B.2.2.12
B.2.2.11
…………
B.2.2.14
Ultimo di interrupt
B.2.2.13
Zintn
B.2.2.16
Canali di trasmissione di Zintn (IRQ0,
B.2.2.15
Tintn
IRQ7)
Tabella B-2: sequenza di trasmissione
Innanzitutto, per ricevere tali informazioni, è necessario fare spazio nella RAM. Di
questo si occupa start, associato all’indirizzo di memoria 08bh.
main
ldi wdog,111111111b
ldi start,10001011b
Codice B-6
L’idea è quella di stoccare uno dopo l’altro tutti i denti di interrupt (Zint) giunti dalle
schede dSPACE, a partire dall’indirizzo 08bh.
Tramite il registro drbr
(Codice B-7), viene abilitata la RAM1 da impiegare per
collocare i valori Tint, a partire dall’indirizzo 010h, prima locazione di memoria della
RAM1:
ldi drbr,0001000b
Codice B-7
23
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Con la riga di codice successiva inizia la sessione di comunicazione tra i due dispositivi
(Interrupt board e dSPACE). Per informare il dSPACE che la scheda è pronta a ricevere
nuovi dati, viene alzato il segnale di ACK:
set 2,port_b
Codice B-8
Viene poi eseguita l’inizializzazione dell’auto-reload timer (Codice B-9).
ldi
armc,10000000b
ldi
ars0,00000000b
ldi
ars1,00000110b
ldi
arcp,11111111b
ldi
arrc,00000000b
Codice B-9: inizializzazione dell’auto-reload timer
La prima istruzione relativa all’armc permette di caricare nel contatore del comparatore
(dente attuale, Zatt) il valore memorizzato nel registro arrc, pari a zero: di fatto si
ottiene l’azzeramento del dente attuale.
Il bit1 dell’ars0 passa ad uno in corrispondenza di un interrupt di comparazione, e viene
azzerato per poter essere pronto a segnalare un eventuale ulteriore interrupt dello stesso
tipo: basterà in seguito abilitare gli interrupt tramite il registro ior per rendere
funzionante il comparatore. Esso confronterà il dente attuale con quelli memorizzati per
gli interrupt, e inizierà, di conseguenza, la generazione di interrupt.
Il registro ars1 determina l’impostazione del clock: in questo caso le istruzioni
impongono di non utilizzare prescaler, ovvero di non diminuire la frequenza rispetto al
segnale di clock, di utilizzare come trigger i fronti di salita e di usare come fonte di
clock il segnale S1, che – si ricorda - ha la frequenza del passaggio dei denti del volano
di fronte al pick up.
Sul registro arcp dove vengono memorizzati i denti di interrupt, viene scritto un valore
(255) che non può essere raggiunto, per essere sicuri che non si generino interrupt prima
che la programmazione sia completata (anche se le linee di interrupt sono comunque
disabilitate).
Sul registro arrc, infine, si memorizza il valore che viene scritto nel contatore del
comparatore su comando dell’armc.
Tutto è pronto per la ricezione dei dati; il microcontrollore, in attesa del loro arrivo,
entra in un ciclo di durata indeterminata dal quale uscirà solo quando il segnale !LD
(PB0) proveniente dal dSPACE si abbasserà:
24
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
main3 ldi wdog,111111111b
res 4,port_b
jrs 0,port_b,main3
set 4,port_b
call stream
ldi ior, 00010000b
jp main3
Codice B-10
Durante l’attesa il led di debug rimarrà acceso (pin 4 della porta b), e verrà spento
all’abbassarsi del segnale !LD: a questo punto il programma principale effettuerà una
chiamata alla subroutine stream, abilitando subito dopo gli interrupt, ritornando poi in
attesa di !LD.
L’ultima istruzione del blocco main riguarda l’attivazione degli interrupt effettuata
portando ad uno il bit GEN (bit 4). Seguono istruzioni di interruzione, relative alle
azioni da intraprendere in occasione dell’esecuzioni di subroutine di interrupt.
.org 0000111111110000b
jp
tad_int
jp
art_int
jp
CS_int
jp
AB_int
.org 0000111111111100b
jp
nmi_int
jp
inizio
.end
Codice B-11: istruzioni di interruzione
B.2.3 SUBROUTINE STREAM
Il sottoprogramma impiega i registri x e y come puntatori alle celle di memoria in cui
verranno immagazzinati rispettivamente i denti Zint e i canali Tint. Anzitutto vine acceso
il led di programmazione, (linea 3 della porta b), poi si fa puntare il registro x allo
stesso indirizzo di start mentre y viene azzerato (l’indirizzo indicato è infatti il primo
disponibile nella RAM1).
25
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
stream ldi,wdog,11111111b
res3,port_b
ld a,start
ld x, a
ldi y,00000000b
Nota: l’istruzione ld x,start non è
ammissibile. Il valore deve passare per
l’accumulatore.
Codice B-12: inizializzazione programmazione ST6
La condizione necessaria per iniziare la lettura dei denti di interrupt, è, secondo il
protocollo di comunicazione, che i segnali LD e STR siano a basso livello: a questo
punto viene effettivamente memorizzato (scaricandolo dalla porta A) il primo byte che,
in base alla Tabella B-2 sarà il primo dente di interrupt (Zint1); prima di memorizzare il
dente di interrupt viene abbassato il livello del segnale di ACK (canale 2, porta b), per
segnalare al sistema dSPACE la ricezione del dato.
stream1 ldi wdog,11111111b
jrr 0,port_b stream2
jp streame
stream2 ldi wdog,11111111b
jrs 1,port_b stream2
ld a, port_a
res 2,port_b
ld (x),a
Codice B-13: ricezione dente di interrupt
La DS1003 tramite la DS4001 risponde all’abbassamento dell’ACK alzando lo strobe.
Al microcontrollore, una volta ricevuto il segnale, non resta che alzare nuovamente
l’ACK. Strobe e ACK sono ora tornati allo stato iniziale e un altro byte può essere
inviato.
stream3 ldi,wdog,11111111b
jrr 1,port_b,stream3
set 2, port_b
Codice B-14: gestione STR e ACK
La seconda trasmissione interessa Tint1, e procede secondo il medesimo protocollo,
implementato con comandi analoghi ai precedenti:
26
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
stream4 ldi wdog,11111111b
jrs 1,port_b,stream4
ld a, port_a
res 2,port_b
ld (y),a
stream6 ldi,wdog,11111111b
jrr 1,port_b,stream6
set2, port_b
Codice B-15: ricezione canale di interrupt
In analogia a quanto visto prima il sistema è ora in condizioni di attendere un ulteriore
dato, ma per proseguire con la memorizzazione è necessario spostarsi nelle caselle di
memoria successive delle RAM0 e RAM1:
inc x
inc y
jp stream1
Codice B-16
La sequenza di istruzioni del sottoprogramma stream si ripete finché !LD non si alza.
Quando ciò accade la subroutine termina, assieme alla sessione di comunicazione, non
prima però di aver memorizzato in coda alle due colonne di dati due byte relativi al
primo dente di interrupt che rendano inoffensive ulteriori (erronee) programmazioni: il
canale viene infatti impostato a zero. Viene poi spento il led di programmazione e
portato a 255 il valore puntato da progrON (programmazione avvenuta).
Streame ld
a,00000000b
ld
(y),a
ld
a,start
ld
y, a
ld
a,(y)
ld
(x),a
set 3,port_b
ldi progrON,11111111b
ret
Codice B-17: conclusione della programmazione
27
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
B.2.4 SUBROUTINE DI INTERRUPT
Quando si è parlato degli interrupt è stato chiarito che, ad ogni evento di interruzione
corrisponde una istruzione immagazzinata in una specifica posizione della memoria di
programma (vedi Appendice A).
Le subroutine tad_int, CS_int, AB_int sono vuote (non impiegate), mentre le altre due
gestiscono rispettivamente l’auto-reload timer interrupt e il NMI.
B.2.4.1 INTERRUPT: NMI
Dopo aver verificato tramite progrON che la programmazione della scheda sia stata
effettuata, il sottoprogramma, eseguito in corrispondenza del fronte di dicesa del
segnale di ciclo (S0), carica sul registro armc il valore 0, contenuto nel registro arrc. Il
risultato è l’azzeramento del conteggio del dente attuale. Inoltre vengono abilitati il
clock e l’interrupt di comparazione:
nmi_int
nmi1
ldi wdog,11111111b
ld
savec,a
jrs
0,progrON,nmi1
jp
nmie
ldi
arrc,00000000b
ldi
armc,11001111b
Codice B-18: azzeramento del conteggio del dente attuale
Dopo aver azzerato il conteggio si carica nel comparatore il primo dente di interrupt
Zint1 e nella cella di memoria puntata da command il canale sul quale si desidera il
primo interrupt, Tint1.
ld a,start
ld x, a
ldi y,00000000b
ld a,(x)
ld arcp, a
ld a,(y)
ld command, a
nmie
ld a,savec
reti
Codice B-19: programmazione del comparatore
Ci si serve di command nella subroutine dell’auto-reload timer interrupt per scegliere il
canale sul quale inviare il segnale d’interruzione.
28
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
B.2.4.2 INTERRUPT: ART
La subroutine, per prima cosa, controlla, tramite la variabile progrON, che la
programmazione sia avvenuta: se così non fosse, la routine terminerebbe.
art_int load saveb,a
ld
a,progrON
jrnz
art1
jp
arte
Codice B-20: controllo di progrON
Si prosegue poi incrementando x e y, posizioni dei registri contenenti le variabili
variabili relative ai denti di interrupt e ai relativi canali.
inc
x
inc
y
ldi
wdog,11111111b
Codice B-21: aggiornamento dei registri
Quindi si verifica quali dei bit puntati da command siano pari a 1 e, sui canali
corrispondenti, si invia un interrupt:
jrr
7,command,art2
set
7,port_b ; IRQ6
art2
jrr
set
5,port_b ; IRQ5
art4
jrr
set
4,port_c ; IRQ4
art5
jrr
set
3,port_c ; IRQ3
art6
jrr
set
2,port_c ; IRQ2
art7
jrr
set
1,port_c ; IRQ1
art8
jrr
set
0,port_c ; IRQ0
6,command,art4
4,command,art5
3,command,art6
2,command,art7
1,command,art8
0,command,art9
Codice B-22: invio degli impulsi di interruzione
Per effettuare una nuova comparazione, viene caricato nel registro arcp il dente di
interrupt successivo e in command l’indirizzo di memoria contenente il corrispondente
29
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
canale Tint. I canali di interrupt vengono poi azzerati, in modo da essere pronti ad un
altro ciclo di controllo. Anche il registro ars0, che informa dell’avvenuta uguaglianza tra
dente attuale e dente di interruzione, viene azzerato per abilitare un'altra volta l’autoreload timer interrupt.
art9 ldi
wdog,11111111b
ld
a,(x)
ld
arcp,a
ldi
drbr,00010000h
ld
a,(y)
ld
command, a
ldi
ars0,00000000b
ldi
port_c,00000000b
ld
a,port_b
andi a,01001100b
ld
arte ld
port_b,a
a,saveb
reti
Codice B-23
B.3 TOP BOARD: HARDWARE
Dal punto di vista funzionale la scheda è composta dai seguenti dispositivi:
-
due buffer per smistare i dati in ingresso;
-
due microcontrollori ST6; uno per controllare l’iniezione (CPU0), l’altro per
l’accensione (CPU1);
-
un timer Intel 82C54 dotato di tre contatori programmabili (per eseguire il
conteggio dei parametri Toj, Tj, Toc che caratterizzano i segnali monostabili
ritardati);
-
un data latch;
-
un flip-flop D;
-
un divisore di clock.
Nel corso della trattazione verranno messe in evidenza, man mano che si presenteranno,
le differenze tra la top board prototipo utilizzata per testare il circuito e la versione
definitiva in grado di eseguire multi-iniezioni (utili ai motori diesel common rail ad
iniezione diretta).
30
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
B.3.1 I Buffer
I parametri di controllo vengono trasmessi alla top board dal sistema dSPACE
attraverso le linee digitali della DS4001. Per trasmettere il valore di un tempo (sia esso
un tempo di iniezione o un tempo di ritardo) vengono utilizzati 16 bit,in modo tale che,
essendo la frequenza di clock pari a 1 MHz, il massimo valore trasmissibile sia di
216=65535 [µs], sufficiente per la massima durata di un’iniezione. I denti sono invece
espressi impiegando 8 bit, ovvero è possibile impiegare ruote foniche con al massimo
256 denti (in realtà, sfruttando il divisore posto sulla Interrupt Board si può arrivare a
512). Questi dati vengono trasmessi in pacchetti da 16 bit.
Pin D0
D7
Pin D8
D15
Zic
Zj
Zfc
Toj- (byte meno significativo)
#
Toj+ (byte più significativo)
Tj+ (byte più significativo)
Tj- (byte meno significativo)
Toc- (byte meno significativo)
Toc+ (byte più significativo)
Figura B-21: sequenza di trasmissione
A riceverli ci sono due buffer (B1 e B0) integrati siglati MM74HC541, ognuno dei quali
è in grado di accogliere solo 8 bit.
Un buffer (conosciuto anche come separatore di impedenza) isola elettricamente due
circuiti logici connessi tra loro e, allo stesso tempo, ne regola lo scambio di
informazioni logiche; in altre parole i circuiti a monte e a valle di tali dispositivi sono da
considerarsi autonomi, ognuno dotato della propria alimentazione.
Tornando al CEE, i parametri che occupano più di un byte (cioè Tj, Toc, Toj) vengono
divisi in due blocchi da otto bit ciascuno. La ricezione dei dati è regolata dall’ST6 detto
CPU0. L’output di ciascun buffer viene infatti abilitato dal microcontrollore tramite due
segnali “attivi bassi” provenienti dai piedini !CE1 e !CE0 (ciascuno connesso ad un
buffer – Figura B-22) collegati agli ingressi !G1 e !G2 (cortocircuitati tra loro e
chiamati Output Enable Inputs) .
31
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
B1
CPU0
B0
Figura B-22: I buffer B1 e B0 e la CPU0
Si può notare che gli output dei due Buffer (Figura B-22) sono collegati tra loro. Se due
uscite collegate assieme si portano a livelli logici opposti, si verifica una condizione di
quasi-corto, con forte assorbimento di corrente dall’alimentazione. La soluzione a
questo inconveniente può essere quella di porre, mediante un apposito comando, l’uscita
delle porte logiche non utilizzate in una condizione di alta impedenza. E’ questo il caso
dell’uscita tristate utilizzata dai buffer qui descritti. Un circuito tristate, in condizione di
alta impedenza, non inoltra sull’uscita il segnale applicato ai suoi ingressi (buffer
disabilitato) e, allo stesso tempo, non rappresenta un carico per eventuali circuiti
collegati alle sue stesse linee di uscita (nel nostro caso l’altro buffer e la CPU0).
In condizioni di bassa impedenza il dispositivo dotato di circuito tristate invia all’uscita
lo “stato” che deriva dal suo funzionamento logico. I buffer possiedono due ingressi (i
già visti !G1 e !G2) che permettono di portare nello stato di alta impedenza (Z) l’uscita
stessa.
Occorre osservare che le porte tristate continuano ad essere assoggettate ai rischi di
quasi corto accennati in precedenza; basta infatti che una delle due uscite dei buffer non
venga disabilitata (ad esempio per un errore di programmazione nel software
immagazzinato nella CPU0) per veder aumentare il valore della corrente assorbita con il
pericolo di danneggiamento per gli integrati.
B.3.2 TRASMISSIONE DEI DATI
Seguiamo ora le varie fasi della trasmissione.
32
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Prima trasmissione (Figura B-23).: il dente di inizio carica Zic viene inviato
direttamente alla CPU1 (microcontrollore più in alto), mentre il dente di riferimento
inizio iniezione Zj viene trasmesso alla CPU0 tramite il buffer B0.
In questa fase: CE0=0 e CE1=1 poiché gli ingressi !G1 e !G2 sono attivi bassi.
Zic
ST6
CPU1
B1
B0
Zj
ST6
CPU0
TIMER
Figura B-23: prima trasmissione
Seconda trasmissione (Figura B-24): il dente di fine carica Zfc viene trasmesso
direttamente alla CPU1, mentre il primo byte del tempo Toj (quello meno significativo)
viene inviato al timer 82C54. La CPU0 autorizza il timer a memorizzare questo dato
inviando un segnale di basso livello dal proprio pin !8253WR al piedino WR
dell’82C54.
In questa fase: !CE0=0 e !CE1=1.
Zfc
ST6
CPU1
1
B1
B0
Toj -
ST6
CPU0
TIMER
Figura B-24: seconda trasmissione
33
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Terza trasmissione (Figura B-25): Toj+ viene inviato al timer, mentre sull’altro canale
ad 8 bit non viene inviato nulla.
In questa fase: !CE0=0 e !CE1=1.
ST6
CPU1
B1
B0
Toj +
ST6
CPU0
TIMER
Figura B-25: la terza trasmissione
Quarta trasmissione – prima parte (Figura B-26): Tj- viene inviato al timer 82C54,
mentre il byte Tj+, trasmesso al buffer B1, è “congelato” (!G1 e !G2 sono alti), in attesa
di essere letto; con questa procedura viene velocizzata la trasmissione perché il buffer
B0 rimane aperto dalla trasmissione precedente.
In questa fase: !CE0=0 e !CE1=1.
ST6
CPU1
Tj +
B1
B0
Tj -
ST6
CPU0
TIMER
Figura B-26: quarta trasmissione (prima parte)
Quarta trasmissione – seconda parte (Figura B-27): Tj+ viene inviato al chip 82C54
mentre Tj-, già letto, è bloccato disabilitando il buffer B0.
In questa fase: !CE0=1 e !CE1=0;
34
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
ST6
CPU1
B1
Tj +
ST6
CPU0
B0
Tj -
TIMER
Figura B-27: quarta trasmissione (seconda parte)
Quinta trasmissione - prima parte (Figura B-28): Toc- viene trasmesso al timer 82C54
attraverso il buffer B1, abbassando il segnale CE1; Toc+, invece, è inviato al buffer B0 e
qui congelato in attesa di essere letto.
In questa fase: !CE0=1 e !CE1=0.
ST6
CPU1
B1
Toc
Toc
-
B0
+
ST6
CPU0
TIMER
Figura B-28: quinta trasmissione (prima parte)
Quinta trasmissione - seconda parte (Figura B-29): Toc+ viene inviato al chip 82C54
mentre Toc-, già letto, è fermato disabilitando il buffer B1.
In questa fase: !CE0=0 e !CE1=1.
35
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
ST6
CPU1
Toc
B1
-
B0
Toc
+
ST6
CPU0
TIMER
Figura B-29: quinta trasmissione (seconda parte)
Il protocollo di comunicazione
Il protocollo di comunicazione, utilizzato dal sistema dSPACE e dal CEE per
coordinare le varie fasi che compongono una trasmissione di dati, interessa tutti i
microcontrollori installati sulle top ed interrupt board.
Si inizia dunque con la descrizione del comportamento di un singolo microcontrollore.
Tre sono i segnali che deve gestire: ACK (Acknowledge), !STR (Strobe) e !LD (Load).
Nel caso delle CPU0 e CPU1 (top board), il !LD e lo !STR sono fusi da un OR logico in
un unico segnale, il !New_Data, che rimpiazza lo !STR avendone di fatto la stessa
funzione (durante una sessione di comunicazione il !LD è tenuto basso per cui l’uscita
!NEW_DATA e l’ingresso !STR coincidono).
Prima che inizi la trasmissione i livelli di tutti e tre i segnali sono alti.
Il protocollo, la cui logica è schematizzata dal diagramma di flusso in Figura B-30,
prevede per prima cosa, l’abbassamento, operato dal sistema dSPACE tramite una SFunction integrata nel modello Simulink, del segnale !LD e del segnale !STR (nel
seguito !STR è equivalente a !New_Data).
Il load basso indica l’apertura di una sessione di comunicazione durante la quale
verranno inviati tutti i parametri (aggiornati dal modello di controllo) disponibili (vedi
ad esempio la Figura B-21); lo !STR basso invece, segnala al microcontrollore che è
pronto per essere inviato un solo pacchetto di dati (8 bit per l’interrupt board e 16 bit per
la top board).
36
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
attiva load
no
Ack=1 ?
si
LOAD
D ←dato
Str ← 0
STROBE
no
Ack=0 ?
si
Str ← 1
ACK
si
altri dati ?
no
disattiva load
Figura B-30: Il protocollo di comunicazione
L’ST6, vedendo abbassati sia il load sia lo strobe, memorizza i dati presenti ai suoi
ingressi secondo le modalità descritte nei paragrafi precedenti e abbassa l’ACK. In
questo modo informa il sistema dSPACE che il passaggio dei primi parametri si è
concluso con successo. Il dSPACE risponde alzando lo !STR.
L’ST6, a questo punto, reagisce alzando immediatamente l’ACK. Lo Strobe e l’ACK
sono tornati ad assumere il loro valore iniziale ed i dispositivi sono pronti per
trasmettere altri 16 bit (8 nel caso dell’interrupt board). Quando tutti i parametri sono
stati riversati nei microcontrollori il sistema dSPACE alza il !LD terminando la
sessione.
Il sistema dSPACE, pur comunicando con una scheda alla volta, è in contatto con un
numero di microcontrollori pari al doppio dei cilindri del motore (una top board per
cilindro) più uno (interrupt board).
Il problema è che non ci sono abbastanza linee digitali per far arrivare ogni singolo
ACK alle schede dSPACE.
Il software della DS1003 deve “accontentarsi” di ricevere un segnale che tenga conto
della situazione in cui si trovano tutti gli ST6. Per ottenere ciò si realizza un circuito
37
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
(vedi Figura B-31) con molti input (tutti gli ACK) ed un unico output collegato
all’hardware dSPACE. I due ingressi provenienti da ciascuna top board sono inviati ad
un NAND seguito da un diodo 1N4148.
Si dimentichi per un attimo l’ACK della interrupt board.
Se entrambi i microcontrollori di una top board alzano il segnale di ACK, all’uscita del
corrispettivo NAND si hag il valore 0. Il diodo si trova ad essere polarizzato
direttamente, per cui nel punto B la tensione sarà nulla (segnale logico 0). La resistenza
R1 (disposta sulla scheda di comunicazione), detta di pull-up, si occupa di assorbire la
caduta di potenziale. Gli output degli altri NAND, trovandosi al valore uno (i due ACK
sono bassi in quanto la comunicazione riguarda una top board alla volta), provocano
una polarizzazione inversa dei loro diodi, isolando di fatto le schede a cui appartengono.
B
ACK
ACK
ACK
ACK
ACK
TOP
BOARD 1
TOP
BOARD 2
INT
BOARD 1
Figura B-31: wired-AND nel caso di 2 top board
Riassumendo: basta che una delle uscite dai NAND sia nulla per inviare al dSPACE un
segnale di ACK allo stato 0. Si ottiene in questo modo un così detto “wired-AND”.
38
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Occorre osservare che il software di comunicazione della DS1003 dovrà interpretare un
ACK basso come una richiesta di dati, al contrario di ciò che accade per i
microcontrollori.
Nel caso della interrupt board il piedino dell’ACK viene settato come output opendrain. Se l’ST6 abbassa l’ACK, il MOSFET si chiude portando a 0 l’uscita B, altrimenti
il transistor rimane aperto e l’uscita B a 1.
B.3.3 La CPU0
Questo microcontrollore si occupa di:
-
regolare il flusso di dati in entrata abilitando o disabilitando con i segnali
!CE1 e !CE0 i buffer B1 e B0,
-
memorizzare il dente di riferimento per l’inizio del conteggio dei tempi
caratteristici dell’iniezione,
-
memorizzare, come accennato in precedenza, i tempi relativi alle iniettate
successive alla prima (caso multijet),
-
programmare al momento opportuno i tre timer dell’82C54 tramite i segnali
A0, A1 e WR (i primi due attivano la modalità di programmazione del timer
mentre il terzo permette la memorizzazione degli intervalli di tempo da
contare),
-
inviare all’82C54 il comando di inizio conteggio (prima del tempo di ritardo
Toj e poi del tempo di iniezione Tj ).
La CPU0, ricevuti dalla interrupt board i segnali S1 e S0, li utilizza allo stesso modo.
Servendosi dell’auto-reload timer (vedi interrupt board) confronta continuamente il
valore del dente attuale Zatt, che in quel momento passa davanti al trasduttore induttivo
affacciato sui denti del volano, con il dente Zj programmato.
Una volta verificata l’uguaglianza tra questi due valori, l’ST6 alza il valore del segnale
INJ_ON. Quest’ultimo viene inviato come trigger all’ingresso GATE0 del timer 0 (il
primo dei tre contatori dell’82C54) . Al suo arrivo il timer 0 inizia a contare il tempo
Toj. Il contatore (timer0) è programmato per funzionare in modalità uno, che prevede la
permanenza a basso livello del segnale d’uscita OUT0 solamente durante la fase attiva
del conteggio. L’ OUT0 viene inviato direttamente al GATE1 del timer 1, programmato
anch’esso in modalità uno: proprio il fronte di salita del segnale OUT0 costituisce il
trigger necessario per l’attivazione del secondo timer. Il segnale OUT1, invertito grazie
ad un NOT, è il comando logico che viene inviato allo stadio di potenza dell’iniezione
(OUT 1 raggiunge anche l’ingresso INJ del microcontrollore). Nel caso in cui si
39
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
utilizzasse un circuito di potenza “attivo basso” è comunque presente un’ulteriore uscita
priva del NOT.
B.3.4 La CPU1
Passiamo ora alla descrizione della gestione della generazione del seganle di carica della
bobina.
Una volta verificata la coincidenza tra il dente Zic, calcolato dal modello e memorizzato
nell’auto-reload compare register (ARCR) della CPU1, ed il dente attuale (aggiornato in
tempo reale grazie agli ingressi per i segnali S1 ed S0), l’ST6 abbassa il segnale
!BOB_ON.
Impulso di clock
t
GATE2
OUT2
t
t
Toc
Figura B-32: timer2 programmato in modalità 5
Quest’ultimo viene inviato all’ingresso D del flip-flop tipo D U3A e quindi passato
all’uscita Q in occasione del fronte di salita del segnale di clock, costituito da S1. Il
segnale Q viene inviato sia al data latch costituito dai due NAND incrociati, sia al terzo
timer dell’82C54 e il suo fronte di caduta attiva il processo di carica della bobina.
A questo punto il microcontrollore sostituisce nel suo comparatore il dente Zfc al dente
Zic, proseguendo comunque i confronti con il dente attuale. Quando l’uguaglianza è
verificata la CPU1 alza !BOB_ON. Il terzo timer, sensibile al fronte di salita di tale
segnale, inizia il conteggio del tempo Toc. L’ST6 in questo caso ha settato il contatore in
modalità cinque in modo da fornire in uscita, sull’OUT2, un segnale basso soltanto per
il ciclo di clock successivo all’esaurirsi del conteggio (vedi Figura B-32).
40
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
B.3.5 Il Data Latch
Il data-latch (o latch S-R) a porte NAND condivide con i flip-flop la capacità di
“agganciare” uno stato logico e di mantenerlo memorizzato.
B.3.5.1
EVENTO
B.3.5.2
OUT B.3.5.3
G
B.3.5.4
BOB
B.3.5.5
BOB
2
A
ATTI
ATTIV
(!R=
T
VO
O
S)
E2
ALTO
BASSO
(R
(Q)
(!Q)
)
B.3.5.6
Inizio
B.3.5.7
1
B.3.5.8
1
B.3.5.9
0
B.3.5.10 1
B.3.5.11 Dente Zic
B.3.5.12 1
B.3.5.13 0
B.3.5.14 1
B.3.5.15 0
B.3.5.16 Dente Zfc
B.3.5.17 1
B.3.5.18 1
B.3.5.19 1
B.3.5.20 0
B.3.5.21 Durante il
B.3.5.22 1
B.3.5.23 1
B.3.5.24 1
B.3.5.25 0
B.3.5.27 0
B.3.5.28 1
B.3.5.29 0
B.3.5.30 1
B.3.5.32 1
B.3.5.33 1
B.3.5.34 0
B.3.5.35 1
conteggio Toc
B.3.5.26 Dopo il
conteggio Toc
B.3.5.31 Fine
Tabella B-3: il data latch
Figura B-33: generazione del segnale d’accensione
Rispetto al flip-flop tuttavia, il data latch ha le seguenti caratteristiche:
1. non è sincronizzabile: il suo funzionamento non può essere sincronizzato con
quello di altri elementi logici del circuito di cui fa parte, mediante un comando
di clock;
41
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
2. è trasparente: per trasparenza si intende la simultaneità nel tempo tra gli stati
degli ingressi e quelli corrispondenti delle uscite.
Analizzando la Tabella B-3 si possono trarre le seguenti conclusioni:
•
considerando !Q come uscita fondamentale, si osserva che questa viene
portata a 1 da uno 0 applicato all’ingresso !R;
•
una coppia di ingressi pari ad 1 permette di mantenere la condizione
precedente (il data latch in questo modo memorizza uno stato logico).
Nel nostro caso il latch S-R è posto a valle del timer programmabile, preposto alla
generazione del segnale di comando della bobina dell’accensione. Il segnale Q,
proveniente dal flip-flop D, è, per quanto visto, a basso livello solamente durante
l’intervallo temporale che intercorre tra il passaggio del dente Zic e quello del dente Zfc.
Supponiamo di essere nella situazione di inattività della bobina, caso che si verifica tra
la fine di una carica e l’inizio della successiva; in tali condizioni abbiamo che:
-
OUT2=1,
-
GATE2=1
-
BOB attivo alto=0;
-
BOB attivo basso=1.
Al riconoscimento del dente Zic il segnale GATE2=Q si porta a 0 mentre OUT2 rimane
ad 1. All’uscita avremo:
-
BOB attivo alto=1;
-
BOB attivo basso=0.
Al passaggio del dente Zfc, GATE2 si porta al livello alto, fornendo il fronte di salita
necessario per attivare il terzo timer, preventivamente programmato in modalità cinque,
e facendo scattare il conteggio di Toc.
Riassumendo al passaggio del dente Zfc:
-
OUT2=1,
-
GATE2=1
-
BOB attivo alto=1;
-
BOB attivo basso=0.
Al termine del conteggio OUT2 si abbassa di livello per un brevissimo istante (un ciclo
di clock), provocando così il cambiamento di stato dei segnali in uscita; cioè avremo:
-
OUT2=0,
-
GATE2=1
-
BOB attivo alto=0;
42
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
-
BOB attivo basso=1.
Il successivo cambiamento di livello di OUT2 (un ciclo di clock dopo) non produce
alcuna variazione delle due uscite (Figura B-33).
B.3.6 Il problema del T0C nullo
Un problema di cui ci si è accorti durante la messa a punto del CEE al banco prova
riguarda il tempo Toc. Un valore di Toc nullo compromette la generazione del segnale di
comando.
Figura B-34: il problema del Toc nullo
Si supponga di trovarsi nella fase in cui il terzo timer deve contare il tempo Toc (Figura
B-33). Se tale valore è pari a zero, non essendoci di fatto conteggio, qualsiasi sia la
modalità di funzionamento del timer, nell’uscita OUT2 avremo sempre uno stato logico
1. Anche l’ingresso GATE2 vale 1 per cui in uscita verrà mantenuta la configurazione
precedente che prevede il caricamento della bobina. Avremo di conseguenza un
caricamento estremamente lungo della bobina (dall’inizio della carica 1 alla fine della
carica 2 – Figura B-34) che, oltre a provocare un misfire, danneggia la bobina e lo
stadio di potenza se il fenomeno si ripete frequentemente.
Per risolvere il problema si è agito sull’algoritmo di controllo, inserendo all’uscita del
calcolo del tempo Toc una soglia che ne fissi il valore minimo ad un microsecondo.
43
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
B.3.7 Il Flip Flop D
La presenza del flip-flop D è dovuta alla necessità di sincronizzare il segnale di
attuazione con il passaggio del dente di comando.
All’arrivo del dente Zfc (lo stesso vale per il dente Zic, anche se in questo caso le
problematiche connesse sono molto più lievi perché il parametro critico del sistema
d’accensione è l’anticipo col quale si fa scoccare la scintilla) il microcontrollore,
rilevando l’uguaglianza tra il dente in transito e quello programmato, lascia partire
l’auto-reload interrupt. Questo evento non ha la precedenza assoluta all’interno della
CPU (tra gli interrupt il suo grado di priorità è tre mentre il NMI interrupt ha priorità
uno). In occasione dell’istante in esame potrebbe quindi accadere che l’ST6 stia
svolgendo una routine avente una più alta priorità di esecuzione, oppure una qualsiasi
routine di interrupt con la stessa priorità, ma iniziata un po’ prima. In questo caso la
sequenza di operazioni necessarie per il cambiamento di stato di !BOB_ON viene
accodata al codice che il microcontrollore sta eseguendo, con il risultato di posticipare
l’attivazione del terzo timer in un istante non bene identificabile, successivo al
passaggio del dente. La presenza del flip-flop, accompagnata da una programmazione
impostata in modo da far riconoscere al comparatore non il dente Zfc (o Zic) bensì quello
precedente, assicura che l’inizio carica e l’attivazione del conteggio di Toc avvenga in
occasione del passaggio del dente effettivo. Il tempo che intercorre tra un dente è l’altro
è infatti sufficiente per far sì che l’esecuzione delle routine prioritarie si concluda.
L’ST6 avrà quindi tutto il tempo prima del sopraggiungere del dente Zfc per inviare al
flip-flop il segnale !BOB_ON corretto.
B.3.8 Il Divisore di Clock
Il blocco divisore di frequenza ha il compito di ridurre la frequenza di clock, che
scandisce le operazioni all’interno delle CPU (8 MHz), al valore di 1 MHz, da utilizzare
come clock del contatore. In questo modo i valori numerici delle variabili Toc, Tj, Toj
sono in realtà microsecondi. Come già visto in precedenza il dimezzamento della
frequenza può essere ottenuto collegando l’uscita negata !Q di un flip-flop D con il suo
ingresso D. Per passare da 8 ad 1 MHz basterà quindi disporre tre di questi dispositivi in
serie (8/2=4/2=2/2=1 - vedi Figura B-35).
44
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Figura B-35: divisore di clock
Per ridurre al minimo un possibile errore sul conteggio del tempo Toc, la parte del
divisore relativa alla generazione del clock per il timer dell’accensione, contiene un
segnale di Clear (!CLR) che lascia partire un nuovo impulso di clock sincronizzato con
l’arrivo del segnale Q del quale abbiamo già parlato.
Il motivo di questo provvedimento risiede nel modo in cui opera il divisore di
frequenza: il dispositivo acquisisce in ingresso otto impulsi da 8 MHz prima che in
uscita si presenti un fronte di salita. Supponiamo che il segnale di !BOB_ON trasmesso
dal flip-flop di sincronismo U3A arrivi al counter quando nel divisore sono entrati solo
sette impulsi: in tale circostanza, dopo un ottavo di microsecondo, dall’output del
divisore partirà un impulso diretto al terzo timer facendogli credere di aver contato già
un microsecondo e generando un errore pari a 7/8 di microsecondo (0.03° a 6000 rpm),
che si riflette sulla posizione angolare dello scoccare della scintilla (anticipo).
Lo stesso discorso non vale per l’iniezione, dal momento che in questo caso
produrrebbe soltanto uno spostamento angolare dei parametri Toj e Tj, ma ne lascerebbe
invariato il valore assoluto. Infatti la conclusione del conteggio Toj e l’inizio di quello di
Tj avviene esattamente in presenza di un fronte di salita del segnale di clock.
B.4 TOP BOARD: SOFTWARE CPU1 (ACCENSIONE)
B.4.1 [CPU1_02.asm]LA DICHIARAZIONE DEI PUNTATORI
Come per la interrupt board le prime righe di codice consentono di dichiarare i
puntatori; per la CPU1 ne bastano cinque.
45
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
savea .def
084h
saveb .def
085h
progrON .def 086h
Don .def 087h
Doff .def 088h
Codice B-24: dichiarazione puntatori
I primi tre (savea, saveb e progrON) sono impiegati come i loro omonimi nel
programma dell’interrupt board.
Don e Doff contengono gli indirizzi di memoria nei quali saranno collocati i denti di
inizio e fine carica.
B.4.2 L’INIZIALIZZAZIONE DELLA CPU1
La porta A è utilizzata per ricevere dalle schede dSPACE i valori dei denti di inizio
(Zic) e fine carica (Zfc); tutti i piedini sono definiti come input :
.org 10000000b
ldi
wdog,11111111b
ldi
port_a,11111111b
ldi
pdir_a,00000000b
ldi
popt_a,00000000b
Codice B-25: configurazione porta A
Per quanto riguarda la porta B i pin PB1 e PB5 corrispondono ai segnali !LD e !ACK
del protocollo di comunicazione. Il primo è un input (con pull-up), il secondo un output
push-pull. Al pin PB0 è inviato il segnale di carica della bobina ed è quindi configurato
come input con resistenza di pull-up.
Il piedino PB6, come accade per l’interrupt board, acquisisce il segnale S1 necessario
per il conteggio dei denti del volano.
ldi
port_b,00000000b
ldi
pdir_b,10111100b
ldi
popt_b,10111100b
Codice B-26: configurazione porta B
Per quanto concerne la porta C, PC0 è assegnato al segnale NEW Data (OR logico tra i
segnali STR e LD), mentre da PC3 parte il segnale BOB_ON, che fa partire la carica
della bobina: la prima è una linea di input con resistenza di pull-up, la seconda di output
push-pull.
46
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Il pin PC3 riceve il segnale strobe e di conseguenza è un input con resistenza di pull-up.
ldi
port_c,00011110b
ldi
pdir_c,00011110b
ldi
popt_c,00011110b
ldi
tscr,00000000b
ldi,
progrON,00000000b
ldi
ior,000000000b
reti
jp
main
Codice B-27: configurazione della porta C
In seguito viene disabilitato il timer dell’ST6, viene azzerata la variabile progrON, per
indicare che la programmazione non è ancora avvenuta, e vengono disabilitati tutti gli
interrupt (tranne NMI), fino a che non sia stata completata la programmazione.
B.4.3 LA ROUTINE MAIN
Il blocco principale (main) dell’algoritmo si occupa della programmazione vera e
propria della CPU1. Al termine di questa fase i dati Zic e Zfc saranno pronti per essere
inseriti, uno dopo l’altro, nel registro di comparazione arcp.
Le prime istruzioni del blocco configurano l’auto-reload timer, dopo aver segnalato,
alzando il livello di tensione di PC3 (BOB_ON), che la scheda è in fase di
programmazione e non è possibile avviare un’attuazione.
L’ultima istruzione serve a porre ACK=0, ovvero a comunicare, secondo il protocollo
visto in B.3.2, la disponibilità alla ricezione di dati.
main ldi
wdog,11111111b
set
3,port_c
ldi
arrc,00000000b
ldi
armc,10000000b
ldi
ars0,00000000b
ldi
ars1,00000110b
res
5,port_b
Codice B-28: configurazione dell’auto-reload timer
L’armc carica nel contatore del dente attuale (Zatt) il valore 0 memorizzato nel registro
arrc.
Con il bit CPF (bit 1) dell’ars0 azzerato basterà in seguito abilitare gli interrupt tramite
il registro ior per rendere perfettamente funzionante il comparatore.
47
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Con il registro ars1 indichiamo all’ ST6 di utilizzare come clock il segnale S1 e di
incrementare
Zatt
di
uno
all’arrivo
di
un
fronte
di
salita.
BOB
New
Data
LD
BOB
ON
S0
ACK
S1
D7
D6
D5
D4
D0
Alim.
Terra
D1
D2
D3
Figura B-36 La CPU 1
Arrivati a questo punto, al contrario di quanto accadeva sulla interrupt board, viene
abbassato l’ACK per indicare al dSPACE che il microcontrollore è pronto a ricevere.
Questa differenza è dovuta al collegamento wired-AND che trasforma un ACK basso,
inviato da un ST6 appartenente ad una top board, in un segnale diretto alla DS1003
coerente con il protocollo di comunicazione.
All’abbassarsi del segnale LD (PB1), ancora una volta, tutti gli interrupt (tranne NMI)
vengono disabilitati. Quando anche il segnale STR (PC0) si porta a basso livello, il
dente di inizio carica, primo byte pronto per essere acquisito, viene memorizzato nel
puntatore Don. Il livello di PB5 viene quindi alzato, per segnalare l’avvenuta ricezione.
48
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
main1
ldi wdog,11111111b
jrs 1,port_b,main1
ldi ior,00000000b
main 2
ldi wdog,11111111b
jrs
0,port_c,main2
ld
a, port_a
set
5, port_b
ld
Don, a
Codice B-29: caricamento del dente di inizio carica
Subito dopo è il turno del dente di Zfc e del puntatore Doff.
main3
ldi wdog,11111111b
jrr 0,port_c,main3
res
main4
5, port_b
ldi wdog,11111111b
jrs
0,port_c,main4
ld
a, port_a
set 5, port_b
ld
Doff, a
Codice B-30: caricamento del dente di fine carica
Per ridurre al minimo i tempi morti è lo stesso blocco principale a caricare nel registro
di comparazione il dente Zic (Codice B-31).
main 5
ldi wdog,11111111b
ld
a, Don
ld
arcp, a
jrr 1,port_b,main5
res 5,port_b
ldi ior,00010000b
ldi progrON,11111111b
Codice B-31: caricamento nel comparatore del dente di inizio carica
Una volta attesa la fine della programmazione (LD=1) viene abbassato il livello di ACK
(il circuito è nuovamente pronto a ricevere); vengono poi autorizzate l’attivazione degli
interrupt e l’assegnazione del valore 255 al byte puntato da progrON. Infine vengono
nuovamente abilitati gli interrupt.
Al solito, è presente il set di istruzioni per l’attivazione degli interrupt:
49
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
.org
111111110000b
jp
tad_int
jp
art_int
jp
AB_int
jp
CS_int
.org
111111111100b
jp
nmi_int
jp
inizio
.end
Codice B-32: attivazione dgli interrupt
B.4.4 INTERRUPT: NMI
Questa subroutine viene eseguita sul fronte di discesa del segnale S0, ovvero in
corrispondenza del dente 0: se la programmazione è avvenuta si carica il contenuto
dell’arrc (zero) nel contatore dei denti e si abilita il clock e l’interrupt di comparazione.
Il risultato è l’azzeramento del dente attuale.
nmi_int
ld a,savea
jrs 0,progrON,nmi1
jp nmie
nmi1
ldi armc,11001000b
nmie
ld a,savea
reti
Codice B-33
B.4.5 INTERRUPT: ART
Questa subroutine viene eseguita due volte per ogni ciclo; la prima quando il dente
attuale coincide con quello di inizio carica, la seconda quando coincide con quello di
fine carica.
Il sottoprogramma distingue i due eventi tramite il segnale BOB_ON.
Se BOB_ON è alto, non essendo ancora iniziata la carica della bobina, si è sicuramente
verificata l’uguaglianza tra Zic e Zatt.
In questo caso la prima cosa da fare è abbassare il segnale BOB_ON (piedino PC3) per
caricare la bobina, poi occorre caricare nel registro di comparazione il dente di fine
carica (art2).
50
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
art_int ld saveb,a
jrr 3,port_c,art1
jp art2
art 1
set 3,port_c
ld a,Don
ld arcp,a
jp arte
art 2
res 3,port_c
ld a,Dff
ld arcp,a
arte
ldi ars0, 00000000b
ld a,saveb
reti
Codice B-34
Se il livello di BOB_ON è basso, invece, lo si alza e si carica nell’arcp il dente di inizio
carica (art1).
Per quanto detto in Appendice A, i valori dei denti di inizio e fine carica devono essere
ridotti di una unità. Di questo si occupa il modello Simulink.
B.5 Il SOFTWARE DELLE TOP BOARD: CPU0 (INIEZIONE)
B.5.1 LA DICHIARAZIONE DEI PUNTATORI
L’unica differenza rispetto alla routine precedente, per quanto concerne la dichiarazione
delle variabili, sta in Dj: tale
puntatore custodisce l’indirizzo nel quale verrà
memorizzato il dente Zj, punto di partenza del segnale monostabile ritardato di comando
dell’iniezione:
savea .def
084h
saveb .def
085h
savec .def
086h
progrON .def 087h
DJ .def
088h
Codice B-35: dichiarazione puntatori
51
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
INJ
New
Data
LD
INJ NOW
ACK
A0
A1
CE0
CE1
INJ ON
BOB
S0
S1
WR
D7
D6
D5
D4
D0
Alim.
Terra
D1
D2
D3
Figura B-37 CPU 0
B.5.2 L’INIZIALIZZAZIONE DELLA CPU0
Tutti i piedini della porta A vengono definiti come input (senza resistenza di pull-up)
per ricevere i byte corrispondenti ai denti Zj.
.org 000010000000b
ldi
wdog,11111111b
ldi
port_a,11111111b
ldi
pdir_a,00000000b
ldi
popt_a,00000000b
Codice B-36: configurazione porta A
Per quanto riguarda la porta B (Codice B-37):
-
Il pin PB0, acquisendo il segnale di comando dell’iniezione, è
configurato come un input con resistenza di pull-up.
-
Allo stesso modo è configurato il pin PB1, che riceve il segnale !LD;
52
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
-
I pin PB2 e PB3 (A0, A1), utilizzati per indicare in quale dei tre timer
dell’82C54 deve essere memorizzato il dato temporale proveniente dalla
DS4001, sono degli output push-pull.
-
Anche le linee PB4 e PB5, che devono disabilitare e abilitare i buffer B0
e B1, sono impostate alla stessa maniera.
-
Il piedino PB6, come accade per la CPU1 e per l’interrupt board,
acquisisce il segnale S1 necessario per il conteggio dei denti del volano
(input con resistenza di pull-up).
-
Il pin PB7, collegato con l’ingresso WR dell’82C54, permette la
memorizzazione dei parametri di temporizzazione dell’accensione e
dell’iniezione (T0j, Tj, T0c): è impostato come output con push-pull.
ldi
port_b,10111100b
ldi
pdir_b,10111100b
ldi
popt_b,10111100b
Codice B-37: configurazione porta B
I cinque piedini della porta C (Codice B-38) sono così impiegati:
-
Il pin PC0 (input con pull-up) per l’acquisizione del segnale New Data.
-
Il pin PC1 (output push-pull) per inviare il segnale di iniezione immediata allo
stadio di potenza tramite il segnale INJ_NOW (al momento non utilizzato).
-
Il piedino PC2 (output push-pull) per confermare al dSPACE l’arrivo dei dati
tramite il segnale ACK.
-
Il pin PC3 (output push-pull) per far partire il primo timer dell’82C54
(segnale INJ_ON).
-
Il piedino PC4 (input senza pull-up) per controllare se la bobina d’accensione
è in fase di carica (segnale BOB al momento non utilizzato).
Al solito, le istruzioni di inizializzazione sono seguite da quelle di disattivazione degli
interrupt (tranne NMI) per evitare attuazioni prive di significato, antecedenti la prima
programmazione.
53
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
ldi
port_c,00011110b
ldi
pdir_c,00001110b
ldi
popt_c,00001110b
ldi
ior,000000000000b
reti
jp
main
Codice B-38: configurazione porta C
B.5.3 IL BLOCCO MAIN
Le prime istruzioni del programma principale riguardano la gestione dei segnali di
comunicazione con il sistema dSPACE: anzitutto viene disabilitato il buffer B1, in
modo da “congelare” i dati memorizzati dall’ST6, rendendo impossibile un loro
aggiornamento mentre è in atto l’operazione di scrittura sul timer 82C54. Poi si azzera
l’ACK, che dichiara la disponibilità del circuito a ricevere dati, infine vengono annullati
anche INJ_ON e INJ_NOW, rispettivamente comando di iniezione e comando di
iniezione immediata.
main ldi wdog,000011111111b
set 5,port_b
res 2,port_c
res 3,port_c
res 1,port_c
call ini82C54
Codice B-39: routine main
Segue una chiamata alla routine Ini82C54, in cui il timer viene configurato in modo da
poter immagazzinare i dati (denti e tempi) necessari per l;a generazione del segnale di
comando dell’iniettore. In seguito viene inizializzato il comparatore, impostando il
dente di iniezione a 255 (registro arcp), in modo da evitare attuazioni intempestive in
atto di programmazione, e azzerando, contemporaneamente, il valore del dente attuale
agendo sull’opportuno registro (arrc). Le operazioni sugli altri registri sono strumentali
alle precedenti.
54
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
ldi arrc,000000000000b
ldi armc,000010000000b
ldi ars0,000000000000b
ldi ars1,000000000110b
ldi arcp,000011111111b
Codice B-40: routine main
Secondo il protocollo di comunicazione già descritto, la programmazione può
cominciare solo quando il segnale di !LD viene annullato dal sistema dSPACE. Appena
verificata la condizione vengono disabilitati tutti gli interrupt, fino alla conclusione
della programmazione. Si passa poi all’azione sui buffer: B1 rimane disabilitato, B0
viene invece abilitato.
main1 ldi wdog,000011111111b
jrs 1,port_b,main1
ldi ior,000000000000b
set
5,port_b
res 4,port_b
Codice B-41: routine main
No rimane quindi che attendere l’arrivo del segnale NEW_DATA=0, per segnalare che
il dato (Zj) è pronto per l’invio. A questo punto può essere effettuata la lettura della
porta a, e il dato (Zj) può essere immagazzinato nella variabile Dj. In seguito ACK deve
essere riportato a livello alto, per segnalare l’avvenuta ricezione del dato. Infine
quest’ultimo deve essere caricato nel comparatore, per rendere il sistema pronto ad una
sollecita attuazione.
main2 ldi wdog,000011111111b
jrs 0,port_c,main2
ld
a,port_a
ld
Dj,a
set 2,port_c
ld
arcp,a
Codice B-42: routine main
I dati successivi (T0j-, T0j+, Tj-, Tj+, T0c-, T0c-) devono essere caricati nei timer, dal
momento che sono proprio questi componenti a gestire i parametri temporali. La
comunicazione si svolge dunque ancora una volta rispettando il protocollo già visto:
55
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
-
si attende NEW_DATA=1 (sistema dSPACE non pronto all’invio del dato);
-
si pone ACK=0 (CEE pronto a ricevere);
-
si attende NEW_DATA=0 (sistema dSPACE pronto all’invio);
-
si seleziona il timer in cui deve essere memorizzato il dato;
-
si memorizza i dato sul timer tramite un impulso sul canale WR;
-
si pone nuovamente ACK=1 e si ricomincia il ciclo.
In questo modo i due byte (il meno significativo e il più significativo, nell’ordine)
relativi a T0j vengono memorizzati nel timer 0, quelli relativi a Tj nel timer 1, e infine
quelli di T0c nel timer 2.
Infine gli interrupt vengono abilitati tramite l’apposito registro (ior), viene posto a basso
livello il segnale INJ_ON, a indicare che l’attuazione non è in atto, la variabile progrON
viene invece portata a 255, a indicare l’avvenuta programmazione, e, una volta
avvenuto il passaggio ad alto livello del segnale !LD (fine programmazione), la routine
viene ricominciata, a partire da main 1.
56
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
main3 ldi wdog,000011111111b
jrr 0,port_c,main3
res 2,port_c
main4 ldi wdog,000011111111b
res 2,port_b
res 3,port_b
jrs
0,port_c,main4
res 7,port_b
set 7,port_b
set 2,port_c
[…]
main11 ldi wdog,000011111111b
jrr
0,port_c,main11
res
2,port_c
ldi
ior,000010000000b
res
3,port_c
ldi
progrON,000011111111b
main12 ldi
wdog,000011111111b
jrr
1,port_b,main12
jp
main1
Codice B-43: routine main
In coda, al solito, seguono i vettori di interruzione, identici a quelli visti per la CPU1
(Codice B-32).
B.5.4 SUBROUTINE 82C54
Il sottoprogramma, alzando i segnali A0 e A1, attiva la modalità di programmazione
dell’82C54, facendo sì che il byte giunto al contatore attraverso gli ingressi D0-D7
venga interpretato dall’integrato come un insieme di quattro informazioni diverse (vedi
Tabella B-4).
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
SC1
SC0
RW1
RW0
M2
M1
M0
BCD
Tabella B-4: byte per la programmazione del TIMER 82C54
I bit 7 e 6 indicano quale dei tre timer si vuole configurare. I bit 5 e 4 impostati come 1
e 1 informano il contatore che i tempi verranno memorizzati partendo dal byte meno
significativo. I successivi tre (bit 3, 2, 1) ne indicano la modalità di funzionamento
57
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
(nella tabella sono presenti solo i modi effettivamente utilizzati). L’ultimo bit (bit 0) va
sempre tenuto nullo.
SC1
SC0
Contatore
selezionato
0
0
1
0
1
2
1
0
3
Tabella B-5- bit7 e bit 6 per la selezione del contatore
RW1
RW0
Byte letto o scritto
0
1
solo il meno significativo
1
0
solo il più significativo
1
1
prima il meno significativo
poi il più significativo
Tabella B-6 - bit 5 e bit 4 per la scelta della modalità di programmazione
M2
M1
M0
Modalità
0
0
1
1
1
0
1
5
Tabella B-7 – bit 3, bit 2, bit 1 per la modalità di funzionamento di un singolo contatore
Tornando alla subroutine, tenendo alti CE0 e CE1 vengono disabilitati i buffer B0 e B1.
Così facendo, l’82C54 e la CPU0 si isolano da qualsiasi altro integrato, possono quindi
comunicare attraverso la porta A temporaneamente settata come output. Per consentire
la scrittura dei tre byte (uno per timer) di inizializzazione del contatore WR viene tenuto
alto.
Ini82C54 ldi wdog,000011111111b
ld
a, port_b
com a
andi a,01000011b
com a
ld port_b, a
Codice B-44
Il byte per programmare il Timer 0 in modalità 1 vale:
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
SC1
SC0
RW1
RW0
M2
M1
M0
BCD
58
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
0
0
1
1
0
0
1
0
Tabella B-8: Timer 0
Il byte per programmare il Timer 1 in modalità 1 vale:
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
SC1
SC0
RW1
RW0
M2
M1
M0
BCD
0
1
1
1
0
0
1
0
Tabella B-9: Timer 1
Il byte per programmare il Timer 2 in modalità 5 vale:
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
SC1
SC0
RW1
RW0
M2
M1
M0
BCD
1
0
1
1
1
0
1
0
Tabella B-10: Timer 2
Le istruzioni necessarie per memorizzare queste impostazioni sono riportate in Codice
B-45, nella successione timer 2, timer 0, timer 1: ciascuna di esse è seguita dal comando
necessario per realizzare l’impulso di WR, che autorizza il timer alla memorizzazione.
ldi pdir_a,000011111111b
ldi popt_a,000011111111b
ldi port_a,000010111010b
res 7, port_b
set 7,port_b
ldi port_a,000000110010b
res 7, port_b
set 7,port_b
ldi port_a,000001110010b
res 7, port_b
set 7,port_b
Codice B-45: impostazione dei timer
Al termine della routine viene ripristinata l’impostazione della porta come input con
resistenza di pull-up, viene riabilitato il buffer B0 e viene ripristinato il valore della
variabile a, impiegata come appoggio per la programmazione dei timer.
59
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
ldi popt_a,000000000000b
ldi pdir_a,000000000000b
ldi port_a,000000000000b
res 4, port_b
ldi, wdog,000011111111b
ld
a,saveb
ret
Codice B-46: conclusione di 82C54
B.5.5 SUBROUTINE DI INTERRUPT: NMI
Come per gli altri microcontrollori, in occasione del NMI interrupt, anche in questo
caso si deve azzerare il contatore dei denti, caricando il contenuto del registro arrc. In
questo caso il passo successivo consiste nel memorizzare il dente di inizio iniezione nel
registro del comparatore.
nmi_int ld savea,a
jrs 0,progrON,nmi1
nmi1
nmie
ldi armc,11001000b
ld
a,Dj
ld
arcp,a
ld
a,savea
reti
Codice B-47
B.5.6 SUBROUTINE DI INTERRUPT: AUTO RELOAD TIMER
Questo blocco di codice viene eseguito quando il dente attuale coincide con Zj: in
questo caso la prima operazione da svolgere consiste nell’invio di un impulso sul canale
INJ_ON, collegato con il timer 0, necessario per far partire il conteggio del tempo T0j. Il
dente di inizio iniezione viene poi decrementato di un’unità, ed il flag che segnala
l’avvenuto passaggio del dente di inizio iniezione viene azzerato.
60
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
art_int ld savec,a
set 3,port_c
res 3,port_c
ld
a,arcp
subi a,000000000001b
ld
arcp,a
ldi ars0,000000000000b
ld
a,savec
reti
Codice B-48: generazione dell’impulso necessario per far partire il conteggio del Timer 0 (Toj)
B.6 TOP BOARD: VERSIONE PER INIEZIONI MULTIPLE
Nel caso si vogliano effettuare più iniezioni all’interno dello stesso ciclo motore (ad
esempio nel caso dei motori Diesel multijet), dovranno essere inviati alla top board
molti più dati temporali. Si è scelto infatti, per non stravolgere la configurazione
hardware utilizzata nel caso delle iniezioni singole, di distanziare la i-esima iniettata
dalla precedente lasciando trascorrere un lasso di tempo Toji.
Il comando logico da inviare allo stadio di potenza dell’iniezione, nel caso di una tripla
iniettata, è rappresentato in Figura B-38.
V
5V
0V
T oj
Tj
Toj2
Tj2
Toj3
Tj3
Figura B-38: triplice iniettata
B.6.1 PROTOCOLLO DI TRASMISSIONE
Esclusa la prima iniettata, tutti i tempi riguardanti le altre, vengono “parcheggiati” nella
RAM della CPU0 in attesa di essere inviati al timer al momento opportuno.
Le prime cinque fasi di trasmissione (dati Zic, Zj, Zfc, T0j-, T0j+, Tj-, Tj+, T0c-, T0c) sono
identiche alla precedenti; si consideri dunque la successiva:
61
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
ST6
CPU1
B1
Toji+
B0
Toji-
ST6
CPU0
TIMER
Figura B-39: sesta trasmissione (prima parte)
Sesta trasmissione - prima parte (Figura B-39): Toji- (byte meno significativo dell’i-
esimo intervallo di tempo tra un’iniettata e l’altra) viene memorizzato nella CPU0
mentre Toji+ (byte più significativo) rimane in attesa all’ingresso di B1 (disabilitato).
In questa fase: !CE0=0 e !CE1=1.
ST6
CPU1
B1
B0
Toji-
Toji+
ST6
CPU0
TIMER
Figura B-40: sesta trasmissione (seconda parte)
Sesta trasmissione - seconda parte (Figura B-39): Toji+ viene memorizzato nella CPU0
mentre Toji- è “fermato” nel buffer B0.
In questa fase: !CE0=1 e !CE1=0.
62
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
ST6
CPU1
B1
Tji-
ST6
CPU0
B0
Tji+
TIMER
Figura B-41: settima trasmissione (prima parte)
Settima trasmissione - prima parte (Figura B-41): Tji- arriva al microcontrollore
(CPU0) passando per B1, lasciato abilitato dalla trasmissione precedente, mentre Tji+ è
congelato in attesa di essere letto.
In questa fase: !CE0=1 e !CE1=0.
Settima trasmissione - seconda parte (Figura B-42): il buffer B0 viene attivato e, di
conseguenza, Tji+ immagazzinato dalla CPU0; Tji+ già letto, è fermato nel buffer B0.
In questa fase: !CE0=0 e !CE1=1.
ST6
CPU1
B1
Tji-
B0
Tji+
ST6
CPU0
TIMER
Figura B-42: settima trasmissione (seconda parte)
La sesta e la settima trasmissione vengono ripetute un numero di volte pari alle iniezioni
aggiuntive che si vogliono ottenere.
63
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
B.6.2 MODIFICHE HARDWARE
Per poter realizzare segnali adatti a comandare iniettate multiple si rendono necessarie
modifiche hardware, oltre che software. In questo caso, infatti, il segnale INJ ON oltre
che raggiungere l’ingresso GATE0 del primo timer (Figura B-43) è anche uno dei due
input di un EXNOR logico.
Y
Figura B-43: Timer e CPU0
L’altro input è l’OUT1 del secondo timer. Questa complicazione è dovuta alla necessità
di rendere noto alla CPU0 l’istante in cui si conclude una iniettata.
La Figura B-44 aiuta a capire quali legami intercorrono tra i seguenti segnali: INJ ON,
OUT0, OUT1, Y.
64
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Figura B-44: confronto tra INJ ON, OUT0, OUT1, Y
INJ ON
OUT 1
Y
0
0
1
0
1
0
1
0
0
1
1
1
Figura B-45: Tabella di verità dell’EXNOR
Ipotizziamo di partire dalla seguente configurazione:
-
INJ_ON=0, il microcontrollore deve ancora inviare il segnale di inizio
conteggio al timer0
-
OUT0=1, il timer0 settato in modalità uno è inattivo,
-
OUT1=1, il timer1 settato in modalità uno è inattivo.
L’uscita Y dello EXNOR varrà (Figura B-45) di conseguenza 0. Subito dopo l’istante in
cui l’ST6 alza il segnale INJ_ON la situazione è la seguente:
-
INJ_ON=1
-
OUT0=0, il primo timer (mode 1) ha iniziato il conteggio,
-
OUT1=1, il secondo timer è fermo,
-
Y=1.
Completato il conteggio del tempo Toj, il segnale OUT0 risale mentre si abbassa OUT1,
avremo:
-
INJ_ON=1;
-
OUT0=1; il conteggio del primo timer è terminato,
-
OUT1=0; è iniziato il conteggio del tempo Tj
65
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
-
Y=0.
Prima che il secondo timer termini di contare il software dell’ST6 accortosi del fronte di
discesa del segnale Y abbassa INJ_ON ottenendo il seguente risultato:
-
INJ_ON=0;
-
OUT0=1; il conteggio del primo timer è terminato,
-
OUT1=0; il conteggio del tempo Tj continua,
-
Y=1.
Trascorso il tempo Tj, il segnale OUT1 torna alto:
-
INJ_ON=0;
-
OUT0=1; il conteggio del primo timer è terminato,
-
OUT1=1; il conteggio del tempo Tj è terminato,
-
Y=0.
Il nuovo fronte di discesa all’ingresso del microcontrollore indica esattamente quello
che volevamo, cioè l’istante in cui si è conclusa l’iniettata. Il software sfrutta il segnale
INJ_ON per distinguere tra i due fronti di salita di Y. La prima volta INJ ON è allo stato
alto, la seconda allo stato basso.
Riassumendo: quando Y ed INJ ON sono uguali a zero l’iniettata è appena finita. I
quattro segnali sono tornati ai valori iniziali per cui il CEE è pronto per un’eventuale
seconda iniezione. Si crea in questo modo un circolo chiuso tra CPU0 e 82C54 che si
interrompe solo alla conclusione dell’ultima iniettata.
Nel descrivere il controllo dell’iniezione multipla è stato volutamente trascurato il
segnale INJ_NOW che si può considerare sempre nullo. In questo modo all’uscita
dell’OR logico si avrà un segnale identico all’OUT0.
B.6.3 SOFTWARE PER MULTI-INIEZIONI: CPU0
Visto che la struttura dei programmi rimane simile a quella già descritta, si cercherà di
evidenziare le differenze rispetto alle routine viste fino ad ora. Ovviamente le differenze
sono limitate al contenuto della programmazione della CPU0, che gestisce i segnali di
iniezione.
B.6.3.1 LA DICHIARAZIONE DEI PUNTATORI
Rispetto alla CPU0 “normale” sono necessari due puntatori in più: oldxp e xp. La loro
funzione verrà specificata più avanti.
66
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
savea .def
084h
saveb .def
085h
savec .def
086h
progrON .def
087h
DJ .def
088h
oldxp .def 089h
xp .def
089h
Codice B-49: dichiarazione puntatori
Si noti che xp e oldxp puntano alla stessa locazione di memoria.
B.6.3.2 INIZIALIZZAZIONE DEL MICROCONTROLLORE
La porta A è utilizzata per acquisire i byte corrispondenti al dente Zj e ai parametri di
temporizzazione successivi alla prima iniettata (Toj2,Tj2 etc.)
Tutti i piedini della porta A vengono quindi definiti come input.
ldi
port_a,11111111b
ldi
pdir_a,00000000b
ldi
popt_a,00000000b
Codice B-50: configurazione porta A
I piedini della porta B sono così impiegati :
ldi
port_b,10111100b
ldi
pdir_b,10111100b
ldi
popt_b,10111100b
Codice B-51: configurazione porta B
-
Il pin PB0, acquisendo il segnale di comando dell’accensione, è
configurato come interrupt;
-
Il pin PB1 si occupa del segnale !LD; è quindi un input con pull-up;
-
I pin PB2 e PB3 (A0, A1), utilizzati per indicare in quale dei tre timer
dell’82C54 deve essere memorizzato il dato temporale proveniente dalla
DS4001, sono degli output push-pull;
-
I piedini PB4 e PB5 disabilitano e abilitano i buffer B0 e B1; sono quindi
degli output push-pull;
-
Il piedino PB6, come accade per la CPU1 e per l’interrupt board,
acquisisce il segnale S1 necessario per il conteggio dei denti del volano;
67
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
-
Il pin PB7, collegato con l’ingresso WR dell’82C54, permette la
memorizzazione dei parametri di temporizzazione dell’accensione e
dell’iniezione (Toj, Tj, Toc). Esso è quindi un output con push-pull;
L’unica differenza rispetto al caso di una sola iniezione è l’utilizzo del pin PB0 come
interrupt. L’algoritmo ha infatti bisogno di sapere quando un’iniettata si conclude per
riprogrammare i primi due contatori (Timer0 e Timer1) caratteristici di quella
successiva.
I cinque piedini della porta C sono così impiegati :
ldi
port_c,00011110b
ldi
pdir_c,00011110b
ldi
popt_c,00011110b
Codice B-52: configurazione porta C
-
Il pin PC0 (input con pull-up) per l’acquisizione del segnale New Data;
-
Il pin PC1 (output push-pull) per inviare il segnale di iniezione immediata allo
stadio di potenza tramite il segnale INJ_NOW (al momento non utilizzato);
-
Il piedino PC2 (output push-pull) per confermare al dSPACE l’arrivo dei dati
tramite il segnale ACK;
-
Il pin PC3 (output push-pull) per far partire il primo timer dell’82C54
(segnale INJ_ON).
Il piedino PC4 per controllare se la bobina d’accensione è in fase di carica (segnale
BOB al momento non utilizzato).
B.6.3.3 IL BLOCCO MAIN
Nel caso della multi-iniezione la fase di caricamento dati è molto simile a quella della
interrupt board. In questo caso non è noto a priori il numero di iniettate che la scheda
deve comandare, mentre nel caso della scheda di interruzione il software non conosce il
numero dei denti di interrupt. Superata la programmazione della prima iniettata, identica
in tutto e per tutto al caso mono-iniezione, i restanti dati (T0j2,Tj2 etc.) vengono disposti
nella RAM dell’ST6 a partire dall’indirizzo puntato da xp:
ld a, port_a
ld (xp),a
inc xp
Codice B-53
Il microcontrollore continua a memorizzare dati finche il segnale !LD non si alza. A
quel punto vengono attivati gli interrupt e la programmazione della scheda può
68
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
considerarsi conclusa. Questa volta il bit 6 (LES) ha importanza perché esiste un
interrupt che coinvolge la porta di comunicazione B. Un suo valore nullo indica la scelta
di utilizzare il fronte di discesa del segnale INJ per generare il segnale di interruzione.
ldi
ior,00001000b
ldi
progrON,255
Codice B-54: abilitazione interrupt
B.6.3.4 SUBROUTINE DI INTERRUPT: AB_int
Per quanto riguarda il NMI e l’auto-reload timer interrupt non ci sono differenze con il
caso precedente. La novità invece è rappresentata dal terzo interrupt generato dal
segnale INJ (PB0).
Quando si presenta un fronte di discesa nel segnale INJ scatta la corrispondente
subroutine chiamata AB_int.
Lo scopo della subroutine AB_int è quello di riprogrammare il timer 82C54 mentre sta
ancora contando il tempo Tj relativo all’iniettata precedente.
Il sottoprogramma verifica immediatamente se il segnale proveniente dal pin PC3
(INJ_ON) è alto o basso. Nel primo caso la CPU0 può effettuare la nuova
programmazione essendo sicura che i dati Toji e Tji memorizzati dal timer nel ciclo
precedente sono già stati utilizzati. Anche se il conteggio del timer1 è ancora in corso è
possibile sin da ora programmarlo con il dato successivo senza provocare
malfunzionamenti o conteggi errati. Se INJ_ON è basso vuol dire che si è appena
conclusa l’iniettata precedente, per cui deve immediatamente partire un nuovo
conteggio del tempo Toj, generando un fronte di salita nel segnale INJ_ON (PC1).
Data l’importanza della subroutine se ne mostra l’intero contenuto.
69
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
ld savec, a
Inizio subroutine ab_int
jrs 3,port_c,int1
Se PC3=1 (inizio iniezione) riprogrammare l’82C54,
se PC3=0 inviare un fronte di salita su INJ_ON
int0 set 3,port_c
Generazione fronte di salita tramite INJ_ON
res 3,port_c
per far partire il conteggio di Toj
jp int2
int1 res 3,port_c
INJ_ON viene azzerato
res 7,port_b
Impulso 82C54 WR per memorizzare Toj-
set 7,port_b
ld port_a,(xp)
Toj+ in uscita
inc xp
x=x+1
res 7,port_b
Impulso 82C54 WR per memorizzare Toj+
set 7,port_b
res 2,port_b
A0=1 A1=0 - programmiamo il timer 1 (Tj)
ld port_a,(xp)
Tj- in uscita
inc xp
x=x+1
res 7,port_b
Impulso 82C54 WR per memorizzare Tj-
set 7,port_b
ld port_a,(xp)
Tj+ in uscita
res 7,port_b
Impulso 82C54 WR per memorizzare Tj+
set 7,port_b
inc xp
x=x+1
int2 ld a ,savec
reti
Fine subroutine ab_int
Codice B-55: subroutine ab_int
B.6.4 AGGIORNAMENTI: SOFTWARE DELLA CPU1
Come si è mostrato in precedenza la comunicazione e l'attuazione sono due compiti che
vengono eseguiti dalle CPU in maniera asincrona, dunque è importante prevedere gli
istanti temporali e angolari in cui avvengono. L'idea è quella di poter aggiornare i
parametri di attuazione al termine della programmazione per avere un controllo motore
che sia il più rapido posssibile.
70
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Attendi fine programmazione mantenendo alto
ACK;
attendi
main6 ldi wdog,255 ;
ld a,Don;
e intanto metti Don
ld arcp,a ;
nel registro compare
jrr 1,port_b,main6 ;
finchè LD* = 0
res 5,port_b ;
metti basso ACK
set 2,port_b ;
spegni LED
ldi ior,00010000b ;
abilita interrupt;
Valutare se effettivamente la programmazioine
avviene a bobina spenta
oppure se può avvenire anche a bobina accesa
assicurati che BOB-ON = 1
set 3, port_c ;
ldi progrON,255 ;
segnala programma presente.
jp main1
Codice B-56: codice CPU1 versione CPU1_01
Al termine della lettura dei dati da parte del microcontrollore, viene caricato nel
comparatore il valore Zic, e, al termine della programmazione (segnale di !LD
disattivato dal dSPACE), viene abbassato il segnale !BOB ON. Questo rende
aggiornato il contenuto del registro di comparazione, ma richiede, per funzionare
correttamente, che il segnale di carica bobina sia disattivato (stato alto); infatti, se la
programmazione ha inizio a carica bobina già avviata, viene caricato comunque nel
registro il dente di inizio carica, anzichè quello di fine carica. Di conseguenza si ha che
la carica bobina ha termine al ciclo sucessivo (al raggiungimento del successivo Zic),
dato che, se la carica è già in corso, presubimilmente l'aggiornamento del comparatore
avviene ad un dente sucessivo anche al valore Zic aggiornato. Per ovviare a questo
problema (danneggiamento della bobina), al termine della programmazione viene
comunque disattivata la carica bobina.
71
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Figura B-46: aggiornamento erroneo
Questa soluzione è scorretta in quanto induce un misfire non voluto ed inoltre può
potenzialmente portare all'accensione delle candele in posizioni dell'albero motore non
controllate.
Nella seconda versione del software "CPU 1 02", si è profondamente cambiata la
tecnica di aggiornamento del dato contenuto nel comparatore. Tranne che al termine
della prima programmazione, la scrittura del dato Zic o Zfc nell'arcp è lasciata alla
procedura che esegue l'attuazione, cioè è contenuta in quella parte di codice (ARTINT), che viene richiamata dal comparatore quando si verifica l'ugualianza del suo
contenuto con quello presente nell'arcp.
Si capisce che, così impostato, l'aggiornamento, per avvenire, richiede sempre una
attuazione precedente, e non è detto che ciò si verifichi; infatti per indurre misfire viene
passato un valore di dente di inizio carica tale da non essere mai raggiunto. Inoltre al
termine della programmazione il dato contenuto nell'armc non è quello calcolato
nell'ultima esecuzione del modello, ma è quello calcolato nel ciclo precedente e poi
caricato nel comparatore dall'ultima esecuzione di carica bobina.
72
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Figura B-47: aggiornamento non corretto (II soluzione)
La versione implementata nella sua configurazione definitiva CPU 1 03 è in grado di
eseguire
l'aggiornamento
immediato
del
valore
contenuto
nel
comparatore
indipendentemente dallo stato di carica della bobina; viene infatti rilevato lo stato del
segnale !BOB ON al termine della lettura dei dati e di conseguenza viene caricato nel
comparatore quello congruente con lo stato del segnale stesso. Se la carica bobina è in
corso viene caricato il dente di fine carica, viceversa, per una carica non ancora iniziata,
il dente di inizio carica.
Si fa notare come l'aggiornamento del dato nel registro di comparazione non avvenga al
termine della programmazione (disattivazione del segnale di !LD), ma al termine della
comunicazione dei dati alla CPU 1; in questo modo non è necessario attendere la
conclusione della comunicazione, visto che i dati trasmessi nei sucessivi passi di
programmazione interessano soltanto la CPU 0.
73
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
jrr 3,port_c,main5;
controlla lo stato del segnale carica bobina
jp main6
main5 ld a,Doff ;
ld arcp,a ;
ldi ior,00010000b ;
se è attiva
carica il dente di fine carica nel registro del
comparatore (arcp)
abilita interrupt
jp main7
main6 ld a,Don ;
e intanto metti Don
ld arcp,a ;
nel registro compare
ldi ior,00010000b ;
abilita interrupt
main7 ldi wdog,255 ;
attendi
jrr 1,port_b,main7 ;
finche LD* = 0
res 5,port_b ;
metti basso ACK
set 2,port_b ;
spegni LED
ldi progrON,255 ;
segnala programma presente.
jp main1
Codice B-57: codice CPU1 versione CPU1_01
Figura B-48: aggiornamento corretto
B.6.5 AGGIORNAMENTI: SOFTWARE DELLA CPU0
L'aggiornamento del dato Zj nel arcp avviene al termine di ogni programmazione, così
pure la scrittura nel registro dei timer di tutti e tre i parametri temporali relativi alle due
attuazioni. Al verificarsi dell'ugualianza del dato contenuto nel comparatore con quello
74
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
presente nel registro viene richiamata una sottoprocedura (ART-INT) che comanda
l'attivazione di un primo timer. Nella procedura ART-INT è contenuta anche una linea
di codice che decrementa di un'unità il valore contenuto nell'armc; questo perchè
altrimenti la procedura verrebbe richiamata continuamente fino al raggiungimento del
dente sucessivo. Nel caso, però, non avvenisse una programmazione prima del
raggiungimento del dente Zj-1 contenuto nel arcp, si avrebbe ad ogni ciclo un'iniezione
anticipata di un dente rispetto al ciclo precedente. Per ovviare a questa ipotetica
condizione di criticità, ad ogni azzeramento del comparatore, comandato da S0, viene
ricaricato nel comparatore il valore corretto Zj .
B.7 LA SCHEDA DI ALIMENTAZIONE
Questa scheda trasforma la tensione generata dalla batteria dell’automobile nella
tensione di alimentazione adatta agli integrati presenti sulle varie schede del CEE ( 5
Volt costanti). Tale compito è svolto da uno stabilizzatore integrato a tre terminali con
uscita fissa positiva siglato LM7805. Esso è dotato di un circuito di protezione contro i
sovraccarichi di corrente (il funzionamento corretto è garantito per correnti minori di
1.5 Ampere) ed è installato su di una superficie metallica alettata per dissipare il calore
sviluppato durante il funzionamento.
Sul lato sinistro della scheda (vedi Figura B-49) è collocato il connettore che la collega
all’accumulatore e l’interruttore generale per l’accensione e lo spegnimento del CEE.
Subito dopo troviamo un fusibile da 5 Ampere, necessario per proteggere il sistema da
eventuali picchi di corrente durante i transitori (accensione e spegnimento). A valle del
fusibile è disposto un diodo P600M, con l’obiettivo di evitare che l’LM7805 si danneggi
se dovesse verificarsi un corto circuito in ingresso (di fatto il diodo impedisce che i
condensatori a valle dello stabilizzatore si scarichino attraverso di esso).
Figura B-49: scheda di alimentazione
75
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Proseguendo, un induttore
(L1) e tre condensatori (due plastici da 470 pF e un
elettrolitico da 4700 pF) determinano un’azione filtrante del tipo “passa-basso”, in
grado di isolare l’ingresso dell’ LM7805 da disturbi generatisi a monte della scheda (ad
esempio rumore provocato da altri carichi collegati alla batteria). Un ulteriore filtro
capacitivo (due condensatori in parallelo), posto a valle dell’uscite dell’integrato,
garantisce un miglioramento della risposta dello stabilizzatore alle brusche variazioni
della corrente nel carico (il resto del CEE).
Occorre osservare che i condensatori elettrolitici hanno una elevata componente
induttiva, capace di compromettere l’azione filtrante: si aggiungono perciò, in parallelo,
uno o più condensatori plastici.
Infine, le due resistenze R1 e R2 sono utilizzate per limitare il valore di corrente che
attraversa i due led LD1 e LD2.
B.8 LA SCHEDA DI COMUNICAZIONE
E’ impensabile credere che i segnali a bassa potenza provenienti dalla DS4001 possano
raggiungere tutte le top board e l’interrupt board senza richiedere un’amplificazione. Per
questo motivo è stata realizzata una scheda, quella di comunicazione, dotata di tre
buffer MM74HC541 in grado di fornire correnti d’uscita più elevate di quelle che
caratterizzano le normali porte logiche. Queste operazioni avvengono senza alterare
l’informazione logica del segnale in ingresso. I tre buffer, al contrario di quelli presenti
sulla top board, hanno i piedini !G1 e !G2 cortocircuitati a terra. In questo modo,
essendo i buffer sempre abilitati, il passaggio dei segnali avviene a flusso continuo
senza controllo dall’esterno.
Non essendo possibile inviare a partire dal dSPACE un segnale di load diretto ad ogni
scheda si è preferito ricorrere ad un demultiplexer siglato MM74HC154. Quest’ultimo
invia lo stato di ingresso (nel nostro caso il segnale load collegato al piedino !G1) verso
una delle diverse uscite (il load specifico di una scheda), in funzione della combinazione
di opportuni selettori interni al chip, le cui posizioni sono programmabili tramite una
parola di 4-bit. A questa parola, proveniente dal dSPACE viene dato il nome di load
address e corrisponde al numero della scheda con la quale si vuole comunicare.
Occorre ricordare infine che per la scheda di comunicazione passa anche il segnale di
reset per far partire nuovamente da zero i programmi immagazzinati dai
microcontrollori quando lo riteniamo più opportuno (normalmente lo si utilizza solo in
fase di inizializzazione).
76
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
C
IL SOFTWARE DI COMUNICAZIONE TRA dSPACE E
CEE
C.1 S-FUNCTION reset_22_10.c
// File creato il 22/10/2001
// Questa S-Function ha lo scopo di far partire (inizializzare) tutti i
programmi presenti sugli ST6 tramite un reset
#define S_FUNCTION_LEVEL 2
/* nome della S-Function utilizzata nel modello (deve corrispondere al
nome del file) */
#define S_FUNCTION_NAME reset_22_10
#include <simstruc.h>
#include <math.h>
#ifndef MATLAB_MEX_FILE
#include <math.h>
#include "ds4001.h"
#include "ds1003.h"
#include "tic1003.h"
//PHS-BUS address (0xC0)+ offset (0x80500000)
#define DS4001_1_BASE
0x805000C0
#endif
//______________________Parametri letti dalla maschera_____________
#define Ts(S)
ssGetSFcnParam(S,0)
#define NPARAMS 1 /* numero di parametri letti dalla maschera*/
//______________________Puntatore agli ingressi_______________
#define U(element)
(*uPtrs[element])
static void mdlInitializeSizes(SimStruct *S)
{
/* Vado a leggere NPARAM-Number of expected parameters */
ssSetNumSFcnParams(S, 1);
if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S))
{
/* Return if number of expected != number of actual parameters */
return;
}
ssSetNumContStates(S, 0);
ssSetNumDiscStates(S, 0);
/*_____________ N° di ingressi == 0 _________*/
if (!ssSetNumInputPorts(S,0)) return;
/*____________________Dimensione degli ingressi ______*/
ssSetInputPortDirectFeedThrough(S, 0, 0);*/
/*____________ Dimensionamento delle uscite __________*/
if (!ssSetNumOutputPorts(S, 0)) return;
/*_______________Tempo di campionamento ________________*/
c'è un solo tempo di campionamento i vettori Work sono dei vettori
che consentono di immagazzinare dati Reali (RWork), interi
(IWork), puntatori (PWork) mantenendoli GLOBALI; */
ssSetNumSampleTimes(S, 1);
ssSetNumRWork(S, 0);
ssSetNumPWork(S, 0);
ssSetNumModes(S, 0);
1
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
ssSetNumNonsampledZCs(S, 0);
ssSetOptions(S, 0);
}
static void mdlInitializeSampleTimes(SimStruct *S)
{
/* leggo il tempo di camp. dalla maschera del mio blocco */
ssSetSampleTime(S, 0, mxGetPr(Ts(S))[0]);
/*setto offset a zero*/
ssSetOffsetTime(S, 0, 0.0);
}
/* Change to #undef to remove function */
#define MDL_INITIALIZE_CONDITIONS
/* setto le condizioni iniziali con le quali inizia la simulazione*/
#if defined(MDL_INITIALIZE_CONDITIONS)
static void mdlInitializeConditions(SimStruct *S)
{
//istruzioni compilate solo per l'esecuzione in tempo reale
#ifndef MATLAB_MEX_FILE
ds4001_init(DS4001_1_BASE); /*inizializzazione della DS4001*/
/* setto i 32 pin della DS4001 nel seguente modo:
modalità: NON_STROBE (l'unica disponibile in OUTPUT)
funzione: OUTPUT (valori in uscita) PER I PRIMI 3 GRUPPI DA 8 BIT.
funzione: INPUT PER IL QUARTO GRUPPO(preposto alla lettura
dell'ACK) */
ds4001_pio_init(DS4001_1_BASE,DS4001_OUT_0 | DS4001_OUT_1 |
DS4001_OUT_2 | DS4001_IN_3,DS4001_NON_STRB_0 | DS4001_NON_STRB_1
| DS4001_NON_STRB_2 | DS4001_NON_STRB_3);
#endif
}
#endif /* MDL_INITIALIZE_CONDITIONS */
#define MDL_START /* Change to #undef to remove function */
//Funzione di avvio
#if defined(MDL_START)
static void mdlStart(SimStruct *S)
{
}
#endif
/*MDL_START*/
static void mdlOutputs(SimStruct *S, int_T tid)
{
#ifndef MATLAB_MEX_FILE
// tengo alto il segnale STR (#21)
ds4001_bit_out(DS4001_1_BASE, 0x00200000,0x00200000);
// tengo alto il LOAD ENABLE (#20)
ds4001_bit_out(DS4001_1_BASE, 0x00100000,0x00100000); //
/* Porto a 5V la tensione sul pin (#22) – in questo modo gli ST6
avviano i propri programmi interni.*/
ds4001_bit_out(DS4001_1_BASE, 0x00400000,0x00400000);
#endif
}
#define MDL_UPDATE /* Change to #undef to remove function */
//legge gli ingressi del modello a ogni T-sample
#if defined(MDL_UPDATE)
static void mdlUpdate(SimStruct *S, int_T tid)
{
}
#endif /* MDL_UPDATE */
#define MDL_DERIVATIVES /* Change to #undef to remove function */
2
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
#if defined(MDL_DERIVATIVES)
static void mdlDerivatives(SimStruct *S)
{
}
#endif /* MDL_DERIVATIVES */
static void mdlTerminate(SimStruct *S)
{
}
#ifdef MATLAB_MEX_FILE //Is this file being compiled as a MEX-file?
#include "simulink.c"
/* MEX-file interface mechanism */
#else
#include "cg_sfun.h"
// Code generation registration function
#endif
C.2 Programma IRQ_05.asm
; Realizzato il 19/10/01
; Variabili del microcontrollore ST6
a
x
y
v
w
port_a
port_b
port_c
pdir_a
pdir_b
pdir_c
popt_a
popt_b
popt_c
ior
dwr
addr
adcr
pcs
tcs
tscr
armc
ars0
ars1
wdog
arrc
arcp
drbr
.title "IRQ_05"
.def
0ffh ; accumulatore (par. 3.2)
.def
080h ; registro x
.def
081h ; registro y
.def
082h ; registro v (non utilizzato)
.def
083h ; registro w (non utilizzato)
.def
0c0h ; porta a (par 3.2.1)
.def
0c1h ; porta b
.def
0c2h ; porta c
.def
0c4h ; registro di direzione porta a (par. 3.2.2)
.def
0c5h ; registro di direzione porta b
.def
0c6h ; registro di direzione porta c
.def
0cch ; registro delle opzioni della porta a (par. 4.2.3)
.def
0cdh ; registro delle opzioni della porta b
.def
0ceh ; registro delle opzioni della porta c
.def
0c8h ; registro degli interrupt (par. 3.2.4)
.def
0c9h ; registro data rom window (non utilizzato)
.def
0d0h ; dato convertitore A/D (non utilizzato)
.def
0d1h ; registro convertitore A/D (vedi datasheet dell’ST6)
.def
0d2h ; registro del timer (non utilizzato)
.def
0d3h ; contatore del timer (non utilizzato)
.def
0d4h ; registro di controllo del timer(vedi datasheet dell’ST6)
.def
0d5h ; registro di controllo dell’AR timer (par. 4.2.7)
.def
0d6h ; registro 1 di stato dell’AR timer (par. 4.2.8)
.def
0d7h ; registro 2 di stato dell’AR timer (par. 4.2.8)
.def
0d8h ; registro del watchdog (par. 3.2)
.def
0d9h ; registro di ricaricamento dell’AR timer (par. 4.2.5)
.def
0dah ; registro di comparazione dell’AR timer (par. 4.2.6)
.def
0e8h ; registro del banco dei dati Ram/EEprom (par. 4.2.9)
; VARIABILI DEL PROGRAMMA
savea
.def
saveb
savec
start
.def
.def
.def
084h ; savea, saveb, savec memorizzano il contenuto
dell’accumulatore durante l’esecuzione delle
subroutine
085h
086h
087h ; puntatore alla prima cella di memoria utilizzata
per immagazzinare i denti di interruzione
3
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
command .def
088h ; permette di scegliere la linea di interruzione
(vedi la subroutine art_int)
progrON .def
089h ; indica l’avvenuta programmazione
.org 0080h
; inizio memoria di programma
; subroutine inizio
La subroutine inizio viene eseguita all’accensione dell’ ST6 e ogni
volta che viene inviato al microcontrollore un reset.
inizio ldi wdog,0ffh
;11111111b – 255
; Per la configurazione delle porte si vedano i paragrafi 4.2.1, 4.2.2,
4.2.3
; Setta la porta a per la ricezione dei byte di dati
; Tutti i piedini sono input con resistenza di pull-up
ldi port_a,000h
;00000000b 0
ldi pdir_a,000h
;00000000b 0
ldi popt_a,000h
;00000000b 0
; Setta la porta b
; PB0=LD (load)- input con resistenza di pull-up
; PB1=STR (strobe)- input con resistenza di pull-up
; PB2=ACK (load)- output con open-drain
; PB3=LED program - output di tipo push-pull
; PB4=LED debug – output di tipo push-pull
; PB5=IRQ5 (canale di interrupt)- output di tipo push-pull
; PB6=S1(segnale dei denti del volano squadrato)-input con resistenza
di pull-up
; PB7=IRQ6 (canale di interrupt)- output di tipo push-pull
ldi port_b,000h
;00000000b 0
ldi pdir_b,0bch
;10111100b - 188
ldi popt_b,0b8h
;10111000b – 184
; Setta la porta c
; PC0-PC4=IRQ0-IRG4 (canali di interrupt)- output di tipo push-pull
ldi port_c,000h
;00000000b 0
ldi pdir_c,01fh
;00011111b - 31
ldi popt_c,01fh
;00011111b - 31
; Disabilitazione del convertitore A/D (adcr)
ldi adcr,000h
;00000000b 0
; Disabilitazione del timer (tscr)
ldi tscr,000h
;00000000b 0
; La programmazione non è ancora avvenuta per cui progrON vale 0
ldi progrON,000h
;00000000b 0
; Disabilitazione di tutti gli interrupt tranne il NMI finché la
programmazione ; non si conclude
ldi ior,000h
;00000000b 0
reti
; Salto alla routine principale del programma (main)
jp main
; Gestori di interruzione (vedi par 3.2.4)
; Subroutine legata all’interrupt generato dal convertitore A/D (non
utilizzata)
tad_int reti
; subroutine art_int
; Subroutine legata all’interrupt generato dall’ Autoreload Timer
(viene eseguita ogni volta che c’è corrispondenza tra il dente attuale
ed un dente di interrupt e se la programmazione del microcontrollore è
avvenuta)
; Durante l’esecuzione di questa subroutine il LED di debug lampeggia
art_int ld saveb,a
4
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
; Se progrON=0 (programmazione non avvenuta)la interrupt zero flag vale
1 perciò l’istruzione successiva viene saltata e la routine si chiude.
ld a,progrON
jrnz art1
jp arte
; Il valore assunto da command permette di scegliere quali linee di
interruzione attivare.
; La porta PB4 corrisponde al LED debug (non ad una linea di
interruzione vera e propria) e può essere utilizzata per verificare il
corretto funzionamento della subroutine.
; I puntatori denti e canali vengono incrementati di uno per la
programmazione dell’ autoreload timer con i valori successivi
art1
inc x
inc y
ldi wdog,0ffh
;11111111b - 255
jrr 7,command,art2
; Canale IRQ6 alto
set 7,port_b
art2
jrr 6,command,art4
set 5,port_b
; Canale IRQ5 alto
art4
jrr 4,command,art5
set 4,port_c
; Canale IRQ4 alto
art5
ldi wdog,0ffh
jrr 3,command,art6
set 3,port_c
; Canale IRQ3 alto
art6
jrr 2,command,art7
set 2,port_c
; Canale IRQ2 alto
art7
ldi wdog,0ffh
jrr 1,command,art8
set 1,port_c
; Canale IRQ1 alto
art8
jrr 0,command,art9
; Canale IRQ0 alto
set 0,port_c
; Il dente di interrupt successivo viene caricato nel comparatore
art9
ldi wdog,0ffh
ld a,(x)
ld arcp,a
; Alla variabile command vengono associate le linee di interruzione per
il dente di interruzione successivo
ldi drbr,010h
;00010000b - 16
ld a,(y)
ld command,a
; La flag che ci informa sull’avvenuta uguaglianza tra dente attuale e
dente di interruzione viene azzerata
ldi ars0,000h
;00000000b 0
; Tutte i canali di interrupt sono azzerati
ldi port_c,000h
;00000000b 0
ld a,port_b
andi a,05ch
;01011100b - 92
ld port_b,a
arte
ld a,saveb
reti
Non ci sono interrupt generati da segnali provenienti dall’esterno per
cui
CS_int e AB_int non sono utilizzate
CS_int reti
AB_int reti
; subroutine nmi_int
5
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Questa subroutine viene eseguita sul fronte di caduta del segnale S0
quando la programmazione è già avvenuta (azzeramento del conteggio del
dente attuale una volta al ciclo)
nmi_int ldi wdog,0ffh
;11111111b - 255
ld savec,a
jrs 0,progrON,nmi1
jp nmie
;Con i registri arrc e armc si azzera il conteggio
nmi1
ldi arrc,000h
;00000000b 0
ldi armc,0c8h
;11001000b - 200
;Il primo dente di interruzione viene inserito nel comparatore
;La variabile command contiene i canali di interruzione del primo dente
ld a,start
ld x,a
ldi y,000h
;00000000b 0
ld a,(x)
ld arcp,a
ld a,(y)
ld command,a
nmie
ld a,savec
reti
; subroutine stream
La subroutine stream viene eseguita (chiamata dal programma principale
main) al momento di programmare l’ST6 con i denti e i canali di
interruzione
stream ldi wdog,0ffh
res 3,port_b ; LED program acceso
ld a,Start
ld x,a
ldi y,000h
;00000000b 0
; La procedura prosegue se LD=0 e STR=0
stream1 ldi wdog,0ffh
;11111111b - 255
jrr 0,port_b,stream2
; aspetta LD=0 (trasmissione dati)
jp streame
stream2 ldi wdog,0ffh
jrs 1,port_b,stream2
; aspetta STR=0 (byte pronto per l’invio)
ld a,port_a
; leggi Zinterrupt dalla porta a
res 2,port_b
; ACK=0 (byte ricevuto – byte dente)
ld (x),a
; byte memorizzato – dente di interruzione
stream3 ldi wdog,0ffh
;11111111b - 255
jrr 1,port_b,stream3
; aspetta STR=1(byte non pronto per l’invio)
set 2,port_b
; ACK=1
stream4 ldi wdog,0ffh
;11111111b - 255
jrs 1,port_b,stream4
; aspetta STR=0 (byte pronto per l’invio)
ld a,port_a
; leggi Tinterrupt dalla porta a
res 2,port_b
; ACK=0 (byte ricevuto – byte canali)
ld (y),a
stream6 ldi wdog,0ffh
;11111111b - 255
; aspetta STR=1(byte non pronto per l’invio)
jrr 1,port_b,stream6
set 2,port_b
; ACK=1
; I puntatori dei denti e dei canali vengono incrementati di uno per i
successivi valori da memorizzare
inc x
inc y
jp stream1
6
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
; Alla fine della programmazione vengono reinseriti in coda il primo
dente e un canale di interruzione nullo. In questo modo, dopo il
passaggio dell’ultimo dente di interrupt, la subroutine legata all’
autoreload timer interrupt inserirà nel comparatore un valore ben
determinato che non produrrà effetti essendo il byte dei canali pari a
zero
streame ld a,00h
ld (y),a
ld a,Start
ld y,a
ld a,(y)
ld (x),a
set 3,port_b
; LED program spento – programmazione finita
; programmazione effettuata progrON=255
ldi ProgrON,0ffh
;11111111b - 255
ret
; subroutine main
; Routine principale (main)
main
ldi wdog,0ffh
;11111111b - 255
; indirizzo iniziale dello stack dei denti (08bh) subito dopo la
variabile istru
ldi start,08bh
;10001011b – 139
; abilitazione RAM ausiliaria
ldi drbr,010h
;00010000b - 16
set 2,port_b
; ACK=1 (circuito pronto a ricevere)
; Configurazione del comparatore (vedi capitolo 3)
ldi armc,080h
;10000000b - 128
ldi ars0,000h
;00000000b 0
ldi ars1,006h
;00000110b 6
; Nel comparatore viene inserito un valore di 255 per essere sicuri che
non si genereranno interrupt prima che la programmazione sia completata
(istruzione a vantaggio di sicurezza in quanto gli interrupt sono già
satati disabilitati dalla routine inizio)
ldi arcp,0ffh
;11111111b - 255
ldi arrc,000h
;00000000b 0
main3
ldi wdog,0ffh
;11111111b - 255
res 4,port_b
; LED debug acceso
ldi wdog,0ffh
jrs 0,port_b,main3
; aspetta LD=0
set 4,port_b
; LED Debug spento
call stream
; chiamata alla subroutine di programmazione
ldi ior,010h
; Abilitazione interrupt
jp main3
; vettori di interruzione
.org 0ff0h
jp tad_int
jp art_int
jp CS_int
jp AB_int
.org 0ffch
jp nmi_int
jp inizio
.end
7
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
C.3 S-FUNCTION top_22_10.c
// File modificato il 22/10/2001
/*Questa è l'S-function per la trasmissione dei dati dal modello in
Simulink al circuito elettronico esterno semplificato (senza FPGA).
In questo modello si fanno i calcoli una volta a PMS per un determinato
cilindro.
I dati sono spediti in parallelo per l'iniezione e per l'accensione su
parole da 8 bit ciascuna.
I valori dei tempi vengono perciò spediti in due tranches successive,
infatti
vogliamo mantenere la risoluzione di un microsecondo e la possibilità
di comandare una durata sufficiente (2^16-1 us).*/
#define S_FUNCTION_LEVEL 2
//nome della S-Function utilizzata nel modello (deve corrispondere al
nome del file)
#define S_FUNCTION_NAME top_22_10 //nome della S-Function utilizzata nel modello
#include <simstruc.h>
#include <math.h>
// libreria matematica di MATLAB da includere
#ifndef MATLAB_MEX_FILE
#include <math.h>
#include "ds4001.h" // librerie delle funzioni delle schede dSPACE
#include "ds2201.h"
#include "ds1003.h"
#include "tic1003.h" // librerie che contengono le funzioni delay
//PHS-BUS address (0xC0)+ offset (0x80500000)
#define DS4001_1_BASE
0x805000C0
//PHS-BUS address (0xA0)+ offset (0x80500000)
#define DS2201_1_BASE
0x805000A0
#endif
//______________________Parametri letti dalla maschera________
// attribuisce al tempo di esecuzione della Function il valore letto
dalla maschera ovvero il tempo di esecuzione del blocco in cui si trova
(nella maschera abbiamo inserito -1)
#define Ts(S)
ssGetSFcnParam(S,0)
#define NPARAMS 1 /* numero di parametri letti dalla maschera*/
//____________________________Definizione variabili GLOBALI________
real_T *debug=0;
unsigned int x[6]={0,0,0,0,0,0}; // dati da inviare al CEE
unsigned int num_cil; // numero dei cilindri del motore
int_T bytes[2]={0,0}; // variabili per la scomposizione dei tempi
unsigned int vett[10]={0,0,0,0,0,0,0,0,0,0};
unsigned int z=116; // numero di denti del volano
//__Puntatore agli ingressi________
#define U(element)
(*uPtrs[element])
//____________________Prototipi di funzione____________
void tispiezzo(int_T dato, int_T bytes[2]);
/* funzione tispiezzo (divide i dati temporali da 16 bit in due byte
separati) */
void tispiezzo(int_T dato, int_T bytes[2])
{
int_T byte1, byte2;
byte2=dato>>8;
byte1=dato-((dato>>8)<<8);
bytes[0]=byte1; // byte meno significativo
bytes[1]=byte2; // byte più significativo
}
8
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
/* operazione svolta all'inizio dell’esecuzione della S-Function
serve per definire la dimensione dei dati letti da SIMULINK */
static void mdlInitializeSizes(SimStruct *S)
{
// Vado a leggere NPARAM-Number, numero dei parametri attesi
ssSetNumSFcnParams(S, 1);
if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S))
{
/* errore se il numero dei parametri letti dalla maschera è
diverso da quello atteso */
return;
}
ssSetNumContStates(S, 0);
ssSetNumDiscStates(S, 0);
// N° di ingressi == 3 (il primo ha dimensione 3 (Zj,Toj,Tj), il
secondo ha dimensione 3 (Zic, Zfc, Toc), il terzo dimensione 1
(numro del cilindro a cui inviare i dati))
// se non riceve 5 ingressi da errore
if (!ssSetNumInputPorts(S,3)) return;
ssSetInputPortWidth(S, 0, 3); // Dati iniezione
ssSetInputPortWidth(S, 1, 3); // Dati accensione
ssSetInputPortWidth(S, 2, 1); // numero del cilindro
//_____Proprietà degli ingressi _________________________
// il terzo zero significa che gli ingressi non sono direttamente
collegati al valore delle uscite
ssSetInputPortDirectFeedThrough(S, 0, 0);
ssSetInputPortDirectFeedThrough(S, 1, 0);
ssSetInputPortDirectFeedThrough(S, 2, 0);
//___ Dimensionamento delle uscite (non ce ne sono)______
if (!ssSetNumOutputPorts(S, 0)) return;
//_______Tempo di campionamento _________________________
ssSetNumSampleTimes(S, 1);
/ C'è un solo tempo di campionamento
// I vettori Work sono dei vettori che consentono di
immagazzinare dati Reali (RWork), interi (IWork),puntatori (PWork)
mantenendoli GLOBALI.
ssSetNumRWork(S, 0);
ssSetNumPWork(S, 0);
ssSetNumModes(S, 0);
ssSetNumNonsampledZCs(S, 0);
ssSetOptions(S, 0);
}
// Parte del codice che definisce i tempi di funzionamento della
Function
static void mdlInitializeSampleTimes(SimStruct *S)
{
// leggo il tempo di campionamento dalla maschera del mio blocco
ssSetSampleTime(S, 0, mxGetPr(Ts(S))[0]);
// setto offset a zero (offset è il ritardo con cui si vuole far
eseguirre la function rispetto al blocco che la contiene.
ssSetOffsetTime(S, 0, 0.0);
}
// Change to #undef to remove function
#define MDL_INITIALIZE_CONDITIONS
// setto le condizioni iniziali con le quali inizia la simulazione
#if defined(MDL_INITIALIZE_CONDITIONS)
static void mdlInitializeConditions(SimStruct *S)
9
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
{
//istruzioni compilate solo per l'esecuzione in tempo reale
#ifndef MATLAB_MEX_FILE
ds4001_init(DS4001_1_BASE); //inizializzazione della DS4001
ds2201_init(DS2201_1_BASE); //inizializzazione della DS2201
/* setto i 32 pin della DS4001 nel seguente modo:
modalità: NON_STROBE (l'unica disponibile in OUTPUT)
funzione: OUTPUT (valori in uscita) PER I PRIMI 3 GRUPPI DA 8 BIT
funzione: INPUT PER IL QUARTO GRUPPO (preposto alla lettura
dell'ACK #24) */
ds4001_pio_init(DS4001_1_BASE, DS4001_OUT_0 | DS4001_OUT_1 |
DS4001_OUT_2 | DS4001_IN_3, DS4001_NON_STRB_0 |
DS4001_NON_STRB_1 | DS4001_NON_STRB_2 | DS4001_NON_STRB_3);
#endif
}
#endif /* MDL_INITIALIZE_CONDITIONS */
/* Change to #undef to remove function
Funzione di avvio eseguita solo all'inizio della simulazione on line */
#define MDL_START
#if defined(MDL_START)
static void mdlStart(SimStruct *S)
{
int_T i;
//___________Puntatori agli ingressi_______________________
InputRealPtrsType uPtrs0 = ssGetInputPortRealSignalPtrs(S,0);
InputRealPtrsType uPtrs1 = ssGetInputPortRealSignalPtrs(S,1);
InputRealPtrsType uPtrs2 = ssGetInputPortRealSignalPtrs(S,2);
//___________ Leggo gli ingressi _____________________________
/* leggo gli ingressi dal modello e li salvo nel vettore GLOBALE
x[6] */
// DATI RELATIVI ALL'INIEZIONE
x[0]=*uPtrs0[0]; // Zj
x[1]=*uPtrs0[1]; // Toj
x[2]=*uPtrs0[2]; // Tj
// DATI RELATIVI ALL'ACCENSIONE
x[3]=*uPtrs1[0]; // Zic
x[4]=*uPtrs1[1]; // Zfc
x[5]=*uPtrs1[2]; // Toc
// numero del cilindro a cui si riferiscono i parametri di
controllo
num_cil=*uPtrs2[0];
#ifndef MATLAB_MEX_FILE
#endif
}
#endif
/*MDL_START*/
static void mdlOutputs(SimStruct *S, int_T tid)
{
int_T tt;
// evita il problema del counter (la prima volta num_cil=0)
if (num_cil==0) num_cil=1;
// Sfasamento dei valori memorizzati nelle variabili che si
riferiscono ai denti del volano per renderli compatibili con la
posizione di ogni singolo cilindro
x[0]=x[0]+(num_cil-1)*z/2; // Zj
x[3]=x[3]+(num_cil-1)*z/2; // Zic
x[4]=x[4]+(num_cil-1)*z/2; // Zfc
10
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
// Correzione nel caso in cui I valori superino il numero di denti
corrispondente ad un ciclo (2*z)
if (x[0]>=2*z) x[0]=x[0]-2*z+1; // Zj
if (x[3]>=2*z) x[3]=x[3]-2*z+1; // Zic
if (x[4]>=2*z) x[4]=x[4]-2*z+1; // Zfc
/* LA SEGUENTE FUNZIONE SERVE A GENERARE UN VETTORE DI DIMENSIONE
10 CONTENENTE I DATI DA TRASMETTERE ALL'ESTERNO
//SEQUENZA DI TRASMISSIONE DEI DATI
/* D15.......D8
D7........D0
Zj <-------------> Zic
Toj- <-----------> Zfc
Toj+
/
Tj- <-----------> Tj+
T0c+ <-----------> T0c*/
vett[0]=x[3];
// Zic
vett[1]=x[4];
// Zfc
tispiezzo(x[1],bytes);
// Toj
vett[7]=bytes[1];
// Toj+
vett[6]=bytes[0];
// Tojtispiezzo(x[2],bytes);
// Tj
// Tjvett[8]=bytes[0];
vett[3]=bytes[1];
// Tj+
vett[5]=x[0];
// Zj
tispiezzo(x[5],bytes);
// Toc
vett[9]=bytes[1];
// Toc+
vett[4]=bytes[0];
// Tocvett[2]=0;
// dato ignorato
#ifndef MATLAB_MEX_FILE
/* LA SEGUENTE PROCEDURA REALIZZA LA TRASMISSIONE DEI DATI DAL
dSPACE al CEE */
// tengo alto il segnale STR (#21)
ds4001_bit_out(DS4001_1_BASE, 0x00200000,0x00200000);
// tengo alto il LOAD ENABLE (#20)
ds4001_bit_out(DS4001_1_BASE, 0x00100000,0x00100000);
/ scelgo la scheda da programmare impostando il load address con il
valore numcil*0x10000 (canali #16-#19 della DS4001) corrispondente ad
una TOP BOARD numero numcil
ds4001_bit_out(DS4001_1_BASE,0x000F0000,num_cil*0x10000);
// abbasso il load enable per iniziare la trasmissione dati
ds4001_bit_out(DS4001_1_BASE, 0x00100000,0x00000000);
// Ciclo for per la programmazione della TOP BOARD
for (tt=0;tt<5;tt++)
{
// aspetto che l'ACK sia 1 (circuito pronto)
while (ds4001_bit_in(DS4001_1_BASE, 0x08000000) == 0)
{
}
// inserisco i dati nelle linee di trasmissione (16 bit)
ds4001_bit_out(DS4001_1_BASE, 0x0000FFFF, vett[tt]+vett[tt+5]*0x100);
tic1_delay(0.000062); // ritardo di 62us
// abbasso lo STR (dato pronto)
ds4001_bit_out(DS4001_1_BASE, 0x00200000,0x00000000);
// aspetto che il CEE abbassi l’ACK (dato ricevuto)
while (ds4001_bit_in(DS4001_1_BASE, 0x08000000) == 0x08000000)
{
}
11
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
// alzo lo STR (dato non pronto)
ds4001_bit_out(DS4001_1_BASE, 0x00200000,0x00200000);
}
// alzo il load perché la trasmissione è completa
ds4001_bit_out(DS4001_1_BASE, 0x00100000,0x00100000);
#endif
}
/* Change to #undef to remove function */
//legge gli ingressi del modello a ogni T-sample
#define MDL_UPDATE
#if defined(MDL_UPDATE)
static void mdlUpdate(SimStruct *S, int_T tid)
{
InputRealPtrsType uPtrs0 = ssGetInputPortRealSignalPtrs(S,0);
InputRealPtrsType uPtrs1 = ssGetInputPortRealSignalPtrs(S,1);
InputRealPtrsType uPtrs2 = ssGetInputPortRealSignalPtrs(S,2);
//________ Leggo i 3 ingressi ____________________
/* leggo gli ingressi dal modello e li salvo nel vettore GLOBALE
x[6] */
// DATI RELATIVI ALL'INIEZIONE
x[0]=*uPtrs0[0]; // Zj
x[1]=*uPtrs0[1]; // Toj
x[2]=*uPtrs0[2]; // Tj
// DATI RELATIVI ALL'ACCENSIONE
x[3]=*uPtrs1[0]; // Zic
x[4]=*uPtrs1[1]; // Zfc
x[5]=*uPtrs1[2]; // Toc
/* numero del cilindro a cui si riferiscono i parametri di
controllo */
num_cil=*uPtrs2[0];
}
#endif /* MDL_UPDATE */
#define MDL_DERIVATIVES // Change to #undef to remove function
#if defined(MDL_DERIVATIVES)
static void mdlDerivatives(SimStruct *S)
{
}
#endif // MDL_DERIVATIVES
static void mdlTerminate(SimStruct *S)
{
}
#ifdef MATLAB_MEX_FILE //Is this file being compiled as a MEX-file?
#include "simulink.c"
// MEX-file interface mechanism
#else
#include "cg_sfun.h"
// Code generation registration function
#endif
C.4 Programma CPU1.asm
Evidenziate in giallo le zone di codice da
eliminare nella versione definitiva del software
; Questo software si occupa di gestire l’accensione
; VARIABILI DELLA CPU1
.title "cpu1"
.w_on
12
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
a
x
y
v
w
port_a
port_b
port_c
pdir_a
pdir_b
pdir_c
popt_a
popt_b
popt_c
ior
dwr
addr
adcr
pcs
tcs
tscr
armc
ars0
ars1
wdog
arrc
arcp
drbr
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
0ffh
080h
081h
082h
083h
0c0h
0c1h
0c2h
0c4h
0c5h
0c6h
0cch
0cdh
0ceh
0c8h
0c9h
0d0h
0d1h
0d2h
0d3h
0d4h
0d5h
0d6h
0d7h
0d8h
0d9h
0dah
0e8h
;
;
;
;
;
;
;
;
;
;
;
accumulatore (par. 3.2)
registro x
registro y
registro v (non utilizzato)
registro w (non utilizzato)
porta a (par 3.2.1)
porta b
porta c
registro di direzione porta a (par. 3.2.2)
registro di direzione porta b
registro di direzione porta c
; registro delle opzioni della porta a (par. 4.2.3)
;
;
;
;
;
;
;
;
registro delle opzioni della porta b
registro delle opzioni della porta c
registro degli interrupt (par. 3.2.4)
registro data rom window (non utilizzato)
dato convertitore A/D (non utilizzato)
registro convertitore A/D (non utilizzato)
registro del timer (non utilizzato)
contatore del timer (non utilizzato)
;
;
;
;
registro
registro
registro
registro
di controllo del timer(vedi datasheet ST6)
di controllo dell’AR timer (par. 4.2.7)
1 di stato dell’AR timer (par. 4.2.8)
2 di stato dell’AR timer (par. 4.2.8)
; registro del watchdog (par. 3.2)
; registro di ricaricamento dell’AR timer (par. 4.2.5)
; registro di comparazione dell’AR timer (par. 4.2.6)
; registro del banco dei dati Ram/EEprom (par. 4.2.9)
; VARIABILI DEL PROGRAMMA
; savea, saveb memorizzano il contenuto dell’accumulatore durante
l’esecuzione delle subroutine
savea
.def
084h
saveb
.def
085h
; indica se la programmazione del microcontrollore è avvenuta oppure no
progrON .def
086h
; denti di inizio (Don) e fine (Doff) carica
Don
.def
087h
Doff
.def
088h
; SETTAGGIO INIZIALE
.org 0080h ; inizio della memoria di programma
La subroutine inizio viene eseguita all’accensione dell’ST6 e ogni
volta che viene inviato al microcontrollore un reset
inizio ldi wdog,0ffh
;11111111b – 255
; per la configurazione delle porte si vedano i paragrafi 4.2.1, 4.2.2,
4.2.3
; setta la porta a per la ricezione dei byte di dati
; tutti i piedini sono input senza resistenza di pull-up
ldi port_a,0ffh
;11111111b - 255
ldi pdir_a,000h
;00000000b 0
ldi popt_a,000h
;00000000b 0
; Setta la porta b
; PB0=BOB (segnale di carica della bobina)- input con resistenza di
pull-up
; PB1=LD (load)- input con resistenza di pull-up
; PB2-3-4=non utilizzate
; PB5=ACK – output di tipo push-pull
13
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
; PB6=S1 (segnale dei denti del volano squadrato)- input con resistenza
di pull-up
; PB7=non utilizzato
ldi port_b,000h
;00000000b 0
ldi pdir_b,0bch
;10111100b - 188
ldi popt_b,0bch
;10111100b – 188
; setta la porta c
; PC0=New Data (OR logico tra i segnali LD e STR) – input con
resistenza di pull-up
; PC1-2=non utilizzati
; PC3=BOB ON (fa partire la carica della bobina) – output di tipo pushpull
; PC4=nonutilizzato
ldi port_c,01eh
;00011110b - 30
ldi pdir_c,01eh
;00011110b - 30
ldi popt_c,01eh
;00011110b - 30
; timer dell’ST6 disabilitato
ldi tscr,000h
;00000000b 0
; programmazione non effettuata
ldi progrON,000h
;00000000b 0
; disabilitazione di tutti gli interrupt tranne il NMI finché la
programmazione non si conclude
ldi ior,000h
;00000000b 0
reti
jp main
; gestori di interruzione
Non ci sono interrupt generati da segnali provenienti dall’esterno per
cui CS_int e AB_int non sono utilizzate
CS_int reti
AB_int reti
; SUBROUTINE nmi_int
Questa subroutine viene eseguita sul fronte di caduta del segnale S0
quando la programmazione è già avvenuta (azzeramento del conteggio del
dente attuale una volta al ciclo)
nmi_int ld savea,a
jrs 0,progrON,nmi1
jp nmie
;Con il registro armc si azzera il conteggio (il valore contenuto nel
registro arrc vale 0)
nmi1
ldi armc,0c8h
;11001000b - 200
nmie
ld a,savea
reti
; SUBROUTINE art_int
; Subroutine legata all’interrupt generato dall’ Autoreload Timer
(viene eseguita ogni volta che c’è corrispondenza tra il dente attuale
ed i denti di inizio e fine accensione)
; Se BOB=1 (carica della bobina in corso) carica nel comparatore il
dente di fine carica (Doff)
; Se BOB=0 (la bobina non è sotto carica) carica nel comparatore il
dente di inizio carica (Don)
art_int ld saveb,a
jrr 3,port_c,art1
jp art2
art1
set 3,port_c
ld a,Don
ld arcp,a
14
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
jp arte
res 3,port_c
ld a,Doff
ld arcp,a
arte
ldi ars0,000h
;00000000b 0
ld a,saveb
reti
; Subroutine legata all’interrupt generato dal convertitore A/D (non
utilizzata)
tad_int reti
art2
ROUTINE MAIN
; PROGRAMMA PRINCIPALE
main
ldi wdog,0ffh
;11111111b – 255
; inizializzazione del comparatore
; dente attuale azzerato e dente di iniezione pari a 255 (evita in
questa fase che si verifichino dei segnali di interruzione che non
siano NMI)
ldi arrc,000h
;00000000b 0
ldi armc,080h
;10000000b - 128
ldi ars0,000h
;00000000b 0
ldi ars1,006h
;00000110b 6
ldi arcp,0ffh
;11111111b – 255
; ACK=0 (circuito pronto a ricevere)
res 5,port_b
; la porta PB2 e scollegata (questa riga di codice deve essere
eliminata)
res 2,port_b
; aspetta LD=0 (inizio programmazione)
main1
ldi wdog,0ffh
;11111111b - 255
jrs 1,port_b,main1
res 2,port_b
; disabilitazione di tutti gli interrupt tranne il NMI finché la
; programmazione non si conclude
ldi ior,000h
;00000000b 0
; aspetta NEW DATA=0 (dente Zic pronto per l’invio)
main2
ldi wdog,0ffh
;11111111b - 255
jrs 0,port_c,main2
ld a,port_a
; ACK=1 (Zic ricevuto)
set 5,port_b
; memorizza il dente Zic nella variabile Don
ld Don,a
; aspetta NEW DATA=1 (dato non pronto all’invio)
main3
ldi wdog,0ffh
;11111111b - 255
jrr 0,port_c,main3
; ACK=0 (circuito pronto a ricevere)
res 5,port_b
; aspetta NEW DATA=0 (dente Zfc pronto per l’invio)
main4
ldi wdog,0ffh
;11111111b - 255
jrs 0,port_c,main4
ld a,port_a
; ACK=1 (Zfc ricevuto)
set 5,port_b
ld Doff,a
; non è stato caricato il dente Zic nel comparatore quindi questa riga
è da togliere
15
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
ldi ior,010h
;00010000b - 16
; aspetta LD=1 (fine della programmazione)
main5
ldi wdog,0ffh
;11111111b – 255
; il dente Zic viene caricato nel comparatore
ld a,Don
ld arcp,a
jrr 1,port_b,main5
; ACK=0 (circuito pronto a ricevere)
res 5,port_b
set 2,port_b
; Abilitazione degli interrupt tramite il registro ior
ldi ior,010h
;00010000b - 16
; Segnale BOB_ON alto
set 3,port_c
; programmazione effettuata
ldi progrON,0ffh
;11111111b - 255
jp main1
; vettori di interruzione
.org 0ff0h
jp tad_int
jp art_int
jp CS_int
jp AB_int
.org 0ffch
jp nmi_int
jp inizio
.end
C.5 programma CPU1_02.asm
Evidenziate in giallo le zone di codice da
eliminare nella versione definitiva del software
; Questo software si occupa di controllare l’accensione
.title "cpu1_02"
.w_on
a
.def
0ffh ; accumulatore
x
.def
080h ; registro x
y
.def
081h ; registro y
v
.def
082h ; registro v (non utilizzato)
w
.def
083h ; registro w (non utilizzato)
port_a .def
0c0h ; porta a (par 3.2.1)
port_b .def
0c1h ; porta b
port_c .def
0c2h ; porta c
pdir_a .def
0c4h ; registro di direzione porta a (par. 3.2.2)
pdir_b .def
0c5h ; registro di direzione porta b
pdir_c .def
0c6h ; registro di direzione porta c
popt_a .def
0cch ; registro delle opzioni della porta a (par. 4.2.3)
popt_b .def
0cdh ; registro delle opzioni della porta b
popt_c .def
0ceh ; registro delle opzioni della porta c
ior
.def
0c8h ; registro degli interrupt (par. 3.2.4)
dwr
.def
0c9h ; registro data rom window (non utilizzato)
addr
.def
0d0h ; dato convertitore A/D (non utilizzato)
adcr
.def
0d1h ; registro convertitore A/D (non utilizzato)
pcs
.def
0d2h ; registro del timer (non utilizzato)
tcs
.def
0d3h ; contatore del timer (non utilizzato)
tscr
.def
0d4h ; registro di controllo del timer(vedi datasheet ST6)
16
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
armc
ars0
ars1
wdog
arrc
arcp
drbr
.def
.def
.def
.def
.def
.def
.def
0d5h
0d6h
0d7h
0d8h
0d9h
0dah
0e8h
; registro di controllo dell’AR timer (par. 4.2.7)
; registro 1 di stato dell’AR timer (par. 4.2.8)
; registro 2 di stato dell’AR timer (par. 4.2.8)
; registro del watchdog (par.3.2)
; registro di ricaricamento dell’AR timer (par. 4.2.5)
; registro di comparazione dell’AR timer (par. 4.2.6)
; registro del banco dei dati Ram/EEprom (par. 4.2.9)
; VARIABILI DEL PROGRAMMA
; savea, saveb memorizzano il contenuto dell’accumulatore durante
l’esecuzione delle subroutine
savea
.def
084h
saveb
.def
085h
; indica se la programmazione del microcontrollore è avvenuta oppure
; no
progrON .def
086h
; denti di inizio (Don) e fine (Doff) carica
Don
.def
087h
Doff
.def
088h
; SETTAGGIO INIZIALE
.org 0080h
; inizio della memoria di programma
la subroutine inizio viene eseguita all’accensione dell’ST6 e ogni
volta che viene inviato al microcontrollore un reset
inizio ldi wdog,0ffh
;11111111b – 255
; per la configurazione delle porte si vedano i paragrafi 4.2.1, 4.2.2,
4.2.3
; setta la porta a per la ricezione dei byte di dati
; tutti i piedini sono input senza resistenza di pull-up
ldi port_a,0ffh
;11111111b - 255
ldi pdir_a,000h
;00000000b 0
ldi popt_a,000h
;00000000b 0
; Setta la porta b
; PB0=BOB (segnale di carica della bobina)- input con resistenza di
pull-up
; PB1=LD (load)- input con resistenza di pull-up
; PB2-3-4=non utilizzate
; PB5=ACK – output di tipo push-pull
; PB6=S1 (segnale dei denti del volano squadrato)- input con resistenza
di pull-up
; PB7=non utilizzato
ldi port_b,000h
;00000000b 0
ldi pdir_b,0bch
;10111100b - 188
ldi popt_b,0bch
;10111100b – 188
; setta la porta c
; PC0=New Data (OR logico tra i segnali LD e STR) – input con
; resistenza di pull-up
; PC1-2=non utilizzati
; PC3=BOB ON (fa partire la carica della bobina) – output di tipo
; push-pull
; PC4=nonutilizzato
ldi port_c,01eh
;00011110b - 30
ldi pdir_c,01eh
;00011110b - 30
ldi popt_c,01eh
;00011110b - 30
; timer dell’ST6 disabilitato
ldi tscr,000h
;00000000b 0
; programmazione non effettuata
ldi progrON,000h
;00000000b 0
17
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
; disabilitazione di tutti gli interrupt tranne il NMI finché la
; programmazione non si conclude
ldi ior,000h
;00000000b 0
reti
jp main
; gestori di interruzione
Non ci sono interrupt generati da segnali provenienti dall’esterno per
cui CS_int e AB_int non sono utilizzate
CS_int reti
AB_int reti
; SUBROUTINE nmi_int
Questa subroutine viene eseguita sul fronte di caduta del segnale S0
quando la programmazione è già avvenuta (azzeramento del conteggio del
dente attuale una volta al ciclo)
nmi_int ld savea,a
jrs 0,progrON,nmi1
jp nmie
; Con il registro armc si azzera il conteggio (il valore contenuto
; nel registro arrc vale 0)
nmi1
ldi armc,0c8h
;11001000b - 200
nmie
ld a,savea
reti
; SUBROUTINE art_int
; Subroutine legata all’interrupt generato dall’ Autoreload Timer
(viene eseguita ogni volta che c’è corrispondenza tra il dente attuale
ed i denti di inizio e fine accensione)
; Se BOB=1 (carica della bobina in corso) carica nel comparatore il
; dente di fine carica (Doff)
; Se BOB=0 (la bobina non è sotto carica) carica nel comparatore il
; dente di inizio carica (Don)
art_int ld saveb,a
jrr 3,port_c,art1
jp art2
art1
set 3,port_c
ld a,Don
ld arcp,a
jp arte
art2
res 3,port_c
ld a,Doff
ld arcp,a
arte
ldi ars0,000h
;00000000b 0
ld a,saveb
reti
; Subroutine legata all’interrupt generato dal convertitore A/D (non
; utilizzata)
tad_int reti
ROUTINE MAIN
; PROGRAMMA PRINCIPALE
main
ldi wdog,0ffh
;11111111b – 255
; BOB_ON alto
set 3,port_c
; inizializzazione del comparatore
; dente attuale azzerato e dente di iniezione pari a 255 (evita in
; questa fase che si verifichino dei segnali di interruzione che non
; siano NMI)
18
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
ldi arrc,000h
;00000000b 0
ldi armc,080h
;10000000b - 128
ldi ars0,000h
;00000000b 0
ldi ars1,006h
;00000110b 6
ldi arcp,0ffh
;11111111b – 255
; ACK=0 (circuito pronto a ricevere)
res 5,port_b
; la porta PB2 e scollegata (questa riga di codice deve essere
eliminata)
res 2,port_b
; aspetta LD=0 (inizio programmazione)
main1
ldi wdog,0ffh
;11111111b - 255
jrs 1,port_b,main1
res 2,port_b
; disabilitazione di tutti gli interrupt tranne il NMI finché la
; programmazione non si conclude
ldi ior,000h
;00000000b 0
; aspetta NEW DATA=0 (dente Zic pronto per l’invio)
main2
ldi wdog,0ffh
;11111111b - 255
jrs 0,port_c,main2
ld a,port_a
; ACK=1 (Zic ricevuto)
set 5,port_b
; memorizza il dente Zic nella variabile Don
ld Don,a
; aspetta NEW DATA=1 (dato non pronto all’invio)
main3 ldi wdog,0ffh
;11111111b - 255
jrr 0,port_c,main3
; ACK=0 (circuito pronto a ricevere)
res 5,port_b
; aspetta NEW DATA=0 (dente Zfc pronto per l’invio)
main4
ldi wdog,0ffh
;11111111b - 255
jrs 0,port_c,main4
ld a,port_a
; ACK=1 (Zfc ricevuto)
set 5,port_b
ld Doff,a
; Abilitazione degli interrupt tramite il registro ior (vedi par.
; 3.2.4)
ldi ior,010h
;00010000b - 16
; aspetta LD=1 (fine della programmazione)
main5 ldi wdog,0ffh
;11111111b – 255
; il dente Zic viene caricato nel comparatore
ld a,Don
ld arcp,a
jrr 1,port_b,main5
; ACK=0 (circuito pronto a ricevere)
res 5,port_b
set 2,port_b
ldi ior,010h
;00010000b - 16
ldi progrON,0ffh
;11111111b - 255
; questa parte (da main6 a main10) viene eseguita durante tutte le
; programmazioni successive
; aspetta LD=0 (inizio programmazione successiva alla prima)
main6
ldi wdog,0ffh
;11111111b - 255
jrs 1,port_b,main6
res 2,port_b
19
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
; disabilita i canali di interrupt
ldi ior,000h
;00000000b 0
; se NEW_DATA=0 (Zic pronto per l’invio) lo memorizza nella
; variabile Don e alza l’ACK (Zic ricevuto)
main7
ldi wdog,0ffh
;11111111b - 255
jrs 0,port_c,main8
ld a,port_a
set 5,port_b
ld Don,a
; aspetta NEW_DATA=1 (dato on pronto all’invio)
main8
ldi wdog,0ffh
;11111111b - 255
jrr 0,port_c,main8
; ACK=0 (circuito pronto a ricevere)
res 5,port_b
; aspetta NEW_DATA=0 (Zfc pronto per l’invio)
main9 ldi wdog,0ffh
;11111111b - 255
jrs 0,port_c,main9
ld a,port_a
; ACK=1 (Zfc ricevuto)
set 5,port_b
ld Doff,a
; Abilitazione degli interrupt tramite il registro ior
ldi ior,010h
;00010000b - 16
; aspetta LD=1 (fine programmazione)
main10 ldi wdog,0ffh
;11111111b - 255
jrr 1,port_b,main10
; ACK=0 (circuito pronto a ricevere)
res 5,port_b
set 2,port_b
; Abilitazione degli interrupt tramite il registro ior (vedi par.
; 3.2.4)
ldi ior,010h
;00010000b - 16
jp main6
; vettori di interruzione
.org 0ff0h
jp tad_int
jp art_int
jp CS_int
jp AB_int
.org 0ffch
jp nmi_int
jp inizio
.end
C.6 Programma CPU0_02.asm o CPU0.asm
Evidenziate in giallo le zone di codice da
eliminare nella versione definitiva del software
; Questo software si occupa di controllare l’iniezione di carburante e
di programmare correttamente il timer
; VARIABILI DELLA CPU0
a
x
.title "cpu0_02"
.w_on
.def
0ffh ; accumulatore (par. 4.2)
.def
080h ; registro x
20
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
y
v
w
port_a
port_b
port_c
pdir_a
pdir_b
pdir_c
popt_a
popt_b
popt_c
ior
dwr
addr
adcr
pcs
tcs
tscr
armc
ars0
ars1
wdog
arrc
arcp
drbr
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
081h
082h
083h
0c0h
0c1h
0c2h
0c4h
0c5h
0c6h
0cch
0cdh
0ceh
0c8h
0c9h
0d0h
0d1h
0d2h
0d3h
0d4h
0d5h
0d6h
0d7h
0d8h
0d9h
0dah
0e8h
;
;
;
;
;
;
;
;
;
registro y
registro v (non utilizzato)
registro w (non utilizzato)
porta a (par 4.2.1)
porta b
porta c
registro di direzione porta a (par. 4.2.2)
registro di direzione porta b
registro di direzione porta c
; registro delle opzioni della porta a (par. 4.2.3)
;
;
;
;
;
;
;
;
registro delle opzioni della porta b
registro delle opzioni della porta c
registro degli interrupt (par. 4.2.4)
registro data rom window (non utilizzato)
dato convertitore A/D (non utilizzato)
registro convertitore A/D (non utilizzato)
registro del timer (non utilizzato)
contatore del timer (non utilizzato)
;
;
;
;
registro
registro
registro
registro
di controllo del timer(non utilizzato)
di controllo dell’AR timer (par. 4.2.7)
1 di stato dell’AR timer (par. 4.2.8)
2 di stato dell’AR timer (par. 4.2.8)
; registro del watchdog (par.4.2)
; registro di ricaricamento dell’AR timer (par. 4.2.5)
; registro di comparazione dell’AR timer (par. 4.2.6)
; registro del banco dei dati Ram/EEprom (par. 4.2.9)
; VARIABILI DEL PROGRAMMA
; savea, saveb, savec memorizzano il contenuto dell’accumulatore
durante l’esecuzione delle subroutine
savea
.def
084h
saveb
.def
085h
savec
.def
086h
; indica se la programmazione del microcontrollore è avvenuta oppure no
progrON .def
087h
; dente di inizio iniezione
DJ
.def
088h
; SETTAGGIO INIZIALE
.org 0080h ; inizio della memoria di programma
La subroutine inizio viene eseguita all’accensione dell’ST6 e ogni
volta che viene inviato al microcontrollore un reset
inizio ldi wdog,0ffh
;11111111b – 255
; per la configurazione delle porte si vedano i paragrafi 4.2.1,
; 4.2.2, 4.2.3
; setta la porta a per la ricezione dei byte di dati
; tutti i piedini sono input senza resistenza di pull-up
ldi port_a,0ffh
;11111111b - 255
ldi pdir_a,000h
;00000000b 0
ldi popt_a,000h
;00000000b 0
; Setta la porta b
; PB0=INJ (fornisce all’ST6 un segnale utile in caso di iniezione
; multipla – vedi par. 3.3.8)- input con resistenza di pull-up
; PB1=LD (load)- input con resistenza di pull-up
; PB2=A0 (utilizzato assieme a A1 per indicare in quale dei tre
; timer dell’82C54 deve essere memorizzato il dato temporale
; proveniente dalla DS4001)- output di tipo push-pull
; PB3=A1 (utilizzato assieme a A0 per indicare in quale dei tre
21
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
timer dell’82C54 deve essere memorizzato il dato temporale
proveniente dalla DS4001) - output di tipo push-pull
PB4=CE0 (disabilita e abilita il buffer B0) – output di tipo pushpull
PB5=CE1 (disabilita e abilita il buffer B1)- output di tipo pushpull
PB6=S1 (segnale dei denti del volano squadrato)- input con
resistenza di pull-up
PB7=WR (collegato con l’ingresso WR dell’82C54 , permette la
memorizzazione dei parametri di temporizzazione dell’accensione e
dell’iniezione (Toj, Tj, Toc)- output di tipo push-pull
ldi port_b,0bch
;10111100b - 188
ldi pdir_b,0bch
;10111100b - 188
ldi popt_b,0bch
;10111100b – 188
setta la porta c
PC0=New Data (OR logico tra i segnali LD e STR) – input con
resistenza di pull-up
PC1=INJ NOW (invia il segnale di iniezione immediata allo stadio
di potenza – al momento non è utilizzato) – output di tipo pushpull
PC2=ACK – output di tipo push-pull
PC3=INJ ON (fa partire il primo timer dell’82C54 – inizio del
processo di iniezione) – output di tipo push-pull
PC4=BOB (controlla se la bobina d’accensione è in fase di carica)input senza resitenza di pull-up
ldi port_c,01eh
;00011110b - 30
ldi pdir_c,00eh
;00001110b - 14
ldi popt_c,00eh
;00001110b - 14
disabilitazione di tutti gli interrupt tranne il NMI finché la
programmazione non si conclude
ldi ior,000h
;00000000b 0
reti
jp main
; gestori di interruzione
Non ci sono interrupt generati da segnali provenienti dall’esterno per
cui CS_int e AB_int non sono utilizzate
CS_int reti
AB_int reti
; SUBROUTINE nmi_int
Questa subroutine viene eseguita sul fronte di caduta del segnale S0
quando la programmazione è già avvenuta (azzeramento del conteggio del
dente attuale una volta al ciclo)
nmi_int ld savea,a
jrs 0,progrON,nmi1
jp nmie
; Con il registro armc si azzera il conteggio (il valore contenuto
; nel registro arrc vale 0)
nmi1
ldi armc,0c8h
;11001000b – 200
; il dente di inizio iniezione viene caricato nel comparatore
ld a,DJ
ld arcp,a
nmie
ld a,savea
reti
; SUBROUTINE art_int
22
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
; Subroutine legata all’interrupt generato dall’ Autoreload Timer
(viene eseguita ogni volta che c’è corrispondenza tra il dente attuale
ed il dente di inizio iniezione)
art_int ld savec,a
; viene inviato un impulso tramite il canale INJ ON per far partire
; il conteggio del primo timer (Toj)
set 3,port_c
res 3,port_c
; il valore del dente di inizio iniezione viene ridotto di un’unità
; (vedi capitolo 3)
ld a,arcp
subi a,001h
;00000001b 1
ld arcp,a
; La flag che ci informa sull’avvenuta uguaglianza tra dente attuale
; e dente di interruzione viene azzerata
ldi ars0,000h
;00000000b 0
ld a,savec
reti
; Subroutine legata all’interrupt generato dal convertitore A/D (non
; utilizzata)
tad_int reti
; SUBROUTINE ini82C54
; Subroutine di inizializzazione dell’82C54 (ogni timer viene
; configurato separatamente)
ini82C54 ldi wdog,0ffh
;11111111b - 255
ld saveb,a
; i due buffer (CE0 e CE1) vengono disabilitati - viene attivata la
; modalità di programmazione del timer (A0 e A1)- i tre timer
; possono essere programmati tenendo alto il canale WR
ld a,port_b
com a
andi a,043h
;01000011b - 67
com a
ld port_b,a
; configurazione della porta a per la programmazione dei timer
; (tutti output di tipo push-pull)
; per chiarimenti si veda il par 4.5.3.1
; PA0=BCD (deve essere tenuto sempre nullo)
; PA1-2-3=M0-1-2 (modalità di funzionamento del timer)
; PA4-5=RW0-1 (modalità di memorizzazione dei tempi)
; PA6-7=SC0-1 (scelta del timer da programmare)
ldi pdir_a,0ffh
;11111111b - 255
ldi popt_a,0ffh
;11111111b – 255
; programmazione terzo timer
; il Timer 2 viene configurato in modalità 5 e programmato inviando
; prima il byte meno significativo poi quello più significativo
ldi port_a,0bah
;10111010b - 186
res 7,port_b ; impulso per memorizzare il byte della porta a
set 7,port_b
; codice senza apparente significato
ldi port_a,001h
;00000001b 1
res 7,port_b
set 7,port_b
ldi port_a,000h
;00000000b 0
res 7,port_b
set 7,port_b
23
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
set 3,port_c
res 3,port_c
; programmazione primo timer
; il Timer 0 viene configurato in modalità 1 e programmato inviando
; prima il byte meno significativo poi quello più significativo
ldi port_a,032h
;00110010b - 50
res 7,port_b
set 7,port_b
; programmazione secondo timer
; il Timer 1 viene configurato in modalità 1 e programmato inviando
prima il byte meno significativo poi quello più significativo
ldi port_a,072h
;01110010b - 114
res 7,port_b
set 7,port_b
; la porta a torna ad essere di input con resistenza di pull-up
ldi popt_a,000h
;00000000b 0
ldi pdir_a,000h
;00000000b 0
ldi port_a,000h
;00000000b 0
; il buffer B0 viene abilitato
res 4,port_b
ldi wdog,0ffh
;11111111b - 255
ld a,saveb
ret
; ROUTINE MAIN
; PROGRAMMA PRINCIPALE
main
ldi wdog,0ffh
;11111111b – 255
; il buffer B1 viene disabilitato
set 5,port_b
; ACK=0 (circuito pronto a ricevere)
; INJ ON=0 - comando iniezione nullo
; INJ NOW – comando iniezione immediata nullo
res 2,port_c
res 3,port_c
res 1,port_c
; chiamata alla routine di programmazione del timer
call ini82C54
; inizializzazione del comparatore
; dente attuale azzerato e dente di iniezione pari a 255 (evita in
; questa fase che si verifichino dei segnali di interruzione che non
; siano NMI)
ldi arrc,000h
;00000000b 0
ldi armc,080h
;10000000b - 128
ldi ars0,000h
;00000000b 0
ldi ars1,006h
;00000110b 6
ldi arcp,0ffh
;11111111b – 255
; ripetizione del comando di azzeramento dell’ACK
res 2,port_c
; aspetta LD=0 (inizio programmazione)
main1
ldi wdog,0ffh
;11111111b - 255
jrs 1,port_b,main1
; Disabilitazione di tutti gli interrupt tranne il NMI finché la
; programmazione non si conclude
ldi ior,000h
;00000000b 0
; buffer B1 disabilitato – buffer B0 abilitato
set 5,port_b
res 4,port_b
24
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
; aspetta NEW DATA=0 (dente Zj pronto per l’invio)
main2
ldi wdog,0ffh
;11111111b - 255
jrs 0,port_c,main2
; memorizza il dente Zj nella variabile Dj
ld a,port_a
ld DJ,a
; ACK=1 (dente Zj ricevuto)
set 2,port_c
; il dente Zj viene caricato nel comparatore
ld arcp,a
; aspetta NEW DATA=1 (dato non pronto all’invio)
main3
ldi wdog,0ffh
;11111111b - 255
jrr 0,port_c,main3
; ACK=0 (circuito pronto a ricevere)
res 2,port_c
; aspetta NEW DATA=0 (Toj- byte meno significativo del tempo di
; attesa)
main4
ldi wdog,0ffh
;11111111b – 255
; viene selezionato il TIMER 0 (A0=0 e A1=0)
res 2,port_b
res 3,port_b
jrs 0,port_c,main4
; memorizzazione di Toj- nel TIMER 0 (impulso sul canale WR)
res 7,port_b
set 7,port_b
; ACK=1 (Toj- ricevuto)
set 2,port_c
; aspetta NEW DATA=1 (dato non pronto per l’invio)
main5
ldi wdog,0ffh
;11111111b - 255
jrr 0,port_c,main5
; ACK=0 (circuito pronto a ricevere)
res 2,port_c
; aspetta NEW DATA=0 (Toj+ pronto per l’invio)
main6
ldi wdog,0ffh
;11111111b - 255
jrs 0,port_c,main6
; memorizzazione di Toj+ nel TIMER 0 (impulso sul canale WR)
res 7,port_b
set 7,port_b
; ACK=1 (Toj+ ricevuto)
set 2,port_c
; aspetta NEW DATA=1 (dato non pronto per l’invio)
main7
ldi wdog,0ffh
;11111111b - 255
jrr 0,port_c,main7
; ACK=0 (circuito pronto a ricevere)
res 2,port_c
aspetta NEW DATA=0 (Tj-(buffer B0) e Tj+(buffer B1) pronto per
; l’invio)
main8
ldi wdog,0ffh
;11111111b – 255
viene selezionato il TIMER 1 (A0=1 e A1=0)
set 2,port_b
jrs 0,port_c,main8
; memorizzazione di Tj- ( byte meno significativo del tempo
; d’iniezione) nel TIMER 1 (impulso sul canale WR)
res 7,port_b
set 7,port_b
; buffer B0 disabilitato – buffer B1 abilitato
set 4,port_b
25
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
res 5,port_b
; memorizzazione di Tj+ ( byte più significativo del tempo
; d’iniezione) nel TIMER 1 (impulso sul canale WR)
res 7,port_b
set 7,port_b
; ACK=1 (Tj- e Tj+ ricevuti)
set 2,port_c
; aspetta NEW DATA=1 (dato non pronto per l’invio)
main9
ldi wdog,0ffh
;11111111b - 255
jrr 0,port_c,main9
; ACK=0 (circuito pronto a ricevere)
res 2,port_c
; aspetta NEW DATA=0 (Tc- e Tc+ pronti all’invio)
main10 ldi wdog,0ffh
;11111111b – 255
; viene selezionato il TIMER 2 (A0=0 e A1=1)
set 3,port_b
res 2,port_b
jrs 0,port_c,main10
; memorizzazione di Toc- ( byte meno significativo del tempo di
; carica della bobina d’accensione) nel TIMER 2 (impulso sul canale
; WR)
res 7,port_b
set 7,port_b
; buffer B0 abilitato – buffer B1 disabilitato
set 5,port_b
res 4,port_b
; memorizzazione di Toc+ ( byte più significativo del tempo di
; carica della bobina d’accensione) nel TIMER 2 (impulso sul canale
; WR)
res 7,port_b
set 7,port_b
; ACK=1 (Toc- e Toc+ ricevuti)
set 2,port_c
; aspetta NEW DATA=1 (dato non pronto per l’invio)
main11 ldi wdog,0ffh
;11111111b - 255
jrr 0,port_c,main11
; ACK=0 (circuito pronto a ricevere)
res 2,port_c
; Abilitazione degli interrupt tramite il registro ior
ldi ior,010h
;00010000b - 16
; INJ ON=0 - comando iniezione nullo
res 3,port_c
; programmazione effettuata
ldi progrON,0ffh
;11111111b - 255
; aspetta LD=1 (fine programmazione della CPU0)
main12 ldi wdog,0ffh
;11111111b - 255
jrr 1,port_b,main12
jp main1
; vettori di interruzione
.org 0ff0h
jp tad_int
jp art_int
jp CS_int
jp AB_int
.org 0ffch
jp nmi_int
26
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
jp inizio
.end
C.7 INIEZIONE MULTIPLA: IL FILE multi.asm
; Questo software si occupa di controllare un’iniezione di tipo
multijet
; VARIABILI DELLA CPU0
a
x
y
v
w
port_a
port_b
port_c
pdir_a
pdir_b
pdir_c
popt_a
popt_b
popt_c
ior
dwr
addr
adcr
pcs
tcs
tscr
armc
ars0
ars1
wdog
arrc
arcp
drbr
.title "cpu0_multi"
.w_on
.def
0ffh ; accumulatore (par. 4.2)
.def
080h ; registro x
.def
081h ; registro y
.def
082h ; registro v (non utilizzato)
.def
083h ; registro w (non utilizzato)
.def
0c0h ; porta a (par 4.2.1)
.def
0c1h ; porta b
.def
0c2h ; porta c
.def
0c4h ; registro di direzione porta a (par. 4.2.2)
.def
0c5h ; registro di direzione porta b
.def
0c6h ; registro di direzione porta c
.def
0cch ; registro delle opzioni della porta a (par. 4.2.3)
.def
0cdh ; registro delle opzioni della porta b
.def
0ceh ; registro delle opzioni della porta c
.def
0c8h ; registro degli interrupt (par. 4.2.4)
.def
0c9h ; registro data rom window (non utilizzato)
.def
0d0h ; dato convertitore A/D (non utilizzato)
.def
0d1h ; registro convertitore A/D (non utilizzato)
.def
0d2h ; registro del timer (non utilizzato)
.def
0d3h ; contatore del timer (non utilizzato)
.def
0d4h ; registro di controllo del timer(non utilizzato)
.def
0d5h ; registro di controllo dell’AR timer (par. 4.2.7)
.def
0d6h ; registro 1 di stato dell’AR timer (par. 4.2.8)
.def
0d7h ; registro 2 di stato dell’AR timer (par. 4.2.8)
.def
0d8h ; registro del watchdog (par.4.2)
.def
0d9h ; registro di ricaricamento dell’AR timer (par. 4.2.5)
.def
0dah ; registro di comparazione dell’AR timer (par. 4.2.6)
.def
0e8h ; registro del banco dei dati Ram/EEprom (par. 4.2.9)
; VARIABILI DEL PROGRAMMA
savea
saveb
savec
saved
progron
dj
oldxp
xp
.def
084h
.def
085h
.def
086h
.def
087h
.def
088h
.def
089h
.def
08ah
.def
08ah
.org 0080h
; SETTAGGIO INIZIALE
inizio
ldi wdog,0ffh
Configurazione della porta A.
I pin della porta A (D0..D7) vengono settati come input ad alta
impedenza.
Non ci sono interrupt.
ldi port_a,11111111b
ldi pdir_a,00000000b
27
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
ldi potp_a,00000000b
Configurazione della porta B.
A0(PB2),A1(PB3),CE0(PB4),CE1(PB5),WR(PB7) sono output push-pull.
LD(PB1) e S1(PB6) sono input con pull-up.
INJ(PB0) è un input con pull-up configurato come interrupt.
ldi port_b,10111100b
ldi pdir_b,10111100b
ldi potp_b,10111101b
Configurazione della porta C.
INJ_NOW(PC1), ACK(PC2) e INJ_ON(PC3) sono output push-pull.
NEW_DATA(PC0) e BOB(PC4) sono input con pull-up.
ldi port_c,00001110b
ldi pdir_c,00001110b
ldi potp_c,00001110b
La CPU0 non è stata ancora programmata quindi progron vale 0.
Disabilitazione di tutti gli interrupt tranne il NMI finché la
programmazione non si conclude.
Ldi progron,00000000b
ldi ior,00000000b
reti
jp main
; gestori di interruzione
; subroutine ab_int
ab_int ld savec,a
Se PC3=1 (INJ_ON=1 - iniezione in corso) riprogrammare 82C54.
jrs 3,port_c,int1
Se PC3=0 (INJ_ON=0) lo alzo per far partire il conteggio di Toj.
int0 set 3,port_c
res 3,port_c
jp int2
Programmazione dell’82C54.
Impulso 82C54 WR per memorizzare Toji-.
int1 res 3,port_c
res 7,port_b
set 7,port_b
Toji+ in uscita.
ld port_a,(xp)
inc xp
Impulso 82C54 WR per memorizzare Toji+.
res 7,port_b
set 7,port_b
A0=1 A1=0 (programmiamo il timer 1 (Tji))
res 2,port_b
Tji- in uscita.
ld port_a,(xp)
inc xp
Impulso 82C54 WR per memorizzare Tjires 7,port_b
set 7,port_b
Tji+ in uscita
ld port_a,(xp)
Impulso 82C54 WR per memorizzare Tji+
res 7,port_b
set 7,port_b
inc xp
int2 ld a,savec
28
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
reti
; subroutine nmi_int
nmi_int ld savea,a
Se progrON=1 prosegui altrimenti esci dalla subroutine.
jrs 0,progron,nmin1
jp nmie
Settaggio modalità di funzionamento dell’autoreload timer(modalità
autoreload).
Viene Caricato nell’AR counter il contenuto di arrc, viene abilitato il
clock esterno(S1),viene abilitato l’interrupt di comparazione.
nmin1 ldi armc,11001000b
Carica nel registro di comparazione il dente Zj.
ld a,dj
ld arcp,a
nmie ld a,savea
reti
; subrouitine art_int
art_int ld saveb,a
Alzo INJ_ON (PC3=1).
set 3,port_c
Azzera il flag di AR interrupt.
clr ars0
ld a,saveb
reti
; subroutine tad_int (non utilizzata)
tad_int reti
; subroutine cs_int (non utilizzata)
cs_int reti
; subroutine ini82c54
ini82c54 ld saved,a
A0=A1=1 attivazione modalità di programmazione dell’82C54.
CE0=CE1=1 disabilitazione buffers U8 e U5.
82C54 WR=1.
ld a,port_b
com a
andi a,01000011b
com a
ld port_b,a
La porta A viene settata come output push-pull.
Impostazioni TIMER 0 con mode 1 (segnale basso solo durante il periodo
del conteggio).
ldi pdir_a,11111111b
ldi potp_a,11111111b
ldi port_a,00110010b
Impulso 82C54 WR per memorizzare impostazioni TIMER 0.
res 7,port_b
set 7,port_b
Impostazione TIMER 1 in modalità 1 (segnale basso solo durante il
periodo del conteggio),
ldi port_a,01110010b
Impulso 82C54 WR per memorizzare impostazioni TIMER 1.
res 7,port_b
set 7,port_b
Impostazione TIMER 2 con mode 5 (segnale basso per il periodo di un
clock alla fine del conteggio).
29
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
ldi port_a,10111010b
Impulso 82C54 WR per memorizzare impostazioni TIMER 2.
res 7,port_b
set 7,port_b
La porta A viene settata come input pull-up.
ldi popt_a,00000000b
ldi pdir_a,00000000b
ldi port_a,00000000b
Abilita U5 a pilotare il bus 82C54.
res 4,port_b
ld a,saved
ret
; routine main
main ldi wdog,0ffh
ACK=0 il CEE è pronto a ricevere
INJ_ON=0 conteggio fermo
res 2,port_c
res 3,port_c
call ini82c54
arrc=0 azzeramento ART
Caricamento del valore contenuto in arrc nell’AR counter
Flag di AR interrupts azzerati
Prescaler ratio=1,Rising edge sensitive(S1),usa come clock S1
ldi arrc,0
ldi armc,10000000b
ldi ars0,00000000b
ldi ars1,00000110b
ldi arcp,255
Inizio programmazione da parte del dSPACE
main1 ldi wdog,225
Attendi finchè LD non si abbassa
jrs 1,port_b,main1
Attendi finchè STR on si abbassa (dati pronti)
main2 ldi wdog,255
jrs 0,port_c,main2
Carica Zj nel comparatore e alza l’ACK (dati ricevuti)
Salva Zj nel registro di comparazione(arcp) e nella variabile DJ)
ld a,port_a
set 2,port_c
ld dj,a
ld arcp.a
Aspetta che STR si alzi
main3 jrr 0,port_c,main3
abbassa l’ACK (pronto a ricevere il dato successivo)
res 2,port_c
A0=A1=0 TIMER 0
Aspetta STR basso (dati pronti)
main 4 ldi wdog,255
res 2,port_b
res 3,port_b
jrs 0,port_c,main4
Impulso 82C54 WR per Scrivere TojACK=1 dati ricevuti
res 7,port_b
set 7,port_b
set 2,port_c
30
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Aspetta STR=1
main5 ldi wdog,255
jrr 0,port_c,main5
abbassa l’ACK
res 2,port_c
Aspetta STR=0 (dati pronti)
main6 ldi wdog,255
jrs 0,port_c,main6
Scrivi Toj+
ACK=1 (dati ricevuti)
res 7,port_b
set 7,port_b
set 2,port_c
Aspetta STR=1
main7 ldi wdog,255
jrr 0,port_c,main7
ACK=0 (pronto a ricevere)
res 2,port_c
A0=1 A1=0 TIMER 1
Aspetta STR=0 (dati pronti)
main8 ldi wdog,255
set 2,port_b
jrs 0,port_c,main8
Scrivi TjDisabilita U5 e abilita U8
scrivi Tj+
ACK=1 (dati ricevuti)
res 7,port_b
set 7,port_b
set 4,port_b
res 5,port_b
res 7,port_b
set 7,port_b
set 2,port_c
Aspetta STR=1
main9 ldi wdog,255
jrr 0,port_c,main9
ACK=0 (pronto a ricevere)
res 2,port_c
A0=0 A1=1 TIMER2
ACK=1 (pronto a ricevere)
Aspetta STR=0 (dati pronti)
main10 ldi wdog,255
set 3,port_b
set 2,port_b
jrs 0,port_c,main10
Scrivi TocDisabilita U8 e abilita U5
Scrivi Toc+
ACK=1 (dati ricevuti)
res 7,port_b
set 7,port_b
set 5,port_b
res 4,port_b
res 7,port_b
set 7,port_b
set 2,port_c
31
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
Attendere STR=1
main11 ldi wdog,255
jrr 0,port_c,main11
ACK=0 (pronto a ricevere)
res 2,port_c
Se LD=1 torna all’inizio della programmazione
Aspetta che STR=0 (dati pronti)
main12 ldi wdog,255
jrs 1,port_b,main_fine
jrs 0,port_c,main12
Carica da U5 Tojild a,port_a
ld (xp),a
inc xp
Abilita U8 e disabilita U5.
res 5,port_b
set 4,port_b
Carica da U8 Toji+
ld a,port_a
ld (xp),a
inc xp
ACK=1 (dati ricevuti)
set 2,port_c
Aspetta STR=1
main13 ldi wdog,255
jrr 0,port_c,main13
ACK=0 (pronto a ricevere)
res 2,port_c
Aspetta STR=0
main14 ldi wdog,255
jrr 0,port_c,main14
Ricevi Tji- su U8
ld a,port_a
ld (xp),a
inc xp
Abilita U5 e disabilita U8
set 5,port_b
res 4,port_b
Ricevi Tji+ su U5
ld a,port_a
ld (xp),a
inc xp
ACK=1 (dati ricevuti)
set 2,port_c
Attendi STR=1
main15 ldi wdog,255
jrr 0,port_c,main15
ACK=0 (circuito pronto)
res 2,port_c
Se LD=0 torna a main12
main16 ldi wdog,255
jrr 1,port_b,main12
main_fine ldi wdog,255
INJ_ON=0 (configurazione iniziale)
res 3,port_c
Abilita interrupt
32
IL SOFTWARE DI COMUNICAZIONE TRA dSAPCE e CEE
INJ(PB0) viene configurato come interrupt attivabile sul fronte di
discesa (falling edge sensitive)
ldi ior,00010000b
Programmazione effettuata
ldi progron,255
xp torna a puntare al primo indirizzo
ld a,oldxp
ld xp,a
La porta A viene settata come output push-pull(1,1,X tab 11)
Carico Toj- in uscita
ldi pdir_a,11111111b
ldi potp_a,11111111b
ldi port_a,(xp)
inc xp
A0=A1=0 (programmiamo il timer 0 (Toj))
res 2,port_b
res 3,port_b
jp main1
; vettori di interruzione
.org 0ff0h
jp tad_int
jp art_int
jp cs_int
jp ab_int
.org 0ffch
jp nmi_int
jp inizio
.end
33