Buscar

Sistema de Controle de Coordenadas Horizontais para Antenas e Telescópios

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

Continue navegando