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.