• Nenhum resultado encontrado

5.6.1

Unidade auxiliar de controlo

Todos os algoritmos implementados na unidade auxiliar de controlo foram realizados no Code

Composer Studio versão 5 da Texas Instruments em linguagem C. A Figura 5.26 apresenta o flu-

xograma do algoritmo implementado no microcontrolador TMS320F28069 (unidade auxiliar de controlo). Este é constituído por um programa principal, em que numa primeira fase, são inici- alizadas todas as variáveis, configurados os periféricos utilizados, os módulos de comunicação série SPI e SCI e configuradas todas as interrupções.

Finalizada essas configurações iniciais, a unidade auxiliar de controlo entra em loop infinito, aguardando pela trama de comunicações proveniente da unidade de controlo principal através do protocolo de comunicações assíncrono série SCI. O primeiro byte da trama de comunicações é interpretado pela unidade auxiliar, tendo como função desencadear uma das cinco funções implementadas.

A Tabela 5.1 apresenta uma breve descrição das funções implementadas, assim como, a dimen- são da trama de comunicações por dispositivo proveniente da unidade de controlo principal e o respetivo byte de comando. De referir que uma descrição detalhada de todas as funções se encontram no anexo E.

Tabela 5.1: Funções implementadas na unidade auxiliar de controlo.

Função Dimensão Byte de Descrição

comando

Identificação 1 01H Responsável pela identificação do número

de dispositivos e a sua posição na cadeia.

Scan Tensão 1 02H Responsável pela leitura das tensões das

células que constituem o pack de baterias.

Scan Temperatura 1 03H Responsável pela leitura das temperaturas das

células que constituem o pack de baterias.

Set PWM 7 04H Responsável pela definição da frequência e

ciclo de trabalho.

Set Balanceamento 8 05H

Responsável pela definição da duração do tempo de balanceamento e das células que se pretende balancear

O programa ainda é composto por duas rotinas de interrupções. A rotina de interrupção SCI, associada ao módulo de comunicação assíncrono SCI, é responsável pela leitura da trama de comunicações proveniente da unidade de controlo principal. Já rotina de interrupção SPI, é uma rotina de interrupção por hardware, associada ao flanco descendente do gpio20. A entrada

gpio20 é configurada como input associada à saída do dispositivo mestre (data ready) que indica

apontador_SCI !=0 apontador_SCI = bytes esperados Identificação Sim Sim Início Limpa Rdata e apontador_SCI Scan Tensão Scan Temperatura Set PWM Configura portas SCI

Inicializa Variáveis Define time_bal Rdata_SCI[1]=1 Sim Sim Set Balanceamento Rdata_SCI[1]=2 Rdata_SCI[1]=3 Rdata_SCI[1]=4 Rdata_SCI[1]=5

External Interrupt SCI

apontador_SCI =+1

External Interrupt SPI

Return

Transmite =00hSPI

Return

Rdata_SCI[apontador_SCI]=Byterecebido

apontador_SPI =+1

Rdata_SPI[apontador_SPI]=Byterecebido Sim Limpa Rdata e apontador_SCI Limpa Rdata e apontador_SCI Limpa Rdata e apontador_SCI Limpa Rdata e apontador_SCI Sim Sim Sim apontador_SCI = bytes esperados

Figura 5.26: Fluxograma do programa implementado na unidade auxiliar de controlo.

5.6.2

Unidade principal de controlo

Todos os algoritmos implementados na unidade principal de controlo foram desenvolvidos em ambiente de programação Matlab. Optou-se por apresentar o fluxograma principal, algoritmo implementado na unidade principal de controlo, em quatro segmentos. Esta opção deve-se ao facto de este ser extenso, possibilitando-se assim uma melhor compreensão com uma análise por segmentos.

O primeiro segmento do fluxograma do algoritmo implementado na unidade principal de con- trolo, ilustrado na Figura 5.27, é responsável pelas configurações iniciais, assim como na deter- minação do número de dispositivos presente na cadeia (dispositivos ISL94212).

Inicialmente são inicializadas todas as variáveis, configuradas as portas de comunicação SCI e definido o tempo de duração do processo de balanceamento (Time_bal). Após concluídas as tarefas referidas anteriormente, é enviado o byte de comando (01h) responsável por desenca- dear a função identificação na unidade auxiliar de controlo. Sabendo que esta rotina devolve um byte (que corresponde ao número de dispositivos presentes) a unidade principal de controlo aguarda pela resposta da unidade auxiliar de controlo.

Caso a resposta seja diferente de zero, o algoritmo prossegue para o segundo segmento do algoritmo. Caso contrário, o algoritmo realiza mais duas tentativas. Se o número máximo de

tentativas for alcançado é apresentada uma mensagem de erro e interrompido o processo.

espera Resposta

Início

Byterecebido!= 0

j == 3

Configuração Portas SCI

Definir Time_bal

Iniciar Variáveis

Função Indentificação Define InputBufferSize

Incrementa j Limpa InputBuffer Size

Display Erro

Número dispositivos=Byterecebido

Figura 5.27: Fluxograma do programa implementado na unidade principal de controlo – Primeiro Segmento.

O segundo segmento do algoritmo, ilustrado na Figura 5.28, inicialmente é responsável pela aquisição inicial das tensões e da temperatura das células do pack de baterias. Para tal é enviado o byte de comando (02h) que vai desencadear a função Scan Tensão na unidade auxiliar de controlo. A dimensão do buffer de entrada da porta SCI é definido como 40 bytes por cada dispositivo.

Realizada a aquisição das tensões, o algoritmo, envia o byte de comando (03h) o qual vai ativar a função Scan Temperaturas. Nesta situação, a dimensão do buffer de entrada da porta SCI é definido como 24 bytes por cada dispositivo.

Realizadas as leituras iniciais, o algoritmo entra em ciclo infinito até que um dos critérios de paragem definidos (equação 5.2 e 5.3) sejam alcançados. Quando esta situação ocorre, o al- goritmo comunica com a unidade de potência (fonte programável DC SL 500-5.2) através do protocolo de comunicação SCPI, com o comando STOP. Caso os critérios de paragem não se verifiquem o algoritmo transita para o terceiro segmento.

i <= Número dispositivos Define InputBufferSize Scan Tensão Define InputBufferSize Critérios de Paragem =1 Captura CPU Clock Inicial

Power Supply OFF

Stop Espera Resposta Scan Temperatura Espera Resposta i <= Número dispositivos Sim Sim Sim

Figura 5.28: Fluxograma do programa implementado na unidade principal de controlo – Segundo Segmento.

O terceiro segmento do algoritmo, ilustrado na Figura 5.29, em primeiro lugar, começa por impor à unidade de potência a tensão com o valor de 4.2 x 12 x número de dispositivos.

Uma vez que o balanceamento das células influencia as leituras das tensões, foi criado um desfasamento de 5 segundos entre a duração do processo de balanceamento (definido como 1 minuto) e a aquisição dos valores das tensões das células. Deste modo, a aquisição das leituras das tensões das células que constituem o pack de baterias é realizada com uma frequência definida por 1/(time_bal+5). Com todos os processos de leitura finalizados, o algoritmo transita para o quarto e último segmento.

Define InputBufferSize

Define InputBufferSize

Captura CPU Clock Inicial

mod(segundos,10)=0

Captura CPU Clock

Calcula segundos

Algoritmo Proposto

mod(segundos,x)=0

Power Supply Valor Tensão

Scan Tensão Espera Resposta Scan Temperatura Espera Resposta i <= Número dispositivos i <= Número dispositivos x = tempo_bal+5

Figura 5.29: Fluxograma do programa implementado na unidade principal de controlo – Terceiro Segmento.

Por último, o quarto segmento, ilustrado na Figura 5.30, é responsável pela determinação das células que se pretende balancear. Para tal é formado um vetor linha com dimensão 12 x número de dispositivos. Este é formado com uns e zeros, caso se verifiquem, ou não, as condições de balanceamento previamente definidas.

Formado esse vetor, o algoritmo prossegue para as funções Get Balance Time Register e Get

Balance Status Register. A função Get Balance Time Register define a duração do processo de

balanceamento, que pode ser configurado com uma duração que pode variar entre 0.33 e 42.33 minutos (Time_bal). Já a função Get Balance Statuses Register contém a informação das células que se pretende equilibrar. Ambos os algoritmos se encontram descritos no anexo E.

Estas funções devolvem cada uma 4 bytes por cada dispositivo. Assim que esses bytes são determinados, é construída a trama de comunicações e transmitida para a unidade auxiliar de controlo.

V(j)>=média+dvp/2 Balance_array = 0(j) z<=12xnúmero dispositivos Construir Trama i <=17 Sim TransmiteSCI= Byte (j)

Balance_array = 1(j) Balance Time Register

Balance Status Register

z<=12xnúmero dispositivos

Sim

Return Sim

Figura 5.30: Fluxograma do programa implementado na unidade principal de controlo – Quarto Segmento.

Documentos relacionados