Google News - Top Stories

sábado, 29 de setembro de 2012

O Arduino Uno (ou Duemilanove) Aplicado a uma EVSE (SAE-J1772 CA Nível 2) - Parte 2

Aqui começaremos a PARTE 2 deste artigo! Se preferir voltar a PARTE 1, eis o linque de ligação:

O Arduino Uno (ou Duemilanove) Aplicado a uma EVSE (SAE-J1772 CA Nível 2) - Parte 1


Se desejar contextualizar melhor com o básico Equipamento de Abastecimento de Veículo Elétrico, veja estas postagens anteriores:

EVSE - Electric Vehicle Supply Equipment (Equipto de Abastec. de Veículo Elétr.) - Nível 1 e 2



Open-EVSE:

O termo Open-EVSE (em inglês, Open-Electric Vehicle Supply Equipment), em geral, refere-se a uma placa de extensão (shield) para plataforma Arduino específica. Porém, pode também referir-se a um conjunto de diferentes shields de Arduino em separado, como, por exemplo:

  • Uma shield de Fonte de Alimentação Avançada (que além de prover a tensão CC de 12V para alimentação geral do controle, ainda faz a função de Monitoramento da(s) Presença(s) da(s) Tensão(ões) de Fase da Rede CA após o Relé Principal (Monitor de Relé Principal Atracado) e;
  • Uma segunda shield que faz a função de interface para o restante das funções do controle, tais como:

    ☻Interrupção da Corrente de Carregamento por Falha de Terra (conhecido em inglês pelo acrônimo GFCI);

    ☻Processamento da função Piloto (incluindo aqui a Conversão CC/CC para obter saídas de tensão de alimentação CC simétricas, de +12V e de -12V, isoladas);

    ☻Acionamento da(s) “bobinas” do(s) Relé(s) Principal(is);

    ☻Interação entre a máquina e o operador humano, com o emprego de um LCD Multicolorido (RGB), que apresenta 2 linhas x 16 caracteres e com um teclado de 5 cinco teclas. A mudança da cor do fundo do LCD é usada para produzir sinalização luminosa de estado e alertas, pertinentes ao estado da operação da EVSE, quanto ao protocolo SAE J1772, dispensando o emprego de um LED RGB extra.

Apesar deste ser um projeto bastante simples, ele é de grande importância estratégica no contexto das políticas de Veículos Elétricos pois, a Open-VSE ajuda, bastante, a promover a popularização dos carregadores domésticos para VEs, para carregamento de veículos compatíveis com o conector e protocolo tipo SAE-J1772 (ou seja, praticamente TODOS os VEs atuais).

Não obstante a relativamente grande oferta de suporte documental ao projeto de Open-EVSEs, deve-se ficar atento e ter cuidados com alguns erros e omissões que atualmente aparecem nas documentações apresentadas, como por exemplo, diagramas de ligação de blocos que se referem a Open-EVSE versão 2 (com fonte avançada, ou seja, com detecção de relé principal atracado) que, no entanto, não mostra os dois sinais digitais de monitoramento de atraque do relé principal sendo enviado da Shield da Fonte Avançada para a placa controladora Arduino.

Assim, estaremos propondo aqui, um projeto (até onde eu sei) renovado e, ao que me parece, inédito em publicação, até aqui , no qual comporemos uma “nova shield” para a plataforma Arduino, dedicada a aplicação de EVSE, para ser uma Shield Única, ou seja, uma shield que englobe a função de fonte avançada, juntamente com todas as demais funções de interface para o restante das funções do controle e de interface humana (que descritas pouco acima), em uma placa única, que é plugada plugada diretamente a placa controladora Arduino.

Assim, mesmo o diagrama de blocos da EVSE apresentado na nossa postagem anterior, apesar de não estar errado, passa a se torna inconveniente na sua forma e precisa ser refeito, conforme a nova versão mostrada abaixo:


No entanto, antes de nos aprofundarmos em detalhes sobre a Shield Open-EVSE que está sendo proposta, vejamos, apenas, alguns comentários, pertinentes a diferenciação entre o Arduino 2009 e o Arduino UNO e outros detalhes sobre comunicação e programação deles.

O Arduino UNO é a última versão do Arduino que é Padrão atual da plataforma Arduino. Este veio cerca de um ano depois do Duemilanove (2009) e, devido a essa defasagem de tempo, apesar de ambas usarem absolutamente o mesmo microcontrolador principal, o Atmega 328, o Arduino UNO se diferencia do Arduino 2009, apenas por um pequeno detalhe de hardware: na parte de comunicação ele usa um microcontrolador em separado, o ATmega8U2, ao invés do FTDI, presente no Arduino 2009. O FTDI de comunicação do Duemilanove não é programável.

FTDI é um acrônimo para Future Technology Devices International, que é uma empresa escocesa criadora de dispositivos semicondutores, especializada em tecnologia USB. Ela desenvolve, manufatura e da suporte a dispositivos e seus programas e drivers relacionados a conversão de RS-232 ou TTL para sinais USB, permitindo que hardwares seriais antigos sejam compatíveis com computadores mais recentes. Como desenvolvedora de circuitos integrados para aplicações específicas, a principal fonte de serviço da companhia é o FTDI Chip, um circuito integrado que é um dispositivo comum encontrado em microcontroladores, tais como na plataforma Arduino 2009.

Já, o microcontrolador RISC ATmega8U2 pode ser reprogramado a partir do terminal de 6 furos logo acima do chip principal Atmega 328 da UNO (destaque em vermelho na figura ao lado). Isso dá mais poder e flexibilidade à projetos avançados, pois possibilita o Arduino UNO trabalhar com qualquer dispositivo USB, como teclados e mouses, em aplicações usando os USB HID API complexos. Isso tornou, consequentemente, a operação de gravação de programas no UNO mais rápida do que era, antes, no Duemilanove.. Isso é uma vantagem interessante pois, quando estamos fazendo sucessivos testes e modificações em no programa (esboço), esperar os LEDs verdinhos (TX-RX) do Arduino pararem de piscar, parece durar uma eternidade.

No caso da última revisão da placa Uno, o microcontrolador dedicado da comunicação USB passou a ser o Atmega16U2, ao invés do 8U2 encontrado no Uno original (ou o FTDI encontrado em gerações anteriores). Isso permite taxas de transferência ainda mais rápidas e mais memória. Não há drivers necessários para Linux ou Mac (inf para o Windows é necessário e incluído no IDE Arduino), e a capacidade de ter o Uno mostrar-se como um teclado, mouse, joystick, etc

A placa Uno R3 Uno também adiciona os pinos SDA e SCL  próximos ao AREF (compare foto anterior, que é uma placa Uno anterior ao R3, com a foto Uno R3 que virá seguir). Além disso, há dois pinos de novas colocadas perto do pino de RESET. Um deles é o que permite que os IOREF escudos para se adaptar à voltagem fornecida a partir da placa. O outro é um não conectado, e é reservada para efeitos futuros. O R3 Uno trabalha com todos os escudos existentes, mas pode se adaptar a novos escudos que usar esses pinos adicionais.

Arduino é uma plataforma open-source de computação física baseada em uma simples placa I / O e um ambiente de desenvolvimento que implementa o processamento / linguagem fiação. Arduino pode ser usado para desenvolver independentes objetos interativos ou pode ser conectado ao software em seu computador (por exemplo, Flash, Processing, MaxMSP). O IDE de código aberto pode ser baixado gratuitamente (atualmente para Mac OS X, Windows e Linux).

O Arduino Uno R3 requer a pasta de drivers Arduino 1,0 para instalar corretamente em alguns computadores. Testes confirmaram que a Uno R3 pode ser programada em versões mais antigas do IDE Arduino. No entanto, a primeira vez usando o R3 em um novo computador, você precisará ter Arduino 1.0 instalado na máquina.

Todavia, nada disso implica em nenhuma outra diferença que mereça maior preocupação. O Arduino Duemilanove não tem diferenças de software com o Arduino UNO e, assim, é 100% compatível para qualquer situação que o UNO possa enfrentar. Então, na prática, eles são exatamente iguais, exceto pelo detalhe da comunicação via USB: o Uno usa um chip de comunicação serial USB mais novo, que pode ser programado para funcionar como USB HID (Human Interface Devices).

Universal Serial Bus (USB) é uma arquitetura de comunicações que proporciona um subsistema computadorizado a capacidade de interligar uma série de dispositivos utilizando um cabo de 4 vias simples. O USB é, na verdade, um laço de comunicação serial a dois fios que funciona em ambos velocidades, 1,5 ou 12 Mbits/s (MB).

Protocolos USB pode configurar dispositivos na inicialização ou quando eles estão conectados em tempo de execução. Estes dispositivos são divididos em classes de dispositivos diversos. Cada classe de dispositivo define o comportamento comum e protocolos para dispositivos que servem funções similares. Alguns exemplos principais de classes de dispositivos USB são a seguintes:

  • Exibição (ex.: Monitor);
  • Comunicação (ex.: Modem);
  • Áudio (ex.: Alto-falantes);
  • Armazenamento de Massa (ex.: Pen drive);
  • Interface Humana (ex.: Luva de dados).

Então, com as placas Arduino mais novas, não apenas a UNO e a atual Uno R3, como também a recém-lançada Arduino Leonardo, graças ao ATmega8U2 (Atmega16U2, no caso da Uno R3 e Atmega 32U4 no caso do Leonardo), podemos usar uma ATmega8 para ler sinais de controle e fornecer conectividade USB, com a pilha V-USB, enumerando cada dispositivo como um dispositivo HID.

Isso provê algumas características muito interessantes, principalmente a capacidade da placa controladora Arduino poder agir, por exemplo, como um teclado ou mouse USB. Este recurso não é exclusivo do Leonardo pois, o Arduino Uno também pode servir como um teclado USB HID, a partir de apenas uma atualização de firmware.

No entanto, eu não vislumbro ocasião para emular um teclado ou um Joystick USB e, como a diferença entre UNO e Duemilanove, na praticamente é apenas isso, então para mim “é tudo a mesma coisa”. Talvez uma boa razão para adquirir o UNO seja, simplesmente, o fato de que ele é a atual referência para plataforma Arduinos padão. Mas atente para o fato de que, sendo o seu chip de comunicação serial USB programável, isso pode significar, hoje e, ainda por um certo tempo, um preço ligeiramente maior para a UNO frente a 2009. Todavia, o mercado é algo imprevisível: minha últimas aquisição (5 peças) foi do UNO, a R$ 54,90 cada, porém, cada peça forçosamente acompanhada do cabo USB.

Placa atual Uno R3

Depois que a placa Arduino estiver instalada e funcionando dentro de uma EVSE que se tornar operante, muito provavelmente, o seu porte USB, nunca mais será usado. Algumas pessoas pura e simplesmente tem preconceito da 2009, por seu nome estar associado a uma época que já ficou no passado, outros, pelo simples fato de que o cristal de 16MHz mudou de lugar de uma placa para outra, acreditam erroneamente, que a Duemilanove é mais precisa em aplicações de tempo crítico pois, pensam que a Uno, diferente do Duemilanove, tem um ressonador capacitivo instável: isso tudo bobagem!

O Bootloader:

Porém, outro ponto importante é a redução no tamanho do Bootloader, que no caso do Uno ocupa apenas 0,5 KB, contra 2 KB do Duemilanove, o que implica em mais espaço disponível na memória para a programação do usuário.

O Arduino é “Open” (Hardware e software) e pode ser fabricado em qualquer lugar. Os criadores do Arduino são italianos e fabricam o modelo na Itália assim o Arduino Uno Italiano muitas vezes é chamado de original. Mas não ha diferença estrutural entre os que são fabricados em outro local. A diferença é fabrica mesmo.

Você pode, também, trocar o chip microcontrolador Atmega da placa por outro, tanto no Arduino Duemilanove, quanto no Uno, ambos aceitam o Atmega8, Atmega168 ou Atemga328. Entretanto é preciso não se esquecer que é necessário fazer, antes de tudo, o carregamento do bootloader do Arduino para chip novo, para que tudo funcione perfeitamente.

O bootloader nada mais é do que um pequeno pedaço de software que vem pré-gravado para os chips que vêm nas placas Arduino. Todavia, ele é muito importante, permitindo, por exemplo, que se faça o carregamento de esboços de programas para a placa Arduino, sem a necessidade do auxílio de hardware externo de gravação.

Reiniciar uma placa Arduino refere-se, justamente, ao comando que causa executar o programa do bootloader (se houver um bootloader previamente carregado). O bootloader rodando, produz pulsos no pino da saída digital 13 (pode-se conectar um LED a ela para ter certeza de que o bootloader esteja instalado). O bootloader então aguarda alguns segundos para que comandos ou dados possam chegar a partir do computador.

Normalmente, estes dados enviados são os códigos de um esboço, que o bootloader então escreverá para a memória flash no chip ATmega8. Alguns segundos depois, o bootloader lança, automaticamente, esse programa recém-carregado. No entanto, se os dados não chegam a partir do computador, o bootloader lançará qualquer último programa do usuário que tenha sido previamente enviados para o chip. Se o chip ainda é "virgem" e o bootloader é o único programa na memória, ele inicia novamente, de modo recorrente.

A utilização de um carregador de inicialização (bootloader) permite evitar a necessidade da utilização de hardware de programadores de externo adicional. No entanto, gravar o bootloader num chip novo requer um programador externo.

Se você quiser usar o toda a área de programa da memória (flash) do chip ou se você deseja evitar o tempo de atraso devido ao processamento do bootloader, então você precisa gravar seus esboços (programa do usuário) usando sempre um programador externo.

Para gravar o bootloader, você precisa ter disponível um AVR-ISP (programador in-system) ou construir um Programador por Porta Paralela ou DAPA (Direct AVR Parallel Access). Certifique-se de conectá-lo no caminho certo. A placa deve ser alimentada por uma fonte de alimentação externa ou via porta USB.

Do mesmo modo, para fazer o carregamento do firmware para uma Open-EVSE poderá requerer um ISP, se não houver o bootloader previamente carregado no microcontrolador. Há muitos programadores compatíveis AVR disponíveis. Os ISPs são projetados para atualizações de campo de produtos existentes, usando a arquitetura Atmel AVR e com base em hardware e software STK500 .

O Mature AVR ISP, da própria Atmel, é uma opção. O Kit USBtinyISP de Adafruit é uma outra boa escolha, é barato e aberto. Algumas ferramentas, como o Avrdude, o Arduino IDE e o AVR Studio, suportam todos os dispositivos AVR ISP. A “ajuda online ” do AVR Studio, por exemplo, contém as informações mais atuais e uma lista completa de dispositivos suportados.


Já o programador paralelo requer apenas 3 resistores e os conectores. A programação serial (SPI) do AVR envolve apenas pulsar adequadamente três sinais lógicos (RESET, SCK e MOSI) e ler em momentos adequadas um quarto sinal (MISO). Um trabalho perfeito para a porta paralela de um PC, controlada por um software adequado. O programador paralelo consiste simplesmente em conectar alguns pinos da porta paralela aos pinos do microcontrolador, com resistores em série no caso dos sinais MISO, MOSI e SCK:


Neste caso, a alimentação do microcontrolador precisará ser feita com uma fonte externa.

Atente para não confundir, como muitos costumam fazer, os acrônimos de ISP (In-System Programming), originário na cultura AVR, que é o mesmo que ICSP (In-Circuit Serial Programming) na cultura PIC, com SPI (Serial Peripheral Interface).

ISP e ICSP, referem aos dispositivos de programação, enquanto que, SPI refere-se ao protocolo serial. A Interface Periférica Serial (SPI) é composto por três fios: um para o sinal Serial Clock (SCK), ou seja, clock serial, outro para o sinal Mestre In - Slave Out (MISO), ou seja, dados que vão do escravo para o mestre, e, Master Out - Slave In (MOSI), ou seja, dados que vão do mestre para o escravo. Ao programar o AVR, o programador In-System (ISP) sempre opera como o Mestre, e o sistema alvo sempre operar como Escravo.

Um programador In-System (Master) fornece os pulsos de relógio para a comunicação na linha SCK. Cada pulso na Linha SCK transfere um bit do Programador (mestre) para o destino (escravo) na linha MOSI. Ao mesmo tempo, cada pulso na Linha SCK transfere um pouco do alvo (Slave) ao programador (Master) na linha MISO.

Obviamente, para assegurar a comunicação correta sobre as três linhas de SPI, é necessário ligar o programador no para a terra no ponto (GND).

Para entrar e permanecer no Modo de Programação Serial, a linha de reset do microcontrolador AVR tem que ser mantida ativo (baixo). Essa mesma linha (/RES), também é comumente utilizada para seleção de escravo, linha de seleção, selecionando um escravo dentre vários, sendo trazida nível baixo para ser ativo.

Além disso, para realizar um Erase Chip, o Reset tem que ser pulsado até terminar o ciclo Erase Chip. Para facilitar a tarefa de programação, é preferível deixar o programador assumir o controle da linha de reset do microcontrolador alvo para automatizar esse processo usando uma quarta linha de controle quarta (Reset).

Para permitir a programação de microcontroladores alvo operando sob qualquer tensão dentro da faixa permitida (2,7 - 6,0 V), o programador pode extrair energia do sistema alvo (VCC). Isto elimina a necessidade de uma fonte de alimentação separada para o programador. Em alternativa, o sistema alvo pode ser alimentado a partir do programador, no momento da programação, eliminando a necessidade de ligar o sistema alvo através do seu conector de alimentação regular durante a programação.

Instalado o ISP, em seguida, basta lançar ou o comando "Bootloader Burn" (para AVR-ISP) ou "Burn Bootloader Parallel", a partir do menu Ferramentas do ambiente (IDE) Arduino. Gravar o bootloader pode levar 15 segundos ou mais.

Pode ocorrer alguma dificuldade em se fazer funcionar adequadamente o carregador paralelo em um PC com Windows XP, uma vez que o Windows XP faz polling da porta paralela (Windows periódica e imprevisivelmente escreve para a porta paralela, fazendo pesquisa para novos dispositivos, o que acarreta a interrupção do processo de gravação de bootloader. A chave do Registro pode desativar parcialmente esse comportamento. Você precisará deste patch de registro:

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Parport\Parameters]
"DisableWarmPoll"=dword:00000001

As versões mais novas do bootloader comunica-se com o computador a 19200 baud; versões mais antigas usam 9600 baud. A fim de conseguir carregar programas para a placa, esta taxa deve coincidir com o parâmetro serial.download_rate em seu arquivo preferences.txt (que assume por default 19200).

Um bootloader pré-compilado (arquivo . hex) vem com o ambiente Arduino, que comunica a 19200 baud (mas veja a nota para placas mais antigas acima). Ambos os comandos "Burn Bootloader" no ambiente Arduino usam uma ferramenta open-source, Uisp. Há quatro etapas (cada uma chamada separada para Uisp):

  • desbloquear a seção de bootloader do chip;
  • definir os fusíveis no chip;
  • fazer o upload do código do bootloader para o chip e;
  • bloquear a seção de bootloader seção do chip.

Estes são controlados por um conjunto de preferências no arquivo de preferências Arduino:

  • bootloader.programmer (valor padrão: STK500) é o que deefine o protocolo usado pelo bootloader;
  • bootloader.unlock_bits (valor padrão: 0xFF) é o valor a ser escrito para o byte bloqueio ATmega8 para desbloquear a seção bootloader;
  • bootloader.high_fuses (valor padrão para um ATmega8 em uma placa Arduino: 0xca) é o valor a ser escrito para o byte mais alto dos fusíveis do ATmega8;
  • bootloader.low_fuses (valor padrão para um ATmega8 em uma placa Arduino: 0xDF) é o valor a ser escrito para o byte mais baixo dos fusíveis dos ATmega8;
  • bootloader.path (valor padrão: bootloader) é o nome do caminho (relativo ao diretório do aplicativo Arduino) contendo o arquivo bootloader pré-compilado;
  • bootloader.file (valor padrão: ATmegaBOOT.hex) é o nome do arquivo que contém o código do bootloader pré-compilado (em bootloader.path);
  • bootloader.lock_bits (valor padrão: 0xCF) é o valor a ser escrito para o byte bloqueio ATmega8 para bloquear a seção bootloader (para que ele não seja acidentalmente substituído (sobrescrito) quando você carregar um esboço.

Saber destes detalhes é muito bom, porém,

Programação:

A interface do hospedeiro é simples, podendo ser escrita em várias linguagens. A mais popular é a Processing, mas outras que podem comunicar-se com a conexão serial são: Max/MSP, Pure Data, SuperCollider, ActionScript e Java. Em 2010 foi realizado um documentário sobre a plataforma chamado “Arduino: The Documentary”. Confira em Português: http://vimeo.com/31389230

O Arduino Duemilanove pode ser programado com o software Arduino. O ATmega328 no Arduino Duemilanove vem pré-gravado com um bootloader que permite enviar novos programas sem o uso de um programador de hardware externo. Ele se comunica utilizando o protocolo original STK500.

O protocolo STK500 publicado juntamente com a versão 4.11 do AVRStudio é totalmente incompatível com as versões inicial e anteriores, àquela do protocolo. A partir dali, o protocolo STK500 passou a ser, além de baseado em protocolos anteriores feitos para ferramentas AVR e outros, e totalmente compatível com eles, não havendo sobreposição ou redefinição de comando algum.

Todos os comandos (os dois comandos e respostas) são caracteres ASCII padrão entre 0x00 – 0x7F. Os dados podem ser qualquer entidade com valor entre 0x00 – 0xFF.

O STK500 não precisa de mais estruturas de dados de dependentes de dispositivos no hardware programador. Toda a lógica dependente do dispositivo, passou a estar no software do programador em execução no PC. A partir dali, o AVRStudio (para Windows) e avrdude (para sistemas operacionais múltiplos, incluindo Linux) passou a suportar esta versão 2 do protocolo STK500.

A interface de hardware físico ao PC é USB. Dessa forma, podemos construir um programador rápido e moderno, que pode ser usado no Linux, BSD, Windows e MacOS X.

A definição de todos os comandos, respostas, parâmetros e outros valores definidos podem ser encontrados no ficheiro "command.h". Os códigos de dispositivo pode ser encontrado no arquivo "devices.h". Esses arquivos estão localizados na seção de software no site da Atmel,

Também poder-se-á programar o ATmega328 através do ICSP (In-Circuit Serial Programming) header;

Reset automático (Software):

Algumas versões anteriores do Arduino requerem um reset físico (pressionando o botão de reset na placa) antes de carregar um esboço. O Arduino Duemilanove é projetado de modo a permitir que isto seja feito através do software que esteja correndo no computador a que está ligado. Uma das linhas de controle de hardware (DTR) do FT232RL está ligada ao reset do ATmega328 por via de um capacitor de 100 nF.

Quando é feito o reset a esta linha (ativo baixo), o sinal cai por tempo suficiente para efetuar o reset ao chip. O software Arduino usa esta característica para permitir carregar o programa simplesmente pressionando o botão “upload” no ambiente Arduino. Isto significa que o “bootloader” pode ter um “timeout” mais curto, já que a ativação do DTR (sinal baixo) pode ser bem coordenada com o início do “upload”.

Esta configuração tem outras implicações. Quando o Duemilanove está ligado a um computador com o Mac OS X ou Linux, ele faz o reset cada vez que a ligação é feita por software (via USB). No próximo meio segundo aproximadamente, o bootloader estará correndo no Duemilanove. Considerando-se que é programado para ignorar dados espúrios (i.e. qualquer coisa a não ser um “upload” de um novo código), ele interceptará os primeiros bytes dos dados que são enviados para a placa depois que a ligação é aberta.

Se um esboço que se encontra sendo executado na placa recebe uma configuração ou outros dados ao inicializar, dever-se-á assegurar que o software esteja em comunicação e espere um segundo depois de aberta a ligação antes de enviar estes dados.

USB:

Conectores Universal Serial Bus (USB) são destinadas a conexão de dispositivos periféricos externos com um computador tais como o mouse, o teclado, um disco rígido portátil, câmara digital, telefone VoIP (Skype) ou da impressora.

Teoricamente, é possível se conectar a um controlador host USB de cerca de 127 dispositivos. A velocidade máxima de transferência é 12 Mbit / s para o padrão USB 1.1 e 480 Mbit / s para USB 2.0 de alta velocidade. Fisicamente, os conectores de padrões USB 1.1 e 2.0 de alta velocidade são idênticos. Distinções são cobertos em velocidade de transferência e um conjunto de funções de controlador de host USB de um computador, e dispositivos USB.

USB fornece uma fonte de energia para dispositivos, portanto, eles podem trabalhar a partir da interface sem uma fonte adicional (a interface USB provê alimentação necessária, não mais do que 500 mA em 5V). Existem três tipos básicos de conectores USB: USB A, USB B e mini USB.


Proteção contra sobrecorrente USB:

O Arduino Duemilanove tem um fusível que protege a porta USB do seu computador contra sobrecarga. Apesar da maioria dos computadores possuírem proteção interna própria, o fusível proporciona uma proteção extra. Se mais de 500 mA forem demandados a partir da porta USB, o fusível irá automaticamente interromper a ligação até que a sobrecarga seja eliminada.

Características físicas:

O comprimento e largura máximos do Duemilanove são 2,7” (68,50 mm) e 2,1” (53,34 mm) respectivamente, com o conector USB e o jaque de alimentação indo um pouco além destas dimensões. Três furos de fixação permitem a montagem da placa numa superfície ou caixa. Note que a distância entre os pinos de entrada e saídas digitais nº 7 e nº 8 é de 160 mil (milésimos de polegada), não é sequer múltiplo do espaçamento de 100 mil dos outros pinos.

O Primeiro Projeto com o Arduino: Colocação de um LED para piscar!

Existem dois blocos distintos de instruções entre chavetas (box 2).

A função setup() é chamada quando o código (esboço) é executado. Use-a para:

  • Iniciar variáveis;
  • O modo como os pinos deverão funcionar: entrada (INPUT) ou saída (OUTPUT);
  • Bibliotecas;
  • Cabeçalhos

Mas, atenção! Tudo o que estiver no setup() será executado apenas uma vez imediatamente após o esboço ter sido carregado para o microcontrolador (ou ser após o microcontrolador ser alimentado).

Caso o Botão de RESET, que se encontra na placa do Arduino, seja pressionado, ou houver uma falha na alimentação, o código será reiniciado e nessa condição especial o setup() será executado novamente.


A função loop() tem um pressuposto fundamental que é repetir infinitamente o que está escrito. Bem... mas qual a finalidade disso?

Ao repetir a mesma função, o microcontrolador nunca para de funcionar. Imagine como seria se ao digitar uma letra no editor de texto parasse de funcionar, e fosse preciso abri-lo nova-mente para escrever as outras letras da palavra? Ou, se após um carro passar num semáforo de trânsito, as luzes não brilhassem mais?

Basicamente, o loop() será o seu escravo e o setup() dirá como o escravo se comportará.

Usa-se: // (duas barras invertidas) para fazer comentários na linha de código. O objetivo é deixar o mais claro possível para que terceiros possam entender o programa.

Tudo que é deixado como comentário será descartado no momento da gravação no microcontrolador.

Na próxima postagem, trataremos menos de Arduíno e mais de questões diretamente ligadas ao projeto da EVSE.

quarta-feira, 26 de setembro de 2012

O Arduino Uno (ou Duemilanove) Aplicado a uma EVSE (SAE-J1772 CA Nível 2) - Parte 1


O Arduíno é uma plataforma de prototipagem eletrônica de hardware livre, ou seja, do tipo denominado “open-source”, projetada com um microcontrolador Atmel AVR, com suporte embutido de entrada/saída, e linguagem de programação padrão, a qual tem origem na plataforma Wiring, cujo código empregado é essencialmente linguagem de programação C/C++. Com isto, temos uma ferramenta acessível de baixo custo e, relativamente, fácil de usar.

O termo “Wiring” refere-se ao sistema que denominamos Plataforma para Programação, que é composta pelo conjunto que incluí a linguagem de programação, o Ambiente de Desenvolvimento Integrado (IDE, do inglês Integrated Development Environment), que funciona como um aplicativo instalado em um computador pessoal, bem como do hardware do sistema microcontrolador de placa única.

O sistema foi criado junto a designers e artistas de forma a atender ao objetivo que tanto usuários avançados, quanto intermediários ou iniciantes, ao redor do mundo, encontrassem facilidade de aprendizagem de uso e pudessem compartilhar suas ideias, conhecimentos e experiências coletivamente.

O Wiring permite escrever programas de controle para os aparelhos conectados a ele e assim criar todo o tipo de objetos interativos, correspondendo a experiência do usuário através do mundo físico. Com poucas linhas de código é possível conectar-se a alguns poucos componentes eletrônicos, formando, por exemplo, um sistema simples de Aquisição de Dados (DAQ), que é um processo de medição de um fenômeno físico, tal como intensidade de luz, som, temperatura, pressão, vazão, velocidade, nível, etc, com o uso do hardware do sistema microcontrolador (ou de um computador).

Além do hardware do sistema microcontrolador (que, no caso, consiste na placa Arduíno), um sistema DAQ é formado, também, por um ou mais sensores, os quais costumam ser específicos para a medição de cada tipo de grandeza física, cuja entrada detecta a variação daquela grandeza, respondendo em sua saída com um sinal elétrico analógico de tensão ou de corrente (ou com um sinal de pulsos elétricos, ou ainda com um sinal ótico), que é proporcional à intensidade da grandeza física medida.

Também faz paz parte de um sistema DAQ, o software programável, que é a sequência de instruções a serem seguidas e executada pelo hardware do sistema microcontrolador, lembrando que, apenas em umas poucas aplicações o objetivo de se realizar a medição de uma grandeza física é, pura e tão somente, o de poder apresentar o valor daquela medição a um observador mas, sim, de uma maneira mais comum, é o de usar a informação da medição para estabelecer um laço de controle, de modo que as saídas do hardware do sistema microcontrolador possam comandar, de maneira adequada, um ou mais atuadores.


Como exemplo, podemos desejar aquecer um certo material à uma dada temperatura. Para isso monitoramos a temperatura do material, enquanto regulamos a quantidade de energia que é aplicada sobre o atuador de aquecimento (uma ou mais resistências, por exemplo, que podem aquecer o material por efeito Joule), fazendo com que a temperatura do material possa ser estabilizada, com certa precisão, em torno do valor desejado.

O Projeto Arduíno:


O projeto Arduíno foi iniciado em 2003 por Hernando Barragán (Universidad de Los Andes - Colômbia) através do Interaction Design Institute Ivrea, na Itália. Atualmente se desenvolve na Escola de Arquitetura e Design da Universidade de Los Andes, em Bogotá, Colômbia. Construído sobre o "Processing", um projeto aberto de autoria de Casey Reas e Benjamin Fry, sua linguagem foi desenvolvida com a ajuda do Grupo de Computação e Estética da MIT Media Lab.

A placa única pode ser usada para o desenvolvimento de Objetos Interativos Independentes, os quais requeiram um sistema de controle integrado ou embarcado, ou ainda para desenvolvimento de subsistemas que permaneçam conectados a um computador hospedeiro. Uma típica placa Arduíno é composta por um controlador, algumas linhas de E/S digital e analógica, além de uma interface serial ou USB, para interligar-se ao hospedeiro, que é usado para programá-la e / ou interagi-la em tempo real.

O Arduíno é livre, no sentido que qualquer desenvolvedor é livre para montar seu próprio Arduíno e ainda modificá-lo. Tanto o software, quanto o hardware. Existe uma extensa comunidade desenvolvendo as mais diversas aplicações, programas e "Shields" (placas de expansão) para serem usados com uma placa Arduíno mãe. Em geral, uma (ou mais de uma) placa de expansão (Shields) é que permite que os propósitos gerais da placa controladora Arduíno sejam utilizados de uma maneira específica para uma dada aplicação.

As placas controladoras da plataforma Arduíno que são consideradas padrão, ou seja,  todos Arduinos com microcontroladores de 28 pinos, como, por exemplo, o 2009 e o Uno, são ambas, baseadas em um mesmo microcontrolador de 8-bits, de baixa potência e alto desempenho, fabricado pela Atmel, o ATmega328P.

O ATmega328P pertence à série 48PA/88PA/168PA/328P de microcontroladores CMOS de 8-bits, de baixa potência, baseada em arquitetura RISC de microcontrolador AVR. Executando as instruções poderosas em um único ciclo de clock, o ATmega48PA/88PA/168PA/328P atinge taxas aproximadas de 1 MIPS (acrônimo de Millions of Instructions Per Second, que significa Milhões de Instruções Por Segundo), por MHz, com uma frequência de clock máxima de 16 MHz, permitindo, ainda, ao projetista do sistema, otimizar o consumo de energia em função da velocidade de processamento.

O núcleo AVR combina um poderoso conjunto de instruções com 32 registradores de uso geral de trabalho. Todos os 32 registradores estão diretamente ligados à unidade lógica e aritmética (ULA), permitindo que dois registros independentes sejam acessado em uma única instrução que é executada em um único ciclo de clock. A arquitetura resulta em um código mais eficiente ao conseguir throughputs até dez vezes mais rápido do que Microcontroladores CISC convencionais. O ATmega48PA/88PA/168PA/328P oferece os seguintes recursos:

  • 4K/8K bytes de memória flash programável residente no chip do microprocessador, com capacidade de realizar operações de leitura e escrita simultâneas;
  • 256/512/512/1K bytes de EEPROM;
  • 512/1K/1K/2K bytes de SRAM;
  • 23 linhas E / S de uso geral;
  • 32 registradores de propósito geral de trabalho;
  • 3 Contadores / Temporizadores flexíveis, com modos de comparação, interrupções internas e externas;
  • 1 USART serial programável;
  • 1 interface serial as 2 fios, orientada ao byte;
  • 1 porta serial SPI;
  • 1 Conversor A/D de 6-canais 10-bit (8 canais em nos encapsulamentos TQFP e QFN / MLF);
  • 1 temporizador Watchdog programável com oscilador interno e cinco modos de economia de energia selecionáveis por software.

Seis Modos de Economia de Energia:


A fim de permitir que haja uma melhor sustentabilidade ambiental em aplicações embarcadas, em que a alimentação seja provida por bateria, ou mesmo para se obter um melhor desempenho de controle, pode-se fazer uso de algum, ou de uma combinação de alguns, dos seis modos de economia de energia.
O modo de “Ocioso”, por exemplo, interrompe a CPU, permitindo que a SRAM, os Temporizadores / Contadores, a USART, a Interface Serial a 2 fios, a porta SPI e o sistema de interrupção continuem funcionando.

O modo “Desliga” salva o conteúdo dos registradores, mas congela o oscilador, desativando todas as outras funções, até a próxima interrupção ou reinicialização do hardware.

Em modo de “Economia de Energia”, o temporizador assíncrono continua a funcionar, permitindo ao usuário manter uma base para temporização, enquanto o resto do dispositivo está dormindo.

No modo “Redução de Ruído do Conversor A/D”, interrompe a CPU e todos os módulos de E / S, exceto temporizador assíncrono e o conversor A/D, para minimizar o ruído provocado pelas comutações digitais durante uma conversão A/D.

Em modo “Espera”, o oscilador de cristal / ressonador está sendo executado enquanto o resto do dispositivo está dormindo. Isso permite muito rápido start-up combinado com baixo consumo de energia.

O AVR ATmega48PA/88PA/168PA/328P possui suporte de um conjunto completo de ferramentas de programação e sistema de desenvolvimento, incluindo compiladores C, montadores de Macro, depurador / simuladores de programa, emuladores in-circuit e kits de avaliação.

Diagrama de Blocos:




Open-Source (Código Fonte Aberto):


O termo “código aberto”, ou “open-source” em inglês, foi criado pela entidade OSI (Open Source Initiative) e refere-se a software também conhecido por software livre. Genericamente trata-se de software que respeita as quatro liberdades definidas pela Free Software Foundation (FSF), compartilhadas também pelo projeto Debian, nomeadamente em "Debian Free Software Guidelines (DFSG)". Qualquer licença de software livre é também uma licença de código aberto (Open Source), a diferença entre as duas nomenclaturas reside essencialmente na sua apresentação.

Enquanto a FSF usa o termo "Software Livre" envolta de um discurso baseado em questões éticas, direitos e liberdade, a OSI usa o termo "Código Aberto" sob um ponto de vista puramente técnico, evitando (propositadamente) questões éticas. Esta nomenclatura e discurso foram cunhados por Eric Raymond e outros fundadores da OSI com o objetivo de apresentar o software livre a empresas de uma forma mais comercial evitando o discurso ético.

Em consequência disso, sempre há bastante suporte para a maioria dos problemas que se pode encontrar em meio ao desenvolvimento de aplicações com Arduíno, basta procurar ou postar suas dúvidas em algum dos muitos fóruns ou comunidades de Arduíno

O objetivo deste estudo do Arduíno é com vista a, por fim, poder usá-lo como dispositivo que solucione a necessidade de automação de Estações de Carregamento de Veículos Elétricos padrão SAE-J1772 (de uso residencial, também denominada de EVSE para CA (Corrente Alternada), de nível 2). Assim, estaremos empregando uma placa Arduíno na composição de uma Open-EVSE (EVSE = Electric Vehicle Supply Equipment), que é um equipamento de relativo baixo custo para realizar o carregamento de baterias de sistema de tração (baterias principais) de VEs (Veículo Elétricos), podendo prover aos VEs a ela conectado, uma alimentação monitorada de CA bifásica de 220V, para correntes de carregamento de até o limite máximo de 80A.

A necessidade mínima de automação de uma EVSE SAE J-1772 CA Nível 2, se apresenta simples o bastante para que seja feita, tranquilamente, com um Arduíno, podendo ainda este mesmo controlador controlar também, via comunicação I2C, um “shield” mostrador (LCD monocromático 16x2 Caracteres) que torna a operação de carregamento de um VE algo mais simples e feita de modo bastante interativo, com um botão podendo navegar por um menu apresentado no LCD, para modificar algumas das configurações básicas EVSE com este botão, como, por exemplo, a máxima corrente permitida que o circuito da instalação elétrica pode fornecer para operação de carregamento.

A vantagem deste shield é que ele permite controlar um LCD 16x2 caracteres, com até 3 níveis de luz de fundo e 5 pinos de teclado usando apenas os dois pinos de I2C no Arduíno! A melhor parte é que você realmente não perde o uso desses dois pinos, uma vez que você pode manter os sensores baseados em I2C, RTCs, etc, compartilhando o barramento I2C. Esta é uma maneira super prática de adicionar um mostrador (com teclado) sem toda aquela fiação desagradável.

Este shield é perfeito para quando você quer construir um projeto independente, com sua própria interface de usuário. Os quatro botões direcionais, mais botão "Select" permite o controle básico sem ter que anexar um computador volumoso.

Para obter conhecimento sobre a EVSE escopo deste projeto, consulte as seguintes postagens anteriores deste blog:


EVSE - Electric Vehicle Supply Equipment (Equipto de Abastec. de Veículo Elétr.) - Nível 1 e 2:

O Arduíno foi projetado na cidade de Ivrea, Itália, em 2005, com o intuito de interagir em projetos escolares de forma a ter um orçamento menor que outros sistemas de prototipagem disponíveis naquela época. No Brasil temos a versão industrializada da TATO Equipamentos Eletrônicos, que desenvolveu o seu “TATUINO”.

A placa Arduíno é composta por um controlador, algumas linhas de E/S digital e analógica, além de uma interface serial ou USB. Ela não possui recurso de rede, assim é comum, quando necessário, combinar um ou mais Arduínos, usando extensões apropriadas denominadas “Shields”.

O termo “Shield” refere-se às placas que podem ser conectadas em cima do PCB Arduíno base, estendendo as suas capacidades originais. Os vários diferentes shields seguem a mesma filosofia que da ferramenta original: eles são fáceis de montar e baratos de produzir.

Algumas das Shields mais populares são a Arduíno Xbee shield, que permite múltiplas placas Arduíno se comunicarem sem fios (wireless), em distâncias de até 100 pés (dentro de casa) ou 300 pés (ao ar livre), utilizando o Maxstream Xbee Zigbee módulo e, a Arduíno Motor Control Shield v1.1, que permite controlar motores DC e ler Encoders (Codificadores de Pulso).

Arduíno Software:

O termo IDE refere-se a um programa de computador que reúne características e ferramentas de apoio ao desenvolvimento de software com o objetivo de agilizar este processo. Geralmente os IDEs facilitam a técnica de RAD (de Rapid Application Development, ou "Desenvolvimento Rápido de Aplicativos"), que visa uma maior produtividade dos desenvolvedores.

Os IDEs de Arduino, em geral, são aplicações multiplataforma escritas em Java, e são derivadas do IDE para a linguagem de programação de processamento e projeto Wiring. Eles são projetado para introduzir a linguagem de programação para leigos, como artistas e outros recém-chegados, que não estão familiarizados com desenvolvimento de software.

Ele inclui um editor de código com recursos como destaque de sintaxe, cela de correspondência (Brace matching), e recuo automático, e também é capaz de compilar e carregar programas para a placa com um único clique. Geralmente não há necessidade de editar Makefiles ou rodar programas em uma interface de linha de comando. Embora a construção de linha de comando seja possível, se necessário, com algumas ferramentas de terceiros, como Ino. Abaixo, usando o Atmel Studio (IDE gratuito).


Cela de Correspondência, ou parêntese de correspondência, é um recurso de realce de sintaxe de editores de texto e certos ambientes de desenvolvimento integrado que destaca combinando conjuntos de correspondência de chaves em linguagens como Java e C ++ que usá-los.

O objetivo é ajudar o programador a navegar através do código e também detectar qualquer correspondência inadequada, o que faria com que o programa não compilasse ou pudesse funcionar errado. Se uma chave de fechamento é deixada de fora, por exemplo, o compilador não poderá reconhecer que o final de um bloco de código tenha sido atingido. Celas de correspondência são particularmente úteis quando estão envolvidos muitas funções “if”, ou outros tipos de laço de programa, estão aninhados.

O IDE Arduino Oficial (Faça o download do software Arduino), vem com uma biblioteca C/C++ que costuma ser denominada "Wiring" (por derivar a partir do projeto da plataforma de programação de mesmo nome), o que faz com que muitas das operações de entrada / saída mais comuns sejam muito mais fáceis de implementar. 


O código-fonte aberto ambiente Arduino torna fácil escrever código e enviá-lo à placa i / o. Ele roda em Windows, Mac OS X e Linux. O ambiente é escrito em Java e baseado em Processing, avr-gcc e outros softwares de código aberto. Programas Arduino são escritos em C / C + +, embora os usuários só precisam definir duas funções para fazer um programa executável:

setup () - executar uma função uma vez no início de um programa que pode inicializar configurações;

loop () - chamada a uma função repetidamente até que a energia dass placa seja removida.

Um programa típico primeiro por um microcontrolador simplesmente pisca um LED ligado e desligado. No ambiente Arduino, o usuário pode escrever um programa como este:

#define LED_PIN 13

void setup () {
    pinMode (LED_PIN, OUTPUT);     // enable pin 13 for digital output
}

void loop () {
    digitalWrite (LED_PIN, HIGH);  // turn on the LED
    delay (1000);                  // wait one second (1000 milliseconds)
    digitalWrite (LED_PIN, LOW);   // turn off the LED
    delay (1000);                  // wait one second
}

É uma característica da maioria de placas Arduino ter uma resistor e um LED e ligados em série entre o pino 13 e o GND, uma característica conveniente para muitos testes simples. O código acima não seria visto por um padrão compilador C + + como um programa válido , então, quando o usuário clica no botão "Enviar para I/O" do IDE, uma cópia do código é escrito para um arquivo temporário com um cabeçalho extra incluído na parte superior e uma função main muito simples () na parte inferior, para torná-lo válido programa C ++.

Uma execução cíclica é uma alternativa para um sistema operativo de tempo real. É uma forma de multitarefa cooperativa, na qual existe apenas uma tarefa. A única tarefa é normalmente realizado como um laço infinito no main (), por exemplo, em C.

O esquema básico é o ciclo através de uma sequência de repetição de atividades, em uma frequência definida. Por exemplo, vamos considerar o exemplo de um sistema embarcado projetado para monitorar um sensor de temperatura e atualizar a informação num monitor mostrador LCD. O mostrador LCD pode ter de ser escrita 10 vezes por segundo (isto é, a cada 100 ms). Se o sensor de temperatura tem de ser lido a cada 50 ms por outras razões, podemos construir um algorítimo com a seguinte aparência:

int main(void)
{
   // initialization code here
 
   while (1)
   {
      currTemp = tempRead();
      lcdWrite(currTemp);

      // waste CPU cycles until 50 ms
      currTemp = tempRead();
      // do other stuff

      // waste CPU cycles until 100 ms
   }
}

O ciclo exterior 100 ms é chamado o ciclo principal. Neste caso, existe também um ciclo interno menor de 50 ms.

Os IDEs Arduino usam o conjunto de ferramentas GNU Libc e AVR para compilar programas, e usam avrdude para carregar programas para a placa.

Como a plataforma Arduino usa ambiente Atmel de desenvolvimento para microcontroladores Atmel, AVR Studio ou o mais recente Estúdio Atmel, também pode ser usado para desenvolver software para o Arduino.

Para fins educacionais há terceiros ambiente gráfico de desenvolvimento chamado Minibloq disponível sob uma licença de código aberto diferente.

Neste artigo, será apresentado o Arduino Duemilanove e a elaboração de um simples projeto com o Arduino UNO.

Apresentação do Arduino Duemilanove:


O Arduino Duemilanove ("2009") é uma placa de microcontrolador baseada no ATmega328. Ele possui:


  • 14 pinos de entrada/saída digital (dos quais 6 podem ser usados como saídas analógicas PWM);
  • 6 entradas analógicas, um cristal oscilador de 16 Mhz;
  • 1 conexão USB;
  • 1 entrada para alimentação;
  • 1 cabeçalho ICSP;
  • 1 botão de reset.
    Assim, ele contém tudo que é necessário para que o microcontrolador funcione, portanto, para começar a explorar os seus recursos, apenas é necessário que se faça a conexão com um computador através de um cabo USB ou use uma fonte de alimentação de corrente contínua ou uma bateria.

"Duemilanove" significa 2009 em italiano e o nome foi escolhido pelo ano de lançamento.

Alimentação:

O Arduino Duemilanove pode ser alimentado via ligação USB, ou por qualquer fonte de alimentação externa. A fonte de alimentação é selecionada automaticamente.

Alimentação externa (não USB) pode ser tanto de uma fonte CC como de uma bateria. A fonte pode ser ligada à placa via um plugue de 2,1mm (com centro positivo) no conector de alimentação. Cabos vindos de uma bateria podem ser inseridos nos pinos GND (Massa) e Vin (entrada de tensão) do conector de alimentação.

A placa pode funcionar com uma alimentação externa de 6 a 20 volts.

Entretanto, se a alimentação for inferior a 7 volts, o pino 5V pode fornecer menos de 5 volts e a placa pode ficar instável. Se a alimentação for superior a 12 volts, o regulador de tensão pode sobreaquecer e avariar a placa. Assim, a alimentação recomendada é de 7 a 12 volts. Os pinos de alimentação são:

  • Vin - Entrada de alimentação para a placa Arduino, quando uma fonte externa for utilizada. Poder-se-á fornecer alimentação por este pino ou, caso se use o conector de alimentação, utilizar a alimentação por este pino;
  • 5V - A fonte de alimentação utilizada para o microcontrolador e para outros componentes da placa. Pode ser proveniente do pino Vin através de um regulador on-board ou ser fornecida pelo USB, ou ainda de outra fonte de 5 volts;
  • 3V3 - Alimentação de 3,3 volts fornecida pelo chip FTDI (Chip do USB). A corrente máxima é de 50 mA.

  • GND - Pinos terra ou massa.

Numa postagem anterior, relativa à EVSE (Por Dentro de uma Estação de Carregamento EV SAE-J1772-AC Nível 2), foi sugerido a utilização de uma fonte CC genérica de 12V de 2A que é vendida “pronta para uso”. Uma fonte de tensão de +12VCC é indispensavelmente necessária por alguns bons motivos:

  • Quando a tensão de +12VCC suprida, chega a placa controladora Arduino, ela vai alimentar diretamente a saída de acionamento do (s) SSR(s), que é o relé principal que liga ou interrompe o fornecimento de energia para o carregamento. Numa placa Open-EVSE V2.0, existe opção de acionamento independente de dois SSRs, porém, pode-se, em geral, empregar um único SSR bifásico (duplo) de potência como relé principal (ver figura abaixo) e,
  • Ser reconvertida, de CC/CC de +12VCC normal, para fonte de saída simétrica +12VCC e -12VCC, isoladas, a fim de alimentar o circuito que realiza a função de “Piloto”, que é inerente à operação comum de uma EVSE de protocolo SAE J1772;
  • Ser reconvertida, via um regulador série, CC/CC de +5V , a fim de, tanto alimentar quanto gerar referência analógica, para microcontrolador da placa Arduíno.


Quanto ao relé principal, a Crydom tem usado inovação e tecnologia para ampliar sua linha de SSRs duplos, criando a série Crydom Evolution "D" e "H12" de SSRs duplos, que oferecem um design mecânico e térmico melhorados, proporcionando saídas de maior capacidade e densidade de energia, com terminais parafusáveis adequado para correntes de carga nominal de 50 ampères / 600 VAC por canal como padrão de saída, provendo, com segurança, energia para carregamento com potência de até 9,9 kVA (45A a 220V).

Cada canal de saída CA apresenta tiristor bidirecional de alta potência, com tolerância elevada contra surtos e encontram-se disponíveis, tanto na versão para comutação no ponto de passagem por tensão zero, como para ponto de comutação aleatória.

A nova geração de SSRs duplos se apresenta com quatro opções diferentes de terminação de entrada de comando (barra de terminais de pinos, conector travante, barras de terminais destacáveis ou parafusos e fio direto) e estão disponíveis com três classificações diferentes de entrada de tensão, incluindo a ampla gama (4 a 32 VDC), versão corrente regulada.

Os novos relés de dois canais estão disponíveis com cobertura transparente anti toque opcional  (IP20) segura, permitindo uma visão clara das terminações e cabos, fornecendo operação de toque seguro. Apresentam, ainda, indicadores de LED de status para cada canal.

Para maiores detalhes sobre Relés de Estado Sólido (SSR - Solid State Relays), veja essa minha publicação no EBAH.

Assim, uma fonte CC de 12V é necessária e indispensável, porém, ela não precisa ser de 2A pois, menos de 0,5A já bastaria. Todavia, o custo da fonte pronta de 2A (R$ 40,00) e, suas dimensões reduzidas (85 x 58 x 32 mm), compensavam o trabalho de ter que se montar uma fonte de alimentação dedicada específica. Para especificar uma fonte de 12V, em geral, atentar para entrada em 220VCA e para a ligação do aterramento juntamente a caixa de metal.

No entanto, a partir da versão 2.0 da open-EVSE, uma nova recomendação passou a demandar o emprego de uma fonte 12VCC avançada, ou seja, uma fonte para uso específico com o EVSE, com potência de apenas 4 Watts, porém, com monitoramento de terra, detecção de L1/120V e L2/240V (detecção de relé principal ativado), nos pontos de teste das linhas da rede CA, antes do local de medição do Transformador de Corrente (TC). Com a nova fonte de alimentação, o diagrama elétrico da EVSE fica conforme apresentado na figura a seguir:


Esta fonte tem a vantagem de fornecer dois sinais digitais (pinos 4 e 5 do conector JP5 da fonte), que vão, ambos para a placa controladora Arduino, onde vão ligados, respectivamente, nos pinos PD0 (RXD – pino 2) e PD1 (TXD – pino 3) do microcontrolador. Estes sinais digitais, correspondem, às informações de estado de cada uma das duas linhas da rede CA disposta na saída da estação de carregamento.

Para gerar tais sinais de monitoramento, o subsistema da fonte avançada emprega dois pequenos CIs com a função específica de Monitor de Linha CA com Saída Lógica (MID400), um para cada linha da rede, seja bifásico (220V, fase 1 e fase 2) ou monofásico (127V, fase e Neutro).


O MID400 é um dispositivo interface de linha CA para sinal lógico, opticamente isolado. É encapsulado em invólucro plástico dual em linha (DIP) de 8 pinos. Uma tensão de linha da CA é monitorizado por dois diodos LED GaAs, ligados num arranjo em antiparalelo em série com uma resistência montada externa (respectivamente R1 e R2, de 22kW).

Um alto ganho de circuito detector detecta a corrente do LED e acciona a porta de saída para um estado lógico baixo (0V ou nível lógico 0). Um tempo de retardo de ligamento e de desligamento típico da ordem de 1ms, garante uma filtragem que neutraliza a cintilação dos LEDs, durante a curta duração do transitório da passagem por zero volts da forma de onda senoidal da tensão de entrada, porém, isso torna a operação em baixa frequência, obrigatória.

O MID400 foi concebido apenas para o uso como um monitor de linha CA (monitor de presença de linha de rede, provendo interface para a condição "relé atracado", entre elementos eletromecânicos, tais como contatores, relés e SSR e o microprocessador. É recomendado para o uso em qualquer aplicação de controle de CA para CC onde o isolamento óptico excelente, confiabilidade de estado sólido, compatibilidade TTL, tamanho pequeno e baixa potência são desejáveis.

Para produzir a alimentação de 12V, o subsistema da fonte avançada emprega um Módulo Conversor CA/CC de operação chaveada, modelo MPM-04S-12, simples, compacto e para montagem em placa. Existe a opção de fonte simples, ou dupla (+12V e +5V), para os conversores da série MPM-04 (MPM-04D-1205), Esta opção seria para aplicação no caso em que a placa controladora não disponha de regulador de +5V próprio.

Memória:

O ATmega328 tem 32 KB de memória flash para armazenar código (dos quais 2 KB são utilizados pelo bootloader), além de 2 KB de SRAM e 1 KB de EEPROM (que pode ser lida e escrita através da “biblioteca EEPROM”).

Entrada e Saída Digitais:

Cada um dos 14 pinos digitais da Duemilanove pode ser usado como entrada ou saída, usando-se as funções de pinMode(), digitalWrite(), e digitalRead(). Eles trabalham com 5 volts. Cada pino pode fornecer ou receber um máximo 40 mA, e tem uma resistência de pull-up interna (vem desligadas de fábrica) de 20 – 50 kΩ. Além disso, alguns pinos de E/S digital têm funções específicas, a saber:
  • Serial: 0 (RX) e 1 (TX) – são usados para receber (RX) e transmitir (TX) dados TTL em série. Estes pinos são ligados aos pinos correspondentes do chip serial FTDI USB-to-TTL;
  • External Interrupts: 2 e 3 - Estes pinos podem ser configurados para ativar uma interrupção por aplicação de um nível baixo, de uma borda de subida ou descida, ou uma mudança de valor. Ver a função attachInterrupt();
  • PWM: 3, 5, 6, 9, 10, e 11 - Fornecem uma saída analógica PWM de 8 bits com a função analogWrite();
  • SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCLK) - Estes pinos suportam comunicação SPI, que embora compatível com o hardware, não está incluída na linguagem do Arduino;
  • LED: 13 - Há um LED já montado e ligado de origem ao pino digital 13. Quando o pino está no valor HIGH, o LED acende; quando o valor está em LOW, ele apaga.

A tecnologia de comunicação SPI (Serial Peripheral Interface) foi desenvolvida originalmente pela Motorola, para a linha de processadores da família MC68K. O SPI é um protocolo síncrono, opera no modo full duplex e O Serial Peripheral Interface - SPI - permite que os dispositivos digitais se comuniquem utilizando apenas 3 ou 4 fios. Assim, dispositivos adicionais podem ser adicionados juntamente, interligados pelo mesmo barramento de dados, com a adição de apenas um único fio de seleção para cada dispositivo.
O protocolo SPI não permite nenhum tipo de endereçamento. Assim, a comunicação só pode ser feita entre dois pontos, sendo um deles definido como Master e o outro Slave. Por meio do protocolo SPI é possível comunicação SPI de microcontroladores AVRs entre si, por exemplo,. Usando o AVRstudio(gratuito) . A comunicação é feita através de apenas três vias :
  • SCLK: trata-se da via de clock, que é entrada (no Slave) ou saída (no Master);
  • MOSI: trata-se da entrada de dados (Data in no Slave), ou seja, a via de recepção;
  • MISO: trata-se da saída de dados (Data out no Slave), ou seja, a via de transmissão;
  • Existe também um quarto pino denominadoque pode ser utilizado do lado Slave. Na maioria dos casos, este pino é opcional e serve como um sinal de Chip Select. Com este recurso podemos fazer o Master controlar no mínimo dois Slaves, ou mais desde que o Master possa controlar controle individualmente os pinos de cada um dos Slaves. Esse controle terá de ser implementado manualmente no software e deve garantir que somente um Slave está ativado de cada vez, evitando conflitos nas E/S.”
Entrada e Saída Analógicas:

O Duemilanove tem 6 entradas analógicas e cada uma delas tem uma resolução de 10 bits (i.e. 1024 valores diferentes). Por padrão, elas medem de 0 a 5 volts, embora seja possível mudar o limite superior usando o pino AREF e um pouco de código de baixo nível. Adicionalmente alguns pinos têm funcionalidades específicas, a saber:

  • I2C: 4 (SDA) and 5 (SCL) – Suportam comunicação I 2 C (TWI) usando a biblioteca Wire (documentação no site do WIRE). Há ainda mais alguns pinos na placa:
  • AREF - Referência de tensão para entradas analógicas. São usados com o analogReference();
  • Reset - Envia o valor LOW para efetuar o RESET ao microcontrolador. É tipicamente utilizado para adicionar um botão de reset aos shields que bloqueiam o que há na placa.

Analise o diagrama de blocos entre os pinos do Arduino e as portas do ATmega 168 e referência do ATmega328.


Port B - pinos B0 até B5
Port C - pinos C0 até C5
Port D - Pinos D0 até D7















Todos os microcontroladores AVR tem “watchdog timer” interno que pode ser usado com sucesso em seus projetos. Atmega328 e outros microcontroladores AVR modernos têm chamado Watchdog Timer (Enhanced WDT). Ele tem algumas características muito úteis, incluindo: fonte de clock separado 128kHz, capacidade de redefinir microcontrolador e gerar interrupção.

Comunicação:

Com o Arduino Duemilanove, a comunicação com um computador, ou com outro Arduino, ou ainda com outros microcontroladores, é muito simplificada. O ATmega328 permite comunicação serial no padrão UART TTL (5V), que está disponível nos pinos digitais 0 (RX) e 1 (TX). Um chip FTDI FT232RL na placa Duemilanove encaminha esta comunicação serial através do USB e os drives FTDI (incluídos no software do Arduino) fornecem uma porta COM virtual para o software no computador. O software Arduino inclui um monitor série que permite que dados simples de texto sejam enviados à placa Arduino.

Já, na placa modelo Uno da plataforma Arduino, optou-se pelo avanço de empregar microcontrolador em separado, o Atmega8U2 para ncaminha esta comunicação serial através do USB. Apesar de ter pouca relevância para o escopo do nosso projeto, detalhes comparativos destes dois modelos de placas (Duemilanove e Uno), da plataforma Arduino, serão vistosa na próxima postagem O Arduino (ou Duemilanove) Uno Aplicado a uma EVSE (SAE-J1772) CA Nível 2 PARTE 2).

Os LEDs RX e TX da placa piscam, quando os dados estão para ser transferidos ao computador pelo chip FTDI. Mas o mesmo não ocorre quando há comunicação série, pela ligação USB, pelos pinos 0 e 1.

A biblioteca SoftwareSerial permite a comunicação série por quaisquer dos pinos digitais do Duemilanove.

O ATmega328 também oferece suporte aos padrões de comunicação I2C (TWI) e SPI. O software do Arduino inclui uma biblioteca Wire para simplificar o uso do bus I2C; para usar a comunicação SPI, veja detalhes na folha de informações do Atmega328.

Aceda, também, aos diagramas dos esquemas eletrônicos completos das placas Arduino Duemilanove e Arduino Uno, e compare-os, atentamente e, se Deus assim permitir, por favor, me aguardem até a próxima postagem.


O Arduino Uno (ou Duemilanove) Aplicado a uma EVSE (SAE-J1772 CA Nível 2) - Parte 2
Licença Creative Commons
Este trabalho de André Luis Lenz, foi licenciado com uma Licença Creative Commons - Atribuição - NãoComercial - CompartilhaIgual 3.0 Não Adaptada.