Motor de Passo MIC29004-2014-2

De MediaWiki do Campus São José
Revisão de 11h53min de 29 de novembro de 2014 por 191.191.86.42 (discussão) (→‎algorítmo PC)
Ir para navegação Ir para pesquisar

Descrição do projeto

O objetivo do projeto é controlar um motor de passo através de um kit de desenvolvimento da família de microcontroladores 8051 da ATMEL . Os comandos de acionamento do motor de passo são gerados por um computador e enviados pela interface RS-232 para o microcontrolador 8051. Este último programado para decodificar as mensagens e habilitar as portas que controlam um motor de passo unipolar. Os principais pontos abordados neste documento, são a forma de codificação e decodificação das mensagens de comando e implementação via hardware do projeto.

Etapas

Especificação do projeto

Consiste na documentação postada em Wiki descrevendo as características, dispositivos utilizados, implementação e testes. A codificação das mensagens tende a ser o mais transparente possível entre o PC e o motor de passo. Fazendo com que o código no microcontrolador seja menos complexo. A desvantagem deste sistema é grande quantidade de números "0" que são transmitidos, fazendo que se houver transmissão continua de um mesmo dado, haverá a possibilidade de perda do sincronismo. A codificação está definida na tabela abaixo. O código é composto por 8 bits entre PC e Kit, respeitando o padrão RS232. O objetivo final é decodificar para acionar o motor de passo de 4 fios rotacionando conforme o ângulo definido na tabela abaixo.

Tabela de codificação do motor de passo
ValorCódigo UARTCódigo P2 8051Movimento
1000000010001
200000011001145°
300000010001090°
4000001100110135°
5000001000100180°
6000011001100225°
7000010001000270°
8000010011001315°

Se a tabela acima fosse implementada na ordem sugerida o motor de passo completaria uma volta.

Pesquisa

Consiste em avaliar e obter as ferramentas de hardware e aplicativos para desenvolvimento do projeto. Os principais recursos utilizados são: kit diático AT89Sxx,motor de passo 5V, driver ULN2003 computador com interface RS232 e paralela. Aplicativos: Proteus, MCU8051IDE, Gtkterm, AEC ISP.

Descritivo dos aplicativos
  • MCU8051IDE: simulador completo para circuito da arquitetura C51. Acesso aos registradores especiais e memória interna, externa. O Simulador permite compilar e gerar um código .hex para gravação em um respectivo microcontrolador.
  • Gtkterm: aplicativo que lê e escreve dados na porta RS-232.
  • AEC_ISP: Gravador dedicado para gravar microcontroladores da família C51 pela porta paralela do computador.
  • Proteus: Simulador de circuito eletrônico com grande biblioteca de componentes.

Previsão de conclusão: 01/12/2014

Descritivo dos dispositivos
  • Motor de Passo

Motores de passos são dispositivos mecânicos eletro-magnéticos que podem ser controlados digitalmente através de um hardware específico ou através de softwares. Esses motores são usados em aparelhos onde a precisão é um fator importante. Existem vários modelos de motores de passos disponíveis no mercado que podem ser utilizados para propósitos como impressoras, robôs, câmeras de vigilância, máquinas industriais, brinquedos. Como os demais motores, o movimento dos motores de passo é gerado pela interação entre imãs permanentes e eletroímãs. Tipicamente os eletroímãs estão fixos e os imãs permanentes estão na parte móvel do motor. O que diferencia o motor de passo é que o movimento é controlado por pulsos, ativando e desativando os eletroímãs em uma determinada ordem. Dependendo de quais eletroímãs estão ativos, os imãs permanentes serão atraídos, colocando o motor em uma determinada posição. A ordem e a velocidade dos pulsos determina o movimento do motor.

  • Funcionamento Motor de passo


As portas de I/O do microntrolador 8051 usam tecnologia CMOS e tensão até 5.5V e 60uA de corrente. Para controlar o motor de passo é necessário um arranjo tipo drive para fornecer maior corrente ao motor. O esquema abaixo demostra a conexão da saída do microntrolador a um transistor de Potência. A base do microcontrolador colocará o transistor de potência saturado fazendo o motor ser alimentado. Se A base do transistor de potência ser 0V o transistor entrará na região de corte e o motor será desligado. Se a base do transistor de potência ser 5V, o transistor entrará na região de saturação, permitindo que o motor seja alimentado.

Drive.jpg

  • Circuito Motor de passo

Para agilizar o desenvolvimento optamos por utilizar o driver comercial ULN2003 e o motor de passo 28BYJ-48. O ULN2003 suporta até 500mA de corrente em cada porta. Este componente possui diodo catodo comum em cada porta para proteção contra picos de corrente provenientes do "start do motor.

Motor de passo 28BYJ-48.

Motor1.png



Conforme a derivada abaixo, descreve o pico de corrente gerada quando o motor é acionado. O pico de corrente ocorre devido ao período do pulso tender a zero e gerando uma alta frequência na bobina, no qual surgirá uma reatância indutiva e um tensão aumentando o fluxo de corrente para o driver. Para controlar este efeito é usado diodos em cada porta do driver ULN2003.


L= indutância.

t= tempo.

V=tensão.

Especificação motor de passo 28BYJ-48

  • Diagrama driver ULN2003.

ULN2003.png

Especificação Driver ULN2003

O esquema elétrico do circuito entre o microcontrolador e o motor de passo :

Mpsetup.png

  • RS-232

Os comandos para acionar o motor são enviados pelo computador para o kit através de um cabo RS-232. É uma tecnologia de comunicação ponto a ponto e a mensagem é formada por palavras de 8 bits. Sua facilidade, custo e baixa complexidade de implementação permite seu uso em grande escala em projetos que não exigem alta taxa de transferência. Uma de suas limitações é a distância, não devendo ser superior a 10 metros. O microcontrolador oferece 4 modos de operação. Porém iremos forcar no modo de operação 2, no qual configura a interface para operar em modo full-duplex, sem bit de paridade. A velocidade da interface depende da frequência de oscilação do cristal montado no Kit. As equações para obter a taxa de bauds, são apresentadas na apostila do curso. O pinos obrigatórios para haver comunicação são o 2(TX), 3(RX) e 5(GND). A conexão na outra extremidade deve ter os sinais RX e TX invertidos na própria interface do computador ou senão invertido no conector do cabo.


Rs232 1.jpg
Rs232 3.jpg
Rs232 2.jpg



Disposição dos pinos e sinais no conector DB-9

  • Microcontrolador

Para o desenvolvimento deste projeto, utilizamos o Kit didático micro AT89Sxx disponível no almoxarifado do IFCS-SJ. O kit é composto por:

    • Microcontrolador ATMEL AT89S8252
    • 1 Interface UART
    • 6 botões push-button conectados na porta P3.
    • 8 botões push-button conectados na porta P2.
    • 8 Leds conectados na porta P1.
    • 4 conjuntos de barra pinos conectados nas portas P0, P1, P2 e P3.
    • Interface de gravação do microcontrolador.
    • Interface para display 2x16.

as interfaces do kit são apresentados na imagem abaixo:

Kit.png

  • Conector para gravaçãoo

A interface de gravação utiliza um cabo RS-232/paralela. A interface RS-232 do cabo é conectado na porta Gravação do kit(conector DB-9 Fêmea) e conector DB-25 do cabo conectado na porta paralela do computador. O esquema do cabo é representado na imagem abaixo:

Grav.jpg
  • Programa gravador

O programa de gravação do microcontrolador para Windows XP está disponível no link abaixo.

  • Gravação no Kit didático AT89Sxx

Passos para gravar um arquivo (.HEX) compilado no Kit.

  • 1- Conecte o cabo de gravação na porta "CABO PROG" e na porta paralela do computador.
  • 2- Com o kit desligado, abra o jumper J1.
  • 3- Mude a chave EXEC/PROG para Prog.
  • 4- Ligue o kit.
  • 5- Abra o programa AEC_ISP.
  • 6- Selecione a opção "Load to buffer flash the .hex data.
  • 7- Em "input file:" Digite o caminho do arquivo .hex.
  • 8- Pressione "ENTER" para confirmar.
  • 9- Pressione "ESC" para retornar.
  • 10- Selecione a opção "Load display buffer flash". verifique se o arquivo foi carregado.
  • 11- Pressione "ESC" para voltar.
  • 12- Selecione a opção "program" e observe as mensagens durante de gravação.
  • 13- Desligue o kit.
  • 14- Mude a Chave EXEC/PROG de "PROG" para "EXEC".
  • 15- Feche o jumper J1.
  • 16- Retire o cabo prog.
  • 17- Ligue o kit. O programa gravado entrará em execução.

Fluxogramas

Fluxograma do laço principal

Fluxograma principal motor passos MIC2014-2.jpg

Fluxograma da sub-rotina interrupção serial

Fluxograma interrupcao serial motor passos MIC2014-2.jpg

Fluxograma da sub-rotina interrupção timer0

Fluxograma passo motor passos MIC2014-2.jpg

Desenvolvimento

Algorítmo 8051

configuração dos registradores e temporizações

O código do microcontrolador é feito em Assembly. Inicia configurando o modo de operação do timer 1, serial e interrupções. É implementado a rotina de acionamento da porta P2, no qual esta conectado o motor de passo no endereço de interrupção 0x0023H. Em um eventual dado recebido pela interface RS 232, o byte em SBUF é enviado para o acumulador. O byte então, é decodificado e enviado o sinal correspondente para a porta P2.

  • TMOD, TH1, TH0, TL0

O Timer 1 é definido para operar em 8 bits, sendo utilizado para gerar taxa de TX na RS232 de 9600 bauds. ​​org 0000h MOV TMOD, #21H ;Configuração do Timer 1 em modo 2 (8 bits) e Timer 0 em modo 1 (16 bits). MOV TH1 , #0FDH ;Considerando um clock 11,052MHz e uma taxa de 9600 Baud rate. </syntaxhighlight>

  • SCON

MOV SCON, #50H ;configura o modo de operação da interface serial, e habilita o modo de recepção

mov ie, #10010000b ;habilita a interrupção do modo serial. Endereço da interrupção
0x0023H

</syntaxhighlight>

  • SBUF

o registrador IR atua como uma flag, sendo setado toda vez que recebe uma janela de bits validos no Registrador SBUF. Loop: JNB RI, Loop </syntaxhighlight>

  • Rotina 50 ms

O Timer 0 é utilizado para contabilizar um bloco elementar de 50ms. Demais temporizações são referenciadas a partir deste bloco. DELAY_50ms:

      MOV TH0,#3CH;
      MOV TL0,#0B0H;
      MOV TCON,#10H;

LOOP: JNB TF0, LOOP;

      CLR TF0;
      CLR TR0;
      RET;

</syntaxhighlight>

  • Rotina de 1 segundo usa a rotina de delay_50ms como estrutura básica para gerar delay de 1 segundo:

MAIN:LCALL DELAY_1SEG; DELAY_1SEG: MOV B,#19D; AQUI: LCALL DELAY_50MS; DJNZ B, AQUI; RET;

DELAY_50ms:

       MOV TH0,#3CH;
       MOV TL0,#0B0H;
       MOV TCON,#10H;

LOOP: JNB TF0, LOOP;

       CLR TF0;
       CLR TR0;
       RET;

</syntaxhighlight>

Tratamento das interrupções e comandos para o motor de passo

algorítmo PC

O código de envio dos comandos é construído em C# e utiliza bibliotecas do código fonte do kernel para controlar o interface RS 232.

o arquivo 8051.h provê especifica alguns apelidos para as palavras em binário dos comandos do motor, importa as bibliotecas do linux e define as funções utilizadas:

  1. include <stdio.h> // standard input / output functions
  2. include <string.h> // string function definitions
  3. include <unistd.h> // UNIX standard function definitions
  4. include <fcntl.h> // File control definitions
  5. include <errno.h> // Error number definitions
  6. include <termios.h> // POSIX terminal control definitionss
  7. include <time.h> // time calls
  8. include <sys/time.h>

enum commands {

   CM_START_MOTOR = 0x0,
   CM_STOP_MOTOR  = 0x1,
   CM_STATE_MOTOR = 0X2

};

enum events {

   EV_MOTOR_IS_STOPED  = 0x0,
   EV_MOTOR_IS_RUNNING = 0x1,
   EV_START_MOTOR_FAIL = 0x2

};

//apelidos para os comandos de movimento do motor enum angles {

   angle_0   = 0x1, // 0001
   angle_45  = 0x3, // 0011
   angle_90  = 0x2, // 0010
   angle_135 = 0x6, // 0110
   angle_180 = 0x4, // 0100
   angle_225 = 0xC, // 1100
   angle_270 = 0x8, // 1000
   angle_315 = 0x9  // 1001

};

// definição das funções int open_serial_port(char * serial_port); // le o dispositivo /dev/ttyS0 no qual esta a porta RS-232 do computador int configure_port(int fd); // função para definir o modo de operação porta RS-232. definimos a /dev/ttyS0 para operar com taxa de 9600bps, 8 bits por palavra, Sem bit de paridade e com 1 bit de parada.

</syntaxhighlight>