CENTRO PAULA SOUZA FACULDADE DE TECNOLOGIA FATEC SANTO ANDRÉ Tecnologia em Eletrônica Automotiva LUIZ RICARDO TRAJANO DA SILVA TIAGO SANTOS DE ARAÚJO FERRAMENTA DE DIAGNÓSTICO AUTOMOTIVO OBD II Santo André – São Paulo 2010 CENTRO PAULA SOUZA FACULDADE DE TECNOLOGIA FATEC SANTO ANDRÉ Tecnologia em Eletrônica Automotiva LUIZ RICARDO TRAJANO DA SILVA TIAGO SANTOS DE ARAÚJO FERRAMENTA DE DIAGNÓSTICO AUTOMOTIVO OBD II Monografia apresentada ao Curso de Tecnologia em Eletrônica Automotiva da FATEC Santo André, como requisito parcial para conclusão do curso em Tecnologia em Eletrônica Automotiva. Orientador: Professor. Weslley Medeiros Torres. Santo André – São Paulo 2010 Dedicamos este trabalho a nossas famílias e a todos os nossos amigos que sempre estiveram presentes durante está etapa de nossas vidas. AGRADECIMENTOS Atenciosamente, a Deus e afetuosamente, as nossas famílias, enviamos nossa eterna gratidão, pelo exemplo de vida, por oferecerem todo o suporte para nossa educação, semente deste trabalho. E principalmente, por vibrarem a cada conquista. De maneira especial, ao nosso orientador, o Professor Weslley Medeiros Torres, da Faculdade de Tecnologia de Santo André – FATEC, por sua paciência e comprometimento durante nosso trabalho em conjunto. Gostaríamos de agradecer aos Professores Mestre. Cleber William Gomes, Mestre Edson Kitani e Orlando Salvo Junior, pelo apoio que tivemos, e a todos aqueles que direta ou indiretamente contribuíram para a realização deste trabalho. Agradecemos aos professores, colaboradores e funcionários da Fatec Santo André por terem reservado um tempo de suas vidas para a transmissão de seus conhecimentos e por sempre estarem dispostos a nos ajudar. “É a chave que abre a porta lá do quarto dos segredos. Vem mostrar que nunca é tarde, vem mostrar que é sempre cedo. E que para cada pecado sempre existe um perdão. Não tem certo nem errado, todo mundo tem razão, e que o ponto de vista é que é o ponto da questão.” Raul Seixas RESUMO Com o aumento da eletrônica embarcada nos veículos automotores, passa a ser fundamental o desenvolvimento de equipamentos que melhorem o desempenho, aumente o conforto, a segurança e que controlem o nível de emissões de poluentes, etc. Em vista disso, nós nos propomos a desenvolver um sistema que realize a aquisição de dados, monitorando o funcionamento do veículo e que detecte possíveis falhas. Esta monografia tem como objetivo o desenvolvimento de um scanner automotivo, cuja função é a aquisição de dados presentes nos módulos eletrônicos existentes em veículos equipados com sistemas de diagnósticos embarcados de segunda geração. Composto por elementos de hardware, baseado principalmente em um microcontrolador PIC16F877A e em um circuito integrado da família ELM.. Palavras chaves: Diagnóstico Veicular, OBD II, Scanner automotivo, DTC (Código de Falha). ABSTRACT With the increase of electronics, becomes crucial to the development of equipment, improve performance, enhance comfort and safety, controlling the emissions of pollutants and so on. In view of this, we propose a system that performs data acquisition, monitoring the operation of the vehicle and detecting possible failures. This monograph aims to develop an automotive scanner, whose function is the data acquisition modules present in existing electronic systems in vehicles equipped with onboard diagnostics, second-generation. Compound of hardware elements, based on a microcontroller and an integrated circuit family ELM. Key Word: Vehicle Diagnose, OBD II (on board diagnostics), automotive scanner, DTCs (Diagnostic Trouble Codes). LISTA DE ILUSTRAÇÕES FIGURA 1: COMBUSTÍVEL DA ELETRÔNICA EMBARCADA......................................................... 18 FIGURA 2 ARQUITETURA CENTRALIZADA .............................................................................. 19 FIGURA 3: ARQUITETURA DISTRIBUÍDA ................................................................................. 20 FIGURA 4 : RESPONSABILIDADE X COMPLEXIDADE................................................................. 21 FIGURA 5: CONECTOR OBDII................................................................................................ 25 FIGURA 6: EXEMPLO DO CÓDIGO DTC P0143........................................................................ 27 FIGURA 7: ARQUITETURA DE REDE OBD-II............................................................................ 28 FIGURA 8: BARRAMENTO DE DIAGNÓSTICO ISO 9141-2......................................................... 29 FIGURA 9: TOPOLOGIA KWP 2000 ........................................................................................ 30 FIGURA 10 : TEMPO DE 1 BIT ................................................................................................. 32 FIGURA 11: EXEMPLO DE COMUNICAÇÃO USART ASSÍNCRONO............................................. 33 FIGURA 12: PINAGEM DO ELM-327 ....................................................................................... 34 FIGURA 13: DIAGRAMA DE BLOCOS DA FERRAMENTA DE DIAGNÓSTICO AUTOMOTIVO ............. 36 FIGURA 14: ESQUEMA DO HARDWARE DA COMUNICAÇÃO COM O VEÍCULO. ............................. 37 FIGURA 16: CIRCUITO DE INTERFACE ENTRE USUÁRIO E HARDWARE DE CONTROLE................... 38 FIGURA 15: CONFIGURAÇÃO BÁSICA DO MICROCONTROLADOR............................................... 38 FIGURA 17: ESQUEMA LIGAÇÃO E COMUNICAÇÃO COM O DISPLAY DE LCD ............................ 39 FIGURA 18: ESQUEMA GERAL DA FERRAMENTA DE DIAGNÓSTICO AUTOMOTIVO. ..................... 39 FIGURA 19:ESQUEMA DE LIGAÇÃO DO ELM327..................................................................... 41 FIGURA 20: SOFTWARE OBDSPY ......................................................................................... 41 FIGURA 21: AQUISIÇÃO DE DADOS SOFTWARE DE MONITORAMENTO. ..................................... 42 FIGURA 22: FUNÇÃO ENVIA .................................................................................................. 43 FIGURA 23: FUNÇÃO RECEBEMASK. ...................................................................................... 44 FIGURA 25: FUNÇÃO ASCII .................................................................................................... 45 FIGURA 24: DESIGN DE SOFTWARE DE ALTO NÍVEL ............................................................... 45 FIGURA 26: FUNÇÃO FALHA .................................................................................................. 46 FIGURA 27: TRATAMENTO DO DADO DA PRESSÃO DO COLETOR DE ADMISSÃO ......................... 47 FIGURA 28: TRATAMENTO DE DADOS DA ROTAÇÃO ................................................................ 48 FIGURA 29: TRATAMENTO DE DADOS DE VELOCIDADE ........................................................... 48 FIGURA 30: TRATAMENTO DE DADOS DO AVANÇO DA IGNIÇÃO .............................................. 49 FIGURA 31: TRATAMENTO DE DADOS DA TPAR ...................................................................... 49 FIGURA 32: TRATAMENTO DE DADOS DA POSIÇÃO DA VÁLVULA BORBOLETA .......................... 49 FIGURA 33: TRATAMENTO DOS DADOS DO DTC ..................................................................... 50 FIGURA 34:FUNÇÃO APAGAR CÓDIGO DE FALHA .................................................................... 51 FIGURA 35: TELA INICIAL ..................................................................................................... 55 FIGURA 36 : TELA PRINCIPAL ................................................................................................ 56 FIGURA 37 : PARÂMETROS DTC1 .......................................................................................... 56 FIGURA 38 : PARÂMETROS DTC2 .......................................................................................... 56 FIGURA 39: NÚMERO DE DTC`S ............................................................................................ 57 FIGURA 40: NÚMERO DTC`S ................................................................................................. 57 FIGURA 41: IDENTIFICAÇÃO DTC`S ....................................................................................... 57 FIGURA 42: APAGAR DTC`S.................................................................................................. 57 LISTA DE TABELAS TABELA 1: CÓDIGO DE FALHA 1º DÍGITO ................................................................................ 26 TABELA 2: CÓDIGO DE FALHA 2º DÍGITO ................................................................................ 26 TABELA 3: CÓDIGO DE FALHA 3º DÍGITO ................................................................................ 27 TABELA 4: PARÂMETROS DE LEITURA .................................................................................... 42 TABELA 5: INICIALIZAÇÃO .................................................................................................... 46 TABELA 6: EXEMPLO DE MENSAGENS ENVIADAS E RECEBIDAS ............................................... 46 TABELA 7: EXEMPLO DE REQUISIÇÃO DE CÓDIGOS DE FALHA ................................................. 50 TABELA 8: REQUISIÇÃO PARA APAGAR MEMÓRIA................................................................... 51 TABELA 9: SIMULAÇÃO DA FERRAMENTA DE DIAGNÓSTICO AUTOMOTIVO ............................. 52 SUMÁRIO 1 INTRODUÇÃO ................................................................................................... 14 1.1 OBJETIVOS E MOTIVAÇÃO ................................................................................. 15 1.2 CONTEÚDO ...................................................................................................... 15 2. SISTEMA DIAGNÓSTICO EMBARCADO .................................................... 17 2.1 ELETRÔNICA EMBARCADA ................................................................................ 17 2.2 TECNOLOGIAS DE ARQUITETURAS ELETRÔNICAS .............................................. 18 2.2.1 Arquitetura Centralizada .......................................................................... 19 2.2.2 Arquitetura Distribuída ............................................................................ 20 2.3 DIAGNÓSTICO VEICULAR ................................................................................. 22 2.3.1 OBD no Brasil.......................................................................................... 23 2.3.2 Resolução CONAMA Nº 315 .................................................................... 23 2.3.3Resolução CONAMA Nº 354 ..................................................................... 23 2.4 CONECTOR PADRÃO OBD II ............................................................................. 24 2.4.1 Localização .............................................................................................. 24 2.4.2 Pinagem ................................................................................................... 25 2.5 CÓDIGOS DE FALHA DE DIAGNÓSTICO ............................................................... 26 2.6 PROTOCOLOS DE COMUNICAÇÃO DE DIAGNOSE ................................................ 27 2.6.1 Protocolo ISO 9141-2 – A norma mais utilizada....................................... 29 2.6.2 Protocolo ISO 14230 (KWP 2000) ........................................................... 29 2.6.3 Protocolo SAE J1850 ............................................................................... 30 2.6.4 Protocolo ISO 15765 ................................................................................ 31 2.6.5 Protocolo ISO 1939.................................................................................. 31 2.7 COMUNICAÇÃO SERIAL – UART ....................................................................... 32 2.7.1 Modo Assíncrono ..................................................................................... 32 2.8 ELM 327 ......................................................................................................... 33 2.8.1 As aplicações do dispositivo ELM327 ...................................................... 34 2.8.2 Características Principais: ....................................................................... 34 3.METODOLOGIA ................................................................................................ 35 3.1 REQUISITOS DO PRODUTO ................................................................................ 35 3.2 SOLUÇÕES TÉCNICA ......................................................................................... 35 3.2.1 Hardware ................................................................................................. 36 3.2.1.1 ELM 327. .......................................................................................... 36 3.2.1.2 Microcontrolador PIC16F877A ......................................................... 38 3.2.1.3 Teclas e Display de interface. ............................................................ 38 3.2.2 Software ................................................................................................... 40 3.2.2.1 Requisitos do software....................................................................... 42 3.2.2.2 Design do Software. .......................................................................... 42 3.2.2.2.1 Design de Alto Nível .................................................................. 45 3.2.2.2.1 Design detalhado ........................................................................ 46 3.2.2.2.1.1 Inicialização. ........................................................................ 46 3.2.2.2.1.1 Parâmetros de leitura. ........................................................... 46 3.2.2.2.1.3 Códigos de falha DTC. ......................................................... 50 3.2.2.2.1.4 Apagar DTC ........................................................................ 51 4. ANÁLISE DOS RESULTADOS ........................................................................ 52 4.1 SIMULAÇÃO. .................................................................................................... 52 4.2 TESTES NO VEÍCULO ........................................................................................ 53 4.3 RESULTADOS ................................................................................................... 54 4.3 SESSÃO DE DIAGNÓSTICO ................................................................................. 55 4.3.1 Parâmetros de Leitura.............................................................................. 56 4.3.2 Leitura dos DTC`s .................................................................................... 56 5. CONCLUSÃO..................................................................................................... 58 5.1 PROPOSTAS FUTURAS ....................................................................................... 58 6. REFERÊNCIAS.................................................................................................. 59 ANEXO ................................................................................................................... 62 ANEXO A – CÓDIGO DO PROGRAMA. .................................................................... 62 ANEXO B – DATASHEET ELM-327 – COMANDO AT. ............................................ 62 ANEXO C - LISTA COM OS DTC`S ....................................................................... .62 1 INTRODUÇÃO A indústria automotiva motivada pela redução nos custos de produção, pelas leis que limitam os níveis de emissões de gases resultantes do processo de combustão, pelo aumento da segurança e conforto dos ocupantes e por melhorias de desempenho, iniciou a substituição dos antigos sistemas (mecânicos, hidráulicos e pneumáticos) que possuíam eficiência muito menor por sistemas eletrônicos. (TOSI & GALVÃO & LIMA, 2008). Segundo Guimarães (GUIMARÃES, 2003), a eletrônica embarcada representa todo e qualquer sistema eletro-eletrônico montado em uma aplicação móvel. Este conceito iniciou-se nos veículos através da ECU, Unidade Eletrônica de Controle (Electronic Control Unit) , que fisicamente, nada mais é que um módulo eletrônico responsável por realizar um determinado controle. Em um primeiro momento foram colocadas diversas ECUs responsáveis pelo controle de diferentes componentes, porém com o passar do tempo comprovou se ser indispensável a troca de informação entre elas, o que levou ao surgimento de um barramento eletrônico eficiente, robusto e flexível. Desenvolvia-se então o CAN (Controller Area Network). Tornava-se então indispensável uma ferramenta padrão que permita a verificação do funcionamento de cada módulo eletrônico existente em um veículo. No principio cada fabricante desenvolveu seu próprio sistema de diagnóstico, com software e interface específica, o que acarretava a ocorrência de inúmeros problemas, devido a quando houvesse uma falha, como cada fabricante tinha códigos e especificações próprias, era relativamente complexo realizar o diagnóstico. Então, em 1988, a SAE (Society of Automotive Engineers) com ajuda da EPA (Environmental Protection Agency) criou o OBD (On‐Board Diagnosis), o sistema de diagnose de bordo para controle das emissões e de identificação da provável origem das falhas DTCs (Diagnostic Trouble Codes) armazenados na memória da unidade de controle do motor. Serve também para monitorar componentes do carro e pode também executar rotinas de diagnóstico permitindo prever falhas e adiantar consertos e substituições necessárias. Sua primeira versão era simples, conforme Belo (BELO, 2003), não se padronizava as mensagens utilizadas pelas diversas montadoras, eram realizadas leituras de um reduzido número de códigos de falha e monitorava-se alguns sensores. Na segunda versão esses problemas foram solucionados e inúmeros dados podem ser lidos através do agora OBDII, 14 que além de ser mais completo, padronizou as mensagens de comunicação, facilitando enormemente o processo de diagnóstico. Agora muitos dos códigos de erro devem ser iguais, independente da marca do veículo, e como a interface física e o protocolo são os mesmos, um só aparelho pode ser utilizado para diagnosticar diversos automóveis. Os veículos devem estar equipados com um sistema OBD concebido, construído e instalado de um modo que possibilite identificar os diversos tipos de falhas e deteriorações que possam manifestar-se durante toda a vida do veículo. O acesso ao sistema OBD necessário para a inspeção, diagnose, manutenção ou reparação do veículo deve ser irrestrito e normalizado. Este deve ser concebido, construído e instalado no veículo de modo que permita satisfazer as condições normais de utilização. A conexão física é realizada através de um conector de diagnostico de dezesseis pinos denominado DLC (Diagnostic Link conector), através desse, sistemas externos como scanners, podem acessar os DTCs (Diagnostic Trouble Codes), que são os códigos de falhas armazenados na memória da unidade de controle do motor. Este projeto é composto por uma parte, monográfica, que descreve o processo de trabalho e o embasamento teórico, e finalmente uma parte experimental. 1.1 Objetivos e motivação Este trabalho tem por objetivo desenvolver uma ferramenta de diagnóstico veicular para veículos que possuam o sistema OBD-II, utilizando componentes eletrônicos que se encontram na placa de experiências McLab2, juntamente com um circuito integrado dedicado da família ELM e um software desenvolvido para o equipamento. A motivação foi a oportunidade de se consolidar o conhecimento adquirido durante todo o curso além de contribuir academicamente com os resultados para futuras pesquisas. 1.2 Conteúdo Este trabalho estará assim dividido; o capítulo 2 discorrerá sobre uma revisão bibliográfica mostrando os principais conceitos de sistema de diagnóstico veicular; o padrão OBD-II, os protocolos de comunicação automotivos, o circuito integrado da família ELM e a 15 comunicação serial. No capítulo 3 será detalhado todo processo de aplicação da metodologia utilizada no desenvolvimento do projeto. No capítulo 4 descrevem os ensaios e os resultados obtidos, estratificando-os para um estudo comparativo entre o desejado e o realizado. Analisar-se-á se a meta foi atingida e quais foram as dificuldades encontradas neste projeto. Finalmente, no capítulo 5 discutem-se as conclusões obtidas dos resultados e a proposição de novos estudos e desafios. 16 2. SISTEMA DIAGNÓSTICO EMBARCADO 2.1 Eletrônica embarcada Segundo Guimarães, a eletrônica embarcada representa todo e qualquer sistema eletroeletrônico montado em uma aplicação móvel, seja em um automóvel, um navio ou um avião. (GUIMARÃES, 2003). Conforme Andreatini (ANDREATINI, 2003), o processo da penetração da eletrônica no mercado automotivo, foi lento, devido principalmente à relação de custo benefício. Historicamente a eletrônica embarcada teve seu início na década de 1960, porém naquele momento, devido a ser uma imposição e não por um desejo dos consumidores, não obteve sucesso. Durante a década de 1970 dois eventos retomaram sua inclusão: - A redução do consumo de combustível e a introdução de leis governamentais para a redução da emissão de poluentes na atmosfera. - O desenvolvimento a custos relativamente baixos de dispositivos em estado sólido, o que facilitou a introdução da eletrônica digital no gerenciamento de motores. A indústria automotiva vem há anos utilizando-se de sistemas eletro-eletrônicos no controle de funções do veículo, boa parte destes foi desenvolvido de forma independente, sendo cada um responsável por um determinado tipo de função. Contudo com o passar do tempo provou-se indispensável o compartilhamento de informações, mais facilmente conseguido através da utilização dos sistemas eletro-eletrônicos interligados, sendo cada um responsável por uma função, na qual todas juntas se completam. (TOSI & GALVÃO & LIMA, 2008). Desde então a utilização da eletrônica embarcada se incrementa dia à dia, e será ainda maior no futuro. Abaixo, descrevem-se algumas das presentes e futuras aplicações da eletrônica embarcada no automóvel: - Redes de comunicação, navegação e entretenimento. - Direção ativa - Freios eletrônicos - Conforto e Segurança 17 -Controle eletrônico da injeção do combustível (minimizar consumo e maximizar desempenho). - Instrumentação para a medição de parâmetros do desempenho do veiculo e a obtenção de diagnósticos de eventuais falhas do sistema. Sendo este último base para a construção desta monografia e para montagem do trabalho prático. A figura 1 mostra os pontos que levam ao incremento da eletrônica embarcada. Figura 1: Combustível da eletrônica embarcada (Fonte: Notas de aula do professor Kleber N. Hodel, 2009) Perceba que, os desejos dos clientes têm extrema relação com o avanço da eletrônica embarcada, seja para cumprimento de normas de emissão, diagnose, segurança, conforto, custo, eficiência, economia, etc. 2.2 Tecnologias de Arquiteturas Eletrônicas Segundo Guimarães (GUIMARÃES, 2003), as arquiteturas elétricas são as formas pelos quais os sistemas de controle são interconectados em uma aplicação embarcada. 18 Atualmente, no setor automobilístico destacam-se dois tipos: arquitetura centralizada e a arquitetura distribuída. 2.2.1 Arquitetura Centralizada Neste tipo de arquitetura uma única ECU (Eletronic Control Unit) é responsável por todo o controle existente no sistema, recebendo os sinais de entrada (através dos sensores), os processando e comandando as respectivas saídas (atuadores) de controle do sistema. Figura 2 Arquitetura Centralizada (Fonte: Notas de aula do professor Kleber N. Hodel, 2009) O diagrama esquemático que representa este conceito de arquitetura é apresentado na figura 2. Dentro da ECU são encontrados o hardware e software que permitem a leitura das entradas, seu processamento e a atuação das saídas, além da diagnose para verificação de seu funcionamento. Como vantagens podem destacar: - Facilidade na coleta de informações do sistema devido a todos os dados de entrada serem disponíveis para ECU durante toda a operação. - Simplicidade do hardware, sendo constituído de sensores e atuadores, cabeamento e uma ECU para controle e processamento de dados. - Baixo custo de desenvolvimento Como desvantagens podem destacar: - Limitação das possibilidades de expansão do sistema. 19 - Grande quantidade de cabeamento. 2.2.2 Arquitetura Distribuída Neste tipo de arquitetura, num mesmo sistema de controle, várias ECU´s interligadas, dividem o controle e processamento de diversas funções existentes no veículo. Figura 3: Arquitetura Distribuída (Fonte: Notas de aula do professor Kleber N. Hodel, 2009) O diagrama esquemático que representa este conceito de arquitetura é apresentado na figura 3. As ECU´s encontram-se interligadas, dividindo entre elas a execução de diversas funções existentes no veículo. Tendo seu funcionamento monitorado pela diagnose através de um protocolo de comunicação. Como vantagens podemos destacar: - Maior robustez do sistema de controle. - Facilidade na ampliação do sistema. - Quantidade reduzida de cabeamento. - Possibilita modularização do projeto do sistema e da execução dos testes de validação, aumentando assim a confiabilidade. Como desvantagens podemos destacar: -Implica a existência de um software de controle da rede de comunicação. 20 -Exige a utilização de um protocolo de comunicação. Depois de relacionadas as vantagens e desvantagens fundamentais das duas principais arquiteturas veiculares, acrescentamos que a escolha de uma delas para uma determinada aplicação móvel, depende da ponderação de alguns fatores, tais como: o tempo necessário à implantação da arquitetura, sua viabilidade econômica, complexidade e robustez. Figura 4 : Responsabilidade x Complexidade (GUIMARÃES, 2003) A figura 4 faz uma relação entre a responsabilidade por ECU do sistema de controle, maior na arquitetura centralizada, com a complexidade deste sistema, maior na arquitetura distribuída. Em vista disso, das evoluções tecnológicas e das possibilidades de futuras expansões com o mínimo de alterações do sistema como um todo, optou-se pela maior eficiência das arquiteturas distribuídas. (GUIMARÃES, 2003) Diante disso, se fez necessário a utilização de um protocolo de comunicação, para a interconexão dos módulos, troca de informações pertinentes a cada uma das funções controladas, processadas e executadas no sistema. Então a Bosch apresentou o CAN (Controller Area Network). Esse sistema se mostrou o mais eficiente, robusto e adequado para tal função e logo ganhou a aceitação dos fabricantes de automóveis e passou a dominar a indústria automotiva. 21 2.3 Diagnóstico Veicular Segundo Guimarães (GUIMARÃES, 2007), o termo diagnóstico veicular representa as funções ou ferramentas que permitem a programação ou verificação do funcionamento dos módulos eletrônico existente em um veículo. E devido ao aumento da eletrônica embarcada, passa a ser mandatório o desenvolvimento de dispositivos que permitam, por exemplo, o diagnóstico de falhas eventuais do sistema. Considerando esta necessidade, ele classifica as falhas em duas categorias: as possíveis de serem identificadas pelo motorista e as identificadas somente com o auxílio de ferramentas especiais. A primeira é chamada de OnBoard Diagnosis (OBD) e é realizada por meio da lâmpada de mau funcionamento do motor e avisos sonoros existentes no painel de instrumentos. A segunda pode ser chamada de OffBoard Diagnosis e é realizada pelos dispositivos eletrônicos capazes de se comunicar com os módulos do veículo. (GUIMARÃES, 2007, p. 227). Belo (BELO, 2003) afirma que os sistemas de diagnóstico foram desenvolvidos com o propósito de manter os níveis de emissão de poluentes dos veículos dentro de padrões estabelecidos. Os sistemas de primeira geração eram simples e realizam essa função de forma eficiente, porém possuíam algumas deficiências graves. Primeiramente ao fato de que as falhas somente eram identificadas quando houvesse desgaste do componente ao ponto deste tornar-se inoperante, o que era muito prejudicial, pois se aumentava assim os níveis de emissão de poluentes. Outra grave deficiência era a dificuldade do acesso a essas informações de diagnostico de falha, pois cada fabricante possuía seus próprios protocolos, do qual o acesso aos serviços de diagnose somente eram realizados por ferramentas disponibilizadas pelos próprios. (BELO, 2003) O sistema embarcado de segunda geração OBD-II (On-board Diagnostic Generation 2) foi definido pela CARB (California Air Resources Board), foi primeiramente implementado em todos os veículos americanos produzidos após 1996, é uma norma para diagnóstico veicular, relacionada a emissões de poluentes. O objetivo é detectar falhas nos veículos, cujo desempenho possa aumentar os limites de emissões, ao ponto que estas excedam os limites pré-estabelecidos por leis ambientais da agência de proteção ambiental americana (Environment Protection Agency ou EPA). O sistema estabelece um conjunto de sistema de serviços de diagnóstico presentes nos veículos e implementados por uma ferramenta de diagnóstico geral (scanners), fabricada por diversos fabricantes independentes. 22 Diniz (DINIZ & COLÓN & SILVA & AGUIAR & SILVA. F & PALÁCIOS, 2009) afirma que, o próximo passo será a introdução do padrão OBD-III, na qual o veiculo entrará em contato com as autoridades responsáveis no caso de aumento dos níveis de emissões, e esta será notificada e atuará para que o defeito seja reparado. Com isso, não será mais necessário o controle de emissões de gases, que atualmente acontece de dois em dois anos, aumentando assim a eficiência. 2.3.1 OBD no Brasil A seguir uma breve introdução das principais legislações vigentes no mercado automotivo brasileiro. As resoluções visam dar continuidade as atualizações do PROCONVE (Programa de Controle de Poluição do Ar por Veículos Automotores), instituído pela resolução do CONAMA (Conselho Nacional do Meio Ambiente) Nº18, DE 06 DE MAIO DE 1986, que tem como objetivo principal reduzir os níveis de emissão de poluentes pelo escapamento e por evaporação, promovendo o desenvolvimento da tecnologia nacional. (DINIZ & COLÓN & SILVA & AGUIAR & SILVA. F & PALÁCIOS, 2009). 2.3.2 Resolução CONAMA Nº 315 Especifica basicamente os prazos e limites de emissões de poluentes que a serem seguidos pelas montadoras. 2.3.3Resolução CONAMA Nº 354 Considera a adoção do programa OBD aos veículos automotores (para veículos leves de passageiros, produzidos ou importados), contribui para a melhoria da qualidade ambiental e possibilita a prevenção da ocorrência de danos severos aos sistemas de controle de emissão. O padrão foi baseado no já existente e implantado OBD-II. A principal tarefa da resolução foi definir os parâmetros a serem medidos e prazo para implantação pelas montadoras (CONAMA, 315). A implementação no Brasil foi definida em duas fases, ao qual o cronograma é o seguinte: OBDBr-1: - A partir de 1º de janeiro de 2007, no mínimo para 40% do total anual de veículos; - A partir de 1º de janeiro de 2008, no mínimo para 70% do total anual de veículos; - A partir de 1º de janeiro de 2009, para a totalidade de veículos; - Sensor Pressão Absoluta ou Fluxo de Ar - Sensor Posição da Borboleta - Sensor de Temperatura de Arrefecimento 23 - Sensor Temperatura de Ar - Sensor Oxigênio (somente o sensor pré-catalisador) - Sensor de Velocidade do Veículo - Sensor de Posição do Eixo Comando de Válvulas - Sensor de Posição do Virabrequim - Sistemas de Re-circulação dos Gases de Escape (EGR) - Sensor para Detecção de Detonação - Válvulas Injetoras - Sistema de Ignição - Módulo Controle Eletrônico do motor - Lâmpada Indicadora de Mau Funcionamento (LIM) - Outros componentes que o fabricante julgue relevantes para a correta avaliação do funcionamento do veículo e controle de emissões de poluentes. OBDBr-2: -À partir de 1º de janeiro de 2010, no mínimo para 60% do total anual de veículos; -À partir de 1º de janeiro de 2011, para a totalidade de veículos; Complementarmente às funções e características do Sistema OBDBr-1, o sistema OBDBr-2 deve detectar e registrar a existência de falhas de combustão, deterioração do(s) sensor(es) de oxigênio primário(s) e eficiência de conversão do catalisador que acarretem aumento de emissões, também apresentar características mínimas para a detecção de falhas nos seguintes componentes: - Sensores de Oxigênio (pré e pós-catalisador) - Válvula de Controle da Purga do Cânister 2.4 Conector padrão OBD II Trata-se do conector padrão mencionado na norma ISO 15031-5:2006, para comunicação entre veículo e equipamento externo para diagnostico de emissões. 2.4.1 Localização A localização em veículos de passeio e em veículos comerciais leves deve atender às seguintes especificações: Local de fácil acesso ao banco do motorista. Próximo ao Painel de Instrumentos. 24 Entre a coluna de direção e a ECU. Distância de 300 mm além da ECU. 2.4.2 Pinagem É composto por 16 pinos, sendo estes descritos na figura 5. Figura 5: Conector OBDII (Fonte: Notas de aula do professor Orlando Salvo Junior, 2010) Observe que, o conector formato `D` - oferece maior facilidade de conexão com uma mão e sem visão. Contatos 2 e 10 – J1850 Bus+ e J1850 Bus Contatos 6 e 14 – CAN High e CAN Low – ISO 15765-4 Contatos 7 e 14 – Linha K e Linha L - ISO 9141-2 e ISSO 14239-4 Contato 4. Massa do chassi – fornecer massa eficiente para equipamento externo. Contato 5. Sinal massa – referência para comunicação. Contato 16 - Positivo permanente: Conector tipo A – 12V (4A) Conector tipo B – 24V (2A) Protegido por fusível ou elemento protetor no circuito. Referência para comunicação da linha K. 25 Contatos 1, 3, 8, 9 11, 12 e 13-Podem ser utilizados pelo fabricante de equipamento, mantendo alta impedância com os contatos 4 e 5. Por exemplo > 500 k Ohms. 2.5 Códigos de falha de diagnóstico A utilização de códigos de falha de diagnóstico padronizados facilita e muito a vida de quem irá realizar a manutenção no veículo. A norma SAE J2012 estabelece um sistema de código alfanumérico com 5 caracteres, cada um dos quais representa um valor específico. O primeiro dígito indica a localização do defeito no veículo. Como se é possível visualizar na tabela 1. Tabela 1: Código de Falha 1º dígito (Fonte: CERQUEIRA & BEZERRA & ZAMBONI & EDSON, 2009) O segundo dígito indica a entidade responsável pela sua definição. Através deste é possível verificar se o código é comum a todos os fabricantes (padrão ISO/SAE) ou específico. Como é possível visualizar na tabela 2. Tabela 2: Código de Falha 2º dígito (Fonte: CERQUEIRA & BEZERRA & ZAMBONI & EDSON, 2009) 26 O terceiro dígito do código de falhas, cujos valores são mostrados na tabela 3, referese a um subgrupo de funções do veículo. E o quarto e o quinto dígito referem-se à falha específica no referido subgrupo. Tabela 3: Código de Falha 3º dígito (Fonte: BELO, 2003) Conforme figura 6 (exemplo) o código de falhas DTC (Diagnostic Trouble Code) é transmitido por dois bytes de informação para cada DTC. Figura 6: Exemplo do código DTC P0143 .(Fonte: ISO 15031-5:2006) Para realizar a identificação da falha, a lista com os DTC`s encontram-se no anexo C. 2.6 Protocolos de Comunicação de Diagnose O protocolo é um conjunto de regras ou convenções formuladas para controlar a troca de dados entre dois dispositivos desejando uma conexão. Incluem como elementos básicos o formato de dados e níveis de sinal, tempo e gerenciamento e coordenação de erros das informações. (GUIMARÃES & FILHO & SILVA. A & CAMPOS & SILVA. C & PALÁCIOS, 2003). O sistema OBD-II apresenta uma arquitetura de rede baseada no modelo OSI (Open Systems Interconnection), que é um modo de se subdividir os sistemas de comunicação em 27 camadas, definido pela norma ISO 7498, contendo conforme figura 7, camadas de aplicação, enlace e física. Figura 7: Arquitetura de rede OBD-II (Fonte: BELO, 2003) Perceba que, conforme Belo (BELO, 2003), a camada de aplicação é responsável pelos serviços de diagnose disponibilizados ao usuário, sendo constituída sob infra-estrutura de serviços de comunicação baseadas em camadas inferiores e possui um único protocolo, definido pela norma SAE J1979. A camada de enlace de dados é responsável pelo reconhecimento das mensagens e detecção de erros durante a comunicação, utilizando-se dos serviços da camada física, que é a camada inferior e trata da transmissão das mensagens através de um meio físico. Para garantir compatibilidade com os protocolos de diagnose primeira geração, as camadas de enlace de dados e a física podem possuir diferentes protocolos: ISO 9141-2, SAE 28 J 1850 PWM, SAE J I850 VPW, ISO 14230-4 (KWP 2000), ISO 15765-4 (CAN) e SAE J1939-73 (CAN). O equipamento para diagnóstico deve determinar automaticamente a interface de comunicação para fornecer serviços OBD e continuar repetindo o teste de protocolo até o usuário interromper. Caso persista, informar ao usuário sobre a impossibilidade de comunicação ou que a informação solicitada não está disponível. Deve suportar um protocolo por veículo, testá-los em qualquer ordem, determinar qual linha de comunicação é a do veículo (K, CAN, BUS) e informar ao usuário que a inicialização está acontecendo. (SALVO JUNIOR, 2010). 2.6.1 Protocolo ISO 9141-2 – A norma mais utilizada Este protocolo estabelece a comunicação através de um barramento serial, é composto por duas linhas de comunicação (denominadas K e L), define o formato das mensagens e procedimentos para a detecção de erros e inicialização da comunicação. (BELO, 2003) - Os módulos eletrônicos devem possuir uma K ou duas (K +L) linhas de comunicação para diagnóstico ou inspeção. - O módulo eletrônico ou o veículo devem providenciar a tensão positiva permanente bem como o terra, para o scanner. - A linha K provê de uma forma digital serial a informação, do modulo eletrônico para o scanner e pode ser utilizada para inicializar uma comunicação serial. (GUIMARÃES, 2007) Figura 8: Barramento de Diagnóstico ISO 9141-2 (Fonte:GUIMARÃES, 2007) A figura 8 representa as linhas K e L de dois módulos eletrônicos conectados juntos, e esse sistema é conhecido como barramento. 2.6.2 Protocolo ISO 14230 (KWP 2000) O protocolo ISO 14230 ou KWP 2000 “Keyword Protocol 2000”, é segundo Belo (BELO, 2003), um conjunto de normas estabelecidas pela ISO, com o objetivo de definir 29 requisitos comuns para a utilização dos sistemas de diagnóstico implementados com o uso de uma linha de comunicação serial. Apresenta tanto serviços de diagnostico, que compõem a camada de aplicação e permitem o acesso a diagnose embarcada, quanto serviços de comunicação que fornece a infra-estrutura necessária para a comunicação com a unidade eletrônica. Conforme Guimarães (GUIMARÂES, 2007), este protocolo permite a compatibilidade com as implementações da ISO 9141-2 existentes, e explora novas opções para proporcionar uma maior flexibilidade e melhorar o desempenho. A figura abaixo apresenta a topologia KWP 2000, aonde a linha K é utilizada para a inicialização e comunicação e a linha L é um opcional, somente para inicialização. Figura 9: Topologia KWP 2000 (Fonte:ISO 14230-2:1999) 2.6.3 Protocolo SAE J1850 O Protocolo estabelece uma rede de comunicação de dados usada para o compartilhamento de informações entre os módulos eletrônicos do automóvel. Através de duas abordagens distintas os sinais digitais são comunicados utilizando-se de um conceito de multiplexação por divisão de tempo: (BELO, 2003) - SAE J1850 PWM – modulação por largura de pulso fixa: 41,6 kbaud, padrão da Ford: o valor de um símbolo é determinado pela duração do pulso. - Pino 2: Bus + - Pino 10:-Bus - Alta tensão de +5 V - Comprimento da mensagem é limitado a 11 bytes, inclusive CRC - Utiliza um esquema de arbitragem, multi-mestre chamado de “Carrier Sense Multiple Access com Non-Destructive da Arbitragem "(CSMA / DND). 30 Descrição do funcionamento: - Bus alterna entre passivas e ativas para cada bit - Alta tensão do barramento é dominante - Dominante símbolos • Bus Active: Longo domina pulsos curtos • Bus Passiva: Curto domina pulsos longos - SAE J1850 VPW – modulação por largura de pulso variável- 10.4/41.6 kbaud, padrão da General Motors: o valor do símbolo é determinado pela largura do pulso e pelo estado do barramento. - Pino 2: Bus + - Bus fica inativo baixo - Alta tensão de +7 V - Ponto de Decisão é +3,5 V - comprimento da mensagem é limitado a 11 bytes, inclusive CRC - Emprega CSMA / NDA -Descrição do funcionamento: - Tempo de bit fixo. - Pulso de curta ou longa iniciando com tempo start bit. - Longo domina curta. 2.6.4 Protocolo ISO 15765 É baseado na norma ISO 14230 – parte 3, conforme Guimarães (GUIMARÂES, 2007), pois esta já continha as informações necessárias para implementar os serviços de diagnóstico. Define o cabeçalho de mensagens, a camada física e o protocolo de fragmentação para permitir a implementação efetiva do CAN Bus em diagnósticos. 2.6.5 Protocolo SAE J1939 Segundo Guimarães (GUIMARÂES, 2007), seu principal propósito é proporcionar arquiteturas padronizadas. É um protocolo de alto nível que define a comunicação entre os módulos. Qualquer unidade de controle eletrônica (ECU), utilizando J1939 tem permissão para transmitir uma mensagem na rede quando a bus está ociosa. Cada mensagem inclui um 31 identificador de 29 bits, que define a prioridade da mensagem de dados, e está contida dentro de uma matriz de dados de 8 bytes que segue o identificador, e verifica qual ECU enviou a mensagem. 2.7 Comunicação serial – USART O nome USART significa Universal Synchronous Asynchronous Receiver Transmitter. Trata-se de um protocolo universal que possui duas formas de trabalho: o sincronizado e o não sincronizado ( síncrono e assíncrono). (SOUZA & LAVINIA,2003). O modo de trabalho utilizado neste projeto foi o não-sincronizado. 2.7.1 Modo Assíncrono Neste modo de trabalho a comunicação utiliza duas vias, e ambas são utilizadas para dados, na qual uma será utilizada para a transmissão (TX) e a outra para a Recepção (RX),desta forma as informações são enviadas e recebidas ao mesmo tempo. Este padrão de comunicação é muito empregado, por exemplo, para implementar o padrão RS-232. (SOUZA & LAVINIA,2003). A sincronização entre os equipamentos que estão realizando a comunicação é realizada pela própria via de dados através da seleção do Baud Rate ou velocidade da comunicação. O Baud Rate define o intervalo de cada bit na comunicação e é indicado em bits por segundo. Em uma comunicação serial RS232C, os dois equipamentos devem estar ajustados para uma mesma velocidade. Desta forma o sincronismo é obtido para transmissão/recepção de cada byte através do Start bit. (SOUZA & LAVINIA,2003) Figura 10 : Tempo de 1 bit (Fonte: SOUZA & LAVINIA,2003) O TX de um lado deve ser conectado no RX do outro, e vice-versa, sempre o TX de um equipamento será saída e o seu RX será sempre entrada. As duas vias de comunicação possuem o seu estado padrão como sendo em nível alto. Quando um lado inicia a sua transmissão, ele insere um nível baixo em seu TX, mantendo por um tempo T BIT, esta borda de descida é interpretada pelo RX do outro equipamento, que inicia a sincronização para o 32 recebimento desse byte. Este pulso em nível baixo é denominado de Start Bit (SOUZA & LAVINIA,2003). Após o Start Bit, TX enviara 8 bits de dados, cada um desses bits possuem o mesmo intervalo de tempo do Start Bit. Rx o interpretar e deixa passar o tempo para depois coletar os 8 bits, cada um dos bit é pego no meio tempo de bit, ou seja, TBIT/2.No fim da transmissão o TX envia um Stop Bit, que nada mais é do que um bit em nível lógico1, para garantir que a linha volte ao seu estado de repouso padrão. (SOUZA & LAVINIA,2003). No total da comunicação serão enviados 10 bits (1 Start Bit + 8 Bit de Dados + 1 Stop Bit). A figura 11 representa o envio do byte 01101001. Figura 11: Exemplo de comunicação USART Assíncrono (Fonte: SOUZA & LAVINIA,2003) 2.8 ELM 327 Quase todos os automóveis produzidos hoje em dia devem, por lei, ter uma interface através da qual, equipamentos de teste podem obter informações de diagnóstico. A transferência de dados nesta interface segue vários padrões, e nenhum deles é diretamente compatível com PCs ou PDAs. O ELM327 é designado para atuar como uma ponte entre estas portas OBD (On board Diagnostics) e as portas padrão RS232. O resultado é um CI (Circuito Integrado) que pode buscar e converter automaticamente a maioria dos protocolos em uso atualmente. O ELM327 requer poucos componentes externos para torná-lo um circuito funcional e é produzido tendo como núcleo um microcontrolador da família 33 PIC18F2x8x da Microchip. A figura 12 apresenta. a pinagem do ELM-327. (Datasheet ELM 327). Figura 12: Pinagem do ELM-327 (Fonte: Datasheet ELM-327) 2.8.1 As aplicações do dispositivo ELM327 - Scanners Automotivos - Kits didáticos - Leitores de DTCs (Diagnostic Trouble Codes – códigos de erros) 2.8.2 Características Principais: - Suporte a 12 protocolos - Baud rate da porta RS232 até 500kbps - Busca automática por um protocolo - Plenamente configurável com comandos AT - Entrada para monitoramento da bateria - Design CMOS de baixo consumo. 34 3.METODOLOGIA Este capítulo mostra a metodologia utilizada para o desenvolvimento da ferramenta de diagnóstico veicular automotivo. 3.1 Requisitos do Produto Primeiramente foram definidos quais seriam os requisitos para o desenvolvimento da ferramenta de diagnóstico automotivo: 1. Utilizar a placa de experiências MCLAB2. 2. O Software deverá ser realizado em linguagem C. 3. Interface com sistemas de diagnose OBD II. 4. Realizar a comunicação com veículos que possuam os protocolos de comunicação ISO 9141-2, SAE J 1850 PWM, SAE J I850 VPW, ISO 14230-4 (KWP 2000), ISO 15765-4 (CAN) e SAE J1939-73 (CAN). 5. Realizar a identificação automática do protocolo de comunicação que é utilizado pelo veículo. 6. Realizar a leitura dos parâmetros de rotação do motor, do avanço da ignição, da temperatura do ar, da pressão no coletor de admissão, da velocidade do veículo e da posição da válvula borboleta. 7. Identificar quantos códigos de falhas o a unidade de controle do motor possui. 8. Mostrar no display de LCD pelo menos dois códigos de falhas. 9. Permitir que o usuário apague as falhas que estão presentes na unidade de controle do motor. 10. Interface com o usuário através de teclas e display de LCD. 3.2 Soluções técnica Com os requisitos definidos o desenvolvimento da ferramenta de diagnóstico automotivo foi divido em dois blocos, um bloco de comunicação e outro bloco de controle. O bloco de comunicação será responsável por atender diretamente aos requisitos 3, 4 e 5, enquanto o bloco de controle será responsável por atender aos demais requisitos. O bloco de controle enviara para o bloco de comunicação as mensagens referentes às requisições feitas pelo usuário utilizando as teclas através de uma comunicação serial RS232 suportada pelos módulos USART (Universal synchronous Asynchronous Receiver35 Transmitter – Receptor-Transmissor Assíncrono Universal) contidos nos dois blocos, o bloco de comunicação recebera estas mensagens e as convertera para o protocolo de comunicação que o veículo utiliza, para assim, fazer a comunicação com a unidade de controle do veículo e obter a resposta para a mensagem de requisição do usuário. Figura 13: Diagrama de blocos da ferramenta de diagnóstico automotivo 3.2.1 Hardware Para a construção do hardware os seguintes componentes foram selecionados: ELM327. Microcontrolador PIC16F877A. (4) Quatro Teclas. Display de LCD 16X2. 3.2.1.1 ELM 327. O ELM 327 é um conhecido Scanner automotivo que é amplamente utilizado em conjunto com uma base PC, o que torna fácil a busca de informações, ele realiza a comunicação com todos os protocolos necessários e identifica automaticamente o protocolo de comunicação que o veículo utiliza, ele possui um hardware e software completo para fazer a comunicação com o veiculo através de um conector OBDII e para fazer a comunicação com uma base PC através de um cabo USB. O intuito do nosso trabalho não esta na parte de comunicação com o veiculo e sim na aquisição e tratamento de dados, por isso, nesta parte do hardware focalizaremos apenas nas partes que utilizamos com esta finalidade. No hardware original do ELM327 há um CI FT232BL da empresa FTDI, que realiza a conversão da comunicação RS-232 disponível nos terminais 17 e 18 do ELM327 para sinais USB. Como o nosso intuito é o de fazer com que o ELM327 passe a se comunicar com um microcontrolador PIC 16F877A, fizemos a alteração no hardware original retirando toda parte de comunicação USB, resultando no hardware da figura 14, no qual mantemos os 36 circuitos de condicionamento de sinais referentes à comunicação de cada protocolo, o circuito regulador de tensão e a disponibilidade dos pinos 17 e 18 para a comunicação com o PIC 16F877A. Figura 14: Esquema do hardware da comunicação com o veículo. (Fonte: DataSheet ELM 327 OBD to RS232 Interpreter). Analisou-se que o CI ELM327 é um PIC18F2480 da família de circuitos lógicos CMOS, igualmente ao nosso microcontrolodador PIC16F877A, sendo necessário somente conectarmos os Pinos Rx e Tx de um microcontrolador, nos pinos Tx e Rx do outro microcontrolador, respectivamente. Para assegurar o correto funcionamento da comunicação é necessário também que os dois microcontroladores compartilhem de uma mesma tensão de alimentação, na qual utilizamos a tensão de 5V fornecida pelo circuito regulador de tensão que possui um CI 78L05, que alimentará o nosso hardware do bloco de controle. 37 3.2.1.2 Microcontrolador PIC16F877A A placa de experiências MCLAB2 possui um microcontrolador PIC16F877A de 40 pinos, que atende aos nossos requisitos, pois possui o módulo interno para a comunicação USART, faz o controle para a escrita do LCD de 16X2 e tem portas suficientes para a conexão das quatro teclas. A figura 15 mostra o circuito básico para o funcionamento do microcontrolador. Os capacitores C1 e C2 estão conectados ao cristal oscilador X1 de modo a formarem um circuito oscilador de 4MHZ que será utilizado pelo microcontrolador para definir a sua velocidade de processamento interno. A alimentação de 5V será fornecida pelo hardware de comunicação. Figura 15: Configuração básica do microcontrolador 3.2.1.3 Teclas e Display de interface. Para a realização do interfaceamento entre o usuário e a placa de controle utilizamos as 4teclas e o display de LCD de 16X2 que estão na placa de experiências McLab2. As teclas se encontram na configuração pull-up (Nível lógico alto), sendo tanto utilizadas para o usuário avançar e recuar nas telas, como para entrar e sair de uma função especifica. O circuito pode ser visto em maiores detalhes na figura 16. Figura 16: Circuito de interface entre usuário e hardware de controle O display de LCD alfanumérico de 2 linhas por 16 segmentos foi utilizado para a leitura e seleção dos parâmetro desejados, pois ele é capaz de mostrar todas as mensagens 38 listadas nos requisitos, tendo a função básica de uma IHM (Interface Homem Máquina). A sua ligação está representada na figura 17( tipo de comunicação paralelo).. Figura 17: Esquema ligação e comunicação com o display de LCD A figura 18 apresenta o esquema geral do hardware que compõem o sistema da ferramenta de diagnóstico automotivo. Figura 18: Esquema geral da ferramenta de diagnóstico automotivo. 39 3.2.2 Software Para a realização do software foi feita uma lista de requisitos, que foi formulada a partir de uma analise feita do processo de comunicação realizada entre um veículo VW Polo, o ELM 327 e um computador (ver figura 19). Analisou-se o processo de comunicação instalando dois softwares em um computador. O primeiro foi o software chamado OBD2SPY (ver figura 20), que está no CD que acompanha o equipamento ELM327, e que tem a função de scanner automotivo e o outro foi o HHD Free Serial Port Monitor para descobrirmos quais são os dados trocados entre o software e o ELM327. O foco desta primeira etapa foi o de interpretar as perguntas e as respostas obtidas pelo software de diagnóstico a cada informação requisitada, para desta forma realizar o nosso software. Após a análise concluí-se que o código da troca de dados utilizada pelo Polo segue um padrão estipulado pela norma SAE J1979, o que facilita o trabalho, uma vez que não é necessário simular diversas condições de trabalho para se obter um código para cada situação. A comunicação com o ELM327 possui duas linhas de comando, a primeira é um conjunto de comandos AT, que são utilizados para a configuração interna do ELM327, por exemplo: reset o chip utiliza-se o comando AT Z , a segunda são os comandos utilizados para se obter as informações do veículo, que no caso do POLO segue o padrão da norma SAEJ1979. Toda vez que se envia um pacote de dados para o ELM327 o último dado deve ser um caracter simples de retorno, que segundo a tabela ASCII é 0x0D(hexadecimal), desta forma ele compreende que a informação chegou ao fim. Após serem enviados os dados para o ELM327 deve se esperar até que este responda com um caractere „>‟(0x3E), que significa que ele está pronto para receber uma nova mensagem. A figura 21 abaixo representa o processo de aquisição dos valores da pressão no coletor de admissão e a rotação do veículo. 40 Figura 19:Esquema de ligação do ELM327. (Fonte http://www.elec-intro.com/obd-ii-tool ) Figura 20: Software OBDSPY 41 Figura 21: Aquisição de dados Software de monitoramento. 3.2.2.1 Requisitos do software Os requisitos para o nosso software são: 1. Realizar a comunicação USART com o bloco de comunicação, para o envio e aquisição de dados. 2. Fazer o controle de escrita do LCD, para apresentar os valores ao usuário. 3. Leitura das teclas de entrada. 4. Identificar as mensagens requisitadas. 5. Tratar os dados recebidos. 3.2.2.2 Design do Software. Através da norma J1979 obteve-se qual é a mensagem que deve ser enviada para o veículo e qual é a resposta que deve ser esperada para se adquirir a informação desejada, a tabela 4 apresenta o parâmetro de leitura associado a sua respectiva mensagem. Tabela 4: Parâmetros de leitura Parâmetro de Leitura Mensagem de Resposta Esperada Aquisição Pressão no Coletor de Admissão 01 0B 41 0B 00 Rotação do Motor 01 0C 41 0C 00 00 Velocidade do Veículo 01 0D 41 0D 00 Avanço da Ignição 01 0E 41 0E 00 Temperatura do Ar 01 0F 41 0F 00 42 Posição da Válvula Borboleta 01 11 41 11 00 (fonte: SAE J1979) Observa-se que os dois primeiros caracteres das mensagens de aquisição „0‟ e „1‟, são respondidos por „4‟ e „1‟ seguidos por mais 2 caracteres que correspondem ao parâmetro de leitura desejado, estes quatro primeiros caracteres servem para requisitar a mensagem e para verificar se a mensagem que está chegando é a correta, os caracteres subseqüentes dos quatro primeiros representam o valor real do parâmetro de leitura desejado, mas para cada parâmetro é necessário um tratamento diferente. No software utilizamos a função printf( ) (utilizada para possibilitar a saída de dados na linguagem C, onde os dados são direcionados para o dispositivo padrão de saida, que no caso do microcontrolador PIC é a porta serial) para o envio das mensagens e a função getc() (utilizada para a entrada de dados, através da porta serial, esta função aguarda a chegada de uma caractere através da porta serial), para a armazená-las em uma matriz, toda vez que uma mensagem é recebida pelo microcontrolador ela é armazenada nesta matriz e logo em seguida é realizada uma função para o tratamento destes dados que alocara as informações pertinentes para as suas respectivas variáveis. A função Envia( ) foi construída com o intuito de tornar mais fácil o processo de programação, como todas as mensagens enviadas possuem no máximo 5 caracteres, contando com o caractere de retorno, esta função contém 5 entradas (a,b,c,d,e) para inserir a mensagem que será enviada 1entrada(f) que indica o tamanho da mensagem. A função pode ser vista na figura 21. Figura 22: Função Envia A função RecebeMask() foi construído para receber a mensagem e armazená-la na matriz RecebeDados1[], ela não armazena o caractere espaço(0x20), possui 4 entradas, para 43 ser inserida os valores esperados dos 4 primeiros caracteres de retorno, que representam a máscara da mensagem e fica esperando o caractere „>‟ para sair da função. A função pode ser vista na figura 22. Figura 23: Função RecebeMask. Quando um dado de uma resposta precisa ser tratado ele passa pela função ASCII( ); Esta função converte um valor inicial em um valor diferente daquele representado na tabela ASCII( ). A figura abaixo apresenta esta função. 44 Figura 24: Função Ascii 3.2.2.2.1 Design de Alto Nível Figura 25: Design de Software de Alto Nível 45 3.2.2.2.1 Design detalhado 3.2.2.2.1.1 Inicialização. Nesta parte é enviada ao ELM327 mensagens para a sua configuração interna e uma solicitação para ver quantos códigos de erro a ECU possui atualmente. No display é mostrado as frases INICIALIZANDO e CARSCANNER V2. 0. As mensagens enviadas e as respostas obtidas conforme tabela 5 são: Tabela 5: Inicialização Mensagem Resposta ATZ . ATZ...ELM327 V1.5..> 01 01 41 01 00 06 61 60 ..> Na mensagem de resposta da solicitação 01 01 o 6° caractere identifica quantos DTC a ECU possui. Figura 26: Função Falha A função falha() armazena o 6° caractere da mensagem recebida na variável QTD. 3.2.2.2.1.1 Parâmetros de leitura. Nesta fase é enviada para ECU mensagens de requisição das mensagens que contém os valores dos parâmetros de leitura, a tabela 6 apresenta as mensagens enviadas e lidas pelo microcontrolador durante um teste. Tabela 6: Exemplo de Mensagens enviadas e recebidas Mensagem Resposta 010B 41 0B 5B ..> 010C 41 0C 1A F8 ..> 010D 41 0D 45 ..> 010E 41 0E B3 ..> 46 010F 41 0F 55 ..> 0111 41 11 43.. > Na mensagem de resposta da solicitação 01 0B os caracteres 5 e B representam o valor da pressão no coletor de admissão. Como esses dois caracteres são armazenadas em posições diferentes da matriz RecebeDados1[], deve-se unir os dois caracteres em uma mesma variável, para isso pega-se o primeiro caractere, no caso 5, passa-se este pela função ASCII(),o aloca em uma variável Dadoa, e o desloca para a esquerda em 4 posições, pega-se o segundo caractere, passa ele pela função ASCII(),o aloca em uma outra variável Dadob e realiza a operação lógica OU entre as duas variáveis e aloca esse novo dado em uma variável Kp, este valor representa a pressão no coletor de admissão do veículo segundo a norma SAE J1979(pág.13), ou seja, 5B equivale a 91Kpa. A figura 27 mostra as linhas de código do programa. Figura 27: Tratamento do dado da pressão do coletor de admissão Na mensagem de resposta da solicitação 01 0C os caracteres 1,A,F e B representam o valor da Rotação do Motor. Como esses quatro caracteres são armazenadas em posições diferentes da matriz RecebeDados1[], deve-se unir os quatro caracteres em uma mesma variável, para isso pega-se o primeiro caractere, no caso 1, passa ele pela função ASCII(),o aloca em uma variável Dadoa, e o desloca para a esquerda em 4 posições, pega-se o segundo caractere, o passa pela função ASCII(),o aloca em uma outra variável Dadob e realiza-se a operação lógica OU entre as duas variáveis e aloca esse novo dado em uma variável denominada Dadoc, pega-se o terceiro caractere, no caso F, passa ele pela função ASCII(),o aloca em uma variável Dadoa, o desloca para a esquerda em 4 posições, pega-se o quarto caractere, o passamos ele pela função ASCII(),o aloca em uma outra variável Dadob e realizase a operação lógica OU entre as duas variáveis e o aloca esse novo dado em uma variável denominada Dadod, pega-se o Dadoc o desloca para a esquerda em 8 posições e realiza-se a operação lógica OU entre ele e o Dadod o resultado é alocado na variável RPM. O resultado da rotação do motor é segundo a norma SAE J1979(pág.13) o valor da variável RPM/4, ou seja, 1AF8 equivale a 1726RPM. A figura 28 apresenta as linhas de código. 47 Figura 28: Tratamento de dados da rotação Na mensagem de resposta da solicitação 01 0D os caracteres 4 e 5 representam o valor da velocidade no veículo. Como esses dois caracteres são armazenadas em posições diferentes da matriz RecebeDados1[], deve-se unir os dois caracteres em uma mesma variável, o processo é o mesmo utilizado na requisição para a obtenção do valor da pressão no coletor de admissão, mudando apenas a variável final que ao invés de ser Kp é a variável Km que representa a velocidade do veículo segundo a norma SAE J1979(pág.13), ou seja, 45 equivale a 69km/h. A figura 29 apresenta as linhas de código do programa. Figura 29: Tratamento de dados de velocidade Na mensagem de resposta da solicitação 01 0E os caracteres B e 3 representam o valor do avanço da ignição. Como esses dois caracteres são armazenadas em posições diferentes da matriz RecebeDados1[], deve-se unir os dois caracteres em uma mesma variável, o processo é o mesmo utilizado na requisição para a obtenção do valor da pressão no coletor de admissão, mudando apenas a variável final que ao invés de ser Kp é a variável Ign, o valor que representa o avanço de ignição do motor segundo a norma SAE J1979(pág.13) é (Ign/2) – 64 , ou seja, B3 equivale a 25°. A figura 30 mostra as linhas de código do programa. 48 Figura 30: Tratamento de dados do Avanço da Ignição Na mensagem de resposta da solicitação 01 0F os caracteres 5 e 5 representam o valor da temperatura do ar do coletor de admissão. Como esses dois caracteres são armazenadas em posições diferentes da matriz RecebeDados1[], deve-se unir os dois caracteres em uma mesma variável, o processo é o mesmo utilizado na requisição para a obtenção do valor da pressão no coletor de admissão, mudando apenas a variável final que ao invés de ser Kp é a variável TpAr, o valor que representa a temperatura do ar do coletor de admissão segundo a norma SAE J1979(pág.13) é TpAr –40 , ou seja, 55 equivale a 45°. A figura 31 mostra as linhas de código do programa. Figura 31: Tratamento de dados da TpAr Na mensagem de resposta da solicitação 01 11 os caracteres 4 e 3representam o valor da posição da válvula borboleta . Como esses dois caracteres são armazenadas em posições diferentes da matriz RecebeDados1[], deve-se unir os dois caracteres em uma mesma variável, o processo é o mesmo utilizado na requisição para a obtenção do valor da pressão no coletor de admissão, mudando apenas a variável final que ao invés de ser Kp é a variável Ped, o valor que representa a posição da válvula borboleta segundo a norma SAE J1979(pág.13) é (Pedx100)/255 ), ou seja, 43 equivale a 26%. A figura 32 mostra as linhas de código do programa. Figura 32: Tratamento de dados da posição da válvula borboleta 49 3.2.2.2.1.3 Códigos de falha DTC. Nesta parte é enviada para ECU a mensagens de requisição dos códigos de erro, a tabela 7 apresenta a mensagem enviada e a lida pelo microcontrolador durante um teste. Tabela 7: Exemplo de Requisição de códigos de falha Mensagem Resposta 03 43 02 01 01 13 0000..> Na mensagem de resposta da solicitação 03, cada intervalo de 4 caracteres representa um código de falha, assim os caracteres 0201 e 0113 representam 2 códigos de falhas, o primeiro caractere ira indicar o grupo de sistema e a posição 0 dos dígitos de controle(ver Tabela 2, Pg.24), onde é necessário identificá-lo, não é necessário fazer nenhum tratamento com os caracteres subseqüentes somente escrevê-los diretamente na tela do display. A figura 31 mostra o tratamento desta informação, a função ComandoLCD ( int a) a ponta para uma posição do display e a função EscritaLCD() escreve um determinado caractere naquela posição. No caso acima os caracteres 0201 correspondem ao DTC P0201 e os caracteres 0113 correspondem ao DTC P0113. Figura 33: Tratamento dos dados do DTC 50 3.2.2.2.14 Apagar DTC Nesta fase é enviada para ECU as mensagens para apagar a memória dos códigos de falhas da ECU. Tabela 8: Requisição para apagar memória Mensagem Resposta 04 44..> Na mensagem de resposta da solicitação 04, a resposta da unidade é somente 44 que confirma que a unidade foi apagada, desta forma, após o envio da mensagem espera-se que esta seja confirmada com o retorno dos caracteres 44.Caso isso aconteça, será escrito no LCD a palavra OK e caso não aconteça a palavra NO . A figura.32.apresenta as linhas de código que desempenham essa função. Figura 34:Função apagar código de falha 51 4. ANÁLISE DOS RESULTADOS Para a analise dos resultados testou-se todas as funções da ferramenta de diagnóstico automotivo no veiculo VW Polo, este veículo já possuía um código de falha conhecido o P0201, que indica falha de mau funcionamento no circuito da válvula injetora do cilindro 1. O objetivo para a realização dos testes é identificar a funcionalidade e as limitações do equipamento. As seguintes funções foram testadas: -Leitura dos parâmetros; rotação do motor, avanço de ignição, pressão no coletor de admissão, temperatura do ar, velocidade do veiculo e posição da válvula borboleta. -Identificação de quantos códigos de falhas o veículo possui. -Identificação de dois códigos de falhas. -Apagar a memória dos códigos de falhas da unidade eletrônica do veículo. 4.1 Simulação. Para comprovar que a ferramenta de diagnóstico automotivo estava funcionando como o pretendido, antes de testá-la no veículo VW Polo, foram simuladas as respostas esperadas através do Siow (Serial Monitor Input/Output Windows), que é um software instalado no PC para o envio e recebimento de dados através da porta serial, no qual este simulava o veículo. Elaborou-se uma tabela com respostas baseadas em cada mensagem enviada pela ferramenta de diagnóstico automotivo e quais eram os valores que esperavam ser visualizados no display. Tabela 9: Simulação da Ferramenta de Diagnóstico Automotivo Ferramenta de Diagnóstico Siow (Simulação) Mensagem Resposta 0101. 41 01 02 00 00 00 ..> 2 DTC 010B. 41 01 5B ..> 91 [KPa] 010C. 41 01 02 1A F8 ..> 1726 [RPM[ 010D. 41 01 5F ..> 95 [Km/h] 010E. 41 01 A0 00 00 00 ..> 16[°] 010F. 41 0F 55 ..> 45 [C°] 0111. 41 01 AE ..> 68[%] 03. 43 01 00 00 22 00 00 ..> P0100 e P0022 Valor esperado no display 52 04. 44 ..> OK Com a tabela pronta iniciou-se a simulação seguindo as etapas: 1. Conectar a placa de experiência McLab2 com um computador para a realização da comunicação serial RS232. 2. Abrir o Software Siow e o configurar para realizar a comunicação serial a 9600 bits por segundo. 3. Ligar a placa de experiências e começar a receber as mensagens. 4. Para cada mensagem recebida utilizar como resposta os valores da tabela 9. 5. Comparar os resultados. Durante está simulação todos os valores esperados foram obtidos com sucesso mostrando que a ferramenta de diagnóstico cumpre quase todos os requisitos, pois com a simulação não é possível testar a função de apagar a memória de códigos de falhas da unidade de controle do motor. 4.2 Testes no Veículo Após a simulação fez se um novo teste das funções da ferramenta de diagnóstico automotivo diretamente no veículo. Através do conector OBDII do veículo conectamos a ferramenta de diagnóstico automotivo e começamos o teste. Seguimos as seguintes etapas: 1. Conectar a ferramenta de diagnóstico automotivo no veículo através do conector OBDII. 2. Ligar a ignição do veículo e dar a partida no motor. 3. Ligar a ferramenta de diagnóstico automotivo. 4. Iniciar a sessão de leitura de parâmetros. 5. Acelerar o veículo de forma que altere a rotação do motor e verificar os seguintes parâmetros: Comparar a rotação do motor visualizada no display com a rotação do motor mostrada no tacômetro do painel de instrumentos do veículo; 53 Observar se ao apertar o acelerador do veículo até o seu fim o valor da posição da válvula borboleta visualizada no display mostra 100%; Observar que conforme a rotação aumenta ocorrem alterações no valor do avanço da ignição visualizado no display; Observar que conforme a rotação aumenta a pressão no coletor de admissão diminui; Observar alterações no valor da temperatura do ar; 6. Encerrar a leitura de parâmetros; 7. Iniciar a sessão de códigos de falhas; 8. Ver quantos códigos de falhas a unidade de controle possui, neste caso é para ela indicar que o veículo possui pelo menos um erro pois sabe-se que o veículo está com mau funcionamento no circuito da válvula injetora do cilindro 1; 9. Ver os códigos de falha, como dito anteriormente nesta etapa deve ser visualizado pelo menos o código de falha P0201. 10. Apagar os códigos de falha da unidade eletrônica do veículo. 11. Desligar o veículo. 12. Desligar a ferramenta de diagnóstico automotivo 13. Ligar o veículo. 14. Ligar a ferramenta de diagnóstico automotivo 15. Iniciar a sessão de códigos de falhas, nesta etapa o veículo deve apresentar zero códigos de falhas, pois a memória de códigos de falhas da unidade de controle do motor foi apagada anteriormente. 16. Desligar o veículo 17. Desligar a ferramenta de diagnóstico 18. Encerrar testes. 4.3 Resultados De maneira geral todos os valores visualizados nos parâmetros de leitura encontram-se com valores típicos, dentro do normal, os únicos dois parâmetros que se podem comprovar por meio visual que estão certos são os valores da rotação do motor e da posição da válvula borboleta, porém como as informações dos parâmetros de leituras que são vistas no display são as mesmas que a unidade de controle possui, já que é ela que envia estas informações para 54 a ferramenta de diagnóstico automotiva e como através da simulação comprovamos que o software está funcionando corretamente, todas as informações visualizadas no display estão corretas. A visualização da quantidade de códigos de falhas, a visualização dos códigos de falhas e o processo de apagar os códigos de falhas funcionaram todos como o pretendido. O funcionamento da ferramenta de diagnóstico na sessão de parâmetros de leituras apresentou certa lentidão na atualização dos valores, devido à seleção da velocidade de transmissão baixa de 9600 bits por segundo. Pode se apenas visualizar 2 códigos de falhas. Após apagar a memória do código de falhas da unidade eletrônica é necessário desligar o veículo e a ferramenta de diagnóstico automotivo e religá-los para que a ferramenta faça a leitura da quantidade de códigos de falhas, pois ela só faz isso quando ela esta inicializando, o ideal seria que não fosse preciso realizar este processo para atualizar a informação da quantidade de códigos de falhas que a unidade de controle do motor possui. Houve a tentativa de utilizar a ferramenta de diagnóstico automotivo em um veículo da fabricante FORD, um Fiesta 2008, a tentativa não houve êxito, pois o veículo não utiliza somente a norma SAEJ1979 na camada de aplicação, ele utiliza a norma SAE J2190 em conjunto com a norma SAE J1979. 4.3 Sessão de Diagnóstico As Figuras listadas abaixo apresentam as interfaces do usuário da ferramenta de diagnóstico automotivo, durante a execução de uma sessão de diagnósticos. Figura 35: Tela Inicial A figura 35 mostra a interface da tela inicial, onde o programa encontra-se em fase de inicialização. 55 Figura 36 : Tela Principal A figura 36 mostra a interface da tela principal, após inicialização, onde encontram-se dispostos as funções do processo de diagnose: - Parâmetros - DTC Para realizar a escolha do próximo passo, o usuário deve pressionar o: - Botão S1 – RECUA CURSOR - Botão S2 – ENTRA NA FUNÇÃO ESPECÍFICA - Botão S3 – SAI DA FUNÇÃO ESPECÍFICA - Botão S4 – AVANÇA CURSOR 4.3.1 Parâmetros de Leitura Estas telas (figuras 37 e 38), disponibilizarão para o usuário 6 parâmetros de leitura diferentes, sendo eles a rotação do motor, o avanço da ignição, a temperatura do ar, a pressão no coletor de admissão, a velocidade do veículo e a posição da válvula borboleta. Figura 37 : Parâmetros DTC1 Figura 38 : Parâmetros DTC2 4.3.2 Leitura dos DTC`s Esta tela irá disponibilizar para o usuário a leitura dos códigos de falha. 56 Esta tela (figura 39), por exemplo, informa que o veículo não possui códigos de falha. Figura 39: Número de DTC`s Esta tela (figura 40), por exemplo, informa ao usuário que o veículo possui 2 códigos de falha. Figura 40: Número DTC`s Esta tela (figura 41) informa ao usuário a identificação do código de falha. Figura 41: Identificação DTC`s Esta tela (figura 42) apaga os códigos de falha. Figura 42: Apagar DTC`s 57 5. CONCLUSÃO Todo o processo, desde a pesquisa inicial até o termino, foi muito instrutivo e além de consolidar pontos da tecnologia aprendidos na FATEC, permitiu visualizar como é organizado um projeto, seu desenvolvimento e nesse caso como se trabalha em grupo para atingir um objetivo comum. Pode-se dizer que, como é seu objetivo, o projeto de formatura mostra a consolidação dos integrantes desse grupo como tecnólogos, capazes de, partindo de uma idéia, traçarem uma projeto e, organizadamente, chegarem a uma conclusão satisfatória, nesse caso um projeto funcional. De maneira geral todas as características que motivaram o projeto e que foram citadas nos objetivos desta monografia foram alcançadas com sucesso. Tanto a leitura das mensagens de falhas quanto o monitoramento dos parâmetros do veículo durante o seu funcionamento foram realizados de maneira extremamente satisfatória. 5.1 Propostas Futuras Neste projeto foram realizadas as leituras dos parâmetros de rotação do motor, de avanço da ignição, da temperatura do ar, da pressão no coletor de admissão, da velocidade do veículo e da posição da válvula borboleta, além da leitura dos códigos de falhas (limitado a 3 falhas por vez). Deixam-se como propostas futuras, o aprimoramento do software para leitura de um maior número de parâmetros, a ampliação das quantidades de falhas a serem lidas, a migração do software para uma base PC (como por exemplo, LabView), devido a limitação do hardware, a utilização de um módulo XBee para comunicação sem fio e a adaptação de um cartão de memória SD para o armazenamento de dados para a futuras análises. 58 6. REFERÊNCIAS ANDREATINI, Sergio M.;A Diagnose Auxiliando o Motorista; São Paulo; 2003. BELO, Valdeci Pereira; Sistema para Diagnóstico Automático de Falhas em Veículos Automotores OBD-2, Dissertação, UFMG, Belo Horizonte, 2003. CERQUEIRA, Ademar Dutra; BEZERRA, Fernando Venezian; ZAMBONI, Guilherme; EDSON, Thomas; Sistema de Diagnose para Veículos que utiliza os protocolos ISO 91412 e ISO 14230-4 através de uma plataforma em Labview; Santo André; 2009. Curso de Eletrônica Automotiva da Fatec Santo André; 2010. Datasheet: ELM327 DSD; “ELM327 OBD to RS232 interpreter”; disponível em: http://www.elmelctronics.com/elm327.pdf. Acesso em 15 out. 2010, 09h35m45. Datasheet: FT232BL; “FT232BL/BQ USB UART IC Datasheet Version 2.1”; disponível em: www.ftdichip.com/Documents/datasheets.htm. Acesso em 10 fev. 2011, 15h09m24. DINIZ, Ivando; COLÓN, Diogo; SILVA, Bruno, AGUIAR, Felipe, Cássio; SILVA, Cirilo; PALÁCIOS Silvio; Scanner Automotivo Wireless; Brasil; 2009. GUIMARÃES, Alexandre de Almeida; Definição dos Principais Conceitos de Diagnose, CAN e Tipos de Diagnose Conceituação BÁSICA; São Paulo; 2003. GUIMARÃES, Alexandre de Almeida; Eletrônica Embarcada Automotiva, 1 edição, Brasil, Editora Érica, 2007. GUIMARÃES, Alexandre de Almeida; Eletrônica Embarcada Automotiva, 1 edição, Brasil, Editora Érica, 2007. GUIMARÃES, Alexandre; FILHO, Ângelo; Silva, SILVA, Carlos, CAMPOS, Cássio; SILVA, Cirilo; PALÁCIOS Silvio; Diagnose Veicular – Principais Padrões e Normas disponiveis; São Paulo; 2003. 59 HODEL, Kleber Nogueira; Notas de Aula da Disciplina de Redes de Comunicação Veicular Ministrada ao Curso de Eletrônica Automotiva da Fatec Santo André; 2009. International Organization for Standardization, ISO 15031-5:2006 Road vehicles Communication between vehicle and external equipment for emissions-related diagnostics -Part 5: Emissions-related diagnostic services. ISO, 2006. International Organization for Standardization. ISO 14230-2 Keyword protocol 2000 Part 2: Data link layer. ISO, 1996. International Organization for Standardization. ISO 14230-3 - Road Vehicles – Diagnostic systems - Keyword Protocol 2000 - Draft Part 3: Implementation. ISO, 1996. International Organization for Standardization. ISO 14230-4 - Road Vehicles – Diagnostic systems - Keyword Protocol 2000 - Part 4: Requirements For Emission related Systems. ISO, 1997. International Organization for Standardization. ISO 7498 - Open Systems Interconnection. ISO. International Organization for Standardization. ISO 9141-2 - Road vehicles – Diagnostic systems - CARB requirements for interchange of digital information. ISO, 1994.Society of Automotive Engineers. SAE J1850 - Class B Data Communication Network Interface. SAE. International Organization for Standardization. ISO/DIS 14230-1 - Road Vehicles Diagnostic systems - Keyword Protocol 2000 - Part 1: Physical Layer. ISO, 1995. JUNIOR, Orlando Salvo; Notas de Aula da Disciplina de Diagnose Veicular Ministrada ao Microchip; Introduction to MPLAB IDE Web Seminar, MPLAB Integrated Development Environment (IDE), 2010 Resolução CONAMA n° 315, de 29 de outubro de 2002 – CONAMA (Conselho Nacional do Meio Ambiente) Resolução CONAMA n° 354, de 13 de dezembro de 2004 – CONAMA (Conselho Nacional do Meio Ambiente) 60 Society of Automotive Engineers. SAE J1939 - OBD Communications Compliance Test Cases for Heavy Duty Components and Vehicles. SAE, 2009 . Society of Automotive Engineers. SAE J1979 - E/E Diagnostic Test Modes. SAE, 1998. Society of Automotive Engineers. SAE J2012 - Recommended Format and Messages for Diagnostic Trouble Codes. SAE. SOUZA, David Jose & LAVINIA; Nicolás Cesar; Conectando o PIC: Recursos Avançados; Editora Érica, Brasil, 2003. TOSI, Enzo Lorenzon; GALVÃO, Erick Bruno Santos; LIMA, Pedro Camargo; Desenvolvimento de um Datalogger para aplicações Automotivas, Dissertação, USP, São Paulo, 2008. 61 ANEXO ANEXO A – Código do Programa. ANEXO B – Datasheet ELM 327 – Comando AT. ANEXO C – Lista com os DTC`s. 62 ANEXO A – Código do Programa. . //////////////////////////////////////////////////////////////////////////////// // TCC - Trabalho de Conclusão do Curso // //////////////////////////////////////////////////////////////////////////////// /* Nome do projeto/Modulo: CarScanner LT v2.0 */ /* HARDWARE : PIC16f877 */ /* COMP */ : PCW C Compiler /* AMBIENTE : MPLAB IDE V8.20 */ /* AUTORES : LUIZ RICARDO TRAJANO DA SILVA */ /* : TIAGO SANTOS DE ARAÚJO */ /* SEMESTRE : 6° */ /* DATA */ : 17/08/2010 /* REVISÕES : TRABALHO FINAL */ /* Data */ : 09/12/2010 //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // # Diretivas // //////////////////////////////////////////////////////////////////////////////// #include "16f877a.h" // Definições do Microcontrolador #include "stdio.h" // Habilita I/O #fuses XT, NOPROTECT, NOWDT, NOLVP #use delay (clock=4000000) #use rs232 (baud = 9600, xmit = // Frequencia do Operação pin_c6, rcv = pin_c7) // RS-232 //////////////////////////////////////////////////////////////////////////////// // Variaveis Globais // //////////////////////////////////////////////////////////////////////////////// //Proposito: DECLARAR E INICILIAZAR AS VARIAVEIS DO PROGRAMA // //////////////////////////////////////////////////////////////////////////////// short int Flag1 = 0, Flag2=0, Flag3=0, Flag4=0, Flag5=0, Flag0=0, x=0, Trava=0; signed int EstadoA=0; 63 int RecebeDados1[16], Dadoa=0, Dadob=0, Enter=0, Rp, QTD, DTC1, EstadoB =0; char EnviaMensagem[5], String1[13] = {'I','N','I','C','I','A','L','I','Z','A','N','D','O'}, String2[10] String3[3] = {'P','A','R','A','M','E','T','R','O','S'}, = {'D','T','C'}, String4[15] = {'C','A','R','S','C','A','N','N','E','R',' ','V','2','.','0'}, String5[14] = {'V','E','I','C','U','L','O',' ','P','O','S','S','U','I'}, a=0, c=0, i=0, d=0; long int At=0, Dadoc=0, Dadod=0, Rpm=0, TpAr=0, Ign=0, Kp=0, Km=0, Ped = 0, DTCQ, Debouncing = 0, Debouncing1 = 0, Debouncing2 = 0, Debouncing3 = 0; //////////////////////////////////////////////////////////////////////////////// // Prototipagem de Funções // //////////////////////////////////////////////////////////////////////////////// /* Proposito: DECLARAÇÃO DAS FUNÇÕES */ //////////////////////////////////////////////////////////////////////////////// void Interrupcao(void); void InitHw(void); void InitVetores(void); void Envia(char a, char b, char c, char d, char e, int f); void Ascii(int a); void Rotacao(void); void RotacaoLcd(void); void Temperatura(void); void TemperaturaLcd(void); 64 void Ignicao(void); void IgnicaoLcd(void); void Pressao(void); void PressaoLcd(void); void Velocidade(void); void VelocidadeLCD(void); void Borboleta(void); void BorboletaLCD(void); void Controle(void); void RecebeMask(char u, char w, char y, char z); void Tela1(void); void TelaP1(void); void TelaP2(void); void TelaP3(void); void TelaD1(void); void TelaD2(void); void TelaD3(void); void main(void); void codigo1(void); void codigo2(void); void codigo3(void); void main(void); //////////////////////////////////////////////////////////////////////////////// // Interrupção do Timer 0 // //////////////////////////////////////////////////////////////////////////////// /* Proposito: TRATAMENTO DA INTERRUPÇÃO DO TIMER 0 */ //////////////////////////////////////////////////////////////////////////////// #int_timer0 void Interrupcao(void) { set_timer0(131+get_timer0()); if(Debouncing>0) { Debouncing--; // Decremento do Debouncing Botão S1. } if(Debouncing1>0) { Debouncing1--; // Decremento do Debouncing Botão S4. } if(Debouncing2>0) { Debouncing2--; // Decremento do Debouncing Botão S2. } if(Debouncing3>0) 65 { Debouncing3--; // Decremento do Debouncing Botão S3. } } //////////////////////////////////////////////////////////////////////////////// /* NOME : INICIALIZAÇÃO DO HARDWARE */ //////////////////////////////////////////////////////////////////////////////// void InitHw(void) { enable_interrupts(global); // Habilita Interrupção Externa. enable_interrupts(int_timer0); setup_ccp2 (CCP_PWM); // Seleciona RC1 como Saída com PWM. setup_ccp1 (CCP_PWM); // Seleciona RC2 como Saída com PWM. setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8); // Utilizado para gerar. set_tris_c(0xd1); set_timer0(131); // Set o timer 0 (131) } //////////////////////////////////////////////////////////////////////////////// /* NOME : INICIALIZAÇÃO DOS VETORES */ //////////////////////////////////////////////////////////////////////////////// void InitVetores(void) { for(i=0;i<5;i++) { EnviaMensagem[i]=0; } for(i=0;i<16;i++) { RecebeDados1[i]=0; } } //////////////////////////////////////////////////////////////////////////////// // Função Comando // //////////////////////////////////////////////////////////////////////////////// void comando() 66 { output_low(pin_e1); output_low(pin_e0); output_high(pin_e1); delay_us(30); output_low (pin_e1); } //////////////////////////////////////////////////////////////////////////////// // Função Escrita // //////////////////////////////////////////////////////////////////////////////// void escrita() { output_high(pin_e0); output_low(pin_e1); output_high(pin_e1); delay_us(30); output_low(pin_e1); delay_us(30); } //////////////////////////////////////////////////////////////////////////////// /* NOME : /* PROPOSITO : FUNÇÃO LCD */ ESCRITA - COMANDO - LIMPA */ //////////////////////////////////////////////////////////////////////////////// void EscritaLCD(int a) { output_d(a); escrita(); delay_us(40); } void ComandoLCD(int a) { output_d(a); comando(); delay_us(40); } void LimpaLcd(void) { output_d(0X01); 67 comando(); delay_ms(5); } //////////////////////////////////////////////////////////////////////////////// // Preparação // //////////////////////////////////////////////////////////////////////////////// void Preparacao() { delay_ms(15); // Aguarda 15 ms. output_d(0X30); // Envia o comando para do Display. comando(); delay_ms(4); // Aguarda 4 ms. output_d(0X30); // Envia o comando novamente para o Display. comando(); delay_us(100); output_d(0X30); // Envia o comando novamente para o Display. comando(); delay_us(40); output_d(0X38); // Envia o comando novamente para o Display. comando(); delay_us(40); output_d(0X01); // Envia o comando novamente para o Display. comando(); delay_us(1800); output_d(0X0C); // Envia o comando novamente para o Display. comando(); delay_us(40); output_d(0X06); // Envia o comando novamente para o Display. comando(); delay_us(40); } //////////////////////////////////////////////////////////////////////////////// // # ENVIA // //////////////////////////////////////////////////////////////////////////////// void Envia(char a, char b, char c, char d, char e, int f) { InitVetores(); EnviaMensagem[0] = a ; EnviaMensagem[1] = b ; EnviaMensagem[2] = c ; EnviaMensagem[3] = d ; EnviaMensagem[4] = e ; for(i=0;i<f;i++) { printf("%c", EnviaMensagem[i]); 68 } } //////////////////////////////////////////////////////////////////////////////// // # ASCII // //////////////////////////////////////////////////////////////////////////////// void Ascii(int a) { switch (a) { case 0x30 : Rp = 0;break; case 0x31 : Rp = 1;break; case 0x32 : Rp = 2;break; case 0x33 : Rp = 3;break; case 0x34 : Rp = 4;break; case 0x35 : Rp = 5;break; case 0x36 : Rp = 6;break; case 0x37 : Rp = 7;break; case 0x38 : Rp = 8;break; case 0x39 : Rp = 9;break; case 0x41 : Rp = 10;break; case 0x42 : Rp = 11;break; case 0x43 : Rp = 12;break; case 0x44 : Rp = 13;break; case 0x45 : Rp = 14;break; case 0x46 : Rp = 15;break; } } //////////////////////////////////////////////////////////////////////////////// // # ROTAÇÃO // //////////////////////////////////////////////////////////////////////////////// void Rotacao(void) { Envia('0', '1', '0','C','\r',5); RecebeMask(0x04,0x01,0x00,0x0C); Ascii(RecebeDados1[4]); Dadoa = Rp; Ascii(RecebeDados1[5]); Dadob = Rp; 69 Dadoa = Dadoa << 4; Dadoc = Dadoa | Dadob; Ascii(RecebeDados1[6]); Dadoa = Rp; Ascii(RecebeDados1[7]); Dadob = Rp; Dadoa = Dadoa << 4; Dadod = Dadoa | Dadob; Dadoc =Dadoc << 8; Rpm = Dadoc | Dadod; Rpm = (Rpm/4); } void RotacaoLcd(void) { int Mil, Cent, Dez, Uni; Mil = Rpm/1000; Cent = (Rpm%1000)/100; Dez = ((Rpm%1000)%100)/10; Uni = ((Rpm%1000)%100)%10; EscritaLCD(0x30 + Mil); EscritaLCD(0x30 + Cent); EscritaLCD(0x30 + Dez); EscritaLCD(0x30 + Uni); } void Temperatura(void) { Envia('0', '1', '0','F','\r',5); RecebeMask(0x34,0x31,0x30,0x46); Ascii(RecebeDados1[4]); Dadoa = Rp; Ascii(RecebeDados1[5]); Dadob = Rp; Dadoa = Dadoa << 4; TpAr = Dadoa | Dadob; TpAr = TpAr - 40; } 70 void TemperaturaLcd(void) { int Cent, Dez, Uni; Dez = (TpAr%100)/10; Uni = (TpAr%100)%10; EscritaLCD(0x30 + Dez); EscritaLCD(0x30 + Uni); EscritaLCD('C'); } void Ignicao(void) { Envia('0', '1', '0','E','\r',5); RecebeMask(0x36,0x32,0x30,0x30); Ascii(RecebeDados1[4]); Dadoa = Rp; Ascii(RecebeDados1[5]); Dadob = Rp; Dadoa = Dadoa << 4; Ign = Dadoa | Dadob; Ign = (Ign/2)-64; } void IgnicaoLcd(void) { int Cent, Dez, Uni; Dez = (Ign%100)/10; Uni = (Ign%100)%10; EscritaLCD(0x30 + Dez); EscritaLCD(0x30 + Uni); } void Pressao(void) { Envia('0', '1', '0','B','\r',5); RecebeMask(0x36,0x32,0x30,0x30); Ascii(RecebeDados1[4]); Dadoa = Rp; Ascii(RecebeDados1[5]); Dadob = Rp; Dadoa = Dadoa << 4; Kp = Dadoa | Dadob; } void PressaoLcd(void) { 71 int Cent, Dez, Uni; Cent = Kp/100; Dez = (Kp%100)/10; Uni = (Kp%100)%10; EscritaLCD(0x30 + Cent); EscritaLCD(0x30 + Dez); EscritaLCD(0x30 + Uni); } void Velocidade(void) { Envia('0', '1', '0','D','\r',5); RecebeMask(0x36,0x32,0x30,0x30); Ascii(RecebeDados1[4]); Dadoa = Rp; Ascii(RecebeDados1[5]); Dadob = Rp; Dadoa = Dadoa << 4; Km = Dadoa | Dadob; } void VelocidadeLCD(void) { int Cent, Dez, Uni; Cent = Km/100; Dez = (Km%100)/10; Uni = (Km%100)%10; EscritaLCD(0x30 + Cent); EscritaLCD(0x30 + Dez); EscritaLCD(0x30 + Uni); } void Borboleta(void) { Envia('0', '1', '1','1','\r',5); RecebeMask(0x36,0x32,0x30,0x30); Ascii(RecebeDados1[4]); Dadoa = Rp; Ascii(RecebeDados1[5]); Dadob = Rp; Dadoa = Dadoa << 4; Ped = Dadoa | Dadob; Ped = (Ped*100)/255; } void BorboletaLCD(void) { int Cent, Dez, Uni; 72 Cent = Ped/100; Dez = (Ped%100)/10; Uni = (Ped%100)%10; EscritaLCD(0x30 + Cent); EscritaLCD(0x30 + Dez); EscritaLCD(0x30 + Uni); } void falha(void) { QTD = RecebeDados1[5]; } void Codigo1(void) { DTC1 = RecebeDados1[2]; if(DTC1 == 0x30) { DTC1 = 'P'; } if(DTC1 == 0x34) { DTC1 = 'C'; } if(DTC1 == 0x43) { DTC1 = 'B'; } if(DTC1 == 0x38) { DTC1 = 'U'; } EscritaLCD(DTC1); EscritaLCD(0x30); for(i=3;i<6;i++) { EscritaLCD(RecebeDados1[i]); } } void Codigo2(void) 73 { DTC1 = RecebeDados1[6]; if(DTC1 == 0x30) { DTC1 = 'P'; } if(DTC1 == 0x34) { DTC1 = 'C'; } if(DTC1 == 0x43) { DTC1 = 'B'; } if(DTC1 == 0x38) { DTC1 = 'U'; } EscritaLCD(DTC1); EscritaLCD(0x30); for(i=7;i<10;i++) { EscritaLCD(RecebeDados1[i]); } } void Codigo3(void) { DTC1 = RecebeDados1[10]; if(DTC1 == 0x30) { DTC1 = 'P'; } if(DTC1 == 0x34) { DTC1 = 'C'; } 74 if(DTC1 == 0x43) { DTC1 = 'B'; } if(DTC1 == 0x38) { DTC1 = 'U'; } EscritaLCD(DTC1); EscritaLCD(0x30); for(i=11;i<14;i++) { EscritaLCD(RecebeDados1[i]); } } //////////////////////////////////////////////////////////////////////////////// // # Controle // //////////////////////////////////////////////////////////////////////////////// void Controle(void) { if((!input(pin_b0)) && (!Flag1) && (!Debouncing)) { Flag1 = 1; Debouncing = 500; } if((Flag1) && (!Debouncing)) { EstadoA--; LimpaLCD(); Flag1 = 0; Debouncing = 0; } if((!input(pin_b3)) && (!Flag2) && (!Debouncing1)) { Flag2 = 1; Debouncing1 = 500; } if((Flag2) && (!Debouncing1)) { EstadoA ++; LimpaLCD(); Flag2 = 0; Debouncing1 = 0; } 75 if((!input(pin_b1)) && (!Flag3) && (!Debouncing2)) { Flag3 = 1; Debouncing2 = 500; } if((Flag3) && (!Debouncing2)) { Enter =1; EstadoA = 0; Flag3 = 0; Debouncing2 = 0; LimpaLCD(); } if((!input(pin_b2)) && (!Flag4) && (!Debouncing3)) { Flag4 = 1; Debouncing3 = 500; } if((Flag4) && (!Debouncing3)) { Enter =0; EstadoA=0; LimpaLCD(); Flag4 = 0; Debouncing3 = 0; } } //////////////////////////////////////////////////////////////////////////////// // # RECEBE // //////////////////////////////////////////////////////////////////////////////// void RecebeMask(char u, char w, char y, char z) { short int M1=0,M2=0,M3=0,M4=0; int b = 0; char dado = 0; x=0; while(x == 0) { Flag0 = Kbhit(); if(Flag0==1) { dado = getc(); 76 Flag0=0; if(dado==0x3E) { if(RecebeDados1[0]== u) { M1=1; } if(RecebeDados1[1]== w) { M2=1; } if(RecebeDados1[2]== y) { M3=1; } if(RecebeDados1[3]== z) { M4=1; } if(M1==1 && M2==1 && M3==1 && M4==1) { At ++; } else { } x=1; } if(dado != 0x20) { RecebeDados1[b]=dado; b++; } } } } void Tela1(void) { ComandoLCD(0x80); for(i=0; i<10; i++) { 77 EscritaLCD(String2[i]); // Envia o comando novamente para o Display. } ComandoLCD(0xC0); for(i=0; i<3; i++) { EscritaLCD(String3[i]); // Envia o comando novamente para o Display. } } void TelaP1(void) { ComandoLCD(0x80); EscritaLCD('R'); EscritaLCD('P'); EscritaLCD('M'); ComandoLCD(0x89); EscritaLCD('A'); EscritaLCD('i'); EscritaLCD('g'); ComandoLCD(0xC0); EscritaLCD('T'); EscritaLCD('p'); EscritaLCD('A'); EscritaLCD('r'); ComandoLCD(0xC9); EscritaLCD('k'); EscritaLCD('P'); EscritaLCD('a'); } void TelaP2(void) { ComandoLCD(0x80); EscritaLCD('T'); EscritaLCD('p'); EscritaLCD('A'); EscritaLCD('r'); ComandoLCD(0x89); EscritaLCD('k'); EscritaLCD('P'); EscritaLCD('a'); ComandoLCD(0xC0); EscritaLCD('K'); EscritaLCD('m'); EscritaLCD('/'); EscritaLCD('h'); ComandoLCD(0xC9); EscritaLCD('%'); } 78 void TelaP3(void) { ComandoLCD(0x80); EscritaLCD('K'); EscritaLCD('m'); EscritaLCD('/'); EscritaLCD('h'); ComandoLCD(0x89); EscritaLCD('%'); ComandoLCD(0xC0); EscritaLCD('R'); EscritaLCD('P'); EscritaLCD('M'); ComandoLCD(0xC9); EscritaLCD('I'); EscritaLCD('g'); EscritaLCD('n'); } void TelaD1(void) { ComandoLCD(0x80); for(i=0; i<14; i++) { EscritaLCD(String5[i]); } ComandoLCD(0xC7); for(i=0; i<3; i++) { EscritaLCD(String3[i]); } ComandoLCD(0xC5); EscritaLCD(QTD); } void TelaD2(void) { ComandoLCD(0x85); Codigo1(); ComandoLCD(0xC5); Codigo2(); 79 } void TelaD3(void) { if(QTD >= 0x33) { ComandoLCD(0x85); Codigo3(); } ComandoLCD(0xC0); EscritaLCD('A'); EscritaLCD('P'); EscritaLCD('A'); EscritaLCD('G'); EscritaLCD('A'); EscritaLCD('R'); EscritaLCD('?'); } //////////////////////////////////////////////////////////////////////////////// // # Principal // //////////////////////////////////////////////////////////////////////////////// void main(void) { InitHw(); Preparacao(); //Inicializa o display LCD. while(true) { Controle(); if(Enter ==0) { if(EstadoA>2) { EstadoA = 1; } if(EstadoA<0) { EstadoA = 2; } switch(EstadoA) 80 { case 0: if(Trava == 0) { ComandoLCD(0x81); for(i=0; i<13; i++) { EscritaLCD(String1[i]); // Envia o comando novamente para o Display. } ComandoLCD(0xC0); for(i=0; i<15; i++) { EscritaLCD(String4[i]); // Envia o comando novamente para o Display. } Envia('A','T','Z',0X0D,'0',4); RecebeMask(0X00,0X00,0X00,0X00); Envia('A','T','E','0',0X0D,5); RecebeMask(0X00,0X00,0X00,0X00); Envia('A','T','L','0',0X0D,5); RecebeMask(0X00,0X00,0X00,0X00); Envia('0','1','0','1',0X0D,5); RecebeMask(0X34,0X31,0X30,0X31); falha(); Trava = 1; } LimpaLCD(); EstadoA=2; break; case 1: Tela1(); ComandoLCD(0xCF); EscritaLCD('<'); // Envia o comando novamente para o // Envia o comando novamente para o Display. EstadoB=2; break; case 2: Tela1(); ComandoLCD(0x8F); EscritaLCD('<'); Display. 81 EstadoB=1; break; } } if(Enter == 1 && EstadoB==1) { if(EstadoA>5) { EstadoA=0; } if(EstadoA<0) { EstadoA=5; } switch(EstadoA) { case 0: ComandoLCD(0x8F); EscritaLCD('<'); TelaP1(); if(EstadoA==0) { Rotacao(); ComandoLCD(0x83); RotacaoLCD(); } if(EstadoA==0) { Temperatura(); ComandoLCD(0xC4); TemperaturaLCD(); } if(EstadoA==0) { Ignicao(); ComandoLCD(0x8C); IgnicaoLCD(); } if(EstadoA==0) { Pressao(); ComandoLCD(0xCC); PressaoLCD(); } 82 break; case 1: ComandoLCD(0xCF); EscritaLCD('<'); TelaP1(); if(EstadoA==1) { Rotacao(); ComandoLCD(0x83); RotacaoLCD(); } if(EstadoA==1) { Ignicao(); ComandoLCD(0x8C); IgnicaoLCD(); } if(EstadoA==1) { Temperatura(); ComandoLCD(0xC4); TemperaturaLCD(); } if(EstadoA==1) { Pressao(); ComandoLCD(0xCC); PressaoLCD(); } break; case 2: TelaP2(); ComandoLCD(0x8F); EscritaLCD('<'); if(EstadoA==2) { Temperatura(); ComandoLCD(0x84); TemperaturaLCD(); } if(EstadoA==2) { Pressao(); ComandoLCD(0x8C); PressaoLCD(); } if(EstadoA==2) { Velocidade(); 83 ComandoLCD(0xC4); VelocidadeLCD(); } if(EstadoA==2) { Borboleta(); ComandoLCD(0xCA); BorboletaLCD(); } break; case 3: TelaP2(); ComandoLCD(0xCF); EscritaLCD('<'); if(EstadoA==3) { Temperatura(); ComandoLCD(0x84); TemperaturaLCD(); } if(EstadoA==3) { Pressao(); ComandoLCD(0x8C); PressaoLCD(); } if(EstadoA==3) { Velocidade(); ComandoLCD(0xC4); VelocidadeLCD(); } if(EstadoA==3) { Borboleta(); ComandoLCD(0xCA); BorboletaLCD(); } break; case 4: TelaP3(); ComandoLCD(0x8F); EscritaLCD('<'); if(EstadoA==4) { Velocidade(); ComandoLCD(0x84); VelocidadeLCD(); } if(EstadoA==4) { Borboleta(); 84 ComandoLCD(0x8A); BorboletaLCD(); } if(EstadoA==4) { Rotacao(); ComandoLCD(0xC3); RotacaoLCD(); } if(EstadoA==4) { Ignicao(); ComandoLCD(0xCC); IgnicaoLCD(); } break; case 5: TelaP3(); ComandoLCD(0xCF); EscritaLCD('<'); if(EstadoA==5) { Velocidade(); ComandoLCD(0x84); VelocidadeLCD(); } if(EstadoA==5) { Borboleta(); ComandoLCD(0x8A); BorboletaLCD(); } if(EstadoA==5) { Rotacao(); ComandoLCD(0xC3); RotacaoLCD(); } if(EstadoA==5) { Ignicao(); ComandoLCD(0xCC); IgnicaoLCD(); } break; } } if(Enter ==1 && EstadoB==2) { if(EstadoA>5) { 85 EstadoA=0; } if(EstadoA<0) { EstadoA=0; } switch(EstadoA) { case 0: TelaD1(); ComandoLCD(0x8F); break; case 1: TelaD1(); ComandoLCD(0xCF); EscritaLCD('<'); break; case 2: Envia('0','3','\r','0','0',3); RecebeMask(0X34,0X33,0X00,0X00); TelaD2(); ComandoLCD(0x8F); EscritaLCD('<'); break; case 3: Envia('0','3','\r','0','0',3); RecebeMask(0X34,0X33,0X00,0X00); TelaD2(); ComandoLCD(0xCF); EscritaLCD('<'); break; case 4: TelaD3(); ComandoLCD(0x8F); EscritaLCD('<'); break; case 5: TelaD3(); ComandoLCD(0xCF); EscritaLCD('<'); Envia('0','4','\r','0','0',3); RecebeMask(0X34,0X34,0X00,0X00); if(RecebeDados1[0] == 0x34 && RecebeDados1[1] == 0x34) { LimpaLCD(); EscritaLCD('O'); EscritaLCD('K'); } else { LimpaLCD(); EscritaLCD('N'); EscritaLCD('O'); 86 } delay_ms(1000); Enter =0; break; } } } } //////////////////////////////////////////////////////////////////////////////// // # FIM // //////////////////////////////////////////////////////////////////////////////// 87 ANEXO B – Datasheet ELM 327 – Comando AT. 88 89 ANEXO C – Lista com os DTC`s (Fonte: http://www.obd-codes.com/trouble_codes) Códigos de falha - Powertrain P0001 Fuel Volume Regulator Control Circuit/Open P0002 Fuel Volume Regulator Control Circuit Range/Performance P0003 Fuel Volume Regulator Control Circuit Low P0004 Fuel Volume Regulator Control Circuit High P0005 Fuel Shutoff Valve "A" Control Circuit/Open P0006 Fuel Shutoff Valve "A" Control Circuit Low P0007 Fuel Shutoff Valve "A" Control Circuit High P0008 Engine Positions System Performance Bank 1 P0009 Engine Position System Performance Bank 2 P0010 "A" Camshaft Position Actuator Circuit (Bank 1) P0011 "A" Camshaft Position - Timing Advanced or System Performance (Bank 1) P0012 "A" Camshaft Position - Timing Over-Retarded (Bank 1) P0013 "B" Camshaft Position - Actuator Circuit (Bank 1) P0014 "B" Camshaft Position - Timing Over-Advanced or System Performance (Bank P0015 "B" Camshaft Position -Timing Over-Retarded (Bank 1) - See Trouble Cod P0016 Crankshaft Position - Camshaft Position Correlation (Bank 1 Sensor A) P0017 Crankshaft Position - Camshaft Position Correlation (Bank 1 Sensor B) P0018 Crankshaft Position - Camshaft Position Correlation (Bank 2 Sensor A) P0019 Crankshaft Position - Camshaft Position Correlation (Bank 2 Sensor B) P0020 "A" Camshaft Position Actuator Circuit (Bank 2) P0021 "A" Camshaft Position - Timing Over-Advanced or System Performance (Bank P0022 "A" Camshaft Position - Timing Over-Retarded (Bank 2) P0023 "B" Camshaft Position - Actuator Circuit (Bank 2) - See Trouble Code P0020 P0024 "B" Camshaft Position - Timing Over-Advanced or System Performance (Bank P0025 "B" Camshaft Position - Timing Over-Retarded (Bank 2) - See Trouble Code P0026 Intake Valve Control Solenoid Circuit Range/Performance Bank 1 P0027 Exhaust Valve Control solenoid Circuit Range/Performance Bank 1 P0028 Intake valve Control Solenoid Circuit Range/Performance Bank 2 P0029 Exhaust Valve Control Solenoid Circuit Range/Performance Bank 2 P0030 HO2S Heater Control Circuit (Bank 1 Sensor 1) P0031 HO2S Heater Control Circuit Low (Bank 1 Sensor 1) P0032 HO2S Heater Control Circuit High (Bank 1 Sensor 1) P0033 Turbo Charger Bypass Valve Control Circuit P0034 Turbo Charger Bypass Valve Control Circuit Low P0035 Turbo Charger Bypass Valve Control Circuit High P0036 HO2S Heater Control Circuit (Bank 1 Sensor 2) P0037 HO2S Heater Control Circuit Low (Bank 1 Sensor 2) P0038 HO2S Heater Control Circuit High (Bank 1 Sensor 2) P0039 Turbo/Super Charger Bypass Valve Control Circuit Range/Performance P0040 Upstream Oxygen Sensors Swapped From Bank To Bank P0041 Downstream Oxygen Sensors Swapped From Bank To Bank P0042 HO2S Heater Control Circuit (Bank 1 Sensor 3) 90 P0043 HO2S Heater Control Circuit Low (Bank 1 Sensor 3) P0044 HO2S Heater Control Circuit High (Bank 1 Sensor 3) P0050 HO2S Heater Control Circuit (Bank 2 Sensor 1) P0051 HO2S Heater Control Circuit Low (Bank 2 Sensor 1) P0052 HO2S Heater Control Circuit High (Bank 2 Sensor 1) P0053 HO2S Heater Resistance (Bank 1, Sensor 1) P0054 HO2S Heater Resistance (Bank 1, Sensor 2) P0055 HO2S Heater Resistance (Bank 1, Sensor 3) P0056 HO2S Heater Control Circuit (Bank 2 Sensor 2) P0057 HO2S Heater Control Circuit Low (Bank 2 Sensor 2) P0058 HO2S Heater Control Circuit High (Bank 2 Sensor 2) P0059 HO2S Heater Resistance (Bank 2, Sensor 1) P0060 HO2S Heater Resistance (Bank 2, Sensor 2) P0061 HO2S Heater Resistance (Bank 2, Sensor 3) P0062 HO2S Heater Control Circuit (Bank 2 Sensor 3) P0063 HO2S Heater Control Circuit Low (Bank 2 Sensor 3) P0064 HO2S Heater Control Circuit High (Bank 2 Sensor 3) P0065 Air Assisted Injector Control Range/Performance P0066 Air Assisted Injector Control Circuit or Circuit Low P0067 Air Assisted Injector Control Circuit High P0068 MAP/MAF - Throttle Position Correlation P0069 Manifold Absolute Pressure - Barometric Pressure Correlation P0070 Ambient Air Temperature Sensor Circuit P0071 Ambient Air Temperature Sensor Range/Performance P0072 Ambient Air Temperature Sensor Circuit Low Input P0073 Ambient Air Temperature Sensor Circuit High Input P0074 Ambient Air Temperature Sensor Circuit Intermittent P0075 Intake Valve Control Solenoid Circuit (Bank 1) P0076 Intake Valve Control Solenoid Circuit Low (Bank 1) P0077 Intake Valve Control Solenoid Circuit High (Bank 1) P0078 Exhaust Valve Control Solenoid Circuit (Bank 1) P0079 Exhaust Valve Control Solenoid Circuit Low (Bank 1) P0080 Exhaust Valve Control Solenoid Circuit High (Bank 1) P0081 Intake valve Control Solenoid Circuit (Bank 2) P0082 Intake Valve Control Solenoid Circuit Low (Bank 2) P0083 Intake Valve Control Solenoid Circuit High (Bank 2) P0084 Exhaust Valve Control Solenoid Circuit (Bank 2) P0085 Exhaust Valve Control Solenoid Circuit Low (Bank 2) P0086 Exhaust Valve Control Solenoid Circuit High (Bank 2) P0087 Fuel Rail/System Pressure - Too Low P0088 Fuel Rail/System Pressure - Too High P0089 Fuel Pressure Regulator 1 Performance P0090 Fuel Pressure Regulator 1 Control Circuit P0091 Fuel Pressure Regulator 1 Control Circuit Low P0092 Fuel Pressure Regulator 1 Control Circuit High P0093 Fuel System Leak Detected - Large Leak P0094 Fuel System Leak Detected - Small Leak P0095 Intake Air Temperature Sensor 2 Circuit P0096 Intake Air Temperature Sensor 2 Circuit Range/Performance 91 P0097 Intake Air Temperature Sensor 2 Circuit Low P0098 Intake Air Temperature Sensor 2 Circuit High P0099 Intake Air Temperature Sensor 2 Circuit Intermittent/Erratic P0100 Mass or Volume Air Flow Circuit Malfunction P0101 Mass or Volume Air Flow Circuit Range/Performance Problem P0102 Mass or Volume Air Flow Circuit Low Input P0103 Mass or Volume Air Flow Circuit High Input P0104 Mass or Volume Air Flow Circuit Intermittent P0105 Manifold Absolute Pressure/Barometric Pressure Circuit Malfunction P0106 Manifold Absolute Pressure/Barometric Pressure Circuit Range/Performance P0107 Manifold Absolute Pressure/Barometric Pressure Circuit Low Input P0108 Manifold Absolute Pressure/Barometric Pressure Circuit High Input P0109 Manifold Absolute Pressure/Barometric Pressure Circuit Intermittent P0110 Intake Air Temperature Circuit Malfunction P0111 Intake Air Temperature Circuit Range/Performance Problem P0112 Intake Air Temperature Circuit Low Input P0113 Intake Air Temperature Circuit High Input P0114 Intake Air Temperature Circuit Intermittent P0115 Engine Coolant Temperature Circuit Malfunction P0116 Engine Coolant Temperature Circuit Range/Performance Problem P0117 Engine Coolant Temperature Circuit Low Input P0118 Engine Coolant Temperature Circuit High Input P0119 Engine Coolant Temperature Circuit Intermittent P0120 Throttle Position Sensor/Switch A Circuit Malfunction P0121 Throttle Position Sensor/Switch A Circuit Range/Performance Problem P0122 Throttle Position Sensor/Switch A Circuit Low Input P0123 Throttle Position Sensor/Switch A Circuit High Input P0124 Throttle Position Sensor/Switch A Circuit Intermittent P0125 Insufficient Coolant Temperature for Closed Loop Fuel Control P0126 Insufficient Coolant Temperature for Stable Operation P0128 Coolant Thermostat (Coolant Temperature Below Thermostat Regulating ture) P0130 02 Sensor Circuit Malfunction (Bank I Sensor 1) P0131 02 Sensor Circuit Low Voltage (Bank I Sensor I) P0132 02 Sensor Circuit High Voltage (Bank I Sensor 1) P0133 02 Sensor Circuit Slow Response (Bank 1 Sensor 1) P0134 02 Sensor Circuit No Activity Detected (Bank I Sensor 1) P0135 02 Sensor Heater Circuit Malfunction (Bank 1 Sensor 1) P0136 02 Sensor Circuit Malfunction (Bank I Sensor 2) P0137 02 Sensor Circuit Low Voltage (Bank I Sensor 2) P0138 02 Sensor Circuit High Voltage (Bank I Sensor 2) P0139 02 Sensor Circuit Slow Response (Bank 1 Sensor 2) P0140 02 Sensor Circuit No Activity Detected (Bank 1 Sensor 2) P0141 02 Sensor Heater Circuit Malfunction (Bank 1 Sensor 2) P0142 02 Sensor Circuit Malfunction (Bank I Sensor 3) P0143 02 Sensor Circuit Low Voltage (Bank I Sensor 3) P0144 02 Sensor Circuit High Voltage (Bank I Sensor 3) P0145 02 Sensor Circuit Slow Response (Bank 1 Sensor 3) P0146 02 Sensor Circuit No Activity Detected (Bank I Sensor 3) P0147 02 Sensor Heater Circuit Malfunction (Bank I Sensor 3) 92 P0150 02 Sensor Circuit Malfunction (Bank 2 Sensor I) P0151 02 Sensor Circuit Low Voltage (Bank 2 Sensor I) P0152 02 Sensor Circuit High Voltage (Bank 2 Sensor 1) P0153 02 Sensor Circuit Slow Response (Bank 2 Sensor 1) P0154 02 Sensor Circuit No Activity Detected (Bank 2 Sensor 1) P0155 02 Sensor Heater Circuit Malfunction (Bank 2 Sensor 1) P0156 02 Sensor Circuit Malfunction (Bank 2 Sensor 2) P0157 02 Sensor Circuit Low Voltage (Bank 2 Sensor 2) P0158 02 Sensor Circuit High Voltage (Bank 2 Sensor 2) P0159 02 Sensor Circuit Slow Response (Bank 2 Sensor 2) P0160 02 Sensor Circuit No Activity Detected (Bank 2 Sensor 2) P0161 02 Sensor Heater Circuit Malfunction (Bank 2 Sensor 2) P0162 02 Sensor Circuit Malfunction (Bank 2 Sensor 3) P0163 02 Sensor Circuit Low Voltage (Bank 2 Sensor 3) P0164 02 Sensor Circuit High Voltage (Bank 2 Sensor 3) P0165 02 Sensor Circuit Slow Response (Bank 2 Sensor 3) P0166 02 Sensor Circuit No Activity Detected (Bank 2 Sensor 3) P0167 02 Sensor Heater Circuit Malfunction (Bank 2 Sensor 3) P0170 Fuel Trim Malfunction (Bank 1) P0171 System too Lean (Bank 1) P0172 System too Rich (Bank 1) P0173 Fuel Trim Malfunction (Bank 2) P0174 System too Lean (Bank 2) P0175 System too Rich (Bank 2) P0176 Fuel Composition Sensor Circuit Malfunction P0177 Fuel Composition Sensor Circuit Range/Performance P0178 Fuel Composition Sensor Circuit Low Input P0179 Fuel Composition Sensor Circuit High Input P0180 Fuel Temperature Sensor A Circuit Malfunction P0181 Fuel Temperature Sensor A Circuit Range/Performance P0182 Fuel Temperature Sensor A Circuit Low Input P0183 Fuel Temperature Sensor A Circuit High Input P0184 Fuel Temperature Sensor A Circuit Intermittent P0185 Fuel Temperature Sensor B Circuit Malfunction P0186 Fuel Temperature Sensor B Circuit Range/Performance P0187 Fuel Temperature Sensor B Circuit Low Input P0188 Fuel Temperature Sensor B Circuit High Input P0189 Fuel Temperature Sensor B Circuit Intermittent P0190 Fuel Rail Pressure Sensor Circuit Malfunction P0191 Fuel Rail Pressure Sensor Circuit Range/Performance P0192 Fuel Rail Pressure Sensor Circuit Low Input P0193 Fuel Rail Pressure Sensor Circuit High Input P0194 Fuel Rail Pressure Sensor Circuit Intermittent P0195 Engine Oil Temperature Sensor Malfunction P0196 Engine Oil Temperature Sensor Range/Performance P0197 Engine Oil Temperature Sensor Low P0198 Engine Oil Temperature Sensor High P0199 Engine Oil Temperature Sensor Intermittent P0200 Injector Circuit Malfunction 93 P0201 Injector Circuit Malfunction - Cylinder 1 P0202 Injector Circuit Malfunction - Cylinder 2 P0203 Injector Circuit Malfunction - Cylinder 3 P0204 Injector Circuit Malfunction - Cylinder 4 P0205 Injector Circuit Malfunction - Cylinder 5 P0206 Injector Circuit Malfunction - Cylinder 6 P0207 Injector Circuit Malfunction - Cylinder 7 P0208 Injector Circuit Malfunction - Cylinder 8 P0209 Injector Circuit Malfunction - Cylinder 9 P0210 Injector Circuit Malfunction - Cylinder 10 P0211 Injector Circuit Malfunction - Cylinder 11 P0212 Injector Circuit Malfunction - Cylinder 12 P0213 Cold Start Injector 1 Malfunction P0214 Cold Start Injector 2 Malfunction P0215 Engine Shutoff Solenoid Malfunction P0216 Injection Timing Control Circuit Malfunction P0217 Engine Overtemp Condition P0218 Transmission Over Temperature Condition P0219 Engine Overspeed Condition P0220 Throttle/Petal Position Sensor/Switch B Circuit Malfunction P0221 Throttle/Petal Position Sensor/Switch B Circuit Range/Performance Problem P0222 Throttle/Petal Position Sensor/Switch B Circuit Low Input P0223 Throttle/Petal Position Sensor/Switch B Circuit High Input P0224 Throttle/Petal Position Sensor/Switch B Circuit Intermittent P0225 Throttle/Petal Position Sensor/Switch C Circuit Malfunction P0226 Throttle/Petal Position Sensor/Switch C Circuit Range/Performance Problem P0227 Throttle/Petal Position Sensor/Switch C Circuit Low Input P0228 Throttle/Petal Position Sensor/Switch C Circuit High Input P0229 Throttle/Petal Position Sensor/Switch C Circuit Intermittent P0230 Fuel Pump Primary Circuit Malfunction P0231 Fuel Pump Secondary Circuit Low P0232 Fuel Pump Secondary Circuit High P0233 Fuel Pump Secondary Circuit Intermittent P0234 Engine Overboost Condition P0235 Turbocharger Boost Sensor A Circuit Malfunction P0236 Turbocharger Boost Sensor A Circuit Range/Performance P0237 Turbocharger Boost Sensor A Circuit Low P0238 Turbocharger Boost Sensor A Circuit High P0239 Turbocharger Boost Sensor B Malfunction P0240 Turbocharger Boost Sensor B Circuit Range/Performance P0241 Turbocharger Boost Sensor B Circuit Low P0242 Turbocharger Boost Sensor B Circuit High P0243 Turbocharger Wastegate Solenoid A Malfunction P0244 Turbocharger Wastegate Solenoid A Range/Performance P0245 Turbocharger Wastegate Solenoid A Low P0246 Turbocharger Wastegate Solenoid A High P0247 Turbocharger Wastegate Solenoid B Malfunction P0248 Turbocharger Wastegate Solenoid B Range/Performance P0249 Turbocharger Wastegate Solenoid B Low 94 P0250 Turbocharger Wastegate Solenoid B High P0251 Injection Pump Fuel Metering Control "A" Malfunction (Cam/Rotor/Injector) P0252 Injection Pump Fuel Metering Control "A" Range/Performance P0253 Injection Pump Fuel Metering Control "A" Low (Cam/Rotor/Injector) P0254 Injection Pump Fuel Metering Control "A" High (Cam/Rotor/Injector) P0255 Injection Pump Fuel Metering Control "A" Intermittent (Cam/Rotor/Injector) P0256 Injection Pump Fuel Metering Control "B" Malfunction (Cam/Rotor/Injector) P0257 Injection Pump Fuel Metering Control "B" Range/Performance Injector) P0258 Injection Pump Fuel Metering Control "B" Low (Cam/R P0259 Injection Pump Fuel Metering Control "B" High (Cam/R P0260 Injection Pump Fuel Metering Control "B" Intermittent Injector) P0261 Cylinder I Injector Circuit Low P0262 Cylinder I Injector Circuit High P0263 Cylinder I Contribution/Balance Fault P0264 Cylinder 2 Injector Circuit Low P0265 Cylinder 2 Injector Circuit High P0266 Cylinder 2 Contribution/Balance Fault P0267 Cylinder 3 Injector Circuit Low P0268 Cylinder 3 Injector Circuit High P0269 Cylinder 3 Contribution/Balance Fault P0270 Cylinder 4 Injector Circuit Low P0271 Cylinder 4 Injector Circuit High P0272 Cylinder 4 Contribution/Balance Fault P0273 Cylinder 5 Injector Circuit Low P0274 Cylinder 5 Injector Circuit High P0275 Cylinder S Contribution/Balance Fault P0276 Cylinder 6 Injector Circuit Low P0277 Cylinder 6 Injector Circuit High P0278 Cylinder 6 Contribution/Balance Fault P0279 Cylinder 7 Injector Circuit Low P0280 Cylinder 7 Injector Circuit High P0281 Cylinder 7 Contribution/Balance Fault P0282 Cylinder 8 Injector Circuit Low P0283 Cylinder 8 Injector Circuit High P0284 Cylinder 8 Contribution/Balance Fault P0285 Cylinder 9 Injector Circuit Low P0286 Cylinder 9 Injector Circuit High P0287 Cylinder 9 Contribution/Balance Fault P0288 Cylinder 10 Injector Circuit Low P0289 Cylinder 10 Injector Circuit High P0290 Cylinder 10 Contribution/Balance Fault P0291 Cylinder 11 Injector Circuit Low P0292 Cylinder 11 Injector Circuit High P0293 Cylinder 11 Contribution/Balance Fault P0294 Cylinder 12 Injector Circuit Low P0295 Cylinder 12 Injector Circuit High P0296 Cylinder 12 Contribution/Range Fault P0300 Random/Multiple Cylinder Misfire Detected P0301 Cylinder 1 Misfire Detected 95 P0302 Cylinder 2 Misfire Detected P0303 Cylinder 3 Misfire Detected P0304 Cylinder 4 Misfire Detected P0305 Cylinder 5 Misfire Detected P0306 Cylinder 6 Misfire Detected P0307 Cylinder 7 Misfire Detected P0308 Cylinder 8 Misfire Detected P0309 Cylinder 9 Misfire Detected P0310 Cylinder 10 Misfire Detected P0311 Cylinder 11 Misfire Detected P0312 Cylinder 12 Misfire Detected P0313 Misfire Detected with Low Fuel P0314 Single Cylinder Misfire (Cylinder not Specified) P0315 Crankshaft Position System Variation Not Learned P0316 Misfire Detected On Startup (First 1000 Revolutions) P0317 Rough Road Hardware Not Present P0318 Rough Road Sensor A Signal Circuit P0319 Rough Road Sensor B Signal Circuit P0320 Ignition/Distributor Engine Speed Input Circuit Malfunction P0321 Ignition/Distributor Engine Speed Input Circuit Range/Performance P0322 Ignition/Distributor Engine Speed Input Circuit No Signal P0323 Ignition/Distributor Engine Speed Input Circuit Intermittent P0325 Knock Sensor 1 Circuit Malfunction (Bank I or Single Sensor) P0326 Knock Sensor 1 Circuit Range/Performance (Bank 1 or Single Sensor) P0327 Knock Sensor 1 Circuit Low Input (Bank I or Single Sensor) P0328 Knock Sensor 1 Circuit High Input (Bank I or Single Sensor) P0329 Knock Sensor 1 Circuit Intermittent (Bank 1 or Single Sensor) P0330 Knock Sensor 2 Circuit Malfunction (Bank 2) P0331 Knock Sensor 2 Circuit Range/Performance (Bank 2) P0332 Knock Sensor 2 Circuit Low Input (Bank 2) P0333 Knock Sensor 2 Circuit High Input (Bank 2) P0334 Knock Sensor 2 Circuit Intermittent (Bank 2) P0335 Crankshaft Position Sensor A Circuit Malfunction P0336 Crankshaft Position Sensor A Circuit Range/Performance P0337 Crankshaft Position Sensor A Circuit Low Input P0338 Crankshaft Position Sensor A Circuit High Input P0339 Crankshaft Position Sensor A Circuit Intermittent P0340 Camshaft Position Sensor Circuit Malfunction P0341 Camshaft Position Sensor Circuit Range/Performance P0342 Camshaft Position Sensor Circuit Low Input P0343 Camshaft Position Sensor Circuit High Input P0344 Camshaft Position Sensor Circuit Intermittent P0345 Camshaft Position Sensor A Circuit Malfunction (Bank 2) P0346 Camshaft Position Sensor A Circuit Range/Performance (Bank 2) P0347 Camshaft Position Sensor A Circuit Low Input (Bank 2) P0348 Camshaft Position Sensor A Circuit High Input (Bank 2) P0349 Camshaft Position Sensor A Circuit Intermittent (Bank 2) P0350 Ignition Coil Primary/Secondary Circuit Malfunction P0351 Ignition Coil A Primary/Secondary Circuit Malfunction 96 P0352 Ignition Coil B Primary/Secondary Circuit Malfunction P0353 Ignition Coil C Primary/Secondary Circuit Malfunction P0354 Ignition Coil D Primary/Secondary Circuit Malfunction P0355 Ignition Coil E Primary/Secondary Circuit Malfunction P0356 Ignition Coil F Primary/Secondary Circuit Malfunction P0357 Ignition Coil G Primary/Secondary Circuit Malfunction P0358 Ignition Coil H Primary/Secondary Circuit Malfunction P0359 Ignition Coil I Primary/Secondary Circuit Malfunction P0360 Ignition Coil J Primary/Secondary Circuit Malfunction P0361 Ignition Coil K Primary/Secondary Circuit Malfunction P0362 Ignition Coil L Primary/Secondary Circuit Malfunction P0370 Timing Reference High Resolution Signal A Malfunction P0371 Timing Reference High Resolution Signal A Too Many Pulses P0372 Timing Reference High Resolution Signal A Too Few Pulses P0373 Timing Reference High Resolution Signal A Intermittent/Erratic Pulses P0374 Timing Reference High Resolution Signal A No Pulses P0375 Timing Reference High Resolution Signal B Malfunction P0376 Timing Reference High Resolution Signal B Too Many Pulses P0377 Timing Reference High Resolution Signal B Too Few Pulses P0378 Timing Reference High Resolution Signal B Intermittent/Erratic Pulses P0379 Timing Reference High Resolution Signal B No Pulses P0380 Glow Plug/Heater Circuit "A" Malfunction P0381 Glow Plug/Heater Indicator Circuit Malfunction P0382 Exhaust Gas Recirculation Flow Malfunction P0385 Crankshaft Position Sensor B Circuit Malfunction P0386 Crankshaft Position Sensor B Circuit Range/Performance P0387 Crankshaft Position Sensor B Circuit Low Input P0388 Crankshaft Position Sensor B Circuit High Input P0389 Crankshaft Position Sensor B Circuit Intermittent P0400 Exhaust Gas Recirculation Flow Malfunction P0401 Exhaust Gas Recirculation Flow Insufficient Detected P0402 Exhaust Gas Recirculation Flow Excessive Detected P0403 Exhaust Gas Recirculation Circuit Malfunction P0404 Exhaust Gas Recirculation Circuit Range/Performance P0405 Exhaust Gas Recirculation Sensor A Circuit Low P0406 Exhaust Gas Recirculation Sensor A Circuit High P0407 Exhaust Gas Recirculation Sensor B Circuit Low P0408 Exhaust Gas Recirculation Sensor B Circuit High P0410 Secondary Air Injection System Malfunction P0411 Secondary Air Injection System Incorrect Flow Detected P0412 Secondary Air Injection System Switching Valve A Circuit Malfunction P0413 Secondary Air Injection System Switching Valve A Circuit Open P0414 Secondary Air Injection System Switching Valve A Circuit Shorted P0415 Secondary Air Injection System Switching Valve B Circuit Malfunction P0416 Secondary Air Injection System Switching Valve B Circuit Open P0417 Secondary Air Injection System Switching Valve B Circuit Shorted P0418 Secondary Air Injection System Relay "A" Circuit Malfunction P0419 Secondary Air Injection System Relay "B" Circuit Malfunction P0420 Catalyst System Efficiency Below Threshold (Bank 1) 97 P0421 Warm Up Catalyst Efficiency Below Threshold (Bank 1) P0422 Main Catalyst Efficiency Below Threshold (Bank 1) P0423 Heated Catalyst Efficiency Below Threshold (Bank 1) P0424 Heated Catalyst Temperature Below Threshold (Bank 1) P0430 Catalyst System Efficiency Below Threshold (Bank 2) P0431 Warm Up Catalyst Efficiency Below Threshold (Bank 2) P0432 Main Catalyst Efficiency Below Threshold (Bank 2) P0433 Heated Catalyst Efficiency Below Threshold (Bank 2) P0434 Heated Catalyst Temperature Below Threshold (Bank 2) P0440 Evaporative Emission Control System Malfunction P0441 Evaporative Emission Control System Incorrect Purge Flow P0442 Evaporative Emission Control System Leak Detected (small leak) P0443 Evaporative Emission Control System Purge Control Valve Circuit P0444 Evaporative Emission Control System Purge Control Valve Circuit Open P0445 Evaporative Emission Control System Purge Control Valve Circuit Shorted P0446 Evaporative Emission Control System Vent Control Circuit Malfunction P0447 Evaporative Emission Control System Vent Control Circuit Open P0448 Evaporative Emission Control System Vent Control Circuit Shorted P0449 Evaporative Emission Control System Vent Valve/Solenoid Circuit Malfunct P0450 Evaporative Emission Control System Pressure Sensor Malfunction P0451 Evaporative Emission Control System Pressure Sensor Range/Performance P0452 Evaporative Emission Control System Pressure Sensor Low Input P0453 Evaporative Emission Control System Pressure Sensor High Input P0454 Evaporative Emission Control System Pressure Sensor Intermittent P0455 Evaporative Emission Control System Leak Detected (gross leak) P0456 Evaporative Emissions System Small Leak Detected P0457 Evaporative Emission Control System Leak Detected P0458 Evaporative Emission System Purge Control Valve Circuit Low P0459 Evaporative Emission System Purge Control Valve Circuit High P0460 Fuel Level Sensor Circuit Malfunction P0461 Fuel Level Sensor Circuit Range/Performance P0462 Fuel Level Sensor Circuit Low Input P0463 Fuel Level Sensor Circuit High Input P0464 Fuel Level Sensor Circuit Intermittent P0465 Purge Flow Sensor Circuit Malfunction P0466 Purge Flow Sensor Circuit Range/Performance P0467 Purge Flow Sensor Circuit Low Input P0468 Purge Flow Sensor Circuit High Input P0469 Purge Flow Sensor Circuit Intermittent P0470 Exhaust Pressure Sensor Malfunction P0471 Exhaust Pressure Sensor Range/Performance P0472 Exhaust Pressure Sensor Low P0473 Exhaust Pressure Sensor High P0474 Exhaust Pressure Sensor Intermittent P0475 Exhaust Pressure Control Valve Malfunction P0476 Exhaust Pressure Control Valve Range/Performance P0477 Exhaust Pressure Control Valve Low P0478 Exhaust Pressure Control Valve High P0479 Exhaust Pressure Control Valve Intermittent 98 P0480 Cooling Fan I Control Circuit Malfunction P0481 Cooling Fan 2 Control Circuit Malfunction P0482 Cooling Fan 3 Control Circuit Malfunction P0483 Cooling Fan Rationality Check Malfunction P0484 Cooling Fan Circuit Over Current P0485 Cooling Fan Power/Ground Circuit Malfunction P0500 Vehicle Speed Sensor Malfunction P0501 Vehicle Speed Sensor Range/Performance P0502 Vehicle Speed Sensor Low Input P0503 Vehicle Speed Sensor Intermittent/Erratic/High P0505 Idle Control System Malfunction P0506 Idle Control System RPM Lower Than Expected P0507 Idle Control System RPM Higher Than Expected P0510 Closed Throttle Position Switch Malfunction P0520 Engine Oil Pressure Sensor/Switch Circuit Malfunction P0521 Engine Oil Pressure Sensor/Switch Circuit Range/Performance P0522 Engine Oil Pressure Sensor/Switch Circuit Low Voltage P0523 Engine Oil Pressure Sensor/Switch Circuit High Voltage P0530 A/C Refrigerant Pressure Sensor Circuit Malfunction P0531 A/C Refrigerant Pressure Sensor Circuit Range/Performance P0532 A/C Refrigerant Pressure Sensor Circuit Low Input P0533 A/C Refrigerant Pressure Sensor Circuit High Input P0534 Air Conditioner Refrigerant Charge Loss P0550 Power Steering Pressure Sensor Circuit Malfunction P0551 Power Steering Pressure Sensor Circuit Range/Performance P0552 Power Steering Pressure Sensor Circuit Low Input P0553 Power Steering Pressure Sensor Circuit High Input P0554 Power Steering Pressure Sensor Circuit Intermittent P0560 System Voltage Malfunction P0561 System Voltage Unstable P0562 System Voltage Low P0563 System Voltage High P0565 Cruise Control On Signal Malfunction P0566 Cruise Control Off Signal Malfunction P0567 Cruise Control Resume Signal Malfunction P0568 Cruise Control Set Signal Malfunction P0569 Cruise Control Coast Signal Malfunction P0570 Cruise Control Accel Signal Malfunction P0571 Cruise Control/Brake Switch A Circuit Malfunction P0572 Cruise Control/Brake Switch A Circuit Low P0573 Cruise Control/Brake Switch A Circuit High P0574 Cruise Control Related Malfunction P0575 Cruise Control Related Malfunction P0576 Cruise Control Related Malfunction P0576 Cruise Control Related Malfunction P0578 Cruise Control Related Malfunction P0579 Cruise Control Related Malfunction P0580 Cruise Control Related Malfunction P0600 Serial Communication Link Malfunction 99 P0601 Internal Control Module Memory Check Sum Error P0602 Control Module Programming Error P0603 Internal Control Module Keep Alive Memory (KAM) Error P0604 Internal Control Module Random Access Memory (RAM) Error P0605 Internal Control Module Read Only Memory (ROM) Error P0606 PCM Processor Fault P0607 Control Module Performance P0608 Control Module VSS Output "A" Malfunction P0609 Control Module VSS Output "B" Malfunction P0620 Generator Control Circuit Malfunction P0621 Generator Lamp "L" Control Circuit Malfunction P0622 Generator Field "F" Control Circuit Malfunction P0650 Malfunction Indicator Lamp (MIL) Control Circuit Malfunction P0654 Engine RPM Output Circuit Malfunction P0655 Engine Hot Lamp Output Control Circuit Malfunction P0656 Fuel Level Output Circuit Malfunction P0700 Transmission Control System Malfunction P0701 Transmission Control System Range/Performance P0702 Transmission Control System Electrical P0703 Torque Converter/Brake Switch B Circuit Malfunction P0704 Clutch Switch Input Circuit Malfunction P0705 Transmission Range Sensor Circuit malfunction (PRNDL Input) P0706 Transmission Range Sensor Circuit Range/Performance P0707 Transmission Range Sensor Circuit Low Input P0708 Transmission Range Sensor Circuit High Input P0709 Transmission Range Sensor Circuit Intermittent P0710 Transmission Fluid Temperature Sensor Circuit Malfunction P0711 Transmission Fluid Temperature Sensor Circuit Range/Performance P0712 Transmission Fluid Temperature Sensor Circuit Low Input P0713 Transmission Fluid Temperature Sensor Circuit High Input P0714 Transmission Fluid Temperature Sensor Circuit Intermittent P0715 Input/Turbine Speed Sensor Circuit Malfunction P0716 Input/Turbine Speed Sensor Circuit Range/Performance P0717 Input/Turbine Speed Sensor Circuit No Signal P0718 Input/Turbine Speed Sensor Circuit Intermittent P0719 Torque Converter/Brake Switch B Circuit Low P0720 Output Speed Sensor Circuit Malfunction P0721 Output Speed Sensor Range/Performance P0722 Output Speed Sensor No Signal P0723 Output Speed Sensor Intermittent P0724 Torque Converter/Brake Switch B Circuit High P0725 Engine Speed input Circuit Malfunction P0726 Engine Speed Input Circuit Range/Performance P0727 Engine Speed Input Circuit No Signal P0728 Engine Speed Input Circuit Intermittent P0730 Incorrect Gear Ratio P0731 Gear I Incorrect ratio P0732 Gear 2 Incorrect ratio P0733 Gear 3 Incorrect ratio 100 P0734 Gear 4 Incorrect ratio P0735 Gear 5 Incorrect ratio P0736 Reverse incorrect gear ratio P0740 Torque Converter Clutch Circuit Malfunction P0741 Torque Converter Clutch Circuit Performance or Stuck Off P0742 Torque Converter Clutch Circuit Stock On P0743 Torque Converter Clutch Circuit Electrical P0744 Torque Converter Clutch Circuit Intermittent P0745 Pressure Control Solenoid Malfunction P0746 Pressure Control Solenoid Performance or Stuck Off P0747 Pressure Control Solenoid Stuck On P0748 Pressure Control Solenoid Electrical P0749 Pressure Control Solenoid Intermittent P0750 Shift Solenoid A Malfunction P0751 Shift Solenoid A Performance or Stuck Off P0752 Shift Solenoid A Stuck On P0753 Shift Solenoid A Electrical P0754 Shift Solenoid A Intermittent P0755 Shift Solenoid B Malfunction P0756 Shift Solenoid B Performance or Stock Off P0757 Shift Solenoid B Stuck On P0758 Shift Solenoid B Electrical P0759 Shift Solenoid B Intermittent P0760 Shift Solenoid C Malfunction P0761 Shift Solenoid C Performance or Stuck Off P0762 Shift Solenoid C Stuck On P0763 Shift Solenoid C Electrical P0764 Shift Solenoid C Intermittent P0765 Shift Solenoid D Malfunction P0766 Shift Solenoid D Performance or Stuck Off P0767 Shift Solenoid D Stuck On P0768 Shift Solenoid D Electrical P0769 Shift Solenoid D Intermittent P0770 Shift Solenoid E Malfunction P0771 Shift Solenoid E Performance or Stuck Off P0772 Shift Solenoid E Stuck On P0773 Shift Solenoid E Electrical P0774 Shift Solenoid E Intermittent P0780 Shift Malfunction P0781 1-2 Shift Malfunction P0782 2-3 Shift Malfunction P0783 3-4 Shift Malfunction P0784 4-5 Shift Malfunction P0785 Shift/Timing Solenoid Malfunction P0786 Shift/Timing Solenoid Range/Performance P0787 Shift/Timing Solenoid Low P0788 Shift/Timing Solenoid High P0789 Shift/Timing Solenoid Intermittent P0790 Normal/Performance Switch Circuit Malfunction 101 P0801 Reverse Inhibit Control Circuit Malfunction P0803 1-4 Upshift (Skip Shift) Solenoid Control Circuit Malfunction P0804 1-4 Upshift (Skip Shift) Lamp Control Circuit Malfunction Códigos de falha do Body Os códigos de falha da carroceria do veiculo não são padronizados por norma. Códigos de falha do Chassis C0000 - Vehicle Speed Information Circuit Malfunction C0035 - Left Front Wheel Speed Circuit Malfunction C0040 - Right Front Wheel Speed Circuit Malfunction C0041 - Right Front Wheel Speed Sensor Circuit Range/Performance (EBCM) C0045 - Left Rear Wheel Speed Circuit Malfunction C0046 - Left Rear Wheel Speed Sensor Circuit Range/Performance (EBCM) C0050 - Right Rear Wheel Speed Circuit Malfunction C0051 - LF Wheel Speed Sensor Circuit Range/Performance (EBCM) C0060 - Left Front ABS Solenoid #1 Circuit Malfunction C0065 - Left Front ABS Solenoid #2 Circuit Malfunction C0070 - Right Front ABS Solenoid #1 Circuit Malfunction C0075 - Right Front ABS Solenoid #2 Circuit Malfunction C0080 - Left Rear ABS Solenoid #1 Circuit Malfunction C0085 - Left Rear ABS Solenoid #2 Circuit Malfunction C0090 - Right Rear ABS Solenoid #1 Circuit Malfunction C0095 - Right Rear ABS Solenoid #2 Circuit Malfunction C0110 - Pump Motor Circuit Malfunction C0121 - Valve Relay Circuit Malfunction C0128 - Low Brake Fluid Circuit Low C0141 - Left TCS Solenoid #1 Circuit Malfunction C0146 - Left TCS Solenoid #2 Circuit Malfunction C0151 - Right TCS Solenoid #1 Circuit Malfunction C0156 - Right TCS Solenoid #2 Circuit Malfunction C0161 - ABS/TCS Brake Switch Circuit Malfunction C0221 - Right Front Wheel Speed Sensor Circuit Open C0222 - Right Front Wheel Speed Signal Missing C0223 - Right Front Wheel Speed Signal Erratic C0225 - Left Front Wheel Speed Sensor Circuit Open C0226 - Left Front Wheel Speed Signal Missing C0227 - Left Front Wheel Speed Signal Erratic C0229 - Drop Out of Front Wheel Speed Signals C0235 - Rear Wheel Speed Signal Circuit Open C0236 - Rear Wheel Speed Signal Circuit Missing C0237 - Rear Wheel Speed Signal Erratic C0238 - Wheel Speed Mismatch 102 C0241 - EBCM Control Valve Circuit C0245 - Wheel Speed Sensor Frequency Error C0254 - EBCM Control Valve Circuit C0265 - EBCM Relay Circuit C0266 - EBCM Relay Circuit C0267 - Pump Motor Circuit Open/Shorted C0268 - Pump Motor Circuit Open/Shorted C0269 - Excessive Dump/Isolation Time C0271 - EBCM Malfunction C0272 - EBCM Malfunction C0273 - EBCM Malfunction C0274 - Excessive Dump/Isolation Time C0279 - Powertrain Configuration Not Valid C0281 - Brake Switch Circuit C0283 - Traction Switch Shorted to Ground C0284 - EBCM Malfunction C0286 - ABS Indicator Lamp Circuit Shorted to B+ C0287 - Delivered Torque Circuit C0288 - Brake Warning Lamp Circuit Shorted to B+ C0290 - Lost Communications With PCM C0292 - Lost Communications With PCM C0291 - Lost Communications With BCM C0297 - Powertrain Configuration Data Not Received C0298 - Powertrain Indicated Traction Control Malfunction C0300 - Rear Speed Sensor Malfunction C0305 - Front Speed Sensor Malfunction C0306 - Motor A or B Circuit C0308 - Motor A/B Circuit Low C0309 - Motor A/B Circuit High C0310 - Motor A/B Circuit Open C0315 - Motor Ground Circuit Open C0321 - Transfer Case Lock Circuit C0323 - T-Case Lock Circuit Low C0324 - T-Case Lock Circuit High C0327 - Encoder Circuit Malfunction C0357 - Park Switch Circuit High C0359 - Four Wheel Drive Low Range (4LO) Discrete Output Circuit C0362 - 4LO Discrete Output Circuit High C0367 - Front Axle Control Circuit High C0374 - General System Malfunction C0376 - Front/Rear Shaft Speed Mismatch C0379 - Front Axle System C0387 - Unable to Perform Shift C0472 - Steering Handwheel Speed Sensor Signal V Low C0473 - Steering Handwheel Speed Sensor Signal V High C0495 - EVO Tracking Error C0498 - Steering Assist Control Actuator Feed Circuit Low C0499 - Steering Assist Control Solenoid Feed Circuit High C0503 - Steering Assist Control Solenoid Return Circuit Low 103 C0504 - Steering Assist Control Solenoid Return Circuit High C0550 - ECU Malfunction - internal write / checksum malfunction C0559 - EEPROM Checksum Error C0563 - Calibration ROM Checksum Error C0577 - Left Front Solenoid Circuit Low C0578 - Left Front Solenoid Circuit High C0579 - Left Front Solenoid Circuit Open C0582 - Right Front Solenoid Circuit Low C0583 - Right Front Solenoid Circuit High C0584 - Right Front Solenoid Circuit Open C0587 - Left Rear Solenoid Circuit Low C0588 - Left Rear Solenoid Circuit High C0589 - Left Rear Solenoid Circuit Open C0592 - Right Rear Solenoid Circuit Low C0593 - Right Rear Solenoid Circuit High C0594 - Right Rear Solenoid Circuit Open C0611 - VIN Information Error C0615 - Left Front Position Sensor Malfunction C0620 - Right Front Position Sensor Malfunction C0625 - Left Rear Position Sensor Malfunction C0628 - Level Control Position Sensor Circuit High C0630 - Right Rear Position Sensor Malfunction C0635 - Left Front Normal Force Circuit Malfunction C0638 - Left Front Normal Force Circuit High C0640 - Right Front Normal Force Circuit Malfunction C0643 - Right Front Normal Force Circuit High C0655 - Level Control Compressor Relay Malfunction C0657 - Level Control Compressor Circuit Low C0658 - Level Control Compressor Circuit High C0660 - Level Control Exhaust Valve Circuit Malfunction C0662 - Level Control Exhaust Valve Circuit Low C0663 - Level Control Exhaust Valve Circuit High C0665 - Chassis Pitch Signal Circuit C0690 - Damper Control Relay Circuit Malfunction C0691 - Damper Control Relay Circuit Range C0693 - Damper Control Relay Circuit High C0695 - Position Sensor Overcurrent (8 volt supply) C0696 - Position Sensor Overcurrent (5 volt supply) C0710 - Steering Position Signal Malfunction C0750 - Tire Pressure Monitor (TPM) system sensor not transmitting C0755 - Tire Pressure Monitor (TPM) system sensor not transmitting C0760 - Tire Pressure Monitor (TPM) system sensor not transmitting C0765 - Tire Pressure Monitor (TPM) system sensor not transmitting C0800 - Device Power #1 Circuit Malfunction C0896 - Electronic Suspension Control (ESC) voltage is outside the normal range of 9 to 15.5 volts Códigos de falha de Redes (alguns são reservados) 104 U0001....High Speed CAN Communication Bus U0002....High Speed CAN Communication Bus Performance U0003....High Speed CAN Communication Bus (+) Open U0004....High Speed CAN Communication Bus (+) Low U0005....High Speed CAN Communication Bus (+) High U0006....High Speed CAN Communication Bus (-) Open U0007....High Speed CAN Communication Bus (-) Low U0008....High Speed CAN Communication Bus (-) High U0009....High Speed CAN Communication Bus (-) shorted to Bus (+) U0010....Medium Speed CAN Communication Bus U0011....Medium Speed CAN Communication Bus Performance U0012....Medium Speed CAN Communication Bus (+) Open U0013....Medium Speed CAN Communication Bus (+) Low U0014....Medium Speed CAN Communication Bus (+) High U0015....Medium Speed CAN Communication Bus (-) Open U0016....Medium Speed CAN Communication Bus (-) Low U0017....Medium Speed CAN Communication Bus (-) High U0018....Medium Speed CAN Communication Bus (-) shorted to Bus (+) U0019....Low Speed CAN Communication Bus U0020....Low Speed CAN Communication Bus Performance U0021....Low Speed CAN Communication Bus (+) Open U0022....Low Speed CAN Communication Bus (+) Low U0023....Low Speed CAN Communication Bus (+) High U0024....Low Speed CAN Communication Bus (-) Open U0025....Low Speed CAN Communication Bus (-) Low U0026....Low Speed CAN Communication Bus (-) High U0027....Low Speed CAN Communication Bus (-) shorted to Bus (+) U0028....Vehicle Communication Bus A U0029....Vehicle Communication Bus A Performance U0030....Vehicle Communication Bus A (+) Open U0031....Vehicle Communication Bus A (+) Low U0032....Vehicle Communication Bus A (+) High U0033....Vehicle Communication Bus A (-) Open U0034....Vehicle Communication Bus A (-) Low U0035....Vehicle Communication Bus A (-) High U0036....Vehicle Communication Bus A (-) shorted to Bus A (+) U0037....Vehicle Communication Bus B U0038....Vehicle Communication Bus B Performance U0039....Vehicle Communication Bus B (+) Open U0040....Vehicle Communication Bus B (+) Low U0041....Vehicle Communication Bus B (+) High U0042....Vehicle Communication Bus B (-) Open U0043....Vehicle Communication Bus B (-) Low U0044....Vehicle Communication Bus B (-) High U0045....Vehicle Communication Bus B (-) shorted to Bus B (+) U0046....Vehicle Communication Bus C U0047....Vehicle Communication Bus C Performance U0048....Vehicle Communication Bus C (+) Open U0049....Vehicle Communication Bus C (+) Low 105 U0050....Vehicle Communication Bus C (+) High U0051....Vehicle Communication Bus C (-) Open U0052....Vehicle Communication Bus C (-) Low U0053....Vehicle Communication Bus C (-) High U0054....Vehicle Communication Bus C (-) shorted to Bus C (+) U0055....Vehicle Communication Bus D U0056....Vehicle Communication Bus D Performance U0057....Vehicle Communication Bus D (+) Open U0058....Vehicle Communication Bus D (+) Low U0059....Vehicle Communication Bus D (+) High U0060....Vehicle Communication Bus D (-) Open U0061....Vehicle Communication Bus D (-) Low U0062....Vehicle Communication Bus D (-) High U0063....Vehicle Communication Bus D (-) shorted to Bus D (+) U0064....Vehicle Communication Bus E U0065....Vehicle Communication Bus E Performance U0066....Vehicle Communication Bus E (+) Open U0067....Vehicle Communication Bus E (+) Low U0068....Vehicle Communication Bus E (+) High U0069....Vehicle Communication Bus E (-) Open U0070....Vehicle Communication Bus E (-) Low U0071....Vehicle Communication Bus E (-) High U0072....Vehicle Communication Bus E (-) shorted to Bus E (+) U0073....Control Module Communication Bus Off U0074....Reserved by Document U0075....Reserved by Document U0076....Reserved by Document U0077....Reserved by Document U0078....Reserved by Document U0079....Reserved by Document U0080....Reserved by Document U0100....Lost Communication With ECM/PCM "A" U0101....Lost Communication with TCM U0102....Lost Communication with Transfer Case Control Module U0103....Lost Communication With Gear Shift Module U0104....Lost Communication With Cruise Control Module U0105....Lost Communication With Fuel Injector Control Module U0106....Lost Communication With Glow Plug Control Module U0107....Lost Communication With Throttle Actuator Control Module U0108....Lost Communication With Alternative Fuel Control Module U0109....Lost Communication With Fuel Pump Control Module U0110....Lost Communication With Drive Motor Control Module U0111....Lost Communication With Battery Energy Control Module "A" U0112....Lost Communication With Battery Energy Control Module "B" U0113....Lost Communication With Emissions Critical Control Information U0114....Lost Communication With Four-Wheel Drive Clutch Control Module U0115....Lost Communication With ECM/PCM "B" U0145....Lost Communication With Body Control Module "E" U0146....Lost Communication With Gateway "A" 106 U0147....Lost Communication With Gateway "B" U0148....Lost Communication With Gateway "C" U0149....Lost Communication With Gateway "D" U0150....Lost Communication With Gateway "E" U0151....Lost Communication With Restraints Control Module U0152....Lost Communication With Side Restraints Control Module U0153....Lost Communication With Side Restraints Control Module U0154....Lost Communication With Restraints Occupant Sensing Control Module U0155....Lost Communication With Instrument Panel Cluster (IPC) Control Module U0156....Lost Communication With Information Center "A" U0157....Lost Communication With Information Center "B" U0158....Lost Communication With Head Up Display U0159....Lost Communication With Parking Assist Control Module U0160....Lost Communication With Audible Alert Control Module U0161....Lost Communication With Compass Module U0162....Lost Communication With Navigation Display Module U0163....Lost Communication With Navigation Control Module U0164....Lost Communication With HVAC Control Module U0165....Lost Communication With HVAC Control Module U0166....Lost Communication With Auxiliary Heater Control Module U0167....Lost Communication With Vehicle Immobilizer Control Module U0403....Invalid Data Received From Transfer Case Control Module U0404....Invalid Data Received From Gear Shift Control Module U0405....Invalid Data Received From Cruise Control Module U0406....Invalid Data Received From Fuel Injector Control Module U0407....Invalid Data Received From Glow Plug Control Module U0408....Invalid Data Received From Throttle Actuator Control Module U0409....Invalid Data Received From Alternative Fuel Control Module U0410....Invalid Data Received From Fuel Pump Control Module U0411....Invalid Data Received From Drive Motor Control Module U0412....Invalid Data Received From Battery Energy Control Module A U0413....Invalid Data Received From Battery Energy Control Module B U0414....Invalid Data Received From Four-Wheel Drive Clutch Contro U0415....Invalid Data Received From Anti-Lock Brake System Control U0416....Invalid Data Received From Vehicle Dynamics Control Modu U0417....Invalid Data Received From Park Brake Control Module U0418....Invalid Data Received From Brake System Control Module U0419....Invalid Data Received From Steering Effort Control Module U0420....Invalid Data Received From Power Steering Control Module U0421....Invalid Data Received From Ride Level Control Module U0422....Invalid Data Received From Body Control Module U0423....Invalid Data Received From Instrument Panel Control Module U0424....Invalid Data Received From HVAC Control Module U0425....Invalid Data Received From Auxiliary Heater Control Module U0426....Invalid Data Received From Vehicle Immobilizer Control Mo U0427....Invalid Data Received From Vehicle Security Control Module U0428....Invalid Data Received From Steering Angle Sensor Module U0429....Invalid Data Received From Steering Column Control Module U0430....Invalid Data Received From Tire Pressure Monitor Module 107 108