sistema de controle de baixo nível e instrumentação de uma...

66
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

Upload: tranlien

Post on 17-Dec-2018

220 views

Category:

Documents


0 download

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;

66

n++; buf_TX[n] = (dado >> 24)^0xAA; n++; buf_TX[n] = (dado2)^0xAA; n++; buf_TX[n] = (dado2 >> 8)^0xAA; n++; buf_TX[n] = (dado2 >> 16)^0xAA; n++; U0TXBUF = (dado2 >> 24)^0xAA; return(n); }