Baixe o app para aproveitar ainda mais
Prévia do material em texto
Universidade do Estado do Rio de Janeiro - Uerj Faculdade de Engenharia - FEN Departamento de Engenharia Eletrônica e de Telecomunicações Disciplina: Microprocessadores Professor: José Franco do Amaral Projeto Final Sistema de Controle de Coordenadas Horizontais para Antenas e Telescópios Alunos: André Marques Felipe Ribeiro Vaz Rio de Janeiro 2017 1 1. Introdução O objetivo deste trabalho é utilizar os conhecimentos adquiridos durante o período para desenvolver um sistema microcontrolado proposto pelo professor em sala de aula. Para o nosso grupo, sugerimos a criação de um sistema de controle de elevação e do ângulo de azimute (coordenadas horizontais), para antenas e telescópios utilizando motores passo. Neste primeiro item, iremos discutir sobre os sistemas de coordenadas, o funcionamento de um motor passo e como identificamos a possibilidade de utilizá-lo em um sistema microcontrolado. No segundo item, iremos analisar o projeto deste sistema, verificando tanto a parte de construção do hardware quanto da programação feita para controle dos motores. Por fim, no último item, concluímos o trabalho, verificando os resultados obtidos e sugerindo melhorias para o sistema, além de dissertar sobre as habilidades necessárias para a construção do projeto e sobre os conhecimentos adquiridos durante o período. 1.1) Escolha do Sistema de Coordenadas A posição de um objeto astronômico está relacionada a um sistema de coordenadas que, por sua vez, está definido por um sistema de referência. Existem diversos sistemas de coordenadas utilizados para localizar um objeto astronômico: o sistema de coordenadas galáctico, eclíptico, equatorial e horizontal. A representação de um certo objeto astronômico pode ser mais adequada em um sistema de coordenadas do que em outro, entretanto, é possível realizar a transformação de um sistema de coordenadas em outro, através de rotações do próprio sistema de coordenadas. Em geral, as coordenadas de um objeto astronômico são dadas pelo sistema equatorial, porém, partindo do princípio que os sistemas de coordenadas podem ser transformados, utilizaremos o sistema de coordenadas horizontal ou altazimutais, para criação do sistema. Figura 1: Representação de coordenadas em antena ou telescópio 2 O sistema horizontal de coordenadas é um sistema de coordenadas celestes que utiliza o horizonte local do observador como o plano fundamental (o plano que divide uma esfera em dois hemisférios). Ele é expresso em termos de ângulos para a altura (ou elevação), e o azimute, conforme representado na figura 1. 1.2) Motor Passo: Funcionamento e Especificações do Modelo Utilizado Escolhido o sistema de coordenadas, devemos criar um sistema responsável pelo controle dos ângulos de azimute e de elevação. Para controle destes ângulos, podemos utilizar dois motores passo. Os motores passo são dispositivos eletromecânicos que convertem pulsos elétricos em movimentos mecânicos que geram variações angulares discretas. O rotor ou eixo de um motor de passo é rotacionado em pequenos incrementos angulares, denominados “passos”, quando pulsos elétricos são aplicados em uma determinada sequência nos terminais deste. A rotação de tais motores é diretamente relacionada aos impulsos elétricos que são recebidos, bem como a sequência a qual tais pulsos são aplicados reflete diretamente na direção a qual o motor gira. A velocidade que o rotor gira é dada pela frequência de pulsos recebidos e o tamanho do ângulo rotacionado é diretamente relacionado com o número de pulsos aplicados. Dessa forma podemos controlar não somente as coordenadas horizontais desta antena/telescópio, mas também a velocidade com que a mesma se movimenta. O modelo do motor passo utilizado foi o 28BYJ-48 da Kiatronics (datasheet nos anexos ao final) com um módulo controlador ULN2003. Figura 2: Módulo controlador e motor passo Nos próximos itens iremos mostrar como foram feitas as ligações entre os módulos de controle desses motores e o microcomputador, apresentando diagramas e explicando o funcionamento dos mesmos a partir do acionamento de chaves lógicas na “placa de trabalho”. 3 2. Projeto 2.1) Projeto do Hardware Utilizamos para interface entre o usuário e os módulos de controle dos motores, a placa de trabalho criada durante as aulas de laboratório da disciplina de Microprocessadores. Tanto o diagrama quanto o layout desta placa serão disponibilizados no final deste trabalho, na seção Anexos. Figura 3: Esquema do módulo controlador do motor passo As chaves desta placa serão projetadas e programadas para controlar qual motor estará sendo acionado (M1 ou M2), sua movimentação (sentido horário ou anti-horário), e sua velocidade. Explicaremos de forma detalhada o funcionamento destas chaves posteriormente. A conexão entre a placa de interface e o microcomputador é feita através de porta paralela LPT1, assim como realizado na experiência 6 do laboratório de Microprocessadores. Abaixo segue diagrama da conexão entre motores passo, placa de interface e interface com o microcomputador. 4 Figura 4. Esquema de ligações (cabo LPT1, placa de interface e módulos dos motores). Figura 4: Diagrama de Interface entre Microcomputador e Motores Passo 2.2) Lógica de controle Toda a programação será feita em linguagem assembly, visto que esta foi a linguagem utilizada durante todo o período do curso de Microprocessadores. Para acionamento dos passos do motor, iremos utilizar o método de meio-passo (half- step). Neste método de acionamento, passamos a deslocar o rotor em apenas meios passos, ou seja, para completar uma volta, o número de passos necessários será duplicado. Abaixo, podemos verificar como estes meio passos são ativados. Figura 5: Sequencia de meio-passo 5 Tabela 1: Sequencia binária para o acionamento em meio-passo Sendo assim, para acionarmos cada um dos meio-passos necessários para movimentar o rotor, basta associarmos valores a alguns endereços de memória e carregar estes valores em um registrador (escolhido AL), conforme Tabelas 2 e 3 abaixo. Tabela 2: Sequencia de meio-passa salvo em memória. Tabela 3: Sequencia de meio-passa indicado nos registradores. Observação: é importante citar que após o 8º passo, o programa deverá retornar para a leitura do 1º passo, e não seguir para um eventual 9º passo. Dessa forma, criamos um loop que será testado na sub-rotina indicada como “Sub_Sent”. 6 Após carregar os diferentes valores de AL, devemos executar uma sub-rotina de leitura das chaves de controle, indicada como “Ler_Entr”, que serão responsáveis pela leitura dos comandos de seleção, velocidade e movimentação dos motores. Para cada posição das chaves teremos uma resposta do sistema, seguindo a lógica: CHA - Controla o sentido de elevação CHB - Controla o sentido de azimutal CH0 - Controla o motor a ser acionado, M1 ou M2 CH1 – Sem função no circuito CH2 - Controla a velocidade de rotação CH3 - Controla a velocidade de rotação Dessa forma, montamos a tabela 4 abaixo, mostrando o funcionamento para cada um dos diversos acionamentos possíveis das chaves. Figura 6: Chaves na placa de interface 7 Tabela 4: Diferentes acionamentos das chaves lógicas e as respectivas respostas do sistema. Após apresentação da lógica utilizada na programação deste sistema de controle, podemos dar continuidade detalhando a rotina criada para funcionamento do sistema. Para facilitar o entendimento, iremos inserir comentários para as instruções mais relevantes, explicando o uso da mesma com relação à lógica já apresentada. 2.3) Programa O Programa apresentando realiza o controle dos motores nas coordenadas de elevação e azimutal de Antenas e Telescópios. MOV AL, 01MOV BX, 210 MOV [ BX ], AL / Carrega o end. memória "210 = Saída M1 e M 2" com 01 INC BX MOV [ BX ], AL / Carrega o end. memória "211 = Entrada" com 01 INC BX MOV [ BX ], AL / Carrega o end. memória "212 = Cont. M1" com 01 INC BX MOV [ BX ], AL / Carrega o end. memória "213 = Cont. M2" com 01 INC BX MOV AL, FF 8 MOV [ BX ], AL / Carrega o end. memória "214 = Tempo 1" com FF INC BX MOV [ BX ], AL / Carrega o end. memória "215 = Tempo 2" com FF Desv0: CALL Ler_Entr: / Executa a rotina de leira das chaves MOV AH, [ 211 ] / Lê a captura das chaves salva no End.Memoria 211 CMP AH, F8 / Verifica se as chaves estão em "1". JZ Fim Se positivo, finaliza o programa. AND AH, 30 / Mantêm os bits D4 e D5. CMP AH, 30 / Analisa o bit D4 e D5. JZ Desv1 / Se os bits D4 e D5 forem = 0, reinicia a leitura das chaves com o motor em freio magnético. CMP AH, 00 / Analisa o bit D4 e D5. JZ Desv2 / Se os bits D4 e D5 forem = 0, reinicia a leitura das chaves com os motores parados. CALL Sub_Sent / Executa a rotina de controle dos motores. CALL Delay / Executa a rotina de Delay. Desv1: JMP Desv0 / Reinicia o programa. Desv2: MOV AL, 00 MOV DX, 378 / Carrega o endereço da porta 378 OUT DX, AL / Envia o comando parada dos motores. JMP Desv0 / Reinicia o programa. Fim: MOV AL, 00 MOV DX, 378 / Carrega o endereço da porta 378. OUT DX, AL / Envia o comando parada dos motores. NOP NOP 2.4) Sub-rotinas a) Subrotina Ler_Entr Essa sub-rotina realiza a captura das posições das chaves através da leitura da porta 379, carrega no registrador AL, grava os dados no endereço de memória 211, desloca os 4 bits mais significativos para os menos significativos e escreve na porta de saída 37A. Ler_Entr: PUSH AX, PUSH BX, PUSH DX, PUSHF MOV DX, 379 / Carrega o endereço da porta 379. IN AL, DX / Leitura das chaves. AND AL, F8 / Mantêm os bits D7 a D3. MOV BX, 211 MOV [ BX ], AL / Salva a leitura no End. Memoria 211. ROR AL, 1 / ROR AL, 1 / ROR AL, 1 / ROR AL, 1 / Desloca os bits D7 a D4 para posição D3 a D0. MOV DX, 37A / Carrega o endereço da porta 379. OUT DX, AL / Envia a indicação das chaves para os leds. POPF POP DX POP BX POP AX RET 9 b) Subrotina Delay Essa sub-rotina realiza uma contagem com base nas variáveis de tempo, salva no endereço de memorias 214 e leitura da velocidade indicada pelas chaves CH2/CH2 armazenado no endereço de memória 211. Delay: PUSH AX, PUSH BX, PUSH CX, PUSHF MOV BX, [ 214 ] / Lê o end. memória "214 = Tempo 1" MOV AH, [ 211 ] / Lê a captura das chaves, relativo a velocidade, salva no End. Memoria 211 AND AH, C0 / Mantêm os bits D7 e D6. ADD AH, 0F / Adiciona 0F ao valor de velocidade capturado nas chaves MOV AL, 00 / Zera a contagem em AL MOV CX, 0000 / Zera a contagem em CX Desv3: INC CX, CMP CX, BX / Compara CX com valor "Tempo 1" JNZ desv3 / Se CX < BX, continua a contagem. MOV CX, 0000 / Zera a contagem em CX INC AL, CMP AL, AH / Compara AL com AH JC desv3 / Se AL < AH, continua a contagem. POPF POP CX, POP BX, POP AX, RET c) Subrotina Sub_Sent Essa sub-rotina realiza a seleção e rotação do motor com base na variável salva no endereço de memorias 214, realizando os passos do motor pela contagem salva nos endereços 212 e 213. A contagem obtiva pela sub-rotina e retorna a sequência binaria do passo indicado nos valores registrados na memória do intervalo 201 a 208 e envia o valor do passo selecionado para porta 378. Sub_Sent: PUSH AX, PUSH BX, PUSH CX, PUSH DX, PUSH SI, PUSHF MOV CX, 0000 MOV SI, 200 MOV AH, [ 211 ] / Ler Entrada AND AH, 08 / Mantêm o 4°bit 10 CMP AH, 08 / Analisa do 4°bit JNZ Sent_M1 / Se 4°bit = 0, Motor 1 MOV CL [ 212 ] / Ler posição M2 MOV AH, [ 211 ] / Ler Entrada AND AH, 20 / Mantêm o 6°bit CMP AH, 20 / Analise do 6°bit JNZ Sent_DW / Se 6°bit = 0, Movimento DW INC CL / Avança uma posição M2 CMP CL, 08 / Analisa se M2 > 8 JNZ Sent_CL / Se M2 > 8, MOV CL, 01 faz M2 = 01 JMP Sent_CL / Salto para Sent_CL Sent_DW: DEC CL / Retorna uma posição M2 CMP CL, 00 / Analisa se M2 < 0 JNZ Sent_CL / Se M2 <0, MOV CL, 08 faz M2 = 8 Sent_CL: MOV BX, 212 / Carrega Endereço 212 MOV [ BX ], CL / Escreve posição M2 no endereço 212 AND CX, 000F / Mantêm os 8°bits menos segnificati vos ADD SI, CX / Carrega Endereço da posição M2 MOV AL, [ SI ] / Carrega do endereço o valor da posição M2 AND AL, 0F / Apaga os bits D7 a D5 (posição de camando do M1) JMP Sub2_Fim / Termino da sub-rotina Sent_M1: MOV CL [ 213 ] / Ler posição M1 MOV AH, [ 211 ] / Ler Entrada AND AH, 20 / Mantêm o 6°bit CMP AH, 20 / Analise do 6°bit JNZ Sent2_DW / Se 6°bit = 0, Movimento DW INC CL / Avança uma posição M1 CMP CL, 08 / Analisa se M1 > 8 JNZ Sent2_CL / Se M1 > 8, MOV CL, 01 faz M1 = 01 JMP Sent2_CL / Salto para Sent2_CL Sent2_DW: DEC CL, / Retorna uma posição M1 CMP CL, 00 / Analisa se M1 < 0 JNZ Sent2_CL / Se M1 <0, MOV CL, 08 faz M1 = 8 Sent2_CL: MOV BX, 213 / Carrega Endereço 213 MOV [ BX ], CL / Escreve a posição M1 no endereço 213 AND CX, 000F / Mantêm os 8°bits menos segnificati vos ADD SI, CX / Carrega Endereço da posição M1 MOV AL [ SI ] / Carrega do endereço o valor da posição M1 AND AL, F0 / Apaga os bits D3 a D0 (posição de camando do M2) Sub2_Fim: MOV BX, 210 / Carrega Endereço 210 MOV [ BX ], AL / Escreve o comando de saída dos motores no endereço 210 MOV DX, 378 / Carrega o endereço da porta 378 OUT DX, AL / Envia o comando de movimento dos motores POPF POP SI, POP DX POP CX, POP BX POP AX RET 11 3. Conclusão Após teste inicial realizado em laboratório pudemos verificar o funcionamento do sistema. A lógica programada funciona conforme projetado e o sistema cumpre a função de servir de controle manual para as coordenadas horizontais de antenas e telescópios. Algumas melhorias poderiam ser implementadas, tal como o controle simultâneo dos dois motores e , até mesmo o controle automático dos mesmos, desde que fosse acoplado um potenciômetro para retorno da posição do eixo. Nesse caso, precisaríamos inserir também um multiplexador na porta de entrada para obtermos esta informação. Através deste trabalho pudemos sintetizar de forma objetiva e prática todos os conhecimentos adquiridos durante o curso de Microprocessadores. Iniciamos projetando a interface entre os motores passo e o microcomputador, aproveitando a placa criada no laboratório da disciplina. Após isso, identificamos a lógica a ser utilizada na programação e criamos um programa que atendesse a necessidade do sistema obedecendo as regras de interfaceamento de portas de Entrada e Saída. O fato de termos atingido os objetivos deste trabalho, mostra que o conteúdo passado durante o curso foi bem assimilado, sendo suficiente para a criação de um sistema microcontrolado, conforme proposto. 12 4. Referências bibliografias • Ronald J. Tocci, Sistemas Digitais Princípios e Aplicações, 7ª Edição Ed. LTC. • Software DipTrace TTL; http://diptrace.com/, acessado em 10 de setembro de 2017. • Como fazer uma Placa de Circuito Impresso com impressora laser, http://www.impressora.blog.br/como-fazer-uma-placa-de-circuito-impresso-com- impressora-laser//, acessado em 10 de setembro de 2017. • Porta paralela e sua utilidade, http://www.noteplace.com.br/artigo/porta-paralela-e-sua- utilidade, acessado em 04 de novembrode 2017. • Motor de passo; https://fperrotti.wikispaces.com/Motores+de+passo, acessado em 11 de novembro de 2017. • Stepper Motors; https://msmrobotics.wordpress.com/2013/03/12/stepper-motors/, acessado em 11 de novembro de 2017. 13 Anexos U E R J 2 0 1 7 .1 A n d ré M a rq u e s P la c a d e t e s te
Compartilhar