• Nenhum resultado encontrado

Como Utilizar Uma Variável de Barramento?

No documento Robotização de uma cadeira de rodas (páginas 161-165)

A utilização de uma variável de barramento por uma tarefa qualquer é realizada por intermédio de funções especializadas na manipulação de tais variáveis. Estas funções são:

HANDLE_CAN_MSG InsertOnBus (unsigned int Id,unsigned int

TimerTrigger,void *DataPointer,char DataLength, char Envia), detalhada

anteriormente;

void CANMSGSemPost (HANDLE_CAN_MSG HandleMSG): Função que

libera semáforo da mensagem identificada pelo HandleMSG, que é um número inteiro que corresponde ao índice que a mensagem tem no buffer de controle. Esta função não retorna valor;

void CANMSGSemPend (HANDLE_CAN_MSG HandleMSG): Função que

marca o semaforo da mensagem identificada pelo HandleMSG, que é um número inteiro que corresponde ao índice que a mensagem tem no buffer de controle. Esta função não retorna valor;

char CANDataAvaliable (HANDLE_CAN_MSG HandleMSG): Função que

verifica se a variável, cuja mensagem é identificada pelo HandleMSG no

buffer de controle, está disponível, ou seja, se está atulizada. Esta função

retorna 1 se o valor da variável está disponível, e 0 se o valor não foi atualizado;

Portanto, para uma tarefa qualquer compartilhar na rede suas variáveis, primeiramente deve-se disponibilizar na rede as variáveis que ela possui e que outros nós necessitam, usando a função InsertOnBus, Assim, quando for recebido um RTS com identificador destas mensagens o controlador de variáveis irá enviá-la pela rede. Para esta situação deve-se declarar o TimerTrigger desta função como 0, visto que esta variável não será atualizada pela rede.

Em seguida, devem-se inserir as variáveis com atualização pela rede também com o uso da função InsertOnBus, contudo, deve-se alocar a variável a ser atualizada exatamente como ela foi alocada pelo nó fonte. O TimerTrigger desta variável deve ser preenchido com o período de atualização desta.

Feita a inserção das variáveis no barramento, o seu uso passa a ser compartilhado pelo controlador de variáveis de barramento. Diante disso, antes do acesso a estas variáveis, deve-se usar a função CANDataAvaliable para verificar a atualização de seus dados. Se a variável não estiver atualizada a tarefa deve tomar as providencias necessárias. Se a variável estiver atualizada a tarefa deve usar primeiramente a função CANMSGSemPend, que impede que outras tarefas modifiquem os dados enquanto estão sendo lidos, assim evitando processamento de dados instáveis, e depois a função CANMSGSemPost, que libera a variável para ser atualizada por outras tarefas.

Seguindo esta seqüência de instruções, todas as tarefas podem usufruir da atualização automática de suas variáveis, e assim, controlar e ler dados de outros nós de rede independente de onde eles estejam hospedados.

4.5.1Parâmetros da Implementação CAN Para a Cadeira de Rodas

Como mencionado anteriormente, a taxa da rede CAN implementada neste trabalho é de 250 . Outro parâmetro relevante é o TICK do controlador de variáveis, que tanto na PP quanto na PCP é de 2 $ . Em ambas as placas foram disponibilizadas buffers de controle de variáveis de 16 posições. Isso implica que esta aplicação pode suportar até 16 mensagens CAN. Os buffers de recepção e transmissão do driver MCP2515 têm 16 posições em ambas as placas, ou seja, pode acumular até 16 mensagens recebidas e 16 mensagens a serem transmitidas. Não foram utilizadas máscaras ou filtros nesta aplicação, visto o pequeno número de mensagens. Estes parâmetros são configuráveis e podem sofrer alterações em outras aplicações. Foram implementadas 9 mensagens e suas descrições estão na Tabela 14.

Tabela 14: Tabela das mensagens CAN implementadas e suas descrições.

ID CAN

(Hex) Variáveis Descrição das variáveis

Comprimento (Bytes) Periodo de Atualização (ms) Tarefa Origem Placa Orige m 0x0200 TensaoAlimentacao Tensão de alimentação das placas de controle

dos periféricos e processamento 2 50 interrupção do microcontr olador da Placa de Processam ento PP 0x02AA Segundos, minutos, Horas, Dia,Mes e Ano dados o RTC da PP 7 200 Relógio PP

0x0111 Vre,Vrd Velocidade das rodas em

mm/s 8 2 TaskControl eDosEncod ers PCP 0x0113 IR.Distancia0, IR.Distancia1, IR.Distancia2 e IR.Distancia3

Dados de distancia lidos pelos sensores infravermelho 8 100 TaskControl eDosEncod ers PCP 0x0123 Posicao.X e Posicao.Y posição da cadeira de rodas medida pela tarefa hodômetro em (mm,mm) 8 50 TaskControl eDosEncod ers PCP 0x0124 Teta Angulo de orientação da cadeira de rodas em radianos 4 50 TaskControl eDosEncod ers PCP 0x0110 UeCAN, UdCAN valores de PWM para motor esquerdo e direito 8 2 Controlado r PP 0x0109 MotoresComando.B yte

Comando diretos para

os motores 1 20

Controlado

r PP

0x0115 MotoresStatus.Byte Status dos motores 1 20 DriverMoto

res PCP

4.6

Conclusão

A rede CAN é muito robusta e confiável, visto que possui vários métodos de detecção de erros e meio físico apropriado para aplicações na indústria. Sua arquitetura de endereçamento de mensagens, e não de nós físicos, permite a criação das variáveis de barramento.

Para aplicações embarcadas, nas quais vários módulos diferentes se comunicam entre si e desempenham tarefas distintas, a arquitetura de variáveis de barramento se mostrou muito

eficaz, visto que especializa as tarefas, ou seja, os serviços de controle do barramento, controle de erros e gestão de comunicação são desempenhados por uma única tarefa especializada. Isso permite que o programador desenvolva as demais tarefas de modo independente do protocolo de rede.

As funcionalidades da arquitetura apresentadas somente foram possíveis devido ao

kernel de tempo real, que garante o chaveamento das tarefas, sinalização de eventos e gestão

5

O SISTEMA OPERACIONAL DE TEMPO

REAL

A cadeira de rodas é composta por vários sistemas que usam sensores e algoritmos que, respectivamente, interagem entre si e são executados de modo aleatório. Contudo, alguns dos algoritmos que compõe a cadeira de rodas têm restrições severas de tempo de execução, ou seja, devem ser executadas em tempo real, sendo estas restrições

impostas de acordo com sua função. Objetivando dar garantida de execução a tais algoritmos em tempo real, foi usado um kernel de tempo real. Neste Capítulo o

kernel utilizado é abordado assim como

suas funções na cadeira de rodas e como foi garantida a execução das tarefas em tempo real.

No documento Robotização de uma cadeira de rodas (páginas 161-165)