Autor Tópico: Contrôle de motores com PIC16F628A  (Lida 64187 vezes)

Description:

0 Membros e 1 Visitante estão vendo este tópico.

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #120 Online: 11 de Julho de 2010, 13:40 »

A sua rotina poderia ficar com 4 ou 5 linhas se voce usar a UART interna do PIC. E acho que o "debug" é mais fácil se usar a UART interna.

Isto não é indispensável, mas entendi que iria isar a UART não é?

Bem que eu quero, mas ainda não entendi como fazer. Tem alguma fonte onde eu possa estudar ?? No Datasheet somente achei uma forma de configurar a "USART" no modo asincrono, é por aí ?

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #121 Online: 11 de Julho de 2010, 13:47 »
Para ilustrar esse bate papo quem quiser ver um ROV funcionando veja o filme:


Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: Contrôle de motores com PIC16F628A
« Resposta #122 Online: 11 de Julho de 2010, 13:48 »

A sua rotina poderia ficar com 4 ou 5 linhas se voce usar a UART interna do PIC. E acho que o "debug" é mais fácil se usar a UART interna.

Isto não é indispensável, mas entendi que iria isar a UART não é?

Bem que eu quero, mas ainda não entendi como fazer. Tem alguma fonte onde eu possa estudar ?? No Datasheet somente achei uma forma de configurar a "USART" no modo asincrono, é por aí ?

Sim, é por ai...

Há muitas fontes sobre uso da UART e USART com PICs, inclusive vários Application Notes no site da Microchip.

Offline Blackmore

  • CNCMASTER
  • ******
  • Posts: 1568
  • Sexo: Masculino
  • Profissão: Projetista Mecânico/Automação
Re: Contrôle de motores com PIC16F628A
« Resposta #123 Online: 11 de Julho de 2010, 16:36 »
eu tenho acompanhado este tópico ... e vejo que as informações são bem assimiladas pelo colega forista ... mas uma coisa que eu quero perguntar, apenas a título de curiosidade por não ter visto isso em nenhum post anterior ... Porquê a programação é em Assembly e não em C ? Veja bem ... não digo que esta ou aquela é melhor que a outra ... mas é que pelo "bloqueio" que tenho em desenvolver firmwares em ASM então quando acompanho tópicos com tanta atenção do pessoal eu fico meio q "viajando" ...

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #124 Online: 11 de Julho de 2010, 16:49 »
Porquê a programação é em Assembly e não em C ?

Posso estar errado mas acredito que se eu conseguir dominar um pouco de assembler terei mais facilidade com outras linguagens.

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: Contrôle de motores com PIC16F628A
« Resposta #125 Online: 11 de Julho de 2010, 17:42 »
Porquê a programação é em Assembly e não em C ?

Posso estar errado mas acredito que se eu conseguir dominar um pouco de assembler terei mais facilidade com outras linguagens.

Basicamente ambas são linguagens mas possuem estruturas de contrução de programas bem diferentes. Desse modo, a linguagem assembly ajudaria parcialmente no entendimento da linguagem C.

Além disso, C proporciona maior facilidade de criação, debug e de entendimento do programa. Por outro lado, para economia de recursos (de memória e tempo de processamento), o assembly é bem melhor. Gerando programas menores e mais velozes. Importante em algumas aplicações mais críticas.
Essa economia geralmente é mais importante em sistemas que dispõe de pouca memória ou programas muito grandes para a memória disponível.

Um fator critico ao usar o C ou outra linguagem de mais alto nível (Basic, Forth, Pascal, C#) é a qualidade do compilador e isto é frequentemente desprezado. Pois no final do processo da compilação, é gerado um programa assembly, que é traduzido para linguagem de máquina, que será carregado do microcontrolador. Se esse programa assembly estiver errado (já vi acontecer) ou for grande, há desvantagens no uso de linguagem de nível +alto. E qualidade se compra e custa caro frequentemente.

Assembly também permite que se esteja mais próximo do hardware do microcontrolador, acessando registradores com todas as suas vantagens (velocidade) e limitações (troca de bancos de memória). Permite entender o que é um microcontrolador em detalhes, o que facilitará outros projetos ou a melhoria de um projeto. Mas para o programador eventual, pode ser mais trabalhoso.

Para mim, usar assembly é como guiar um modelo de carro de passeio adaptado para carro de corrida, não há bancos bonitos, não há estofamento interno, os faróis são básicos, ... Ou seja assembly é muito mais poderoso....

Conheço e uso bastante as duas linguagens. Mas tenho preferência pelo assembly pelas razões que expûs e também por que não disponho de um compilador gratuito de boa qualidade, exceto para os PIC18F2550 ou 4550, para os quais a Microchip disponibiliza.

Geralmente, com microcontroladores, eu uso o assembly sempre que possível. Mas se aplicação é mais complexa (usa Ethernet, TCP/IP, USB, acesso a drives de memória de alta capacidade, acessa muitas informações estuturadas ...), aí fujo dele rápido para o C.

« Última modificação: 11 de Julho de 2010, 17:52 por minilathe »

Offline Blackmore

  • CNCMASTER
  • ******
  • Posts: 1568
  • Sexo: Masculino
  • Profissão: Projetista Mecânico/Automação
Re: Contrôle de motores com PIC16F628A
« Resposta #126 Online: 11 de Julho de 2010, 18:47 »
aguizan

entendo ...  :)  não está errado, é bom conhecer ASM até mesmo pq em muitos aplications notes o código disponível é em ASM, e se não conhecer, vc pode ficar igual a mim, perdido algumas vezes.

minilathe

concordo com sua opnião, porém eu entendo que cada vez mais as memórias dos microcontroladores terão maior capacidade (ARM por exemplo alguns com 512k de memória!), mas o conhecimento em ASM não pode ser desprezado.
Não sou conhecedor, não fiz nada de muita exigência de tempo, mas ainda não vi aplicações em que fossem necessário colocar um poquim de ASM nos códigos.
Com tudo isso, vejo que com o tempo apenas a questão "tempo de processamento" será o que fará com que se utilize ASM.  :)

abrax!

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: Contrôle de motores com PIC16F628A
« Resposta #127 Online: 11 de Julho de 2010, 19:16 »
Anderson,

Para ilustrar esse bate papo quem quiser ver um ROV funcionando veja o filme:


Muito bacana esse ROV, percebi que possui vários eixos de liberdade, além de x e y, há eixos de rotação em torno dos eixos (x, z?). Usar um PIC de maior capacidade (quantidade de portas, memória) vai ajudar.

Se puder responder,... tenho visto que ROVs são normalmente usados na área de petróleo (off-shore), para achar navios naufragados,.... para que pretende usar o seu?

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #128 Online: 11 de Julho de 2010, 19:30 »

Se puder responder,... tenho visto que ROVs são normalmente usados na área de petróleo (off-shore), para achar navios naufragados,.... para que pretende usar o seu?

Estou pesquisando a construção com materiais alternativos, mas as utilizações são inúmeras desde a área petrolífera, inspeção de estruturas e cascos de embarcações, inspeção de tubulações, pesquisa, etc, etc, etc. A parte mecânica eu já tenho quase toda resolvida o que está pegando é a eletrônica que ainda preciso aprender e nesse ponto o fórum tem sido de enorme importância.

Offline Blackmore

  • CNCMASTER
  • ******
  • Posts: 1568
  • Sexo: Masculino
  • Profissão: Projetista Mecânico/Automação
Re: Contrôle de motores com PIC16F628A
« Resposta #129 Online: 11 de Julho de 2010, 20:25 »
aguizan

No ano passado, fiz um controle com RF simples de 2 motores DC para o PIPA da faculdade (PIPA é a sigla de Projeto Interdisciplinar de Pesquisa Acadêmica) e devido a necessidade de controlar 2 motores ao mesmo tempo eu utilizei um PIC18F252, tem 2 PWM, serial, AD ... ou seja tudo o que eu precisava para o meu trabalho, montei em protoboard e funcionou certinho apenas sem o módulo RF, mas toda a programação foi feita em C (compilador CCS) e devido a dificuldes profissionais não terminei o trabalho e o semestre.   :-\
Vou procurar o esquema e disponibilizo para que você possa estudar e talvez utilizar alguma coisa em seu projeto.

abrax!
« Última modificação: 11 de Julho de 2010, 20:29 por Blackmore »

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #130 Online: 11 de Julho de 2010, 20:29 »
aguizan

No ano passado, fiz um controle simples de 2 motores DC para o PIPA da faculdade, devido a necessidade de controlar 2 motores ao mesmo tempo eu utilizei um PIC18F252, tem 2 PWM, serial, AD ... ou seja tudo o que eu precisava para o meu trabalho, montei em protoboard e funcionou certinho, mas toda a programação foi em C (compilador CCS) e devido a dificuldes profissionais não terminei o trabalho.
Vou procurar o esquema e disponibilizo para que você possa estudar e talvez utilizar alguma coisa em seu projeto.

abrax!

Blz,

Agradeço desde já. Toda colaboração é bem vinda.

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #131 Online: 11 de Julho de 2010, 20:46 »
A sua rotina poderia ficar com 4 ou 5 linhas se voce usar a UART interna do PIC. E acho que o "debug" é mais fácil se usar a UART interna.


Bom, vamos ver se consigo. Iniciei uma rotina com utilização do módulo UART conforme abaixo. Estou no caminho???



;
;******************************************************************************
;*   SUBROTINA DE TRANSMISSÃO SERIAL utilizando o módulo UART                                         *
;******************************************************************************      

         BANK1
         CLRF           TRISA            ;PORTA DE SAÍDA
         MOVLW   "01100100"         ;SETUP DA TRANSMISSÃO
         MOVWF   TXSTA

         BANK0
         CLRF           PORTA
         MOVLW   "11011000"
         MOVWF   RCSTA

Offline minilathe

  • How to ask questions - The Smart Way...
  • Moderadores
  • CNCMASTER
  • ******
  • Posts: 4295
  • Sexo: Masculino
  • http://science-lakes.com/article43-html.html
  • Cidade - UF: Rio de Janeiro - RJ
  • Nome:: Gil Pinheiro
  • Profissão: Engenheiro e professor universitário
Re: Contrôle de motores com PIC16F628A
« Resposta #132 Online: 11 de Julho de 2010, 20:56 »
Anderson,

Pra te ajudar, fiz o teste a seguir no Proteus, coloquei o trecho com conversor A/D e a porta serial. A cada segundo, o PIC lê da entrada analógica e escreve na porta serial. Conforme mostra a simulação da figura abaixo, onde os valores no terminal são os valores em binários enviados pela UART ao terminal (que seria um PC ou um outro microcontrolador).

Eu fui variando o potenciômetro, por isso os valores no terminal mudam com o tempo.

[attachthumb=1]

Programa asm:


 list P=16F877A
   #include "P16F877A.INC"

   __CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_ON
   ;__CONFIG 0x3F32

   errorlevel -302      ; turn off bank bits warning

    cblock H'20'
       ld_loop_ex
      ld_loop_in
    endc


; Inicio do Programa
   ORG   0h         

; Inicializaçao do PIC, do display e da porta serial
   bcf      STATUS,RP1

   bsf      STATUS,RP0 ; Habilita banco 1
   
   clrf   TRISD          ; porta do display, de saída
   movlw    B'00000010'    ; setup do conversor A/D
   movwf    ADCON1         ; left justify result
                     ; port A = analogue inputs
;
; Ajusta parametros da UART (usando cristal externo de 4MHz)
; Baud Rate = 9600 bps, No Parity, 1 Stop Bit
;
    movlw    0x19             ; 0x19=9600 bps / 0x0C=19200 bps
    movwf    SPBRG
       
    movlw    b'00100100'     ; TX_Enable, assync. mode, brgh = high (2)
    movwf    TXSTA           ; enable Async Transmission, BRGH=1
   
    movlw    b'10111111'     ; RC6 saida, outros bits da PORTC são de entrada
    movwf    TRISC

   bcf      STATUS,RP0       ; Habilita banco 0

   clrf   PORTD          ; zera saídas do display
   movlw    B'01000001'    ; setup da entrada
   movwf    ADCON0          ; f/8, AN0, DONE, A/D On

    movlw    b'01000000'    ; Setup Port C
    movwf    PORTC         ; RC6(TX)=1 others are 0

    movlw    b'10000000'     ; habilita a UART
    movwf    RCSTA
;
; Loop principal
;
start:
   call   read_ad
   call   display
   call   send

   call   delay250ms
   call   delay250ms
   call   delay250ms
   call   delay250ms

   goto   start
;
; Conversor A/D
;
read_ad:
   bsf      ADCON0,GO ; Iniciar conversao
wait:
   btfsc    ADCON0,GO ; Testa se terminou conversao
   goto   wait
   movf   ADRESH,W
   return
;
; Display de LEDs
;
display:
   movwf   PORTD
   return
;
; Envia byte (contido em W) pela UART e espera terminar
;
send:
    movwf    TXREG           ; send data in W
TransWt:
    bsf    STATUS,RP0      ; banco 1
WtHere:
     btfss    TXSTA,TRMT      ; Transmissão terminou se TRUE
    goto    WtHere         ; Senão, espera
    bcf    STATUS,RP0      ; banco 0
    return
;
;-----------------------------------------------------------------------------
;
;   Delay for about 250 ms
;
delay250ms:
    movlw   D'250'
   goto   waitx400
;
;-----------------------------------------------------------------------------
;
;   Delay for about 400x cycles
;
;    Se w=1, temporiza 1ms @ fck = 4MHz
;
waitx400:
    movwf   ld_loop_ex
ld_loopex:
   movlw   (400-4)/4
   movwf   ld_loop_in
ld_loopin:
    decf    ld_loop_in,F
    skpz
    goto    ld_loopin
   decf    ld_loop_ex,F
    skpz
    goto    ld_loopex
   return

END


Agora é contigo....

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #133 Online: 11 de Julho de 2010, 21:05 »
Anderson,

Pra te ajudar,

Gil, você não tem idéia de como ajudou. Agradeço muito. Vou agora mesmo trabalhar e estudar seu código.

Grato

Offline aguizan

  • Fuso
  • **
  • Posts: 158
  • Sexo: Masculino
  • GUIA-CNC
Re: Contrôle de motores com PIC16F628A
« Resposta #134 Online: 12 de Julho de 2010, 10:27 »
Eu fui variando o potenciômetro, por isso os valores no terminal mudam com o tempo.

Agora é contigo....

Gil,

No projeto, cada potenciômetro enviará um sinal analógico que depois de convertido terá que ser acumulado até formar uma "palavra" com todas as informações para um estado específico. Isso posso fazer como na rotina que lhe havia enviado, mascarando  três bits  e deslocando-os até completar o byte para transmissão ?

 

/** * */