PDF - Universidade Federal de São Carlos

Transcrição

PDF - Universidade Federal de São Carlos
UNIVERSIDADE FEDERAL DE SÃO CARLOS
CENTRO DE CIÊNCIAS EXATAS E DE TECNOLOGIA
DEPARTAMENTO DE ENGENHARIA ELÉTRICA
PAULO ROGÉRIO FERREIRA
SISTEMA ADAPTATIVO DE FARÓIS PARA VEÍCULOS AUTOMOTORES
SÃO CARLOS
2014
1
PAULO ROGÉRIO FERREIRA
SISTEMA ADAPTATIVO DE FARÓIS PARA VEÍCULOS AUTOMOTORES
Trabalho de Conclusão de Curso apresentado ao
Departamento de Engenharia Mecânica, da
Universidade Federal de São Carlos, como parte
dos requisitos para obtenção de grau em
Engenharia Elétrica.
Orientador: Dr. Roberto Santos Inoue
São Carlos
2014
2
“Dedico
este
trabalho
primeiramente а Deus que iluminou о meu
caminho durante esta longa caminhada, à
minha mãe que me deu muito apoio nos
momentos mais difíceis da minha vida, à
minha namorada que esteve ao meu lado,
me ajudou e nunca mediu esforços para
me ajudar.”
3
AGRADECIMENTOS
Ao Prof. Dr. Roberto Santos Inoue pela paciência е incentivo na orientação,
que tornou possível а conclusão desta monografia.
Ao Prof. Dr. Arlindo Neto Montagnoli e Prof. Dr. Osmar Ogashawara pela
contribuição, não somente neste trabalho, mas em diversos momentos durante esta
graduação.
Aos professores membros da banca examinadora, pela presença e
contribuição dedicada a esse trabalho.
Aos professores do Departamento de Engenharia Elétrica por contribuírem
para o meu crescimento profissional e pessoal.
Aos técnicos e secretários do Departamento de Engenharia Elétrica, em
especial ao Sr. José Roberto Esperança.
Aos grandes amigos da primeira turma de Engenharia Elétrica da UFSCAR.
Por fim, agradeço aos amigos da moradia estudantil Raimundo Gomides e
Allan Fabossi pela amizade.
4
RESUMO
A segurança nas rodovias é uma preocupação crescente em todas as partes
do mundo e as estatísticas mostram que grande parte dos acidentes fatais em
tráfego noturno ocorre devido à iluminação inadequada. É importante melhorar a
visibilidade para o motorista para, assim, alcançar um aumento significativo na
segurança e conforto na condução. Isto exige uma luz frontal flexível nos veículos,
tanto para iluminar a estrada à frente durante a noite quanto para manobras em
estradas sinuosas.
Neste trabalho é apresentado o desenvolvimento de um protótipo conceitual
do AFS (Sistema de Faróis Adaptativos), implementando um algoritmo de controle
para movimentar os faróis em ambos os eixos horizontal e vertical de acordo com o
ângulo de direção, velocidade e suspensão.
5
ABSTRACT
The road safety is a growing concern in all over the world and statistics show
that most fatalities in night traffic occurs due to inadequate lighting. It is important to
improve visibility for the driver to, thereby, achieve a significant increase in safety and
driving comfort. This requires a flexible front light on vehicles, both to illuminate the
road ahead at night and for maneuvers on winding roads.
This paper presents the development of a conceptual prototype of AFS
(Adaptive Frontlighting System), implementing a control algorithm to move the
headlights on both horizontal and vertical axes in accordance with the steering angle,
speed and suspension.
6
LISTA DE FIGURAS
Figura 1 - Distribuição do facho luminoso para Town Light (SCHMIDT, KALZE e
EICHHORN, 2007) .................................................................................................................. 12
Figura 2 - Distribuição do facho luminoso para Country Light (SCHMIDT, KALZE e
EICHHORN, 2007) .................................................................................................................. 12
Figura 3 - Distribuição do facho luminoso para Motorway Light (SCHMIDT, KALZE e
EICHHORN, 2007) .................................................................................................................. 12
Figura 4 - Distribuição do facho luminoso para Adverse Weather Light (SCHMIDT, KALZE
e EICHHORN, 2007) ............................................................................................................... 13
Figura 5 - Distribuição do facho luminoso para High Beam (SCHMIDT, KALZE e
EICHHORN, 2007) .................................................................................................................. 13
Figura 6 - Distribuições dos fachos luminosos do AFS ........................................................... 13
Figura 7 - Modo de Iluminação Dinâmica ............................................................................... 14
Figura 8 - Módulo de projeção de farol HID de xenônio equipado com AFS (SCHMIDT,
KALZE e EICHHORN, 2007) ............................................................................................... 14
Figura 9 - Modo de Iluminação Estática .................................................................................. 15
Figura 10 - Condição Ackermann (GRANDA, J, 2010) .......................................................... 18
Figura 11 - Direção do veículo e ângulo das rodas interna e externa (GRANDA, J, 2010) .... 19
Figura 12 - Modelo equivalente para a direção de um veículo (GRANDA, J, 2010) .............. 20
Figura 13 - Ângulo de correção do modelo cinemático horizontal do AFS (XU e GUOYU,
2011) ......................................................................................................................................... 21
Figura 14 - Modelo analítico para cinemática vertical do AFS................................................ 22
Figura 15 - Suporte da Lâmpada projetado em CAD ............................................................... 25
Figura 16 - Montagem completa do Protótipo em CAD .......................................................... 25
Figura 17 - Suporte da Lâmpada confeccionado em impressora 3D........................................ 25
Figura 18 - Montagem completa do Protótipo ......................................................................... 26
Figura 19 - Processo de impressão 3D ..................................................................................... 26
Figura 20 - Software de impressão 3D ..................................................................................... 27
Figura 21 - Suporte da lâmpada impresso em 3D .................................................................... 27
Figura 22 - Sensor de nível automotivo (DE AMERTEK CORPORATION) ......................... 28
Figura 23 - Sensor de ângulo automotivo (DE AMERTEK CORPORATION) ...................... 29
Figura 24 - Fluxograma de funcionamento do AFS proposto .................................................. 30
Figura 25 - Esquematização do AFS em módulos ................................................................... 31
7
Figura 26 - Diagrama de pinos do microcontrolador (MICROCHIP TECHNOLOGY INC,
2006) ......................................................................................................................................... 32
Figura 27 - Barramento I2C ...................................................................................................... 33
Figura 28 - Condição de START e STOP (NXP SEMICONDUCTORS, 2012) ..................... 34
Figura 29 - Lista de endereços reservados (NXP SEMICONDUCTORS, 2012) .................... 34
Figura 30 - Comunicação com endereçamento de 7bits (NXP SEMICONDUCTORS, 2012) 35
Figura 31 - Transmitindo um Byte para um dispositivo Slave (NXP SEMICONDUCTORS,
2012) ......................................................................................................................................... 36
Figura 32 - Recebendo um Byte de um dispositivo Slave (NXP SEMICONDUCTORS, 2012)
.................................................................................................................................................. 36
Figura 33 - Conversor A/D (MIYADAIRA, 2012) .................................................................. 39
Figura 34 - Imagem 3D dos Módulos Slave 01 e Slave02 ....................................................... 40
Figura 35 – Módulos Slave 01 e Slave 02 ................................................................................ 40
Figura 36 - Servomotor ............................................................................................................ 41
Figura 37 - Imagem 3D do Módulo Slave03 ............................................................................ 42
Figura 38 – Módulo Slave 03 ................................................................................................... 42
Figura 39 - Imagem 3D do Módulo Master.............................................................................. 43
Figura 40 – Módulo Master ...................................................................................................... 43
Figura 41 - Esquema elétrico da simulação no Proteus ............................................................ 44
Figura 42 - LPKF Protomat E33 .............................................................................................. 45
Figura 43 – Processo de exportação dos arquivos de layout no formato Gerber ..................... 46
Figura 44 – Processo de desenho das trilhas com a máquina LPKF Protomat E33 ................. 46
Figura 45 - Processo de furação e recorte da placa com a máquina LPKF Protomat E33 ....... 47
Figura 46 – Placa confeccionada com a máquina LPKF Protomat E33 ................................... 47
8
LISTA DE TABELAS
Tabela 1 – Define o modo de operação da interface I2C (MIYADAIRA, 2012) ..................... 37
Tabela 2 – Tratamento de borda da interface I2C (MIYADAIRA, 2012) ................................ 37
9
SUMÁRIO
AGRADECIMENTOS ................................................................................................................................3
RESUMO ...................................................................................................................................................4
ABSTRACT ...............................................................................................................................................5
LISTA DE FIGURAS .................................................................................................................................6
LISTA DE TABELAS ................................................................................................................................8
1.
INTRODUÇÃO ...............................................................................................................................10
1.1.
MOTIVAÇÃO ............................................................................................................................. 10
1.2.
SISTEMA DE FARÓIS ADAPTATIVOS (ADAPTIVE FRONTLIGHTING SYSTEM - AFS).......................... 11
1.3.
SISTEMA DE ILUMINAÇÃO LIGADO A CÂMERAS (CAMERA-LINKED LIGHTING SYSTEMS - CLS) .......... 15
1.4.
REVISÃO BIBLIOGRÁFICA .......................................................................................................... 16
2.
MODELAGEM ................................................................................................................................18
2.1.
TEORIA DE DIREÇÃO ................................................................................................................. 18
2.2.
MODELAGEM CINEMÁTICA HORIZONTAL DO AFS........................................................................ 21
2.3.
MODELAGEM CINEMÁTICA VERTICAL DO AFS ............................................................................ 22
3.
PROJETO MECÂNICO ..................................................................................................................24
4.
PROJETO ELETRÔNICO ..............................................................................................................28
4.1.
AFS COMERCIAL ...................................................................................................................... 28
4.2.
AFS PROPOSTO....................................................................................................................... 29
4.3.
MICROCONTROLADOR .............................................................................................................. 31
4.3.1.
Comunicação I2C .................................................................................................................. 33
4.3.2.
Conversor A/D........................................................................................................................ 38
4.3.3.
Timers .................................................................................................................................... 39
4.4.
MÓDULOS SLAVE ..................................................................................................................... 39
4.4.1.
Slave 01 ................................................................................................................................. 39
4.4.2.
Slave 02 ................................................................................................................................. 40
4.4.3.
Slave 03 ................................................................................................................................. 40
4.4.4.
Módulo Master ....................................................................................................................... 42
4.5.
SIMULAÇÃO .............................................................................................................................. 43
4.6.
FABRICAÇÃO DAS PLACAS ......................................................................................................... 45
5.
CONCLUSÃO .................................................................................................................................48
REFERÊNCIAS BIBLIOGRÁFICAS.......................................................................................................49
APÊNDICE A ..........................................................................................................................................51
ANEXO ....................................................................................................................................................53
10
1.
INTRODUÇÃO
1.1.
Motivação
Os sistemas de iluminação presentes nos veículos automotores enfrentam
grande número de problemas devido a visibilidade inadequada e desconforto para o
motorista em tráfego noturno. Um dos principais motivos para esses problemas é
que o sistema de iluminação do veículo é estático. Ele não muda em relação à
rodovia, tráfego, veículos, tempo e condições atmosféricas. Entretanto, já existem
sistemas que foram desenvolvidos para solucionar essa situação e que estão
presentes em alguns modelos de veículos.
Durante anos, muitos estudos mostraram que os sistemas convencionais de
iluminação presentes nos veículos de hoje não são adequados. Em particular, o farol
baixo apresenta problemas em relação à segurança (detecção de distâncias,
identificação de objetos, localização de trajetos) e ao conforto (desconforto por
reflexão
e
sensação
de
insegurança).
Consequentemente,
existem
fortes
argumentos que motivam o desenvolvimento de novos sistemas de iluminação.
(JOHANSSON, BERGSTROM, et al., 1963) apud (RUMAR, 1997)
Em geral, a maioria dos acidentes se deve a má qualidade de iluminação,
seja pela falta de luz em vias ou pelo sistema de iluminação inadequado.
A Companhia de Engenharia de Tráfego de São Paulo (CET) - constatou
que 40% dos acidentes graves ocorridos em São Paulo acontecem à noite, apesar
de essas viagens diárias representarem apenas 20% do total. Isto significa que o
risco de acidente à noite é 3,2 vezes maior. (COMPANHIA DE ENGENHARIA DE
TRÁFEGO (CET), 2012)
Pesquisas realizadas na Inglaterra em locais que sofreram adoção de
melhoramentos da iluminação mostraram uma redução de 47% nos acidentes
noturnos envolvendo pedestres e de 20% nos outros tipos de acidentes. Houve
também 46% de redução nos acidentes fatais e 27% de redução nos acidentes
graves. (AKISHINO)
Quanto menor a iluminação mais difícil é para o motorista perceber o
pedestre. Já com relação ao pedestre, ele tem dificuldade de avaliar a distância e a
velocidade com que o veículo se desloca, principalmente, quando o motorista utiliza
luz alta ao invés da luz baixa exigida pela lei.
11
Muitos sistemas de iluminação inteligente já têm sido desenvolvidos e
aplicados em veículos, porém, ainda busca-se reduzir os custos e simplificar tais
sistemas a fim de tornar acessível em larga escala. Um desses sistemas são os
Faróis Adaptativos que serão discutidos na próxima seção.
1.2.
Sistema de Faróis Adaptativos (Adaptive Frontlighting System - AFS)
As discussões de especialistas em iluminação nas últimas décadas formou a
visão de um conceito de farol inteligente. Uma das soluções encontradas foi a
criação de um sistema de iluminação adaptativo, que muda conforme as
circunstâncias durante à direção do veículo.
Segundo (SCHMIDT, KALZE e EICHHORN, 2007), em meados de 2006, o
primeiro carro equipado com um AFS entrou em produção em série e, até agora,
gerou uma reação muito positiva na imprensa de todo o mundo.
O sistema introduz ao mercado novas configurações de iluminação frontal,
que reproduzem diferentes tipos de distribuição de luz, cada uma específica para
uma determinada condição. Assim, temos as seguintes configurações:
•
Town Light (luz para cidade) – Class V: produz uma distribuição
simétrica de luz, com um espalhamento do facho luminoso em
regiões mais próximas do veículo (Figura 1).
•
Country Light (luz para campo) – Class C: adequado para uma
faixa de velocidades médias, esta função é caracterizada por um
incremento do campo de visão no lado direito da estrada (Figura
2).
•
Motorway
Light
(luz
para
estrada)
–
Class
E:
produz
características de iluminação adequadas para condução em alta
velocidade em estradas, com aumento do campo de visão na
faixa de rolamento em que está o veículo (Figura 3).
•
Adverse Weather Light (luz para condições climáticas adversas)
– Class W: tem como principal função evitar o ofuscamento em
veículos trafegando no sentido oposto, causado pelo brilho do
reflexo do facho luminoso (Figura 4).
•
High
Beam
(farol
alto):
é
gerado
pela
somatória
das
combinações de todos os elementos de iluminação do AFS e
12
produz um padrão de luz homogêneo e poderoso para a
iluminação de distâncias maiores (Figura 5).
Figura 1 - Distribuição do facho luminoso para Town Light (SCHMIDT, KALZE e EICHHORN, 2007)
Figura 2 - Distribuição do facho luminoso para Country Light (SCHMIDT, KALZE e EICHHORN,
2007)
Figura 3 - Distribuição do facho luminoso para Motorway Light (SCHMIDT, KALZE e EICHHORN,
2007)
13
Figura 4 - Distribuição do facho luminoso para Adverse Weather Light (SCHMIDT, KALZE e
EICHHORN, 2007)
Figura 5 - Distribuição do facho luminoso para High Beam (SCHMIDT, KALZE e EICHHORN, 2007)
Além disso, possibilita alterar automaticamente a direção do foco de luz em
situações como curvas, cruzamentos e rampas. As funcionalidades do AFS para
iluminação de curvas estão divididas em dois modos: iluminação dinâmica e
iluminação estática (Figura 6).
Figura 6 - Distribuições dos fachos luminosos do AFS
14
No modo de iluminação dinâmica, o sistema óptico principal é movimentado
de acordo com o trajeto e características da via. É gerado um acréscimo de
iluminação em áreas distantes do veículo com o objetivo de otimizar a orientação do
motorista. A Figura 7 mostra a atuação da iluminação dinâmica numa curva.
Figura 7 - Modo de Iluminação Dinâmica
O movimento do sistema óptico é feito por meio de atuadores
eletromecânicos. Há também um elemento central em forma de cilindro rotativo, cujo
raio varia ao longo de seu eixo e de sua circunferência. O contorno do cilindro que é
projetado na via tem o objetivo de estabelecer a distribuição de luz. Na Figura 8 é
possível visualizar o cilindro rotativo no sistema óptico.
Figura 8 - Módulo de projeção de farol HID de xenônio equipado com AFS (SCHMIDT, KALZE e
EICHHORN, 2007)
15
Na iluminação estática, o aumento da visibilidade ocorre pelo acionamento
de lâmpadas adicionais que estão posicionadas em ângulo específico. O
acionamento é feito em situações como curvas de pequenos raios, entradas e
saídas de vias ou manobras pequenas.
Figura 9 - Modo de Iluminação Estática
1.3.
Sistema de iluminação ligado a câmeras (Camera-linked lighting
systems - CLS)
Atualmente, há diversos modelos de veículos que possuem também
câmeras ligadas ao sistema de navegação auxiliando em manobras. Não obstante, a
grande maioria dos veículos equipados com sistema AFS utiliza também câmeras
integradas ao sistema de iluminação. Tal tecnologia é conhecida como CLS
(Camera-linked lighting systems).
Esse sistema tem o objetivo de verificar a aproximação de veículos à frente
e também obstáculos, auxiliando na tomada de decisão quanto à iluminação. Dessa
forma, após o processamento das imagens registradas pela câmera, o sistema pode
direcionar o facho de luz e acionar uma configuração diferente de iluminação.
Portanto, o CLS complementa o AFS dando ainda mais autonomia ao próprio
sistema de iluminação. (BIRCH, 2007) apud (LIU, 2008)
16
1.4.
Revisão Bibliográfica
Muitos pesquisadores e engenheiros têm discutido a viabilidade de
melhorias de segurança, tal como, os sistemas inteligentes de iluminação em
automóveis. O objetivo desses sistemas é proporcionar melhor visibilidade durante o
tráfego noturno, de acordo com as condições da via e estado do veículo. Um módulo
eletrônico recebe o sinal de vários sensores e controla o movimento e distribuição de
luz.
A iluminação automotiva é um dos segmentos mais regulamentados da
indústria automotiva e neste setor, a Sociedade de Engenheiros Automotivos – SAE
(Society of Automotive Engineers) está entre as associações que contribui com
padrões para o segmento. (SUPPLIERBUSINESS LTD, 2007)
Os trabalhos a seguir apresentam alguns estudos e implementações
realizadas nesse campo e que tomam como base os padrões estabelecidos pela
SAE.
Em (LIU, LANFANG, et al., 2008), os autores discutiram as principais
técnicas do AFS estabelecendo fórmulas que incluem o estado do veículo, a direção
e as condições da via. O artigo também estudou as propriedades dinâmicas, a
relação entre inclinação e guinada do corpo do veículo e a distribuição de luz com
base nos padrões relativos recomendados pela SAE. O estudo é um trabalho básico
para o controle automático de iluminação.
Considerando os resultados obtidos por (LIU, LANFANG, et al., 2008), foi
proposto uma correção por (LIU, LANFANG, et al., 2009) no modelo matemático
empregado em curvas recomendado pela SAE. No modelo original, o AFS atua de
maneira idêntica em ambos os faróis, ou seja, o ângulo de guinada é o mesmo para
os dois módulos. Além disso, a fórmula do modelo só apresenta resultados
significativos nos casos de curvas com raios de curvaturas grandes. Por outro lado,
fazendo a correção do modelo, os dois módulos AFS atuarão de maneira conjunta,
porém, independente. A atuação em uma curva poderá direcionar os módulos para
ângulos diferentes.
(DONG, SONG, et al., 2011) utilizaram a mesma formulação para curvas
recomendado pela SAE e assim propuseram a adaptação do modelo por meio do
controle com microcontroladores. Também implementaram circuitos periféricos para
17
realizar a aquisição do sinal de velocidade, sinal do ângulo do volante, acionamento
dos motores, entre outros.
(GUO, WU e WANG, 2012) e (RONG, GONG e WANG, 2009)
desenvolveram soluções similares para o controle do AFS. Diferindo apenas na
modelagem dinâmica do sistema, eles utilizaram rede CAN para realizar a interface
entre os circuitos periféricos e controle fuzzy para acionamento dos módulos. A rede
CAN é bastante indicada para a integração de funcionalidades relacionadas a
veículos automotores, pois, dispõe de um protocolo com um conjunto de mensagens
bem estabelecidas para essa finalidade.
Em (TEXAS INSTRUMENTS, 2013) um guia de referência para o
desenvolvimento
e
implementação
de
um
AFS,
utilizando
a
família
de
microcontroladores da Texas Instruments, é apresentado. Neste guia é discutido a
arquitetura de um AFS e proposto o desenvolvimento de um sistema que possa
testar e averiguar as principais funções do AFS.
O objetivo desse trabalho de conclusão de curso é o desenvolvimento de um
protótipo conceitual do AFS baseando-se nos resultados teóricos de (LIU, LANFANG,
et al., 2008) e (XU e GUOYU, 2011), e nos protótipos físicos de (DONG, SONG, et
al., 2011) e (TEXAS INSTRUMENTS, 2013). O sistema a ser desenvolvido é
composto por módulos funcionais que realizam a leitura dos sinais dos sensores,
processamento dos sinais e acionamento de servos motores para movimentação do
módulo dos faróis. Todos os módulos estão conectados num barramento de
comunicação onde um módulo principal controla a comunicação e gerencia o
funcionamento do sistema.
18
2.
MODELAGEM
Neste capítulo, são apresentadas a geometria e teoria de direção de um
veículo, com objetivo de introduzir a modelagem cinemática vertical e horizontal do
AFS.
2.1.
Teoria de Direção
Segundo (GRANDA, J, 2010), num automóvel o arranjo geométrico de
ligações nos braços da direção do veículo, responsável por resolver o problema dos
ângulos das rodas durante uma curva, é conhecido como condição de Ackermann. A
A condição de Ackermann pode ser demonstrada através da Figura 10 e Figura 11,
sendo, 𝛿𝑖 é o ângulo de direção da roda interna e 𝛿𝑜 é o ângulo de direção da roda
externa, que são definidos com base no centro da curva. A distância entre as rodas
frontais é representada por 𝑤 e a distância entre os eixos frontal e traseiro é
representado por 𝑙; a distância entre o centro da curva e o ponto médio das rodas
traseiras é representada por 𝑅1 e a distância entre o ponto médio das rodas traseiras
e o centro de massa 𝐶 é representada por 𝑎2 .
Figura 10 - Condição Ackermann (GRANDA, J, 2010)
19
Figura 11 - Direção do veículo e ângulo das rodas interna e externa (GRANDA, J, 2010)
A partir dos triângulos ∆𝑂𝐴𝐷 e ∆𝑂𝐵𝐶, os ângulos internos e externos 𝛿𝑖 e 𝛿𝑜
podem ser calculados como segue,
tan 𝛿𝑖 =
Eliminando 𝑅1 , tem-se
tan 𝛿𝑜 =
𝑙
𝑅1 −
𝑙
𝑤
𝑅1 +
2
𝑤
2
1
𝑙
1
𝑙
𝑅1 = 𝑤 +
=− 𝑤+
,
2
tan 𝛿𝑖
2
tan 𝛿𝑜
Reorganizando, obtemos a condição de Ackermann, dada por,
𝑤
cot 𝛿𝑜 − cot 𝛿𝑖 = .
𝑙
(1)
Para encontrar o raio 𝑅 da curva do veículo, definimos um modelo
equivalente semelhante a uma bicicleta, como mostrado na Figura 12.
20
Figura 12 - Modelo equivalente para a direção de um veículo (GRANDA, J, 2010)
O raio da curva é perpendicular ao vetor 𝑣 de velocidade do veículo no
centro de massa 𝐶. Usando a geometria mostrada no modelo de bicicleta, temos,
cot 𝛿 =
𝑅2 = 𝑎22 + 𝑅12
𝑅1 1
= (cot 𝛿𝑖 + cot 𝛿𝑜 )
𝑙
2
Assim,
𝑅 = �𝑎22 + 𝑙2 cot 2 𝛿,
(2)
sendo,
cot 𝛿 =
cot 𝛿𝑜 + cot 𝛿𝑖
.
2
Veremos a seguir que, no processo de cálculo do ângulo de correção dos
faróis, deve-se ter previamente o valor do raio da curva. Porém, pelo que já foi
exposto, o raio está diretamente relacionado ao centro de massa e a velocidade do
veículo.
21
2.2.
Modelagem Cinemática Horizontal do AFS
A formulação apresentada por (XU e GUOYU, 2011) cita uma formulação
empírica obtida e recomendada pela SAE (Society of Automotive Engineers).
A Figura 13 mostra o ângulo de correção 𝜙 dado pelo controle horizontal do
AFS, que considera como parâmetros de entrada a resposta de direção do volante e
a velocidade do veículo. O Valor de 𝜙 é dado por
𝑋
𝜙 = sin−1 � � = sin−1 �
2𝑅
140.𝐻
2𝑅
70.𝐻
� = sin−1 �
𝑅
�,
(3)
sendo,
𝜙 o ângulo de correção horizontal dos faróis,
𝑋 a distância esperada de iluminação,
𝐻 a altura entre os faróis e o chão, e
𝑅 o raio da curva ou raio de navegação do veículo.
Figura 13 - Ângulo de correção do modelo cinemático horizontal do AFS (XU e GUOYU, 2011)
De acordo com a expressão dada pela SAE, para o cálculo do valor de 𝜙 é
necessário ter o valor o raio da curva, mesmo que esta varie com o trajeto do
veículo. Neste momento poderíamos tomar o resultado obtido na seção anterior
dado pela equação (2), porém, nesta expressão o valor de 𝑎2 varia com o centro de
massa e velocidade. Por sua vez, o centro de massa pode variar de acordo com a
22
carga transportada pelo veículo. Para simplificar essa situação muitas referências
propõem uma formulação aproximada para o cálculo do raio da curva. Assim,
podemos calcular o valor o raio 𝑅 por,
𝑅≈
2.3.
𝑙
sin 𝛿𝑖
.
(4)
Modelagem Cinemática Vertical do AFS
Uma função que não é muito explorada pelas referências citadas neste
trabalho, mas que está sempre presente nos AFS comerciais, é a cinemática vertical
dos faróis. Neste caso, os parâmetros de entrada são o nivelamento do chassi do
veículo e a velocidade.
Na Figura 14 é apresentado o modelo proposto por (LIU, LANFANG, et al.,
2008) para o movimento vertical dos faróis.
Figura 14 - Modelo analítico para cinemática vertical do AFS
Sendo, 𝑙 a distância entre os eixos frontal e traseiro, 𝐾1 a constante de
amortecimento da suspensão dianteira, 𝐾2 a constante de amortecimento da
suspensão traseira, 𝑑𝐻1 a variação da altura em relação ao chão da parte dianteira
do chassi, 𝑑𝐻2 a variação da altura em relação ao chão da parte traseira do chassi e
𝑒 a excentricidade longitudinal.
A excentricidade longitudinal do centro de massa do veículo provoca um
desnível no corpo do veículo. Sabe-se que é necessário manter fixo eixo óptico dos
faróis e que qualquer inclinação do corpo do veículo refletirá no ângulo de
23
iluminação. Deste modo, o ângulo de inclinação do corpo será o ângulo de correção
do AFS. A partir da Figura 14 é possível deduzir a expressão que leva à 𝜃, ângulo de
correção vertical dos faróis. Considerando o equilíbrio estático, temos,
𝑚1 . 𝑔(0,5𝑙 − 𝑒) = 𝐾1 . 𝑑𝐻1 . 𝑙
Logo,
𝑚1 . 𝑔(0,5𝑙 + 𝑒) = 𝐾2 . 𝑑𝐻2 . 𝑙
𝑑𝐻2 −𝑑𝐻1
ou,
𝜃 = tan−1 �
𝜃 = tan−1 �
𝑙
�,
𝑚1 . 𝑔[𝐾2 (𝑙 − 2𝑒) − 𝐾1 (𝐿 + 2𝑒)]
�.
2. 𝑙. 𝐾1 . 𝐾2
(5)
24
3.
PROJETO MECÂNICO
Na
realização
do
presente
trabalho
houve
a
necessidade
do
desenvolvimento de uma estrutura mecânica para compor o protótipo do AFS. Esta
deveria comportar dois servos motores e uma lâmpada, em cada módulo óptico. A
estrutura foi necessária para verificar o funcionamento do protótipo, isto é, observar
a movimentação da lâmpada dado o acionamento dos motores. Por se tratar de um
protótipo
conceitual
não
foram
observados,
com
rigor,
os
critérios
de
desenvolvimento de projeto mecânico.
A estrutura de cada módulo óptico do protótipo de AFS consiste de um
mecanismo com dois eixos de movimento. É formado por um conjunto de placas
acopladas à um suporte para a lâmpada, uma base de sustentação, dois servomotores e uma lâmpada.
Todo o desenvolvimento da estrutura foi desenvolvido com auxílio do
software Autodesk® Inventor® Professional 3D CAD. Cada componente foi
desenhado e montado em ambiente virtual a fim de verificar possíveis interferências
e gerar os desenhos para a confecção das peças. Para o suporte da lâmpada foi
projetado um paraboloide elíptico que comportasse a lâmpada e se assemelhasse a
um farol. Todas as demais partes da estrutura foram projetadas de forma que
pudessem ser montadas por processo de colagem. As placas foram confeccionadas
em madeira do tipo MDF (Medium Density Fiberboard) e o suporte da lâmpada foi
impresso com auxílio de impressora 3D. Os desenhos com as dimensões de cada
peça criada podem ser conferidos nos anexos.
A prototipagem rápida 3D foi utilizada por permitir, de forma simples, a
fabricação do suporte para a lâmpada, cuja geometria é complicada de se obter
pelos métodos mais tradicionais. A partir do modelo 3D projetado, o processo de
fabricação aditiva cria a peça pela deposição de sucessivas camadas de material.
Essas peças permitem testes funcionais, visuais e conceituais à um custo bastante
acessível. As Figura 15, Figura 16, Figura 17 e Figura 18 mostram a peça projetada
pelo software CAD, o resultado da prototipagem 3D e o protótipo completo,
respectivamente.
Figura 15 - Suporte da Lâmpada
Figura 16 - Suporte da Lâmpada
projetado em CAD
confeccionado em impressora 3D
Figura 17 - Montagem completa do Protótipo em CAD
26
Figura 18 - Montagem completa do Protótipo
Figura 19 - Processo de impressão 3D
27
Figura 20 - Software de impressão 3D
Figura 21 - Suporte da lâmpada impresso em 3D
28
4.
4.1.
PROJETO ELETRÔNICO
AFS Comercial
Num AFS comercial é comum a utilização de sensores específicos para
realizar a leitura das condições do veículo. Os três principais são: “Auto Leveling
Sensor” (sensor de nível automotivo), “Auto Angular Sensor” (sensor de ângulo
automotivo) e o velocímetro.
O sensor de nível automotivo é um sensor que mede as variações que
ocorrem no corpo do veículo. Em geral utiliza-se um sensor para cada suspensão a
fim de realizar a leitura do estado do chassi do veículo. Este sensor possui alta
robustez e não é apenas usado em sistemas de iluminação AFS, mas também, em
sistemas de controle de corpo, tais como, sistemas de estabilidade para veículos e
sistemas de suspensão ativa. A Figura 22 mostra um modelo desse sensor fabricado
pela De Amertek Corporation®. (DE AMERTEK CORPORATION)
Figura 22 - Sensor de nível automotivo (DE AMERTEK CORPORATION)
O sensor de ângulo automotivo é usado para medir o ângulo de direção do
volante. Ele é capaz de detectar 360º graus de posição absoluta com alta precisão e
detectar as voltas do volante. Este também não é apenas usado em sistemas de
iluminação AFS, mas em qualquer sistema que necessite de sinal de giro, como
sistemas de estabilidade para veículos e direção elétrica. A Figura 23 mostra um
modelo desse sensor fabricado pela De Amertek Corporation®. (DE AMERTEK
CORPORATION)
29
Figura 23 - Sensor de ângulo automotivo (DE AMERTEK CORPORATION)
A utilização dos sensores de nível e ângulo citados foi descartada para este
projeto devido ao alto custo destes sensores e dificuldade para obtê-los.
4.2.
AFS Proposto
O desenvolvimento desse projeto buscou comprovar a eficácia da tecnologia
do
AFS,
porém,
utilizando
uma
abordagem
mais
simples
e
acessível
financeiramente. Buscou-se utilizar ferramentas e soluções que possam servir como
parâmetros para outros projetos.
O
sistema
foi
dividido
em
cinco
módulos
independentes,
porém,
interconectados. Destes, dois módulos simulam os sensores do ângulo do volante e
nível do chassi, respectivamente. Um módulo verifica a velocidade do veículo,
recebe os valores lidos pelos sensores e calcula os ângulos de correção; este
também é responsável por toda comunicação entre os módulos. Por fim, um módulo
recebe os valores de correção do AFS e aciona os servos motores responsáveis
pelo movimento do sistema.
A Figura 24 apresenta o fluxograma de funcionamento do AFS a ser
desenvolvido. Toda a lógica de controle e atuação do sistema será embarcada em
módulos microcontrolados.
30
Figura 24 - Fluxograma de funcionamento do AFS proposto
31
A Figura 25 mostra o sistema organizado em módulos e os periféricos de
cada módulo.
Figura 25 - Esquematização do AFS em módulos
4.3.
Microcontrolador
O controle de processos ou equipamentos é comumente realizado por
intermédio de microcontroladores que contém programas dedicados à aplicação
desejada. Muitas vezes o microcontrolador carrega, além das funções de controle,
também a função de comunicação com outros circuitos de controle ou o meio
exterior.
Nos
diversos
módulos
desse
sistema
optou-se
por
utilizar
os
microcontroladores PIC, da Microchip Technology Inc®, por oferecer os requisitos
necessários para o desenvolvimento a um custo acessível e pela facilidade de
obtenção.
O microcontrolador escolhido foi o PIC18F2550A que é construído com base
na arquitetura Harvard com instruções do tipo RISC (Computador com Conjunto
Reduzido de Instruções). É um dispositivo de 8bits dotado de 32Kbytes de memória
de programa e 2048bytes de memória RAM. Esse dispositivo pode ser alimentado
com tensões entre 2V e 5.5V, além de operar em frequência de até 48MHz (12MIPS
- milhões de instruções por segundo). Ele pode ser alimentado diretamente por um
oscilador de 48MHz ou por um cristal associado com o bloco PLL.
Esse modelo possui 28 pinos, dos quais 24 podem ser configurados como
I/O, e diversos periféricos, tais como memória EEPROM de 256bytes, dois módulos
CCP (Captura, Comparador e PWM), um módulo SPI e I2C, 10 conversores A/D de
32
10bits de resolução, dois comparadores analógicos, uma interface de comunicação
EUSART, um TIMER de 8bits (TIMER2) e três de 16bits (TIMER0, TIMER1 e
TIMER3), um módulo de detecção de alta/baixa voltagem (HLVD), além de um
módulo USB 2.0 capaz de operar no modo low-speed (1.5Mbps) ou full-speed
(12Mbps). A Figura 12 mostra o diagrama de pinos e a aparência do
microcontrolador. (MICROCHIP TECHNOLOGY INC, 2006)
Figura 26 - Diagrama de pinos do microcontrolador (MICROCHIP TECHNOLOGY INC, 2006)
Dentre os diversos periféricos disponíveis neste microcontrolador, serão
utilizados apenas o módulo I2C para comunicação entre os módulos, o conversor
A/D para leitura dos sensores, o módulo Timer para base de tempo do sinal de
controle dos servos e as saídas I/O.
Para
a
implementação
dos
algoritmos
a
serem
embarcado
nos
microcontroladores, optou-se pela utilização do software MPLAB® IDE integrado com
o compilador MPLAB® C18, ambos ferramentas oficiais da fabricante Microchip
Technology Inc.
O MPLAB® IDE é um software de programação que permite uma integração
fácil e rápida com o compilador MPLAB® C18 ou outro tipo de compilador. Ele
permite gerenciar um projeto, compilar, “debugar” e gravar um programa no
microcontrolador, dentre outras funções. Já o compilador MPLAB® C18 é um
software capaz de traduzir um código de alto nível, com interface ao programador,
para um código correspondente de baixo nível, conhecido como assembly. Isto é
feito para que o programa possa ser interpretado por uma máquina, por exemplo, o
microcontrolador.
33
4.3.1. Comunicação I2C
O I2C (Inter-Intergrated Circuit) é um protocolo de comunicação síncrono
Mestre-Escravo (Master-Slave), criado pela PHILIPS, com a finalidade de simplificar
a comunicação entre dispositivos eletrônicos. Atualmente, ele é largamente difundido
e adotado por diversos fabricantes que o utilizam em seus produtos, dentre eles
driver de LCD, memória serial, gerador de tom, conversor A/D e D/A, RTC (Real
Time Clock), microcontroladores, etc. (MIYADAIRA, 2012)
A comunicação I2C é realizada por duas linhas, sendo uma linha de dados
(SDA) e uma de clock (SCL). A linha SCL é controlada pelo dispositivo configurado
como Master, o qual é responsável pelo envio do sinal de clock para o dispositivo
Slave; a linha SDA é bidirecional, e carrega a informação.
O barramento I2C é Multi-Master, o que significa que mais de um dispositivo
pode iniciar uma comunicação (enviar o sinal de clock), porém, neste momento,
todos os outros dispositivos devem estar configurados como Slave. (NXP
SEMICONDUCTORS, 2012)
A Figura 27 mostra como os dispositivos podem ser conectados no
barramento I2C. Os resistores de pull-up conectados nas linhas SCL e SDA são
essenciais para o funcionamento do barramento I2C, pois indicam que o barramento
está disponível, uma vez que os dispositivos conectados a ele possuem apenas a
função de abaixar a tensão. Estes resistores estão normalmente localizados na faixa
de 1K a 10K, e evitam que as linhas fiquem flutuando, e assim previnem erros de
comunicação. (MIYADAIRA, 2012)
Figura 27 - Barramento I2C
Os dados enviados pelo barramento I2C podem ser transferidos a taxas de
até 100 kbit/s no modo-padrão (Standard-mode), até 400 kbit/s no modo-rápido
34
(Fast-mode), de até 1 Mbit/s em modo-rápido Plus (Fast-mode Plus). A capacitância
do
barramento
limita
o
número
de
dispositivos
conectados.
(NXP
SEMICONDUCTORS, 2012)
Na comunicação I2C, o início e o término de uma comunicação são
identificados por duas condições: início (START) e parada (STOP). A condição
START é verificada quando a linha SDA passa do nível lógico ‘1’ para o nível ‘0’,
enquanto a linha de clock (SCL) está em nível ‘1’. Uma condição de STOP é
identificada quando a linha SDA passa do nível ‘0’ para o nível ‘1’, enquanto a linha
SCL se encontra em nível lógico ‘1’. (MIYADAIRA, 2012)
Figura 28 - Condição de START e STOP (NXP SEMICONDUCTORS, 2012)
Existem dois tipos de endereçamento possível na comunicação I2C: 7bits e
10 bits. O endereçamento com 10 bits expande o número de endereços possíveis.
Os dispositivos configurados para 7bits e 10bits podem ser conectados no mesmo
barramento e ambos podem operar em todos os modos de velocidade. Atualmente,
o endereçamento com 10 bits não está sendo muito utilizado. Durante configuração
de um dispositivo Slave deve-se atentar para a utilização de um endereço válido,
pois, nesse protocolo há alguns endereços reservados (Figura 29). (NXP
SEMICONDUCTORS, 2012)
Figura 29 - Lista de endereços reservados (NXP SEMICONDUCTORS, 2012)
35
Numa comunicação com endereçamento de 7bits, o dispositivo Master envia
uma condição START, seguida de 8bits, que compreende o endereço do dispositivo
� ), sendo:
Slave e o tipo de operação (𝑅/𝑊
•
•
� = 1 : operação de leitura
𝑅/𝑊
� = 0 : operação de escrita
𝑅/𝑊
Figura 30 - Comunicação com endereçamento de 7bits (NXP SEMICONDUCTORS, 2012)
Após o envio do endereço e o tipo de operação, os dispositivos Slaves
verificam se o endereço solicitado pelo Master pertence a um deles e retornam um
sinal de Acknowledge (força a linha SDA para o nível ‘0’ antes do nono pulso de
clock – ACK = 0) caso seja reconhecido; caso contrário, simplesmente não
respondem (Not Acknowledge – ACK = 1).
•
•
𝐴𝐶𝐾 = 0 : dispositivo/comando/dado reconhecido
𝐴𝐶𝐾 = 1 : dispositivo/comando/dado não reconhecido
Se nenhum dispositivo Slave responder à chamada, o dispositivo Master
deve enviar uma condição de STOP para indicar o fim da comunicação.
No caso de algum dispositivo responder a chamada, este irá responder de
� ). Se 𝑅/𝑊
� = 1 o Master envia oito pulsos de
acordo com a operação solicitada (𝑅/𝑊
clock e a cada pulso efetua a leitura do nível lógico presente na linha SDA,
realizando assim a leitura dos 8bits enviados pelo Slave. Após receber o oitavo bit, o
dispositivo Master deve responder enviando um nono pulso com ACK = 0. Se
� = 0 o Master envia oito pulsos de clock, carregando o dado (8bits) na linha
𝑅/𝑊
SDA , e após o oitavo bit, o dispositivo Slave deve responder com ACK = 0. Durante
a operação de escrita/leitura, um ou mais dados podem ser enviados/recebidos tanto
para o dispositivo Master como para o Slave, e a comunicação é finalizada com um
comando de STOP. (MIYADAIRA, 2012)
36
As Figura 31 e Figura 32 mostram o comportamento do barramento em uma
escrita e leitura realizada pelo Master, respectivamente.
Figura 31 - Transmitindo um Byte para um dispositivo Slave (NXP SEMICONDUCTORS, 2012)
Figura 32 - Recebendo um Byte de um dispositivo Slave (NXP SEMICONDUCTORS, 2012)
No AFS proposto, todos os módulos foram configurados para comunicar via
I2C. Assim, para a implementação de um algoritmo que permita a comunicação I2C
entre os microcontroladores da família PIC18, utilizou-se a biblioteca “i2c.h” presente
no compilador MPLAB® C18, que possui as funções de controle e configuração do
periférico. Inicialmente, o primeiro passo a ser feito para ativar a comunicação I2C é
a configuração do registrador SSPADD do microcontrolador.
O registro SSPADD possui duas funções: quando o dispositivo está
configurado como Slave, ele contém o endereço do dispositivo (7 bits menos
significativos); e quando configurado como Master, ele armazena o valor que define
a taxa de comunicação (Baudrate) do I2C, o qual está restrito aos 7bits menos
significativos do registro SSPADD. (MIYADAIRA, 2012)
37
Assim, para definir o valor do registro temos,
𝑆𝑆𝑃𝐴𝐷𝐷 < 6: 0 >=
𝐹𝑜𝑠𝑐
4∗𝐵𝑎𝑢𝑑𝑟𝑎𝑡𝑒
− 1.
(6)
As principais funções utilizadas no controle e configuração da comunicação
2
I C neste projeto foram:
 CONFIGURAÇÃO DO PERIFÉRICO I2C
OpenI2C(modo,velocidade) – Configura o periférico I2C pertencente ao módulo
SSP.
Onde:
modo: uma das constantes listadas na Tabela 1.
velocidade: uma das constantes listadas na Tabela 2.
Tabela 1 – Define o modo de operação da interface I2C (MIYADAIRA, 2012)
Constante
Descrição
SLAVE_7
Modo Slave com endereço de 7bits
SLAVE_10
Modo Slave com endereço de 10bits
MASTER
Modo Master
Tabela 2 – Tratamento de borda da interface I2C (MIYADAIRA, 2012)
Constante
Descrição
SLEW_OFF
Tratamento de borda desabilitado. Frequencia de 100KHz e 1MHz.
SLEW_ON
Tratamento de borda habilitado. Frequencia de 400KHz
 CONDIÇÃO DE ACKNOWLEDGE
AckI2C() – Gera uma condição de Acknowlegde
 CONDIÇÃO DE NOT ACKNOWLEDGE
NotAckI2C() – Gera uma condição de Not Acknowlegde
 CONDIÇÃO DE START
StartI2C() – Gera uma condição de Start no barramento I2C
 CONDIÇÃO DE STOP
StopI2C() – Gera uma condição de Stop no barramento I2C
38
 CONDIÇÃO DE RESTART
RestartI2C() – Gera uma condição de Restart no barramento I2C
 DESABILITA O PERIFÉRICO I2C
CloseI2C() – Desabilita o periférico I2C pertencente ao módulo SSP
 RECEPÇÃO DE CARACTERE
ReadI2C() ou getcI2C() – Lê um único byte vindo do barramento I2C
 TRANSMISSÃO DE CARACTERE
WriteI2C() ou putcI2C() – Envia um único byte para o barramento I2C
 STATUS DO BARRAMENTO I2C
IdleI2C() – Verifica o status do periférico I2C e aguarda até que o barramento
esteja disponível
 STATUS DO BUFFER DE RECEPÇÃO
DataRdyI2C() – Verifica se há um novo byte no buffer de recepção do módulo
SSP e retorna ‘1’ se há um dado; caso contrário, retorna ‘0’.
4.3.2. Conversor A/D
Um conversor analógico/digital (A/D) converte uma grandeza analógica
(temperatura, luminosidade, umidade, etc.) em um valor digital (representação
binária) proporcional a ela. Esse valor depende diretamente da resolução e da
tensão de referência (Vref) utilizada na conversão, podendo variar de 0 a (2resolução –
1) unidades (Figura 33). (MIYADAIRA, 2012)
O conversor A/D do microcontrolador PIC18F2550 possui 10 canais
analógicos multiplexados, uma resolução de 10bits, com tensão de referência
configurável. Para a utilização desse periférico, também foi utilizada a biblioteca
disponível (“adc.h”) no compilador MPLAB® C18. Nesse projeto somente os módulos
Master, Slave01 e Slave02 terão esse periférico configurado, sendo estes utilizados
para a simulação dos sensores.
39
Figura 33 - Conversor A/D (MIYADAIRA, 2012)
4.3.3. Timers
O microcontrolador PIC18F2550 possui quatro Timers, sendo TIMER 0,
TIMER 1, TIMER 2 e TIMER 3, que são aplicados fundamentalmente como
temporizadores ou contadores. Eles podem ser configurados para serem
incrementados por um sinal de clock interno (ciclo de máquina) para o primeiro caso,
ou simplesmente por uma fonte externa acoplada a um pino específico para o
segundo. Os timers possuem um bloco prescaler, e em alguns casos, um postscaler.
O prescaler tem a função de definir o número de vezes que um determinado evento
deve ocorrer, antes de o registro ser incrementado.
No AFS proposto utilizou-se o TIMER 0, operando como contador no modo
de 16bits e utilizando um cristal oscilador de 20Mhz com fonte de clock. A utilização
do timer foi necessária para obtenção do sinal de controle dos servos motores.
4.4.
Módulos Slave
4.4.1. Slave 01
O módulo Slave 01 simula o sensor de ângulo do volante. Por não ter sido
utilizado um sensor específico para a função, como o “auto angular sensor”,
utilizamos um potenciômetro e o configuramos num conversor analógico/digital,
assim como em (TEXAS INSTRUMENTS, 2013).
Em geral um volante automotivo gira até 1440º ou 720º para cada lado (2
voltas). No limite máximo de 720º as rodas do veículo giram aproximadamente 30º,
dependendo do modelo do veículo.
40
Para transmissão do ângulo do volante para o módulo Master, via
comunicação I2C, normatizamos o valor do conversor A/D para 8bits. Dessa forma, a
menor variação das rodas possível de ser identificada pelo sistema foi de 0,235º. As
Figura 34 e Figura 35 mostram a imagem 3D e real do módulo Slave 01,
respectivamente. O esquema elétrico completo do módulo pode ser conferido nos
anexos.
Figura 34 - Imagem 3D dos Módulos
Slave 01 e Slave02
Figura 35 – Módulos Slave 01 e Slave 02
4.4.2. Slave 02
O módulo Slave 02 simula o desnível do chassi. Num veículo equipado com
AFS comercial, geralmente usa-se um sensor de nível (“Auto Leveling Sensor”)
acoplado a cada suspensão de roda. O AFS realiza a leitura dos quatro sensores e
calcula o desnível do chassi.
Neste módulo, o desnível chassi também é simulado por um potenciômetro
conectado à um conversor analógico/digital. Este é configurado para enviar a leitura
de desnível, normatizada em 8bits, via comunicação I2C. Esse recurso também foi
utilizado por (TEXAS INSTRUMENTS, 2013). As Figura 34 e Figura 35 mostram a
imagem 3D e real do módulo Slave 01, respectivamente.
4.4.3. Slave 03
O módulo Slave 03 realiza o acionamento dos servos motores que
movimentam o AFS. Este módulo possui dois microcontroladores, sendo que, um é
responsável pelos motores de movimento horizontal e o outro pelos motores de
movimento vertical. Cada microcontrolador recebe do módulo Master um valor
hexadecimal correspondente aos valores dos ângulos de correção 𝜙 ou 𝜃. Este valor
41
é convertido para a faixa de atuação do timer configurado, de modo a obter o sinal
de controle, equivalente ao ângulo, necessário para acionamento dos servos
motores.
Os servomotores utilizados são do tipo utilizado em aeromodelismo (Figura
35). Eles possuem a liberdade de apenas 180º graus, mas são precisos quanto a
posição. São dispositivos de malha fechada que apresentam movimento
proporcional a um sinal de controle. Os servos possuem três fios de interface, dois
para alimentação e um para o sinal de controle. O sinal de controle utiliza o protocolo
PPM (modulação por posição do pulso) que possui três características básicas:
largura mínima, largura máxima e taxa de repetição (frequência). O controle de
posição destes servos é realizado por meio de um pulso de controle que é enviado
ao motor e a largura do pulso determinará a posição do eixo. Em geral, a taxa de
repetição é 50Hz e a largura do pulso do sinal de controle varia de 1 a 2ms.
(SAWICZ, 2000)
Figura 36 - Servomotor
Para gerar o pulso de controle dos motores foi utilizado o TIMER 0 do
microcontrolador no modo contador. Assim, de acordo com o valor do ângulo
recebido via I2C, a largura do pulso é alterada permitindo o posicionamento do eixo
do motor. As Figura 37 e Figura 38 mostram a imagem 3D e real do módulo Slave
01, respectivamente. O esquema elétrico completo do módulo pode ser conferido
nos anexos.
Figura 37 - Imagem 3D do Módulo
Figura 38 – Módulo Slave 03
Slave03
4.4.4. Módulo Master
O módulo Master é o responsável por receber os sinais dos sensores do
volante e do chassi, realizar a leitura do sensor de velocidade, fazer os cálculos para
obtenção dos ângulos de correção e enviar o resultado para o módulo Slave 03.
Uma vez que o módulo Master controla a comunicação I2C, é ele que envia o pedido
de leitura dos sensores para os módulos Slaves.
O primeiro sensor a ser lido é o de velocidade, o qual está ligado ao
conversor analógico/digital do próprio módulo Master por um potenciômetro. A
função do sensor de velocidade no AFS é impedir a mudança de direção dos faróis
quando a velocidade for menor que 20 km/h. Se o valor for superior, o pedido de
leitura do ângulo do volante é enviado ao módulo Slave 01, primeiramente.
Após a leitura, o Slave 01 envia ao Master um valor hexadecimal de 8bits
correspondente ao valor do volante, sendo este valor o ângulo de direção da roda
externa à curva (𝛿𝑜). É realizada uma transformação para radianos desse valor e
calculado o ângulo de direção da roda interna à curva (𝛿𝑖), por meio da equação (1).
Com o valor de 𝛿𝑖 encontramos o raio da curva por meio da equação (4). Por fim,
calculamos o valor do ângulo de correção 𝜙 pela equação (3).
Em seguida, o Master envia um pedido de leitura do modulo Slave 02 e este
responde enviando um valor hexadecimal de 8bits que corresponde ao valor de
43
desnível do chassi. Neste caso, o valor recebido pelo Master já representa ao valor
do ângulo 𝜃 expresso pela equação (5).
Com os valores dos ângulos de correção 𝜙 e 𝜃 obtidos, uma nova
transformação é realizada a fim de normatizar os valores para a faixa hexadecimal
de 8bits e permitir o envio via I2C para o módulo Slave 03. A Figura 34 mostra a
imagem 3D do circuito. O esquema elétrico completo do módulo pode ser conferido
nos anexos.
Figura 39 - Imagem 3D do Módulo
Figura 40 – Módulo Master
Master
4.5.
Simulação
A principal ferramenta para desenvolvimento e simulação desse projeto foi o
software Proteus 8® da fabricante Labcenter Electronics Ltd.
O software de desenho e simulação Proteus VSM é uma ferramenta útil para
estudantes e profissionais que desejam acelerar e melhorar suas habilidades no
desenvolvimento de aplicações analógicas e digitais. Ele permite o desenho de
circuitos empregando um entorno gráfico no qual é possível colocar os símbolos
representativos dos componentes e realizar a simulação de seu funcionamento sem
o risco de ocasionar danos aos circuitos. A simulação pode incluir instrumentos de
medição e a inclusão de gráficos que representam os sinais obtidos na simulação.
Também tem a capacidade de passar o desenho a um programa integrado chamado
ARES o qual permite o desenvolvimento de placas de circuitos impresso.
(BERMÚDEZ, 2000)
A Figura 41 apresenta o esquema elétrico simulado no software Proteus.
44
Figura 41 - Esquema elétrico da simulação no Proteus
45
Por meio do Proteus®, o algoritmo e funções de cada módulo foram
simulados e, posteriormente, realizou-se a integração de todos os módulos para
verificação de funcionamento. Já com o programa integrado Ares® foi possível o
desenvolvimento dos layouts das placas a serem fabricadas e visualização da
imagem 3D do circuito.
4.6.
Fabricação das placas
No processo de fabricação das placas dos módulos foi utilizada a máquina
LPKF Protomat E33, que produz placas de circuito impresso pelo processo de
remoção direta do material condutor da placa (Figura 42). A LPKF Protomat E33
utiliza o software CircuitPro® para gerar os arquivos de fabricação da placa e
gerenciar o todo o processo de produção.
Figura 42 - LPKF Protomat E33
Para que o software CircuitPro® gere os arquivos de fabricação é necessário,
primeiro, utilizamos o software Ares® para exportar os arquivos dos layout da placa a
ser produzida no formato “gerber”.
O formato Gerber é um vetor de imagem 2D bi-nível. Trata-se de um padrão
largamente utilizado pela da indústria de software de fabricação de placa de circuito
impresso para descrever as imagens placa. A extensão de arquivo padrão é “GBR”,
embora outras extensões de arquivo são muito comuns. (UCAMCO, 2004)
46
Figura 43 – Processo de exportação dos arquivos de layout no formato Gerber
No processo de fabricação da máquina LPKF três arquivos gerber são
essenciais: o arquivo das trilhas, o arquivo dos furos de encaixe dos componentes e
o arquivo que contém as dimensões da placa. As Figura 44, Figura 45 e Figura 46
mostram o processo de fabricação e a placa confeccionada pela LPKF Protomat
E33.
Figura 44 – Processo de desenho das trilhas com a máquina LPKF Protomat E33
47
Figura 45 - Processo de furação e recorte da placa com a máquina LPKF Protomat E33
Figura 46 – Placa confeccionada com a máquina LPKF Protomat E33
48
5.
CONCLUSÃO
Neste trabalho, foi desenvolvido um protótipo conceitual do AFS que tem
como entradas a velocidade do veículo, a leitura do ângulo do volante e o desnível
do chassi tal como foi proposto.
O processo desenvolvimento do projeto passou pelas etapas de modelagem
matemática, simulação com o software Proteus®, testes em bancada por meio de
montagem em protoboard, projeto de layouts com software Ares®, fabricação de
placas com auxilio da máquina de fabricação de placas de circuito impresso LPKF
Protomat E33, projeto da estrutura mecânica com auxílio do software Autodesk®
Inventor®, fabricação da estrutura mecânica com madeira MDF, prototipagem de
peças em impressora 3D, gravação dos algoritmos em microcontroladores com
auxílio do software MPLAB® IDE, montagem e testes.
A arquitetura do AFS foi dividida em 4 módulos (dois módulos de sensores,
um módulo de controle do AFS e um módulo de atuadores) e a comunicação foi
implementada utilizando-se o protocolo I2C. A comunicação I2C se mostrou eficaz na
transmissão de dados entre os módulos e cada um dos módulos desempenhou sua
função conforme foi proposto. Com o algoritmo de funcionamento embarcado
verificamos que a integração e funcionamento dos módulos ocorreram de forma
satisfatória.
O controle cinemático horizontal e vertical que foi estabelecido proporcionou
uma melhor compreensão da cinemática de um veículo e, assim, os resultados
obtidos por meio de uma abordagem simples, atestaram a melhoria quanto à
qualidade de iluminação de veículos automotores no uso do AFS e explicitou a
importância em se popularizar tal sistema.
A complexidade do trabalho tendo em vista a escassez de publicações sobre
o assunto levou à necessidade de buscar literaturas variadas para superar as
dificuldades e desafios encontrados. Contudo, este Trabalho de Conclusão de Curso
permitiu unir a teoria à prática, além de, proporcionar o conhecimento, de maneira
clara e objetiva, da rotina de projetos no campo da engenharia.
Por fim, é importante salientar que no desenvolvimento deste TCC, houve
um crescimento e aprofundamento maior de algumas disciplinas do curso de
Engenharia Elétrica, o que proporcionou uma qualificação técnica melhor no
desenvolvimento profissional.
49
REFERÊNCIAS BIBLIOGRÁFICAS
AKISHINO, P. Algumas Técnicas de Engenharia de Tráfego na Redução de Prevenção de
Acidentes de Trânsito. [S.l.]: [s.n.]. Apostila.
BERMÚDEZ, A. S. Proteus (Isis, Ares). [S.l.]. 2000.
BIRCH, S. Illuminating technology. Automotive Engineering International, Warrendale, v.
104, 2007.
BMBH, R. B. Automotive Handbook. 6ª. ed. New York: Bentley Publishers, 2004.
COMPANHIA DE ENGENHARIA DE TRÁFEGO (CET). Acidentes de Trânsito Fatais Relatório Anual. Município de São Paulo. [S.l.]. 2012.
DE AMERTEK CORPORATION. Disponivel em: <http://www.deamertek.com/Index.aspx>.
Acesso em: 15 jul. 2014.
DECKER, D.; HIMMLER, A.; AMSEL, C. SAE International. Disponivel em:
<http://papers.sae.org/2007-01-0601/>. Acesso em: 12 Julho 2012.
DONG, G. et al. Study on Adaptive Front-lighting System of Automobile Based on
Microcontroller. International Conference on Transportation, Mechanical, and Electrical
Engineering. [S.l.]: [s.n.]. 2011.
GMBH, R. B. Autoelektrik/Autoelektronik. 4ª. ed. [S.l.]: Beijing Institute of Technology
Press, 2004.
GRANDA, J. Vehicle Dynamics and Design Course. Swiss Federal Institute of Technology
Zurich. [S.l.]. 2010.
GUO, Y.; WU, Q.; WANG, H. Design And Implementation Of Intelligent Headlamps
Control System Based On CAN Bus. International Conference on Systems and Informatics.
[S.l.]: [s.n.]. 2012.
JOHANSSON, G. et al. Visible distances in simulated night driving conditions with full and
dipped headlights. [S.l.]: United Kingdom: Taylor & Francis, v. 2, 1963. p. 73-79.
LIU, H. et al. AFS controlling algorithm. International Conference on Optical Instruments
and Technology: Optical Systems and Modern Optoelectronic Instruments. [S.l.]: [s.n.]. 2008.
50
LIU, H. et al. Study about AFS Swerve mode. International Conference on Optical
Instruments and Technology: Optical Systems and Modern Optoelectronic Instruments. [S.l.]:
[s.n.]. 2009.
LIU, J. Aplicação de Leds no Conjunto Ótico Dianteiro de Veículos de Passeio, 2008.
LIU, J. Aplicação de Leds no Conjunto Ótico Dianteiro de Veículos de Passeio. Trabalho
de Conclusão de Curso (Graduação em Engenharia Mecânica). ed. [S.l.]: Escola Politécnica Universidade de São Paulo, 2008.
MICROCHIP TECHNOLOGY INC. PIC18F2550 Datasheet. [S.l.]. 2006.
MIYADAIRA, A. N. Microcontroladores PIC18: aprenda e programe em linguagem C. 3ª.
ed. São Paulo: Érica, 2012.
NXP SEMICONDUCTORS. I2C-bus specification and user manual. [S.l.]. 2012.
RONG, H.; GONG, J.; WANG, W. Kinematics Model and Control Strategy of Adaptive
Front Lighting System. Second International Conference on Intelligent Computation
Technology and Automation. [S.l.]: [s.n.]. 2009.
RUMAR, K. Adaptive Illumination System for Motor Vehicles: Towards a More
Intelligent Headlighting System. The University of Michigan. [S.l.]. 1997.
SAWICZ, D. Hobby Servo Fundamentals. [S.l.]. 2000.
SCHMIDT, C.; KALZE, F.; EICHHORN, K. Adaptive Front-Lighting System in LED
Technology - Initial Steps and the Future. SAE Technical Paper, Detroid, 2007.
SUPPLIERBUSINESS LTD. The Lighting Report, Stamford, 2007.
TEXAS INSTRUMENTS. Automotive Adaptive Front-lighting System Reference Design.
Renton. 2013.
UCAMCO. Gerber File Format Specification. [S.l.]. 2004.
XU, C.; GUOYU, L. A Semi-physical Simulation Platform for Adaptive Front Lighting
System (AFS). Information Technology Journal, 2011.
51
APÊNDICE A
Os resultados dos cálculos a seguir estão implementados nos algoritmos dos
módulos correspondentes.
SLAVE01 e SLAVE02
- Normatização do conversor A/D para 8bits para envio via I2C para o
módulo Master:
𝑦𝐼2𝐶 =
255∗𝑥
1023
= 0,249267 ∗ 𝑥
MASTER
- Transformação do valor hexadecimal recebido via I2C do módulo Slave01
para radianos, para uso com as funções matemática da linguagem C.
𝑦𝑟𝑎𝑑 =
𝜋∗(2∗𝑥ℎ𝑒𝑥 −255)
1530
- Cálculo de 𝛿𝑖 pela relação cot 𝛿𝑜 − cot 𝛿𝑖 =
𝛿𝑖 = 𝑎𝑡𝑎𝑛 �
- Cálculo do raio da curva:
𝑅=
- Cálculo do ângulo de correção 𝜙:
𝑤
𝑙
:
𝑙. tan 𝛿𝑜
�
𝑙 − 𝑤. tan 𝛿𝑜
𝑙
sin 𝛿𝑖
𝜙 = sin−1 �
70 ∗ 𝐻
�
𝑅
52
- Transformação do valor de 𝜙 para hexadecimal de 8bits para envio via I2C
ao módulo Slave03, para acionamento dos motores:
𝑥𝑟𝑎𝑑 +0,37315
𝑦ℎ𝑒𝑥 = 255 ∗ �
0,7463
�
- Transformação do valor hexadecimal recebido via I2C do módulo Slave02
para radianos, para uso com as funções matemática da linguagem C.
𝑦𝑟𝑎𝑑 =
11𝜋∗(2∗𝑥ℎ𝑒𝑥 −255)
45900
- Transformação do valor de 𝜃 para hexadecimal de 8bits para envio via I2C
ao módulo Slave03, para acionamento dos motores:
𝑥𝑟𝑎𝑑 +0,191986
𝑦ℎ𝑒𝑥 = 255 ∗ �
0,383972
�
SLAVE03
- A relação entre o duty-cycle de controle do servo motor e o ângulo de
resposta é dado por:
𝑥𝑚𝑠 =
𝑦°+90
100
+ 0,6 𝑜𝑢 𝑦° = 100(𝑥𝑚𝑠 − 0,6) − 90
53
ANEXO
54
55
56
57
58
59
60
ANEXO H – Algoritmo dos módulos Slave01 e Slave02
/* Paulo R Ferreira
/*Trabalho de Conclusão de Curso
/****************************************************************************/
/*
Sistema de Faróis Adaptativos
*/
/*------------------------------------------------------------- ------------*/
/*
SLAVE 01
*/
/****************************************************************************/
/* Bibliotecas */
#include <p18f2550.h>
#include <stdio.h>
#include <stdlib.h>
#include <i2c.h>
#include <adc.h>
#include <delays.h>
/* Configurações */
#pragma config FOSC = HS
#pragma config WDT
= ON, WDTPS = 16
#pragma config PWRT = OFF
#pragma config MCLRE = OFF
#pragma config LVP
= OFF
#pragma config DEBUG = OFF
#pragma config PBADEN = OFF
#pragma config CP0=OFF, CP1=OFF, CP2=OFF, CP3=OFF, CPB=OFF, CPD=OFF
#pragma config WRT0=OFF, WRT1=OFF, WRT2=OFF, WRT3=OFF, WRTB=OFF, WRTC=OFF, WRTD=OFF
#pragma config EBTR0=OFF, EBTR1=OFF, EBTR2=OFF, EBTR3=OFF, EBTRB=OFF
/* Variáveis Globais */
int adc, j, D1;
float aux;
#define SL01_addr 0x10
/* Inicialização das Funções */
void ConfigPIC(void);
void Init_I2C_Slave(void);
void InitializeADC(void);
int getADC(void);
void InterruptVectorHigh(void);
//Endereço I2C do dispositivo Slave 01
61
void InterruptHandlerHigh(void);
int round(float);
/* Rotina de inicialização do módulo I2C Master */
void Init_I2C_Slave(void)
{
// Configuração do dispositivo slave
SSPCON1bits.SSPM0 = 0;
//Modo Slave mode com endereçamento de 7bits
SSPCON1bits.SSPM1 = 1;
SSPCON1bits.SSPM2 = 1;
SSPCON1bits.SSPM3 = 0;
SSPCON1bits.CKP = 1;
//Bit de seleção da polaridade do clock
SSPCON1bits.SSPEN = 1;
//Habilita e configura os pinos SDA e SCL
SSPCON1bits.SSPOV = 0;
//Bit indicador de recebimento de overflow
SSPCON1bits.WCOL = 0;
//Bit de detecção de colisão na escrita
SSPCON2 = 0x00;
SSPSTATbits.SMP = 1;
//Bit de controle do Slew rate
SSPSTATbits.CKE = 0;
//Bit de seleção SMBus
SSPADD = SL01_addr;
//Endereço I2C do dispositivo Slave01 (0x10)
// Habilita o barramento I2C
TRISBbits.TRISB0 = 1;
TRISBbits.TRISB1 = 1;
}
/* Rotina de configuração do módulo A/D */
void InitializeADC(void)
{
TRISAbits.TRISA0 = 1;
//Define AN0 como entrada
OpenADC(
//Habilita e configura o módulo ADC
ADC_FOSC_8
//OSC=20Mhz -> Tad = 8/20 = 0,4us
& ADC_RIGHT_JUST
//Resultado justificado a direita
& ADC_2_TAD,
//Config. do tempo de aquisição automático
ADC_CH0
//Seleção do canal 0 (AN0)
& ADC_INT_OFF
//Interrupção desabilitada
62
& ADC_VREFPLUS_VDD
//Vref+ = Vcc
& ADC_VREFMINUS_VSS,
//Vref- = Vss
ADC_1ANA);
//Habilita somente o canal AN0
SetChanADC(ADC_CH0);
//Seleção do canal 0 (AN0)
}
/* Rotina de conversão do A/D */
int getADC(void)
{
int adc;
ConvertADC();
//Inicia conversão
while( BusyADC() );
//Aguarda fim da conversão
adc =
//Armazena o resultado da conversão
ReadADC();
//CloseADC();
//Desabilita o módulo conversor A/D
return adc;
}
/* Vetor de Interrupção de Alta Prioridade */
#pragma code InterruptVectorHigh = 0x08
//Desvia o programa para 0x08
void InterruptVectorHigh(void)
{
_asm
goto InterruptHandlerHigh
//Desvia o programa para a rotina de interrupção
_endasm
}
#pragma code
/* Rotina de tratamento da Interrupção de Alta Prioridade(ISR) */
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh(void)
{
if( PIR1bits.SSPIF == 1)
//Bit de interrupção I2C
{
PIR1bits.SSPIF == 0;
j = SSPBUF;
// Requisição de leitura do disp. Master
if (SSPSTATbits.R_W == 1)
{
//transmissão de dado para o Master
adc = getADC();
//Realiza a leitura de AN0
aux = 0.249267*adc;
//Normatização para 8bits
63
D1 = round(aux);
//Arredondamento do valor
if (D1 > 255)
{
D1 = 255;
}
SSPBUF = D1;
SSPCON1bits.CKP = 1;
while( SSPSTATbits.BF == 1 );
//j = SSPBUF;
PIR1bits.SSPIF == 0;
ClrWdt();
return;
}
}
}
/* Rotina para arredondamento de números */
int round(float number)
{
return (number >= 0) ? (int)(number + 0.5) : (int)(number - 0.5);
}
/* Rotina de configuração do PIC */
void ConfigPIC(void)
{
// Configura a Porta A
TRISA = 0b00000000;
// Habilita todas as interrupções
INTCONbits.GIE = 1;
// Habilita todas as interrupções periféricas
INTCONbits.PEIE = 1;
// Habilita as interrupções SSP
PIE1bits.SSPIE = 1;
// Trata interrupções SSP recebidas como baixa prioridade
IPR1bits.SSPIP = 0;
// Trata interrupções USART como baixa prioridade
IPR1bits.RCIP = 0;
// Bit Flag da interrupção do módulo SSP
64
PIR1bits.SSPIF = 0;
}
/*********************************************************************************/
// Rotina Principal
void main()
{
ConfigPIC();
Init_I2C_Slave();
InitializeADC();
Delay10KTCYx(100);
while(1)
{
//
}
}
//200ms
65
ANEXO I – Algoritmo do módulo Slave03
/* Paulo R Ferreira
/*Trabalho de Conclusão de Curso
/*********************************************************************************/
/*
Sistema de Faróis Adaptativos
*/
/*-------------------------------------------------------------------------------*/
/*
SLAVE 03(U1) - Motores do Mov. Horizontal
*/
/*********************************************************************************/
/* Bibliotecas */
#include <p18f2550.h>
#include <stdio.h>
#include <stdlib.h>
#include <i2c.h>
#include <timers.h>
#include <delays.h>
#include <math.h>
/* Configurações */
#pragma config FOSC = HS
#pragma config WDT
= OFF, WDTPS = 1
#pragma config PWRT = OFF
#pragma config MCLRE = OFF
#pragma config LVP
= OFF
#pragma config DEBUG = OFF
#pragma config PBADEN = OFF
#pragma config CP0=OFF, CP1=OFF, CP2=OFF, CP3=OFF, CPB=OFF, CPD=OFF
#pragma config WRT0=OFF, WRT1=OFF, WRT2=OFF, WRT3=OFF, WRTB=OFF, WRTC=OFF, WRTD=OFF
#pragma config EBTR0=OFF, EBTR1=OFF, EBTR2=OFF, EBTR3=OFF, EBTRB=OFF
/* Variáveis
Globais */
unsigned char j;
unsigned int Duty = 61785;
int H_angle;
float Aux;
#define SL031_addr 0x30
/* Inicialização das Funções */
void ConfigPIC(void);
void Init_I2C_Slave(void);
//Endereço I2C do dispositivo Slave 03(U1)
66
void InterruptVectorHigh(void);
void InterruptHandlerHigh(void);
/* Rotina de inicialização do módulo I2C Master */
void Init_I2C_Slave(void)
{
// Configuração do dispositivo slave
SSPCON1bits.SSPM0 = 0;
//Modo Slave mode com endereçamento de 7bits
SSPCON1bits.SSPM1 = 1;
SSPCON1bits.SSPM2 = 1;
SSPCON1bits.SSPM3 = 0;
SSPCON1bits.CKP = 1;
//Bit de seleção da polaridade do clock
SSPCON1bits.SSPEN = 1;
//Habilita e configura os pinos SDA e SCL
SSPCON1bits.SSPOV = 0;
//Bit indicador de recebimento de overflow
SSPCON1bits.WCOL = 0;
//Bit de detecção de colisão na escrita
SSPCON2 = 0x00;
SSPSTATbits.SMP = 1;
//Bit de controle do Slew rate
SSPSTATbits.CKE = 0;
//Bit de seleção SMBus
SSPADD = SL031_addr;
//Endereço I2C do dispositivo Slave03(U1) (0x30)
// Habilita o barramento I2C
TRISBbits.TRISB0 = 1;
TRISBbits.TRISB1 = 1;
}
/* Vetor de Interrupção de Alta Prioridade */
#pragma code InterruptVectorHigh = 0x08
//Desvia o programa para 0x08
void InterruptVectorHigh(void)
{
_asm
goto InterruptHandlerHigh
_endasm
}
#pragma code
//Desvia o programa para a rotina de interrupção
67
/* Rotina de tratamento da Interrupção de Alta Prioridade(ISR) */
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh(void)
{
//ROTINA DE INTERRUPÇÃO I2C
if( PIR1bits.SSPIF == 1)
//Bit de interrupção I2C
{
PIR1bits.SSPIF == 0;
j = SSPBUF;
// Requisição de escrita do disp. Master
if (SSPSTATbits.R_W == 0)
{
//recebimento de dado do Master
if (SSPSTATbits.D_A == 1)
{
H_angle = SSPBUF;
// Armazena o dado recebido
j = SSPBUF;
// Limpa o registro SSPBUF
Aux = 62310 - 4.11765*H_angle;
// Calcula o Dutycycle do motor
Duty = Aux;
PIR1bits.SSPIF = 0;
}
}
}
// ROTINA DE INTERRUPÇÃO DO TIMER0
if(INTCONbits.TMR0IF == 1)
{
//INTCONbits.GIE = 0;
PIE1bits.SSPIE = 0;
INTCONbits.TMR0IF = 0;
if(LATAbits.LATA1)
{
WriteTimer0(15535);
LATAbits.LATA0 = 0;
LATAbits.LATA1 = 0;
}
else
{
WriteTimer0(Duty);
LATAbits.LATA0 = 1;
LATAbits.LATA1 = 1;
}
PIE1bits.SSPIE = 1;
68
}
}
/* Rotina de configuração do PIC*/
void ConfigPIC(void)
{
// Configura a Porta A
TRISA = 0b00000000;
// Habilita todas as interrupções
INTCONbits.GIE = 1;
// Habilita todas as interrupções periféricas
INTCONbits.PEIE = 1;
// Habilita interrupção do Timer0
INTCONbits.TMR0IE = 1;
// Habilita as interrupções SSP
PIE1bits.SSPIE = 1;
// Trata interrupções SSP recebidas como baixa prioridade
IPR1bits.SSPIP = 0;
// Bit Flag da interrupçõo do módulo SSP
PIR1bits.SSPIF = 0;
// Bit Flag da interrupçõo do Timer0
INTCONbits.TMR0IF = 0;
// Configuração dos Timer0
OpenTimer0( TIMER_INT_ON &
//Habilita a interrupção do Timer 0
T0_16BIT &
//Operação de 16 bits
T0_SOURCE_INT &
//Seleciona a fonte de clock interna
T0_EDGE_RISE &
//Valida o sinal na borda de subida
T0_PS_1_2 );
//Prescaler igual a 2 (1:2)
}
/******************************************************************************/
// Rotina Principal
void main()
{
ConfigPIC();
Init_I2C_Slave();
InitializeUSART();
69
Delay10KTCYx(100);
while(1)
{
//
}
}
//200ms
70
ANEXO J – Algoritmo do módulo Slave03
/* Paulo R Ferreira
/* Trabalho de Conclusão de Curso
/*********************************************************************************/
/*
Sistema de Faróis Adaptativos
*/
/*-------------------------------------------------------------------------------*/
/*
SLAVE 03(U2) - Motores do Mov. Vertical
*/
/*********************************************************************************/
/* Bibliotecas */
#include <p18f2550.h>
#include <stdio.h>
#include <stdlib.h>
#include <i2c.h>
#include <timers.h>
#include <delays.h>
#include <math.h>
/* Configurações */
#pragma config FOSC = HS
#pragma config WDT
= OFF, WDTPS = 1
#pragma config PWRT = OFF
#pragma config MCLRE = OFF
#pragma config LVP
= OFF
#pragma config DEBUG = OFF
#pragma config PBADEN = OFF
#pragma config CP0=OFF, CP1=OFF, CP2=OFF, CP3=OFF, CPB=OFF, CPD=OFF
#pragma config WRT0=OFF, WRT1=OFF, WRT2=OFF, WRT3=OFF, WRTB=OFF, WRTC=OFF, WRTD=OFF
#pragma config EBTR0=OFF, EBTR1=OFF, EBTR2=OFF, EBTR3=OFF, EBTRB=OFF
/* Variáveis Globais */
unsigned char j;
unsigned int Duty = 61785;
int V_angle;
float Aux;
#define SL032_addr 0x40
/* Inicialização das Funções */
void ConfigPIC(void);
void Init_I2C_Slave(void);
//Endereço I2C do dispositivo Slave 03(U2)
71
void InterruptVectorHigh(void);
void InterruptHandlerHigh(void);
/* Rotina de inicialização do módulo I2C Master */
void Init_I2C_Slave(void)
{
// Configuração do dispositivo slave
SSPCON1bits.SSPM0 = 0;
//Modo Slave mode com endereçamento de 7bits
SSPCON1bits.SSPM1 = 1;
SSPCON1bits.SSPM2 = 1;
SSPCON1bits.SSPM3 = 0;
SSPCON1bits.CKP = 1;
//Bit de seleção da polaridade do clock
SSPCON1bits.SSPEN = 1;
//Habilita e configura os pinos SDA e SCL
SSPCON1bits.SSPOV = 0;
//Bit indicador de recebimento de overflow
SSPCON1bits.WCOL = 0;
//Bit de detecção de colisão na escrita
SSPCON2 = 0x00;
SSPSTATbits.SMP = 1;
//Bit de controle do Slew rate
SSPSTATbits.CKE = 0;
//Bit de seleção SMBus
SSPADD = SL032_addr;
//Endereço I2C do dispositivo Slave03(U2) (0x40)
// Habilita o barramento I2C
TRISBbits.TRISB0 = 1;
TRISBbits.TRISB1 = 1;
}
/* Vetor de Interrupção de Alta Prioridade */
#pragma code InterruptVectorHigh = 0x08
//Desvia o programa para 0x08
void InterruptVectorHigh(void)
{
_asm
goto InterruptHandlerHigh
_endasm
}
#pragma code
//Desvia o programa para a rotina de interrupção
72
/* Rotina de tratamento da Interrupção de Alta Prioridade(ISR) */
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh(void)
{
//ROTINA DE INTERRUPÇÃO I2C
if( PIR1bits.SSPIF == 1)
//Bit de interrupção I2C
{
PIR1bits.SSPIF == 0;
j = SSPBUF;
// Requisição de escrita do disp. Master
if (SSPSTATbits.R_W == 0)
{
//recebimento de dado do Master
if (SSPSTATbits.D_A == 1)
{
V_angle = SSPBUF;
// Armazena o dado recebido
j = SSPBUF;
// Limpa o registro SSPBUF
Aux = 62060 - 2.15686*V_angle;
// Calcula o Dutycycle do motor
Duty = Aux;
PIR1bits.SSPIF = 0;
}
}
}
// ROTINA DE INTERRUPÇÃO DO TIMER0
if(INTCONbits.TMR0IF == 1)
{
//INTCONbits.GIE = 0;
PIE1bits.SSPIE = 0;
INTCONbits.TMR0IF = 0;
if(LATAbits.LATA1)
{
WriteTimer0(15535);
LATAbits.LATA0 = 0;
LATAbits.LATA1 = 0;
}
else
{
WriteTimer0(Duty);
LATAbits.LATA0 = 1;
LATAbits.LATA1 = 1;
}
PIE1bits.SSPIE = 1;
}
}
73
/* Rotina de configuração do PIC*/
void ConfigPIC(void)
{
// Configura a Porta A
TRISA = 0b00000000;
// Habilita todas as interrupções
INTCONbits.GIE = 1;
// Habilita todas as interrupções periféricas
INTCONbits.PEIE = 1;
// Habilita interrupção do Timer0
INTCONbits.TMR0IE = 1;
// Habilita as interrupções SSP
PIE1bits.SSPIE = 1;
// Trata interrupções SSP recebidas como baixa prioridade
IPR1bits.SSPIP = 0;
// Bit Flag da interrupção do módulo SSP
PIR1bits.SSPIF = 0;
// Bit Flag da interrupção do Timer0
INTCONbits.TMR0IF = 0;
// Configuração dos Timer0
OpenTimer0( TIMER_INT_ON &
//Habilita a interrupção do Timer 0
T0_16BIT &
//Operação de 16 bits
T0_SOURCE_INT &
//Seleciona a fonte de clock interna
T0_EDGE_RISE &
//Valida o sinal na borda de subida
T0_PS_1_2 );
//Prescaler igual a 2 (1:2)
}
/******************************************************************************/
// Rotina Principal
void main()
{
ConfigPIC();
Init_I2C_Slave();
InitializeUSART();
Delay10KTCYx(100);
while(1)
{
}
}
//200ms
74
ANEXO K – Algoritmo do módulo Master
/* Paulo R Ferreira
/* Trabalho de Conclusão de Curso
/*********************************************************************************/
/*
Sistema de Faróis Adaptativos
*/
/*-------------------------------------------------------------------------------*/
/*
Master
*/
/*********************************************************************************/
/* Bibliotecas */
#include <p18f2550.h>
#include <stdio.h>
#include <stdlib.h>
#include <i2c.h>
#include <adc.h>
#include <timers.h>
#include <delays.h>
#include <math.h>
/* Configurações */
#pragma config FOSC = HS
#pragma config WDT
= ON, WDTPS = 256
#pragma config PWRT = OFF
#pragma config MCLRE = OFF
#pragma config LVP
= OFF
#pragma config DEBUG = OFF
#pragma config PBADEN = OFF
#pragma config CP0=OFF, CP1=OFF, CP2=OFF, CP3=OFF, CPB=OFF, CPD=OFF
#pragma config WRT0=OFF, WRT1=OFF, WRT2=OFF, WRT3=OFF, WRTB=OFF, WRTC=OFF, WRTD=OFF
#pragma config EBTR0=OFF, EBTR1=OFF, EBTR2=OFF, EBTR3=OFF, EBTRB=OFF
/* Variáveis Globais */
#define SL01_addr 0x10
//Endereço I2C do dispositivo Slave 01
#define SL02_addr 0x20
//Endereço I2C do dispositivo Slave 02
#define SL031_addr 0x30
//Endereço I2C do dispositivo Slave 03(U1)
#define SL032_addr 0x40
//Endereço I2C do dispositivo Slave 03(U2)
#define pi 3.141592
#define const
0.004
//0.23° (potenciômetro)
#define Phi_max 0.373141
//21.379°
#define Theta_max 0.089594
//5.13°
75
/* Inicialização das Funções */
void ConfigPIC(void);
void Init_I2C_Master(void);
void InitializeADC(void);
int getADC(void);
void i2c_send_message(unsigned char, unsigned char);
unsigned char i2c_read_message(unsigned char);
int round(float);
/* Rotina de inicialização do módulo I2C Master */
void Init_I2C_Slave(void)
{
// Configuração do dispositivo slave
SSPCON1bits.SSPM0 = 0;
//Modo Slave mode com endereçamento de 7bits
SSPCON1bits.SSPM1 = 0;
SSPCON1bits.SSPM2 = 0;
SSPCON1bits.SSPM3 = 1;
SSPCON1bits.SSPEN = 1;
//Habilita e configura os pinos SDA e SCL
SSPCON1bits.SSPOV = 0;
//Bit indicador de recebimento de overflow
SSPCON1bits.WCOL = 0;
//Bit de detecção de colisão na escrita
SSPCON2 = 0x00;
SSPSTATbits.SMP = 1;
//Bit de controle do Slew rate
SSPSTATbits.CKE = 0;
//Bit de seleção SMBus
SSPADD = 49;
//clock = FOSC/(4 * (SSPADD + 1))
// 49 para cristal de 20Mhz
// Habilita o barramento I2C
TRISBbits.TRISB0 = 1;
TRISBbits.TRISB1 = 1;
}
/* Rotina de configuração do módulo A/D */
void InitializeADC(void)
{
TRISAbits.TRISA0 = 1;
//Define AN0 como entrada
OpenADC(
//Habilita e configura o módulo ADC
ADC_FOSC_8
//OSC=20Mhz -> Tad = 8/20 = 0,4us
& ADC_RIGHT_JUST
//Resultado justificado a direita
76
& ADC_2_TAD,
//Config. do tempo de aquisição automático
ADC_CH0
//Seleção do canal 0 (AN0)
& ADC_INT_OFF
//Interrupção desabilitada
& ADC_VREFPLUS_VDD
//Vref+ = Vcc
& ADC_VREFMINUS_VSS,
//Vref- = Vss
ADC_1ANA);
//Habilita somente o canal AN0
SetChanADC(ADC_CH0);
//Seleção do canal 0 (AN0)
}
/* Rotina de conversão do A/D */
int getADC(void)
{
int adc;
ConvertADC();
//Inicia conversão
while( BusyADC() );
//Aguarda fim da conversão
adc =
//Armazena o resultado da conversão
ReadADC();
//CloseADC();
//Desabilita o módulo conversor A/D
return adc;
}
/* Rotina de envio de dados para o módulo Slave */
void i2c_send_message(unsigned char address, unsigned char data0)
{
IdleI2C();
// Aguarda até que o barramento esteja livre
StartI2C();
// Envia Start
IdleI2C();
// Aguarda até que o barramento esteja livre
WriteI2C( address );
// Envia o endereço
IdleI2C();
// Aguarda até que o barramento esteja livre
WriteI2C( data0 );
// Envia o dado
IdleI2C();
// Aguarda até que o barramento esteja livre
StopI2C();
// Envia Stop
IdleI2C();
// Aguarda até que o barramento esteja livre
}
// Rotina de leitura de dados do módulo Slave
unsigned char i2c_read_message(unsigned char address)
{
unsigned char Flag, D1;
IdleI2C();
// Aguarda até que o barramento esteja livre
StartI2C();
// Envia Start
IdleI2C();
// Aguarda até que o barramento esteja livre
Flag = WriteI2C( address|0x01 );
// Envia o endereço
77
IdleI2C();
// Aguarda até que o barramento esteja livre
D1 = ReadI2C();
// Recebe o dado
IdleI2C();
// Aguarda até que o barramento esteja livre
NotAckI2C();
// finaliza a leitura do dado
IdleI2C();
// Aguarda até que o barramento esteja livre
StopI2C();
// Envia Stop
return(D1);
}
/* Rotina para arredondamento de números */
int round(float number)
{
return (number >= 0) ? (int)(number + 0.5) : (int)(number - 0.5);
}
/* Rotina de configuração do PIC*/
void ConfigPIC(void)
{
// Configura a Porta A
TRISA = 0b00000000;
// Configura a Porta B
TRISB = 0b00000011;
}
/******************************************************************************/
// Rotina Principal
void main()
{
// Dados do veículo
int L = 2500, W = 1500, H = 480; // [mm]
// Variáveis do sistema
unsigned char Veloc, Volante, Chassi;
float Delta_o, Delta_i, R, Phi, Theta, aux;
int D_o, D_i, R_g, Phi_g, H_angle, Theta_g, V_angle, dir;
// Inicialização
ConfigPIC();
Init_I2C_Master();
InitializeADC();
78
Delay10KTCYx(150);
//300ms
while(1)
{
// VERIFICA A VELOCIDADE DO VEÍCULO
Veloc = getADC();
if(Veloc > 102)
// Verifica se a velocidade é maior que 20km/h
{
// VERIFICA O ÂNGULO DAS RODAS
Volante = i2c_read_message(SL01_addr);
// Valor hex[0,255]
if(Volante == 127)
{
Delta_o = 0;
}
else if(Volante > 127)
{
Delta_o = (pi*2*Volante - 255*pi)/1530; // Valor em rad (float)
}
else if(Volante < 127)
{
dir = 1;
// 1 = esquerda
Volante = Volante + (2*(127-Volante));
Delta_o = (pi*2*Volante - 255*pi)/1530;
}
Delta_i = atan2( (L*tan(Delta_o)),(L-W*tan(Delta_o)) );
// CALCULA O RAIO DA CURVA
R = L/(sin(Delta_i));
// Valor em rad (float)
// CALCULA A CORREÇÃO DOS FARÓIS
Phi = asin( 70*(H/R) );
// Valor em rad (float)
if(Phi > Phi_max)
{
Phi = Phi_max;
}
if(dir == 1)
{
Phi = -Phi;
dir = 0;
}
// CALCULA O VALOR HEX A SER ENVIADO PARA O MOTOR
aux = (255*Phi + 255*0.3731)/0.7462;
H_angle = round(aux);
79
i2c_send_message(SL031_addr, H_angle);
Delay10KTCYx(10);
//20ms
// VERIFICA O ÂNGULO DO CHASSI
Chassi = i2c_read_message(SL02_addr);
// Valor hex[0,255]
if(Chassi == 127)
{
Theta = 0;
}
else if(Chassi > 127)
{
Theta = -(22*pi*Chassi-2805*pi)/45900;
// Valor em rad (float)
}
else if(Chassi < 127)
{
Chassi = Chassi + (2*(127-Chassi));
Theta = (22*pi*Chassi-2805*pi)/45900;
// Valor em rad (float)
}
if(Theta > Theta_max)
{
Theta = Theta_max;
}
if(Theta < -Theta_max)
{
Theta = -Theta_max;
}
// CALCULA O VALOR HEX A SER ENVIADO PARA O MOTOR
aux = (255*Theta + 255*0.191986)/0.383972;
V_angle = round(aux);
i2c_send_message(SL032_addr, V_angle);
Delay10KTCYx(5);
//10ms
}
else
{
i2c_send_message(SL031_addr, H_angle = 128);
Delay10KTCYx(5);
//10ms
i2c_send_message(SL032_addr, V_angle = 128);
}
//ClrWdt();
}
}

Documentos relacionados