EGSE

1. Introdução

Os equipamentos de suporte em solo EGSE (Eletronic Ground Support Equipment) são utilizados para aquisitar e simular (emular) dados do satélite. Será feito o desenvolvimento de EGSEs para os equipamentos do satélite, e para tal será utilizado o software LabView e equipamentos como kits de aquisição de dados, fonte programável, entre outros. A Figura 1 mostra os equipamentos do satélite em um diagrama de blocos.

EGSE_figura1

Figura 1 - Equipamentos do satélite (Clique para expandir)

 

As comunicações entre os blocos dos equipamentos com os computadores (cube computer e nano mind) são SPI, I2C e USART. Portanto, os EGSEs que serão desenvolvidos em LabView precisam se comunicar através destes protocolos. No software, os programas são chamados VIs (Virtual Instruments). Inicialmente, foram desenvolvidos VI’s para poder executar estes protocolos de comunicação.

2. Implementação dos protocolos de comunicação

2.1.   Comunicação SPI

Foram desenvolvidos dois VIs em LabView para se fazer a comunicação do Kit NI Elvis II através do barramento SPI com o kit AVR. Um programa utiliza o NI Evils II como mestre, enquanto o outro programa utiliza o AVR como mestre. Os VIs interpretam apenas valores decimais. A Figura 2 mostra a tela de interface.

 

EGSE_figura2

Figura 2 - Interface do LabView 

 

Nesta tela tem-se os campos para entrar com as informações necessárias, como o número de bits a ser usado, o dado a ser escrito, divisor do clock para ajuste da frequência desejada (na figura, o divisor é 23 para se obter um clock de 1MHz), a seleção do chip select e o modo de operação. A Figura 3 mostra o código de programação do VI.

 

Figura 3 - Código de programação do VI no LabView

 

Nesta tela, usa-se o bloco Initialize port para iniciar a porta de comunicação, então usa-se o bloco IP port para se atribuir as funcionalidades dos pinos de GPIO e se atribuir o clock. Após isto, é utilizado o bloco configure port para se configurar a porta de comunicação, e então, dentro de uma estrutura de repetição while são utilizados os blocos write port (para se escrever), o bloco arm port para se preparar a porta para realizar outra operação, e o bloco read port para se realizar uma leitura. O bloco arm port é sempre necessário, pois o programa não roda sem realizar as duas operações (escrita e leitura). A Figura 4 mostra a transmissão no osciloscópio.

Figura 4 - A transmissão mostrada no osciloscópio

 

EGSE_tabela1

Figura 4

 

Conforme visível na Figura 4, primeiramente para se fazer a comunicação é necessário se escolher um dispositivo e para isso se impõem o nível lógico “0” no chip select (D3) e assim se começa a transmissão. Apenas há sinal de clock (D0) durante a transmissão, sendo 8 clocks por transmissão (palavras de 8 bits). Como não se realizou nenhuma leitura, o MISO (D1) se manteve em zero. No exemplo da Figura 4, foi escrito no MOSI (D2) o número 170, em decimal, que é igual a 10101010, em binário. Como pode-se ver circulado em vermelho, no primeiro clock ele estava em 1, no segundo em 0 e assim sucessivamente, até o último (oitavo) clock. No próximo VI (Figura 5) o AVR foi utilizado como mestre e o kit NI Elvis como escravo.

 

EGSE_figura5

Figura 5 - AVR como mestre e kit NI Elvis como escravo

 

Nesta tela de interface (Figura 5), se entra apenas com o modo de operação e o número de bits a ser escrito. A Figura 6 mostra o código de programação do VI.

 

EGSE_figura6

Figura 6 - Código de programação do VI

 

Nesta tela (Figura 6) o código de programação se manteve semelhante ao anterior. Implementou-se uma lógica de verificação do dado recebido para se escrever uma constante (dependendo do dado lido): caso ele receba o dado esperado "97" ele escreve "65"; caso contrário, ele ira escrever "120". Na Figura 7 segue a saída debug do AVR.

 

EGSE_figura7

Figura 7 - Saída debug do AVR

 

2.1.   Comunicação I2C

Foram desenvolvidos programas em LabView para se fazer a comunicação do kit NI Elvis II através do barramento I2C com o kit AVR. O programa utiliza o NI Evils II como mestre e o AVR como escravo. A comunicação I2C no modo Slave está em fase de implementação. Obs.: O VI interpreta apenas valores decimais. Na Figura 8 segue a tela de interface do Vi onde o NI Elvis é o mestre e o kit AVR é o escravo.

 

EGSE_figura8

FIgura 8 - Interface do VI, com o kit NI Elvis atuando como mestre e o kit AVR como escravo

 

Nesta tela (Figura 8), tem-se os campos para entrar com as informações necessárias, como o endereço, o tamanho do endereço (7 bits ou 10 bits), o comando (se vai ser escrita ou leitura, ou os dois), divisor do clock para ajustar o clock em que se irá trabalhar (na figura, foi dividido por 230 para se obter um clock de 1 kHz), o número de bytes a ser lido e escrito e o dado a ser escrito. A Figura 9 mostra o código de programação do VI.

EGSE_figura9

Figura 9 - Código do VI

 

Nesta tela (Figura 9) usa-se o bloco Initialize port para iniciar a porta de comunicação, então usa-se o bloco IP port para se atribuir as funcionalidades dos pinos de GPIO e se atribuir o clock. Após isto, é utilizado o bloco configure port para se configurar a porta de comunicação. Então, dentro de uma estrutura de repetição while, são utilizados os blocos write port (para se escrever), o bloco arm port para preparar a porta para realizar outra operação, e o bloco read port para se realizar uma leitura. O bloco arm port é sempre necessário, pois o programa não roda sem realizar as duas operações (escrita e leitura). Foi utilizado o bloco Wait para colocar o delay de 500 ms. Na Figura 10 segue a comunicação vista no osciloscópio.

EGSE_figura10

Figura 10 - A imagem visto no osciloscópio 

 

Nesta tela (Figura 10), é vista a comunicação pelo osciloscópio, onde a linha verde é o clock (SCL) e a linha amarela a transmissão (SDA). A cada borda de subida do clock, ele transmite uma informação. Circulados em azul estão os clocks que receberam o endereço; em laranja está o clock do comando que vai dizer se vai ser read ou write e em seguida o ack; em vermelho é o byte, e em rosa o ack pra encerrar a transmissão.

2.1.   Comunicação UART

Foi desenvolvido um programa para executar uma leitura de dados do kit AVR pelo barramento UART, mostrado na Figura 11.

 

EGSE_figura11

Figura 11 - Interface do programa que executa leitura de dados pelo barramento UART

 

Nesta tela (Figura 11), entra-se com os dados necessários para se configurar a conexão serial, como a porta selecionada, baud rate, número de bits, bit de parada, se tem paridade, e também se informa o número de bytes a serem lidos e o delay entre uma leitura e outra. A Figura 12 mostra o código de programação do VI.

 

EGSE_figura12

Figura 12 - Código de programação do VI

 

Nesta tela (Figura 12), primeiramente se configura a porta serial pelo bloco Visa Configure serial port; após isto, entra-se em um laço de repetição while, que irá aguardar o delay estipulado e então irá verificar se há bytes na porta serial. Caso haja, o programa irá executar uma leitura pelo bloco Visa read, assim tornando a executar a programação do while, até que se aperte o botão stop.

3. Desenvolvimento dos EGSEs

O primeiro EGSE a ser desenvolvido é o do EPS (Energy Supply System). O EPS é o sistema de fornecimento de energia, e justamente por ser necessário para a alimentação dos demais equipamentos foi escolhido para ser o primeiro dos EGSE a ser desenvolvido. O programa irá receber os comandos (bytes) enviados pelo computador de bordo e retorná-lo telemetrias. Após ter recebido os bytes enviados, o programa deve separá-los e compor os frames. Depois de montados, os frames devem ser verificados e validados, assim identificando qual foi o comando ou telemetria enviado. Após isto, se verifica qual resposta deve ser dada e então monta-se o frame de resposta, que é enviado ao computador de bordo. Enquanto se aguarda pela chegada de equipamentos para realizar a comunicação I2C em modo slave, que é a comunicação utilizada entre o computador de bordo e o EPS, se utilizou um kit AVR para se simular o envio de comandos e recepção de telemetrias do computador de bordo por uma porta USART, assim sendo possível a implementação da lógica. Na tela de interface foi utilizado um tab control, assim dividindo a tela em 3 abas, sendo uma tela por aba. As telas de interface seguem nas Figuras 13, 14 e 15.

EGSE_figura13

Figura 13 -Tela de Interface – Configuração da conexão

 

Nesta tela (Figura 13) se configura a conexão do kit AVR com o programa em LabView; para isto, o usuário deve selecionar a porta COM que está sendo utilizada, informar o baud rate, o número de bits, o bit de parada e se tem paridade. Também há um cluster de erro para exibir o código do erro, caso ocorra.

EGSE_figura14

Figura 14 -Tela de Interface – Recebimento de bytes e montagem dos frames

 

Nesta tela (Figura 14) é exibida a quantidade de bytes na porta serial no momento, a quantidade de bytes já recebido, o valor lido em formato string e convertido para decimal, a porta com que está sendo utilizada, o cluster de erro para mostrar a mensagem de erro caso ocorra um, o flag da montagem do comando e a identificação do comando que foi recebido. Também há 3 arrays, sendo que o primeiro mostra os valores lidos em formato string, o segundo mostra esses valores convertidos em decimais, e o terceiro mostra a quantidade de bytes recebido.

 

EGSE_figura15

Figura 15 -Tela de Interface – Respostas

 

Nesta tela (Figura 15) serão exibidas as respostas a serem enviadas. No código de programação foi utilizado uma máquina de estados, que divide o código de programação em várias telas, sendo cada uma das telas um caso determinado.

 

Figura 16 -Código de programação – Caso 1 (Clique para expandir)

 

O programa começa no caso 1 (Figura 16), em que se configura a conexão com o kit AVR com os dados enviados pelo usuário e seta os valores iniciais das flags. O programa fica parado (em loop) nesta tela, até que usuário aperte o botão "ok”. Após isto o programa passa para o próximo caso (caso 2). Na Figura 17 está o diagrama da máquina de estado implementada a partir do caso 2.

 

EGSE_figura17

Figura 17 - Esquema da máquina de estados

 

As letras C no diagrama indicam o caso no código de programação; os números entre as linhas são os valores em decimal dos bytes esperados para poder seguir ao próximo caso. Como só poderia representar um caractere no diagrama, os valores estão separados por vírgulas; por exemplo, “1,9,2” é “192”. Também não poderiam repetir caracteres, então “6” é na verdade “66”. No diagrama de máquina de estados, uma sequência foi marcada com uma linha vermelha - essa sequência ocorreria se ele recebesse os bytes “66, 36, 128 e 0”, que seria o comando "get config".

EGSE_figura18

Figura 18 - Código de programação – Caso 2 (Clique para expandir)

 

No caso 2 (Figura 18), foi utilizada uma estrutura flat sequence para que a programação siga uma ordem definida. No primeiro quadro do flat verifica-se se há bytes na porta serial; o resultado desta verificação ativa um case, e dentro deste case ele executa a leitura de um byte pelo bloco visa write, exibe o byte lido em um indicador do tipo string e converte o valor desse byte lido para decimal pelo bloco StringToByteArray. No próximo quadro, é comparado o valor do byte recebido em decimal com o valor do byte esperado com o bloco equal; caso seja o valor esperado, o programa segue ao próximo caso determinado, e se não for o valor esperado então ele volta ao caso 1 e fica aguardando o recebimento de um novo comando, e assim sucessivamente, até chegar em um caso de identificação do comando.

 

EGSE_figura19

Figura 19 - Código de programação - Caso 15 (Clique para expandir)

 

O caso 15 (Figura 19) é um dos casos onde se identifica um dos comandos recebidos; o programa informa o comando recebido em um indicador tipo string e seta o valor de identificação do comando na flag. Após isto, segue-se ao caso 21, que é aonde a resposta é montada e enviada.

 

EGSE_figura20

Figura 20 - Código de programação – Caso 21 (Clique para expandir)

 

No caso 21 (Figura 20), pelo flag FC que seleciona a resposta a ser enviada em uma estrutura case, a resposta é enviada ao kit AVR pelo bloco visa write. Também é exibida na tela de interface em sua respectiva aba por um  indicador tipo string.