• Non ci sono risultati.

Capitolo 4 Pacco batteria SUMA

4.3 SOFTWARE UTILIZZATO

4.3.4 Task utilizzati

Come accennato il firmware che è caricato sul BMS è stato realizzato interamente nel DII [74]. I task che compongono tale firmware sono:

• Task di gestione della MMU. • Task di gestione del bilanciamento. • Task di gestione della comunicazione CAN. • Task di gestione del sensore di corrente. • Task di stima del SoC.

• Task main ed organizzazione generale del sistema.

In questo paragrafo si intende elencare le funzioni generali di tali task, per una visione più approfondita si prenda visione della tesi “Progetto e realizzazione di un Battery Management System modulare per batterie di imbarcazioni a propulsione elettrica” di Marco Zeni [74].

Task di gestione della MMU [74]:

Si ricorda che all’interno della stringa, l’acquisizione delle tensioni di cella e delle loro temperature è affidata alle MMU. Esse hanno principalmente il compito di campionare i dati e trasmetterli alla scheda PMU, dove vengono acquisiti ed elaborati. Inoltre, le MMU realizzano il bilanciamento passivo dei moduli. Il task che si occupa della gestione delle MMU dovrà, prima di tutto, assicurare una corretta e continua comunicazione con quest’ultime. Dopodiché esso si occuperà dell’invio dei comandi di campionamento dei dati e della rispettiva ricezione degli stessi da parte delle MMU.

94

Task di gestione del bilanciamento [74]:

Esistono due modalità di bilanciamento: manuale ed automatica.

La modalità di bilanciamento manuale prevede di acquisire dall’esterno l’informazione specifica su quale cella di quale MMU andare ad attivare la relativa resistenza di bilanciamento. Questa modalità è stata prevista per consentire ad un’altra unità di controllo, di livello superiore alla PMU, di decidere la strategia di bilanciamento da adottare.

La modalità di bilanciamento automatica, invece, viene sempre attivata da un comando esterno, ma lascia alla PMU l’onere di gestire il bilanciamento delle celle: è stato implementato nel firmware un algoritmo di bilanciamento autonomo che in seguito andremo a descrivere dettagliatamente.

Quando viene attivato il task, viene acquisita la struttura globale che contiene l’informazione sul comando di bilanciamento che è stato ricevuto. A questo punto il ciclo For scorre tutte le MMU e, per ognuna, applica la strategia di bilanciamento richiesta dai comandi ricevuti. Dopo aver aggiornato lo status di bilanciamento di tutti i moduli, il task verifica se al ciclo successivo altri moduli dovranno essere bilanciati. In caso positivo, l’esecuzione del task di bilanciamento prosegue finché tutti i comandi ricevuti

dall’interfaccia non sono stati eseguiti. In caso negativo, il task torna in sospensione

Task di gestione della comunicazione CAN [74]:

La trasmissione dei dati che il firmware della PMU impacchetta per l’interfaccia si basa sull’utilizzo di una coda, in inglese “queue”.

All’avvio del sistema operativo, la coda viene creata in modo tale che possa contenere i messaggi da inviare via CAN-bus; gli viene assegnato anche un numero di elementi massimo che può contenere. Una volta creato, il task di invio entra in un ciclo infinito nel quale ciclicamente controlla se ci sono messaggi da trasmettere nella queue. In caso affermativo, viene estratto un messaggio dalla coda ed il task tenta di inviarlo tramite la periferica CAN, andando a vedere se almeno uno dei 3 buffer di invio della periferica è libero. Altrimenti il task si sospende per 1 ms, eliminando le attese attive.

Nel caso in cui, invece, non ci siano messaggi nella queue da trasmettere il task di trasmissione, anche stavolta, si sospende per 1 ms, lasciando libera la CPU per altri task.

La ricezione dei messaggi dal CAN-bus dell’interfaccia di controllo è affidata ad un task dedicato, che svolge l’operazione di un parcer: riceve i dati, li spacchetta e ne acquisisce il contenuto. Generalmente i messaggi ricevuti dall’interfaccia esterna sono comandi che servono a far eseguire una determinata operazione alla PMU. Partendo dall’inizio del processo di ricezione, la periferica CAN viene settata per generare un

interrupt ogni volta che un messaggio viene ricevuto. L’handler dell’interrupt, quando entra in esecuzione, verifica che ci sia stata effettivamente la ricezione di un messaggio e su quale delle due periferiche CAN. In caso affermativo il messaggio viene acquisito dall’handler che prova ad inserirlo in una queue dedicata ai messaggi ricevuti dall’interfaccia: se la queue non è piena, il messaggio vi viene inserito e l’handler termina. A questo punto entra in gioco il task di ricezione che, ciclicamente, controlla se ci sono elementi nella coda di ricezione sopra citata, altrimenti si sospende per 1 ms per evitare le attese attive. Se la queue contiene dei messaggi, il task ne estrae uno alla volta e, per ognuno di essi, viene verificata la sua provenienza: se il messaggio arriva dall’interfaccia (o dalla PMU) allora viene spacchettato, altrimenti viene scartato.

Per mettere in atto questo tipo di comunicazione con l’interfaccia di controllo, sono stati creati una serie di messaggi customizzati per questa specifica applicazione e sono elencati di seguito.

95

Task di gestione del sensore di corrente [74]:

Il task che si occupa della gestione del sensore di corrente è suddiviso in due sezioni principali, entrambe all’interno di un ciclo infinito.

La prima sezione si occupa della lettura del settaggio presente sul sensore, la confronta con le impostazioni desiderate ed invia i cambiamenti necessari. Al termine di questa procedura, se è andato tutto bene, la configurazione viene salvata in memoria nel sensore tramite l’invio di un comando di STORE e si passa alla seconda sezione. Se, invece, c’è stato un errore la procedura viene ripetuta.

La seconda sezione invia al sensore il comando di trigger per acquisire le misure. Adotta dei meccanismi di auto-sospensione per poter dare al task main il controllo sulla temporizzazione del campionamento dei dati.

Il sensore può effettuare, in caso di comando, una trasmissione di tutti i suoi registri di stato interni, aggiornando la PMU su eventuali suoi errori interni. Il comando può arrivare dall’interfaccia di controllo.

Task di stima del SoC [74]:

Il BMS esegue un algoritmo di stima del SoC di tipo Mixed algorithm che combina il Coulomb-Counting (CC) con Correzione OCV. Il task utilizza una Lookup Table (LUT) dove vengono memorizzate le informazioni necessarie della curva OCV-SoC. Per il metodo CC utilizza il sensore di corrente.

I valori calcolati vengono resi disponibili al sistema.

Task main ed organizzazione generale del sistema [74]:

Il task main è il coordinatore di tutto il sistema della SMU. I suoi compiti sono molteplici:

• Gestire l’attivazione dei task che necessitano di una opportuna temporizzazione.

• Impacchettare ed inviare tutte le informazioni della stringa all’interfaccia di controllo, secondo il protocollo di comunicazione già visto nel paragrafo della comunicazione CAN-bus.

• Utilizzare le informazioni acquisite dalle MMU e dal sensore di corrente per stabilire lo stato in cui si trova la String Management Unit.

• Eseguire determinate funzioni a seconda dello stato in cui si trova la Pack Management Unit. Il task main si occupa anche della preparazione dei messaggi da inviare sul CAN-bus verso l’interfaccia di controllo.

Per la Pack Management Unit sono stati definiti 5 stati operativi in cui essa può ritrovarsi, a seconda delle operazioni che sta eseguendo:

• Initialization (INIT). • Waiting (WAIT). • Error (ERROR). • Charging (CHARGE). • Discharging (DISCHARGE).

96

Figura 78 Schema logico del task MAIN [74]

Documenti correlati