sistema de controle de baixo nível e instrumentação de uma...
TRANSCRIPT
UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO TECNOLÓGICO
DEPARTAMENTO DE ENGENHARIA ELÉTRICA PROJETO DE GRADUAÇÃO
Sistema de Controle de Baixo Nível e Instrumentação de
uma Cadeira de Rodas Robótica
PATRICK NOÉ DOS SANTOS FILGUEIRA
VITÓRIA - ES 2007
PATRICK NOÉ DOS SANTOS FILGUEIRA
Sistema de Controle de Baixo Nível e Instrumentação de
uma Cadeira de Rodas Robótica
Parte manuscrita do Projeto de Graduação do aluno Patrick Noé dos Santos Filgueira, apresentado ao Departamento de Engenharia Elétrica do Centro Tecnológico da Universidade Federal do Espírito Santo, para obtenção do grau de Engenheiro Eletricista.
UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO TECNOLÓGICO
DEPARTAMENTO DE ENGENHARIA ELÉTRICA PROJETO DE GRADUAÇÃO
MONOGRAFIA APRESENTADA POR PATRICK NOÉ DOS SANTOS
FILGUEIRA, ORIENTADA E APROVADA EM _______________________
COMISSÃO EXAMINADORA: _________________________________ Prof. Dr. Teodiano Freire Bastos Filho
Orientador _________________________________ Prof. Dr. Evandro Ottoni Teatini Salles
Examinador
_________________________________ Prof. Dr. Raquel Frizera Vassallo
Examinador
DEDICATÓRIA
Aos meus maiores mestres.
Àqueles que sabem ouvir e calar, imprimindo cunho e superioridade em tudo o
que lhes passam pelas mãos.
Enfim...
A minha família, onde todos são por um e um por todos, onde a paz criou raízes
e floriu.
Em especial a minha esposa Danielly, que esteve presente em todos os
momentos de dificuldades nesta longa caminhada.
. AGRADECIMENTOS
Agradeço o seu valioso exemplo e amizade:
Ao meu orientador Prof. Dr. Teodiano Freire Bastos Filho...
Agradeço pelo seu apoio desde o início desta jornada o que me proporcionou
muito mais que orientação para este trabalho, mas sim, um grande exemplo de
autenticidade, valores éticos e amor ao estudo, que servirão de espelho para nossa
própria construção intelectual. E também pela fantástica oportunidade de desenvolver
este trabalho e entrar em contato com esta área de pesquisa.
Aos meus amigos...
Agradeço suas valiosas sugestões nos momentos decisivos e importantes de
minha vida, bem como o constante estímulo, dedicação e atenção, oferecendo-me
sempre as condições e proteções necessárias para a realização deste trabalho.
Em especial, a todos os alunos de doutorado, mestrado e Iniciação Científica
do LAI, em especial aos alunos de doutorado André ferreira, Wanderley Cardoso
Celeste e ao aluno de iniciação cientifica Igor Berger Arantes, por toda ajuda no
desenvolvimento deste e outros trabalhos.
Aos meus colegas que me acompanharam ao longo de todo o curso de
Engenharia Elétrica.
Enfim...
Agradeço a todos os que me ajudaram a percorrer a trajetória de construção
deste trabalho.
E, em especial, aos meus pais e minha esposa que sempre estiveram ao meu
lado ao longo de todos esses anos.
RESUMO
Neste trabalho foi desenvolvido um sistema de controle de baixo nível para
uma cadeira de rodas robotizada controlada por sinais biológicos, incluindo hardware
(placa de acionamento dos motores) e software (firmware executado em
microcontrolador).
O objetivo é dar suporte para um sistema de controle de alto nível que captura,
processa e interpreta sinais biológicos a fim de controlar uma cadeira de rodas
robótica.
O trabalho consiste basicamente de duas partes: construir uma placa que seja
capaz de acionar motores acoplados na cadeira de rodas em questão. A outra parte é a
criação de um programa que deverá ser executado em um microcontrolador, o qual
tem a finalidade de gerenciar todos os dispositivos acoplados a cadeira inclusive os
motores, que serão acionados pela placa da primeira parte.
Para alcançar o objetivo proposto neste trabalho fez-se necessário manipular
dispositivos de eletrônica de potência, programação, algoritmos de controle e
instrumentação.
• Palavra - chave: Instrumentação; Cadeira de Rodas;
Sensores; Controle; Acionamento.
SUMÁRIO
1-Introdução .......................................................................................10
2 – A Placa de Acionamento ..............................................................13
2.1 – O Sinal PWM ............................................................................14
2.2 – A Ponte H ..................................................................................15
2.3 – Cálculos dos Componentes da Ponte H ....................................20
2.3.1 – Os Transistores ..........................................................20
2.3.2 – Os Componentes de Bootstrap ..................................21
2.4 – O Acoplamento Óptico .............................................................24
2.5 – Dispositivos Complementares ..................................................27
2.6 – Dispositivos De Segurança .......................................................28
2.7 – LEDs Indicadores .....................................................................29
2.8 – Conexões ..................................................................................30
2.8.1 – Microcontrolador ......................................................30
2.8.2 – Os Encordes ..............................................................30
2.8.3 – O Sonar .....................................................................31
2.8.4 – Conexões para Expansão ..........................................32
2.8.5 – O Mapa da Placa .......................................................33
3 – O Sistema de Controle de Baixo Nível ........................................34
3.1 – O Microcontrolador ....................................................34
3.2 – A Aquisição de Dados dos Encoders ..........................35
3.3 – A Comunicação ...........................................................39
3.4 – O Controlador ..............................................................43
4 - Conclusões e Trabalhos Futuros ...................................................48
- Referências Bibliográficas ..............................................................50
- Apêndices
- A Obtenção de Parâmetros do Controlador ..........................52
- O Algoritmo de Controle ......................................................53
- Programa criado para execução no microcontrolador..........54
LISTA DE FIGURAS
Figura 1 – Cadeira de Rodas Desenvolvida na UFES..................................................11
Figura 2 – Simulação de um sinal PWM com freqüência de 20 kHZ, amplitude de 3,6
V e 50 % de Ciclo de Trabalho.....................................................................................14
Figura 3 – Ponte H composta de transistores dos tipos MOSFET Canal P e N..........16
Figura 4 - Ponte H composta apenas de transistores do tipo MOSFET Canal N.......16
Figura 5– Pontes H sugeridas pela IRF.......................................................................17
Figura 6 – Ponte H implementada no trabalho............................................................18
Figura 7 – Simulação do sinal de saída da ponte H mostrada na Figura 05................19
Figura 8 – Foto do sinal de saída da ponte H implementada.......................................20
Figura 9 – Comportamento resistivo do IRF3205.......................................................21
Figura 10 – Identificação dos componentes de Bootstrap...........................................24
Figura 11 – Circuito de acoplagem óptica...................................................................25
Figura 12 – Sinal na Saída do Acoplador óptico..........................................................25
Figura 13 – Sinal da saída de um dos comparadores...................................................26
Figura 14 – Circuito de acionamento de um dos motores...........................................27
Figura 15 – Circuito divisor de tensão utilizado para abaixar níveis TTL................28
Figura 16 – Dispositivos de segurança da placa.........................................................29
Figura 17 – Conector do microcontrolador.................................................................30
Figura 18 – Conector de um dos encoders..................................................................31
Figura 19 – Conector do sonar....................................................................................31
Figura 20 – Conectores de expansão...........................................................................32
Figura 21 – Placa final.................................................................................................33
Figura 22 – Placa de prototipagem do MSP430..........................................................35
Figura 23 - Princípio de funcionamento de um encoder rotativo...............................36
Figura. 24 - Princípio de funcionamento de um encoder linear............................................36
Figura 25 - Representação gráfica dos sinais A e B de um encoder
incremental...................................................................................................................37
Figura 26 – Encoder da roda direita..........................................................................39
Figura 27 – Disposição dos Bit’s em uma transmissão serial.............................................40
Figura 28 – interface do programa RComSerial.......................................................43
Figura 29 – Modelo dinâmico da cadeira de Rodas..................................................44
Figura 30 – Controlador proporcional com laço integrativo....................................45
Figura 31 – Controlador implementado....................................................................46
Figura 32 – Sinais de excitação de transistores de mesmo braço de uma das pontes
H.................................................................................................................................49
Figura 33 – Dissipador e ventilar instalados na placa...............................................49
Figura 34 – Representação da cadeira como sistema de duas variáveis
acopladas...................................................................................................................52
GLOSSÁRIO
CC Corrente continua
CI Circuito integrado
PWM Pulse-width modulation
TTL Transistor-Transistor Logic
VDS Queda de Tensão entre o dreno e a fonte de um transistor MOSFET
ID Corrente de dreno de um transistor MOSFET
rdson Resistência série de um transistor MOSFET conduzido
VGS Tensão de gate para fonte de um transistor MOSFET
10
1 INTRODUÇÃO
Indivíduos com sérias disfunções de origem neuromotoras apresentam,
invariavelmente, graves problemas de fala e comunicação e locomoção. No entanto,
pessoas que apresentam estas limitações, mantêm um perfeito estado de consciência, o
que permite que algumas técnicas sejam desenvolvidas para provê-las de meios pelos
quais possam expressar suas vontades [1].
Uma solução largamente estudada e pesquisada nos dias de hoje é o uso de
sinais eletro-biológicos para desenvolvimento de canais alternativos de comunicação
entre o indivíduo e tudo aquilo que o cerca. Dentre estes sinais eletro-biológicos, os
mais comumente utilizados são: sinais mioelétricos (eletromiograma - EMG),
potenciais córtico-retina (eletrooculograma - EOG) e sinais cerebrais
(eletroencefalograma - EEG) [1].
Assim, é possível substituir os dispositivos tradicionais utilizados na
comunicação, tais como, apontadores de cabeça, pulsadores, dentre outros, que não
seriam eficazes para pessoas acometidas de graves disfunções motoras, por sistemas
baseados em sinais eletro-biológicos.
Além disso, é possível, juntamente com o uso de recursos computacionais
específicos, desenvolver ferramentas que sejam capazes de identificar um desejo ou
uma vontade do usuário utilizando sinais eletro-biológicos. Para tal, entretanto, é
necessário que o usuário tenha um grau mínimo de controle de suas funções cerebrais,
de tal forma que possibilite a operação do sistema de maneira satisfatória.
Diante de tal realidade, o grupo de pesquisa do Laboratório de Automação
Inteligente – LAI da Universidade Federal do Espírito Santo – UFES está
desenvolvendo uma cadeira de rodas robótica (Figura 1) que interpreta sinais eletro-
biológicos e possibilita a locomoção de pessoas com sérias incapacidades de
movimento de seus membros. O projeto tem por objetivo prover um meio de
locomoção eficiente para pessoas que possuem o intelecto preservado, mas sua única
maneira de interagir com o ambiente é através de sinais eletro-biológicos.
11
Figura 1 – Cadeira de Rodas Desenvolvida na UFES.´
A Cadeira da Figura 1 é composta de sistema de captura e processamento de
sinais eletro-biológicos e ainda de dois níveis de controle de trajetória: um sistema de
controle de alto nível e um sistema de controle de baixo nível.
O sistema de controle de alto nível assim como o processamento das sinais
biológicos são executados em um PC de bordo, e o controle de baixo nível é executado
em um microcontrolador.
Assim, o PC processa os sinais eletro-biológicos e traça uma trajetória para a
cadeira, e de acordo com essa trajetória o PC envia valores de velocidade para o
microcontrolador que se encarrega de controlar a velocidade da cadeira.
Neste trabalho, foi desenvolvido o sistema de controle de baixo nível para a
cadeira de rodas, que inclui: sistema de acionamento dos dois motores elétricos de
corrente contínua da cadeira de rodas, e um programa executado em um
microcontrolador, no qual é implementado um sistema de controle de baixo nível.
A primeira parte do trabalho foi a confecção de uma placa de acionamento
dos motores elétricos presentes na cadeira de rodas. Esta placa ainda precisa dar
suporte para os sensores de velocidade (encoders) e para o sonar, isso devido a uma
incompatibilidade entre níveis de tensão dos mesmos e do microcontrolador.
A segunda parte do trabalho foi o desenvolvimento de um programa executado
em um microcontrolador, e tem o objetivo de prover o gerenciamento e todo o controle
de baixo nível da cadeira de rodas.
12
Para o desenvolvimento do projeto foi utilizada uma cadeira de rodas elétrica
comercial, fabricada pela empresa Freedom Ltda, a qual dispõe de um sistema de
acionamento de seus motores controlado por um joystick. Entretanto, no projeto
utilizou-se apenas a estrutura da cadeira, as baterias e seus motores.
Para o controle, o microcontrolador escolhido foi o MSP430F1611 da Texas
instruments [2]. Isso devido o fato de ser um que possui periféricos específicos para a
geração de PWM e para captura de período de encoders.
Neste trabalho o microcontrolador se encontra em uma placa separada da
placa de acionamento, sendo conectadas as placas por meio de conectores [3].
13
2 A PLACA DE ACIONAMENTO
Por uma questão de economia de espaço optou-se por construir uma placa
apenas para o acionamento dos motores, para dispositivos de interfaces e para suprir
alimentação que o resto do sistema possa necessitar.
O sistema de acionamento dos motores das rodas é composto basicamente de
duas pontes H alimentadas em 24 V [4].
Essas pontes H são responsáveis por alimentar os motores CC que tracionam
as rodas da cadeira de rodas, permitindo o controle das velocidades e sentido de giro
dos motores da cadeira apenas variando a largura de pulsos de um sinal PWM gerado
pelo microcontrolador.
As interfaces se fazem necessárias devido ao fato dos sensores de velocidade
da cadeira (encoders) e do sonar usarem níveis de tensão TTL, ou seja, 0 e 5 V, e o
microcontrolador usar níveis 0 e 3,6 V [5].
A placa em questão supre a alimentação de possíveis dispositivos que possam
ser acoplados à cadeira, tais como módulos de comunicação wireless, o
microcontrolador e outros. Para isso, a placa de acionamento deve disponibilizar
terminais de tensão de 5 e 9 V, sendo a mesma alimentada por uma bateria de 12 V.
Por fim, a placa de acionamento provê total isolamento elétrico entre as
baterias de alimentação dos motores e a bateria de alimentação dos dispositivos
microcontrolados. Isso porque os motores CC geram ruídos de alta amplitude que
causam graves problemas para dispositivos sensíveis, tais como os microcontroladores
[4]. Assim, todos os dispositivos em contato elétrico com o microcontrolador são
alimentados por um bateria de 12 V e os dispositivos ligados as pontes H são
alimentados pelas baterias de 24 V da cadeira, sendo feito acoplamento entre as partes
por meio de opto-acopladores.
14
2.1 O Sinal PWM
A cadeira de rodas possui dois motores CC com tensão nominal de 24 V e
corrente nominal 15 A. Outro dado importante é o fato da alimentação da cadeira ser
provida por duas baterias de 12 V ligadas em série, resultando assim em uma tensão
total de 24 V.
Sendo assim, faz-se necessário montar um sistema de acionamento com o qual
seja possível controlar as velocidades dos motores, e que atenda às especificações
citadas anteriormente.
Para o controle de velocidade especificou-se um sinal do tipo PWM, que é um
sinal pulsado, periódico, mas com largura de pulsos variável [4].
O sinal PWM faz variar sua tensão média apenas variando a largura de seus
pulsos. Assim, variando-se a tensão média de alimentação dos motores CC, variam-se
também as velocidades dos mesmos. A Figura 2 mostra um sinal PWM de 20 kHz com
ciclo de trabalho de 50%.
Figura 2 – Simulação de um sinal PWM com freqüência de 20 kHZ, amplitude de 3,6 V e 50 % de ciclo de trabalho.
Este sinal deve ser gerado pelo dispositivo de controle, que neste caso é o
microcontrolador MSP430F1611 da Texas instruments.
Time
0s 200usV(R4:2)
0V
1.0V
2.0V
3.0V
4.0V
15
O microcontrolador trabalha com um relógio de 8 MHz e, portanto, o período
do PWM deve ser múltiplo do período de relógio do microcontrolador, que neste caso
é de 125 ns.
O MSP430F1611 possui um Hardware específico para a geração de sinais
PWM [2]. Este Hardware é um contador com três canais, os quais podem ser dispostos
da seguinte maneira: um para medir o período e os outros dois para medir o ciclo ativo
de dois sinais, um para cada roda da cadeira.
Optou-se então por um PWM de 20 kHz, ou seja, 400 ciclos de relógio de 8
MHz com resolução de 9 bits. Com este valor de freqüência obteve-se uma precisão de
0,25% nos incrementos de largura de pulsos do sinal. Isso devido ao fato da contagem
de tempo se dar através de contadores, que contam períodos inteiros de relógio. Se o
valor escolhido de freqüência do PWM fosse maior, a precisão nos incrementos de
largura de pulsos seria menor, o que poderia levar a uma instabilidade no controle das
rodas da cadeira, haja vista que as velocidades das rodas são controladas pelo valor da
largura de pulsos do sinal PWM. Mais detalhes do microcontrolador serão discutidos
adiante.
2.2 A Ponte H
Foi idealizada uma ponte H utilizando transistores MOSFET, por sua baixa
resistência (rdson) série e alta velocidade de resposta. A Figura 3 mostra o esquema da
ponte H utilizando transistores MOSFET [4].
16
Figura 3 – Ponte H composta de transistores dos tipos MOSFET Canal P e N.
Um grande problema da configuração de ponte H mostrada acima é o fato dos
transistores MOSFET canal P, na parte superior da ponte, terem uma resistência de
condução elevada em relação aos transistores MOSFET canal N.
A solução encontrada foi utilizar somente transistores MOSFET canal N,
como mostrado na Figura 4.
Figura 4 - Ponte H composta apenas de transistores do tipo MOSFET Canal N.
17
Contudo, para usar a configuração da Figura 4 é necessário utilizar um
dispositivo que seja capaz de acionar os transistores da parte superior da ponte.
Isso, devido ao fato dos transistores MOSFET canal N necessitarem de uma
tensão positiva entre o seu gate e fonte. Contudo, em tal configuração, isso não
aconteceria com os transistores da parte superior da ponte [4].
Para solucionar esse problema foi idealizado um sistema de acionamento dos
transistores da parte superior baseado nos circuitos integrados IR2101 e no IR2102,
ambos produzidos pela International Rectifier “IRF” [6]. Tais circuitos integrados são
capazes de gerarem um “terra virtual” na fonte dos transistores da parte superior da
ponte. Com isso, os transistores são submetidos a uma tensão positiva entre o gate e a
fonte, o que leva à sua plena condução.
A International Rectifier “IRF” sugere uma topologia de ponte H, mostrada na
Figura 5, mas que não atende as especificações do projeto. Isso porque, necessita de
uma fonte simétrica de 24 V e -24 V e, como dito anteriormente, o projeto tem como
prerrogativa utilizar as baterias da cadeira de rodas, que geram uma tensão de 24 V.
Figura 5– Pontes H sugeridas pela IRF.
18
A pinagem IR2101 e do IR2102 está descrita abaixo [6];
• Vcc, tensão de alimentação do CI.
• COM, referência do circuito integrado.
• VB, fonte flutuante da parte alta da ponte.
• VS, terra virtual.
• HO, saída para a parte alta da ponte.
• LO, saída para a parte baixa da ponte.
• HIN, entrada da parte alta da ponte.
• LIN, entrada da parte baixa da ponte.
• , entrada negada da parte alta da ponte.
• , entrada negada da parte baixa da ponte.
Depois de analisar as especificações dos circuitos integrados citados
anteriormente e avaliar os seguintes pontos:
• o IR2101 e o IR2102 possuem os tempos de subida e descida dos
sinais que acionam os MOSFET preparados para evitar condução
cruzada,
• o uso de apenas uma bateria de 24 V,
foi proposta a topologia de circuito mostrada na Figura 6.
Figura 6 – Ponte H implementada no trabalho.
19
A configuração mostrada na Figura 6 permite controlar a velocidade e o
sentido de giro dos motores com apenas um PWM, sendo o valor médio de tensão
aplicado ao motor controlado pela largura de pulso do sinal PWM. Assim, um sinal
com pulsos de 50 % de ciclo de trabalho corresponde ao valor médio de tensão zero, e
para um sinal com largura diferente de 50% o valor de tensão médio pode ser positivo
ou negativo.
Em testes no protoboard a topologia mostrada na Figura 6 mostrou-se eficiente
e robusta. Contudo, um detalhe deve ser ressaltado: o sinal PWM nunca poderá ter
pulsos com 0 ou 100% de ocupação do período. Isso devido ao fato que, para que o
capacitor de Bootstrap (Figura 10) carregue, há a necessidade de transições no sinal
PWM de entrada. Se não houver transições o capacitor de Bootstrap não carregará e a
tensão VGS dos transistores da parte alta da ponte cairá, o que fará a dissipação de
calor nestes aumentar, levando à sua queima.
A Figura 7 mostra uma simulação do sinal PWM de saída da ponte H com
ocupação de período diferente de 50%, e a Figura 8 mostra o sinal real obtido na saída
da ponte H do motor direito, sendo mostrado em um osciloscópio com escala de
amplitude de 10 V por divisão e escala temporal de 10 μs por divisão.
Time
0s 20us 40us 60us 80us 100us 120us 140us 160us 180us 200usV(R4:2)
-40V
-20V
0V
20V
40V
Figura 7 – Simulação do sinal de saída da ponte H mostrada na Figura 5.
20
Figura 8 – Foto do sinal de saída da ponte H implementada.
A cadeira de rodas usa um sistema de tração diferencial com dois motores de
CC. Assim, foram implementadas duas pontes H iguais à mostrada na Figura 6, sendo
uma para cada motor.
2.3 Cálculos dos Componentes da Ponte H
2.3.1 Os Transistores
Os motores possuem ambos corrente nominais de 15 A, sendo assim,
considerando o fato dos motores poderem trabalhar em sobrecarga os transistores
escolhidos são os IRF3205, que é um MOSFET canal N, que suporta corrente de
regime de até 110 A e tem isolamento para até 55 V [7].
Outro dado relevante do IRF3205 é sua curva de corrente de dreno (ID) por
queda de tensão de dreno para fonte (VDS) mostrada na Figura 9, que indica a
resistência do canal do transistor.
21
Figura 9 – Comportamento resistivo do IRF3205.
De acordo com a Figura 9, a curva de menor resistência de canal é a
correspondente à VGS igual a 15 V.
2.3.2 Os Componentes de Bootstrap
Os circuitos integrados IR2101 e IR2102 geram um “terra virtual” na fonte
dos transistores da parte superior da ponte H, mas para tal, eles utilizam um capacitor
de bootstrap, que eleva a tensão no gate do transistor da parte alta da ponte à soma da
tensão de alimentação da ponte com a tensão de alimentação do próprio circuito
integrado.
Assim, a tensão entre o gate e a fonte (VGS) do transistor da parte alta é igual à
tensão de alimentação do circuito integrado.
Para o transistor da parte baixa da ponte a tensão VGS é a própria tensão Vcc
de alimentação do circuito integrado.
22
O capacitor de Bootstrap deve ter um valor de capacitância tal que consiga
carregar polarizar o canal do transistor de modo a conseguir a mínima resistência de
canal.
Este valor pode ser calculado a partir da expressão
[8], na qual:
• C é o valor mínimo de capacitância para o capacitor de Bootstrap
• Qg é a capacitância de carga do gate do MOSFET
• VMin é a mínima tensão entre VB e VS.
• Vf é o valor da queda de tensão de condução do diodo de bootstrap.
• VLS é a queda de tensão de condução do transistor da parte baixa da
ponte.
• Iqbs é a corrente quiescente do circuito integrado.
• Icbs(leak) é a corrente de fuga do capacitor de Bootstrap.
• Qls nível para deslocamento de carga requerido por ciclo = 5 nC para o
IR2101 e IR2102.
• Vcc é a tensão de alimentação do circuito integrado.
• f é a freqüência de operação do PWM.
Assim:
• A tensão de alimentação é de 15 V, isso devido ao fato do transistor
utilizado o IRF3205 possuir a menor resistência de canal para VGS igual
a 15 V.
• A freqüência do PWM é de 20 kHz.
• Qls será 5 nC, pois o circuito integrado utilizado é de até 600V [8].
• Icbs pode ser desconsiderado devido a seu pequeno valor.
23
• Iqbs tem um valor típico de 30 μA.
• De acordo com a Figura 9 para um corrente ID de 15 A VDS será 0,8 v, ou
seja, VLS=0,8 V.
• A queda típica de tensão no diodo “Vf” é de 0,7 V.
• VMin será de 12V.
• Qg do IRF3205 é 146 nC.
• C será aproximadamente 400 nF. Contudo, a International Rectifier
“IRF” sugere que o valor de C seja multiplicado por 15, de modo que o
valor recomendado é de aproximadamente 6 μF. Diante disso o valor
escolhido para o capacitor de Bootstrap é de 10 μF.
O diodo de bootstrap deve ser rápido o suficiente para carregar o capacitor de
Bootstrap nas transições do sinal PWM.
Assim, o tempo de chaveamento não deve ser maior que 100 ns e a corrente
nominal deve ser maior que Qbs*f, na qual:
[8].
Portanto, Qbs é igual a 300 nC e então a corrente nominal será 6 mA.
O diodo escolhido foi o 1N4148 que possui corrente máxima em regime de
200 mA e o tempo de chaveamento de 4 ns.
O capacitor de supressão de transitórios tem o propósito de atenuar os efeitos
de indutâncias parasitas, e seu valor somente pode ser mensurado empiricamente com
a placa montada. Sendo assim, seu valor é 4 mF.
Todos os componentes calculados para o IR2101 são os mesmos para o
IR2102. A Figura 10 mostra-se a disposição de cada componente de Bootstrap.
24
Figura 10 – Identificação dos componentes de Bootstrap.
2.4 O Acoplamento Óptico
Os motores CC, aliados ao fato de existir um chaveamento de 20 kHz de
corrente da ordem de 30 A, geram ruídos de alta amplitude. Isso faz com que o sistema
microcontrolado ligado à mesma bateria dos motores não funcione [4]. A solução
implementada é o uso de baterias separadas para os motores e para o sistema
microcontrolado, fazendo-se necessário então o uso de acopladores ópticos para
comunicação entre o microcontrolador e a ponte H.
Logo, para fazer com que o sinal PWM gerado pelo microcontrolador chegue
à ponte H é necessário passá-lo por um sistema de opto-acopladores para então chegar
às entradas dos drivers, ou seja, os circuitos integrados IR2101 e IR2102 que
comandam a ponte H.
O acoplador óptico utilizado é o 4N35, cujo circuito montado está mostrado na
Figura 11. A Figura 12 mostra o sinal real de saída do circuito opto-acoplador em um
osciloscópio com escala de amplitude de 5 V por divisão e escala temporal de 20 μs po
divisão.
25
Figura 11 – Circuito de acoplagem óptica.
Figura 12 – Sinal na Saída do Acoplador óptico.
O sinal de saída do circuito mostrado na Figura 11 em 20 kHz possui um nível
de offset de 11 V, assim, o nível lógico “1” na saída do opto-acoplador é o sinal de 15
V e o nível lógico “0” é o sinal de tensão 11 V. Esses valores não são reconhecidos
26
pelos drivers, já que os mesmos interpretam como nível lógico “0” qualquer valor de
tensão abaixo de 0,8 V, e interpreta como “1” qualquer valor de tensão acima de 2,5 V.
Para fazer com que o sinal de saída do opto-acoplador fosse reconhecido pelo
driver, fez-se uso de um comparador com limiar de decisão de 12,5 V.
A Figura 13 mostra o sinal real obtido na saída do comparador. Este sinal está
mostrado em um osciloscópio com escala de amplitude de 5 V por divisão e 10 μs por
divisão de escala temporal.
Figura 13 – Sinal da saída de um dos comparadores.
27
O circuito resultante é ilustrado na Figura 14.
Figura 14 – Circuito de acionamento de um dos motores.
Observa-se na Figura 14 a independência entre as alimentações da ponte H e
do microcontrolador.
2.5 Dispositivos Complementares
A cadeira de rodas é composta de vários subsistemas que interagem entre si.
Assim, cada um desses sistemas tem suas próprias características: tensão de
alimentação e níveis de tensão e corrente para entrada e saída.
Para comprimir circuito e espaço, foram colocado na placa de acionamento
reguladores de tensão 7805, 7809 e o 7815 com seus três níveis de tensão,
respectivamente, 5, 9 e 15 V, sendo 5 V para os sensores e para a placa do
microcontrolador; 9V para um dispositivo de comunicação wireless “Zigbee” que pode
ser utilizado como Link de comunicação entre o PC e o microcontrolador, e 15 V para
a alimentação da eletrônica da ponte H.
Ainda para tornar compatível o microcontrolador utilizado com os sensores
houve a necessidade de disponibilizar divisores de tensão para abaixar de níveis TTL,
28
ou seja, de 0 e 5 V para 0 e 3,6 V. Isso porque o microcontrolador “MSP430F1611”
opera em 3,6 V, ou seja, seu nível lógico “1” é 3,6 V e seu nível lógico “0” é 0 V.
A Figura 15 mostra o circuito implementado para o divisor de tensão.
Figura 15 – Circuito divisor de tensão utilizado para abaixar níveis TTL para 3,6 V.
A saída do divisor de tensão é 0 e 3,4 V. Observa-se que seu valor não chega à
3,6 V, entretanto, o MSP430F1611 reconhece como nível lógico “1” qualquer nível
acima de 2,0 V [2].
2.6 Dispositivos de Segurança
Para evitar curtos circuitos e sobrecorrentes nos motores, foi colocado um
fusível na entrada de alimentação da ponte H, cujo valor é a soma das correntes
nominais dos motores acrescida de 25%. Os motores têm corrente nominal de 15 A
cada um, logo, o fusível é de 35 A.
Pelo mesmo motivo citado anteriormente, também foi colocado um fusível de
1 A na entrada de alimentação dos reguladores de 5, 9 e 15 V.
29
Para melhor controle e economia de bateria, foi colocado um relé na entrada
de alimentação da eletrônica de acionamento da ponte H. Assim, o microcontrolador
pode ligar e desligar a ponte H sem que haja necessidade e chaves. O circuito de
comando da ponte H está mostrado na Figura 16.
Alem do relé existe ainda uma chave de segurança, a qual tem por finalidade
inibir ou não o acionamento da ponte H, independentemente do relé.
Figura 16 – Dispositivos de segurança da placa.
2.7 LEDs Indicadores
Para auxiliar na visualização de acontecimentos foram colocados quatro LEDs
indicativos, sendo:
• LED verde indica que os reguladores de 5 e 9 V estão ligados.
• LED vermelho indica que o regulador de 15 V está ligado, ou seja, que a
eletrônica da ponte H está ligada.
• LED amarelo piscando regularmente a 2 Hz indica que o
microcontrolador funciona corretamente.
• LED amarelo piscando aleatoriamente indica que a comunicação serial
com o microcontrolador está ativa.
30
2.8 Conexões
2.8.1 Microcontrolador
Para fazer as conexões com os demais dispositivos que compõe o sistema
foram disponibilizados conectores do tipo “pinhead”. Por outro lado, para que a
conexão com o microcontrolador fosse possível, foi colocado o conector representado
pela da Figura 17:
Figura 17 – Conector do microcontrolador.
2.8.2 Os Encoders
Foram utilizados para leitura de velocidade dois encoders incrementais [8],
sendo um para cada roda da cadeira. Para a conexão dos encoders com o dispositivo de
controle, ou seja, com o microcontrolador MSP430F1611, foi colocado um conector
de cinco pinos para cada encoder. Assim, na Figura 18 está a descrição de cada pino
dos conectores e na Figura 19 está mostrado o encoder da roda esquerda.
31
Outro detalhe importante é a colocação dos encoders na cadeira, pois existe a
necessidade de capturar o menor movimento dos motores da cadeira. Por esta razão, os
encoders foram fixados no eixo de cada motor.
Figura 18 – Conector de um dos encoders.
2.8.3 O Sonar
Outro sensor que necessitou de uma interface com o microcontrolador foi o
sonar. Para a interface em questão também foi utilizado um divisor de tensão para
abaixar os níveis de saída do sonar [9].
Assim, a interface com o sonar está representada na Figura19.
Figura 19 – Conector do sonar.
32
2.8.4 Conexões Para Expansão
Ainda para possíveis expansões, e para possíveis dispositivos posteriormente
anexados ao sistema, foram disponibilizados 13 divisores de tensão para abaixar níveis
TTL para 3,6 V. Assim, foram colocados mais dois conectores, um de entrada TTL e
outro de saída até 3,6 V.
Na Figura 20 é ilustrado o esquemático da interface de expansão.
Figura 20 – Conectores de expansão.
33
2.8.5 O Mapa da Placa
Na Figura 21 está a placa final com as indicações de todas suas partes
integrantes.
Figura 21 – Placa final.
34
3 O SISTEMA DE CONTROLE DE BAIXO NÍVEL
A placa de acionamento discutida anteriormente é controlada por um
microcontrolador. Neste, é executado um algoritmo de controle de velocidade das
rodas da cadeira de rodas denominado, “controlador”, e um algoritmo de comunicação
com um PC.
O PC executa o algoritmo de controle de alto nível o qual recebe informações
dos encoders com as quais é feita a hodometria e o controle de trajetória.
O objetivo do sistema de controle baixo nível é enviar informações de leitura
dos encoders a um PC e receber informações de velocidade das rodas. Com base nos
valores de velocidade recebidos do PC, e em informações obtidas dos encoders, o
algoritmo de controle de baixo nível executado no microcontrolador deve controlar as
larguras dos sinais PWM de modo a controlar as velocidades das rodas da cadeira.
3.1 O Microcontrolador
Como salientado anteriormente, o microcontrolador utilizado no projeto é o
MSP430F1611 da Texas instruments. Este dispositivo é uma máquina RISC de 16 Bits
com 56 kB de memória flash e 8 kB de memória RAM. Pode operar em até 8 MHz e é
alimentado em 3,6 V [2].
O MSP430F1611 é um microcontrolador desenvolvido para aplicações de
baixa demanda de potência. Possui um baixo consumo e ainda dispõe de inúmeros
periféricos internos que possibilitam o desenvolvimento de sistemas rápidos,
confiáveis e pequenos.
Para testes e prototipagem foi utilizada uma placa de testes para o
microcontrolador em questão, a qual foi desenvolvida pelo Laboratório de Automação
Inteligente (LAI) do Departamento de Engenharia Elétrica (DEL) da Universidade
Federal do Espírito Santo (UFES). A Figura 22 mostra a placa de testes utilizada [3].
O programa foi escrito na liguagem C, e a plataforma de programação é o
IAR Embedded Workbench for MSP430.
35
Figura 22 – Placa de prototipagem do MSP430.
3.2 A Aquisição de Dados dos Encoders
O encoder é um transdutor que converte um movimento angular ou linear em
uma série de pulsos digitais elétricos. Esses pulsos gerados podem ser usados para
determinar velocidade, taxa de aceleração, distância, rotação, posição ou direção [10].
O sistema de leitura é baseado em um disco (encoder rotativo), formado por
janelas radiais transparentes e opacas alternadas. Este é iluminado perpendicularmente
por uma fonte de luz infravermelha, quando então, as imagens das janelas
transparentes são projetadas no receptor. O receptor converte essas janelas de luz em
pulsos elétricos conforme os desenho das Figuras 23 e 24. Os encoders podem ser
divididos em encoders incrementais e absolutos.
36
Figura 23 - Princípio de funcionamento de um encoder rotativo.
Figura 24 - Princípio de funcionamento de um encoder linear.
37
O encoder incremental fornece normalmente dois pulsos quadrados defasados
em 90º, que são chamados usualmente de canal A e canal B, de acordo com a Figura
25. A leitura de somente um canal fornece apenas a velocidade, enquanto que a leitura
dos dois canais fornece também o sentido do movimento.
Figura 25 - Representação gráfica dos sinais A e B de um encoder incremental.
Os encoders utilizados neste trabalho são do tipo incremental (Figura 26).
Assim, processo de leitura de velocidade das rodas começa com a captura do período
dos sinais gerado pelos encoders. Como salientado anteriormente, os encoders estão
acoplados aos eixos de cada motor. Sabendo que os motores estão ligados às rodas por
um sistema de polias e correias, e ainda desprezando qualquer tipo de folga,
escorregamentos e distensão no sistema de polias e correias é possível afirmar que os
períodos dos sinais de cada encoder são proporcionais ao período de sua respectiva
roda.
Para se obter o valor de velocidade em metros por segundo apenas com a
captura dos períodos dos sinais dos encoders, foi necessário primeiramente capturar o
período dos encoders. O MSP430F1611 possui um periférico especifico para captura
38
de período de sinais chamado TIMERB. Este periférico é uma série de contadores e
registradores com capacidade de geração de interrupção [2].
O processo de captura de períodos do TIMERB se baseia em um contador de
relógio operando a 8 MHz e quatro outros registradores com seus respectivos sinais de
gatilhos. Assim, quando é gerada uma transição de “0” para “1” nos sinais de gatilhos
os registradores armazenam o atual valor do contador e geram uma interrupção para o
programa. Este valor armazenado corresponde a um número inteiro de períodos de 125
ns. Assim, basta saber quanto tempo se passou de uma transição até outra para se obter
o valor o período do sinal de gatilho.
Os sinais dos encoders são configurados como sinais de gatilho para o
TIMERB. Dessa maneira, é possível obter números inteiros múltiplos de 125 ns que
correspondem ao valor dos períodos dos encoders.
O algoritmo de captura de período é executado nas interrupções no programa
geradas pelas transições de “0” para “1” dos sinais dos encoders conectados aos pinos
de captura do TIMERB (sinal de gatilho). Dessa maneira, é feita uma subtração entre
dois valores consecutivos capturados e o valor do período é essa diferença de valores.
Em seguida, ainda é feita uma avaliação do sentido de giro das rodas, que como
salientado anteriormente, é possível ser feita apenas observando os valores dos dois
canais de cada encoder. Assim, quando o sentido de giro da roda é para frente o valor
do período é positivo, e quando o sentido de giro é para trás o valor do período é
negativo. Os períodos capturados são ainda colocados em variáveis do tipo long int,
ocupando assim 4 Bytes cada um.
Como todo sistema de medição de uma grandeza física, existe a necessidade
de calibração prévia. Para tal, fixou-se um valor de largura de pulso do sinal PWM de
uma das rodas, e depois, com o auxilio de um Tacômetro e de um programa de testes
executado no microcontrolador, que captura o período dos sinais dos encoders e
transmite seu valor pela interface serial, foram feitas várias medições de velocidade da
roda das quais se tirou uma média.
39
O valor obtido foi 3840, de modo que para se obter o valor da velocidade de
uma das rodas em metros por segundo, basta dividir 3840 pela diferença entre dois
valores consecutivos de um dos registradores de captura do TIMERB.
Figura 26 – Encoder da roda direita.
3.3 A Comunicação
A comunicação se dá através de uma interface serial. O MSP430 possui duas
interfaces seriais internas, USART0 e USART1, das quais foi utilizada apenas a
USART0. Essas interfaces são bastante versáteis, visto que depois de devidamente
configuradas a transmissão se dá apenas escrevendo um valor em um registrador,
U0TXBUF. E para ter acesso ao caractere recebido basta ler o valor de um registro, o
U0RXBUF. Outra característica importante das interfaces seriais em questão é a
capacidade de geração de interrupção de programa no microcontrolador, o que torna
possível a transmissão e recepção de seqüências de caracteres de forma eficiente [2].
Para a comunicação com o PC se faz necessário o uso de um conversor de
níveis, visto que o PC utiliza o protocolo RS-232 para comunicação serial, que utiliza
níveis de -12 a +12 V [11], e o microcontrolador de 0 a 3,6 V [1].
40
Para fazer a interface entre o PC e o microcontrolador se fez necessário o uso
do MAX3243 [11], que é um conversor de níveis RS-232 para níveis aceitáveis pelo
microcontrolador.
As duas interfaces seriais do MSP430F1611 podem operar em varias taxas de
comunicação e em várias configurações, entretanto, por uma questão de
compatibilidade de temporização com o algoritmo de controle, foi escolhida a taxa de
57,6 kbps com um Bit de parada, oito Bits (01 Byte) de dados e sem Bit de paridade. A
Figura 27 mostra a seqüência temporal de envio dos dados pela interface serial do
MSP430F1611.
Figura 27 – Disposição dos Bits em uma transmissão serial.
Escolheu-se a configuração citada anteriormente devido ao fato do PC
requerer de 100 em 100 ms que o microcontrolador envie as informações lidas dos
encoders. Essas informações são os últimos valores medidos dos períodos dos dois
encoders, que, por serem variáveis do tipo “long int”, ocupam quatro Bytes cada uma.
Logo, para o microcontrolador enviar as informações requeridas pelo PC, terá de
enviar oito Bytes. Portanto, são gastos aproximadamente 1,6 ms para a transmissão
dos dois valores de período.
Observou-se que os Bytes mais significativos dos períodos eram em sua
grande maioria zero. Este fato poderia levar a uma elevada taxa de erros de
transmissão, visto que um caractere todo preenchido por zeros pode levar a uma perda
de sincronismo de relógio entre as interfaces seriais do PC e do microcontrolador. Para
solucionar este possível problema, é feita na transmissão dos dados uma operação
lógica do tipo ou exclusivo Byte a Byte com o valor hexadecimal 0xAA, e na recepção
é feito o mesmo procedimento para se recuperar o valor original do Byte recebido.
Dessa maneira a probabilidade de ocorrer uma seqüência longa de zeros diminui,
fazendo a taxa de erros cair [12].
41
O PC tem a função de enviar um requerimento de envio de dados, aguardar o
recebimento das informações dos encoders e traçar uma trajetória para a cadeira. Em
seguida, deve enviar ao microcontrolador comandos de controle para guiar a cadeira
conforme a trajetória traçada.
Para tal, foi criada uma seqüência de comandos de controle para a cadeira.
Cada comando é representado por uma letra, assim, quando o PC necessitar enviar um
comando à cadeira ele deve enviar o caractere ASCI correspondente à letra do
comando.
Abaixo está listada a sequencia de comandos com suas respectivas letras.
• l – ligar as pontes H.
• d – desligar as pontes H.
• s – requerimento para envio de informações dos encoders.
• r – reset de todas as variáveis envolvidas com o sistema de controle.
• t – teste para as conexões dos motores com a placa.
• v – atualizar o valor da velocidade linear.
• w - atualizar o valor da diferença de velocidade linear entre as duas rodas.
O comando “l” deve ser enviado quando houver a necessidade de movimento
da cadeira, pois, quando o microcontrolador recebe uma letra “l” ele seta um pino de
saída de modo a ligar o relé do acionamento das pontes H.
O comando “d” deve ser enviado quando houver a necessidade de desligar o
acionamento das pontes H da cadeira, pois, quando o microcontrolador recebe uma
letra “d” ele limpa um pino de saída de modo a desligar o relé do acionamento das
pontes H.
O comando “r” provoca a um reset em todas as variáveis de controle da
cadeira, provocando assim, uma parada brusca da mesma.
42
O PC necessita periodicamente dos dados dos encoders. Para obtê-los, o PC
envia um comando representado pela letra “s”, que, assim que recebido, o
microcontrolador envia oito Bytes contendo as informações dos períodos dos
encoders.
O comando “t” faz com que o microcontrolador verifique se os motores e os
encoder estão conectados corretamente. Assim, quando é recebido um “t” pelo
microcontrolador, primeiramente é provocado um movimento para frente na roda
direita, de modo que é esperada uma captura positiva do encoder conectado na roda
direita. Se o valor capturado for positivo, o microcontrolador envia pela interface serial
um caractere “c”, indicando que as conexões da roda direita estão corretas. Contudo,
se o valor for negativo o microcontrolador envia um caractere “D”, indicando assim
que existe algo errado com as conexões do motor direito. Em seguida é executado o
mesmo procedimento com a roda esquerda, contudo, o caractere enviado pelo
microcontrolador em caso de erro agora é “E”.
Para atualizar os valores de velocidade linear da cadeira utiliza-se o comando
“v”. Assim, quando, o microcontrolador recebe um caractere ASCI “v”, é entendido
que os próximos dois Byte recebidos são o Byte mais significativo e menos
significativo de uma variável inteira, que corresponde ao valor da velocidade atual em
milímetros por segundo. O mesmo acontece quando é rebebido um “w”, contudo, o
valor é interpretado como sendo a diferença de velocidade entre as rodas, necessária
para fazer curvas.
Todos os teste de comunicação foram feitos com auxilio de um software de
comunicação via interface serial chamado RComserial [13] (Figura 28) e de um
dispositivo de comunicação serial wireless “ZigBee” [14].
Este software tem a capacidade de enviar e receber dados via porta serial.
Assim, foi possível emular o PC, já que o sistema de controle de alto nível não estava
disponível no desenvolvimento deste trabalho.
43
Figura 28 – interface do programa RComSerial.
3.4 O Controlador
O sistema de controle de baixo nível consiste em controlar as velocidades das
rodas de acordo com o que foi estabelecido por um algoritmo de alto nível executado
em um PC.
Diante disso, o sistema de controle de baixo nível deve capturar as
informações de velocidade dos encoders e ajustar o valor do PWM, de modo a manter
as velocidades das rodas nos valores estabelecidos pelo sistema de controle de alto
nível.
O microcontrolador tem a função de executar o algoritmo de controle de baixo
nível chamado “controlador”.
44
Como salientado anteriormente, a cadeira possui dois motores, sendo um para
cada roda de tração. Devido a este motivo, as curvas são feitas de forma diferencial, ou
seja, através da diferença de velocidade entre as duas rodas da cadeira. Na figura 29 é
representada a cadeira e suas variáveis de controle de alto nível, que não são abordadas
neste trabalho.
Como salientado anteriormente o PC de bordo se encarrega executar o
algoritmo de controle de alto nível que traça a trajetória da cadeira e envia para o
sistema de controle de baixo nível informações de velocidade. O sistema de controle
de baixo nível é executado no microcontrolador,o qual se encarrega de carrega de
controlar as velocidades das rodas da cadeira.
Figura 29 – Modelo dinâmico da cadeira de Rodas.
O controlador escolhido foi um proporcional com laço integrativo, como
mostrado na Figura 30 [4].
45
Figura 30 – Controlador proporcional com laço integrativo.
O funcionamento do controlador citado acima é baseado no cruzamento de
informações das duas rodas, ou seja, o sinal de controle para cada roda é gerado a
partir do sinal de erro das duas rodas.
O ramo integral do controlador tem a função de manter as duas rodas com
velocidades iguais, e ainda corrigir qualquer desvio de rota que pode ocorrer na
dinâmica do sistema.
Contudo, em testes práticos, o controlador da Figura 30 não apresentou
resultados satisfatórios, pois, apresentava um erro em regime muito acentuado, e
quando ajustado o ganho proporcional para reduzir o erro em regime, o controlador
respondia rápido demais, provocando mudanças abruptas de velocidade. Esse
comportamento não é satisfatório, haja vista que erro em regime compromete o
desempenho de todo sistema, e mudanças abruptas de velocidade torna a cadeira
desconfortável para o usuário que se encontra sobre a mesma.
O ramo integral tem como principal característica a extinção do erro em
regime [15]. Esta característica levou à proposta de um novo controlador. O novo
46
controlador tem um ramo integral para cada roda somado ao ramo proporcional já
existente no controlador da Figura 30. Na Figura 31 mostra-se o controlador utilizado.
Figura 31 – Controlador implementado.
O controlador da Figura 31 possui um ramo integrativo individual para cada
roda, isso em regime seja igual a zero e ainda possibilita ajustar a velocidade de
resposta transitória de acordo com o necessário para o conforto do usuário.
Os resultados obtidos com o controlador da Figura 31 foram bastante
satisfatórios.
Outra característica importante é o fato do controlador da Figura 31 funcionar
como freios, haja vista que, quando a velocidade desejada é zero o controlador se opõe
a qualquer tentativa de movimento das rodas e ainda corrige qualquer desvio de
posição ocorrido.
47
Toda a análise de resultados foi feita de forma visual e com auxílio de
equipamentos simples, tais como tacômetros e osciloscópio.
A escolha dos parâmetros do controlador foi feita com base na experiência
adquirida em diversos testes com o sistema [Apêndice 1].
O controlador da Figura 31 é um algoritmo executado no microcontrolador
[Apêndice 3]. Este algoritmo obedece alguns pré-requisitos mais amplamente
discutidos no Apêndice 2.
48
4 CONCLUSÕES E TRABALHOS FUTUROS
O objetivo deste trabalho foi desenvolver um sistema de controle de baixo
nível para uma cadeira de rodas robotizada controlada por sinais eletro-biológicos.
Este sistema consiste de placa de acionamento dos motores da cadeira e ainda de um
programa executado em um microcontrolador que tem o objetivo, juntamente com um
sistema de controle de alto nível, de prover a robotização da cadeira.
Foi possível implementar um sistema confiável e robusto que pode ser
acoplado a qualquer cadeira de rodas elétricas.
Ainda, devido ao fato do sistema de controle de baixo nível ter sido
implementado em um microcontrolador, as possibilidades de ampliação das funções da
cadeira são inúmeras, tendo em vista que a placa de acionamento também possui
possibilidade de expansão.
Foram feitos com a cadeira diversos testes com usuários diferentes a bordo, e
todos apresentaram resultados satisfatórios.
Contudo, um problema a ser resolvido em trabalhos futuros é o excessivo
aquecimento dos transistores da ponte H. Isso se deve ao fato de durante um intervalo
de tempo muito curto no período de comutação dos transistores haver um caminho de
baixa resistência entre transistores do mesmo lado das pontes H. Isso leva à dissipação
razoável de potência nas mesmas. A solução encontrada foi a colocação de um
dissipador acoplado a um ventilador (Figura 33) para auxiliar na dissipação do calor.
Na Figura 32 estão mostrados os sinais de entrada dos gates dos transistores de um
mesmo braço de uma das pontes H, na qual observa-se um breve período de condução
simultânea dos mesmos .
49
Figura 32 – Sinais de excitação de transistores de mesmo braço de uma das pontes H.
Figura 33 – Dissipador e ventilar instalados na placa.
50
REFERÊNCIAS BIBLIOGRÁFICAS
[1] FREIRE, E.O. et al. Human-Machine Interface Based on Electro-Biological
Signals for Mobile Vehicle Control, Proceedings of the 2006 IEEE International
Symposium on Industrial Electronics, Anais… Montreal, [s.n]Jun.2006. p. 2954-
2959.
[2] TEXAS INSTRUMENTS. MSP430X1XX FAMILY User’s guide [s.n,2003].
[3] LABORÁTORIO DE AUTOMAÇÃO INTELIGENTE (LAI). PROTO430 Placa
de prototipagem para microcontrolador TI MSP430. [s.n, 2005].
[4] JONES, Joseph L.; FLYNN, Anita M.; SEIGER, Bruce A. - Mobile Robots:
inspiration to implementation. Massachusetts: Wellesley, 2001.
[5] SEDRA. A. S., SMITH, K. C. Microelectronic circuits. 3rd Ed. USA, HWR
Saunders College Publishing, 1991.
[6] INTERNATIONAL RECTIFIER (IRF). Data Sheet No. PD60043 Rev. O IR2101(S)/IR2102(S) & (PbF) [s.n, 2004].
[7] INTERNATIONAL RECTIFIER (IRF). Data Sheet No. PD-91279E IRF3205
[s.n, 2001].
[8] INTERNATIONAL RECTIFIER (IRF). DESIGN TIP DT 98-2a. Bootstrap
Component Selection For Control IC’s. [s.n, 2001].
[9] FREIRE, Eduardo Oliveira. Desenvolvimento de um Sistema de Sensoriamento
Ultra-Sônico para Robô Móvel. Vitória: UFES, 1997.100p. Tese (Mestrado) –
Programa de Pós- Graduação em Automação, Universidade Federal do Espírito Santo,
Vitória, 1997.
[10] MATIAS, Juliano. Encoders. São Paulo: Saber, 2002. Disponível em:
<http://www.mecatronicaatual.com.br/artigos/cnc/> Acesso em: 09 de Julho de 2007.
51
[11] TEXAS INSTRUMENTS. MAX3243 3 V TO 5, 5 V MULTICHANNEL RS-
232 LINE DRIVER/RECEIVER – Technical Data [s. n, 2004].
[12] MUNIZ, Rogério. Princípios de Telecomunicações. Vitória: Tropical, 2003.
[13] MESSIAS, Antônio Rogério. Comunicação com Porta Serial. São Paulo:
Copyright, 2006. Disponível em:
<http://www.rogercom.com/PortaSerial/PortaSerial.htm>Acesso em: 15 de julho de
2007.
[14] MAXSTREAM – Zigbee OEM RF MODULE. Disponivel em
http://www.maxstream.net/ Acesso em: 15 de julho de 2007.
[15]DORF, Richard,C. BISHOP, Robert H. Sistemas De Controle Moderno. 8ª ed.
USA, HWR Saunders College Publishig, 1989.
52
APÊNDICES
1. A Obtenção de Parâmetros do Controlador
A cadeira de rodas é um sistema de duas entradas e duas saídas acopladas de
acordo com a Figura 34, ou seja, as duas rodas interagem-se entre si, o que faz em que
qualquer variação de velocidade de uma das rodas influenciar na velocidade da outra.
Figura 34 – Representação da cadeira como sistema de duas variáveis acopladas.
Existem muitas técnicas para se obter os parâmetros de um controlador para
um sistema como a cadeira de rodas. Contudo, com base no conhecimento adquirido
no projeto de todo sistema de acionamento dos motores, e com a prática também
adquirida em inúmeros testes práticos com a cadeira, foi possível sintonizar o
controlador em questão de acordo com as necessidades do projeto sem maiores
dificuldades.
53
2. O Algoritmo de Controle
O microcontrolador, assim como todo sistema programável, executa um
programa de forma seqüencial, ou seja, uma instrução por vez. Foram implementadas
duas funções: o controlador e uma função de comunicação.
O controlador é uma função custosa no sentido de processamento, isso porque
efetua uma série de divisões e multiplicações entre outras operações. Portanto, deve-se
ter muito cuidado com o algoritmo implementado, pois, um algoritmo pouco eficiente
pode na sua execução não respeitar a dinâmica do sistema o que leva à instabilidade do
mesmo [4] [15].
O software de programação utilizado é o IAR Embedded Workbench que
também é um software de simulação que permite estimar o tempo de execução e a
eficácia de programa executado no microcontrolador.
A primeira versão do programa implementava um controlador que manipulava
variáveis em ponto flutuante. O controlador necessitava em sua demanda máxima de
aproximadamente 23000 ciclos de relógio para ser executado. Isso é o equivalente, em
8 MHz de relógio, a quase 3 ms de tempo de execução.
Observando o tempo de execução da função que executava o controlador e
ainda o tempo de execução da função de comunicação que é de aproximadamente 50
µs no pior caso, foi estipulado que o controlador deve ser executado de forma
síncrona, ou seja, deve haver um temporizador para indicar o momento no qual o
controlador deve ser executado. Este período de execução do controlador é de 4 ms.
Na versão final, foi utilizado um numero mínimo de variáveis em ponto
flutuante, assim, as demais foram realizadas em ponto fixo com quatro casas decimais
de precisão.
O desempenho obtido com as modificações nas variáveis se mostrou muito
satisfatório, haja vista que agora necessita de 1,5 ms para ser executado, e o período de
execução do microcontrolador pode então ser abaixado para 3 ms.
54
3. Programa criado para execução no microcontrolador
#include <intrinsics.h> #include <msp430x16x.h> // declaração de funcões //////////////////////////////////////////////////////////////////// void USART(void); void controlador(long int periodo_1,long int periodo_2); void setup(void); int transmissao_PC(long int dado,long int dado2); ///////////////////////////////////////////////////////////////////////////////////////////// // declaração de vairáveis globais int tempo_para_zero = 35; unsigned int deley = 0; char buf_RX[16]; char buf_TX[16]; int pont_rec = 0; int pont_proc = 0; int temp_encoder_1 = 3; int temp_encoder_2 = 3; int temp_controlador = 3; unsigned int buffer_TBCCR1 = 0; unsigned int buffer_TBCCR2 = 0; unsigned int buffer_TBCCR3 = 0; unsigned int buffer_TBCCR4 = 0; unsigned int buffer_TBCCR5 = 0; int temp_led = 15; int temp_sonar = 15; int pont_TX = 0; int conta_tempo = 0; long int periodo_1; long int periodo_2; long int periodo_sonar = 0; long int passada_inteira_11 = 0; long int passada_inteira_12 = 0; long int passada_inteira_21 = 0; long int passada_inteira_22 = 0; long int passada_inteira_sonar = 0; long int somatoria_1 = 0; long int somatoria_2 = 0; long int somatoria_w = 0; float ki; float ki_2; float kp; int set_point = 0; int delta_v = 0; char acao_atual = 'n'; struct { unsigned int enc_1_z :1; unsigned int enc_2_z :1; unsigned int controlador :1;
55
unsigned int trava_intregral_2 :1; unsigned int trava_intregral_1 :1; }controle; struct { char sonar :1; }disp; ///////////////////////////////////////////////////////////////////////////////////////////// //#include "asci_dec.c" #pragma vector = TIMERB1_VECTOR __interrupt void trata_timer_B1(void) { switch (TBIV) { case 0x02 : if ((TBCCTL2 & CCI) != 0) { periodo_1 = TBCCR1 + (passada_inteira_11 - buffer_TBCCR1); } else { periodo_1 = + buffer_TBCCR1 - (TBCCR1 + passada_inteira_11) ; } buffer_TBCCR1 = TBCCR1; passada_inteira_11 = 0; controle.enc_1_z = 0; temp_encoder_1 = tempo_para_zero; break; case 0x04 : if ((TBCCTL1 & CCI) == 0) { periodo_1 = TBCCR2 + (passada_inteira_12 - buffer_TBCCR2); } else { periodo_1 = + buffer_TBCCR2 - (TBCCR2 + passada_inteira_12) ; } buffer_TBCCR2 = TBCCR2; passada_inteira_12 = 0; controle.enc_1_z = 0; temp_encoder_1 = tempo_para_zero; break; case 0x06 : if ((TBCCTL4 & CCI) == 0) { periodo_2 = TBCCR3 + (passada_inteira_21 - buffer_TBCCR3); } else { periodo_2 = + buffer_TBCCR3 - (TBCCR3 + passada_inteira_21) ; } buffer_TBCCR3 = TBCCR3; passada_inteira_21 = 0; controle.enc_2_z = 0;
56
temp_encoder_2 = tempo_para_zero; break; case 0x08 : if ((TBCCTL3 & CCI) != 0) { periodo_2 = TBCCR4 + (passada_inteira_22 - buffer_TBCCR4); } else { periodo_2 = buffer_TBCCR4 - (TBCCR4 + passada_inteira_22); } buffer_TBCCR4 = TBCCR4; passada_inteira_22 = 0; controle.enc_2_z = 0; temp_encoder_2 = tempo_para_zero; break; case 0x0a : // eco periodo_sonar = TBCCR5 + (passada_inteira_sonar - buffer_TBCCR5); //U0TXBUF = 'h'; break; case 0x0c : // init buffer_TBCCR5 = TBCCR6; passada_inteira_sonar = 0; temp_sonar = 20; break; case 0x0e : passada_inteira_11 += 65536; passada_inteira_12 += 65536; passada_inteira_21 += 65536; passada_inteira_22 += 65536; passada_inteira_sonar += 65536; break; default : break; } } #pragma vector = TIMERB0_VECTOR __interrupt void trata_timer_B0(void) { TBCCR0 += 8000; if (temp_controlador == 0) { temp_controlador = 2; controle.controlador = 1; } else { temp_controlador --; } //CONTADOR DE ZERO DOS ENCODERS if (temp_encoder_1 <= 0 ) {
57
temp_encoder_1 = tempo_para_zero; controle.enc_1_z = 1; } else { temp_encoder_1--; } // CONTADOR DE ZERO DOS ENCODERS if (temp_encoder_2 <= 0 ) { temp_encoder_2 = tempo_para_zero; controle.enc_2_z = 1; } else { temp_encoder_2--; } // tempórizador para controlador //PISCA LED if (temp_led == 0) { temp_led = 250; P2OUT ^= 0x04; } else { temp_led --; } } #pragma vector = TIMERA1_VECTOR __interrupt void timer_A(void) { switch (TAIV) { case 0x02: break; default : break; } } #pragma vector = TIMERA0_VECTOR __interrupt void timer_A0(void) { } ///////////////////////////////////////////////////////////////////////////////////////////////// #pragma vector = USART0RX_VECTOR __interrupt void recepcao(void) { pont_rec ++; pont_rec &= 0x000f; buf_RX[pont_rec] = U0RXBUF; }
58
////////////////////////////////////////////////////////////////////////////////////////////////// #pragma vector = USART1RX_VECTOR __interrupt void recepcao1(void) { } ///////////////////////////////////////////////////////////////////////////////////////////////// #pragma vector = USART0TX_VECTOR __interrupt void transmicao(void) { if (pont_TX > 0) { P2OUT |= 0x02; pont_TX--; U0TXBUF = buf_TX[pont_TX]; } else { P2OUT &= 0xFD; pont_TX = 0; } } //////////////////////////////////////////////////////////////////////////////////////// #pragma vector = USART1TX_VECTOR __interrupt void transmicao1(void) { } void main( void ) { WDTCTL = WDTPW + WDTHOLD; // desaviva o wacth dog ////////////////////////////////////////////////////////////////////////////////////////////// // configura o MCLK para o X2 em 8MHz BCSCTL1 = DIVA_0 + RSEL2; BCSCTL2 = SELM_2 + DIVM_0 + SELS + DIVS_0; deley = 2000; do { deley --; } while (deley != 0); IFG1 = 0; // configuração do timer B com a frequencia de interrupção do CCPB0 igual a 2s o clock é de 1/2^15 s TACTL = TASSEL_2 + ID_0 + MC_1; TACCTL0 =0X00; TACCTL1 = OUTMOD_7; TACCTL2 = OUTMOD_7; TACCR0 = 400; TACCR1 = 200; TACCR2 = 200; ////////////////////////////////////////////////////////////////////////////////////////////// // configuracao da USART ME1 = UTXE0 + URXE0;
59
U0CTL = 0; U0CTL = CHAR + SWRST; // CONFIGURA PARA BIT DE PARIDADE 8 BITS RECEBIDOS E ENDERECAMENTO POR INATIVIDADE DE LINHA U0TCTL = SSEL1 + SSEL0; // C0ONFIGURA O CLOCK DA USART PARA O SMCLK QUE DEVE SER DE 1Mhz //U0RCTL = 0; // CONFIGURA A INTERRUPÇÃO DE CARACTERES U0MCTL = 0XEF; // CONFIGURA A VELOCIDADE DE ENVIO PARA 9600 Bps U0BR0 = 0X8A; U0BR1 = 0X00; U0CTL = U0CTL & 0xfe ; IE1 = UTXIE0 + URXIE0; /* ME1 = UTXE0 + URXE0; U0CTL = 0; U0CTL = CHAR + SWRST; // CONFIGURA PARA BIT DE PARIDADE 8 BITS RECEBIDOS E ENDERECAMENTO POR INATIVIDADE DE LINHA U0TCTL = SSEL1 + SSEL0; // C0ONFIGURA O CLOCK DA USART PARA O SMCLK QUE DEVE SER DE 1Mhz //U0RCTL = 0; // CONFIGURA A INTERRUPÇÃO DE CARACTERES U0MCTL = 0X92; // CONFIGURA A VELOCIDADE DE ENVIO PARA 9600 Bps U0BR0 = 0X41; U0BR1 = 0X03; U0CTL = U0CTL & 0xfe ; IE1 = UTXIE0 + URXIE0; */ /////////////////////////////////// TBCTL = TBCLGRP_0 + CNTL_0 + TBSSEL_2 + ID_0 + MC_2 + TBIE; TBCCTL0 = CCIE; TBCCTL1 = CM_1 + OUTMOD_0 + SCS + CAP + CCIE; TBCCTL2 = CM_1 + OUTMOD_0 + SCS + CAP; TBCCTL3 = CM_1 + OUTMOD_0 + SCS + CAP + CCIE; TBCCTL4 = CM_1 + OUTMOD_0 + SCS + CAP; TBCCTL5 = CM_1 + OUTMOD_0 + SCS + CAP + CCIE; TBCCTL6 = CM_1 + OUTMOD_0 + SCS + CAP + CCIE; TBCCR0 = 0; _EINT(); // CONGURAÇÃO DAS PORTAS P1DIR = 0XFF; P1SEL = 0XFF; P2DIR = 0XFF; P2SEL = 0X00; P5DIR = 0XFF; P5SEL = 0X00; P3DIR = 0XFF; P3SEL = 0XF0; P4DIR = 0X00; P4SEL = 0XFF; P6DIR = 0XFF; P6SEL = 0XFF; P2OUT = 0X00; ki = (0.150);//0.003*50 ki_2 = (0.0000750);//0.003*250/10000 kp = 0.01;//100/10000 somatoria_1 = 0; somatoria_2 = 0; somatoria_w= 0; controle.enc_1_z = 1;
60
controle.enc_2_z = 1; while (1) { if (pont_rec != pont_proc) { USART(); } if (controle.controlador == 1) { controlador(periodo_1,periodo_2); controle.controlador = 0; } } } ///////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////// void USART(void) { int aux; int ponteiro; char processa = 1; ponteiro = pont_proc; while (processa == 1) { switch (acao_atual) { case 'w' : aux = pont_rec - ponteiro; if (aux < 0) { aux += 16; } if ((aux) >= 2) { ponteiro++; ponteiro &= 0x000f; delta_v = 0; delta_v = buf_RX[ponteiro]; ponteiro++; ponteiro &= 0x000f; delta_v = delta_v << 8; delta_v |= buf_RX[ponteiro]; delta_v *= 10; acao_atual = 'n'; if (ponteiro == pont_rec) { processa = 0; pont_proc = ponteiro;
61
} } else { processa = 0; } break; case 'v' : aux = pont_rec - ponteiro; if (aux < 0) { aux += 16; } if ((aux) >= 2) { ponteiro++; ponteiro &= 0x000f; set_point = 0; set_point = buf_RX[ponteiro]; ponteiro++; ponteiro &= 0x000f; set_point = set_point << 8; set_point |= buf_RX[ponteiro]; set_point *= 10; acao_atual = 'n'; if (ponteiro == pont_rec) { processa = 0; pont_proc = ponteiro; } } else { processa = 0; } break; case 'l' : P2OUT |= 0X01; acao_atual = 'n'; if (ponteiro == pont_rec) { processa = 0; pont_proc = ponteiro; } break; case 'd' : P2OUT &= 0XFE; acao_atual = 'n'; if (ponteiro == pont_rec) { processa = 0; pont_proc = ponteiro; } break; case 't' : setup(); acao_atual = 'n'; if (ponteiro == pont_rec) {
62
processa = 0; pont_proc = ponteiro; } break; case 'r' : somatoria_1 = 0; somatoria_2 = 0; somatoria_w = 0; set_point = 0; TACCR1 = 200; TACCR2 = 200; delta_v = 0; acao_atual = 'n'; if (ponteiro == pont_rec) { processa = 0; pont_proc = ponteiro; } break; case 's' : pont_TX = transmissao_PC(periodo_1,periodo_2);// 13us acao_atual = 'n'; if (ponteiro == pont_rec) { processa = 0; pont_proc = ponteiro; } break; case 'n' : if (ponteiro == pont_rec) { processa = 0; pont_proc = ponteiro; } else { ponteiro++; ponteiro &= 0x000f; acao_atual = buf_RX[ponteiro]; pont_proc = ponteiro; } break; default : acao_atual = 'n'; if (ponteiro == pont_rec) { processa = 0; pont_proc = ponteiro; } break; } } } void controlador(long int periodo_1,long int periodo_2) { long int e_1;
63
long int e_2; long int speed_1; long int speed_2; long int u_1; long int u_2; long int aux_w; long int delta_speed; long int aux_somatoria_1; long int aux_somatoria_2; static long int e_1_ant = 0; static long int e_2_ant = 0; // acha a velocidade if ( controle.enc_1_z == 0) { speed_1 = (38400000/(periodo_1));//3840 calibração controle.trava_intregral_1 = 0; } else { speed_1 = 0; if (controle.trava_intregral_1 == 0) { somatoria_1 = 0; controle.trava_intregral_1 = 1; } } if ( controle.enc_2_z == 0) { speed_2 = (38400000/(periodo_2)); controle.trava_intregral_2 = 0; } else { speed_2 = 0; if (controle.trava_intregral_2 == 0) { somatoria_2 = 0; controle.trava_intregral_2 = 1; } } /////////////////////////////////////////////// delta_speed = (speed_1 - speed_2);//10^(-4) somatoria_w = (delta_speed + delta_v) + somatoria_w; //10^(-4) aux_w = (ki*somatoria_w); e_1 = (set_point - (speed_1 + aux_w)); e_2 = (set_point - (speed_2 - aux_w)); aux_somatoria_1 = (e_1 + e_1_ant)/2; aux_somatoria_2 = (e_2 + e_2_ant)/2; e_1_ant = e_1; e_2_ant = e_2; u_1 = ((kp*e_1) + (ki_2*somatoria_1)); u_2 = ((kp*e_2) + (ki_2*somatoria_2)); u_1 += 200; u_2 += 200; // saturador roda 1 if ((u_1 <= 370)&&(u_1 >= 30)) {
64
TACCR1 = u_1; somatoria_1 += aux_somatoria_1; } else { if (u_1 >= 370) { TACCR1 = 370; if (aux_somatoria_1 <= 0) { somatoria_1 += aux_somatoria_1; } } else { TACCR1 = 30; if (aux_somatoria_1 >= 0) { somatoria_1 += aux_somatoria_1; } } } // saturador roda 2 if ((u_2 <=370)&&(u_2 >= 30)) { TACCR2 = u_2; somatoria_2 += aux_somatoria_2; } else { if (u_2 >= 370) { TACCR2 = 370; if (aux_somatoria_2 <= 0) { somatoria_2 += aux_somatoria_2; } } else { TACCR2 = 30; if (aux_somatoria_2 >= 0) { somatoria_2 += aux_somatoria_2; } } } } void setup(void) { char aux = 0; periodo_1 = 0; periodo_2 = 0; TACCR1 = 350; P2OUT |= 0X01; while (aux == 0)
65
{ if (periodo_1 != 0) { if (periodo_1 > 0) { aux = 1; TACCR1 = 200; U0TXBUF = 'c'; } else { aux = 1; TACCR1 = 200; U0TXBUF = 'D'; } } } aux = 0; TACCR2 = 350; periodo_1 = 0; periodo_2 = 0; while (aux == 0) { if (periodo_2 != 0) { if (periodo_2 > 0) { aux = 1; TACCR2 = 200; U0TXBUF = 'c'; } else { aux = 1; TACCR2 = 200; U0TXBUF = 'E'; } } } P2OUT &= 0XFE; } int transmissao_PC(long int dado,long int dado2) { int n=0; if (controle.enc_1_z == 1) { dado = 0; } if (controle.enc_2_z == 1) { dado2 = 0; } buf_TX[n] = (dado)^0xAA; n++; buf_TX[n] = (dado >> 8)^0xAA; n++; buf_TX[n] = (dado >> 16)^0xAA;