Preview only show first 10 pages with watermark. For full document please download

Acionamento Remoto De Motores Dc

Projeto de controle de dois motores DC através de porta serial RS-232. Apresentado como projeto de disciplina de graduação como parte prática de um sistema de controle de motores para antena de radar.

   EMBED


Share

Transcript

Acionamento de motor por controle remoto via RS232 usando HC908 Paulo de Tarso Peres – Ver. 1.0 – Maio de 2004 1 Esclarecimento Este texto é parte de um trabalho para a disciplina de Projetos Eletrônicos II, 10º semestre do Curso de Engenharia Elétrica da Escola de Engenharia da Universidade Mackenzie. O objetivo era desenvolver um sistema de controle remoto para os motores de posicionamento de uma antena de radar. Dada a finalidade didática da tarefa de essencialmente desenvolver o comando remoto dos motores, a especificação do projeto previa um controle em malha aberta. O sistema, que funcionou com êxito, foi apresentado como parte prática de um trabalho sobre o funcionamento de sistemas de radar no 1º semestre de 2004. O texto contido neste documento foi extraído do relatório entregue. Paulo de Tarso Peres Título: Sistema de Controle de Antena de Radar Disciplina: Projetos Eletrônicos II Autores: Marcelo da Silva Flori Paulo César Meier Paulo de Tarso Peres E.E.U.P.M – São Paulo, 2004 2 Introdução Este projeto apresenta um sistema de controle remoto do acionamento dos motores de posicionamento de uma antena de radar. O sistema, baseado em um microcontrolador Motorola da família HC08, é capaz de controlar dois motores DC, possui um display local para monitoramento de atividades e interface de comunicação serial padrão EIA-232 (RS-232) que, através de programa armazenado, disponibiliza em terminal serial remoto o comando do sistema (Figura 1). Antena de Radar Canal Serial RS232/EIA232 Terminal Remoto Sistema de controle Figura 1 – Visão geral do sistema Descrição do sistema O Sistema de Controle de Posicionamento de Antena de RADAR consiste de um sistema microcontrolado baseado em um microcontrolador 68HC908QY4 (Motorola). O sistema é composto da placa principal, equipada com o microcontrolador e o hardware para um canal serial RS232 de comunicação, um sistema de displays a LED de 16 caracteres de 16 segmentos (DL1414T – Siemens) para monitoração local de funcionamento e uma placa de acionamento de relés para controle dos motores de posicionamento. A Figura 2 mostra uma visão dos componentes do hardware do sistema. 3 Motores Acionamento Display Placa principal Figura 2 – Visão geral do hardware do sistema A Placa Principal A placa principal consta de um sistema para o MCU 68HC908, um conversor de níveis de tensão TTL/RS232 e um buffer de corrente para o acionamento dos relés. A placa possui ainda LEDs para a monitoração dos sinais de RX (recepção, verde) e TX (transmissão, vermelho) da porta de comunicações seriais RS232, da alimentação (amarelo) e um LED bicolor para cada motor controlado (vermelho para um sentido, verde para o contrário). Possui ainda 4 conectores, sendo um para a conexão com a fonte de alimentação DC, um para a conexão com a placa de relés do acionamento dos motores, um para conexão do sistema de displays e um para conexão serial RS232, padrão DB9. A fonte de alimentação do sistema é uma fonte DC chaveada comercial de 13,5V por 1A. A tensão de 5V para os circuitos integrados é obtida através de um regulador de tensão integrado 7805 também presente na placa. A Figura 3 mostra a Placa Principal em detalhe (ver Apêndice A, esquema 3). 4 Conector DB-9 RS-232 (EIA-232) Conector de alimentação 68HC908QY4 Conector do acionamento Conector do display Figura 3 – Placa Principal - Detalhe O sistema de displays O sistema de displays é baseado no display alfanumérico inteligente com memória Siemens DL1414T. Composto por 4 displays, possui um total de 16 caracteres de capacidade, sendo capaz de apresentar todos os caracteres maiúsculos (de até 6 bits) da tabela ASCII, mais caracteres de pontuação e algarismos arábicos. Os displays possuem entrada de dados em formato paralelo, mas recebem a informação da mensagem em formato serial síncrono. Para que possam ser mostrados, os dados são convertidos para o formato paralelo através de registradores de deslocamento. A Figura 4 mostra o sistema de display em detalhe (ver Apêndice A, esquema 4). 5 Figura 4 – Sistema de displays A placa de acionamento dos motores Esta placa consta de 4 relés com um contato NA-NF cada e é responsável pela reversão de polaridade da alimentação dos motores e consequentemente sua inversão de sentido. Os relés possuem bobinas de 12V e são acionados por transistores bipolares (um por relé), que por sua vez recebem o sinal de controle da Placa Principal. A placa possui 3 conectores, sendo um para a alimentação dos motores, um para a entrada dos sinais de comando e alimentação do circuito e um para as conexões com os motores. A Figura 5 mostra a placa dos relés em detalhe, junto à dois micro motores DC de demonstração (ver Apêndice A, esquema 2). Conexões dos motores Conector dos sinais de controle Motores de demonstração Placa de acionamento Alimentação dos motores Figura 5 – Placa de Acionamento e motores de demonstração - detalhes 6 Os Motores de Demonstração Os motores de demonstração são dois micromotores DC Fauhaber de ímãs permanentes equipados com caixas de redução. Estes motores estão fixados em um suporte de acrílico e possuem, presos a seus eixos, pás de acrílico. Estes motores têm a função de simular a presença dos motores e mecanismos presentes na antena de radar que são responsáveis por seu posicionamento. Eles são uma solução simples e de baixa potência para os testes e demonstração do sistema. Para demonstração do sistema, devem ser alimentados com uma tensão de cerca de 3V, de forma que seja facilmente visível seu funcionamento e reversão de sentido. A Figura 6 mostra em detalhe os motores e seu suporte. Figura 6 – Motores de demonstração – vistas lateral e superior 7 Funcionamento do Sistema Funcionamento do Hardware do Microcontrolador O sistema apresentado deve ser capaz de comunicar-se com um terminal remoto de controle, receber instruções deste, e posicionar uma antena de RADAR conforme comandado. Para tanto, fez-se uso de um microcontrolador de 8 bits de arquitetura CISC da família HC08 da Motorola – EUA. O processador usado, especificamente um 68HC908QY4 é uma pastilha de 16 pinos, com duas portas paralelas bidirecionais configuráveis (5 e 8 bits, respectivamente). Destas, 2 bits da primeira porta foram configurados como entrada e saída, respectivamente, para serem usados como os sinais RX e TX da porta RS232. Apesar de constituírem uma porta paralela, estes bits foram assim configurados para que se pudesse implementar a comunicação serial através de rotinas de programação. A segunda porta foi inteiramente configurada como saída. O nible inferior é usado para controle dos motores, e o superior para controle do sistema de displays. Este sistema de displays é responsável pela apresentação de mensagens pertinentes ao funcionamento do sistema. O programa de controle armazenado no microcontrolador foi então elaborado para reconhecer caracteres ASCII provenientes do terminal remoto, interpreta-los e executar o acionamento dos motores conforme comandado. Comunicação serial de dados A comunicação serial de dados é necessária para a transmissão de informações para o posicionamento da antena de RADAR por uma longa distância através de um número reduzido de condutores. Em uma transmissão serial de dados, o dado de informação é dividido em bits individuais, enviados um por vez através do canal de comunicação e dentro de intervalos de tempo pré definidos (transmissão assíncrona). A velocidade com que estes dados são transferidos é definida como Taxa de Transferência, e é entendida como sendo a quantidade de dados por unidade de tempo. Para este projeto, foi utilizada a norma de comunicação EIA232 (antiga RS232), que prevê bits de sinalização além dos de dados, níveis de tensão e velocidades de transmissão, entre outros detalhes. A placa principal do sistema se comunica com o terminal remoto à 4800bps, usando 8 bits de dados, 1 bit de parada e nenhum de paridade. A Figura 7 ilustra o padrão de comunicação serial assíncrona. 8 Pacote de dados Dados: 8 bits Informação: 11 bits Para 4800 bps, T=1/4800 T=208,3us D D D D D D D D P T LSB MSB Stop Start 8 bits de informação Onde: T=1/Baud Rate LSB: Bit menos significativo MSB: Bit mais significativo Figura 7 – Comunicação serial assíncrona Sistema de Displays O sistema de displays utilizado para mostrar mensagens de monitoração do funcionamento do sistema, de forma semelhante à comunicação serial, utiliza comunicação serial (neste caso síncrona) para seu funcionamento. Isto ocorre dado a necessidade de 6 bits de dados, 4 de endereçamento, e 4 de sinalização (somando 14 bits) para se proceder a escrita em display. Uma vez que o microcontrolador possui ao todo 13 bits de saída, este não poderia acionar o sistema de displays em uma implementação paralela. A solução encontrada foi o uso de registradores de deslocamento configurados de forma a receber a informação serial de dados, assim como a informação de tempo e sinalização dos 4 bits que foram disponibilizados no microcontrolador para este fim. Pôde-se desta forma, inclusive, recorrer ao uso de rotinas de programação muito semelhantes às usadas para a comunicação com o terminal remoto (ver Apêndice B). Este procedimento facilitou em muito o desenvolvimento do programa de controle. A Figura 8 ilustra 3 dos 4 sinais de controle do sistema de displays. Para efeito de simplificação o sinal de CLEAR dos registradores foi omitido. 8 bits de informação Dados D D D D D D D D Clock Escrita Figura 8 – Sinais da comunicação síncrona com o display 9 Programa armazenado O firmware de controle do sistema executa basicamente as seguintes operações: - Esperar pela recepção de um caracter pela porta serial - Se um caracter for recebido, compara-lo com a tabela de comandos - Executar o acionamento correspondente e sinaliza-lo em caso de comando válido - Sinalizar erro em caso de comando inválido - Repetir do início O sistema ainda sinaliza na tela do terminal remoto e no sistema de display quando um comando é executado ou um erro é detectado. Em caso de erro de comunicação, o sistema está programado de forma a parar todos os motores como medida de segurança. Figura 9 – Tela do terminal remoto RS232 10 Operação do terminal remoto Ao ser inicializado, o sistema imprime uma tela com as seguintes opções: Controle de Antena de RADAR =========================== * [0] - Motores parados * Azimute [1] Positivo [2] Negativo * Elevacao [3] Positiva [4] Negativa E.E.U.P.M. - 1.o sem/2004 - M.F./P.C.M/P.T.P. *PRONTO! [V.1.1] Onde as entradas válidas são os números 0 a 4 do teclado do terminal. Estas entradas comandam os movimentos de posicionamento da antena. Por exemplo, a entrada [1] resultará no acionamento do motor de azimute na direção estabelecida como positiva. Paralelamente, o terminal mostrará a mensagem correspondente à ação executada, assim como o display alfanumérico (Figura 10): *PRONTO! [V.1.1] AZIMUTE POSITIVO Figura 10 – Mensagem de monitoramento do azimute Caso seja comandada uma entrada inválida, isto é, um caracter fora da faixa estabelecida, uma condição de erro será sinalizada e as opções de entrada serão reimpressas. Neste caso os motores serão desligados pelo sistema (Figura 11). Após este procedimento, o sistema retorna a condição de recebimento de comandos. *PRONTO! [V.1.1] >>>>ERRO<<<< Controle de Antena de RADAR =========================== * [0] - Motores parados * Azimute [1] Positivo [2] Negativo * Elevacao [3] Positiva [4] Negativa E.E.U.P.M. - 1.o sem/2004 - M.F./P.C.M/P.T.P. MOTORES PARADOS *PRONTO! [V.1.1] 11 Figura 11 – Mensagens da seqüência de erro 12 Referências CANZIAN, E.,”Minicurso: Comunicação Serial RS-232”, CNZ Engenharia e Informática Ltda., apostila LIZZARRAGA, H.,”Técnicas de Comunicación Série para Microcontroladores de la Flia. HC908 que no posean Módulo SCI”, Comentario Tecnico, SyHDe – Soft y Hard Desarrollos M68HC08 Microcontrollers: CPU08 Central Processor Unit Reference Manual, Motorola Semiconductor, Ver 3, EUA, 2001. MC68HC908QY4/QT4/QY2/QT2/QY1/QT1Datasheets, Motorola Semiconductor, Ver. 1, EUA, 2003. DL1414T: Datasheet, Siemens Components, 1993. Apêndice A Esquemas elétricos e lista dos componentes Lista de componentes Esquema 2 - Acionamento dos Motores Quantidade Tipo Valor Ref ======================================================================== 4 2N2222A Q1,Q2,Q3,Q4 4 DIODE 1N4007 D1,D2,D3,D4 2 MOTORSERVO 1516E012S M1,M2 4 RELAY1BM CZ2.530 K1,K2,K3,K4 4 RES 4k7 R1,R2,R3,R4 Esquema 3 - Placa Principal (Microcontrolador) Quantidade Tipo Valor Ref ======================================================================== 2 2N2222A Q1,Q2 1 7406 U2 4 CAP 100nF C5,C7,C8,C9 1 DB9M P1 1 LED AM D7 2 LED VD D3,D5 1 LED VD(RX) D1 2 LED VM D4,D6 1 LED VM(TX) D2 1 LM7805CTB U4 1 MAX232 U1 1 MC68HC908QY2/4 U3 1 POLCAP 100uF C6 4 POLCAP 1uF C1,C2,C3,C4 3 RES 220 R1,R2,R9 2 RES 2k7 R3,R4 4 RES 560 R5,R6,R7,R8 1 XTAL_OSC 20.00000MHz XL1 Esquema 4 - Placa dos Displays Quantidade Tipo Valor Ref ======================================================================== 2 74164 U1,U3 1 74368 U2 3 CAP 100nF C1,C2,C3 4 DL1414T DS1,DS2,DS3,DS4 Apêndice B Listagem do programa fonte em linguagem assembly Motorola 68HC908 Listagem do Programa (Versão 1.1) XDEF Entry,main,t_isr,_Startup Include 'qtqy_registers.inc' t50ms EQU 31249 ;delay de 50ms em 20MHz ;*** Equates para controle dos motores motor_1p motor_1n motor_2p motor_2n EQU EQU EQU EQU 0 1 2 3 pos_m1 neg_m1 pos_m2 neg_m2 stp_mx EQU EQU EQU EQU EQU "1" "2" "3" "4" "0" ;*** Equates para controle da porta serial tser rser EQU 128 EQU 63 pser EQU PORTA ptx prx chr_0 chr_1 ;delay de tx serial 4800 baud em 20MHz ;delay de rx serial 4800 baud em 20MHz EQU 0 EQU 2 EQU $0081 EQU $0082 ;*** Equates para controle de display clear clock dado write EQU 7 EQU EQU 5 EQU 4 pdisp char pos pos_a pos_b contr EQU EQU EQU EQU EQU EQU 6 PORTB $0083 $0084 $0085 $0086 $0087 ;*** Equates para controle de display ;*** Definicoes de mensagens ;************************ 1111111 ;************************1234567890123456 msg_pronto: DC.B "*PRONTO! [V.1.1]",0 msg_erro: DC.B " >>>>ERRO<<<<",0 msg_spare: DC.B "MOTORES PARADOS",0 msg_motor1p: DC.B "AZIMUTE POSITIVO",0 msg_motor1n: DC.B "AZIMUTE NEGATIVO",0 msg_motor2p: DC.B "ELEVAC. POSITIVA",0 msg_motor2n: DC.B "ELEVAC. NEGATIVA",0 disp_cls: DC.B " ",0 ;Nao alterar! ser_crlf: DC.B 13,10,0 msg_intro1: DC.B "Controle de Antena de RADAR",13,10,0 msg_intro2: DC.B "===========================",13,10,0 msg_intro3: DC.B "* [0] - Motores parados",13,10,0 msg_intro4: DC.B "* Azimute [1] Positivo [2] Negativo",13,10,0 msg_intro5: DC.B "* Elevacao [3] Positiva [4] Negativa",13,10,0 msg_intro6: DC.B "E.E.U.P.M. - 1.o sem/2004 M.F./P.C.M/P.T.P.",13,10,0 ;*** Definicoes de mensagens _Startup: Entry: ldhx #$00FF txs clrh sei main: clrx lda sta lda sta #00001001B ;original CONFIG2 #00011001B CONFIG1 lda sta lda sta #$FF PORTA #00000001B DDRA lda sta lda sta lda sta #$FF PORTB #$FF DDRB #$FF PTBPUE ; configura portA como saida apenas em PTA0 ; configura saidas no portB ; habilita resistores de pull-up lda #$02 sta OSCSTAT ; Nao inicia no clock externo sem isso!!! ;========================================= ;*** main_loop: lda sta sta jsr com_loop: #$00 PORTB PORTA introd jsr set_disp ldhx #msg_pronto jsr wr_str jsr dly_1s ldhx #msg_pronto jsr snd_str ldhx #ser_crlf jsr snd_str jsr rd_char ;Display ;Serial ;Leitura de entrada e escolha do motor cmp beq cmp beq cmp beq cmp beq cmp beq parados: pos_m1 motor1p neg_m1 motor1n pos_m2 motor2p neg_m2 motor2n stp_mx parados jsr cls_disp ldhx #msg_erro jsr wr_str ldhx #msg_erro jsr snd_str ldhx #ser_crlf jsr snd_str jsr introd ;Display bclr bclr bclr bclr ; Para todos os motores motor_1p,PORTB motor_1n,PORTB motor_2p,PORTB motor_2n,PORTB jsr dly_1s jsr cls_disp ldhx #msg_spare jsr wr_str ldhx #msg_spare jsr snd_str ldhx #ser_crlf jsr snd_str jsr dly_1s bra com_loop ;*** MOTOR 1 motor1p: jsr bra motor1n: jsr bra mot1p com_loop mot1n com_loop ;*** MOTOR 2 motor2p: jsr bra motor2n: jsr bra jmp mot2p com_loop mot2n com_loop main_loop ;Mensagem de introducao pela serial introd: ldhx #ser_crlf jsr snd_str ldhx #msg_intro1 jsr snd_str ldhx #msg_intro2 jsr snd_str ldhx #ser_crlf jsr snd_str ldhx #msg_intro3 jsr snd_str ldhx #msg_intro4 ;Serial ;Display ;Serial jsr snd_str ldhx #msg_intro5 jsr snd_str ldhx #ser_crlf jsr snd_str ldhx #msg_intro6 jsr snd_str rts ; Rotinas de controle de motor mot1p: jsr cls_disp ldhx #msg_motor1p jsr wr_str ldhx #msg_motor1p jsr snd_str ldhx #ser_crlf jsr snd_str bset motor_1p,PORTB bclr motor_1n,PORTB jsr dly_1s rts mot1n: jsr cls_disp ldhx #msg_motor1n jsr wr_str ldhx #msg_motor1n jsr snd_str ldhx #ser_crlf jsr snd_str bset motor_1n,PORTB bclr motor_1p,PORTB jsr dly_1s rts mot2p: mot2n: jsr cls_disp ldhx #msg_motor2p jsr wr_str ldhx #msg_motor2p jsr snd_str ldhx #ser_crlf jsr snd_str bset motor_2p,PORTB bclr motor_2n,PORTB jsr dly_1s rts jsr cls_disp ldhx #msg_motor2n jsr wr_str ldhx #msg_motor2n jsr snd_str ldhx #ser_crlf jsr snd_str bset motor_2n,PORTB bclr motor_2p,PORTB jsr dly_1s rts ;Serial ;Serial ;Serial ;Serial ;cls_disp - apaga conteudo do display cls_disp: mov #16,contr ; caracteres restantes mov #128,pos_a ; info de display mov #$00,pos_b ; info de caracter mov #$00,pos ldhx #disp_cls jsr wr_str rts ; Escrita de string a partir do endereco passado em #HX wr_str: wr_str2: lda ,X cbeqa #0,eost jsr wr_msgd aix #1 ;sempre usar AIX bra wr_str2 eost: clra rts ; Escrita de msg em display wr_msgd: sta char jsr wr_disp psha lda pos_b eor #$FF and #$03 ora pos_a sta char jsr wr_disp inc pos_b dbnz contr,nao_zero mov #128,pos_a ;Zera controles mov #$00,pos_b mov #16,contr nao_zero: lda pos_b ;Testa fim do display cmp #$04 bhs res_od bra cont_od res_od: lda pos_b ;reset do display e passagem p. o prox. and #$03 sta pos_b lsr pos_a cont_od: pula bclr write,pdisp ;Autoriza escrita jsr dly_st bset write,pdisp rts ; set_disp - Inicializa display set_disp: mov #16,contr mov #128,pos_a mov #$00,pos_b mov #$00,pos bclr clear,pdisp bset write,pdisp bclr dado,pdisp bset clock,pdisp jsr dly_st bset clear,pdisp rts ; Escreve caracter na forma serial wr_disp: psha lda #08 testa_a: cbeqa #00,fim_wr brset 0,char,deu_1b ; caracteres restantes ; info de display ; info de caracter deu_1b: deu_0b: fim_wr: bra deu_0b bset dado,pdisp bclr clock,pdisp jsr dly_st bset clock,pdisp jsr dly_st lsr char deca bra testa_a bclr dado,pdisp bclr clock,pdisp jsr dly_st bset clock,pdisp jsr dly_st lsr char deca bra testa_a pula rts ;*Sub rotinas seriais* ;rd_char - le caractere da serial e devolve valor em A rd_char: mov #$00,chr_1 lda #07 brset prx,pser,* jsr dly_st ;espera start bit le_porta: jsr dly_rs brset prx,pser,rec_1 bra rec_0 rec_1: psha lda chr_1 ora #$80 lsra sta chr_1 pula jsr dly_rs dbnza le_porta bra rd_end rec_0: psha lda chr_1 and #$7F lsra sta chr_1 pula jsr dly_rs dbnza le_porta rd_end: jsr dly_st lda chr_1 rts ;snd_str - Envia string pela serial snd_str: lda ,X cbeqa #0,s_eost jsr snd_char aix #1 ;sempre usar AIX bra snd_str s_eost: clra rts ;snd_chr ;envia caracter no formato 8N1 snd_char: sta chr_0 ;[3] sc_vol: deu_1: deu_0: ret_snd: psha ;[2] lda #08 ;[2] bclr ptx,pser ;[4] start bit (11) jsr dly_st ;[4] brset 0,chr_0,deu_1 ;[5]testa e desvia se igual a 1 bra deu_0 ;[3] bset ptx,pser ;[4]aciona a porta jsr dly_st ;[4]espera lsr chr_0 ;[4]rotaciona byte dbnza sc_vol ;[3]decrementa A e retorna se nao 0 bra ret_snd ;[3] bclr ptx,pser ;[4]aciona a porta jsr dly_st ;[4]espera lsr chr_0 ;[4]rotaciona byte dbnza sc_vol ;[3]decrementa A e retorna se nao 0 bset ptx,pser ;[4]1 stop bit jsr dly_st ;[4] pula ;[2] rts ;[4] ;dly_st - Delay serial p. TX ;Ver 1.1 - Ttotal=13+8*tser dly_st: pshx pshh ldhx #tser loop_s: aix #-1 cphx #0 bne loop_s pulh pulx nop rts ;dly_rs - Delay serial p. TX ;Ver 1.1 - Ttotal=13+8*tser dly_rs: pshx pshh ldhx #rser ;[3] loop_sb: aix #-1 cphx #0 bne loop_sb pulh pulx nop rts dly_1s: loop0: loop1: pshx pshh psha lda ldhx aix cphx bne deca bne pula pulh pulx rts #20 #t50ms #-1 #0 loop1 loop0 ;retorna ;[2] salva registradores ;[2] ;[3] ;[(2+] ;[3+] ;[+3)*tser] ;[2] ;[2] ;[1] ;[4] 1 ciclo serial =1+13+8*tser ;[2] salva registradores ;[2] ;[(2+] ;[3+] ;[+3)*tser] ;[2] ;[2] ;[1] ;[4] 1 ciclo serial =1+13+8*tser ;multiplicador ;fatia de tempo t_isr: done_tisr: rti END ;fim do programa