• Nenhum resultado encontrado

Placa de Controlo Global

No documento Plataforma robótica multi-funcional (páginas 88-97)

Concepção da Plataforma

Power Supply

62 CAPÍTULO 4 CONCEPÇÃO DA PLATAFORMA Conector Pinos

4.3 Software da Plataforma

4.3.2 Placa de Controlo Global

Como mencionado anteriormente, a placa de controlo global tem como finalidade a recolha de informação dos sensores da plataforma (sensores de obstáculos, sensores de chão e sensor do farol), controlo/actuação nos motores e servo motor, leitura de dados odométricos, monitorização de estado das baterias e actuação/estado em/de led’s/interruptores, e execução dos algoritmos de controlo para o comportamentos da plataforma desejados.

Fazendo uso das características do microcontrolador presente na placa (portos I/O, geradores PWM, contadores, timers, ADC, USART, external interrupts, módulo MSSP, etc), desenvolveu-se todo o software necessário de modo a satisfazer os requisitos referidos.

• Sistema de Tracção

Os motores de tracção são controlados de forma diferencial, através de um driver de corrente (Ponte H L293D). O controlo do sentido de rotação é feito por um sinal digital de um porto I/O do microcontrolador. A velocidade aplicada é controlada através de sinais de PWM (Pulse Width Modulation), gerados usando os módulos CCP (Capture, Compare, PWM Module) do microcontrolador, com um período de 30ms.

O robô possui encoders acoplados directamente aos veios dos motores, os quais permitem quantificar o movimento efectuado e sentido de rotação destes. Um canal de cada um destes foi ligado a um porto de interrupção externa do microcontrolador. Sempre que uma interrupção ocorra, é verificado o estado do outro canal, determinando se o motor está a andar para a frente ou para trás, incrementando ou decrementando a contagem de impulsos.

A recolha dos dados odométricos permite efectuar um controlo em malha fechada da velocidade dos motores, tendo sido implementado um algoritmo de compensação tipo PI, que efectua o controlo de 30ms em 30ms.

Desenvolveram-se três funções para controlo de velocidade e leitura/set dos dados odométricos, descritas de seguida:

ƒ rdSetSpeed

Protótipo: void rdSetSpeed(unsigned char motor, signed char speed) Descrição:

Função para aplicar a velocidade pretendida ao robô. Parâmetros de entrada:

ƒ motor – Motor ao qual se pretende aplicar a velocidade (ML – motor esquerdo; MR – motor direito; MLMR – Ambos)

Plataforma Robótica Multi-Funcional 67

A conversão da velocidade para setpoints do motor requer a definição dos parâmetros do sistema de tracção do RODA:

Resolução do Encoder 500

Sample Time Encoder (ms) 30

Diâmetro das Rodas (cm) 6.45

Tabela 4.6 – Parâmetros do sistema de tracção

Tendo em conta os parâmetros do sistema, a velocidade pretendida (definida em %) é convertida para setpoints usando a seguinte expressão:

Após a conversão, os valores de setpoints são armazenados em variáveis globais, usadas no algoritmo de compensação PI, responsável pelo controlo da velocidade da plataforma, implementado na ISR (Interrupt Service Routine), e invocado a cada 30ms.

ƒ rdGetOdometry

Protótipo: void rdGetOdometry (unsigned char motor, float *data) Descrição:

Fornece o valor da distância percorrida (cm) pelo motor referido desde o último offset definido pela função de rdSetOdometry.

Parâmetros de entrada:

ƒ motor – Motor do qual se pretende recolher dados (ML ou MR). ƒ *data – Ponteiro para a variável onde a distância é armazenada. Como referido anteriormente, a quantificação do movimento dos motores da plataforma é possibilitada pelos encoders presentes na plataforma. A informação recolhida por destes é armazenada em variáveis globais (do modo antes descrito), pelo que as funções para leitura e set dos dados odométricos apenas têm de adquirir/alterar o valor armazenado nas mesmas.

Adquiridos os impulsos de encoder guardado na variável globais, é efectuada a conversão de impulsosÆdistância percorrida (cm). O valor obtido é então guardado na variável apontada por *data.

A conversão de impulsos do encoder para distância percorrido é feita pela seguinte expressão:

Contas feitas, 24 impulsos do encoder correspondem a 1cm percorrido. encoder resolução rodas diâmetro impulsos cm Distância _ _ ) ( = ×π× rodas diâmetro encoder time sample encoder resolução SPEED MAX speed Setpoínt _ _ _ _ _ 100 × × × × ⎟ ⎠ ⎞ ⎜ ⎝ ⎛ = π

68 CAPÍTULO 4. CONCEPÇÃO DA PLATAFORMA

ƒ rdSetOdometry

Protótipo: void rdSetOdometry (unsigned char motor, float data) Descrição:

Efectua um set do valor da distância percorrida (cm) ao(s) motor(es) seleccionado(s).

Parâmetros de entrada:

ƒ motor – Motor(es) a aplicar o offset (ML, MR ou MLMR). ƒ data – Valor da distância percorrida (cm).

O valor da distância é convertido em impulsos de encoder pela seguinte expressão, sendo os valores das variáveis globais de contagem são substituídos pelos números de impulsos calculados.

• Servo Motor

Para efectuar o controlo do servo é necessário fornecer-lhe um sinal de PWM (Pulse Width Modulation) com um duty-cycle variável consoante a posição do servo pretendida, com um período é de 10ms. O duty-cycle do sinal gerado tem os seguintes parâmetros:

Duty-cycle (ms) Posição Servo

1.0 Servo Max Esquerda

1.5 Servo Meio

2.0 Servo Max Direita

Tabela 4.7 – Parâmetros do Sinal do Servo Motor O controlo da posição do Servo Motor é efectuado pela seguinte função:

ƒ rdServoPosition

Protótipo: void rdServoPosition(signed char servo_pos) Descrição:

Efectua o controlo de posição do Servo Motor. Parâmetros de entrada:

ƒ servo_pos – posição do servo motor. rodas diâmetro encoder resolução distância impulsos _ _ × × = π

Plataforma Robótica Multi-Funcional 69

Para gerar este sinal foi usado apenas o Timer0, cujos registos são constantemente actualizados (bem como o nível lógico do sinal) de modo a gerar o sinal de PWM desejado. A variável servo_pos corresponde à posição do servo pretendida, numa gama de definida de -100% a +100%, sendo a posição central a 0%.

• Sensores

Dada a natureza analógica dos sensores de obstáculos (SHARP GP2D12), utilizou-se a ADC (10 bits) do microcontrolador para efectuar conversão analógico-digital dos sinais dos sensores. Foi programada para realizar a conversão a uma frequência de 1.25MHz (Fosc/32). Apesar de possuir uma resolução de 10 bits, foram apenas considerados os 8 bits mais significativos. Visto a resposta dos sensores ser uma curva não linear, foi feita uma divisão em segmentos da curva de resposta para obter o valor da distância medida. Relativamente aos sensores de chão, a leitura destes não requer nenhuma conversão prévia, sendo apenas necessário efectuar a leitura dos portos ligados a estes sensores. Para determinar o estado das baterias, usou-se também o módulo de conversão analógico-digital (ADC) do PIC, que converte o sinal proveniente de um divisor resistivo ligado à bateria.

A recolha de toda a informação sensorial da plataforma está a cargo apenas da seguinte função:

ƒ rdGetSensor

Protótipo: unsigned char rdGetSensor(unsigned char sens) Descrição:

Recolhe a informação do sensor pretendido. Parâmetros de entrada:

ƒ sens – Sensor fonte de informação: 0 - Left Obstacle Sensor (SL) 1 - Right Obstacle Sensor (SR) 2 - Front Obstacle Sensor (SF) 3 - Rear Obstacle Sensor (SB) 4 - Ground Sensor (GND) 5 - Left Ground Sensor (GND_L) 6 - Front Ground Sensor (GND_F) 7 - Right Ground Sensor (GND_R) 8 - Beacon Sensor (SFAROL) 9 - Battery State Sensor (SBAT) Retorna:

[0,100] – Sensores Obstáculos. 0 não há obstáculo, 100 obstáculo muito próximo 0,100 - Sensores de Chão e Sensor do Farol. 0 – Não Detecta, 100 – Detecta. 0,100 - Sensor de Bateria. 0 – Bateria Baixa, 100 – Bateria OK.

70 CAPÍTULO 4. CONCEPÇÃO DA PLATAFORMA

• Algoritmo de Controlo

De modo a que seja possível a execução do algoritmo de controlo para a plataforma efectuar o comportamento desejado, é necessário determinar quais foram as ligações estabelecidas pelo utilizador na base de ligações virtuais. A detecção das ligações efectuadas, configuração e validade das mesmas, é efectuada pela placa de ligações virtuais, referida no ponto seguinte.

Para possibilitar a recepção da informação referente às ligações efectuadas, a placa de controlo global foi configurada como slave, tendo-lhe sido atribuído um endereço I2

C slave, o qual é usado pelo master quando este pretende efectuar leituras ou escritas nesta.

Após uma correcta configuração e testes das comunicações I2C entre os

microcontroladores, foi estabelecido um protocolo para efectuar a troca de informação, descrito no início do ponto 4.3.

A placa de ligações virtuais, após apurar quais as ligações efectuadas e as validar, envia o grafo de ligações para a placa de controlo global. Esta, por sua vez, armazena numa estrutura a informação recebida, estrutura na qual os valores armazenados são manipulados de modo a despoletar o movimento correspondente ao grafo de ligações recebido.

Para que isto seja possível, os elementos de manipulação de sinal (somadores, inversores, temporizadores, comutadores condicionais, geradores de sinal e bloco de ganho) estão implementados na placa de controlo global, que, em conjunto com a informação sensorial recolhida, permite determinar quais os valores presentes em cada ponto de ligação e finalmente os valores a aplicar aos motores da plataforma.

A tabela 4.8 representa, de um modo geral, as rotinas de software da placa de controlo global e suas funções. O fluxograma do algoritmo da placa de controlo global está representado na figura 4.46.

Rotina Função

initPic() Configuração do microcontrolador

initI2C() Configuração do protocolo I2C

rdStartup() Condições iniciais da plataforma

rdSetSpeed(motor , speed) Aplica a velocidade pretendida ao(s) motor(es)

rdGetOdometry(motor, *data) Recolhe os dados odométricos do motor seleccionado

rdSetOdometry(motor, data) Actualiza os dados odométricos do motor seleccionado com o

valor definido

rdGetSensor(sensor) Recolhe os dados do sensor seleccionado

rdServoPosition(position) Coloca o servo na posição definida

rdResetConnections() Faz um reset ao grafo de ligações virtuais

rdInvert(signal) Inverte o sinal definido

rdSum(signal1, signal2) Efectua a soma dos dois sinais definidos

rdGain(signal) Aplica o ganho seleccionado ao sinal definido

rdTemp(signal, temp) Aplica a temporização do temporizador seleccionado ao sinal

definido rdCondSwitch(cond_signal,

signal)

Efectua a comutação condicional ao sinal definido

rdVolt(volt) Determina o valor do medidor de sinal definido

Plataforma Robótica Multi-Funcional 71

Figura 4.46 – Fluxograma do algoritmo da Placa de Controlo Global

4.3.3 Placa de Ligações Virtuais

Como referido, a placa de ligações virtuais tem como função detectar quais as ligações efectuadas, e, consoante a configuração e validade destas, despoletar o movimento correspondente. Para além disto, efectua também o controlo da interface com o utilizador (controlo de led’s, LCD, indicadores sonoros, etc) e gere as comunicações I2C entre os controladores. Estas tarefas são realizadas pelos dois microcontroladores presentes na placa.

O microcontrolador PIC1_LV é responsável pela detecção, validação e envio de informação das ligações virtuais efectuadas, pelo controlo do LCD e análise do estado dos botões da base de ligações virtuais.

O princípio de funcionamento da detecção das ligações virtuais é bastante simples: os pontos entre os quais são feitas as ligações, estão directamente ligados a portos I/O do microcontrolador

72 CAPÍTULO 4. CONCEPÇÃO DA PLATAFORMA

(PIC1_LV) com um resistência de pull-up de 10K. Coloca-se um dos portos a ‘0’ lógico e efectua- se a leitura do estado dos restantes pontos. Caso algum esteja ligado ao porto em análise, o seu estado será também ‘0’, sendo assim a ligação detectada. Este processo é repetido então para os restantes pontos. Detectadas todas as ligações efectuadas, este constrói o grafo de ligações virtuais, o qual é transmitido para o outros microcontroladores, bem como os valores dos elementos de parâmetros programáveis (temporizadores, bloco ganho e gerador de sinal) usando o protocolo I2C. Este microcontrolador foi programado como master do protocolo I2C, sendo

responsável pela gestão da informação e sinal de relógio do barramento (100Kbit/s).

Para visualizar os valores dos elementos de parâmetros programáveis (gerador de sinal contínuo, bloco de ganho e temporizadores) e permitir ao utilizador optar pelo modo de ajuda, adicionou-se um LCD na placa de ligações virtuais. Este tem uma interface paralela a qual se encontra ligada a portos I/O do microcontrolador PIC1_LV, controlando assim este.

A análise do estado dos botões da plataforma é feita com o auxílio de um timer do microcontrolador e rotinas de interrupção. O estado destes é actualizado com uma periodicidade de 100ms.

O microcontrolador PIC2_LV efectua o controlo de led’s e do dispositivo sonoro da placa de ligações virtuais. Estes elementos encontram-se ligados a portos de saída digitais do microcontrolador, sendo a actuação nos mesmos feita simplesmente pela comutação do estado dos portos.

Este microcontrolador foi também configurado como slave do protocolo I2C. Recebe o grafo de ligações do microcontrolador PIC1_LV e como base no mesmo, actua nos respectivos led´s e/ou buzzer.

A tabela 4.9 representa, de um modo geral, as rotinas de software da placa de ligações virtuais. Os fluxogramas dos algoritmos dos microcontroladores estão representados nas figuras 4.47 e 4.48 (PIC1_LV e PIC2_LV respectivamente).

Microcontrolador Rotina Função

PIC1_LV initPIC() Configuração do microcontrolador

PIC1_LV initI2C() Configuração do protocolo I2C

PIC1_LV initLCD() Configuração do LCD

PIC1_LV RESET_VC() Reset ao grafo de ligações virtuais

PIC1_LV READ_VC() Construção do grafo de ligações virtuais

PIC1_LV VALIDATE_VC() Validação do grafo de ligações virtuais

PIC1_LV RESET_VC_HELP() Reset ao grafo de ligações virtuais (Menu Ajuda)

PIC1_LV READ_VC_HELP() Construção do grafo de ligações virtuais (Menu Ajuda)

PIC1_LV SEND_DATA2LCD() Envio de dados para o LCD

PIC1_LV send_i2(pic) Envio de dados via I2C para o PIC definido

PIC1_LV receive_i2c(pic) Recepção de dados via I2C do PIC definido

PIC2_LV initPIC() Configuração do microcontrolador

PIC2_LV initI2C() Configuração do protocolo I2C

PIC2_LV rst_led_state() Reset ao estado a aplicar aos led’s

PIC2_LV get_led_state() Obtenção do estado a aplicar ao led’s

PIC2_LV set_led_state() Actuação no estado aos led’s

Plataforma Robótica Multi-Funcional 73

74 CAPÍTULO 4. CONCEPÇÃO DA PLATAFORMA

75

Capítulo 5

Resultados

Neste capítulo são resumidos e apresentados os resultados obtidos no trabalho desenvolvido no âmbito desta dissertação.

Na secção 5.1 é feita a apresentação da plataforma robótica RODA, sendo efectuada a descrição geral das suas características e arquitectura global, apresentando-se ainda as variantes Micro-Rato e Robô Bombeiro, resultantes da versatilidade da plataforma.

A base de ligações virtuais, mecanismo de programação intuitivo e inovador é apresentado na secção 5.2, sendo resumidos previamente os blocos funcionais da plataforma. Os comportamentos definidos, integrantes e implementáveis pela base de ligações virtuais são apresentados na secção 5.3.

No documento Plataforma robótica multi-funcional (páginas 88-97)

Documentos relacionados