Portal - FPGA para Todos

Acionamento de Motor CC com FPGA e L298

Introdução

        Neste projeto,acionamos uma ponte H de transístores, baseada no CI L298, com um sistema embarcado no kit de FPGA  do Projeto FPGA para Todos. Este CI permitirá que um pequeno motor CC seja acionado em qualquer sentido de rotação, ou comandado para partir/parar. Esta aplicação será aperfeiçoada ao longo de uma série de artigos, em que apresentaremos projetos desde o comando básico do motor, avançando pelo seu acionamento com PWM e comando via interfaces serial, bluetooth e wireless. No final desta série teremos um "carrinho" controlado por bluetooth ou wireless a partir de um smartphone ou computador.

Para uma melhor compreensão do sistema proposto neste estágio inicial, sugerimos um estudo do vídeo exibido acima.

Descrição Básica do Sistema

A figura abaixo apresenta o diagrama de blocos do sistema construído no FPGA, conectado ao L298 e aos botões. O SOPC (destacado na região em cinza claro) é um microcontrolador construído no núcleo do FPGA com um processador NIOS II e alguns periféricos (baseados em "Propriedades Intelectuais" da ALTERA) que serão utilizados em diversos exemplos deste portal. Detalhamos a seguir os componentes do sistema.

 

Hardware

O SOPC (System on a Programmable Chip):

O sistema aplicado ao FPGA e utilizado neste projeto é o SOPC_2, que foi desenvolvido especialmente para o kit Cyclone IV do Projeto FPGA para Todos, e será discutido posteriormente em outros artigos do portal.  O leitor poderá obter o projeto completo deste SOPC na seção "Downloads", para testá-lo com este e outros projetos disponibilizados no portal, com o kit do Projeto FPGA para Todos ou, eventualmente, adaptado para outra placa de desenvolvimento.  

O SOPC_2 integra um conjunto básico de periféricos úteis, que serão demonstrados em uma série de projetos simples, mas para o acionamento com  L298 foram utilizadas apenas os seguintes: 

  • BOTOES: Esta porta esta ligada aos botões do kit Cyclone IV.
  • PORT_B: Esta porta esta ligada aos pinos do último conector do kit Cyclone IV. Estes pinos que irão configurar o CI L298, habilitando e definindo o sentido de rotação dos motores.

O CI L298:

        Este circuito integrado é uma ponte H dupla, utilizado para controle de pequenos motores CC ou motores de passo,  tendo uma capacidade de corrente de 2A por ponte H.  Cada ponte H é controlada por 3 sinais de entrada, dois deles para determinar sentido de corrente na carga (In4/In3 para a segunda ponte H e In2/In1 para a primeira ponte H) e um para habilitação (EnA para a primeira ponte H e EnB para a segunda ponte H).

O módulo L298:

      O módulo L298 é uma placa que permite o acionamento de pequenos motores CC ou de passo, ou outros dispositivos, com o CI L298. A placa inclui os diodos de roda livre necessários ao acionamento de cargas indutivas, alguns leds sinalizadores, permite (opconalmente) a montagem de resistores para monitoração de corrente na carga, e conectores para uma rápida e fácil montagem de projetos.

O módulo L298 foi idealizado seguindo um padrão desenvolvido pelo projeto FPGA para Todos para uma prática e versátil montagem em matrizes de contatos. Este padrão prevê um conjunto de pinos mostrado na imagem abaixo, com até oito pinos para sinal entre os de "GND" e "VCC".  No módulo L298 temos, em sequência, os pinos: GND, En2, En1, In4, In3, In2, In1, NC, NC, VCC. Os pinos En2 e En1 habilitam e controlam a velocidade para cada motor, os pinos In4, In3, In2 e In1 controlam o sentido de rotação dos motores.

 

 

Tabela: funções dos pinos do L298.

Se os pinos de habilitação estiverem em nível lógico '1', então teremos as seguintes possíveis combinações:

Tabela: funções dos pinos "IN" do L298.

 SOFTWARE

O software deste projeto foi desenvolvido no ambiente de desenvolvimento SBT for Eclipse, fornecido pela ALTERA para o seu processador NIOS 2. A função básica do programa é bastante simples: testar três botões da placa e comandar o motor a partir desta leitura, fazendo-o girar em sentido horário ou anti-horário, ou parar. O código-fonte para o projeto é apresentado de maneira sucinta a seguir.

O Programa para Acionamento Básico

        O código-fonte do programa é disponível para download no final do artigo, e o descrevemos sucintamente aqui.

         No trecho inicial, estão as diretivas para inclusão das bibliotecas e definições de símbolos que facilitarão a escrita e compreensão do código. Os símbolos "PORTA_MOTOR" e "BOTOES" referenciam as portas de saída para o comando do L298 e de entrada para leitura dos botões da placa. As macros "saida(porta, valor)", e "entrada(porta)" são uma forma simples de acessar as funções fornecidas pelos drivers gerados para o SOPC do NIOS.

#include "sys/alt_stdio.h"
#include "altera_avalon_pio_regs.h"
#include "system.h"
#include "unistd.h"
#define PORTA_MOTOR PORT_A_BASE
#define BOTOES BOTOES_BASE
#define config_DDR(porta,dado) IOWR_ALTERA_AVALON_PIO_DIRECTION(porta, dado)
#define entrada(porta) IORD_ALTERA_AVALON_PIO_DATA(porta)
#define saida(porta,dado) IOWR_ALTERA_AVALON_PIO_DATA(porta, dado)
#define HORARIO 0b10101100
#define ANTIHORARIO 0b10011100
#define PARADO 0b00001100

        A função main() imprime uma mensagem inicial e configura a porta para o L298 como saída. A seguir, inicia uma estrutura de repetição ("loop") em que fica testando botões da placa e atuando sobre o L298.

int main ()
{
 alt_putstr("Acionando o motor com o NIOS II\n\n");
config_DDR (PORTA_MOTOR, 0b11111100);
 while (1) {
 // Teste dos botões a comando do L298.
 ......
 }
}

        Três botões são verificados, com funções mostradas na figura abaixo.

        O trecho seguinte apresenta o trecho de teste do botão para giro no sentido anti-horário. Quanto o botão está pressionado, o valor que comanda o L298 para o acionamento correto do motor é escrito na porta de saída, uma mensagem é enviada ao PC, e um "loop" é acionado para esperar que o botão seja solto. Este trecho é repetido com pequenas alterações para testar se o botão pressionado é o botao "PARADO" ou o botao "HORARIO".

.......
//Teste dos botões a comando do L298.
botao_pressionado = ((entrada (BOTOES) & 0b00010 ) == 0);
 if ( botao_pressionado) {
saida (PORTA_MOTOR, ANTIHORARIO);
 alt_printf ("O motor está girando no sentido antihorário.\n");
 do
 botao_pressionado = ((entrada (BOTOES) & 0b00010 ) == 0);
 while (botao_pressionado); // Espera que o botao seja solto.
 }

 

Preparação e Teste do Projeto

O projeto apresentado aqui apresenta componentes de hardware e software que devem ser preparados e introduzidos no kit de FPGA para que o sistema funcione. Duas etapas básicas devem ser cumpridas:

  1. O sistema desenvolvido no Quartus, com o SOPC e o interfaceamento para os pinos de E/S deve ser gravado no FPGA. O projeto completo é disponibilizado aqui, e pode ser aberto, verificado e compilado novamente, se desejado. Alternativamente, pode-se configurar diretamente o arquivo ".sof" no FPGA, utilizando-se a ferramenta de programação da ALTERA.
  2. O programa para o processador NIOS 2 deve ser carregado e executado no SOPC.  Aqui, o código-fonte pode ser introduzido em um novo projeto no "Sofwtare Builder Tools" para o Eclipse, a ferramenta da ALTERA para desenvolvimento de software com o NIOS 2. O SBT for Eclipse prevê recursos para a construção de uma bibloteca de drivers específicos para o SOPC do projeto.  Após a compilação, o programa pode ser executado no sistema integrado no FPGA.

Para orientação do leitor interessado em testar o sistema apresentado aqui, um tutorial é disponibilizado na seção "Downloads", que o guiará passo a passo na gravação do projeto de hardware e na preparação do programa para carga no FPGA.

         

Conclusão

O artigo apresentou uma solução simples para comando de pequenos motores CC utilizando o CI L298 e um kit de FPGA, em uma aplicação bastante simples que pode ser muito aperfeiçoada a partir dos recursos dos componentes utilizados. De fato, este projeto deverá ser o início de uma série em que o acionamento do motor fará parte de uma estrutura mais complexa, e os recursos do FPGA serão bem melhor explorados.

É importante compreender, neste ponto, que os módulos físicos (placas)  e de código-fonte em C e em VHDL incorporados aqui podem ser (e serão) reutilizados em diversos novos projetos. Esta grande vantagem é decorrente de uma combinação bem-sucedida de fatores: a construção modular dos kits, a tecnologia de Lógica Programável, à versatilidade do ambiente de desenvolvimento para o NIOS 2, e uma abordagem estruturada à programação.

Reforçamos também aqui que o projeto está disponível para "download", e pode ser reconstruído pelo leitor a partir dos arquivos fornecidos, nos kits do Projeto FPGA para Todos ou (com algum ajuste) em outros ambientes de desenvolvimento com FPGA.

Volte a visitar o portal e acompanhe a evolução destes experimentos com um sistema embarcado baseado no NIOS 2, no kit de FPGA do Projeto FPGA Para Todos.

Downloads

-Projeto de Hardware:

-Projeto de Software:

Quem está Online

Temos 21 visitantes e Nenhum membro online

Apoio

Login Form

 

Artigos Relacionados