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